Skip to content

Commit eb6fba9

Browse files
committed
Fix up types
1 parent ab94a82 commit eb6fba9

File tree

10 files changed

+71
-54
lines changed

10 files changed

+71
-54
lines changed

packages/app-check-types/index.d.ts

+7
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,13 @@ interface AppCheckProvider {
5050
getToken(): Promise<AppCheckToken>;
5151
}
5252

53+
interface ReCAPTCHAV3Provider {
54+
/**
55+
* @param siteKey - ReCAPTCHA v3 site key (public key).
56+
*/
57+
constructor(siteKey: string): void;
58+
}
59+
5360
/**
5461
* The token returned from an `AppCheckProvider`.
5562
*/

packages/app-check/src/api.test.ts

+7-7
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import {
2727
import { getState } from './state';
2828
import * as reCAPTCHA from './recaptcha';
2929
import { FirebaseApp } from '@firebase/app-types';
30-
import { ReCAPTCHAProvider } from './providers';
30+
import { ReCAPTCHAV3Provider } from './providers';
3131

3232
describe('api', () => {
3333
describe('activate()', () => {
@@ -41,7 +41,7 @@ describe('api', () => {
4141
expect(getState(app).activated).to.equal(false);
4242
activate(
4343
app,
44-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
44+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
4545
getFakePlatformLoggingProvider()
4646
);
4747
expect(getState(app).activated).to.equal(true);
@@ -51,7 +51,7 @@ describe('api', () => {
5151
app = getFakeApp({ automaticDataCollectionEnabled: false });
5252
activate(
5353
app,
54-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
54+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
5555
getFakePlatformLoggingProvider()
5656
);
5757
expect(getState(app).isTokenAutoRefreshEnabled).to.equal(false);
@@ -61,7 +61,7 @@ describe('api', () => {
6161
app = getFakeApp({ automaticDataCollectionEnabled: false });
6262
activate(
6363
app,
64-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
64+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
6565
getFakePlatformLoggingProvider(),
6666
true
6767
);
@@ -71,13 +71,13 @@ describe('api', () => {
7171
it('can only be called once', () => {
7272
activate(
7373
app,
74-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
74+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
7575
getFakePlatformLoggingProvider()
7676
);
7777
expect(() =>
7878
activate(
7979
app,
80-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
80+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
8181
getFakePlatformLoggingProvider()
8282
)
8383
).to.throw(/AppCheck can only be activated once/);
@@ -89,7 +89,7 @@ describe('api', () => {
8989
);
9090
activate(
9191
app,
92-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
92+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
9393
getFakePlatformLoggingProvider()
9494
);
9595
expect(initReCAPTCHAStub).to.have.been.calledWithExactly(

packages/app-check/src/api.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import { AppCheckProvider } from '@firebase/app-check-types';
1919
import { FirebaseApp } from '@firebase/app-types';
2020
import { Provider } from '@firebase/component';
2121
import { ERROR_FACTORY, AppCheckError } from './errors';
22-
import { ReCAPTCHAProvider, ReCAPTCHAProviderInternal } from './providers';
22+
import { ReCAPTCHAV3Provider, ReCAPTCHAV3ProviderInternal } from './providers';
2323
import { initialize as initializeRecaptcha } from './recaptcha';
2424
import { getState, setState, AppCheckState } from './state';
2525

@@ -58,10 +58,10 @@ export function activate(
5858
setState(app, newState);
5959

6060
// initialize reCAPTCHA if provider is a ReCAPTCHAProvider
61-
if (newState.provider instanceof ReCAPTCHAProvider) {
61+
if (newState.provider instanceof ReCAPTCHAV3Provider) {
6262
// Wrap public ReCAPTCHAProvider in an internal class that provides
6363
// platform logging and app.
64-
const internalProvider = new ReCAPTCHAProviderInternal(
64+
const internalProvider = new ReCAPTCHAV3ProviderInternal(
6565
app,
6666
newState.provider.siteKey,
6767
platformLoggerProvider

packages/app-check/src/index.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import {
2626
AppCheckComponentName
2727
} from '@firebase/app-check-types';
2828
import { factory, internalFactory } from './factory';
29-
import { ReCAPTCHAProvider } from './providers';
29+
import { ReCAPTCHAV3Provider } from './providers';
3030
import { initializeDebugMode } from './debug';
3131
import { AppCheckInternalComponentName } from '@firebase/app-check-interop-types';
3232
import { name, version } from '../package.json';
@@ -48,7 +48,7 @@ function registerAppCheck(firebase: _FirebaseNamespace): void {
4848
ComponentType.PUBLIC
4949
)
5050
.setServiceProps({
51-
ReCAPTCHAProvider
51+
ReCAPTCHAV3Provider
5252
})
5353
/**
5454
* AppCheck can only be initialized by explicitly calling firebase.appCheck()

packages/app-check/src/internal-api.test.ts

+15-15
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import {
3131
getToken,
3232
addTokenListener,
3333
removeTokenListener,
34-
formatDummyToken,
3534
defaultTokenErrorData
3635
} from './internal-api';
3736
import * as reCAPTCHA from './recaptcha';
@@ -40,7 +39,8 @@ import * as storage from './storage';
4039
import { getState, clearState, setState, getDebugState } from './state';
4140
import { AppCheckTokenListener } from '@firebase/app-check-interop-types';
4241
import { Deferred } from '@firebase/util';
43-
import { ReCAPTCHAProvider } from './providers';
42+
import { ReCAPTCHAV3Provider } from './providers';
43+
import { formatDummyToken } from './util';
4444

4545
const fakePlatformLoggingProvider = getFakePlatformLoggingProvider();
4646

@@ -89,7 +89,7 @@ describe('internal api', () => {
8989
it('uses reCAPTCHA token to exchange for AppCheck token if ReCAPTCHAProvider is provided', async () => {
9090
activate(
9191
app,
92-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
92+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
9393
fakePlatformLoggingProvider
9494
);
9595

@@ -115,7 +115,7 @@ describe('internal api', () => {
115115
const errorStub = stub(console, 'error');
116116
activate(
117117
app,
118-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
118+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
119119
fakePlatformLoggingProvider
120120
);
121121

@@ -142,7 +142,7 @@ describe('internal api', () => {
142142
it('notifies listeners using cached token', async () => {
143143
activate(
144144
app,
145-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
145+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
146146
fakePlatformLoggingProvider
147147
);
148148

@@ -171,7 +171,7 @@ describe('internal api', () => {
171171
it('notifies listeners using new token', async () => {
172172
activate(
173173
app,
174-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
174+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
175175
fakePlatformLoggingProvider
176176
);
177177

@@ -199,7 +199,7 @@ describe('internal api', () => {
199199
it('ignores listeners that throw', async () => {
200200
activate(
201201
app,
202-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
202+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
203203
fakePlatformLoggingProvider
204204
);
205205
stub(reCAPTCHA, 'getToken').returns(Promise.resolve(fakeRecaptchaToken));
@@ -225,7 +225,7 @@ describe('internal api', () => {
225225
const clock = useFakeTimers();
226226
activate(
227227
app,
228-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
228+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
229229
fakePlatformLoggingProvider
230230
);
231231

@@ -248,7 +248,7 @@ describe('internal api', () => {
248248
it('persists token to storage', async () => {
249249
activate(
250250
app,
251-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
251+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
252252
fakePlatformLoggingProvider
253253
);
254254

@@ -270,7 +270,7 @@ describe('internal api', () => {
270270
const clock = useFakeTimers();
271271
activate(
272272
app,
273-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
273+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
274274
fakePlatformLoggingProvider
275275
);
276276
setState(app, { ...getState(app), token: fakeRecaptchaAppCheckToken });
@@ -287,7 +287,7 @@ describe('internal api', () => {
287287
it('force to get new token when forceRefresh is true', async () => {
288288
activate(
289289
app,
290-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
290+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
291291
fakePlatformLoggingProvider
292292
);
293293
setState(app, { ...getState(app), token: fakeRecaptchaAppCheckToken });
@@ -315,7 +315,7 @@ describe('internal api', () => {
315315
debugState.token.resolve('my-debug-token');
316316
activate(
317317
app,
318-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
318+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
319319
fakePlatformLoggingProvider
320320
);
321321

@@ -373,7 +373,7 @@ describe('internal api', () => {
373373
const clock = useFakeTimers();
374374
activate(
375375
app,
376-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
376+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
377377
fakePlatformLoggingProvider
378378
);
379379
stub(storage, 'readTokenFromStorage').returns(
@@ -411,7 +411,7 @@ describe('internal api', () => {
411411

412412
activate(
413413
app,
414-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
414+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
415415
fakePlatformLoggingProvider
416416
);
417417
addTokenListener(app, fakePlatformLoggingProvider, fakeListener);
@@ -425,7 +425,7 @@ describe('internal api', () => {
425425

426426
activate(
427427
app,
428-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
428+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
429429
fakePlatformLoggingProvider
430430
);
431431
addTokenListener(app, fakePlatformLoggingProvider, () => {});

packages/app-check/src/internal-api.ts

+4-18
Original file line numberDiff line numberDiff line change
@@ -28,33 +28,19 @@ import {
2828
} from './state';
2929
import { TOKEN_REFRESH_TIME } from './constants';
3030
import { Refresher } from './proactive-refresh';
31-
import { ensureActivated } from './util';
31+
import { ensureActivated, formatDummyToken } from './util';
3232
import { exchangeToken, getExchangeDebugTokenRequest } from './client';
3333
import { writeTokenToStorage, readTokenFromStorage } from './storage';
3434
import { getDebugToken, isDebugMode } from './debug';
35-
import { base64, issuedAtTime } from '@firebase/util';
35+
import { issuedAtTime } from '@firebase/util';
3636
import { logger } from './logger';
3737
import { Provider } from '@firebase/component';
38-
import { ReCAPTCHAProviderInternal } from './providers';
38+
import { ReCAPTCHAV3ProviderInternal } from './providers';
3939

4040
// Initial hardcoded value agreed upon across platforms for initial launch.
4141
// Format left open for possible dynamic error values and other fields in the future.
4242
export const defaultTokenErrorData = { error: 'UNKNOWN_ERROR' };
4343

44-
/**
45-
* Stringify and base64 encode token error data.
46-
*
47-
* @param tokenError Error data, currently hardcoded.
48-
*/
49-
export function formatDummyToken(
50-
tokenErrorData: Record<string, string>
51-
): string {
52-
return base64.encodeString(
53-
JSON.stringify(tokenErrorData),
54-
/* webSafe= */ false
55-
);
56-
}
57-
5844
/**
5945
* This function will always resolve.
6046
* The result will contain an error field if there is any error.
@@ -112,7 +98,7 @@ export async function getToken(
11298
// ReCAPTCHAProvider is wrapped during activate().
11399
// ensureActivated() at the beginning of this function will prevent
114100
// getting here without activate() having been called.
115-
if (state.provider instanceof ReCAPTCHAProviderInternal) {
101+
if (state.provider instanceof ReCAPTCHAV3ProviderInternal) {
116102
token = await state.provider.getToken();
117103
} else if (state.provider) {
118104
// custom provider

packages/app-check/src/providers.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ import { FirebaseApp } from '@firebase/app-types';
2020
import { Provider } from '@firebase/component';
2121
import { exchangeToken, getExchangeRecaptchaTokenRequest } from './client';
2222
import { ERROR_FACTORY, AppCheckError } from './errors';
23-
import { formatDummyToken } from './internal-api';
23+
import { formatDummyToken } from './util';
2424
import { getToken as getReCAPTCHAToken } from './recaptcha';
2525
import { AppCheckTokenInternal } from './state';
2626

27-
export class ReCAPTCHAProvider implements AppCheckProvider {
27+
export class ReCAPTCHAV3Provider implements AppCheckProvider {
2828
constructor(private _siteKey: string) {}
2929
async getToken(): Promise<AppCheckToken> {
3030
return Promise.resolve({
@@ -37,7 +37,7 @@ export class ReCAPTCHAProvider implements AppCheckProvider {
3737
}
3838
}
3939

40-
export class ReCAPTCHAProviderInternal implements AppCheckProvider {
40+
export class ReCAPTCHAV3ProviderInternal implements AppCheckProvider {
4141
constructor(
4242
private _app: FirebaseApp,
4343
private _siteKey: string,

packages/app-check/src/recaptcha.test.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import * as utils from './util';
3232
import { getState } from './state';
3333
import { Deferred } from '@firebase/util';
3434
import { activate } from './api';
35-
import { ReCAPTCHAProvider } from './providers';
35+
import { ReCAPTCHAV3Provider } from './providers';
3636

3737
describe('recaptcha', () => {
3838
let app: FirebaseApp;
@@ -103,7 +103,7 @@ describe('recaptcha', () => {
103103
self.grecaptcha = grecaptchaFake;
104104
activate(
105105
app,
106-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
106+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
107107
getFakePlatformLoggingProvider()
108108
);
109109
await getToken(app);
@@ -121,7 +121,7 @@ describe('recaptcha', () => {
121121
self.grecaptcha = grecaptchaFake;
122122
activate(
123123
app,
124-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
124+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
125125
getFakePlatformLoggingProvider()
126126
);
127127
const token = await getToken(app);

packages/app-check/src/util.ts

+15
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { GreCAPTCHA } from './recaptcha';
1919
import { getState } from './state';
2020
import { ERROR_FACTORY, AppCheckError } from './errors';
2121
import { FirebaseApp } from '@firebase/app-types';
22+
import { base64 } from '@firebase/util';
2223

2324
export function getRecaptcha(): GreCAPTCHA | undefined {
2425
return self.grecaptcha;
@@ -42,3 +43,17 @@ export function uuidv4(): string {
4243
return v.toString(16);
4344
});
4445
}
46+
47+
/**
48+
* Stringify and base64 encode token error data.
49+
*
50+
* @param tokenError Error data, currently hardcoded.
51+
*/
52+
export function formatDummyToken(
53+
tokenErrorData: Record<string, string>
54+
): string {
55+
return base64.encodeString(
56+
JSON.stringify(tokenErrorData),
57+
/* webSafe= */ false
58+
);
59+
}

0 commit comments

Comments
 (0)