From a51d04341eb141ce3730a454827e98e1b5a3ed30 Mon Sep 17 00:00:00 2001 From: abearxiong Date: Thu, 5 Feb 2026 04:06:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20@kevisual/api=20=E4=BE=9D?= =?UTF-8?q?=E8=B5=96=EF=BC=8C=E6=9B=B4=E6=96=B0=20WebSocket=20=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E5=8F=91=E9=80=81=E9=80=BB=E8=BE=91=EF=BC=8C=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E4=B8=8A=E4=B8=8B=E6=96=87=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + pnpm-lock.yaml | 33 +++++++++++++++++++++++++++++++++ src/modules/ws-proxy/manager.ts | 8 ++++++-- src/modules/ws-proxy/proxy.ts | 5 ++++- src/routes/app-manager/list.ts | 2 ++ 5 files changed, 46 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index b14b3c8..bc668d2 100644 --- a/package.json +++ b/package.json @@ -73,6 +73,7 @@ }, "devDependencies": { "@aws-sdk/client-s3": "^3.981.0", + "@kevisual/api": "^0.0.44", "@kevisual/code-center-module": "0.0.24", "@kevisual/context": "^0.0.4", "@kevisual/file-listener": "^0.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 82dab3a..f7333af 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -85,6 +85,9 @@ importers: '@aws-sdk/client-s3': specifier: ^3.981.0 version: 3.981.0 + '@kevisual/api': + specifier: ^0.0.44 + version: 0.0.44 '@kevisual/code-center-module': specifier: 0.0.24 version: 0.0.24(dotenv@17.2.3) @@ -841,6 +844,9 @@ packages: '@kevisual/ai@0.0.24': resolution: {integrity: sha512-7jvZk1/L//VIClK7usuNgN4ZA9Etgbooka1Sj5quE/0UywR+NNnwqXVZ89Y1fBhI1TkhauDsdJBAtcQ7r/vbVw==} + '@kevisual/api@0.0.44': + resolution: {integrity: sha512-KA2b17pxW1pTPWa4zsTSRTiGTmwdkIesV1ig51MyISUllita5VPqZ6UYYDJQTHuPzYcIkuodQ9iWTEZNM9AkFw==} + '@kevisual/auth@1.0.5': resolution: {integrity: sha512-GwsLj7unKXi7lmMiIIgdig4LwwLiDJnOy15HHZR5gMbyK6s5/uJiMY5RXPB2+onGzTNDqFo/hXjsD2wkerHPVg==} @@ -1892,6 +1898,10 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + fuse.js@7.1.0: + resolution: {integrity: sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==} + engines: {node: '>=10'} + get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} @@ -2287,6 +2297,9 @@ packages: pako@0.2.9: resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} + path-browserify-esm@1.0.6: + resolution: {integrity: sha512-9nUwYvvu/yq1PYrUyYCihNWmpzacaRYF6gGbjLWErrZ4MRDWyfPN7RpE8E7tsw8eqBU/rr7mcoTXbS+Vih8uUA==} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -2625,6 +2638,9 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + spark-md5@3.0.2: + resolution: {integrity: sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==} + split-on-first@1.1.0: resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} engines: {node: '>=6'} @@ -3622,6 +3638,17 @@ snapshots: '@kevisual/permission': 0.0.3 '@kevisual/query': 0.0.38 + '@kevisual/api@0.0.44': + dependencies: + '@kevisual/js-filter': 0.0.5 + '@kevisual/load': 0.0.6 + es-toolkit: 1.44.0 + eventemitter3: 5.0.4 + fuse.js: 7.1.0 + nanoid: 5.1.6 + path-browserify-esm: 1.0.6 + spark-md5: 3.0.2 + '@kevisual/auth@1.0.5': {} '@kevisual/auth@2.0.3': {} @@ -4838,6 +4865,8 @@ snapshots: function-bind@1.1.2: {} + fuse.js@7.1.0: {} + get-intrinsic@1.2.4: dependencies: es-errors: 1.3.0 @@ -5254,6 +5283,8 @@ snapshots: pako@0.2.9: {} + path-browserify-esm@1.0.6: {} + path-key@3.1.1: {} path-parse@1.0.7: {} @@ -5674,6 +5705,8 @@ snapshots: source-map@0.6.1: {} + spark-md5@3.0.2: {} + split-on-first@1.1.0: {} split2@4.2.0: {} diff --git a/src/modules/ws-proxy/manager.ts b/src/modules/ws-proxy/manager.ts index 2abec23..007d27e 100644 --- a/src/modules/ws-proxy/manager.ts +++ b/src/modules/ws-proxy/manager.ts @@ -2,6 +2,7 @@ import { nanoid } from 'nanoid'; import { WebSocket } from 'ws'; import { logger } from '../logger.ts'; import { EventEmitter } from 'eventemitter3'; + class WsMessage { ws: WebSocket; user?: string; @@ -16,7 +17,7 @@ class WsMessage { this.emitter.emit(data.id, data?.data); } } - async sendData(data: any, opts?: { timeout?: number }) { + async sendData(data: any, context?: any, opts?: { timeout?: number }) { if (this.ws.readyState !== WebSocket.OPEN) { return { code: 500, message: 'WebSocket is not open' }; } @@ -25,7 +26,10 @@ class WsMessage { const message = JSON.stringify({ id, type: 'proxy', - data, + data: { + message: data, + context: context || {}, + }, }); logger.info('ws-proxy sendData', message); this.ws.send(message); diff --git a/src/modules/ws-proxy/proxy.ts b/src/modules/ws-proxy/proxy.ts index 6486118..4016ff4 100644 --- a/src/modules/ws-proxy/proxy.ts +++ b/src/modules/ws-proxy/proxy.ts @@ -74,7 +74,10 @@ export const UserV1Proxy = async (req: IncomingMessage, res: ServerResponse, opt res.end(await html); return true; } - const value = await client.sendData(data); + // const { token, cookies, ...rest } = data; + const value = await client.sendData(data, { + state: { tokenUser: loginUser.tokenUser }, + }); if (value) { res.writeHead(200, { 'Content-Type': 'application/json' }); res.end(JSON.stringify(value)); diff --git a/src/routes/app-manager/list.ts b/src/routes/app-manager/list.ts index af92b53..4338d29 100644 --- a/src/routes/app-manager/list.ts +++ b/src/routes/app-manager/list.ts @@ -282,6 +282,8 @@ app ctx.throw('app 未发现'); } if (detect) { + const appKey = appList.key; + const version = appList.version; // 自动检测最新版本 const res = await callDetectAppVersion({ appKey, version, username: username || tokenUser.username }, ctx.query.token); if (res.code !== 200) {