From 8eff962cab608341a6f2fedc640a0e32d96f26e2 Mon Sep 17 00:00:00 2001 From: altaf-creator Date: Sun, 9 Nov 2025 11:15:19 +0800 Subject: pain --- .../@firebase/auth-compat/dist/index.esm.js | 1001 ++++++++++++++++++++ 1 file changed, 1001 insertions(+) create mode 100644 frontend-old/node_modules/@firebase/auth-compat/dist/index.esm.js (limited to 'frontend-old/node_modules/@firebase/auth-compat/dist/index.esm.js') diff --git a/frontend-old/node_modules/@firebase/auth-compat/dist/index.esm.js b/frontend-old/node_modules/@firebase/auth-compat/dist/index.esm.js new file mode 100644 index 0000000..96a4c44 --- /dev/null +++ b/frontend-old/node_modules/@firebase/auth-compat/dist/index.esm.js @@ -0,0 +1,1001 @@ +import firebase from '@firebase/app-compat'; +import * as exp from '@firebase/auth/internal'; +import { Component } from '@firebase/component'; +import { isBrowserExtension, getUA, isReactNative, isNode, isIndexedDBAvailable, isIE, FirebaseError } from '@firebase/util'; + +var name = "@firebase/auth-compat"; +var version = "0.6.1"; + +/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +const CORDOVA_ONDEVICEREADY_TIMEOUT_MS = 1000; +function _getCurrentScheme() { + return self?.location?.protocol || null; +} +/** + * @return {boolean} Whether the current environment is http or https. + */ +function _isHttpOrHttps() { + return _getCurrentScheme() === 'http:' || _getCurrentScheme() === 'https:'; +} +/** + * @param {?string=} ua The user agent. + * @return {boolean} Whether the app is rendered in a mobile iOS or Android + * Cordova environment. + */ +function _isAndroidOrIosCordovaScheme(ua = getUA()) { + return !!((_getCurrentScheme() === 'file:' || + _getCurrentScheme() === 'ionic:' || + _getCurrentScheme() === 'capacitor:') && + ua.toLowerCase().match(/iphone|ipad|ipod|android/)); +} +/** + * @return {boolean} Whether the environment is a native environment, where + * CORS checks do not apply. + */ +function _isNativeEnvironment() { + return isReactNative() || isNode(); +} +/** + * Checks whether the user agent is IE11. + * @return {boolean} True if it is IE11. + */ +function _isIe11() { + return isIE() && document?.documentMode === 11; +} +/** + * Checks whether the user agent is Edge. + * @param {string} userAgent The browser user agent string. + * @return {boolean} True if it is Edge. + */ +function _isEdge(ua = getUA()) { + return /Edge\/\d+/.test(ua); +} +/** + * @param {?string=} opt_userAgent The navigator user agent. + * @return {boolean} Whether local storage is not synchronized between an iframe + * and a popup of the same domain. + */ +function _isLocalStorageNotSynchronized(ua = getUA()) { + return _isIe11() || _isEdge(ua); +} +/** @return {boolean} Whether web storage is supported. */ +function _isWebStorageSupported() { + try { + const storage = self.localStorage; + const key = exp._generateEventId(); + if (storage) { + // setItem will throw an exception if we cannot access WebStorage (e.g., + // Safari in private mode). + storage['setItem'](key, '1'); + storage['removeItem'](key); + // For browsers where iframe web storage does not synchronize with a popup + // of the same domain, indexedDB is used for persistent storage. These + // browsers include IE11 and Edge. + // Make sure it is supported (IE11 and Edge private mode does not support + // that). + if (_isLocalStorageNotSynchronized()) { + // In such browsers, if indexedDB is not supported, an iframe cannot be + // notified of the popup sign in result. + return isIndexedDBAvailable(); + } + return true; + } + } + catch (e) { + // localStorage is not available from a worker. Test availability of + // indexedDB. + return _isWorker() && isIndexedDBAvailable(); + } + return false; +} +/** + * @param {?Object=} global The optional global scope. + * @return {boolean} Whether current environment is a worker. + */ +function _isWorker() { + // WorkerGlobalScope only defined in worker environment. + return (typeof global !== 'undefined' && + 'WorkerGlobalScope' in global && + 'importScripts' in global); +} +function _isPopupRedirectSupported() { + return ((_isHttpOrHttps() || + isBrowserExtension() || + _isAndroidOrIosCordovaScheme()) && + // React Native with remote debugging reports its location.protocol as + // http. + !_isNativeEnvironment() && + // Local storage has to be supported for browser popup and redirect + // operations to work. + _isWebStorageSupported() && + // DOM, popups and redirects are not supported within a worker. + !_isWorker()); +} +/** Quick check that indicates the platform *may* be Cordova */ +function _isLikelyCordova() { + return _isAndroidOrIosCordovaScheme() && typeof document !== 'undefined'; +} +async function _isCordova() { + if (!_isLikelyCordova()) { + return false; + } + return new Promise(resolve => { + const timeoutId = setTimeout(() => { + // We've waited long enough; the telltale Cordova event didn't happen + resolve(false); + }, CORDOVA_ONDEVICEREADY_TIMEOUT_MS); + document.addEventListener('deviceready', () => { + clearTimeout(timeoutId); + resolve(true); + }); + }); +} +function _getSelfWindow() { + return typeof window !== 'undefined' ? window : null; +} + +/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +const Persistence = { + LOCAL: 'local', + NONE: 'none', + SESSION: 'session' +}; +const _assert$3 = exp._assert; +const PERSISTENCE_KEY = 'persistence'; +/** + * Validates that an argument is a valid persistence value. If an invalid type + * is specified, an error is thrown synchronously. + */ +function _validatePersistenceArgument(auth, persistence) { + _assert$3(Object.values(Persistence).includes(persistence), auth, "invalid-persistence-type" /* exp.AuthErrorCode.INVALID_PERSISTENCE */); + // Validate if the specified type is supported in the current environment. + if (isReactNative()) { + // This is only supported in a browser. + _assert$3(persistence !== Persistence.SESSION, auth, "unsupported-persistence-type" /* exp.AuthErrorCode.UNSUPPORTED_PERSISTENCE */); + return; + } + if (isNode()) { + // Only none is supported in Node.js. + _assert$3(persistence === Persistence.NONE, auth, "unsupported-persistence-type" /* exp.AuthErrorCode.UNSUPPORTED_PERSISTENCE */); + return; + } + if (_isWorker()) { + // In a worker environment, either LOCAL or NONE are supported. + // If indexedDB not supported and LOCAL provided, throw an error + _assert$3(persistence === Persistence.NONE || + (persistence === Persistence.LOCAL && isIndexedDBAvailable()), auth, "unsupported-persistence-type" /* exp.AuthErrorCode.UNSUPPORTED_PERSISTENCE */); + return; + } + // This is restricted by what the browser supports. + _assert$3(persistence === Persistence.NONE || _isWebStorageSupported(), auth, "unsupported-persistence-type" /* exp.AuthErrorCode.UNSUPPORTED_PERSISTENCE */); +} +async function _savePersistenceForRedirect(auth) { + await auth._initializationPromise; + const session = getSessionStorageIfAvailable(); + const key = exp._persistenceKeyName(PERSISTENCE_KEY, auth.config.apiKey, auth.name); + if (session) { + session.setItem(key, auth._getPersistenceType()); + } +} +function _getPersistencesFromRedirect(apiKey, appName) { + const session = getSessionStorageIfAvailable(); + if (!session) { + return []; + } + const key = exp._persistenceKeyName(PERSISTENCE_KEY, apiKey, appName); + const persistence = session.getItem(key); + switch (persistence) { + case Persistence.NONE: + return [exp.inMemoryPersistence]; + case Persistence.LOCAL: + return [exp.indexedDBLocalPersistence, exp.browserSessionPersistence]; + case Persistence.SESSION: + return [exp.browserSessionPersistence]; + default: + return []; + } +} +/** Returns session storage, or null if the property access errors */ +function getSessionStorageIfAvailable() { + try { + return _getSelfWindow()?.sessionStorage || null; + } + catch (e) { + return null; + } +} + +/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +const _assert$2 = exp._assert; +/** Platform-agnostic popup-redirect resolver */ +class CompatPopupRedirectResolver { + constructor() { + // Create both resolvers for dynamic resolution later + this.browserResolver = exp._getInstance(exp.browserPopupRedirectResolver); + this.cordovaResolver = exp._getInstance(exp.cordovaPopupRedirectResolver); + // The actual resolver in use: either browserResolver or cordovaResolver. + this.underlyingResolver = null; + this._redirectPersistence = exp.browserSessionPersistence; + this._completeRedirectFn = exp._getRedirectResult; + this._overrideRedirectResult = exp._overrideRedirectResult; + } + async _initialize(auth) { + await this.selectUnderlyingResolver(); + return this.assertedUnderlyingResolver._initialize(auth); + } + async _openPopup(auth, provider, authType, eventId) { + await this.selectUnderlyingResolver(); + return this.assertedUnderlyingResolver._openPopup(auth, provider, authType, eventId); + } + async _openRedirect(auth, provider, authType, eventId) { + await this.selectUnderlyingResolver(); + return this.assertedUnderlyingResolver._openRedirect(auth, provider, authType, eventId); + } + _isIframeWebStorageSupported(auth, cb) { + this.assertedUnderlyingResolver._isIframeWebStorageSupported(auth, cb); + } + _originValidation(auth) { + return this.assertedUnderlyingResolver._originValidation(auth); + } + get _shouldInitProactively() { + return _isLikelyCordova() || this.browserResolver._shouldInitProactively; + } + get assertedUnderlyingResolver() { + _assert$2(this.underlyingResolver, "internal-error" /* exp.AuthErrorCode.INTERNAL_ERROR */); + return this.underlyingResolver; + } + async selectUnderlyingResolver() { + if (this.underlyingResolver) { + return; + } + // We haven't yet determined whether or not we're in Cordova; go ahead + // and determine that state now. + const isCordova = await _isCordova(); + this.underlyingResolver = isCordova + ? this.cordovaResolver + : this.browserResolver; + } +} + +/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +function unwrap(object) { + return object.unwrap(); +} +function wrapped(object) { + return object.wrapped(); +} + +/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +function credentialFromResponse(userCredential) { + return credentialFromObject(userCredential); +} +function attachExtraErrorFields(auth, e) { + // The response contains all fields from the server which may or may not + // actually match the underlying type + const response = e.customData + ?._tokenResponse; + if (e?.code === 'auth/multi-factor-auth-required') { + const mfaErr = e; + mfaErr.resolver = new MultiFactorResolver(auth, exp.getMultiFactorResolver(auth, e)); + } + else if (response) { + const credential = credentialFromObject(e); + const credErr = e; + if (credential) { + credErr.credential = credential; + credErr.tenantId = response.tenantId || undefined; + credErr.email = response.email || undefined; + credErr.phoneNumber = response.phoneNumber || undefined; + } + } +} +function credentialFromObject(object) { + const { _tokenResponse } = (object instanceof FirebaseError ? object.customData : object); + if (!_tokenResponse) { + return null; + } + // Handle phone Auth credential responses, as they have a different format + // from other backend responses (i.e. no providerId). This is also only the + // case for user credentials (does not work for errors). + if (!(object instanceof FirebaseError)) { + if ('temporaryProof' in _tokenResponse && 'phoneNumber' in _tokenResponse) { + return exp.PhoneAuthProvider.credentialFromResult(object); + } + } + const providerId = _tokenResponse.providerId; + // Email and password is not supported as there is no situation where the + // server would return the password to the client. + if (!providerId || providerId === exp.ProviderId.PASSWORD) { + return null; + } + let provider; + switch (providerId) { + case exp.ProviderId.GOOGLE: + provider = exp.GoogleAuthProvider; + break; + case exp.ProviderId.FACEBOOK: + provider = exp.FacebookAuthProvider; + break; + case exp.ProviderId.GITHUB: + provider = exp.GithubAuthProvider; + break; + case exp.ProviderId.TWITTER: + provider = exp.TwitterAuthProvider; + break; + default: + const { oauthIdToken, oauthAccessToken, oauthTokenSecret, pendingToken, nonce } = _tokenResponse; + if (!oauthAccessToken && + !oauthTokenSecret && + !oauthIdToken && + !pendingToken) { + return null; + } + // TODO(avolkovi): uncomment this and get it working with SAML & OIDC + if (pendingToken) { + if (providerId.startsWith('saml.')) { + return exp.SAMLAuthCredential._create(providerId, pendingToken); + } + else { + // OIDC and non-default providers excluding Twitter. + return exp.OAuthCredential._fromParams({ + providerId, + signInMethod: providerId, + pendingToken, + idToken: oauthIdToken, + accessToken: oauthAccessToken + }); + } + } + return new exp.OAuthProvider(providerId).credential({ + idToken: oauthIdToken, + accessToken: oauthAccessToken, + rawNonce: nonce + }); + } + return object instanceof FirebaseError + ? provider.credentialFromError(object) + : provider.credentialFromResult(object); +} +function convertCredential(auth, credentialPromise) { + return credentialPromise + .catch(e => { + if (e instanceof FirebaseError) { + attachExtraErrorFields(auth, e); + } + throw e; + }) + .then(credential => { + const operationType = credential.operationType; + const user = credential.user; + return { + operationType, + credential: credentialFromResponse(credential), + additionalUserInfo: exp.getAdditionalUserInfo(credential), + user: User.getOrCreate(user) + }; + }); +} +async function convertConfirmationResult(auth, confirmationResultPromise) { + const confirmationResultExp = await confirmationResultPromise; + return { + verificationId: confirmationResultExp.verificationId, + confirm: (verificationCode) => convertCredential(auth, confirmationResultExp.confirm(verificationCode)) + }; +} +class MultiFactorResolver { + constructor(auth, resolver) { + this.resolver = resolver; + this.auth = wrapped(auth); + } + get session() { + return this.resolver.session; + } + get hints() { + return this.resolver.hints; + } + resolveSignIn(assertion) { + return convertCredential(unwrap(this.auth), this.resolver.resolveSignIn(assertion)); + } +} + +/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +class User { + constructor(_delegate) { + this._delegate = _delegate; + this.multiFactor = exp.multiFactor(_delegate); + } + static getOrCreate(user) { + if (!User.USER_MAP.has(user)) { + User.USER_MAP.set(user, new User(user)); + } + return User.USER_MAP.get(user); + } + delete() { + return this._delegate.delete(); + } + reload() { + return this._delegate.reload(); + } + toJSON() { + return this._delegate.toJSON(); + } + getIdTokenResult(forceRefresh) { + return this._delegate.getIdTokenResult(forceRefresh); + } + getIdToken(forceRefresh) { + return this._delegate.getIdToken(forceRefresh); + } + linkAndRetrieveDataWithCredential(credential) { + return this.linkWithCredential(credential); + } + async linkWithCredential(credential) { + return convertCredential(this.auth, exp.linkWithCredential(this._delegate, credential)); + } + async linkWithPhoneNumber(phoneNumber, applicationVerifier) { + return convertConfirmationResult(this.auth, exp.linkWithPhoneNumber(this._delegate, phoneNumber, applicationVerifier)); + } + async linkWithPopup(provider) { + return convertCredential(this.auth, exp.linkWithPopup(this._delegate, provider, CompatPopupRedirectResolver)); + } + async linkWithRedirect(provider) { + await _savePersistenceForRedirect(exp._castAuth(this.auth)); + return exp.linkWithRedirect(this._delegate, provider, CompatPopupRedirectResolver); + } + reauthenticateAndRetrieveDataWithCredential(credential) { + return this.reauthenticateWithCredential(credential); + } + async reauthenticateWithCredential(credential) { + return convertCredential(this.auth, exp.reauthenticateWithCredential(this._delegate, credential)); + } + reauthenticateWithPhoneNumber(phoneNumber, applicationVerifier) { + return convertConfirmationResult(this.auth, exp.reauthenticateWithPhoneNumber(this._delegate, phoneNumber, applicationVerifier)); + } + reauthenticateWithPopup(provider) { + return convertCredential(this.auth, exp.reauthenticateWithPopup(this._delegate, provider, CompatPopupRedirectResolver)); + } + async reauthenticateWithRedirect(provider) { + await _savePersistenceForRedirect(exp._castAuth(this.auth)); + return exp.reauthenticateWithRedirect(this._delegate, provider, CompatPopupRedirectResolver); + } + sendEmailVerification(actionCodeSettings) { + return exp.sendEmailVerification(this._delegate, actionCodeSettings); + } + async unlink(providerId) { + await exp.unlink(this._delegate, providerId); + return this; + } + updateEmail(newEmail) { + return exp.updateEmail(this._delegate, newEmail); + } + updatePassword(newPassword) { + return exp.updatePassword(this._delegate, newPassword); + } + updatePhoneNumber(phoneCredential) { + return exp.updatePhoneNumber(this._delegate, phoneCredential); + } + updateProfile(profile) { + return exp.updateProfile(this._delegate, profile); + } + verifyBeforeUpdateEmail(newEmail, actionCodeSettings) { + return exp.verifyBeforeUpdateEmail(this._delegate, newEmail, actionCodeSettings); + } + get emailVerified() { + return this._delegate.emailVerified; + } + get isAnonymous() { + return this._delegate.isAnonymous; + } + get metadata() { + return this._delegate.metadata; + } + get phoneNumber() { + return this._delegate.phoneNumber; + } + get providerData() { + return this._delegate.providerData; + } + get refreshToken() { + return this._delegate.refreshToken; + } + get tenantId() { + return this._delegate.tenantId; + } + get displayName() { + return this._delegate.displayName; + } + get email() { + return this._delegate.email; + } + get photoURL() { + return this._delegate.photoURL; + } + get providerId() { + return this._delegate.providerId; + } + get uid() { + return this._delegate.uid; + } + get auth() { + return this._delegate.auth; + } +} +// Maintain a map so that there's always a 1:1 mapping between new User and +// legacy compat users +User.USER_MAP = new WeakMap(); + +/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +const _assert$1 = exp._assert; +class Auth { + constructor(app, provider) { + this.app = app; + if (provider.isInitialized()) { + this._delegate = provider.getImmediate(); + this.linkUnderlyingAuth(); + return; + } + const { apiKey } = app.options; + // TODO: platform needs to be determined using heuristics + _assert$1(apiKey, "invalid-api-key" /* exp.AuthErrorCode.INVALID_API_KEY */, { + appName: app.name + }); + // TODO: platform needs to be determined using heuristics + _assert$1(apiKey, "invalid-api-key" /* exp.AuthErrorCode.INVALID_API_KEY */, { + appName: app.name + }); + // Only use a popup/redirect resolver in browser environments + const resolver = typeof window !== 'undefined' ? CompatPopupRedirectResolver : undefined; + this._delegate = provider.initialize({ + options: { + persistence: buildPersistenceHierarchy(apiKey, app.name), + popupRedirectResolver: resolver + } + }); + this._delegate._updateErrorMap(exp.debugErrorMap); + this.linkUnderlyingAuth(); + } + get emulatorConfig() { + return this._delegate.emulatorConfig; + } + get currentUser() { + if (!this._delegate.currentUser) { + return null; + } + return User.getOrCreate(this._delegate.currentUser); + } + get languageCode() { + return this._delegate.languageCode; + } + set languageCode(languageCode) { + this._delegate.languageCode = languageCode; + } + get settings() { + return this._delegate.settings; + } + get tenantId() { + return this._delegate.tenantId; + } + set tenantId(tid) { + this._delegate.tenantId = tid; + } + useDeviceLanguage() { + this._delegate.useDeviceLanguage(); + } + signOut() { + return this._delegate.signOut(); + } + useEmulator(url, options) { + exp.connectAuthEmulator(this._delegate, url, options); + } + applyActionCode(code) { + return exp.applyActionCode(this._delegate, code); + } + checkActionCode(code) { + return exp.checkActionCode(this._delegate, code); + } + confirmPasswordReset(code, newPassword) { + return exp.confirmPasswordReset(this._delegate, code, newPassword); + } + async createUserWithEmailAndPassword(email, password) { + return convertCredential(this._delegate, exp.createUserWithEmailAndPassword(this._delegate, email, password)); + } + fetchProvidersForEmail(email) { + return this.fetchSignInMethodsForEmail(email); + } + fetchSignInMethodsForEmail(email) { + return exp.fetchSignInMethodsForEmail(this._delegate, email); + } + isSignInWithEmailLink(emailLink) { + return exp.isSignInWithEmailLink(this._delegate, emailLink); + } + async getRedirectResult() { + _assert$1(_isPopupRedirectSupported(), this._delegate, "operation-not-supported-in-this-environment" /* exp.AuthErrorCode.OPERATION_NOT_SUPPORTED */); + const credential = await exp.getRedirectResult(this._delegate, CompatPopupRedirectResolver); + if (!credential) { + return { + credential: null, + user: null + }; + } + return convertCredential(this._delegate, Promise.resolve(credential)); + } + // This function should only be called by frameworks (e.g. FirebaseUI-web) to log their usage. + // It is not intended for direct use by developer apps. NO jsdoc here to intentionally leave it + // out of autogenerated documentation pages to reduce accidental misuse. + addFrameworkForLogging(framework) { + exp.addFrameworkForLogging(this._delegate, framework); + } + onAuthStateChanged(nextOrObserver, errorFn, completed) { + const { next, error, complete } = wrapObservers(nextOrObserver, errorFn, completed); + return this._delegate.onAuthStateChanged(next, error, complete); + } + onIdTokenChanged(nextOrObserver, errorFn, completed) { + const { next, error, complete } = wrapObservers(nextOrObserver, errorFn, completed); + return this._delegate.onIdTokenChanged(next, error, complete); + } + sendSignInLinkToEmail(email, actionCodeSettings) { + return exp.sendSignInLinkToEmail(this._delegate, email, actionCodeSettings); + } + sendPasswordResetEmail(email, actionCodeSettings) { + return exp.sendPasswordResetEmail(this._delegate, email, actionCodeSettings || undefined); + } + async setPersistence(persistence) { + _validatePersistenceArgument(this._delegate, persistence); + let converted; + switch (persistence) { + case Persistence.SESSION: + converted = exp.browserSessionPersistence; + break; + case Persistence.LOCAL: + // Not using isIndexedDBAvailable() since it only checks if indexedDB is defined. + const isIndexedDBFullySupported = await exp + ._getInstance(exp.indexedDBLocalPersistence) + ._isAvailable(); + converted = isIndexedDBFullySupported + ? exp.indexedDBLocalPersistence + : exp.browserLocalPersistence; + break; + case Persistence.NONE: + converted = exp.inMemoryPersistence; + break; + default: + return exp._fail("argument-error" /* exp.AuthErrorCode.ARGUMENT_ERROR */, { + appName: this._delegate.name + }); + } + return this._delegate.setPersistence(converted); + } + signInAndRetrieveDataWithCredential(credential) { + return this.signInWithCredential(credential); + } + signInAnonymously() { + return convertCredential(this._delegate, exp.signInAnonymously(this._delegate)); + } + signInWithCredential(credential) { + return convertCredential(this._delegate, exp.signInWithCredential(this._delegate, credential)); + } + signInWithCustomToken(token) { + return convertCredential(this._delegate, exp.signInWithCustomToken(this._delegate, token)); + } + signInWithEmailAndPassword(email, password) { + return convertCredential(this._delegate, exp.signInWithEmailAndPassword(this._delegate, email, password)); + } + signInWithEmailLink(email, emailLink) { + return convertCredential(this._delegate, exp.signInWithEmailLink(this._delegate, email, emailLink)); + } + signInWithPhoneNumber(phoneNumber, applicationVerifier) { + return convertConfirmationResult(this._delegate, exp.signInWithPhoneNumber(this._delegate, phoneNumber, applicationVerifier)); + } + async signInWithPopup(provider) { + _assert$1(_isPopupRedirectSupported(), this._delegate, "operation-not-supported-in-this-environment" /* exp.AuthErrorCode.OPERATION_NOT_SUPPORTED */); + return convertCredential(this._delegate, exp.signInWithPopup(this._delegate, provider, CompatPopupRedirectResolver)); + } + async signInWithRedirect(provider) { + _assert$1(_isPopupRedirectSupported(), this._delegate, "operation-not-supported-in-this-environment" /* exp.AuthErrorCode.OPERATION_NOT_SUPPORTED */); + await _savePersistenceForRedirect(this._delegate); + return exp.signInWithRedirect(this._delegate, provider, CompatPopupRedirectResolver); + } + updateCurrentUser(user) { + // remove ts-ignore once overloads are defined for exp functions to accept compat objects + // @ts-ignore + return this._delegate.updateCurrentUser(user); + } + verifyPasswordResetCode(code) { + return exp.verifyPasswordResetCode(this._delegate, code); + } + unwrap() { + return this._delegate; + } + _delete() { + return this._delegate._delete(); + } + linkUnderlyingAuth() { + this._delegate.wrapped = () => this; + } +} +Auth.Persistence = Persistence; +function wrapObservers(nextOrObserver, error, complete) { + let next = nextOrObserver; + if (typeof nextOrObserver !== 'function') { + ({ next, error, complete } = nextOrObserver); + } + // We know 'next' is now a function + const oldNext = next; + const newNext = (user) => oldNext(user && User.getOrCreate(user)); + return { + next: newNext, + error: error, + complete + }; +} +function buildPersistenceHierarchy(apiKey, appName) { + // Note this is slightly different behavior: in this case, the stored + // persistence is checked *first* rather than last. This is because we want + // to prefer stored persistence type in the hierarchy. This is an empty + // array if window is not available or there is no pending redirect + const persistences = _getPersistencesFromRedirect(apiKey, appName); + // If "self" is available, add indexedDB + if (typeof self !== 'undefined' && + !persistences.includes(exp.indexedDBLocalPersistence)) { + persistences.push(exp.indexedDBLocalPersistence); + } + // If "window" is available, add HTML Storage persistences + if (typeof window !== 'undefined') { + for (const persistence of [ + exp.browserLocalPersistence, + exp.browserSessionPersistence + ]) { + if (!persistences.includes(persistence)) { + persistences.push(persistence); + } + } + } + // Add in-memory as a final fallback + if (!persistences.includes(exp.inMemoryPersistence)) { + persistences.push(exp.inMemoryPersistence); + } + return persistences; +} + +/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +class PhoneAuthProvider { + static credential(verificationId, verificationCode) { + return exp.PhoneAuthProvider.credential(verificationId, verificationCode); + } + constructor() { + this.providerId = 'phone'; + // TODO: remove ts-ignore when moving types from auth-types to auth-compat + // @ts-ignore + this._delegate = new exp.PhoneAuthProvider(unwrap(firebase.auth())); + } + verifyPhoneNumber(phoneInfoOptions, applicationVerifier) { + return this._delegate.verifyPhoneNumber( + // The implementation matches but the types are subtly incompatible + // eslint-disable-next-line @typescript-eslint/no-explicit-any + phoneInfoOptions, applicationVerifier); + } + unwrap() { + return this._delegate; + } +} +PhoneAuthProvider.PHONE_SIGN_IN_METHOD = exp.PhoneAuthProvider.PHONE_SIGN_IN_METHOD; +PhoneAuthProvider.PROVIDER_ID = exp.PhoneAuthProvider.PROVIDER_ID; + +/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +const _assert = exp._assert; +class RecaptchaVerifier { + constructor(container, parameters, app = firebase.app()) { + // API key is required for web client RPC calls. + _assert(app.options?.apiKey, "invalid-api-key" /* exp.AuthErrorCode.INVALID_API_KEY */, { + appName: app.name + }); + this._delegate = new exp.RecaptchaVerifier( + // TODO: remove ts-ignore when moving types from auth-types to auth-compat + // @ts-ignore + app.auth(), container, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + parameters); + this.type = this._delegate.type; + } + clear() { + this._delegate.clear(); + } + render() { + return this._delegate.render(); + } + verify() { + return this._delegate.verify(); + } +} + +/** + * @license + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +const AUTH_TYPE = 'auth-compat'; +// Create auth components to register with firebase. +// Provides Auth public APIs. +function registerAuthCompat(instance) { + instance.INTERNAL.registerComponent(new Component(AUTH_TYPE, container => { + // getImmediate for FirebaseApp will always succeed + const app = container.getProvider('app-compat').getImmediate(); + const authProvider = container.getProvider('auth'); + return new Auth(app, authProvider); + }, "PUBLIC" /* ComponentType.PUBLIC */) + .setServiceProps({ + ActionCodeInfo: { + Operation: { + EMAIL_SIGNIN: exp.ActionCodeOperation.EMAIL_SIGNIN, + PASSWORD_RESET: exp.ActionCodeOperation.PASSWORD_RESET, + RECOVER_EMAIL: exp.ActionCodeOperation.RECOVER_EMAIL, + REVERT_SECOND_FACTOR_ADDITION: exp.ActionCodeOperation.REVERT_SECOND_FACTOR_ADDITION, + VERIFY_AND_CHANGE_EMAIL: exp.ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL, + VERIFY_EMAIL: exp.ActionCodeOperation.VERIFY_EMAIL + } + }, + EmailAuthProvider: exp.EmailAuthProvider, + FacebookAuthProvider: exp.FacebookAuthProvider, + GithubAuthProvider: exp.GithubAuthProvider, + GoogleAuthProvider: exp.GoogleAuthProvider, + OAuthProvider: exp.OAuthProvider, + SAMLAuthProvider: exp.SAMLAuthProvider, + PhoneAuthProvider: PhoneAuthProvider, + PhoneMultiFactorGenerator: exp.PhoneMultiFactorGenerator, + RecaptchaVerifier: RecaptchaVerifier, + TwitterAuthProvider: exp.TwitterAuthProvider, + Auth, + AuthCredential: exp.AuthCredential, + Error: FirebaseError + }) + .setInstantiationMode("LAZY" /* InstantiationMode.LAZY */) + .setMultipleInstances(false)); + instance.registerVersion(name, version); +} +registerAuthCompat(firebase); +//# sourceMappingURL=index.esm.js.map -- cgit v1.2.3