diff --git a/src/services/LceOnlineService.ts b/src/services/LceOnlineService.ts index 85d0748..6a2d3c3 100644 --- a/src/services/LceOnlineService.ts +++ b/src/services/LceOnlineService.ts @@ -23,6 +23,9 @@ export class LceOnlineService { private _listeners: Array<() => void> = []; constructor() { this.loadSession(); + if (this._session) { + this.refreshToken(); + } } onSessionChange(listener: () => void): () => void { @@ -195,6 +198,28 @@ export class LceOnlineService { return data; } + async refreshToken(): Promise { + if (!this._session) return false; + + try { + const res = await this.request("POST", "/refreshtoken", null, AUTH_BASE_URL); + if (typeof res === "string" && res.startsWith("-")) { + const [username, token] = res.slice(1).split(":"); + this._session.accessToken = token; + this._session.account = { username, displayName: username }; + this.saveSession(); + this._notify(); + return true; + } + this.logoutLocal(); + return false; + } catch (e) { + console.warn("Failed to refresh token", e); + this.logoutLocal() + return false; + } + } + async getSocialLists(): Promise<{ friends: string[]; requests: string[];