Skip to content

Commit 5acfdae

Browse files
committed
Fix up types
1 parent 60a7a80 commit 5acfdae

File tree

10 files changed

+88
-56
lines changed

10 files changed

+88
-56
lines changed

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,13 @@ interface AppCheckProvider {
9090
getToken(): Promise<AppCheckToken>;
9191
}
9292

93+
interface ReCAPTCHAV3Provider {
94+
/**
95+
* @param siteKey - ReCAPTCHA v3 site key (public key).
96+
*/
97+
constructor(siteKey: string): void;
98+
}
99+
93100
/**
94101
* The token returned from an `AppCheckProvider`.
95102
*/

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

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ import * as client from './client';
3939
import * as storage from './storage';
4040
import * as logger from './logger';
4141
import * as util from './util';
42-
import { ReCAPTCHAProvider } from './providers';
42+
import { ReCAPTCHAV3Provider } from './providers';
4343

4444
describe('api', () => {
4545
beforeEach(() => {
@@ -56,7 +56,7 @@ describe('api', () => {
5656
expect(getState(app).activated).to.equal(false);
5757
activate(
5858
app,
59-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
59+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
6060
getFakePlatformLoggingProvider()
6161
);
6262
expect(getState(app).activated).to.equal(true);
@@ -66,7 +66,7 @@ describe('api', () => {
6666
app = getFakeApp({ automaticDataCollectionEnabled: false });
6767
activate(
6868
app,
69-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
69+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
7070
getFakePlatformLoggingProvider()
7171
);
7272
expect(getState(app).isTokenAutoRefreshEnabled).to.equal(false);
@@ -76,7 +76,7 @@ describe('api', () => {
7676
app = getFakeApp({ automaticDataCollectionEnabled: false });
7777
activate(
7878
app,
79-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
79+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
8080
getFakePlatformLoggingProvider(),
8181
true
8282
);
@@ -86,13 +86,13 @@ describe('api', () => {
8686
it('can only be called once', () => {
8787
activate(
8888
app,
89-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
89+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
9090
getFakePlatformLoggingProvider()
9191
);
9292
expect(() =>
9393
activate(
9494
app,
95-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
95+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
9696
getFakePlatformLoggingProvider()
9797
)
9898
).to.throw(/AppCheck can only be activated once/);
@@ -104,7 +104,7 @@ describe('api', () => {
104104
);
105105
activate(
106106
app,
107-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
107+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
108108
getFakePlatformLoggingProvider()
109109
);
110110
expect(initReCAPTCHAStub).to.have.been.calledWithExactly(
@@ -175,7 +175,12 @@ describe('api', () => {
175175
});
176176
it('Listeners work when using top-level parameters pattern', async () => {
177177
const app = getFakeApp();
178-
activate(app, new ReCAPTCHAProvider(FAKE_SITE_KEY), false);
178+
activate(
179+
app,
180+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
181+
fakePlatformLoggingProvider,
182+
false
183+
);
179184
stub(reCAPTCHA, 'getToken').returns(Promise.resolve(fakeRecaptchaToken));
180185
stub(client, 'exchangeToken').returns(
181186
Promise.resolve(fakeRecaptchaAppCheckToken)
@@ -219,7 +224,12 @@ describe('api', () => {
219224

220225
it('Listeners work when using Observer pattern', async () => {
221226
const app = getFakeApp();
222-
activate(app, new ReCAPTCHAProvider(FAKE_SITE_KEY), false);
227+
activate(
228+
app,
229+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
230+
fakePlatformLoggingProvider,
231+
false
232+
);
223233
stub(reCAPTCHA, 'getToken').returns(Promise.resolve(fakeRecaptchaToken));
224234
stub(client, 'exchangeToken').returns(
225235
Promise.resolve(fakeRecaptchaAppCheckToken)
@@ -264,7 +274,12 @@ describe('api', () => {
264274
it('onError() catches token errors', async () => {
265275
stub(logger.logger, 'error');
266276
const app = getFakeApp();
267-
activate(app, new ReCAPTCHAProvider(FAKE_SITE_KEY), false);
277+
activate(
278+
app,
279+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
280+
fakePlatformLoggingProvider,
281+
false
282+
);
268283
stub(reCAPTCHA, 'getToken').returns(Promise.resolve(fakeRecaptchaToken));
269284
stub(client, 'exchangeToken').rejects('exchange error');
270285

packages/app-check/src/api.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import {
2222
import { FirebaseApp } from '@firebase/app-types';
2323
import { Provider } from '@firebase/component';
2424
import { ERROR_FACTORY, AppCheckError } from './errors';
25-
import { ReCAPTCHAProvider, ReCAPTCHAProviderInternal } from './providers';
25+
import { ReCAPTCHAV3Provider, ReCAPTCHAV3ProviderInternal } from './providers';
2626
import { initialize as initializeRecaptcha } from './recaptcha';
2727
import { getState, setState, AppCheckState, ListenerType } from './state';
2828
import {
@@ -68,10 +68,10 @@ export function activate(
6868
setState(app, newState);
6969

7070
// initialize reCAPTCHA if provider is a ReCAPTCHAProvider
71-
if (newState.provider instanceof ReCAPTCHAProvider) {
71+
if (newState.provider instanceof ReCAPTCHAV3Provider) {
7272
// Wrap public ReCAPTCHAProvider in an internal class that provides
7373
// platform logging and app.
74-
const internalProvider = new ReCAPTCHAProviderInternal(
74+
const internalProvider = new ReCAPTCHAV3ProviderInternal(
7575
app,
7676
newState.provider.siteKey,
7777
platformLoggerProvider

packages/app-check/src/index.ts

Lines changed: 2 additions & 2 deletions
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

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ import {
3232
getToken,
3333
addTokenListener,
3434
removeTokenListener,
35-
formatDummyToken,
3635
defaultTokenErrorData
3736
} from './internal-api';
3837
import * as reCAPTCHA from './recaptcha';
@@ -48,8 +47,9 @@ import {
4847
ListenerType
4948
} from './state';
5049
import { Deferred } from '@firebase/util';
51-
import { ReCAPTCHAProvider } from './providers';
5250
import { AppCheckTokenResult } from '../../app-check-types';
51+
import { ReCAPTCHAV3Provider } from './providers';
52+
import { formatDummyToken } from './util';
5353

5454
const fakePlatformLoggingProvider = getFakePlatformLoggingProvider();
5555

@@ -102,7 +102,7 @@ describe('internal api', () => {
102102
it('uses reCAPTCHA token to exchange for AppCheck token if ReCAPTCHAProvider is provided', async () => {
103103
activate(
104104
app,
105-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
105+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
106106
fakePlatformLoggingProvider
107107
);
108108

@@ -128,7 +128,7 @@ describe('internal api', () => {
128128
const errorStub = stub(console, 'error');
129129
activate(
130130
app,
131-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
131+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
132132
fakePlatformLoggingProvider
133133
);
134134

@@ -155,7 +155,7 @@ describe('internal api', () => {
155155
it('notifies listeners using cached token', async () => {
156156
activate(
157157
app,
158-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
158+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
159159
fakePlatformLoggingProvider
160160
);
161161
storageReadStub.resolves(fakeCachedAppCheckToken);
@@ -188,7 +188,7 @@ describe('internal api', () => {
188188
it('notifies listeners using new token', async () => {
189189
activate(
190190
app,
191-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
191+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
192192
fakePlatformLoggingProvider
193193
);
194194

@@ -224,7 +224,7 @@ describe('internal api', () => {
224224
stub(logger.logger, 'error');
225225
activate(
226226
app,
227-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
227+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
228228
fakePlatformLoggingProvider
229229
);
230230
stub(reCAPTCHA, 'getToken').resolves(fakeRecaptchaToken);
@@ -250,7 +250,7 @@ describe('internal api', () => {
250250
it('ignores listeners that throw', async () => {
251251
activate(
252252
app,
253-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
253+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
254254
fakePlatformLoggingProvider
255255
);
256256
stub(reCAPTCHA, 'getToken').resolves(fakeRecaptchaToken);
@@ -284,7 +284,7 @@ describe('internal api', () => {
284284
it('loads persisted token to memory and returns it', async () => {
285285
activate(
286286
app,
287-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
287+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
288288
fakePlatformLoggingProvider
289289
);
290290

@@ -304,7 +304,7 @@ describe('internal api', () => {
304304
it('persists token to storage', async () => {
305305
activate(
306306
app,
307-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
307+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
308308
fakePlatformLoggingProvider
309309
);
310310

@@ -321,7 +321,7 @@ describe('internal api', () => {
321321
it('returns the valid token in memory without making network request', async () => {
322322
activate(
323323
app,
324-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
324+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
325325
fakePlatformLoggingProvider
326326
);
327327
setState(app, { ...getState(app), token: fakeRecaptchaAppCheckToken });
@@ -337,7 +337,7 @@ describe('internal api', () => {
337337
it('force to get new token when forceRefresh is true', async () => {
338338
activate(
339339
app,
340-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
340+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
341341
fakePlatformLoggingProvider
342342
);
343343
setState(app, { ...getState(app), token: fakeRecaptchaAppCheckToken });
@@ -363,7 +363,7 @@ describe('internal api', () => {
363363
debugState.token.resolve('my-debug-token');
364364
activate(
365365
app,
366-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
366+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
367367
fakePlatformLoggingProvider
368368
);
369369

@@ -444,7 +444,7 @@ describe('internal api', () => {
444444
it('notifies the listener with the valid token in storage', done => {
445445
activate(
446446
app,
447-
new ReCAPTCHAProvider(FAKE_SITE_KEY),
447+
new ReCAPTCHAV3Provider(FAKE_SITE_KEY),
448448
fakePlatformLoggingProvider
449449
);
450450
storageReadStub.resolves({

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

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -29,33 +29,19 @@ import {
2929
} from './state';
3030
import { TOKEN_REFRESH_TIME } from './constants';
3131
import { Refresher } from './proactive-refresh';
32-
import { ensureActivated } from './util';
32+
import { ensureActivated, formatDummyToken } from './util';
3333
import { exchangeToken, getExchangeDebugTokenRequest } from './client';
3434
import { writeTokenToStorage, readTokenFromStorage } from './storage';
3535
import { getDebugToken, isDebugMode } from './debug';
36-
import { base64, issuedAtTime } from '@firebase/util';
36+
import { issuedAtTime } from '@firebase/util';
3737
import { logger } from './logger';
3838
import { Provider } from '@firebase/component';
39-
import { ReCAPTCHAProviderInternal } from './providers';
39+
import { ReCAPTCHAV3ProviderInternal } from './providers';
4040

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

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

packages/app-check/src/providers.ts

Lines changed: 3 additions & 3 deletions
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

Lines changed: 3 additions & 3 deletions
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);

0 commit comments

Comments
 (0)