From 9f24f80f334401b1c22f0a57c0a20e5f7eee83b8 Mon Sep 17 00:00:00 2001 From: Simos Mikelatos Date: Fri, 19 Jun 2026 07:47:56 +0000 Subject: [PATCH] Fix computer use session error status --- .../desktop-windows-branch-build.yml | 6 ++--- electron/cloud.js | 6 ++++- .../computer-use/computer-use.routes.ts | 25 ++++++++++++++++--- src/i18n/locales/de/settings.json | 1 + src/i18n/locales/fr/settings.json | 1 + src/i18n/locales/it/settings.json | 1 + src/i18n/locales/ja/settings.json | 1 + src/i18n/locales/ko/settings.json | 1 + src/i18n/locales/ru/settings.json | 1 + src/i18n/locales/tr/settings.json | 1 + src/i18n/locales/zh-CN/settings.json | 1 + src/i18n/locales/zh-TW/common.json | 4 +-- src/i18n/locales/zh-TW/settings.json | 1 + 13 files changed, 41 insertions(+), 9 deletions(-) diff --git a/.github/workflows/desktop-windows-branch-build.yml b/.github/workflows/desktop-windows-branch-build.yml index ac5e1213..8ed4c8bf 100644 --- a/.github/workflows/desktop-windows-branch-build.yml +++ b/.github/workflows/desktop-windows-branch-build.yml @@ -14,13 +14,13 @@ jobs: contents: write steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 with: fetch-depth: 0 persist-credentials: false - name: Set up Node.js - uses: actions/setup-node@v6 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: node-version: 22 cache: npm @@ -73,7 +73,7 @@ jobs: cat release/SHASUMS256.txt - name: Upload branch build artifacts - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6 with: name: ${{ steps.artifact.outputs.name }} path: | diff --git a/electron/cloud.js b/electron/cloud.js index d7b74809..5cdfbc59 100644 --- a/electron/cloud.js +++ b/electron/cloud.js @@ -17,7 +17,11 @@ function encryptSecret(secret) { function decryptSecret(record) { if (!record?.value) return null; if (!record.encrypted) return record.value; - return safeStorage.decryptString(Buffer.from(record.value, 'base64')); + try { + return safeStorage.decryptString(Buffer.from(record.value, 'base64')); + } catch { + return null; + } } export class CloudController { diff --git a/server/modules/computer-use/computer-use.routes.ts b/server/modules/computer-use/computer-use.routes.ts index 9d791217..691896b1 100644 --- a/server/modules/computer-use/computer-use.routes.ts +++ b/server/modules/computer-use/computer-use.routes.ts @@ -1,6 +1,7 @@ import express from 'express'; import { computerUseService } from '@/modules/computer-use/computer-use.service.js'; +import { AppError } from '@/shared/utils.js'; const router = express.Router(); @@ -12,12 +13,30 @@ type AuthenticatedRequest = express.Request & { function requireUser(req: AuthenticatedRequest): { id: string | number } { const userId = req.user?.id; - if (userId === undefined || userId === null) { - throw new Error('Authenticated user is required.'); + if (userId === undefined || userId === null || String(userId).trim() === '') { + throw new AppError('Authenticated user is required.', { + code: 'AUTHENTICATED_USER_REQUIRED', + statusCode: 401, + }); } return { id: userId }; } +function getErrorStatusCode(error: unknown, fallbackStatusCode: number): number { + if (error instanceof AppError) { + return error.statusCode; + } + + if (error && typeof error === 'object') { + const statusCode = 'statusCode' in error ? error.statusCode : 'status' in error ? error.status : undefined; + if (typeof statusCode === 'number' && Number.isInteger(statusCode) && statusCode >= 400 && statusCode <= 599) { + return statusCode; + } + } + + return fallbackStatusCode; +} + function readParam(value: string | string[] | undefined): string { return Array.isArray(value) ? value[0] || '' : value || ''; } @@ -92,7 +111,7 @@ router.get('/sessions', async (req: AuthenticatedRequest, res) => { try { res.json({ success: true, data: { sessions: await computerUseService.listSessions(requireUser(req)) } }); } catch (error) { - res.status(401).json({ + res.status(getErrorStatusCode(error, 500)).json({ success: false, error: error instanceof Error ? error.message : 'Failed to list Computer Use sessions.', }); diff --git a/src/i18n/locales/de/settings.json b/src/i18n/locales/de/settings.json index 237e5950..a20e64cd 100644 --- a/src/i18n/locales/de/settings.json +++ b/src/i18n/locales/de/settings.json @@ -94,6 +94,7 @@ "git": "Git", "apiTokens": "API & Token", "tasks": "Aufgaben", + "computer": "Computer Use", "notifications": "Benachrichtigungen", "plugins": "Plugins", "about": "Info" diff --git a/src/i18n/locales/fr/settings.json b/src/i18n/locales/fr/settings.json index 4fab7e1e..0c7d24a8 100644 --- a/src/i18n/locales/fr/settings.json +++ b/src/i18n/locales/fr/settings.json @@ -94,6 +94,7 @@ "git": "Git", "apiTokens": "API & Tokens", "tasks": "Tâches", + "computer": "Computer Use", "notifications": "Notifications", "plugins": "Plugins", "about": "À propos" diff --git a/src/i18n/locales/it/settings.json b/src/i18n/locales/it/settings.json index d283bdb9..ebe3a553 100644 --- a/src/i18n/locales/it/settings.json +++ b/src/i18n/locales/it/settings.json @@ -94,6 +94,7 @@ "git": "Git", "apiTokens": "API e Token", "tasks": "Attività", + "computer": "Computer Use", "notifications": "Notifiche", "plugins": "Plugin", "about": "Informazioni" diff --git a/src/i18n/locales/ja/settings.json b/src/i18n/locales/ja/settings.json index 0ad10c46..3c169850 100644 --- a/src/i18n/locales/ja/settings.json +++ b/src/i18n/locales/ja/settings.json @@ -94,6 +94,7 @@ "git": "Git", "apiTokens": "API & トークン", "tasks": "タスク", + "computer": "Computer Use", "notifications": "通知", "plugins": "プラグイン", "about": "概要" diff --git a/src/i18n/locales/ko/settings.json b/src/i18n/locales/ko/settings.json index 3fd7a285..c9bdb271 100644 --- a/src/i18n/locales/ko/settings.json +++ b/src/i18n/locales/ko/settings.json @@ -94,6 +94,7 @@ "git": "Git", "apiTokens": "API & 토큰", "tasks": "작업", + "computer": "Computer Use", "notifications": "알림", "plugins": "플러그인", "about": "정보" diff --git a/src/i18n/locales/ru/settings.json b/src/i18n/locales/ru/settings.json index 94e88f37..0b3c6a96 100644 --- a/src/i18n/locales/ru/settings.json +++ b/src/i18n/locales/ru/settings.json @@ -94,6 +94,7 @@ "git": "Git", "apiTokens": "API и токены", "tasks": "Задачи", + "computer": "Computer Use", "notifications": "Уведомления", "plugins": "Плагины", "about": "О программе" diff --git a/src/i18n/locales/tr/settings.json b/src/i18n/locales/tr/settings.json index 01763542..7cc02205 100644 --- a/src/i18n/locales/tr/settings.json +++ b/src/i18n/locales/tr/settings.json @@ -94,6 +94,7 @@ "git": "Git", "apiTokens": "API ve Token'lar", "tasks": "Görevler", + "computer": "Computer Use", "notifications": "Bildirimler", "plugins": "Eklentiler", "about": "Hakkında" diff --git a/src/i18n/locales/zh-CN/settings.json b/src/i18n/locales/zh-CN/settings.json index 5567695c..a99ba634 100644 --- a/src/i18n/locales/zh-CN/settings.json +++ b/src/i18n/locales/zh-CN/settings.json @@ -94,6 +94,7 @@ "git": "Git", "apiTokens": "API 和令牌", "tasks": "任务", + "computer": "Computer Use", "notifications": "通知", "plugins": "插件", "about": "关于" diff --git a/src/i18n/locales/zh-TW/common.json b/src/i18n/locales/zh-TW/common.json index e119adb6..1365ce47 100644 --- a/src/i18n/locales/zh-TW/common.json +++ b/src/i18n/locales/zh-TW/common.json @@ -23,8 +23,8 @@ "files": "檔案", "git": "版本控制", "tasks": "任務", - "browser": "Browser", - "computer": "Computer" + "browser": "瀏覽器", + "computer": "電腦" }, "status": { "loading": "載入中...", diff --git a/src/i18n/locales/zh-TW/settings.json b/src/i18n/locales/zh-TW/settings.json index 4fe469bd..ffad79ea 100644 --- a/src/i18n/locales/zh-TW/settings.json +++ b/src/i18n/locales/zh-TW/settings.json @@ -94,6 +94,7 @@ "git": "Git", "apiTokens": "API 和權杖", "tasks": "任務", + "computer": "Computer Use", "notifications": "通知", "plugins": "外掛", "about": "關於"