Skip to content

Commit e5d4b53

Browse files
committed
Fix app check
1 parent 122c9ef commit e5d4b53

File tree

4 files changed

+62
-12
lines changed

4 files changed

+62
-12
lines changed

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

Lines changed: 53 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,9 @@ import * as client from './client';
3939
import * as storage from './storage';
4040
import * as internalApi from './internal-api';
4141
import { deleteApp, FirebaseApp } from '@firebase/app-exp';
42-
import { ReCaptchaV3Provider } from './providers';
42+
import { CustomProvider, ReCaptchaV3Provider } from './providers';
4343
import { AppCheckService } from './factory';
44+
import { AppCheckToken } from './public-types';
4445

4546
describe('api', () => {
4647
let app: FirebaseApp;
@@ -57,16 +58,65 @@ describe('api', () => {
5758
});
5859

5960
describe('initializeAppCheck()', () => {
60-
it('can only be called once', () => {
61+
it('can only be called once (if given different provider classes)', () => {
6162
initializeAppCheck(app, {
6263
provider: new ReCaptchaV3Provider(FAKE_SITE_KEY)
6364
});
6465
expect(() =>
6566
initializeAppCheck(app, {
66-
provider: new ReCaptchaV3Provider(FAKE_SITE_KEY)
67+
provider: new CustomProvider({
68+
getToken: () => Promise.resolve({ token: 'mm' } as AppCheckToken)
69+
})
70+
})
71+
).to.throw(/appCheck\/already-initialized/);
72+
});
73+
it('can only be called once (if given different ReCaptchaV3Providers)', () => {
74+
initializeAppCheck(app, {
75+
provider: new ReCaptchaV3Provider(FAKE_SITE_KEY)
76+
});
77+
expect(() =>
78+
initializeAppCheck(app, {
79+
provider: new ReCaptchaV3Provider(FAKE_SITE_KEY + 'X')
6780
})
6881
).to.throw(/appCheck\/already-initialized/);
6982
});
83+
it('can only be called once (if given different CustomProviders)', () => {
84+
initializeAppCheck(app, {
85+
provider: new CustomProvider({
86+
getToken: () => Promise.resolve({ token: 'ff' } as AppCheckToken)
87+
})
88+
});
89+
expect(() =>
90+
initializeAppCheck(app, {
91+
provider: new CustomProvider({
92+
getToken: () => Promise.resolve({ token: 'gg' } as AppCheckToken)
93+
})
94+
})
95+
).to.throw(/appCheck\/already-initialized/);
96+
});
97+
it('can be called multiple times (if given equivalent ReCaptchaV3Providers)', () => {
98+
const appCheckInstance = initializeAppCheck(app, {
99+
provider: new ReCaptchaV3Provider(FAKE_SITE_KEY)
100+
});
101+
expect(initializeAppCheck(app, {
102+
provider: new ReCaptchaV3Provider(FAKE_SITE_KEY)
103+
})
104+
).to.equal(appCheckInstance);
105+
});
106+
it('can be called multiple times (if given equivalent CustomProviders)', () => {
107+
const appCheckInstance = initializeAppCheck(app, {
108+
provider: new CustomProvider({
109+
getToken: () => Promise.resolve({ token: 'ff' } as AppCheckToken)
110+
})
111+
});
112+
expect(
113+
initializeAppCheck(app, {
114+
provider: new CustomProvider({
115+
getToken: () => Promise.resolve({ token: 'ff' } as AppCheckToken)
116+
})
117+
})
118+
).to.equal(appCheckInstance);
119+
});
70120

71121
it('initialize reCAPTCHA when a ReCaptchaV3Provider is provided', () => {
72122
const initReCAPTCHAStub = stub(reCAPTCHA, 'initialize').returns(

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,14 @@ import {
2525
import { ERROR_FACTORY, AppCheckError } from './errors';
2626
import { getState, setState, AppCheckState } from './state';
2727
import { FirebaseApp, getApp, _getProvider } from '@firebase/app-exp';
28-
import { getModularInstance, ErrorFn, NextFn, deepEqual } from '@firebase/util';
28+
import { getModularInstance, ErrorFn, NextFn } from '@firebase/util';
2929
import { AppCheckService } from './factory';
3030
import { AppCheckProvider, ListenerType } from './types';
3131
import {
3232
getToken as getTokenInternal,
3333
addTokenListener,
3434
removeTokenListener
3535
} from './internal-api';
36-
import { CustomProvider, ReCaptchaV3Provider } from './providers';
3736

3837
declare module '@firebase/component' {
3938
interface NameServiceMapping {

packages-exp/app-check-exp/src/factory.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
* limitations under the License.
1616
*/
1717

18-
import { AppCheck, AppCheckOptions } from './public-types';
18+
import { AppCheck } from './public-types';
1919
import { FirebaseApp, _FirebaseService } from '@firebase/app-exp';
2020
import { FirebaseAppCheckInternal, ListenerType } from './types';
2121
import {
@@ -32,8 +32,7 @@ import { getState } from './state';
3232
export class AppCheckService implements AppCheck, _FirebaseService {
3333
constructor(
3434
public app: FirebaseApp,
35-
public platformLoggerProvider: Provider<'platform-logger'>,
36-
public options: AppCheckOptions
35+
public platformLoggerProvider: Provider<'platform-logger'>
3736
) {}
3837
_delete(): Promise<void> {
3938
const { tokenObservers } = getState(this.app);
@@ -46,10 +45,9 @@ export class AppCheckService implements AppCheck, _FirebaseService {
4645

4746
export function factory(
4847
app: FirebaseApp,
49-
platformLoggerProvider: Provider<'platform-logger'>,
50-
options: AppCheckOptions
48+
platformLoggerProvider: Provider<'platform-logger'>
5149
): AppCheckService {
52-
return new AppCheckService(app, platformLoggerProvider, options);
50+
return new AppCheckService(app, platformLoggerProvider);
5351
}
5452

5553
export function internalFactory(

packages-exp/app-check-exp/src/providers.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,10 @@ export class CustomProvider implements AppCheckProvider {
138138
*/
139139
isEqual(otherProvider: unknown): boolean {
140140
if (otherProvider instanceof CustomProvider) {
141-
return this.getToken.toString() === otherProvider.getToken.toString();
141+
return (
142+
this._customProviderOptions.getToken.toString() ===
143+
otherProvider._customProviderOptions.getToken.toString()
144+
);
142145
} else {
143146
return false;
144147
}

0 commit comments

Comments
 (0)