feat: implement desktop authorization recovery handling and session management improvements
Desktop Client Build / Resolve Build Metadata (push) Successful in 24s
Desktop Client Build / Build Desktop Client (push) Successful in 21m30s
Desktop Client Build / Publish Client Artifacts to NAS (push) Successful in 26s

This commit is contained in:
2026-06-24 11:00:19 +08:00
parent 0afd082d96
commit 6b60438f25
6 changed files with 317 additions and 19 deletions
+22 -2
View File
@@ -39,6 +39,17 @@ interface WindowModeRequest {
animate?: boolean
}
interface DesktopAuthRecoveryRequest {
reason: 'desktop-client-token-unauthorized'
method: string
path: string
status: number
code?: number
message: string
requestId: string
at: number
}
interface DesktopAppSettings {
openAtLogin: boolean
keepRunningInBackground: boolean
@@ -243,10 +254,19 @@ const desktopBridge = {
ipcRenderer.invoke(
'desktop:runtime-session-rotate-client-token',
) as Promise<DesktopClientRotateResponse>,
releaseRuntimeSession: (revoke?: boolean) =>
ipcRenderer.invoke('desktop:runtime-session-release', revoke) as Promise<null>,
releaseRuntimeSession: (revoke?: boolean, options?: { skipRemote?: boolean }) =>
ipcRenderer.invoke('desktop:runtime-session-release', revoke, options) as Promise<null>,
setWindowMode: (mode: 'login' | 'main', request?: WindowModeRequest) =>
ipcRenderer.invoke('desktop:set-window-mode', mode, request) as Promise<null>,
onAuthRecoveryRequested: (listener: (event: DesktopAuthRecoveryRequest) => void) => {
const wrapped = (_event: IpcRendererEvent, payload: DesktopAuthRecoveryRequest) => {
listener(payload)
}
ipcRenderer.on('desktop:auth-recovery-requested', wrapped)
return () => {
ipcRenderer.off('desktop:auth-recovery-requested', wrapped)
}
},
onRuntimeInvalidated: (
listener: (event: {
reason: