Skip to content

Commit fb35ff7

Browse files
committed
Token management into user_impl
1 parent 7b0c2dd commit fb35ff7

File tree

2 files changed

+29
-20
lines changed

2 files changed

+29
-20
lines changed

packages-exp/auth-exp/src/core/user/token_manager.ts

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export const TOKEN_REFRESH_BUFFER_MS = 30_000;
3131
export interface Tokens {
3232
accessToken: string;
3333
refreshToken: string | null;
34+
wasRefreshed: boolean;
3435
}
3536

3637
export class StsTokenManager {
@@ -50,14 +51,16 @@ export class StsTokenManager {
5051
refreshToken,
5152
expiresIn: expiresInSec
5253
}: IdTokenResponse): void {
53-
this.refreshToken = refreshToken;
54-
this.accessToken = idToken;
55-
this.expirationTime = Date.now() + Number(expiresInSec) * 1000;
54+
this.updateTokensAndExpiration(idToken, refreshToken, expiresInSec);
5655
}
5756

5857
async getToken(auth: Auth, forceRefresh = false): Promise<Tokens|null> {
5958
if (!forceRefresh && this.accessToken && !this.isExpired) {
60-
return this.tokens;
59+
return {
60+
accessToken: this.accessToken,
61+
refreshToken: this.refreshToken,
62+
wasRefreshed: false,
63+
};
6164
}
6265

6366
if (this.accessToken && !this.refreshToken) {
@@ -71,30 +74,30 @@ export class StsTokenManager {
7174
}
7275

7376
await this.refresh(auth, this.refreshToken);
74-
return this.tokens;
75-
}
76-
77-
toPlainObject(): object {
7877
return {
78+
accessToken: this.accessToken!,
7979
refreshToken: this.refreshToken,
80-
accessToken: this.accessToken,
81-
expirationTime: this.expirationTime
80+
wasRefreshed: true,
8281
};
8382
}
8483

85-
private get tokens(): Tokens {
84+
toPlainObject(): object {
8685
return {
87-
accessToken: this.accessToken!,
8886
refreshToken: this.refreshToken,
87+
accessToken: this.accessToken,
88+
expirationTime: this.expirationTime
8989
};
9090
}
9191

9292
private async refresh(auth: Auth, refreshToken: string) {
9393
const {access_token, refresh_token, expires_in} = await requestStsToken(auth, refreshToken);
94-
95-
this.accessToken = access_token || null;
96-
this.refreshToken = refresh_token || null;
97-
this.expirationTime = expires_in ? Date.now() + Number(expires_in) * 1000 : null;
94+
this.updateTokensAndExpiration(access_token, refresh_token, expires_in);
95+
}
96+
97+
private updateTokensAndExpiration(accessToken: string|undefined, refreshToken: string|undefined, expiresInSec: string|undefined) {
98+
this.refreshToken = refreshToken || null;
99+
this.accessToken = accessToken || null;
100+
this.expirationTime = expiresInSec ? Date.now() + Number(expiresInSec) * 1000 : null;
98101
}
99102

100103
static fromPlainObject(

packages-exp/auth-exp/src/core/user/user_impl.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,18 @@ export class UserImpl implements User {
7575
}
7676

7777
async getIdToken(forceRefresh?: boolean): Promise<string> {
78-
const { refreshToken, accessToken } = await this.stsTokenManager.getToken(
79-
forceRefresh
80-
);
78+
const tokens = await this.stsTokenManager.getToken(this.auth, forceRefresh);
79+
assert(tokens, this.auth.name);
80+
81+
// TODO: remove ! after #2934 is merged --
82+
const { refreshToken, accessToken, /* wasRefreshed */ } = tokens!;
8183
this.refreshToken = refreshToken || '';
8284

83-
// TODO: notify listeners at this point
85+
// TODO: Uncomment after #2961 is merged
86+
// if (wasRefreshed && this.auth.currentUser === this) {
87+
// this.auth._notifyListeners();
88+
// }
89+
8490
return accessToken;
8591
}
8692

0 commit comments

Comments
 (0)