Skip to content

Commit a3ec0f6

Browse files
committed
Changes to make FirebaseToken interface internal
1 parent ef0de9b commit a3ec0f6

File tree

7 files changed

+30
-51
lines changed

7 files changed

+30
-51
lines changed

packages/auth/demo/src/index.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2094,15 +2094,16 @@ function initApp() {
20942094
});
20952095

20962096
const firebaseTokenStatus = document.getElementById('firebase-token-status');
2097-
setTimeout(() => {
2098-
if (regionalAuth.firebaseToken) {
2097+
setTimeout(async () => {
2098+
const firebaseToken = await regionalAuth.getFirebaseAccessToken();
2099+
if (firebaseToken) {
20992100
firebaseTokenStatus.textContent =
2100-
'✅ Firebase token is set: ' + regionalAuth.firebaseToken.token;
2101+
'✅ Firebase token is set: ' + firebaseToken;
21012102
} else {
21022103
firebaseTokenStatus.textContent =
21032104
'No CIAM token found. User not logged in.';
21042105
}
2105-
console.log('firebaseToken after delay: ', regionalAuth.firebaseToken);
2106+
console.log('firebaseToken after delay: ', firebaseToken);
21062107
}, 1000);
21072108

21082109
tempApp = initializeApp(

packages/auth/src/core/auth/auth_impl.test.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import {
3232
testAuth,
3333
testUser
3434
} from '../../../test/helpers/mock_auth';
35-
import { AuthInternal } from '../../model/auth';
35+
import { AuthInternal, FirebaseToken } from '../../model/auth';
3636
import { UserInternal } from '../../model/user';
3737
import { PersistenceInternal } from '../persistence';
3838
import { inMemoryPersistence } from '../persistence/in_memory';
@@ -49,7 +49,6 @@ import * as mockFetch from '../../../test/helpers/mock_fetch';
4949
import { AuthErrorCode } from '../errors';
5050
import * as exchangeTokenModule from '../strategies/exhange_token';
5151
import {
52-
FirebaseToken,
5352
PasswordValidationStatus,
5453
TokenRefreshHandler
5554
} from '../../model/public_types';
@@ -450,7 +449,7 @@ describe('core/auth/auth_impl', () => {
450449
await regionalAuth._updateFirebaseToken(token);
451450
await regionalAuth.signOut();
452451
expect(persistenceStub._remove).to.have.been.called;
453-
expect(regionalAuth.firebaseToken).to.be.null;
452+
expect(regionalAuth.getFirebaseAccessToken()).to.be.null;
454453
});
455454
it('is blocked if a beforeAuthStateChanged callback throws', async () => {
456455
await auth._updateCurrentUser(testUser(auth, 'test'));

packages/auth/src/core/auth/auth_impl.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ import {
3838
Unsubscribe,
3939
PasswordValidationStatus,
4040
TenantConfig,
41-
FirebaseToken,
4241
RefreshIdpTokenResult,
4342
TokenRefreshHandler
4443
} from '../../model/public_types';
@@ -51,7 +50,7 @@ import {
5150
Subscribe
5251
} from '@firebase/util';
5352

54-
import { AuthInternal, ConfigInternal } from '../../model/auth';
53+
import { AuthInternal, ConfigInternal, FirebaseToken } from '../../model/auth';
5554
import { PopupRedirectResolverInternal } from '../../model/popup_redirect';
5655
import { UserInternal } from '../../model/user';
5756
import {
@@ -104,7 +103,7 @@ export const enum DefaultConfig {
104103
export class AuthImpl implements AuthInternal, _FirebaseService {
105104
currentUser: User | null = null;
106105
emulatorConfig: EmulatorConfig | null = null;
107-
firebaseToken: FirebaseToken | null = null;
106+
private firebaseToken: FirebaseToken | null = null;
108107
private tokenRefreshHandler?: TokenRefreshHandler;
109108
private operations = Promise.resolve();
110109
private persistenceManager?: PersistenceUserManager;
@@ -249,9 +248,7 @@ export class AuthImpl implements AuthInternal, _FirebaseService {
249248
await this._updateCurrentUser(user, /* skipBeforeStateCallbacks */ true);
250249
}
251250

252-
async getFirebaseAccessToken(
253-
forceRefresh?: boolean
254-
): Promise<FirebaseToken | null> {
251+
async getFirebaseAccessToken(forceRefresh?: boolean): Promise<string | null> {
255252
const firebaseAccessToken =
256253
(await this.persistenceManager?.getFirebaseToken()) ?? null;
257254

@@ -262,7 +259,7 @@ export class AuthImpl implements AuthInternal, _FirebaseService {
262259
) {
263260
this.firebaseToken = firebaseAccessToken;
264261
this.firebaseTokenSubscription.next(this.firebaseToken);
265-
return firebaseAccessToken;
262+
return firebaseAccessToken.token;
266263
}
267264

268265
if (firebaseAccessToken && this.tokenRefreshHandler) {

packages/auth/src/core/auth/firebase_internal.ts

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ export class AuthInterop implements FirebaseAuthInternal {
5151
'Refresh token is not a valid operation for Regional Auth instance initialized.'
5252
);
5353
}
54-
return this.getTokenForRegionalAuth();
54+
const accessToken = await this.getTokenForRegionalAuth(forceRefresh);
55+
return accessToken ? { accessToken } : null;
5556
}
5657
if (!this.auth.currentUser) {
5758
return null;
@@ -103,23 +104,11 @@ export class AuthInterop implements FirebaseAuthInternal {
103104
}
104105
}
105106

106-
private async getTokenForRegionalAuth(): Promise<{
107-
accessToken: string;
108-
} | null> {
109-
if (!this.auth.firebaseToken) {
110-
return null;
111-
}
112-
113-
if (
114-
!this.auth.firebaseToken.expirationTime ||
115-
Date.now() >
116-
this.auth.firebaseToken.expirationTime - this.TOKEN_EXPIRATION_BUFFER
117-
) {
118-
await this.auth._updateFirebaseToken(null);
119-
return null;
120-
}
107+
private async getTokenForRegionalAuth(
108+
forceRefresh?: boolean
109+
): Promise<string | null> {
110+
const firebaseToken = await this.auth.getFirebaseAccessToken(forceRefresh);
121111

122-
const accessToken = await this.auth.firebaseToken.token;
123-
return { accessToken };
112+
return firebaseToken;
124113
}
125114
}

packages/auth/src/core/persistence/persistence_user_manager.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@
1616
*/
1717

1818
import { getAccountInfo } from '../../api/account_management/account';
19-
import { ApiKey, AppName, AuthInternal } from '../../model/auth';
20-
import { FirebaseToken } from '../../model/public_types';
19+
import { ApiKey, AppName, AuthInternal, FirebaseToken } from '../../model/auth';
2120
import { UserInternal } from '../../model/user';
2221
import { PersistedBlob, PersistenceInternal } from '../persistence';
2322
import { UserImpl } from '../user/user_impl';

packages/auth/src/model/auth.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import {
2020
AuthSettings,
2121
Config,
2222
EmulatorConfig,
23-
FirebaseToken,
2423
PasswordPolicy,
2524
PasswordValidationStatus,
2625
PopupRedirectResolver,
@@ -58,6 +57,16 @@ export interface ConfigInternal extends Config {
5857
clientPlatform: ClientPlatform;
5958
}
6059

60+
/**
61+
* @internal
62+
*/
63+
export interface FirebaseToken {
64+
// The firebase access token (JWT signed by Firebase Auth).
65+
readonly token: string;
66+
// The time in milliseconds when the access token expires.
67+
readonly expirationTime: number;
68+
}
69+
6170
/**
6271
* UserInternal and AuthInternal reference each other, so both of them are included in the public typings.
6372
* In order to exclude them, we mark them as internal explicitly.
@@ -67,7 +76,7 @@ export interface ConfigInternal extends Config {
6776
export interface AuthInternal extends Auth {
6877
currentUser: User | null;
6978
emulatorConfig: EmulatorConfig | null;
70-
getFirebaseAccessToken(forceRefresh?: boolean): Promise<FirebaseToken | null>;
79+
getFirebaseAccessToken(forceRefresh?: boolean): Promise<string | null>;
7180
_agentRecaptchaConfig: RecaptchaConfig | null;
7281
_tenantRecaptchaConfigs: Record<string, RecaptchaConfig>;
7382
_projectPasswordPolicy: PasswordPolicy | null;

packages/auth/src/model/public_types.ts

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -398,14 +398,6 @@ export interface Auth {
398398
* {@link @firebase/app#FirebaseServerApp}.
399399
*/
400400
signOut(): Promise<void>;
401-
/**
402-
* The token response initialized via {@link exchangeToken} endpoint.
403-
*
404-
* @remarks
405-
* This field is only supported for {@link Auth} instance that have defined
406-
* {@link TenantConfig}.
407-
*/
408-
readonly firebaseToken: FirebaseToken | null;
409401
}
410402

411403
/**
@@ -1038,13 +1030,6 @@ export interface ReactNativeAsyncStorage {
10381030
removeItem(key: string): Promise<void>;
10391031
}
10401032

1041-
export interface FirebaseToken {
1042-
// The firebase access token (JWT signed by Firebase Auth).
1043-
readonly token: string;
1044-
// The time in milliseconds when the access token expires.
1045-
readonly expirationTime: number;
1046-
}
1047-
10481033
/**
10491034
* A user account.
10501035
*

0 commit comments

Comments
 (0)