Skip to content

Commit c7ef26f

Browse files
authored
Register auth with the app component. Add the getAuth() methods for each platform (#3637)
* Register auth with the app component. Add the getAuth() methods for each platform * Add getAuth for webworker build * Formatting * Make firebase auth implement _FirebaseService interface * Formatting * Fix tests * Formatting * PR feedback * Formatting * PR feedback * Formatting
1 parent 55d3c26 commit c7ef26f

File tree

20 files changed

+312
-156
lines changed

20 files changed

+312
-156
lines changed

packages-exp/auth-compat-exp/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,19 @@
1616
*/
1717

1818
import firebase from '@firebase/app';
19-
import * as impl from '@firebase/auth-exp/internal';
2019
import { _FirebaseNamespace } from '@firebase/app-types/private';
20+
import * as impl from '@firebase/auth-exp/internal';
2121
import * as externs from '@firebase/auth-types-exp';
2222
import {
2323
Component,
2424
ComponentType,
2525
InstantiationMode
2626
} from '@firebase/component';
27-
import '@firebase/installations';
27+
2828
import { version } from './package.json';
2929
import { Auth } from './src/auth';
30-
import { RecaptchaVerifier } from './src/recaptcha_verifier';
3130
import { Persistence } from './src/persistence';
31+
import { RecaptchaVerifier } from './src/recaptcha_verifier';
3232

3333
const AUTH_TYPE = 'auth';
3434

packages-exp/auth-compat-exp/src/auth.ts

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

18+
import '@firebase/installations';
19+
1820
import { FirebaseApp } from '@firebase/app-types';
1921
import * as impl from '@firebase/auth-exp/internal';
2022
import * as compat from '@firebase/auth-types';
2123
import * as externs from '@firebase/auth-types-exp';
22-
import '@firebase/installations';
2324
import {
24-
Observer,
25-
Unsubscribe,
2625
ErrorFn,
27-
isIndexedDBAvailable
26+
isIndexedDBAvailable,
27+
Observer,
28+
Unsubscribe
2829
} from '@firebase/util';
30+
31+
import { _validatePersistenceArgument, Persistence } from './persistence';
32+
import { _getClientPlatform, _isPopupRedirectSupported } from './platform';
2933
import { User } from './user';
3034
import {
3135
convertConfirmationResult,
3236
convertCredential
3337
} from './user_credential';
34-
import { _isPopupRedirectSupported, _getClientPlatform } from './platform';
35-
import { Persistence, _validatePersistenceArgument } from './persistence';
3638

3739
export class Auth extends impl.AuthImplCompat<User>
3840
implements compat.FirebaseAuth {
@@ -59,7 +61,7 @@ export class Auth extends impl.AuthImplCompat<User>
5961
sdkClientVersion: impl._getClientVersion(_getClientPlatform())
6062
};
6163

62-
super(app.name, config, User);
64+
super(app, config, User);
6365
this.app = app;
6466

6567
// This promise is intended to float; auth initialization happens in the

packages-exp/auth-exp/demo/src/index.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import {
3333
fetchSignInMethodsForEmail,
3434
indexedDBLocalPersistence,
3535
initializeAuth,
36+
getAuth,
3637
inMemoryPersistence,
3738
isSignInWithEmailLink,
3839
linkWithCredential,
@@ -1640,10 +1641,7 @@ function onApplyAuthSettingsChange() {
16401641
function initApp() {
16411642
log('Initializing app...');
16421643
app = initializeApp(config);
1643-
auth = initializeAuth(app, {
1644-
persistence: browserSessionPersistence,
1645-
popupRedirectResolver: browserPopupRedirectResolver
1646-
});
1644+
auth = getAuth(app);
16471645

16481646
tempApp = initializeApp(
16491647
{

packages-exp/auth-exp/demo/src/worker/service-worker.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@
2121
* mode.
2222
*/
2323
import { initializeApp } from '@firebase/app-exp';
24-
import { initializeAuth, indexedDBLocalPersistence } from '@firebase/auth-exp';
24+
import { getAuth } from '@firebase/auth-exp';
2525
import { User } from '@firebase/auth-types-exp';
26+
2627
import { config } from '../config';
2728

2829
declare let self: ServiceWorkerGlobalScope;
@@ -38,9 +39,7 @@ const urlsToCache = [
3839

3940
// Initialize the Firebase app in the service worker.
4041
const app = initializeApp(config);
41-
const auth = initializeAuth(app, {
42-
persistence: indexedDBLocalPersistence
43-
});
42+
const auth = getAuth(app);
4443

4544
/**
4645
* Returns a promise that resolves with an ID token if available.

packages-exp/auth-exp/demo/src/worker/web-worker.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,8 @@ import { initializeApp } from '@firebase/app-exp';
1818
import {
1919
createUserWithEmailAndPassword,
2020
fetchSignInMethodsForEmail,
21+
getAuth,
2122
GoogleAuthProvider,
22-
initializeAuth,
23-
inMemoryPersistence,
2423
signInAnonymously,
2524
signInWithCredential,
2625
signInWithEmailAndPassword,
@@ -37,9 +36,7 @@ import { config } from '../config';
3736

3837
// Initialize the Firebase app in the web worker.
3938
const app = initializeApp(config);
40-
const auth = initializeAuth(app, {
41-
persistence: inMemoryPersistence
42-
});
39+
const auth = getAuth(app);
4340

4441
/**
4542
* Returns a promise that resolves with an ID token if available.

packages-exp/auth-exp/index.node.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,13 @@
2424

2525
import * as fetchImpl from 'node-fetch';
2626

27-
import { registerVersion } from '@firebase/app-exp';
28-
import { name, version } from './package.json';
29-
import { _initializeAuthForClientPlatform } from './src/core/auth/auth_impl';
30-
import { ClientPlatform } from './src/core/util/version';
27+
import { FirebaseApp } from '@firebase/app-types-exp';
28+
import { Auth } from '@firebase/auth-types-exp';
29+
30+
import { initializeAuth } from './src';
31+
import { registerAuth } from './src/core/auth/register';
3132
import { FetchProvider } from './src/core/util/fetch_provider';
33+
import { ClientPlatform } from './src/core/util/version';
3234

3335
// Initialize the fetch polyfill, the types are slightly off so just cast and hope for the best
3436
FetchProvider.initialize(
@@ -40,8 +42,8 @@ FetchProvider.initialize(
4042
// Core functionality shared by all clients
4143
export * from './src';
4244

43-
export const initializeAuth = _initializeAuthForClientPlatform(
44-
ClientPlatform.NODE
45-
);
45+
export function getAuth(app?: FirebaseApp): Auth {
46+
return initializeAuth(app);
47+
}
4648

47-
registerVersion(name, version, 'node');
49+
registerAuth(ClientPlatform.NODE);

packages-exp/auth-exp/index.rn.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,15 @@
2222
* just use index.ts
2323
*/
2424

25-
import { registerVersion } from '@firebase/app-exp';
2625
import { AsyncStorage } from 'react-native';
27-
import { name, version } from './package.json';
28-
import { _initializeAuthForClientPlatform } from './src/core/auth/auth_impl';
29-
import { getReactNativePersistence } from './src/platform_react_native/persistence/react_native';
26+
27+
import { FirebaseApp } from '@firebase/app-types-exp';
28+
import { Auth } from '@firebase/auth-types-exp';
29+
30+
import { initializeAuth } from './src';
31+
import { registerAuth } from './src/core/auth/register';
3032
import { ClientPlatform } from './src/core/util/version';
33+
import { getReactNativePersistence } from './src/platform_react_native/persistence/react_native';
3134

3235
// Core functionality shared by all clients
3336
export * from './src';
@@ -36,8 +39,10 @@ export const reactNativeLocalPersistence = getReactNativePersistence(
3639
AsyncStorage
3740
);
3841

39-
export const initializeAuth = _initializeAuthForClientPlatform(
40-
ClientPlatform.REACT_NATIVE
41-
);
42+
export function getAuth(app?: FirebaseApp): Auth {
43+
return initializeAuth(app, {
44+
persistence: reactNativeLocalPersistence
45+
});
46+
}
4247

43-
registerVersion(name, version, 'rn');
48+
registerAuth(ClientPlatform.REACT_NATIVE);

packages-exp/auth-exp/index.ts

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

18-
import { registerVersion } from '@firebase/app-exp';
19-
import { name, version } from './package.json';
20-
import { _initializeAuthForClientPlatform } from './src/core/auth/auth_impl';
18+
import { FirebaseApp } from '@firebase/app-types-exp';
19+
import { Auth } from '@firebase/auth-types-exp';
20+
21+
import { initializeAuth } from './src';
22+
import { registerAuth } from './src/core/auth/register';
2123
import { ClientPlatform } from './src/core/util/version';
24+
import { browserLocalPersistence } from './src/platform_browser/persistence/browser';
25+
import { indexedDBLocalPersistence } from './src/platform_browser/persistence/indexed_db';
26+
import { browserPopupRedirectResolver } from './src/platform_browser/popup_redirect';
2227

2328
// Core functionality shared by all clients
2429
export * from './src';
@@ -60,8 +65,11 @@ export { browserPopupRedirectResolver } from './src/platform_browser/popup_redir
6065
// MFA
6166
export { PhoneMultiFactorGenerator } from './src/platform_browser/mfa/assertions/phone';
6267

63-
export const initializeAuth = _initializeAuthForClientPlatform(
64-
ClientPlatform.BROWSER
65-
);
68+
export function getAuth(app?: FirebaseApp): Auth {
69+
return initializeAuth(app, {
70+
popupRedirectResolver: browserPopupRedirectResolver,
71+
persistence: [indexedDBLocalPersistence, browserLocalPersistence]
72+
});
73+
}
6674

67-
registerVersion(name, version);
75+
registerAuth(ClientPlatform.BROWSER);

packages-exp/auth-exp/index.webworker.ts

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

18-
import { registerVersion } from '@firebase/app-exp';
19-
import { name, version } from './package.json';
20-
import { _initializeAuthForClientPlatform } from './src/core/auth/auth_impl';
18+
import { _getProvider, getApp } from '@firebase/app-exp';
19+
import { Auth } from '@firebase/auth-types-exp';
20+
21+
import { AuthImpl } from './src/core/auth/auth_impl';
22+
import { _initializeAuthInstance } from './src/core/auth/initialize';
23+
import { _AUTH_COMPONENT_NAME, registerAuth } from './src/core/auth/register';
24+
import { Persistence } from './src/core/persistence';
25+
import { _getInstance } from './src/core/util/instantiator';
2126
import { ClientPlatform } from './src/core/util/version';
27+
import { indexedDBLocalPersistence } from './src/platform_browser/persistence/indexed_db';
2228

2329
// Core functionality shared by all clients
2430
export * from './src';
2531

26-
export const initializeAuth = _initializeAuthForClientPlatform(
27-
ClientPlatform.WORKER
28-
);
32+
registerAuth(ClientPlatform.WORKER);
33+
34+
export function getAuth(app = getApp()): Auth {
35+
// Unlike the other environments, we need to explicitly check if indexedDb is
36+
// available. That means doing the whole rigamarole
37+
const auth = _getProvider(
38+
app,
39+
_AUTH_COMPONENT_NAME
40+
).getImmediate() as AuthImpl;
41+
42+
// This promise is intended to float; auth initialization happens in the
43+
// background, meanwhile the auth object may be used by the app.
44+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
45+
_getInstance<Persistence>(indexedDBLocalPersistence)
46+
.isAvailable()
47+
.then(avail => {
48+
const deps = avail ? { persistence: indexedDBLocalPersistence } : {};
49+
_initializeAuthInstance(auth, deps);
50+
});
2951

30-
registerVersion(name, version, 'webworker');
52+
return auth;
53+
}

packages-exp/auth-exp/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,12 @@
3737
"peerDependencies": {
3838
"@firebase/app-exp": "0.x",
3939
"@firebase/app-types-exp": "0.x",
40-
"@firebase/auth-types-exp": "0.x",
4140
"@firebase/auth-exp": "0.x",
41+
"@firebase/auth-types-exp": "0.x",
4242
"@firebase/util": "0.x"
4343
},
4444
"dependencies": {
45+
"@firebase/component": "0.1.17",
4546
"@firebase/logger": "^0.2.6",
4647
"@firebase/util": "^0.3.0",
4748
"node-fetch": "2.6.0",

packages-exp/auth-exp/src/core/auth/auth_impl.test.ts

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,29 @@
1515
* limitations under the License.
1616
*/
1717

18-
import { FirebaseApp } from '@firebase/app-types-exp';
19-
import { FirebaseError } from '@firebase/util';
2018
import { expect, use } from 'chai';
2119
import * as chaiAsPromised from 'chai-as-promised';
2220
import * as sinon from 'sinon';
2321
import * as sinonChai from 'sinon-chai';
22+
23+
import { FirebaseApp } from '@firebase/app-types-exp';
24+
import { FirebaseError } from '@firebase/util';
25+
2426
import { testUser } from '../../../test/helpers/mock_auth';
27+
import { Auth } from '../../model/auth';
2528
import { User } from '../../model/user';
2629
import { Persistence } from '../persistence';
2730
import { inMemoryPersistence } from '../persistence/in_memory';
2831
import { _getInstance } from '../util/instantiator';
2932
import * as navigator from '../util/navigator';
30-
import { ClientPlatform } from '../util/version';
31-
import { _castAuth, _initializeAuthForClientPlatform } from './auth_impl';
32-
import { Auth } from '../../model/auth';
33+
import {
34+
_castAuth,
35+
AuthImpl,
36+
DEFAULT_API_HOST,
37+
DEFAULT_API_SCHEME,
38+
DEFAULT_TOKEN_API_HOST
39+
} from './auth_impl';
40+
import { _initializeAuthInstance } from './initialize';
3341

3442
use(sinonChai);
3543
use(chaiAsPromised);
@@ -43,19 +51,22 @@ const FAKE_APP: FirebaseApp = {
4351
automaticDataCollectionEnabled: false
4452
};
4553

46-
const initializeAuth = _initializeAuthForClientPlatform(ClientPlatform.BROWSER);
47-
4854
describe('core/auth/auth_impl', () => {
4955
let auth: Auth;
5056
let persistenceStub: sinon.SinonStubbedInstance<Persistence>;
5157

52-
beforeEach(() => {
58+
beforeEach(async () => {
5359
persistenceStub = sinon.stub(_getInstance(inMemoryPersistence));
54-
auth = _castAuth(
55-
initializeAuth(FAKE_APP, {
56-
persistence: inMemoryPersistence
57-
})
58-
);
60+
const authImpl = new AuthImpl(FAKE_APP, {
61+
apiKey: FAKE_APP.options.apiKey!,
62+
apiHost: DEFAULT_API_HOST,
63+
apiScheme: DEFAULT_API_SCHEME,
64+
tokenApiHost: DEFAULT_TOKEN_API_HOST,
65+
sdkClientVersion: 'v'
66+
});
67+
68+
_initializeAuthInstance(authImpl, { persistence: inMemoryPersistence });
69+
auth = authImpl;
5970
});
6071

6172
afterEach(sinon.restore);

0 commit comments

Comments
 (0)