From 61394e09f12c2b2f88bdfdb3e722b653ad111255 Mon Sep 17 00:00:00 2001 From: Christina Holland Date: Mon, 4 Oct 2021 13:44:47 -0700 Subject: [PATCH 1/3] Fix app-check-compat --- packages/app-check-compat/src/index.ts | 13 +++++++- packages/app-check-compat/src/service.test.ts | 33 ++++++++++++++++++- packages/app-check-compat/src/service.ts | 9 ++++- packages/firebase/compat/index.d.ts | 5 ++- 4 files changed, 56 insertions(+), 4 deletions(-) diff --git a/packages/app-check-compat/src/index.ts b/packages/app-check-compat/src/index.ts index 8229d6b508c..5a592f0da87 100644 --- a/packages/app-check-compat/src/index.ts +++ b/packages/app-check-compat/src/index.ts @@ -28,6 +28,10 @@ import { } from '@firebase/component'; import { AppCheckService } from './service'; import { FirebaseAppCheck } from '@firebase/app-check-types'; +import { + ReCaptchaV3Provider, + CustomProvider +} from '@firebase/app-check'; const factory: InstanceFactory<'appCheck-compat'> = ( container: ComponentContainer @@ -40,7 +44,14 @@ const factory: InstanceFactory<'appCheck-compat'> = ( export function registerAppCheck(): void { (firebase as _FirebaseNamespace).INTERNAL.registerComponent( - new Component('appCheck-compat', factory, ComponentType.PUBLIC) + new Component( + 'appCheck-compat', + factory, + ComponentType.PUBLIC + ).setServiceProps({ + ReCaptchaV3Provider, + CustomProvider + }) ); } diff --git a/packages/app-check-compat/src/service.test.ts b/packages/app-check-compat/src/service.test.ts index b10e45d3f11..39285627314 100644 --- a/packages/app-check-compat/src/service.test.ts +++ b/packages/app-check-compat/src/service.test.ts @@ -79,7 +79,7 @@ describe('Firebase App Check > Service', () => { ); it( - 'activate(CustomProvider) calls modular initializeAppCheck() with' + + 'activate({getToken: () => token}) calls modular initializeAppCheck() with' + ' a CustomProvider', () => { const initializeAppCheckStub = stub(appCheckExp, 'initializeAppCheck'); @@ -103,6 +103,37 @@ describe('Firebase App Check > Service', () => { } ); + it( + 'activate(new RecaptchaV3Provider(...)) calls modular initializeAppCheck() with' + + ' a RecaptchaV3Provider', + () => { + const initializeAppCheckStub = stub(appCheckExp, 'initializeAppCheck'); + service = new AppCheckService(app); + service.activate(new ReCaptchaV3Provider('a-site-key')); + expect(initializeAppCheckStub).to.be.calledWith(app, { + provider: match.instanceOf(ReCaptchaV3Provider), + isTokenAutoRefreshEnabled: undefined + }); + initializeAppCheckStub.restore(); + } + ); + + it( + 'activate(new CustomProvider(...)) calls modular initializeAppCheck() with' + + ' a CustomProvider', + () => { + const initializeAppCheckStub = stub(appCheckExp, 'initializeAppCheck'); + service = new AppCheckService(app); + const customGetTokenStub = stub(); + service.activate(new CustomProvider({ getToken: customGetTokenStub })); + expect(initializeAppCheckStub).to.be.calledWith(app, { + provider: match.instanceOf(CustomProvider), + isTokenAutoRefreshEnabled: undefined + }); + initializeAppCheckStub.restore(); + } + ); + it('setTokenAutoRefreshEnabled() calls modular setTokenAutoRefreshEnabled()', () => { const setTokenAutoRefreshEnabledStub: SinonStub = stub( appCheckExp, diff --git a/packages/app-check-compat/src/service.ts b/packages/app-check-compat/src/service.ts index adffc834ae0..0cf52ec93ab 100644 --- a/packages/app-check-compat/src/service.ts +++ b/packages/app-check-compat/src/service.ts @@ -43,9 +43,16 @@ export class AppCheckService siteKeyOrProvider: string | AppCheckProvider, isTokenAutoRefreshEnabled?: boolean ): void { - let provider: ReCaptchaV3Provider | CustomProvider; + let provider: + | ReCaptchaV3Provider + | CustomProvider; if (typeof siteKeyOrProvider === 'string') { provider = new ReCaptchaV3Provider(siteKeyOrProvider); + } else if ( + siteKeyOrProvider instanceof ReCaptchaV3Provider || + siteKeyOrProvider instanceof CustomProvider + ) { + provider = siteKeyOrProvider; } else { provider = new CustomProvider({ getToken: siteKeyOrProvider.getToken }); } diff --git a/packages/firebase/compat/index.d.ts b/packages/firebase/compat/index.d.ts index e90812b454f..a81d7d37e92 100644 --- a/packages/firebase/compat/index.d.ts +++ b/packages/firebase/compat/index.d.ts @@ -1580,7 +1580,9 @@ declare namespace firebase.appCheck { export interface AppCheck { /** * Activate AppCheck - * @param provider reCAPTCHA provider, custom token provider, or reCAPTCHA site key. + * @param provider This can be a `ReCaptchaV3Provider` instance, + * a `CustomProvider` instance, an object with a custom `getToken()` + * method, or a reCAPTCHA site key. * @param isTokenAutoRefreshEnabled If true, the SDK automatically * refreshes App Check tokens as needed. If undefined, defaults to the * value of `app.automaticDataCollectionEnabled`, which defaults to @@ -1591,6 +1593,7 @@ declare namespace firebase.appCheck { | ReCaptchaV3Provider | CustomProvider | AppCheckProvider + | { getToken: () => AppCheckToken } | string, isTokenAutoRefreshEnabled?: boolean ): void; From 18996e4ff3113249c753c13b2b2d90352112d8ef Mon Sep 17 00:00:00 2001 From: Christina Holland Date: Mon, 4 Oct 2021 13:44:56 -0700 Subject: [PATCH 2/3] prettier --- packages/app-check-compat/src/index.ts | 5 +---- packages/app-check-compat/src/service.test.ts | 10 +++++----- packages/app-check-compat/src/service.ts | 4 +--- 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/packages/app-check-compat/src/index.ts b/packages/app-check-compat/src/index.ts index 5a592f0da87..925b6ca7b5e 100644 --- a/packages/app-check-compat/src/index.ts +++ b/packages/app-check-compat/src/index.ts @@ -28,10 +28,7 @@ import { } from '@firebase/component'; import { AppCheckService } from './service'; import { FirebaseAppCheck } from '@firebase/app-check-types'; -import { - ReCaptchaV3Provider, - CustomProvider -} from '@firebase/app-check'; +import { ReCaptchaV3Provider, CustomProvider } from '@firebase/app-check'; const factory: InstanceFactory<'appCheck-compat'> = ( container: ComponentContainer diff --git a/packages/app-check-compat/src/service.test.ts b/packages/app-check-compat/src/service.test.ts index 39285627314..6679c6b4823 100644 --- a/packages/app-check-compat/src/service.test.ts +++ b/packages/app-check-compat/src/service.test.ts @@ -65,7 +65,7 @@ describe('Firebase App Check > Service', () => { it( 'activate("string") calls modular initializeAppCheck() with a ' + - 'ReCaptchaV3Provider', + 'ReCaptchaV3Provider', () => { const initializeAppCheckStub = stub(appCheckExp, 'initializeAppCheck'); service = new AppCheckService(app); @@ -80,7 +80,7 @@ describe('Firebase App Check > Service', () => { it( 'activate({getToken: () => token}) calls modular initializeAppCheck() with' + - ' a CustomProvider', + ' a CustomProvider', () => { const initializeAppCheckStub = stub(appCheckExp, 'initializeAppCheck'); service = new AppCheckService(app); @@ -105,7 +105,7 @@ describe('Firebase App Check > Service', () => { it( 'activate(new RecaptchaV3Provider(...)) calls modular initializeAppCheck() with' + - ' a RecaptchaV3Provider', + ' a RecaptchaV3Provider', () => { const initializeAppCheckStub = stub(appCheckExp, 'initializeAppCheck'); service = new AppCheckService(app); @@ -120,7 +120,7 @@ describe('Firebase App Check > Service', () => { it( 'activate(new CustomProvider(...)) calls modular initializeAppCheck() with' + - ' a CustomProvider', + ' a CustomProvider', () => { const initializeAppCheckStub = stub(appCheckExp, 'initializeAppCheck'); service = new AppCheckService(app); @@ -198,7 +198,7 @@ describe('Firebase App Check > Service', () => { it('onTokenChanged() throws if activate() has not been called', async () => { service = createTestService(app); - expect(() => service.onTokenChanged(() => { })).to.throw( + expect(() => service.onTokenChanged(() => {})).to.throw( AppCheckError.USE_BEFORE_ACTIVATION ); }); diff --git a/packages/app-check-compat/src/service.ts b/packages/app-check-compat/src/service.ts index 0cf52ec93ab..fb0045aad9a 100644 --- a/packages/app-check-compat/src/service.ts +++ b/packages/app-check-compat/src/service.ts @@ -43,9 +43,7 @@ export class AppCheckService siteKeyOrProvider: string | AppCheckProvider, isTokenAutoRefreshEnabled?: boolean ): void { - let provider: - | ReCaptchaV3Provider - | CustomProvider; + let provider: ReCaptchaV3Provider | CustomProvider; if (typeof siteKeyOrProvider === 'string') { provider = new ReCaptchaV3Provider(siteKeyOrProvider); } else if ( From ec9c080faa4d70baece79eb041f76169ddc4c194 Mon Sep 17 00:00:00 2001 From: Christina Holland Date: Tue, 5 Oct 2021 10:28:21 -0700 Subject: [PATCH 3/3] Add changeset --- .changeset/wild-vans-camp.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/wild-vans-camp.md diff --git a/.changeset/wild-vans-camp.md b/.changeset/wild-vans-camp.md new file mode 100644 index 00000000000..9ca0764e97d --- /dev/null +++ b/.changeset/wild-vans-camp.md @@ -0,0 +1,6 @@ +--- +'@firebase/app-check-compat': patch +'firebase': patch +--- + +Fixed App Check compat package to correctly export and handle `ReCaptchaV3Provider` and `CustomProvider` classes.