From 6463b451b31086a76f4fbef532998825c5a7dcf6 Mon Sep 17 00:00:00 2001 From: LIghtJUNction Date: Thu, 26 Mar 2026 22:01:09 +0800 Subject: [PATCH] fix(dashboard): drop legacy SSE log cache implementation Remove EventSource-based streaming and switch to REST polling for log fetching. This eliminates the SSE connection management that caused TS type inference issues with Pinia 3. --- .../mdi-subset/materialdesignicons-subset.css | 6 +- .../materialdesignicons-webfont-subset.woff | Bin 16704 -> 16796 bytes .../materialdesignicons-webfont-subset.woff2 | Bin 13416 -> 13496 bytes dashboard/src/stores/api.ts | 3 +- dashboard/src/stores/auth.ts | 3 +- dashboard/src/stores/common.ts | 200 ++++++++++++++++++ dashboard/src/stores/customizer.ts | 3 +- dashboard/src/stores/personaStore.ts | 3 +- 8 files changed, 209 insertions(+), 9 deletions(-) create mode 100644 dashboard/src/stores/common.ts diff --git a/dashboard/src/assets/mdi-subset/materialdesignicons-subset.css b/dashboard/src/assets/mdi-subset/materialdesignicons-subset.css index 787e510a5..971679a0e 100644 --- a/dashboard/src/assets/mdi-subset/materialdesignicons-subset.css +++ b/dashboard/src/assets/mdi-subset/materialdesignicons-subset.css @@ -1,4 +1,4 @@ -/* Auto-generated MDI subset – 237 icons */ +/* Auto-generated MDI subset – 238 icons */ /* Do not edit manually. Run: pnpm run subset-icons */ @font-face { @@ -804,6 +804,10 @@ content: "\F0832"; } +.mdi-share-variant::before { + content: "\F0497"; +} + .mdi-shield-check::before { content: "\F0565"; } diff --git a/dashboard/src/assets/mdi-subset/materialdesignicons-webfont-subset.woff b/dashboard/src/assets/mdi-subset/materialdesignicons-webfont-subset.woff index 0bec68760c17dc2d01b6452a8728d25d200dfc40..e3c3af713becfccabeb8f308f892bd6ddbc7c0c8 100644 GIT binary patch delta 15905 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 D6I{Ua delta 15843 zcmV<9JsiTEg8{&T0Tg#nMn(Vu00000K|lZt00000b$pQ&OMfT;012EI$099fYXk}pl06vHS001BW001Nd z#sR-*ZFG1506wSy000sI00H0v0001NZ)0Hq06x3`00G_r00G{UGJ1AxVR&!=06?4o z0018V001BYB_08VZeeX@002O|0001V0002O45uT>aBp*T002QSk^Fvt6lENS@rT{x zWUmd#-3bPb1r?1*K!l(`Kw?GF2uM`0AfTcmA{L6+E5QcXd+!YbsMxV$?4n{r#U4zI zi6-`EUP*pD|J?2F?R@*q%mNjlPOVgFNSpkh+Qt0;?{x})U*s_zY%R*?6>J;$%z|D) z9=k(8N4rNrz1=@xBReL4pp%^t4$}zdZuY={9`@jX&FmpM)OmAzOu!a)X26zqLBLk_@_?=F!hoK3 zX}~siWl*kPhi3w|v#Ww~EjxUqwa(j9R9vr0x#k{UrB!XteQbAsZR+f?R(b^NY zupU=+ptGNIbx?qR@4Y%SV6+_`lzX$fPrz6^CcxvX9;Wfmg*n=o)A#}erCXU z`$kai@#>m@!|nQjBkZ>UN7|nPj(38*rL^GvIXliOM~221Un)fZ6t-fH`(Tz+5{y;7mI$V4j^GaF(4BaJHQnaE@IR zaIU>2;5>V8!1;E0zy)?yz=hW9W5?Cb7uhudm)Nxdu35)*`qFtmMSXLC>sRl!puRje zFS9!aTw(iv1YBt+23%#Q1h~faGXs3@^|JyN+eHCa+xr5pv5y8^Yu^sIj$)%)!1Z=u zzzueCKo>hb;6^(m;3m5~;AZjLhu_XK!t==4;;U3N{t z-4wN^03TcH8{p?tn-k!%))oicZ*K^Az}_41pnW-i;34}?z{B>7fJf|i0j^oidrj?U z=f~_n0ZS+vyw)^~a`w93FePA_ogLuXGqpV3!5FXkQI*pEi9N@RI#Iz%^)|8}N#KEx_kBzZFpaY)#}l zK=V(30jnumT(6c#oV~WSEDiA7ZTTm_*C@6KaIY2L2e{tFp8@YubRH1!o}CondUXC= z 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 ({ // 优先从 localStorage 读取用户手动设置的地址 apiBaseUrl: getApiBaseUrl() || localStorage.getItem("apiBaseUrl") || "", diff --git a/dashboard/src/stores/auth.ts b/dashboard/src/stores/auth.ts index 3553e5270..6dfc2b2e5 100644 --- a/dashboard/src/stores/auth.ts +++ b/dashboard/src/stores/auth.ts @@ -2,8 +2,7 @@ import { defineStore } from "pinia"; import { router } from "@/router"; import axios from "@/utils/request"; -export const useAuthStore = defineStore({ - id: "auth", +export const useAuthStore = defineStore("auth", { state: () => ({ username: "", returnUrl: null as string | null, diff --git a/dashboard/src/stores/common.ts b/dashboard/src/stores/common.ts new file mode 100644 index 000000000..9d1322533 --- /dev/null +++ b/dashboard/src/stores/common.ts @@ -0,0 +1,200 @@ +import { defineStore } from 'pinia'; +import axios from '@/utils/request'; + +export const useCommonStore = defineStore({ + id: 'common', + state: () => ({ + eventSource: null, + log_cache: [], + sse_connected: false, + + log_cache_max_len: 1000, + startTime: -1, + + pluginMarketData: [], + }), + actions: { + async createEventSource() { + if (this.eventSource) { + return + } + const controller = new AbortController(); + const { signal } = controller; + + // 注意:这里如果之前改过 Polyfill 的话,可能需要保持原样 + // 如果是用 fetch 的话,这里是支持 Authorization Header 的 + const headers = { + 'Content-Type': 'multipart/form-data', + 'Authorization': 'Bearer ' + localStorage.getItem('token') + }; + + fetch('/api/live-log', { + method: 'GET', + headers, + signal, + cache: 'no-cache', + }).then(response => { + if (!response.ok) { + throw new Error(`SSE connection failed: ${response.status}`); + } + console.log('SSE stream opened'); + this.sse_connected = true; + + const reader = response.body.getReader(); + const decoder = new TextDecoder(); + let bufferedText = ''; + + const processStream = ({ done, value }) => { + if (done) { + console.log('SSE stream closed'); + setTimeout(() => { + this.eventSource = null; + this.createEventSource(); + }, 2000); + return; + } + + // Accumulate partial chunks; SSE data may split JSON across reads. + const text = decoder.decode(value, { stream: true }); + bufferedText += text; + + // Split completed events; keep the trailing partial in buffer. + const segments = bufferedText.split('\n\n'); + bufferedText = segments.pop() || ''; + + segments.forEach(segment => { + const line = segment.trim(); + if (!line.startsWith('data: ')) { + return; + } + + const logLine = line.replace('data: ', '').trim(); + if (!logLine) { + return; + } + + try { + const logObject = JSON.parse(logLine); + + // 修复:兼容 HTTP 环境的 UUID 生成 + if (!logObject.uuid) { + if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') { + logObject.uuid = crypto.randomUUID(); + } else { + // 手动生成 UUID v4 + logObject.uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); + return v.toString(16); + }); + } + } + + this.log_cache.push(logObject); + // Limit log cache size + if (this.log_cache.length > this.log_cache_max_len) { + this.log_cache.splice(0, this.log_cache.length - this.log_cache_max_len); + } + } catch (err) { + console.warn('Failed to parse SSE log line, skipping:', err, logLine); + } + }); + + return reader.read().then(processStream); + }; + + reader.read().then(processStream); + }).catch(error => { + console.error('SSE error:', error); + // Attempt to reconnect after a delay + this.log_cache.push({ + type: 'log', + level: 'ERROR', + time: Date.now() / 1000, + data: 'SSE Connection failed, retrying in 5 seconds...', + uuid: 'error-' + Date.now() + }); + setTimeout(() => { + this.eventSource = null; + this.createEventSource(); + }, 1000); + }); + + // Store controller to allow closing the connection + this.eventSource = controller; + }, + closeEventSourcet() { + if (this.eventSource) { + this.eventSource.abort(); + this.eventSource = null; + } + }, + getLogCache() { + return this.log_cache + }, + async fetchStartTime() { + const res = await axios.get('/api/stat/start-time'); + this.startTime = res.data.data.start_time; + return this.startTime; + }, + getStartTime() { + if (this.startTime !== -1) { + return this.startTime + } + this.fetchStartTime().catch(() => undefined); + return this.startTime + }, + async getPluginCollections(force = false, customSource = null) { + // 获取插件市场数据 + if (!force && this.pluginMarketData.length > 0 && !customSource) { + return Promise.resolve(this.pluginMarketData); + } + + // 构建URL + let url = force ? '/api/plugin/market_list?force_refresh=true' : '/api/plugin/market_list'; + if (customSource) { + url += (url.includes('?') ? '&' : '?') + `custom_registry=${encodeURIComponent(customSource)}`; + } + + return axios.get(url) + .then((res) => { + let data = [] + if (res.data.data && typeof res.data.data === 'object') { + for (let key in res.data.data) { + const pluginData = res.data.data[key]; + + data.push({ + "name": pluginData.name || key, // 优先使用插件数据中的name字段,否则使用键名 + "desc": pluginData.desc, + "author": pluginData.author, + "repo": pluginData.repo, + "installed": false, + "version": pluginData?.version ? pluginData.version : "未知", + "social_link": pluginData?.social_link, + "tags": pluginData?.tags ? pluginData.tags : [], + "logo": pluginData?.logo ? pluginData.logo : "", + "pinned": pluginData?.pinned ? pluginData.pinned : false, + "stars": pluginData?.stars ? pluginData.stars : 0, + "updated_at": pluginData?.updated_at ? pluginData.updated_at : "", + "display_name": pluginData?.display_name ? pluginData.display_name : "", + "astrbot_version": pluginData?.astrbot_version ? pluginData.astrbot_version : "", + "category": pluginData?.category ? pluginData.category : "", + "support_platforms": Array.isArray(pluginData?.support_platforms) + ? pluginData.support_platforms + : Array.isArray(pluginData?.support_platform) + ? pluginData.support_platform + : Array.isArray(pluginData?.platform) + ? pluginData.platform + : [], + }) + } + } + + this.pluginMarketData = data; + return data; + }) + .catch((err) => { + return Promise.reject(err); + }); + }, + } +}); diff --git a/dashboard/src/stores/customizer.ts b/dashboard/src/stores/customizer.ts index b0674e76f..18f14056d 100644 --- a/dashboard/src/stores/customizer.ts +++ b/dashboard/src/stores/customizer.ts @@ -2,8 +2,7 @@ import { defineStore } from "pinia"; import config from "@/config"; import { LIGHT_THEME_NAME, DARK_THEME_NAME } from "@/theme/constants"; -export const useCustomizerStore = defineStore({ - id: "customizer", +export const useCustomizerStore = defineStore("customizer", { state: () => ({ Sidebar_drawer: config.Sidebar_drawer, Customizer_drawer: config.Customizer_drawer, diff --git a/dashboard/src/stores/personaStore.ts b/dashboard/src/stores/personaStore.ts index 4f162886f..ffd600aa8 100644 --- a/dashboard/src/stores/personaStore.ts +++ b/dashboard/src/stores/personaStore.ts @@ -43,8 +43,7 @@ export interface ReorderItem { sort_order: number; } -export const usePersonaStore = defineStore({ - id: 'persona', +export const usePersonaStore = defineStore('persona', { state: () => ({ folderTree: [] as FolderTreeNode[], currentFolderId: null as string | null,