diff --git a/frontend/package-lock.json b/frontend/package-lock.json index ce1d851cba..2dcc742ef9 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -8,7 +8,6 @@ "name": "windmill", "version": "1.15.1", "dependencies": { - "@codingame/monaco-jsonrpc": "^0.4.0", "@fortawesome/free-brands-svg-icons": "^6.1.1", "@fortawesome/free-solid-svg-icons": "^6.1.1", "@types/vscode": "^1.63.0", @@ -18,7 +17,8 @@ "monaco-languageclient": "^1.0.1", "svelte-awesome": "^3.0.0", "svelte-markdown": "^0.2.1", - "svelte-split-pane": "^0.1.2" + "svelte-split-pane": "^0.1.2", + "vscode-ws-jsonrpc": "^1.0.1" }, "devDependencies": { "@sveltejs/adapter-node": "^1.0.0-next.78", @@ -177,14 +177,6 @@ "node": ">=4" } }, - "node_modules/@codingame/monaco-jsonrpc": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-jsonrpc/-/monaco-jsonrpc-0.4.0.tgz", - "integrity": "sha512-5IQkYvFMyWQWutFhK77Tk5q1VIQoFySElqpAI1fUWXIIAepiYD7xJRawzMgJqhIzER7t44FbBN4uVvoXLRmJ6g==", - "dependencies": { - "vscode-jsonrpc": "^8.0.1" - } - }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -6615,6 +6607,14 @@ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.3.tgz", "integrity": "sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA==" }, + "node_modules/vscode-ws-jsonrpc": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vscode-ws-jsonrpc/-/vscode-ws-jsonrpc-1.0.1.tgz", + "integrity": "sha512-gcaLDOjweVcqBzB6tMQ+B2QesyVrpFskinur8QsuonyOL2THWoK9KUAahpMOnq9SleX0WS92VhnmRhlIM0slNQ==", + "dependencies": { + "vscode-jsonrpc": "^8.0.1" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -6833,14 +6833,6 @@ } } }, - "@codingame/monaco-jsonrpc": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@codingame/monaco-jsonrpc/-/monaco-jsonrpc-0.4.0.tgz", - "integrity": "sha512-5IQkYvFMyWQWutFhK77Tk5q1VIQoFySElqpAI1fUWXIIAepiYD7xJRawzMgJqhIzER7t44FbBN4uVvoXLRmJ6g==", - "requires": { - "vscode-jsonrpc": "^8.0.1" - } - }, "@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -11394,6 +11386,14 @@ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.3.tgz", "integrity": "sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA==" }, + "vscode-ws-jsonrpc": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vscode-ws-jsonrpc/-/vscode-ws-jsonrpc-1.0.1.tgz", + "integrity": "sha512-gcaLDOjweVcqBzB6tMQ+B2QesyVrpFskinur8QsuonyOL2THWoK9KUAahpMOnq9SleX0WS92VhnmRhlIM0slNQ==", + "requires": { + "vscode-jsonrpc": "^8.0.1" + } + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/frontend/package.json b/frontend/package.json index 19973983d1..76426f19e8 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -47,7 +47,6 @@ }, "type": "module", "dependencies": { - "@codingame/monaco-jsonrpc": "^0.4.0", "@fortawesome/free-brands-svg-icons": "^6.1.1", "@fortawesome/free-solid-svg-icons": "^6.1.1", "@types/vscode": "^1.63.0", @@ -57,6 +56,7 @@ "monaco-languageclient": "^1.0.1", "svelte-awesome": "^3.0.0", "svelte-markdown": "^0.2.1", - "svelte-split-pane": "^0.1.2" + "svelte-split-pane": "^0.1.2", + "vscode-ws-jsonrpc": "^1.0.1" } } diff --git a/frontend/src/lib/components/Editor.svelte b/frontend/src/lib/components/Editor.svelte index f15045c5f1..39b8eb4896 100644 --- a/frontend/src/lib/components/Editor.svelte +++ b/frontend/src/lib/components/Editor.svelte @@ -19,7 +19,7 @@ export let formatAction: (() => void) | undefined = undefined export let automaticLayout = true export let websocketAlive = { pyright: false, black: false, deno: false } - export let extraLib: string = (lang == 'typescript' && !deno) ? buildExtraLib() : '' + export let extraLib: string = lang == 'typescript' && !deno ? buildExtraLib() : '' export let extraLibPath: string = 'file:///node_modules/@types/windmill/index.d.ts' let websockets: WebSocket[] = [] @@ -86,9 +86,8 @@ const vscode = await import('vscode') const { RequestType, toSocket, WebSocketMessageReader, WebSocketMessageWriter } = - await import('@codingame/monaco-jsonrpc') - - function createLanguageClient( + await import('vscode-ws-jsonrpc') +s function createLanguageClient( transports: MessageTransports, name: string, initializationOptions?: any diff --git a/frontend/src/lib/logout.ts b/frontend/src/lib/logout.ts index 6418b5e7ca..20a9aff611 100644 --- a/frontend/src/lib/logout.ts +++ b/frontend/src/lib/logout.ts @@ -3,23 +3,26 @@ import { UserService } from '$lib/gen' import { clearStores } from './stores.js' import { sendUserToast } from './utils.js' +function clearCookies() { + document.cookie.split(";").forEach(function (c) { document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/") }) +} export function logoutWithRedirect(rd?: string): void { - const error = encodeURIComponent('You have been logged out because your session has expired.') - goto(`/user/login?error=${error}${rd ? '&rd=' + encodeURIComponent(rd) : ''}`) + const error = document.cookie.includes('token') + ? `error=${encodeURIComponent('You have been logged out because your session has expired.')}&` + : '' + clearCookies() + goto(`/user/login?${error}${rd ? 'rd=' + encodeURIComponent(rd) : ''}`) } export async function logout(logoutMessage?: string): Promise { try { clearStores() await UserService.logout() + clearCookies() goto(`/user/login${logoutMessage ? '?error=' + encodeURIComponent(logoutMessage) : ''}`) sendUserToast('you have been logged out') } catch (error) { - goto( - `/user/login?error=${encodeURIComponent( - 'There was a problem logging you out, check the logs' - )}` - ) + goto('/user/login') console.error(error) } } diff --git a/frontend/src/routes/__layout-root.svelte b/frontend/src/routes/__layout-root.svelte index 5c81899dbd..f1d46aad25 100644 --- a/frontend/src/routes/__layout-root.svelte +++ b/frontend/src/routes/__layout-root.svelte @@ -24,7 +24,8 @@ const monacoEditorUnhandledErrors = [ 'Model not found', 'Connection is disposed.', - 'Connection got disposed.' + 'Connection got disposed.', + 'Stopping server timed out.' ] async function loadUser() { @@ -72,8 +73,10 @@ } if (status == '401') { - sendUserToast('Logged out after a request was unauthorized', true) - logout($page.url.pathname) + if ($page.url.pathname != '/user/login') { + sendUserToast('Logged out after a request was unauthorized', true) + logout($page.url.pathname) + } } else { if (body) { sendUserToast(`${body}`, true) diff --git a/frontend/src/routes/__layout@root.svelte b/frontend/src/routes/__layout@root.svelte index 3cc9fa44cc..6a30c570c5 100644 --- a/frontend/src/routes/__layout@root.svelte +++ b/frontend/src/routes/__layout@root.svelte @@ -21,6 +21,7 @@ import { onMount } from 'svelte' import Icon from 'svelte-awesome' import '../app.css' + import { page } from '$app/stores' import { OpenAPI } from '$lib/gen' import { superadmin, userStore, usersWorkspaceStore, workspaceStore } from '$lib/stores' import { clickOutside, sendUserToast, sleep } from '$lib/utils' @@ -56,12 +57,9 @@ isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent) //Mobile isCollapsed = isMobile - await sleep(2000) - if (!$workspaceStore || !$userStore) { - sendUserToast( - 'Workspace not set or corresponding to another user. Redirecting to list of workspaces.', - true - ) + if (!document.cookie.includes('token')) { + goto('/user/login') + } else if (!$workspaceStore) { goto('/user/workspaces') } }) diff --git a/frontend/src/routes/index.svelte b/frontend/src/routes/index.svelte index 02a2f48436..b93804abbf 100644 --- a/frontend/src/routes/index.svelte +++ b/frontend/src/routes/index.svelte @@ -5,9 +5,7 @@ $workspaceStore = localStorage.getItem('workspace') ?? undefined - if (!$workspaceStore) { - goto('/user/workspaces') - } else { + if ($workspaceStore) { goto('/scripts') } diff --git a/frontend/src/routes/user/workspaces@user.svelte b/frontend/src/routes/user/workspaces@user.svelte index c5df5bac30..587dfa1bbc 100644 --- a/frontend/src/routes/user/workspaces@user.svelte +++ b/frontend/src/routes/user/workspaces@user.svelte @@ -16,7 +16,9 @@ let workspaces: { id: string; name: string; username: string }[] = [] async function loadInvites() { - invites = await UserService.listWorkspaceInvites() + try { + invites = await UserService.listWorkspaceInvites() + } catch {} } async function loadWorkspaces() {