@@ -72,11 +72,14 @@ export type UserListener = (user: User) => void;
72
72
* listening for changes.
73
73
*/
74
74
export interface CredentialsProvider {
75
+ /** Requests a token for the current user. */
76
+ getToken ( ) : Promise < Token | null > ;
77
+
75
78
/**
76
- * Requests a token for the current user, optionally forcing a refreshed
77
- * token to be fetched .
79
+ * Marks the last retrieved token as invalid, making the next GetToken request
80
+ * force-refresh the token .
78
81
*/
79
- getToken ( forceRefresh : boolean ) : Promise < Token | null > ;
82
+ invalidateToken ( ) : void ;
80
83
81
84
/**
82
85
* Specifies a listener to be notified of user changes (sign-in / sign-out).
@@ -99,10 +102,12 @@ export class EmptyCredentialsProvider implements CredentialsProvider {
99
102
100
103
constructor ( ) { }
101
104
102
- getToken ( forceRefresh : boolean ) : Promise < Token | null > {
105
+ getToken ( ) : Promise < Token | null > {
103
106
return Promise . resolve < Token | null > ( null ) ;
104
107
}
105
108
109
+ invalidateToken ( ) : void { }
110
+
106
111
setUserChangeListener ( listener : UserListener ) : void {
107
112
assert ( ! this . userListener , 'Can only call setUserChangeListener() once.' ) ;
108
113
this . userListener = listener ;
@@ -138,6 +143,8 @@ export class FirebaseCredentialsProvider implements CredentialsProvider {
138
143
/** The User listener registered with setUserChangeListener(). */
139
144
private userListener : UserListener | null = null ;
140
145
146
+ private forceRefresh = false ;
147
+
141
148
constructor ( private readonly app : FirebaseApp ) {
142
149
// We listen for token changes but all we really care about is knowing when
143
150
// the uid may have changed.
@@ -160,7 +167,7 @@ export class FirebaseCredentialsProvider implements CredentialsProvider {
160
167
) ;
161
168
}
162
169
163
- getToken ( forceRefresh : boolean ) : Promise < Token | null > {
170
+ getToken ( ) : Promise < Token | null > {
164
171
assert (
165
172
this . tokenListener != null ,
166
173
'getToken cannot be called after listener removed.'
@@ -170,6 +177,8 @@ export class FirebaseCredentialsProvider implements CredentialsProvider {
170
177
// fail (with an ABORTED error) if there is a user change while the request
171
178
// is outstanding.
172
179
const initialUserCounter = this . userCounter ;
180
+ const forceRefresh = this . forceRefresh ;
181
+ this . forceRefresh = false ;
173
182
return ( this . app as _FirebaseApp ) . INTERNAL . getToken ( forceRefresh ) . then (
174
183
tokenData => {
175
184
// Cancel the request since the user changed while the request was
@@ -195,6 +204,10 @@ export class FirebaseCredentialsProvider implements CredentialsProvider {
195
204
) ;
196
205
}
197
206
207
+ invalidateToken ( ) : void {
208
+ this . forceRefresh = true ;
209
+ }
210
+
198
211
setUserChangeListener ( listener : UserListener ) : void {
199
212
assert ( ! this . userListener , 'Can only call setUserChangeListener() once.' ) ;
200
213
this . userListener = listener ;
@@ -285,7 +298,7 @@ export class FirstPartyCredentialsProvider implements CredentialsProvider {
285
298
) ;
286
299
}
287
300
288
- getToken ( forceRefresh : boolean ) : Promise < Token | null > {
301
+ getToken ( ) : Promise < Token | null > {
289
302
return Promise . resolve ( new FirstPartyToken ( this . gapi , this . sessionIndex ) ) ;
290
303
}
291
304
@@ -297,6 +310,8 @@ export class FirstPartyCredentialsProvider implements CredentialsProvider {
297
310
}
298
311
299
312
removeUserChangeListener ( ) : void { }
313
+
314
+ invalidateToken ( ) : void { }
300
315
}
301
316
302
317
/**
0 commit comments