@@ -84,6 +84,13 @@ export async function getToken(
84
84
}
85
85
}
86
86
87
+ if ( token && ! isValid ( token ) ) {
88
+ // If an invalid token was found in memory or indexedDB, clear token from
89
+ // memory and the local variable.
90
+ setState ( app , { ...state , token : undefined } ) ;
91
+ token = undefined ;
92
+ }
93
+
87
94
// Return the cached token (from either memory or indexedDB) if it's valid
88
95
if ( ! forceRefresh && token && isValid ( token ) ) {
89
96
return {
@@ -107,14 +114,14 @@ export async function getToken(
107
114
state . exchangeTokenPromise = exchangeToken (
108
115
getExchangeDebugTokenRequest ( app , await getDebugToken ( ) ) ,
109
116
appCheck . heartbeatServiceProvider
110
- ) . then ( token => {
117
+ ) . finally ( ( ) => {
118
+ // Clear promise when settled - either resolved or rejected.
111
119
state . exchangeTokenPromise = undefined ;
112
- return token ;
113
120
} ) ;
114
121
shouldCallListeners = true ;
115
122
}
116
123
const tokenFromDebugExchange : AppCheckTokenInternal =
117
- await state . exchangeTokenPromise ;
124
+ await state . exchangeTokenPromise ! ;
118
125
// Write debug token to indexedDB.
119
126
await writeTokenToStorage ( app , tokenFromDebugExchange ) ;
120
127
// Write debug token to state.
@@ -131,9 +138,9 @@ export async function getToken(
131
138
// state.provider is populated in initializeAppCheck()
132
139
// ensureActivated() at the top of this function checks that
133
140
// initializeAppCheck() has been called.
134
- state . exchangeTokenPromise = state . provider ! . getToken ( ) . then ( token => {
141
+ state . exchangeTokenPromise = state . provider ! . getToken ( ) . finally ( ( ) => {
142
+ // Clear promise when settled - either resolved or rejected.
135
143
state . exchangeTokenPromise = undefined ;
136
- return token ;
137
144
} ) ;
138
145
shouldCallListeners = true ;
139
146
}
@@ -151,7 +158,7 @@ export async function getToken(
151
158
}
152
159
153
160
let interopTokenResult : AppCheckTokenResult | undefined ;
154
- if ( ! token ) {
161
+ if ( ! token || error ) {
155
162
// if token is undefined, there must be an error.
156
163
// we return a dummy token along with the error
157
164
interopTokenResult = makeDummyTokenResult ( error ! ) ;
@@ -290,7 +297,7 @@ function createTokenRefresher(appCheck: AppCheckService): Refresher {
290
297
let nextRefreshTimeMillis =
291
298
state . token . issuedAtTimeMillis +
292
299
( state . token . expireTimeMillis - state . token . issuedAtTimeMillis ) *
293
- 0.5 +
300
+ 0.5 +
294
301
5 * 60 * 1000 ;
295
302
// Do not allow refresh time to be past (expireTime - 5 minutes)
296
303
const latestAllowableRefresh =
0 commit comments