Skip to content

Commit 74ad85b

Browse files
committed
Fixed appcheck implementation
1 parent 44c0f63 commit 74ad85b

File tree

3 files changed

+31
-18
lines changed

3 files changed

+31
-18
lines changed

common/api-review/data-connect.api.md

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
55
```ts
66

7+
import { AppCheckInternalComponentName } from '@firebase/app-check-interop-types';
8+
import { AppCheckTokenListener } from '@firebase/app-check-interop-types';
9+
import { AppCheckTokenResult } from '@firebase/app-check-interop-types';
710
import { FirebaseApp } from '@firebase/app';
811
import { FirebaseAuthInternalName } from '@firebase/auth-interop-types';
912
import { FirebaseAuthTokenData } from '@firebase/auth-interop-types';
@@ -12,6 +15,15 @@ import { FirebaseOptions } from '@firebase/app-types';
1215
import { LogLevelString } from '@firebase/logger';
1316
import { Provider } from '@firebase/component';
1417

18+
// @public
19+
export class AppCheckTokenProvider {
20+
constructor(appName_: string, appCheckProvider?: Provider<AppCheckInternalComponentName>);
21+
// (undocumented)
22+
addTokenChangeListener(listener: AppCheckTokenListener): void;
23+
// (undocumented)
24+
getToken(forceRefresh?: boolean): Promise<AppCheckTokenResult>;
25+
}
26+
1527
// @public (undocumented)
1628
export type AuthTokenListener = (token: string | null) => void;
1729

@@ -46,7 +58,7 @@ export interface ConnectorConfig {
4658

4759
// @public
4860
export class DataConnect {
49-
constructor(app: FirebaseApp, dataConnectOptions: DataConnectOptions, _authProvider: Provider<FirebaseAuthInternalName>);
61+
constructor(app: FirebaseApp, dataConnectOptions: DataConnectOptions, _authProvider: Provider<FirebaseAuthInternalName>, _appCheckProvider: Provider<AppCheckInternalComponentName>);
5062
// (undocumented)
5163
readonly app: FirebaseApp;
5264
// (undocumented)
@@ -283,7 +295,7 @@ export function terminate(dataConnect: DataConnect): Promise<void>;
283295
export function toQueryRef<Data, Variables>(serializedRef: SerializedRef<Data, Variables>): QueryRef<Data, Variables>;
284296

285297
// @public (undocumented)
286-
export type TransportClass = new (options: DataConnectOptions, apiKey?: string, authProvider?: AuthTokenProvider, transportOptions?: TransportOptions, _isUsingGen?: boolean) => DataConnectTransport;
298+
export type TransportClass = new (options: DataConnectOptions, apiKey?: string, authProvider?: AuthTokenProvider, appCheckProvider?: AppCheckTokenProvider, transportOptions?: TransportOptions, _isUsingGen?: boolean) => DataConnectTransport;
287299

288300
// @public
289301
export interface TransportOptions {

packages/data-connect/src/api/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,6 @@ export * from './DataConnect';
2020
export * from './Reference';
2121
export * from './Mutation';
2222
export * from './query';
23+
export * from '../core/AppCheckTokenProvider';
2324
export { setLogLevel } from '../logger';
2425
export { validateArgs } from '../util/validateArgs';

packages/data-connect/src/network/transport/rest.ts

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ export class RESTTransport implements DataConnectTransport {
3535
private _serviceName: string;
3636
private _accessToken: string | null = null;
3737
private _appCheckToken: string | null = null;
38-
private _authInitialized = false;
3938
private _lastToken: string | null = null;
4039
constructor(
4140
options: DataConnectOptions,
@@ -103,24 +102,25 @@ export class RESTTransport implements DataConnectTransport {
103102
this._accessToken = newToken;
104103
}
105104

106-
getWithAuth(forceToken = false): Promise<string> {
105+
async getWithAuth(forceToken = false): Promise<string> {
107106
let starterPromise: Promise<string | null> = new Promise(resolve =>
108107
resolve(this._accessToken)
109108
);
110-
if (!this._authInitialized) {
111-
if (this.authProvider) {
112-
starterPromise = this.authProvider
113-
.getToken(/*forceToken=*/ forceToken)
114-
.then(data => {
115-
if (!data) {
116-
return null;
117-
}
118-
this._accessToken = data.accessToken;
119-
return this._accessToken;
120-
});
121-
} else {
122-
starterPromise = new Promise(resolve => resolve(''));
123-
}
109+
if (this.appCheckProvider) {
110+
this._appCheckToken = (await this.appCheckProvider.getToken()).token;
111+
}
112+
if (this.authProvider) {
113+
starterPromise = this.authProvider
114+
.getToken(/*forceToken=*/ forceToken)
115+
.then(data => {
116+
if (!data) {
117+
return null;
118+
}
119+
this._accessToken = data.accessToken;
120+
return this._accessToken;
121+
});
122+
} else {
123+
starterPromise = new Promise(resolve => resolve(''));
124124
}
125125
return starterPromise;
126126
}

0 commit comments

Comments
 (0)