diff --git a/src/matrix/Client.js b/src/matrix/Client.js index 0eb9f6e0..4d4cac00 100644 --- a/src/matrix/Client.js +++ b/src/matrix/Client.js @@ -337,6 +337,16 @@ export class Client { } } + /** + * Update the access token in use by the client. + * Will also update the token in session storage. + * @param {string} token A Matrix Access Token + */ + async updateAccessToken(token) { + this._session.updateAccessToken(token); + await this._platform.sessionInfoStorage.updateAccessToken(this._sessionId, token); + } + async _waitForFirstSync() { this._sync.start(); this._status.set(LoadStatus.FirstSync); diff --git a/src/matrix/sessioninfo/localstorage/SessionInfoStorage.ts b/src/matrix/sessioninfo/localstorage/SessionInfoStorage.ts index d6596a61..795333bc 100644 --- a/src/matrix/sessioninfo/localstorage/SessionInfoStorage.ts +++ b/src/matrix/sessioninfo/localstorage/SessionInfoStorage.ts @@ -37,6 +37,7 @@ interface ISessionInfo { interface ISessionInfoStorage { getAll(): Promise; updateLastUsed(id: string, timestamp: number): Promise; + updateAccessToken(id: string, token: string): Promise; get(id: string): Promise; add(sessionInfo: ISessionInfo): Promise; delete(sessionId: string): Promise; @@ -60,14 +61,22 @@ export class SessionInfoStorage implements ISessionInfoStorage { return Promise.resolve([]); } + async updateAccessToken(id: string, accessToken: string): Promise { + const sessions = await this.getAll(); + const session = sessions.find(session => session.id === id); + if (!session) { + throw Error('No session found'); + } + session.accessToken = accessToken; + localStorage.setItem(this._name, JSON.stringify(sessions)); + } + async updateLastUsed(id: string, timestamp: number): Promise { const sessions = await this.getAll(); - if (sessions) { - const session = sessions.find(session => session.id === id); - if (session) { - session.lastUsed = timestamp; - localStorage.setItem(this._name, JSON.stringify(sessions)); - } + const session = sessions.find(session => session.id === id); + if (session) { + session.lastUsed = timestamp; + localStorage.setItem(this._name, JSON.stringify(sessions)); } }