UNPKG

@firebase/auth

Version:

The Firebase Authenticaton component of the Firebase JS SDK.

1 lines • 471 kB
{"version":3,"file":"index.webworker.esm5.js","sources":["../src/core/errors.ts","../src/core/util/log.ts","../src/core/util/assert.ts","../src/core/util/instantiator.ts","../src/core/auth/initialize.ts","../src/core/util/browser.ts","../src/core/util/version.ts","../src/core/util/location.ts","../src/core/util/navigator.ts","../src/core/util/delay.ts","../src/core/util/emulator.ts","../src/core/util/fetch_provider.ts","../src/api/errors.ts","../src/api/index.ts","../src/api/account_management/account.ts","../src/core/util/time.ts","../src/core/user/id_token_result.ts","../src/core/user/invalidation.ts","../src/core/user/proactive_refresh.ts","../src/core/user/user_metadata.ts","../src/core/user/reload.ts","../src/api/authentication/token.ts","../src/core/user/token_manager.ts","../src/core/user/user_impl.ts","../src/core/persistence/in_memory.ts","../src/core/persistence/persistence_user_manager.ts","../src/core/auth/middleware.ts","../src/core/auth/auth_impl.ts","../src/core/auth/firebase_internal.ts","../src/core/auth/register.ts","../src/core/persistence/index.ts","../src/platform_browser/messagechannel/promise.ts","../src/platform_browser/messagechannel/receiver.ts","../src/core/util/event_id.ts","../src/platform_browser/messagechannel/sender.ts","../src/platform_browser/auth_window.ts","../src/platform_browser/util/worker.ts","../src/platform_browser/persistence/indexed_db.ts","../src/model/enum_maps.ts","../src/core/auth/emulator.ts","../src/core/credentials/auth_credential.ts","../src/api/account_management/email_and_password.ts","../src/api/authentication/email_and_password.ts","../src/api/authentication/email_link.ts","../src/core/credentials/email.ts","../src/api/authentication/idp.ts","../src/core/credentials/oauth.ts","../src/api/authentication/sms.ts","../src/core/credentials/phone.ts","../src/core/action_code_url.ts","../src/core/providers/email.ts","../src/core/providers/federated.ts","../src/core/providers/oauth.ts","../src/core/providers/facebook.ts","../src/core/providers/google.ts","../src/core/providers/github.ts","../src/core/credentials/saml.ts","../src/core/providers/saml.ts","../src/core/providers/twitter.ts","../src/api/authentication/sign_up.ts","../src/core/user/user_credential_impl.ts","../src/core/strategies/anonymous.ts","../src/mfa/mfa_error.ts","../src/core/util/providers.ts","../src/core/user/link_unlink.ts","../src/core/user/reauthenticate.ts","../src/core/strategies/credential.ts","../src/api/authentication/custom_token.ts","../src/core/strategies/custom_token.ts","../src/mfa/mfa_info.ts","../src/core/strategies/action_code_settings.ts","../src/core/strategies/email_and_password.ts","../src/core/strategies/email_link.ts","../src/api/authentication/create_auth_uri.ts","../src/core/strategies/email.ts","../src/api/account_management/profile.ts","../src/core/user/account_info.ts","../src/core/user/additional_user_info.ts","../src/core/index.ts","../src/mfa/mfa_session.ts","../src/mfa/mfa_resolver.ts","../src/api/account_management/mfa.ts","../src/mfa/mfa_user.ts","../index.webworker.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AuthErrorMap, User } from '../model/public_types';\nimport { ErrorFactory, ErrorMap } from '@firebase/util';\n\nimport { IdTokenMfaResponse } from '../api/authentication/mfa';\nimport { AppName } from '../model/auth';\nimport { AuthCredential } from './credentials';\n\n/**\n * Enumeration of Firebase Auth error codes.\n * \n * @internal\n */\nexport const enum AuthErrorCode {\n  ADMIN_ONLY_OPERATION = 'admin-restricted-operation',\n  ARGUMENT_ERROR = 'argument-error',\n  APP_NOT_AUTHORIZED = 'app-not-authorized',\n  APP_NOT_INSTALLED = 'app-not-installed',\n  CAPTCHA_CHECK_FAILED = 'captcha-check-failed',\n  CODE_EXPIRED = 'code-expired',\n  CORDOVA_NOT_READY = 'cordova-not-ready',\n  CORS_UNSUPPORTED = 'cors-unsupported',\n  CREDENTIAL_ALREADY_IN_USE = 'credential-already-in-use',\n  CREDENTIAL_MISMATCH = 'custom-token-mismatch',\n  CREDENTIAL_TOO_OLD_LOGIN_AGAIN = 'requires-recent-login',\n  DEPENDENT_SDK_INIT_BEFORE_AUTH = 'dependent-sdk-initialized-before-auth',\n  DYNAMIC_LINK_NOT_ACTIVATED = 'dynamic-link-not-activated',\n  EMAIL_CHANGE_NEEDS_VERIFICATION = 'email-change-needs-verification',\n  EMAIL_EXISTS = 'email-already-in-use',\n  EMULATOR_CONFIG_FAILED = 'emulator-config-failed',\n  EXPIRED_OOB_CODE = 'expired-action-code',\n  EXPIRED_POPUP_REQUEST = 'cancelled-popup-request',\n  INTERNAL_ERROR = 'internal-error',\n  INVALID_API_KEY = 'invalid-api-key',\n  INVALID_APP_CREDENTIAL = 'invalid-app-credential',\n  INVALID_APP_ID = 'invalid-app-id',\n  INVALID_AUTH = 'invalid-user-token',\n  INVALID_AUTH_EVENT = 'invalid-auth-event',\n  INVALID_CERT_HASH = 'invalid-cert-hash',\n  INVALID_CODE = 'invalid-verification-code',\n  INVALID_CONTINUE_URI = 'invalid-continue-uri',\n  INVALID_CORDOVA_CONFIGURATION = 'invalid-cordova-configuration',\n  INVALID_CUSTOM_TOKEN = 'invalid-custom-token',\n  INVALID_DYNAMIC_LINK_DOMAIN = 'invalid-dynamic-link-domain',\n  INVALID_EMAIL = 'invalid-email',\n  INVALID_EMULATOR_SCHEME = 'invalid-emulator-scheme',\n  INVALID_IDP_RESPONSE = 'invalid-credential',\n  INVALID_MESSAGE_PAYLOAD = 'invalid-message-payload',\n  INVALID_MFA_SESSION = 'invalid-multi-factor-session',\n  INVALID_OAUTH_CLIENT_ID = 'invalid-oauth-client-id',\n  INVALID_OAUTH_PROVIDER = 'invalid-oauth-provider',\n  INVALID_OOB_CODE = 'invalid-action-code',\n  INVALID_ORIGIN = 'unauthorized-domain',\n  INVALID_PASSWORD = 'wrong-password',\n  INVALID_PERSISTENCE = 'invalid-persistence-type',\n  INVALID_PHONE_NUMBER = 'invalid-phone-number',\n  INVALID_PROVIDER_ID = 'invalid-provider-id',\n  INVALID_RECIPIENT_EMAIL = 'invalid-recipient-email',\n  INVALID_SENDER = 'invalid-sender',\n  INVALID_SESSION_INFO = 'invalid-verification-id',\n  INVALID_TENANT_ID = 'invalid-tenant-id',\n  LOGIN_BLOCKED = 'login-blocked',\n  MFA_INFO_NOT_FOUND = 'multi-factor-info-not-found',\n  MFA_REQUIRED = 'multi-factor-auth-required',\n  MISSING_ANDROID_PACKAGE_NAME = 'missing-android-pkg-name',\n  MISSING_APP_CREDENTIAL = 'missing-app-credential',\n  MISSING_AUTH_DOMAIN = 'auth-domain-config-required',\n  MISSING_CODE = 'missing-verification-code',\n  MISSING_CONTINUE_URI = 'missing-continue-uri',\n  MISSING_IFRAME_START = 'missing-iframe-start',\n  MISSING_IOS_BUNDLE_ID = 'missing-ios-bundle-id',\n  MISSING_OR_INVALID_NONCE = 'missing-or-invalid-nonce',\n  MISSING_MFA_INFO = 'missing-multi-factor-info',\n  MISSING_MFA_SESSION = 'missing-multi-factor-session',\n  MISSING_PHONE_NUMBER = 'missing-phone-number',\n  MISSING_SESSION_INFO = 'missing-verification-id',\n  MODULE_DESTROYED = 'app-deleted',\n  NEED_CONFIRMATION = 'account-exists-with-different-credential',\n  NETWORK_REQUEST_FAILED = 'network-request-failed',\n  NULL_USER = 'null-user',\n  NO_AUTH_EVENT = 'no-auth-event',\n  NO_SUCH_PROVIDER = 'no-such-provider',\n  OPERATION_NOT_ALLOWED = 'operation-not-allowed',\n  OPERATION_NOT_SUPPORTED = 'operation-not-supported-in-this-environment',\n  POPUP_BLOCKED = 'popup-blocked',\n  POPUP_CLOSED_BY_USER = 'popup-closed-by-user',\n  PROVIDER_ALREADY_LINKED = 'provider-already-linked',\n  QUOTA_EXCEEDED = 'quota-exceeded',\n  REDIRECT_CANCELLED_BY_USER = 'redirect-cancelled-by-user',\n  REDIRECT_OPERATION_PENDING = 'redirect-operation-pending',\n  REJECTED_CREDENTIAL = 'rejected-credential',\n  SECOND_FACTOR_ALREADY_ENROLLED = 'second-factor-already-in-use',\n  SECOND_FACTOR_LIMIT_EXCEEDED = 'maximum-second-factor-count-exceeded',\n  TENANT_ID_MISMATCH = 'tenant-id-mismatch',\n  TIMEOUT = 'timeout',\n  TOKEN_EXPIRED = 'user-token-expired',\n  TOO_MANY_ATTEMPTS_TRY_LATER = 'too-many-requests',\n  UNAUTHORIZED_DOMAIN = 'unauthorized-continue-uri',\n  UNSUPPORTED_FIRST_FACTOR = 'unsupported-first-factor',\n  UNSUPPORTED_PERSISTENCE = 'unsupported-persistence-type',\n  UNSUPPORTED_TENANT_OPERATION = 'unsupported-tenant-operation',\n  UNVERIFIED_EMAIL = 'unverified-email',\n  USER_CANCELLED = 'user-cancelled',\n  USER_DELETED = 'user-not-found',\n  USER_DISABLED = 'user-disabled',\n  USER_MISMATCH = 'user-mismatch',\n  USER_SIGNED_OUT = 'user-signed-out',\n  WEAK_PASSWORD = 'weak-password',\n  WEB_STORAGE_UNSUPPORTED = 'web-storage-unsupported',\n  ALREADY_INITIALIZED = 'already-initialized'\n}\n\nfunction _debugErrorMap(): ErrorMap<AuthErrorCode> {\n  return {\n    [AuthErrorCode.ADMIN_ONLY_OPERATION]:\n      'This operation is restricted to administrators only.',\n    [AuthErrorCode.ARGUMENT_ERROR]: '',\n    [AuthErrorCode.APP_NOT_AUTHORIZED]:\n      \"This app, identified by the domain where it's hosted, is not \" +\n      'authorized to use Firebase Authentication with the provided API key. ' +\n      'Review your key configuration in the Google API console.',\n    [AuthErrorCode.APP_NOT_INSTALLED]:\n      'The requested mobile application corresponding to the identifier (' +\n      'Android package name or iOS bundle ID) provided is not installed on ' +\n      'this device.',\n    [AuthErrorCode.CAPTCHA_CHECK_FAILED]:\n      'The reCAPTCHA response token provided is either invalid, expired, ' +\n      'already used or the domain associated with it does not match the list ' +\n      'of whitelisted domains.',\n    [AuthErrorCode.CODE_EXPIRED]:\n      'The SMS code has expired. Please re-send the verification code to try ' +\n      'again.',\n    [AuthErrorCode.CORDOVA_NOT_READY]: 'Cordova framework is not ready.',\n    [AuthErrorCode.CORS_UNSUPPORTED]: 'This browser is not supported.',\n    [AuthErrorCode.CREDENTIAL_ALREADY_IN_USE]:\n      'This credential is already associated with a different user account.',\n    [AuthErrorCode.CREDENTIAL_MISMATCH]:\n      'The custom token corresponds to a different audience.',\n    [AuthErrorCode.CREDENTIAL_TOO_OLD_LOGIN_AGAIN]:\n      'This operation is sensitive and requires recent authentication. Log in ' +\n      'again before retrying this request.',\n    [AuthErrorCode.DEPENDENT_SDK_INIT_BEFORE_AUTH]:\n      'Another Firebase SDK was initialized and is trying to use Auth before Auth is ' +\n      'initialized. Please be sure to call `initializeAuth` or `getAuth` before ' +\n      'starting any other Firebase SDK.',\n    [AuthErrorCode.DYNAMIC_LINK_NOT_ACTIVATED]:\n      'Please activate Dynamic Links in the Firebase Console and agree to the terms and ' +\n      'conditions.',\n    [AuthErrorCode.EMAIL_CHANGE_NEEDS_VERIFICATION]:\n      'Multi-factor users must always have a verified email.',\n    [AuthErrorCode.EMAIL_EXISTS]:\n      'The email address is already in use by another account.',\n    [AuthErrorCode.EMULATOR_CONFIG_FAILED]:\n      'Auth instance has already been used to make a network call. Auth can ' +\n      'no longer be configured to use the emulator. Try calling ' +\n      '\"connectAuthEmulator()\" sooner.',\n    [AuthErrorCode.EXPIRED_OOB_CODE]: 'The action code has expired.',\n    [AuthErrorCode.EXPIRED_POPUP_REQUEST]:\n      'This operation has been cancelled due to another conflicting popup being opened.',\n    [AuthErrorCode.INTERNAL_ERROR]: 'An internal AuthError has occurred.',\n    [AuthErrorCode.INVALID_APP_CREDENTIAL]:\n      'The phone verification request contains an invalid application verifier.' +\n      ' The reCAPTCHA token response is either invalid or expired.',\n    [AuthErrorCode.INVALID_APP_ID]:\n      'The mobile app identifier is not registed for the current project.',\n    [AuthErrorCode.INVALID_AUTH]:\n      \"This user's credential isn't valid for this project. This can happen \" +\n      \"if the user's token has been tampered with, or if the user isn't for \" +\n      'the project associated with this API key.',\n    [AuthErrorCode.INVALID_AUTH_EVENT]: 'An internal AuthError has occurred.',\n    [AuthErrorCode.INVALID_CODE]:\n      'The SMS verification code used to create the phone auth credential is ' +\n      'invalid. Please resend the verification code sms and be sure to use the ' +\n      'verification code provided by the user.',\n    [AuthErrorCode.INVALID_CONTINUE_URI]:\n      'The continue URL provided in the request is invalid.',\n    [AuthErrorCode.INVALID_CORDOVA_CONFIGURATION]:\n      'The following Cordova plugins must be installed to enable OAuth sign-in: ' +\n      'cordova-plugin-buildinfo, cordova-universal-links-plugin, ' +\n      'cordova-plugin-browsertab, cordova-plugin-inappbrowser and ' +\n      'cordova-plugin-customurlscheme.',\n    [AuthErrorCode.INVALID_CUSTOM_TOKEN]:\n      'The custom token format is incorrect. Please check the documentation.',\n    [AuthErrorCode.INVALID_DYNAMIC_LINK_DOMAIN]:\n      'The provided dynamic link domain is not configured or authorized for the current project.',\n    [AuthErrorCode.INVALID_EMAIL]: 'The email address is badly formatted.',\n    [AuthErrorCode.INVALID_EMULATOR_SCHEME]:\n      'Emulator URL must start with a valid scheme (http:// or https://).',\n    [AuthErrorCode.INVALID_API_KEY]:\n      'Your API key is invalid, please check you have copied it correctly.',\n    [AuthErrorCode.INVALID_CERT_HASH]:\n      'The SHA-1 certificate hash provided is invalid.',\n    [AuthErrorCode.INVALID_IDP_RESPONSE]:\n      'The supplied auth credential is malformed or has expired.',\n    [AuthErrorCode.INVALID_MESSAGE_PAYLOAD]:\n      'The email template corresponding to this action contains invalid characters in its message. ' +\n      'Please fix by going to the Auth email templates section in the Firebase Console.',\n    [AuthErrorCode.INVALID_MFA_SESSION]:\n      'The request does not contain a valid proof of first factor successful sign-in.',\n    [AuthErrorCode.INVALID_OAUTH_PROVIDER]:\n      'EmailAuthProvider is not supported for this operation. This operation ' +\n      'only supports OAuth providers.',\n    [AuthErrorCode.INVALID_OAUTH_CLIENT_ID]:\n      'The OAuth client ID provided is either invalid or does not match the ' +\n      'specified API key.',\n    [AuthErrorCode.INVALID_ORIGIN]:\n      'This domain is not authorized for OAuth operations for your Firebase ' +\n      'project. Edit the list of authorized domains from the Firebase console.',\n    [AuthErrorCode.INVALID_OOB_CODE]:\n      'The action code is invalid. This can happen if the code is malformed, ' +\n      'expired, or has already been used.',\n    [AuthErrorCode.INVALID_PASSWORD]:\n      'The password is invalid or the user does not have a password.',\n    [AuthErrorCode.INVALID_PERSISTENCE]:\n      'The specified persistence type is invalid. It can only be local, session or none.',\n    [AuthErrorCode.INVALID_PHONE_NUMBER]:\n      'The format of the phone number provided is incorrect. Please enter the ' +\n      'phone number in a format that can be parsed into E.164 format. E.164 ' +\n      'phone numbers are written in the format [+][country code][subscriber ' +\n      'number including area code].',\n    [AuthErrorCode.INVALID_PROVIDER_ID]:\n      'The specified provider ID is invalid.',\n    [AuthErrorCode.INVALID_RECIPIENT_EMAIL]:\n      'The email corresponding to this action failed to send as the provided ' +\n      'recipient email address is invalid.',\n    [AuthErrorCode.INVALID_SENDER]:\n      'The email template corresponding to this action contains an invalid sender email or name. ' +\n      'Please fix by going to the Auth email templates section in the Firebase Console.',\n    [AuthErrorCode.INVALID_SESSION_INFO]:\n      'The verification ID used to create the phone auth credential is invalid.',\n    [AuthErrorCode.INVALID_TENANT_ID]:\n      \"The Auth instance's tenant ID is invalid.\",\n    [AuthErrorCode.LOGIN_BLOCKED]: \"Login blocked by user-provided method: {$originalMessage}\",\n    [AuthErrorCode.MISSING_ANDROID_PACKAGE_NAME]:\n      'An Android Package Name must be provided if the Android App is required to be installed.',\n    [AuthErrorCode.MISSING_AUTH_DOMAIN]:\n      'Be sure to include authDomain when calling firebase.initializeApp(), ' +\n      'by following the instructions in the Firebase console.',\n    [AuthErrorCode.MISSING_APP_CREDENTIAL]:\n      'The phone verification request is missing an application verifier ' +\n      'assertion. A reCAPTCHA response token needs to be provided.',\n    [AuthErrorCode.MISSING_CODE]:\n      'The phone auth credential was created with an empty SMS verification code.',\n    [AuthErrorCode.MISSING_CONTINUE_URI]:\n      'A continue URL must be provided in the request.',\n    [AuthErrorCode.MISSING_IFRAME_START]: 'An internal AuthError has occurred.',\n    [AuthErrorCode.MISSING_IOS_BUNDLE_ID]:\n      'An iOS Bundle ID must be provided if an App Store ID is provided.',\n    [AuthErrorCode.MISSING_OR_INVALID_NONCE]:\n      'The request does not contain a valid nonce. This can occur if the ' +\n      'SHA-256 hash of the provided raw nonce does not match the hashed nonce ' +\n      'in the ID token payload.',\n    [AuthErrorCode.MISSING_MFA_INFO]:\n      'No second factor identifier is provided.',\n    [AuthErrorCode.MISSING_MFA_SESSION]:\n      'The request is missing proof of first factor successful sign-in.',\n    [AuthErrorCode.MISSING_PHONE_NUMBER]:\n      'To send verification codes, provide a phone number for the recipient.',\n    [AuthErrorCode.MISSING_SESSION_INFO]:\n      'The phone auth credential was created with an empty verification ID.',\n    [AuthErrorCode.MODULE_DESTROYED]:\n      'This instance of FirebaseApp has been deleted.',\n    [AuthErrorCode.MFA_INFO_NOT_FOUND]:\n      'The user does not have a second factor matching the identifier provided.',\n    [AuthErrorCode.MFA_REQUIRED]:\n      'Proof of ownership of a second factor is required to complete sign-in.',\n    [AuthErrorCode.NEED_CONFIRMATION]:\n      'An account already exists with the same email address but different ' +\n      'sign-in credentials. Sign in using a provider associated with this ' +\n      'email address.',\n    [AuthErrorCode.NETWORK_REQUEST_FAILED]:\n      'A network AuthError (such as timeout, interrupted connection or unreachable host) has occurred.',\n    [AuthErrorCode.NO_AUTH_EVENT]: 'An internal AuthError has occurred.',\n    [AuthErrorCode.NO_SUCH_PROVIDER]:\n      'User was not linked to an account with the given provider.',\n    [AuthErrorCode.NULL_USER]:\n      'A null user object was provided as the argument for an operation which ' +\n      'requires a non-null user object.',\n    [AuthErrorCode.OPERATION_NOT_ALLOWED]:\n      'The given sign-in provider is disabled for this Firebase project. ' +\n      'Enable it in the Firebase console, under the sign-in method tab of the ' +\n      'Auth section.',\n    [AuthErrorCode.OPERATION_NOT_SUPPORTED]:\n      'This operation is not supported in the environment this application is ' +\n      'running on. \"location.protocol\" must be http, https or chrome-extension' +\n      ' and web storage must be enabled.',\n    [AuthErrorCode.POPUP_BLOCKED]:\n      'Unable to establish a connection with the popup. It may have been blocked by the browser.',\n    [AuthErrorCode.POPUP_CLOSED_BY_USER]:\n      'The popup has been closed by the user before finalizing the operation.',\n    [AuthErrorCode.PROVIDER_ALREADY_LINKED]:\n      'User can only be linked to one identity for the given provider.',\n    [AuthErrorCode.QUOTA_EXCEEDED]:\n      \"The project's quota for this operation has been exceeded.\",\n    [AuthErrorCode.REDIRECT_CANCELLED_BY_USER]:\n      'The redirect operation has been cancelled by the user before finalizing.',\n    [AuthErrorCode.REDIRECT_OPERATION_PENDING]:\n      'A redirect sign-in operation is already pending.',\n    [AuthErrorCode.REJECTED_CREDENTIAL]:\n      'The request contains malformed or mismatching credentials.',\n    [AuthErrorCode.SECOND_FACTOR_ALREADY_ENROLLED]:\n      'The second factor is already enrolled on this account.',\n    [AuthErrorCode.SECOND_FACTOR_LIMIT_EXCEEDED]:\n      'The maximum allowed number of second factors on a user has been exceeded.',\n    [AuthErrorCode.TENANT_ID_MISMATCH]:\n      \"The provided tenant ID does not match the Auth instance's tenant ID\",\n    [AuthErrorCode.TIMEOUT]: 'The operation has timed out.',\n    [AuthErrorCode.TOKEN_EXPIRED]:\n      \"The user's credential is no longer valid. The user must sign in again.\",\n    [AuthErrorCode.TOO_MANY_ATTEMPTS_TRY_LATER]:\n      'We have blocked all requests from this device due to unusual activity. ' +\n      'Try again later.',\n    [AuthErrorCode.UNAUTHORIZED_DOMAIN]:\n      'The domain of the continue URL is not whitelisted.  Please whitelist ' +\n      'the domain in the Firebase console.',\n    [AuthErrorCode.UNSUPPORTED_FIRST_FACTOR]:\n      'Enrolling a second factor or signing in with a multi-factor account requires sign-in with a supported first factor.',\n    [AuthErrorCode.UNSUPPORTED_PERSISTENCE]:\n      'The current environment does not support the specified persistence type.',\n    [AuthErrorCode.UNSUPPORTED_TENANT_OPERATION]:\n      'This operation is not supported in a multi-tenant context.',\n    [AuthErrorCode.UNVERIFIED_EMAIL]:\n      'The operation requires a verified email.',\n    [AuthErrorCode.USER_CANCELLED]:\n      'The user did not grant your application the permissions it requested.',\n    [AuthErrorCode.USER_DELETED]:\n      'There is no user record corresponding to this identifier. The user may ' +\n      'have been deleted.',\n    [AuthErrorCode.USER_DISABLED]:\n      'The user account has been disabled by an administrator.',\n    [AuthErrorCode.USER_MISMATCH]:\n      'The supplied credentials do not correspond to the previously signed in user.',\n    [AuthErrorCode.USER_SIGNED_OUT]: '',\n    [AuthErrorCode.WEAK_PASSWORD]:\n      'The password must be 6 characters long or more.',\n    [AuthErrorCode.WEB_STORAGE_UNSUPPORTED]:\n      'This browser is not supported or 3rd party cookies and data may be disabled.',\n    [AuthErrorCode.ALREADY_INITIALIZED]:\n      'initializeAuth() has already been called with ' +\n      'different options. To avoid this error, call initializeAuth() with the ' +\n      'same options as when it was originally called, or call getAuth() to return the' +\n      ' already initialized instance.'\n  };\n}\n\nexport interface ErrorMapRetriever extends AuthErrorMap {\n  (): ErrorMap<AuthErrorCode>;\n}\n\nfunction _prodErrorMap(): ErrorMap<AuthErrorCode> {\n  // We will include this one message in the prod error map since by the very\n  // nature of this error, developers will never be able to see the message\n  // using the debugErrorMap (which is installed during auth initialization).\n  return {\n    [AuthErrorCode.DEPENDENT_SDK_INIT_BEFORE_AUTH]:\n      'Another Firebase SDK was initialized and is trying to use Auth before Auth is ' +\n      'initialized. Please be sure to call `initializeAuth` or `getAuth` before ' +\n      'starting any other Firebase SDK.'\n  } as ErrorMap<AuthErrorCode>;\n}\n\n/**\n * A verbose error map with detailed descriptions for most error codes.\n *\n * See discussion at {@link AuthErrorMap}\n *\n * @public\n */\nexport const debugErrorMap: AuthErrorMap = _debugErrorMap;\n\n/**\n * A minimal error map with all verbose error messages stripped.\n *\n * See discussion at {@link AuthErrorMap}\n *\n * @public\n */\nexport const prodErrorMap: AuthErrorMap = _prodErrorMap;\n\nexport interface NamedErrorParams {\n  appName: AppName;\n  credential?: AuthCredential;\n  email?: string;\n  phoneNumber?: string;\n  tenantId?: string;\n  user?: User;\n  _serverResponse?: object;\n}\n\n/**\n * @internal\n */\ntype GenericAuthErrorParams = {\n  [key in Exclude<\n    AuthErrorCode,\n    | AuthErrorCode.ARGUMENT_ERROR\n    | AuthErrorCode.DEPENDENT_SDK_INIT_BEFORE_AUTH\n    | AuthErrorCode.INTERNAL_ERROR\n    | AuthErrorCode.MFA_REQUIRED\n    | AuthErrorCode.NO_AUTH_EVENT\n    | AuthErrorCode.OPERATION_NOT_SUPPORTED\n  >]: {\n    appName?: AppName;\n    email?: string;\n    phoneNumber?: string;\n    message?: string;\n  };\n};\n\n/**\n * @internal\n */\nexport interface AuthErrorParams extends GenericAuthErrorParams {\n  [AuthErrorCode.ARGUMENT_ERROR]: { appName?: AppName };\n  [AuthErrorCode.DEPENDENT_SDK_INIT_BEFORE_AUTH]: { appName?: AppName };\n  [AuthErrorCode.INTERNAL_ERROR]: { appName?: AppName };\n  [AuthErrorCode.LOGIN_BLOCKED]: { appName?: AppName, originalMessage?: string };\n  [AuthErrorCode.OPERATION_NOT_SUPPORTED]: { appName?: AppName };\n  [AuthErrorCode.NO_AUTH_EVENT]: { appName?: AppName };\n  [AuthErrorCode.MFA_REQUIRED]: {\n    appName: AppName;\n    _serverResponse: IdTokenMfaResponse;\n  };\n  [AuthErrorCode.INVALID_CORDOVA_CONFIGURATION]: {\n    appName: AppName;\n    missingPlugin?: string;\n  };\n}\n\nexport const _DEFAULT_AUTH_ERROR_FACTORY = new ErrorFactory<\n  AuthErrorCode,\n  AuthErrorParams\n>('auth', 'Firebase', _prodErrorMap());\n\n/**\n * A map of potential `Auth` error codes, for easier comparison with errors\n * thrown by the SDK.\n *\n * @remarks\n * Note that you can't tree-shake individual keys\n * in the map, so by using the map you might substantially increase your\n * bundle size.\n *\n * @public\n */\nexport const AUTH_ERROR_CODES_MAP_DO_NOT_USE_INTERNALLY = {\n  ADMIN_ONLY_OPERATION: 'auth/admin-restricted-operation',\n  ARGUMENT_ERROR: 'auth/argument-error',\n  APP_NOT_AUTHORIZED: 'auth/app-not-authorized',\n  APP_NOT_INSTALLED: 'auth/app-not-installed',\n  CAPTCHA_CHECK_FAILED: 'auth/captcha-check-failed',\n  CODE_EXPIRED: 'auth/code-expired',\n  CORDOVA_NOT_READY: 'auth/cordova-not-ready',\n  CORS_UNSUPPORTED: 'auth/cors-unsupported',\n  CREDENTIAL_ALREADY_IN_USE: 'auth/credential-already-in-use',\n  CREDENTIAL_MISMATCH: 'auth/custom-token-mismatch',\n  CREDENTIAL_TOO_OLD_LOGIN_AGAIN: 'auth/requires-recent-login',\n  DEPENDENT_SDK_INIT_BEFORE_AUTH: 'auth/dependent-sdk-initialized-before-auth',\n  DYNAMIC_LINK_NOT_ACTIVATED: 'auth/dynamic-link-not-activated',\n  EMAIL_CHANGE_NEEDS_VERIFICATION: 'auth/email-change-needs-verification',\n  EMAIL_EXISTS: 'auth/email-already-in-use',\n  EMULATOR_CONFIG_FAILED: 'auth/emulator-config-failed',\n  EXPIRED_OOB_CODE: 'auth/expired-action-code',\n  EXPIRED_POPUP_REQUEST: 'auth/cancelled-popup-request',\n  INTERNAL_ERROR: 'auth/internal-error',\n  INVALID_API_KEY: 'auth/invalid-api-key',\n  INVALID_APP_CREDENTIAL: 'auth/invalid-app-credential',\n  INVALID_APP_ID: 'auth/invalid-app-id',\n  INVALID_AUTH: 'auth/invalid-user-token',\n  INVALID_AUTH_EVENT: 'auth/invalid-auth-event',\n  INVALID_CERT_HASH: 'auth/invalid-cert-hash',\n  INVALID_CODE: 'auth/invalid-verification-code',\n  INVALID_CONTINUE_URI: 'auth/invalid-continue-uri',\n  INVALID_CORDOVA_CONFIGURATION: 'auth/invalid-cordova-configuration',\n  INVALID_CUSTOM_TOKEN: 'auth/invalid-custom-token',\n  INVALID_DYNAMIC_LINK_DOMAIN: 'auth/invalid-dynamic-link-domain',\n  INVALID_EMAIL: 'auth/invalid-email',\n  INVALID_EMULATOR_SCHEME: 'auth/invalid-emulator-scheme',\n  INVALID_IDP_RESPONSE: 'auth/invalid-credential',\n  INVALID_MESSAGE_PAYLOAD: 'auth/invalid-message-payload',\n  INVALID_MFA_SESSION: 'auth/invalid-multi-factor-session',\n  INVALID_OAUTH_CLIENT_ID: 'auth/invalid-oauth-client-id',\n  INVALID_OAUTH_PROVIDER: 'auth/invalid-oauth-provider',\n  INVALID_OOB_CODE: 'auth/invalid-action-code',\n  INVALID_ORIGIN: 'auth/unauthorized-domain',\n  INVALID_PASSWORD: 'auth/wrong-password',\n  INVALID_PERSISTENCE: 'auth/invalid-persistence-type',\n  INVALID_PHONE_NUMBER: 'auth/invalid-phone-number',\n  INVALID_PROVIDER_ID: 'auth/invalid-provider-id',\n  INVALID_RECIPIENT_EMAIL: 'auth/invalid-recipient-email',\n  INVALID_SENDER: 'auth/invalid-sender',\n  INVALID_SESSION_INFO: 'auth/invalid-verification-id',\n  INVALID_TENANT_ID: 'auth/invalid-tenant-id',\n  MFA_INFO_NOT_FOUND: 'auth/multi-factor-info-not-found',\n  MFA_REQUIRED: 'auth/multi-factor-auth-required',\n  MISSING_ANDROID_PACKAGE_NAME: 'auth/missing-android-pkg-name',\n  MISSING_APP_CREDENTIAL: 'auth/missing-app-credential',\n  MISSING_AUTH_DOMAIN: 'auth/auth-domain-config-required',\n  MISSING_CODE: 'auth/missing-verification-code',\n  MISSING_CONTINUE_URI: 'auth/missing-continue-uri',\n  MISSING_IFRAME_START: 'auth/missing-iframe-start',\n  MISSING_IOS_BUNDLE_ID: 'auth/missing-ios-bundle-id',\n  MISSING_OR_INVALID_NONCE: 'auth/missing-or-invalid-nonce',\n  MISSING_MFA_INFO: 'auth/missing-multi-factor-info',\n  MISSING_MFA_SESSION: 'auth/missing-multi-factor-session',\n  MISSING_PHONE_NUMBER: 'auth/missing-phone-number',\n  MISSING_SESSION_INFO: 'auth/missing-verification-id',\n  MODULE_DESTROYED: 'auth/app-deleted',\n  NEED_CONFIRMATION: 'auth/account-exists-with-different-credential',\n  NETWORK_REQUEST_FAILED: 'auth/network-request-failed',\n  NULL_USER: 'auth/null-user',\n  NO_AUTH_EVENT: 'auth/no-auth-event',\n  NO_SUCH_PROVIDER: 'auth/no-such-provider',\n  OPERATION_NOT_ALLOWED: 'auth/operation-not-allowed',\n  OPERATION_NOT_SUPPORTED: 'auth/operation-not-supported-in-this-environment',\n  POPUP_BLOCKED: 'auth/popup-blocked',\n  POPUP_CLOSED_BY_USER: 'auth/popup-closed-by-user',\n  PROVIDER_ALREADY_LINKED: 'auth/provider-already-linked',\n  QUOTA_EXCEEDED: 'auth/quota-exceeded',\n  REDIRECT_CANCELLED_BY_USER: 'auth/redirect-cancelled-by-user',\n  REDIRECT_OPERATION_PENDING: 'auth/redirect-operation-pending',\n  REJECTED_CREDENTIAL: 'auth/rejected-credential',\n  SECOND_FACTOR_ALREADY_ENROLLED: 'auth/second-factor-already-in-use',\n  SECOND_FACTOR_LIMIT_EXCEEDED: 'auth/maximum-second-factor-count-exceeded',\n  TENANT_ID_MISMATCH: 'auth/tenant-id-mismatch',\n  TIMEOUT: 'auth/timeout',\n  TOKEN_EXPIRED: 'auth/user-token-expired',\n  TOO_MANY_ATTEMPTS_TRY_LATER: 'auth/too-many-requests',\n  UNAUTHORIZED_DOMAIN: 'auth/unauthorized-continue-uri',\n  UNSUPPORTED_FIRST_FACTOR: 'auth/unsupported-first-factor',\n  UNSUPPORTED_PERSISTENCE: 'auth/unsupported-persistence-type',\n  UNSUPPORTED_TENANT_OPERATION: 'auth/unsupported-tenant-operation',\n  UNVERIFIED_EMAIL: 'auth/unverified-email',\n  USER_CANCELLED: 'auth/user-cancelled',\n  USER_DELETED: 'auth/user-not-found',\n  USER_DISABLED: 'auth/user-disabled',\n  USER_MISMATCH: 'auth/user-mismatch',\n  USER_SIGNED_OUT: 'auth/user-signed-out',\n  WEAK_PASSWORD: 'auth/weak-password',\n  WEB_STORAGE_UNSUPPORTED: 'auth/web-storage-unsupported',\n  ALREADY_INITIALIZED: 'auth/already-initialized'\n} as const;\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Logger, LogLevel } from '@firebase/logger';\nimport { SDK_VERSION } from '@firebase/app';\n\nexport { LogLevel };\n\nconst logClient = new Logger('@firebase/auth');\n\n// Helper methods are needed because variables can't be exported as read/write\nexport function _getLogLevel(): LogLevel {\n  return logClient.logLevel;\n}\n\nexport function _setLogLevel(newLevel: LogLevel): void {\n  logClient.logLevel = newLevel;\n}\n\nexport function _logDebug(msg: string, ...args: string[]): void {\n  if (logClient.logLevel <= LogLevel.DEBUG) {\n    logClient.debug(`Auth (${SDK_VERSION}): ${msg}`, ...args);\n  }\n}\n\nexport function _logError(msg: string, ...args: string[]): void {\n  if (logClient.logLevel <= LogLevel.ERROR) {\n    logClient.error(`Auth (${SDK_VERSION}): ${msg}`, ...args);\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Auth } from '../../model/public_types';\nimport { ErrorFactory, FirebaseError } from '@firebase/util';\nimport { AuthInternal } from '../../model/auth';\nimport {\n  _DEFAULT_AUTH_ERROR_FACTORY,\n  AuthErrorCode,\n  AuthErrorParams,\n  prodErrorMap,\n  ErrorMapRetriever\n} from '../errors';\nimport { _logError } from './log';\n\ntype AuthErrorListParams<K> = K extends keyof AuthErrorParams\n  ? [AuthErrorParams[K]]\n  : [];\ntype LessAppName<K extends AuthErrorCode> = Omit<AuthErrorParams[K], 'appName'>;\n\n/**\n * Unconditionally fails, throwing a developer facing INTERNAL_ERROR\n *\n * @example\n * ```javascript\n * fail(auth, AuthErrorCode.MFA_REQUIRED);  // Error: the MFA_REQUIRED error needs more params than appName\n * fail(auth, AuthErrorCode.MFA_REQUIRED, {serverResponse});  // Compiles\n * fail(AuthErrorCode.INTERNAL_ERROR);  // Compiles; internal error does not need appName\n * fail(AuthErrorCode.USER_DELETED);  // Error: USER_DELETED requires app name\n * fail(auth, AuthErrorCode.USER_DELETED);  // Compiles; USER_DELETED _only_ needs app name\n * ```\n *\n * @param appName App name for tagging the error\n * @throws FirebaseError\n */\nexport function _fail<K extends AuthErrorCode>(\n  code: K,\n  ...data: {} extends AuthErrorParams[K]\n    ? [AuthErrorParams[K]?]\n    : [AuthErrorParams[K]]\n): never;\nexport function _fail<K extends AuthErrorCode>(\n  auth: Auth,\n  code: K,\n  ...data: {} extends LessAppName<K> ? [LessAppName<K>?] : [LessAppName<K>]\n): never;\nexport function _fail<K extends AuthErrorCode>(\n  authOrCode: Auth | K,\n  ...rest: unknown[]\n): never {\n  throw createErrorInternal(authOrCode, ...rest);\n}\n\nexport function _createError<K extends AuthErrorCode>(\n  code: K,\n  ...data: {} extends AuthErrorParams[K]\n    ? [AuthErrorParams[K]?]\n    : [AuthErrorParams[K]]\n): FirebaseError;\nexport function _createError<K extends AuthErrorCode>(\n  auth: Auth,\n  code: K,\n  ...data: {} extends LessAppName<K> ? [LessAppName<K>?] : [LessAppName<K>]\n): FirebaseError;\nexport function _createError<K extends AuthErrorCode>(\n  authOrCode: Auth | K,\n  ...rest: unknown[]\n): FirebaseError {\n  return createErrorInternal(authOrCode, ...rest);\n}\n\nexport function _errorWithCustomMessage(auth: Auth, code: AuthErrorCode, message: string): FirebaseError {\n  const errorMap = {...(prodErrorMap as ErrorMapRetriever)(), [code]: message};\n  const factory = new ErrorFactory<AuthErrorCode, AuthErrorParams>(\n    'auth',\n    'Firebase',\n    errorMap\n  );\n  return factory.create(code, {\n    appName: auth.name,\n  });\n}\n\nexport function _assertInstanceOf(auth: Auth, object: object, instance: unknown): void {\n  const constructorInstance =  (instance as { new (...args: unknown[]): unknown });\n  if (!(object instanceof constructorInstance)) {\n    if (constructorInstance.name !== object.constructor.name) {\n      _fail(auth, AuthErrorCode.ARGUMENT_ERROR);\n    }\n\n    throw _errorWithCustomMessage(auth, AuthErrorCode.ARGUMENT_ERROR,\n      `Type of ${object.constructor.name} does not match expected instance.` +\n      `Did you pass a reference from a different Auth SDK?`);\n  }\n}\n\nfunction createErrorInternal<K extends AuthErrorCode>(\n  authOrCode: Auth | K,\n  ...rest: unknown[]\n): FirebaseError {\n  if (typeof authOrCode !== 'string') {\n    const code = rest[0] as K;\n    const fullParams = [...rest.slice(1)] as AuthErrorListParams<K>;\n    if (fullParams[0]) {\n      fullParams[0].appName = authOrCode.name;\n    }\n\n    return (authOrCode as AuthInternal)._errorFactory.create(\n      code,\n      ...fullParams\n    );\n  }\n\n  return _DEFAULT_AUTH_ERROR_FACTORY.create(\n    authOrCode,\n    ...(rest as AuthErrorListParams<K>)\n  );\n}\n\nexport function _assert<K extends AuthErrorCode>(\n  assertion: unknown,\n  code: K,\n  ...data: {} extends AuthErrorParams[K]\n    ? [AuthErrorParams[K]?]\n    : [AuthErrorParams[K]]\n): asserts assertion;\nexport function _assert<K extends AuthErrorCode>(\n  assertion: unknown,\n  auth: Auth,\n  code: K,\n  ...data: {} extends LessAppName<K> ? [LessAppName<K>?] : [LessAppName<K>]\n): asserts assertion;\nexport function _assert<K extends AuthErrorCode>(\n  assertion: unknown,\n  authOrCode: Auth | K,\n  ...rest: unknown[]\n): asserts assertion {\n  if (!assertion) {\n    throw createErrorInternal(authOrCode, ...rest);\n  }\n}\n\n// We really do want to accept literally any function type here\n// eslint-disable-next-line @typescript-eslint/ban-types\ntype TypeExpectation = Function | string | MapType;\n\ninterface MapType extends Record<string, TypeExpectation | Optional> {}\n\nclass Optional {\n  constructor(readonly type: TypeExpectation) {}\n}\n\nexport function opt(type: TypeExpectation): Optional {\n  return new Optional(type);\n}\n\n/**\n * Asserts the runtime types of arguments. The 'expected' field can be one of\n * a class, a string (representing a \"typeof\" call), or a record map of name\n * to type. Furthermore, the opt() function can be used to mark a field as\n * optional. For example:\n *\n * function foo(auth: Auth, profile: {displayName?: string}, update = false) {\n *   assertTypes(arguments, [AuthImpl, {displayName: opt('string')}, opt('boolean')]);\n * }\n *\n * opt() can be used for any type:\n * function foo(auth?: Auth) {\n *   assertTypes(arguments, [opt(AuthImpl)]);\n * }\n *\n * The string types can be or'd together, and you can use \"null\" as well (note\n * that typeof null === 'object'; this is an edge case). For example:\n *\n * function foo(profile: {displayName?: string | null}) {\n *   assertTypes(arguments, [{displayName: opt('string|null')}]);\n * }\n *\n * @param args\n * @param expected\n */\nexport function assertTypes(\n  args: Omit<IArguments, 'callee'>,\n  ...expected: Array<TypeExpectation | Optional>\n): void {\n  if (args.length > expected.length) {\n    _fail(AuthErrorCode.ARGUMENT_ERROR, {});\n  }\n\n  for (let i = 0; i < expected.length; i++) {\n    let expect = expected[i];\n    const arg = args[i];\n\n    if (expect instanceof Optional) {\n      // If the arg is undefined, then it matches \"optional\" and we can move to\n      // the next arg\n      if (typeof arg === 'undefined') {\n        continue;\n      }\n      expect = expect.type;\n    }\n\n    if (typeof expect === 'string') {\n      // Handle the edge case for null because typeof null === 'object'\n      if (expect.includes('null') && arg === null) {\n        continue;\n      }\n\n      const required = expect.split('|');\n      _assert(required.includes(typeof arg), AuthErrorCode.ARGUMENT_ERROR, {});\n    } else if (typeof expect === 'object') {\n      // Recursively check record arguments\n      const record = arg as Record<string, unknown>;\n      const map = expect as MapType;\n      const keys = Object.keys(expect);\n\n      assertTypes(\n        keys.map(k => record[k]),\n        ...keys.map(k => map[k])\n      );\n    } else {\n      _assert(arg instanceof expect, AuthErrorCode.ARGUMENT_ERROR, {});\n    }\n  }\n}\n\n/**\n * Unconditionally fails, throwing an internal error with the given message.\n *\n * @param failure type of failure encountered\n * @throws Error\n */\nexport function debugFail(failure: string): never {\n  // Log the failure in addition to throw an exception, just in case the\n  // exception is swallowed.\n  const message = `INTERNAL ASSERTION FAILED: ` + failure;\n  _logError(message);\n\n  // NOTE: We don't use FirebaseError here because these are internal failures\n  // that cannot be handled by the user. (Also it would create a circular\n  // dependency between the error and assert modules which doesn't work.)\n  throw new Error(message);\n}\n\n/**\n * Fails if the given assertion condition is false, throwing an Error with the\n * given message if it did.\n *\n * @param assertion\n * @param message\n */\nexport function debugAssert(\n  assertion: unknown,\n  message: string\n): asserts assertion {\n  if (!assertion) {\n    debugFail(message);\n  }\n}\n\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { debugAssert } from './assert';\n\n/**\n * Our API has a lot of one-off constants that are used to do things.\n * Unfortunately we can't export these as classes instantiated directly since\n * the constructor may side effect and therefore can't be proven to be safely\n * culled. Instead, we export these classes themselves as a lowerCamelCase\n * constant, and instantiate them under the hood.\n */\nexport interface SingletonInstantiator<T> {\n  new (): T;\n}\n\nconst instanceCache: Map<unknown, unknown> = new Map();\n\nexport function _getInstance<T>(cls: unknown): T {\n  debugAssert(cls instanceof Function, 'Expected a class definition');\n  let instance = instanceCache.get(cls) as T | undefined;\n\n  if (instance) {\n    debugAssert(\n      instance instanceof cls,\n      'Instance stored in cache mismatched with class'\n    );\n    return instance;\n  }\n\n  instance = new (cls as SingletonInstantiator<T>)();\n  instanceCache.set(cls, instance);\n  return instance;\n}\n\nexport function _clearInstanceMap(): void {\n  instanceCache.clear();\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { _getProvider, FirebaseApp } from '@firebase/app';\nimport { deepEqual } from '@firebase/util';\nimport { Auth, Dependencies } from '../../model/public_types';\n\nimport { AuthErrorCode } from '../errors';\nimport { PersistenceInternal } from '../persistence';\nimport { _fail } from '../util/assert';\nimport { _getInstance } from '../util/instantiator';\nimport { AuthImpl } from './auth_impl';\n\n/**\n * Initializes an {@link Auth} instance with fine-grained control over\n * {@link Dependencies}.\n *\n * @remarks\n *\n * This function allows more control over the {@link Auth} instance than\n * {@link getAuth}. `getAuth` uses platform-specific defaults to supply\n * the {@link Dependencies}. In general, `getAuth` is the easiest way to\n * initialize Auth and works for most use cases. Use `initializeAuth` if you\n * need control over which persistence layer is used, or to minimize bundle\n * size if you're not using either `signInWithPopup` or `signInWithRedirect`.\n *\n * For example, if your app only uses anonymous accounts and you only want\n * accounts saved for the current session, initialize `Auth` with:\n *\n * ```js\n * const auth = initializeAuth(app, {\n *   persistence: browserSessionPersistence,\n *   popupRedirectResolver: undefined,\n * });\n * ```\n *\n * @public\n */\nexport function initializeAuth(app: FirebaseApp, deps?: Dependencies): Auth {\n  const provider = _getProvider(app, 'auth');\n\n  if (provider.isInitialized()) {\n    const auth = provider.getImmediate() as AuthImpl;\n    const initialOptions = provider.getOptions() as Dependencies;\n    if (deepEqual(initialOptions, deps ?? {})) {\n      return auth;\n    } else {\n      _fail(auth, AuthErrorCode.ALREADY_INITIALIZED);\n    }\n  }\n\n  const auth = provider.initialize({ options: deps }) as AuthImpl;\n\n  return auth;\n}\n\nexport function _initializeAuthInstance(\n  auth: AuthImpl,\n  deps?: Dependencies\n): void {\n  const persistence = deps?.persistence || [];\n  const hierarchy = (\n    Array.isArray(persistence) ? persistence : [persistence]\n  ).map<PersistenceInternal>(_getInstance);\n  if (deps?.errorMap) {\n    auth._updateErrorMap(deps.errorMap);\n  }\n\n  // This promise is intended to float; auth initialization happens in the\n  // background, meanwhile the auth object may be used by the app.\n  // eslint-disable-next-line @typescript-eslint/no-floating-promises\n  auth._initializeWithPersistence(hierarchy, deps?.popupRedirectResolver);\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { isIE, getUA } from '@firebase/util';\n\ninterface NavigatorStandalone extends Navigator {\n  standalone?: unknown;\n}\n\ninterface Document {\n  documentMode?: number;\n}\n\n/**\n * Enums for Browser name.\n */\nexport const enum BrowserName {\n  ANDROID = 'Android',\n  BLACKBERRY = 'Blackberry',\n  EDGE = 'Edge',\n  FIREFOX = 'Firefox',\n  IE = 'IE',\n  IEMOBILE = 'IEMobile',\n  OPERA = 'Opera',\n  OTHER = 'Other',\n  CHROME = 'Chrome',\n  SAFARI = 'Safari',\n  SILK = 'Silk',\n  WEBOS = 'Webos'\n}\n\n/**\n * Determine the browser for the purposes of reporting usage to the API\n */\nexport function _getBrowserName(userAgent: string): BrowserName | string {\n  const ua = userAgent.toLowerCase();\n  if (ua.includes('opera/') || ua.includes('opr/') || ua.includes('opios/')) {\n    return BrowserName.OPERA;\n  } else if (_isIEMobile(ua)) {\n    // Windows phone IEMobile browser.\n    return BrowserName.IEMOBILE;\n  } else if (ua.includes('msie') || ua.includes('trident/')) {\n    return BrowserName.IE;\n  } else if (ua.includes('edge/')) {\n    return BrowserName.EDGE;\n  } else if (_isFirefox(ua)) {\n    return BrowserName.FIREFOX;\n  } else if (ua.includes('silk/')) {\n    return BrowserName.SILK;\n  } else if (_isBlackBerry(ua)) {\n    // Blackberry browser.\n    return BrowserName.BLACKBERRY;\n  } else if (_isWebOS(ua)) {\n    // WebOS default browser.\n    return BrowserName.WEBOS;\n  } else if (_isSafari(ua)) {\n    return BrowserName.SAFARI;\n  } else if (\n    (ua.includes('chrome/') || _isChromeIOS(ua)) &&\n    !ua.includes('edge/')\n  ) {\n    return BrowserName.CHROME;\n  } else if (_isAndroid(ua)) {\n    // Android stock browser.\n    return BrowserName.ANDROID;\n  } else {\n    // Most modern browsers have name/version at end of user agent string.\n    const re = /([a-zA-Z\\d\\.]+)\\/[a-zA-Z\\d\\.]*$/;\n    const matches = userAgent.match(re);\n    if (matches?.length === 2) {\n      return matches[1];\n    }\n  }\n  return BrowserName.OTHER;\n}\n\nexport function _isFirefox(ua = getUA()): boolean {\n  return /firefox\\//i.test(ua);\n}\n\nexport function _isSafari(userAgent = getUA()): boolean {\n  const ua = userAgent.toLowerCase();\n  return (\n    ua.includes('safari/') &&\n    !ua.includes('chrome/') &&\n    !ua.includes('crios/') &&\n    !ua.includes('android')\n  );\n}\n\nexport function _isChromeIOS(ua = getUA()): boolean {\n  return /crios\\//i.test(ua);\n}\n\nexport function _isIEMobile(ua = getUA()): boolean {\n  return /iemobile/i.test(ua);\n}\n\nexport function _isAndroid(ua = getUA()): boolean {\n  return /android/i.test(ua);\n}\n\nexport function _isBlackBerry(ua = getUA()): boolean {\n  return /blackberry/i.test(ua);\n}\n\nexport function _isWebOS(ua = getUA()): boolean {\n  return /webos/i.test(ua);\n}\n\nexport function _isIOS(ua = getUA()): boolean {\n  return /iphone|ipad|ipod/i.test(ua);\n}\n\nexport function _isIOS7Or8(ua = getUA()): boolean {\n  return (\n    /(iPad|iPhone|iPod).*OS 7_\\d/i.test(ua) ||\n    /(iPad|iPhone|iPod).*OS 8_\\d/i.test(ua)\n  );\n}\n\nexport function _isIOSStandalone(ua = getUA()): boolean {\n  return _isIOS(ua) && !!(window.navigator as NavigatorStandalone)?.standalone;\n}\n\nexport function _isIE10(): boolean {\n  return isIE() && (document as Document).documentMode === 10;\n}\n\nexport function _isMobileBrowser(ua: string = getUA()): boolean {\n  // TODO: implement getBrowserName equivalent for OS.\n  return (\n    _isIOS(ua) ||\n    _isAndroid(ua) ||\n    _isWebOS(ua) ||\n    _isBlackBerry(ua) ||\n    /windows phone/i.test(ua) ||\n    _isIEMobile(ua)\n  );\n}\n\nexport function _isIframe(): boolean {\n  try {\n    // Check that the current window is not the top window.\n    // If so, return true.\n    return !!(window && window !== window.top);\n  } catch (e) {\n    return false;\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SDK_VERSION } from '@firebase/app';\nimport { _getBrowserName } from './browser';\nimport { getUA } from '@firebase/util';\n\nexport const enum ClientImplementation {\n  CORE = 'JsCore'\n}\n\n/**\n * @internal\n */\nexport const enum ClientPlatform {\n  BROWSER = 'Browser',\n  NODE = 'Node',\n  REACT_NATIVE = 'ReactNative',\n  CORDOVA = 'Cordova',\n  WORKER = 'Worker'\n}\n\n/*\n * Determine the SDK version string\n */\nexport function _getClientVersion(\n  clientPlatform: ClientPlatform,\n  frameworks: readonly string[] = []\n): string {\n  let reportedPlatform: string;\n  switch (clientPlatform) {\n    case ClientPlatform.BROWSER:\n      // In a browser environment, report the browser name.\n      reportedPlatform = _getBrowserName(getUA());\n      break;\n    case ClientPlatform.WORKER:\n      // Technically a worker runs from a browser but we need to differentiate a\n      // worker from a browser.\n      // For example: Chrome-Worker/JsCore/4.9.1/FirebaseCore-web.\n      reportedPlatform = `${_getBrowserName(getUA())}-${clientPlatform}`;\n      break;\n    default:\n      reportedPlatform = clientPlatform;\n  }\n  const reportedFrameworks = frameworks.length\n    ? frameworks.join(',')\n    : 'FirebaseCore-web'; /* default value if no other framework is used */\n  return `${reportedPlatform}/${ClientImplementation.CORE}/${SDK_VERSION}/${reportedFrameworks}`;\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport function _getCurrentUrl(): string {\n  return (typeof self !== 'undefined' && self.location?.href) || '';\n}\n\nexport function _isHttpOrHttps(): boolean {\n  return _getCurrentScheme() === 'http:' || _getCurrentScheme() === 'https:';\n}\n\nexport function _getCurrentScheme(): string | null {\n  return (typeof self !== 'undefined' && self.location?.protocol) || null;\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { isBrowserExtension } from '@firebase/util';\nimport { _isHttpOrHttps } from './location';\n\n/**\n * Determine whether the browser is working online\n */\nexport function _isOnline(): boolean {\n  if (\n    typeof navigator !== 'undefined' &&\n    navigator &&\n    'onLine' in navigator &&\n    typeof navigator.onLine === 'boolean' &&\n    // Apply only for traditional web apps and Chrome extensions.\n    // This is especially true for Cordova apps which have unreliable\n    // navigator.onLine behavior unless cordova-plugin-network-information is\n    // installed which overwrites the native navigator.onLine value and\n    // defines navigator.connection.\n    (_isHttpOrHttps() || isBrowserExtension() || 'connection' in navigator)\n  ) {\n    return navigator.onLine;\n  }\n  // If we can't determine the state, assume it is online.\n  return true;\n}\n\nexport function _getUserLanguage(): string | null {\n  if (typeof navigator === 'undefined') {\n    return null;\n  }\n  const navigatorLanguage: NavigatorLanguage = navigator;\n  return (\n    // Most reliable, but only supported in Chrome/Firefox.\n    (navigatorLanguage.languages && navigatorLanguage.languages[0]) ||\n    // Supported in most browsers, but returns the language of the browser\n    // UI, not the language set in browser settings.\n    navigatorLanguage.language ||\n    // Couldn't determine language.\n    null\n  );\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { isMobileCordova, isReactNative } from '@firebase/util';\nimport { _isOnline } from './navigator';\nimport { debugAssert } from './assert';\n\nexport const enum DelayMin {\n  OFFLINE = 5000\n}\n\n/**\n * A structure to help pick between a range of long and short delay durations\n * depending on the current environment. In general, the long delay is used for\n * mobile environments whereas short delays are used for desktop environments.\n */\nexport class Delay {\n  // The default value for the offline delay timeout in ms.\n\n  private readonly isMobile: boolean;\n  constructor(\n    private readonly shortDelay: number,\n    private readonly longDelay: number\n  ) {\n    // Internal error when improperly initialized.\n    debugAssert(\n      longDelay > shortDelay,\n      'Short delay should be less than long delay!'\n    );\n    this.isMobile = isMobileCordova() || isReactNative();\n  }\n\n  get(): number {\n    if (!_isOnline()) {\n      // Pick the shorter timeout.\n      return Math.min(DelayMin.OFFLINE, this.shortDelay);\n    }\n    // If running in a mobile environment, return the long delay, otherwise\n    // return the short delay.\n    // This could be improved in the future to dynamically change based on other\n    // variables instead of just reading the current environment.\n    return this.isMobile ? this.longDelay : this.shortDelay;\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ConfigInternal } from '../../model/auth';\nimport { debugAssert } from './assert';\n\nexport function _emulatorUrl(config: ConfigInternal, path?: string): string {\n  debugAssert(config.emulator, 'Emulator should always be set here');\n  const { url } = config.emulator;\n\n  if (!path) {\n    return url;\n  }\n\n  return `${url}${path.startsWith('/') ? path.slice(1) : path}`;\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { debugFail } from './assert';\n\nexport class FetchProvider {\n  private static fetchImpl: typeof fetch | null;\n  private static headersImpl: typeof Headers | null;\n  private static responseImpl: typeof Response | null;\n\n  static initialize(\n    fetchImpl: typeof fetch,\n    headersImpl?: typeof Headers,\n    responseImpl?: typeof Response\n  ): void {\n    this.fetchImpl = fetchImpl;\n    if (headersImpl) {\n      this.headersImpl = headersImpl;\n    }\n    if (responseImpl) {\n      this.responseImpl = responseImpl;\n    }\n  }\n\n  static fetch(): typeof fetch {\n    if (this.fetchImpl) {\n      return this.fetchImpl;\n    }\n    if (typeof self !== 'undefined' && 'fetch' in self) {\n      return self.fetch;\n    }\n    debugFail(\n      'Could not find fetch implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill'\n    );\n  }\n\n  static headers(): typeof Headers {\n    if (this.headersImpl) {\n      return this.headersImpl;\n    }\n    if (typeof self !== 'undefined' && 'Headers' in self) {\n      return self.Headers;\n    }\n    debugFail(\n      'Could not find Headers implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill'\n    );\n  }\n\n  static response(): typeof Response {\n    if (this.responseImpl) {\n      return this.responseImpl;\n    }\n    if (typeof self !== 'undefined' && 'Response' in self) {\n      return self.Response;\n    }\n    debugFail(\n      'Could not find Response implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill'\n    );\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AuthErrorCode } from '../core/errors';\n\n/**\n * Errors that can be returned by the backend\n */\nexport const enum ServerError {\n  ADMIN_ONLY_OPERATION = 'ADMIN_ONLY_OPERATION',\n  BLOCKING_FUNCTION_ERROR_RESPONSE = 'BLOCKING_FUNCTION_ERROR_RESPONSE',\n  CAPTCHA_CHECK_FAILED = 'CAPTCHA_CHECK_FAILED',\n  CORS_UNSUPPORTED = 'CORS_UNSUPPORTED',\n  CREDENTIAL_MISMATCH = 'CREDENTIAL_MISMATCH',\n  CREDENTIAL_TOO_OLD_LOGIN_AGAIN = 'CREDENTIAL_TOO_OLD_LOGIN_AGAIN',\n  DYNAMIC_LINK_NOT_ACTIVATED = 'DYNAMIC_LINK_NOT_ACTIVATED',\n  EMAIL_CHANGE_NEEDS_VERIFICATION = 'EMAIL_CHANGE_NEEDS_VERIFICATION',\n  EMAIL_EXISTS = 'EMAIL_EXISTS',\n  EMAIL_NOT_FOUND = 'EMAIL_NOT_FOUND',\n  EXPIRED_OOB_CODE = 'EXPIRED_OOB_CODE',\n  FEDERATED_USER_ID_ALREADY_LINKED = 'FEDERATED_USER_ID_ALREADY_LINKED',\n  INVALID_APP_CREDENTIAL = 'INVALID_APP_CREDENTIAL',\n  INVALID_APP_ID = 'INVALID_APP_ID',\n  INVALID_CERT_HASH = 'INVALID_CERT_HASH',\n  INVALID_CODE = 'INVALID_CODE',\n  INVALID_CONTINUE_URI = 'INVALID_CONTINUE_URI',\n  INVALID_CUSTOM_TOKEN = 'INVALID_CUSTOM_TOKEN',\n  INVALID_DYNAMIC_LINK_DOMAIN = 'INVALID_DYNAMIC_LINK_DOMAIN',\n  INVALID_EMAIL = 'INVALID_EMAIL',\n  INVALID_ID_TOKEN = 'INVALID_ID_TOKEN',\n  INVALID_IDP_RESPONSE = 'INVALID_IDP_RESPONSE',\n  INVALID_IDENTIFIER = 'INVALID_IDENTIFIER',\n  INVALID_MESSAGE_PAYLOAD = 'INVALID_MESSAGE_PAYLOAD',\n  INVALID_MFA_PENDING_CREDENTIAL = 'INVALID_MFA_PENDING_CREDENTIAL',\n  INVALID_OAUTH_CLIENT_ID = 'INVALID_OAUTH_CLIENT_ID',\n  INVALID_OOB_CODE = 'INVALID_OOB_CODE',\n  INVALID_PASSWORD = 'INVALID_PASSWORD',\n  INVALID_PENDING_TOKEN = 'INVALID_PENDING_TOKEN',\n  INVALID_PHONE_NUMBER = 'INVALID_PHONE_NUMBER',\n  INVALID_PROVIDER_ID = 'INVALID_PROVIDER_ID',\n  INVALID_RECIPIENT_EMAIL = 'INVALID_RECIPIENT_EMAIL',\n  INVALID_SENDER = 'INVALID_SENDER',\n  INVALID_SESSION_INFO = 'INVALID_SESSION_INFO',\n  INVALID_TEMPORARY_PROOF = 'INVALID_TEMPORARY_PROOF',\n  INVALID_TENANT_ID = 'INVALID_TENANT_ID',\n  MFA_ENROLLMENT_NOT_FOUND = 'MFA_ENROLLMENT_NOT_FOUND',\n  MISSING_ANDROID_PACKAGE_NAME = 'MISSING_ANDROID_PACKAGE_NAME',\n  MISSING_APP_CREDENTIAL = 'MISSING_APP_CREDENTIAL',\n  MISSING_CODE = 'MISSING_CODE',\n  MISSING_CONTINUE_URI = 'MISSING_CONTINUE_URI',\n  MISSING_CUSTOM_TOKEN = 'MISSING_CUSTOM_TOKEN',\n  MISSING_IOS_BUNDLE_ID = 'MISSING_IOS_BUNDLE_ID',\n  MISSING_MFA_ENROLLMENT_ID = 'MISSING_MFA_ENROLLMENT_ID',\n  MISSING_MFA_PENDING_CREDENTIAL = 'MISSING_MFA_PENDING_CREDENTIAL',\n  MISSING_OOB_CODE = 'MISSING_OOB_CODE',\n  MISSING_OR_INVALID_NONCE = 'MISSING_OR_INVALID_NONCE',\n  MISSING_PASSWORD = 'MISSING_PASSWORD',\n  MISSING_REQ_TYPE = 'MISSING_REQ_TYPE',\n  MISSING_PHONE_NUMBER = 'MISSING_PHONE_NUMBER',\n  MISSING_SESSION_INFO = 'MISSING_SESSION_INFO',\n  OPERATION_NOT_ALLOWED = 'OPERATION_NOT_ALLOWED',\n  PASSWORD_LOGIN_DISABLED = 'PASSWORD_LOGIN_DISABLED',\n  QUOTA_EXCEEDED = 'QUOTA_EXCEEDED',\n  RESET_PASSWORD_EXCEED_LIMIT = 'RESET_PASSWORD_EXCEED_LIMIT',\n  REJECTED_CREDENTIAL = 'REJECTED_CREDENTIAL',\n  SECOND_FACTOR_EXISTS = 'SECOND_FACTOR_EXISTS',\n  SECOND_FACTOR_LIMIT_EXCEEDED = 'SECOND_FACTOR_LIMIT_EXCEEDED',\n  SESSION_EXPIRED = 'SESSION_EXPIRED',\n  TENANT_ID_MISMATCH = 'TENANT_ID_MISMATCH',\n  TOKEN_EXPIRED = 'TOKEN_EXPIRED',\n  TOO_MANY_ATTEMPTS_TRY_LATER = 'TOO_MANY_ATTEMPTS_TRY_LATER',\n  UNSUPPORTED_FIRST_FACTOR = 'UNSUPPORTED_FIRST_FACTOR',\n  UNSUPPORTED_TENANT_OPERATION = 'UNSUPPORTED_TENANT_OPERATION',\n  UNAUTHORIZED_DOMAIN = 'UNAUTHORIZED_DOMAIN',\n  UNVERIFIED_EMAIL = 'UNVERIFIED_EMAIL',\n  USER_CANCELLED = 'USER_CANCELLED',\n  USER_DISABLED = 'USER_DISABLED',\n  USER_NOT_FOUND = 'USER_NOT_FOUND',\n  WEAK_PASSWORD = 'WEAK_PASSWORD'\n}\n\n/**\n * API Response in the event of an error\n */\nexport interface JsonError {\n  error: {\n    code: number;\n    message: string;\n    errors?: [\n      {\n        message: ServerError;\n        domain: string;\n        reason: string;\n      }\n    ];\n  };\n}\n\n/**\n * Type definition for a map from server errors to developer visible errors\n */\nexport declare type ServerErrorMap<ApiError extends string> = {\n  readonly [K in ApiError]: AuthErrorCode;\n};\n\n/**\n * Map from errors returned by the server to errors to developer visible errors\n */\nexport const SERVER_ERROR_MAP: Partial<ServerErrorMap<ServerError>> = {\n  // Custom token errors.\n  [ServerError.CREDENTIAL_MISMATCH]: AuthErrorCode.CREDENTIAL_MISMATCH,\n  // This can only happen if the SDK sends a bad request.\n  [ServerError.MISSING_CUSTOM_TOKEN]: AuthErrorCode.INTERNAL_ERROR,\n\n  // Create Auth URI errors.\n  [ServerError.INVALID_IDENTIFIER]: AuthErrorCode.INVALID_EMAIL,\n  // This can only happen if the SDK sends a bad request.\n  [ServerError.MISSING_CONTINUE_URI]: AuthErrorCode.INTERNAL_ERROR,\n\n  // Sign in with email and password errors (some apply to sign up too).\n  [ServerError.INVALID_PASSWORD]: AuthErrorCode.INVALID_PASSWORD,\n  // This can only happen if the SDK sends a bad request.\n  [ServerError.MISSING_PASSWORD]: AuthErrorCode.INTERNAL_ERROR,\n\n  // Sign up with email and password errors.\n  [ServerError.EMAIL_EXISTS]: AuthErrorCode.EMAIL_EXISTS,\n  [ServerError.PASSWORD_LOGIN_DISABLED]: AuthErrorCode.OPERATION_NOT_ALLOWED,\n\n  // Verify assertion for sign in with credential errors:\n  [ServerError.INVALID_IDP_RESPONSE]: AuthErrorCode.INVALID_IDP_RESPONSE,\n  [ServerError.INVALID_PENDING_TOKEN]: AuthErrorCode.INVALID_IDP_RESPONSE,\n  [ServerError.FEDERATED_USER_ID_ALREADY_LINKED]:\n    AuthErrorCode.CREDENTIAL_ALREADY_IN_USE,\n\n  // This can only happen if the SDK sends a bad request.\n  [ServerError.MISSING_REQ_TYPE]: AuthErrorCode.INTERNAL_ERROR,\n\n  // Send Password reset email errors:\n  [ServerError.EMAIL_NOT_FOUND]: AuthErrorCode.USER_DELETED,\n  [ServerError.RESET_PASSWORD_EXCEED_LIMIT]:\n    AuthErrorCode.TOO_MANY_ATTEMPTS_TRY_LATER,\n\n  [ServerError.EXPIRED_OOB_CODE]: AuthErrorCode.EXPIRED_OOB_CODE,\n  [ServerError.INVALID_OOB_CODE]: AuthErrorCode.INVALID_OOB_CODE,\n  // This can only happen if the SDK sends a bad request.\n  [ServerError.MISSING_OOB_CODE]: AuthErrorCode.INTERNAL_ERROR,\n\n  // Operations that require ID token in request:\n  [ServerError.CREDENTIAL_TOO_OLD_LOGIN_AGAIN]:\n    AuthErrorCode.CREDENTIAL_TOO_OLD_LOGIN_AGAIN,\n  [ServerError.INVALID_ID_TOKEN]: AuthErrorCode.INVALID_AUTH,\n  [ServerError.TOKEN_EXPIRED]: AuthErrorCode.TOKEN_EXPIRED,\n  [ServerError.USER_NOT_FOUND]: AuthErrorCode.TOKEN_EXPIRED,\n\n  // Other errors.\n  [ServerError.TOO_MANY_ATTEMPTS_TRY_LATER]:\n    AuthErrorCode.TOO_MANY_ATTEMPTS_TRY_LATER,\n\n  // Phone Auth related errors.\n  [ServerError.INVALID_CODE]: AuthErrorCode.INVALID_CODE,\n  [ServerError.INVALID_SESSION_INFO]: AuthErrorCode.INVALID_SESSION_INFO,\n  [ServerError.INVALID_TEMPORARY_PROOF]: AuthErrorCode.INVALID_IDP_RESPONSE,\n  [ServerError.MISSING_SESSION_INFO]: AuthErrorCode.MISSING_SESSION_INFO,\n  [ServerError.SESSION_EXPIRED]: AuthErrorCode.CODE_EXPIRED,\n\n  // Other action code errors when additional settings passed.\n  // MISSING_CONTINUE_URI is getting mapped to INTERNAL_ERROR above.\n  // This is OK as this error will be caught by client side validation.\n  [ServerError.MISSING_ANDROID_PACKAGE_NAME]:\n    AuthErrorCode.MISSING_ANDROID_PACKAGE_NAME,\n  [ServerError.UNAUTHORIZED_DOMAIN]: AuthErrorCode.UNAUTHORIZED_DOMAIN,\n\n  // getProjectConfig errors when clientId is passed.\n  [ServerError.INVALID_OAUTH_CLIENT_ID]: AuthErrorCode.INVALID_OAUTH_CLIENT_ID,\n\n  // User actions (sign-up or deletion) disabled errors.\n  [ServerError.ADMIN_ONLY_OPERATION]: AuthErrorCode.ADMIN_ONLY_OPERATION,\n\n  // Multi factor related errors.\n  [ServerError.INVALID_MFA_PENDING_CREDENTIAL]:\n    AuthErrorCode.INVALID_MFA_SESSION,\n  [ServerError.MFA_ENROLLMENT_NOT_FOUND]: AuthErrorCode.MFA_INFO_NOT_FOUND,\n  [ServerError.MISSING_MFA_ENROLLMENT_ID]: AuthErrorCode.MISSING_MFA_INFO,\n  [ServerError.MISSING_MFA_PENDING_CREDENTIAL]:\n    AuthErrorCode.MISSING_MFA_SESSION,\n  [ServerError.SECOND_FACTOR_EXISTS]:\n    AuthErrorCode.SECOND_FACTOR_ALREADY_ENROLLED,\n  [ServerError.SECOND_FACTOR_LIMIT_EXCEEDED]:\n    AuthErrorCode.SECOND_FACTOR_LIMIT_EXCEEDED,\n\n  // Blocking functions related errors.\n  [ServerError.BLOCKING_FUNCTION_ERROR_RESPONSE]: AuthErrorCode.INTERNAL_ERROR,\n};\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FirebaseError, querystring } from '@firebase/util';\n\nimport { AuthErrorCode, NamedErrorParams } from '../core/errors';\nimport { _createError, _errorWithCustomMessage, _fail } from '../core/util/assert';\nimport { Delay } from '../core/util/delay';\nimport { _emulatorUrl } from '../core/util/emulator';\nimport { FetchProvider } from '../core/util/fetch_provider';\nimport { Auth } from '../model/public_types';\nimport { AuthInternal, ConfigInternal } from '../model/auth';\nimport { IdTokenResponse, TaggedWithTokenResponse } from '../model/id_token';\nimport { IdTokenMfaResponse } from './authentication/mfa';\nimport { SERVER_ERROR_MAP, ServerError, ServerErrorMap } from './errors';\n\nexport const enum HttpMethod {\n  POST = 'POST',\n  GET = 'GET'\n}\n\nexport const enum HttpHeader {\n  CONTENT_TYPE = 'Content-Type',\n  X_FIREBASE_LOCALE = 'X-Firebase-Locale',\n  X_CLIENT_VERSION = 'X-Client-Version',\n  X_FIREBASE_GMPID = 'X-Firebase-gmpid',\n  X_FIREBASE_CLIENT = 'X-Firebase-Client',\n}\n\nexport const enum Endpoint {\n  CREATE_AUTH_URI = '/v1/accounts:createAuthUri',\n  DELETE_ACCOUNT = '/v1/accounts:delete',\n  RESET_PASSWORD = '/v1/accounts:resetPassword',\n  SIGN_UP = '/v1/accounts:signUp',\n  SIGN_IN_WITH_CUSTOM_TOKEN = '/v1/accounts:signInWithCustomToken',\n  SIGN_IN_WITH_EMAIL_LINK = '/v1/accounts:signInWithEmailLink',\n  SIGN_IN_WITH_IDP = '/v1/accounts:signInWithIdp',\n  SIGN_IN_WITH_PASSWORD = '/v1/accounts:signInWithPassword',\n  SIGN_IN_WITH_PHONE_NUMBER = '/v1/accounts:signInWithPhoneNumber',\n  SEND_VERIFICATION_CODE = '/v1/accounts:sendVerificationCode',\n  SEND_OOB_CODE = '/v1/accounts:sendOobCode',\n  SET_ACCOUNT_INFO = '/v1/accounts:update',\n  GET_ACCOUNT_INFO = '/v1/accounts:lookup',\n  GET_RECAPTCHA_PARAM = '/v1/recaptchaParams',\n  START_PHONE_MFA_ENROLLMENT = '/v2/accounts/mfaEnrollment:start',\n  FINALIZE_PHONE_MFA_ENROLLMENT = '/v2/accounts/mfaEnrollment:finalize',\n  START_PHONE_MFA_SIGN_IN = '/v2/accounts/mfaSignIn:start',\n  FINALIZE_PHONE_MFA_SIGN_IN = '/v2/accounts/mfaSignIn:finalize',\n  WITHDRAW_MFA = '/v2/accounts/mfaEnrollment:withdraw',\n  GET_PROJECT_CONFIG = '/v1/projects'\n}\n\nexport const DEFAULT_API_TIMEOUT_MS = new Delay(30_000, 60_000);\n\nexport function _addTidIfNecessary<T extends { tenantId?: string }>(\n  auth: Auth,\n  request: T\n): T {\n  if (auth.tenantId && !request.tenantId) {\n    return {\n      ...request,\n      tenantId: auth.tenantId\n    };\n  }\n  return request;\n}\n\nexport async function _performApiRequest<T, V>(\n  auth: Auth,\n  method: HttpMethod,\n  path: Endpoint,\n  request?: T,\n  customErrorMap: Partial<ServerErrorMap<ServerError>> = {}\n): Promise<V> {\n  return _performFetchWithErrorHandling(auth, customErrorMap, async () => {\n    let body = {};\n    let params = {};\n    if (request) {\n      if (method === HttpMethod.GET) {\n        params = request;\n      } else {\n        body = {\n          body: JSON.stringify(request)\n        };\n      }\n    }\n\n    const query = querystring({\n      key: auth.config.apiKey,\n      ...params\n    }).slice(1);\n\n    const headers = await (auth as AuthInternal)._getAdditionalHeaders();\n    headers[HttpHeader.CONTENT_TYPE] = 'application/json';\n\n    if (auth.languageCode) {\n      headers[HttpHeader.X_FIREBASE_LOCALE] = auth.languageCode;\n    }\n\n    return FetchProvider.fetch()(\n      _getFinalTarget(auth, auth.config.apiHost, path, query),\n      {\n        method,\n        headers,\n        referrerPolicy: 'no-referrer',\n        ...body\n      }\n    );\n  });\n}\n\nexport async function _performFetchWithErrorHandling<V>(\n  auth: Auth,\n  customErrorMap: Partial<ServerErrorMap<ServerError>>,\n  fetchFn: () => Promise<Response>\n): Promise<V> {\n  (auth as AuthInternal)._canInitEmulator = false;\n  const errorMap = { ...SERVER_ERROR_MAP, ...customErrorMap };\n  try {\n    const networkTimeout = new NetworkTimeout<Response>(auth);\n    const response: Response = await Promise.race<Promise<Response>>([\n      fetchFn(),\n      networkTimeout.promise\n    ]);\n\n    // If we've reached this point, the fetch succeeded and the networkTimeout\n    // didn't throw; clear the network timeout delay so that Node won't hang\n    networkTimeout.clearNetworkTimeout();\n\n    const json = await response.json();\n    if ('needConfirmation' in json) {\n      throw _makeTaggedError(auth, AuthErrorCode.NEED_CONFIRMATION, json);\n    }\n\n    if (response.ok && !('errorMessage' in json)) {\n      return json;\n    } else {\n      const errorMessage = response.ok ? json.errorMessage : json.error.message;\n      const [serverErrorCode, serverErrorMessage] = errorMessage.split(' : ');\n      if (serverErrorCode === ServerError.FEDERATED_USER_ID_ALREADY_LINKED) {\n        throw _makeTaggedError(\n          auth,\n          AuthErrorCode.CREDENTIAL_ALREADY_IN_USE,\n          json\n        );\n      } else if (serverErrorCode === ServerError.EMAIL_EXISTS) {\n        throw _makeTaggedError(auth, AuthErrorCode.EMAIL_EXISTS, json);\n      }\n      const authError =\n        errorMap[serverErrorCode as ServerError] ||\n        ((serverErrorCode\n          .toLowerCase()\n          .replace(/[_\\s]+/g, '-') as unknown) as AuthErrorCode);\n      if (serverErrorMessage) {\n        throw _errorWithCustomMessage(auth, authError, serverErrorMessage);\n      } else {\n        _fail(auth, authError);\n      }\n    }\n  } catch (e) {\n    if (e instanceof FirebaseError) {\n      throw e;\n    }\n    _fail(auth, AuthErrorCode.NETWORK_REQUEST_FAILED);\n  }\n}\n\nexport async function _performSignInRequest<T, V extends IdTokenResponse>(\n  auth: Auth,\n  method: HttpMethod,\n  path: Endpoint,\n  request?: T,\n  customErrorMap: Partial<ServerErrorMap<ServerError>> = {}\n): Promise<V> {\n  const serverResponse = (await _performApiRequest<T, V | IdTokenMfaResponse>(\n    auth,\n    method,\n    path,\n    request,\n    customErrorMap\n  )) as V;\n  if ('mfaPendingCredential' in serverResponse) {\n    _fail(auth, AuthErrorCode.MFA_REQUIRED, {\n      _serverResponse: serverResponse\n    });\n  }\n\n  return serverResponse;\n}\n\nexport function _getFinalTarget(\n  auth: Auth,\n  host: string,\n  path: string,\n  query: string\n): string {\n  const base = `${host}${path}?${query}`;\n\n  if (!(auth as AuthInternal).config.emulator) {\n    return `${auth.config.apiScheme}://${base}`;\n  }\n\n  return _emulatorUrl(auth.config as ConfigInternal, base);\n}\n\nclass NetworkTimeout<T> {\n  // Node timers and browser timers are fundamentally incompatible, but we\n  // don't care about the value here\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  private timer: any | null = null;\n  readonly promise = new Promise<T>((_, reject) => {\n    this.timer = setTimeout(() => {\n      return reject(_createError(this.auth, AuthErrorCode.NETWORK_REQUEST_FAILED));\n    }, DEFAULT_API_TIMEOUT_MS.get());\n  });\n\n  clearNetworkTimeout(): void {\n    clearTimeout(this.timer);\n  }\n\n  constructor(private readonly auth: Auth) {}\n}\n\ninterface PotentialResponse extends IdTokenResponse {\n  email?: string;\n  phoneNumber?: string;\n}\n\nexport function _makeTaggedError(\n  auth: Auth,\n  code: AuthErrorCode,\n  response: PotentialResponse\n): FirebaseError {\n  const errorParams: NamedErrorParams = {\n    appName: auth.name\n  };\n\n  if (response.email) {\n    errorParams.email = response.email;\n  }\n  if (response.phoneNumber) {\n    errorParams.phoneNumber = response.phoneNumber;\n  }\n\n  const error = _createError(auth, code, errorParams);\n\n  // We know customData is defined on error because errorParams is defined\n  (error.customData! as TaggedWithTokenResponse)._tokenResponse = response;\n  return error;\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Endpoint, HttpMethod, _performApiRequest } from '../index';\nimport { MfaEnrollment } from './mfa';\nimport { Auth } from '../../model/public_types';\n\nexport interface DeleteAccountRequest {\n  idToken: string;\n}\n\nexport async function deleteAccount(\n  auth: Auth,\n  request: DeleteAccountRequest\n): Promise<void> {\n  return _performApiRequest<DeleteAccountRequest, void>(\n    auth,\n    HttpMethod.POST,\n    Endpoint.DELETE_ACCOUNT,\n    request\n  );\n}\n\nexport interface ProviderUserInfo {\n  providerId: string;\n  rawId?: string;\n  email?: string;\n  displayName?: string;\n  photoUrl?: string;\n  phoneNumber?: string;\n}\n\nexport interface DeleteLinkedAccountsRequest {\n  idToken: string;\n  deleteProvider: string[];\n}\n\nexport interface DeleteLinkedAccountsResponse {\n  providerUserInfo: ProviderUserInfo[];\n}\n\nexport async function deleteLinkedAccounts(\n  auth: Auth,\n  request: DeleteLinkedAccountsRequest\n): Promise<DeleteLinkedAccountsResponse> {\n  return _performApiRequest<\n    DeleteLinkedAccountsRequest,\n    DeleteLinkedAccountsResponse\n  >(auth, HttpMethod.POST, Endpoint.SET_ACCOUNT_INFO, request);\n}\n\nexport interface APIUserInfo {\n  localId?: string;\n  displayName?: string;\n  photoUrl?: string;\n  email?: string;\n  emailVerified?: boolean;\n  phoneNumber?: string;\n  lastLoginAt?: number;\n  createdAt?: number;\n  tenantId?: string;\n  passwordHash?: string;\n  providerUserInfo?: ProviderUserInfo[];\n  mfaInfo?: MfaEnrollment[];\n}\n\nexport interface GetAccountInfoRequest {\n  idToken: string;\n}\n\nexport interface GetAccountInfoResponse {\n  users: APIUserInfo[];\n}\n\nexport async function getAccountInfo(\n  auth: Auth,\n  request: GetAccountInfoRequest\n): Promise<GetAccountInfoResponse> {\n  return _performApiRequest<GetAccountInfoRequest, GetAccountInfoResponse>(\n    auth,\n    HttpMethod.POST,\n    Endpoint.GET_ACCOUNT_INFO,\n    request\n  );\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport function utcTimestampToDateString(\n  utcTimestamp?: string | number\n): string | undefined {\n  if (!utcTimestamp) {\n    return undefined;\n  }\n  try {\n    // Convert to date object.\n    const date = new Date(Number(utcTimestamp));\n    // Test date is valid.\n    if (!isNaN(date.getTime())) {\n      // Convert to UTC date string.\n      return date.toUTCString();\n    }\n  } catch (e) {\n    // Do nothing. undefined will be returned.\n  }\n  return undefined;\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { IdTokenResult, ParsedToken, User } from '../../model/public_types';\nimport { base64Decode, getModularInstance } from '@firebase/util';\n\nimport { UserInternal } from '../../model/user';\nimport { _assert } from '../util/assert';\nimport { _logError } from '../util/log';\nimport { utcTimestampToDateString } from '../util/time';\nimport { AuthErrorCode } from '../errors';\n\n/**\n * Returns a JSON Web Token (JWT) used to identify the user to a Firebase service.\n *\n * @remarks\n * Returns the current token if it has not expired or if it will not expire in the next five\n * minutes. Otherwise, this will refresh the token and return a new one.\n *\n * @param user - The user.\n * @param forceRefresh - Force refresh regardless of token expiration.\n *\n * @public\n */\nexport function getIdToken(user: User, forceRefresh = false): Promise<string> {\n  return getModularInstance(user).getIdToken(forceRefresh);\n}\n\n/**\n * Returns a deserialized JSON Web Token (JWT) used to identitfy the user to a Firebase service.\n *\n * @remarks\n * Returns the current token if it has not expired or if it will not expire in the next five\n * minutes. Otherwise, this will refresh the token and return a new one.\n *\n * @param user - The user.\n * @param forceRefresh - Force refresh regardless of token expiration.\n *\n * @public\n */\nexport async function getIdTokenResult(\n  user: User,\n  forceRefresh = false\n): Promise<IdTokenResult> {\n  const userInternal = getModularInstance(user) as UserInternal;\n  const token = await userInternal.getIdToken(forceRefresh);\n  const claims = _parseToken(token);\n\n  _assert(\n    claims && claims.exp && claims.auth_time && claims.iat,\n    userInternal.auth,\n    AuthErrorCode.INTERNAL_ERROR\n  );\n  const firebase =\n    typeof claims.firebase === 'object' ? claims.firebase : undefined;\n\n  const signInProvider: string | undefined = firebase?.['sign_in_provider'];\n\n  return {\n    claims,\n    token,\n    authTime: utcTimestampToDateString(\n      secondsStringToMilliseconds(claims.auth_time)\n    )!,\n    issuedAtTime: utcTimestampToDateString(\n      secondsStringToMilliseconds(claims.iat)\n    )!,\n    expirationTime: utcTimestampToDateString(\n      secondsStringToMilliseconds(claims.exp)\n    )!,\n    signInProvider: signInProvider || null,\n    signInSecondFactor: firebase?.['sign_in_second_factor'] || null\n  };\n}\n\nfunction secondsStringToMilliseconds(seconds: string): number {\n  return Number(seconds) * 1000;\n}\n\nexport function _parseToken(token: string): ParsedToken | null {\n  const [algorithm, payload, signature] = token.split('.');\n  if (\n    algorithm === undefined ||\n    payload === undefined ||\n    signature === undefined\n  ) {\n    _logError('JWT malformed, contained fewer than 3 sections');\n    return null;\n  }\n\n  try {\n    const decoded = base64Decode(payload);\n    if (!decoded) {\n      _logError('Failed to decode base64 JWT payload');\n      return null;\n    }\n    return JSON.parse(decoded);\n  } catch (e) {\n    _logError('Caught error parsing JWT payload as JSON', e);\n    return null;\n  }\n}\n\n/**\n * Extract expiresIn TTL from a token by subtracting the expiration from the issuance.\n */\nexport function _tokenExpiresIn(token: string): number {\n  const parsedToken = _parseToken(token);\n  _assert(parsedToken, AuthErrorCode.INTERNAL_ERROR);\n  _assert(typeof parsedToken.exp !== 'undefined', AuthErrorCode.INTERNAL_ERROR);\n  _assert(typeof parsedToken.iat !== 'undefined', AuthErrorCode.INTERNAL_ERROR);\n  return Number(parsedToken.exp) - Number(parsedToken.iat);\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FirebaseError } from '@firebase/util';\n\nimport { UserInternal } from '../../model/user';\nimport { AuthErrorCode } from '../errors';\n\nexport async function _logoutIfInvalidated<T>(\n  user: UserInternal,\n  promise: Promise<T>,\n  bypassAuthState = false\n): Promise<T> {\n  if (bypassAuthState) {\n    return promise;\n  }\n  try {\n    return await promise;\n  } catch (e) {\n    if (e instanceof FirebaseError && isUserInvalidated(e)) {\n      if (user.auth.currentUser === user) {\n        await user.auth.signOut();\n      }\n    }\n\n    throw e;\n  }\n}\n\nfunction isUserInvalidated({ code }: FirebaseError): boolean {\n  return (\n    code === `auth/${AuthErrorCode.USER_DISABLED}` ||\n    code === `auth/${AuthErrorCode.TOKEN_EXPIRED}`\n  );\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { UserInternal } from '../../model/user';\nimport { AuthErrorCode } from '../errors';\n\n// Refresh the token five minutes before expiration\nexport const enum Duration {\n  OFFSET = 5 * 1000 * 60,\n  RETRY_BACKOFF_MIN = 30 * 1000,\n  RETRY_BACKOFF_MAX = 16 * 60 * 1000\n}\n\nexport class ProactiveRefresh {\n  private isRunning = false;\n\n  // Node timers and browser timers return fundamentally different types.\n  // We don't actually care what the value is but TS won't accept unknown and\n  // we can't cast properly in both environments.\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  private timerId: any | null = null;\n  private errorBackoff = Duration.RETRY_BACKOFF_MIN;\n\n  constructor(private readonly user: UserInternal) {}\n\n  _start(): void {\n    if (this.isRunning) {\n      return;\n    }\n\n    this.isRunning = true;\n    this.schedule();\n  }\n\n  _stop(): void {\n    if (!this.isRunning) {\n      return;\n    }\n\n    this.isRunning = false;\n    if (this.timerId !== null) {\n      clearTimeout(this.timerId);\n    }\n  }\n\n  private getInterval(wasError: boolean): number {\n    if (wasError) {\n      const interval = this.errorBackoff;\n      this.errorBackoff = Math.min(\n        this.errorBackoff * 2,\n        Duration.RETRY_BACKOFF_MAX\n      );\n      return interval;\n    } else {\n      // Reset the error backoff\n      this.errorBackoff = Duration.RETRY_BACKOFF_MIN;\n      const expTime = this.user.stsTokenManager.expirationTime ?? 0;\n      const interval = expTime - Date.now() - Duration.OFFSET;\n\n      return Math.max(0, interval);\n    }\n  }\n\n  private schedule(wasError = false): void {\n    if (!this.isRunning) {\n      // Just in case...\n      return;\n    }\n\n    const interval = this.getInterval(wasError);\n    this.timerId = setTimeout(async () => {\n      await this.iteration();\n    }, interval);\n  }\n\n  private async iteration(): Promise<void> {\n    try {\n      await this.user.getIdToken(true);\n    } catch (e) {\n      // Only retry on network errors\n      if (e.code === `auth/${AuthErrorCode.NETWORK_REQUEST_FAILED}`) {\n        this.schedule(/* wasError */ true);\n      }\n\n      return;\n    }\n    this.schedule();\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { UserMetadata as UserMetadataType } from '../../model/public_types';\n\nimport { utcTimestampToDateString } from '../util/time';\n\nexport class UserMetadata implements UserMetadataType {\n  creationTime?: string;\n  lastSignInTime?: string;\n\n  constructor(\n    private createdAt?: string | number,\n    private lastLoginAt?: string | number\n  ) {\n    this._initializeTime();\n  }\n\n  private _initializeTime(): void {\n    this.lastSignInTime = utcTimestampToDateString(this.lastLoginAt);\n    this.creationTime = utcTimestampToDateString(this.createdAt);\n  }\n\n  _copy(metadata: UserMetadata): void {\n    this.createdAt = metadata.createdAt;\n    this.lastLoginAt = metadata.lastLoginAt;\n    this._initializeTime();\n  }\n\n  toJSON(): object {\n    return {\n      createdAt: this.createdAt,\n      lastLoginAt: this.lastLoginAt\n    };\n  }\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { User, UserInfo } from '../../model/public_types';\n\nimport {\n  getAccountInfo,\n  ProviderUserInfo\n} from '../../api/account_management/account';\nimport { UserInternal } from '../../model/user';\nimport { AuthErrorCode } from '../errors';\nimport { _assert } from '../util/assert';\nimport { _logoutIfInvalidated } from './invalidation';\nimport { UserMetadata } from './user_metadata';\nimport { getModularInstance } from '@firebase/util';\n\nexport async function _reloadWithoutSaving(user: UserInternal): Promise<void> {\n  const auth = user.auth;\n  const idToken = await user.getIdToken();\n  const response = await _logoutIfInvalidated(\n    user,\n    getAccountInfo(auth, { idToken })\n  );\n\n  _assert(response?.users.length, auth, AuthErrorCode.INTERNAL_ERROR);\n\n  const coreAccount = response.users[0];\n\n  user._notifyReloadListener(coreAccount);\n\n  const newProviderData = coreAccount.providerUserInfo?.length\n    ? extractProviderData(coreAccount.providerUserInfo)\n    : [];\n\n  const providerData = mergeProviderData(user.providerData, newProviderData);\n\n  // Preserves the non-nonymous status of the stored user, even if no more\n  // credentials (federated or email/password) are linked to the user. If\n  // the user was previously anonymous, then use provider data to update.\n  // On the other hand, if it was not anonymous before, it should never be\n  // considered anonymous now.\n  const oldIsAnonymous = user.isAnonymous;\n  const newIsAnonymous =\n    !(user.email && coreAccount.passwordHash) && !providerData?.length;\n  const isAnonymous = !oldIsAnonymous ? false : newIsAnonymous;\n\n  const updates: Partial<UserInternal> = {\n    uid: coreAccount.localId,\n    displayName: coreAccount.displayName || null,\n    photoURL: coreAccount.photoUrl || null,\n    email: coreAccount.email || null,\n    emailVerified: coreAccount.emailVerified || false,\n    phoneNumber: coreAccount.phoneNumber || null,\n    tenantId: coreAccount.tenantId || null,\n    providerData,\n    metadata: new UserMetadata(coreAccount.createdAt, coreAccount.lastLoginAt),\n    isAnonymous\n  };\n\n  Object.assign(user, updates);\n}\n\n/**\n * Reloads user account data, if signed in.\n *\n * @param user - The user.\n *\n * @public\n */\nexport async function reload(user: User): Promise<void> {\n  const userInternal: UserInternal = getModularInstance(user) as UserInternal;\n  await _reloadWithoutSaving(userInternal);\n\n  // Even though the current user hasn't changed, update\n  // current user will trigger a persistence update w/ the\n  // new info.\n  await userInternal.auth._persistUserIfCurrent(userInternal);\n  userInternal.auth._notifyListenersIfCurrent(userInternal);\n}\n\nfunction mergeProviderData(\n  original: UserInfo[],\n  newData: UserInfo[]\n): UserInfo[] {\n  const deduped = original.filter(\n    o => !newData.some(n => n.providerId === o.providerId)\n  );\n  return [...deduped, ...newData];\n}\n\nfunction extractProviderData(providers: ProviderUserInfo[]): UserInfo[] {\n  return providers.map(({ providerId, ...provider }) => {\n    return {\n      providerId,\n      uid: provider.rawId || '',\n      displayName: provider.displayName || null,\n      email: provider.email || null,\n      phoneNumber: provider.phoneNumber || null,\n      photoURL: provider.photoUrl || null\n    };\n  });\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable camelcase */\n\nimport { querystring } from '@firebase/util';\n\nimport {\n  _getFinalTarget,\n  _performFetchWithErrorHandling,\n  HttpMethod,\n  HttpHeader\n} from '../index';\nimport { FetchProvider } from '../../core/util/fetch_provider';\nimport { Auth } from '../../model/public_types';\nimport { AuthInternal } from '../../model/auth';\n\nexport const enum Endpoint {\n  TOKEN = '/v1/token'\n}\n\n/** The server responses with snake_case; we convert to camelCase */\ninterface RequestStsTokenServerResponse {\n  access_token: string;\n  expires_in: string;\n  refresh_token: string;\n}\n\nexport interface RequestStsTokenResponse {\n  accessToken: string;\n  expiresIn: string;\n  refreshToken: string;\n}\n\nexport async function requestStsToken(\n  auth: Auth,\n  refreshToken: string\n): Promise<RequestStsTokenResponse> {\n  const response = await _performFetchWithErrorHandling<RequestStsTokenServerResponse>(\n    auth,\n    {},\n    async () => {\n      const body = querystring({\n        'grant_type': 'refresh_token',\n        'refresh_token': refreshToken\n      }).slice(1);\n      const { tokenApiHost, apiKey } = auth.config;\n      const url = _getFinalTarget(\n        auth,\n        tokenApiHost,\n        Endpoint.TOKEN,\n        `key=${apiKey}`\n      );\n\n      const headers = await (auth as AuthInternal)._getAdditionalHeaders();\n      headers[HttpHeader.CONTENT_TYPE] = 'application/x-www-form-urlencoded';\n\n      return FetchProvider.fetch()(url, {\n        method: HttpMethod.POST,\n        headers,\n        body\n      });\n    }\n  );\n\n  // The response comes back in snake_case. Convert to camel:\n  return {\n    accessToken: response.access_token,\n    expiresIn: response.expires_in,\n    refreshToken: response.refresh_token\n  };\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FinalizeMfaResponse } from '../../api/authentication/mfa';\nimport { requestStsToken } from '../../api/authentication/token';\nimport { AuthInternal } from '../../model/auth';\nimport { IdTokenResponse } from '../../model/id_token';\nimport { AuthErrorCode } from '../errors';\nimport { PersistedBlob } from '../persistence';\nimport { _assert, debugFail } from '../util/assert';\nimport { _tokenExpiresIn } from './id_token_result';\n\n/**\n * The number of milliseconds before the official expiration time of a token\n * to refresh that token, to provide a buffer for RPCs to complete.\n */\nexport const enum Buffer {\n  TOKEN_REFRESH = 30_000\n}\n\n/**\n * We need to mark this class as internal explicitly to exclude it in the public typings, because\n * it references AuthInternal which has a circular dependency with UserInternal.\n *\n * @internal\n */\nexport class StsTokenManager {\n  refreshToken: string | null = null;\n  accessToken: string | null = null;\n  expirationTime: number | null = null;\n\n  get isExpired(): boolean {\n    return (\n      !this.expirationTime ||\n      Date.now() > this.expirationTime - Buffer.TOKEN_REFRESH\n    );\n  }\n\n  updateFromServerResponse(\n    response: IdTokenResponse | FinalizeMfaResponse\n  ): void {\n    _assert(response.idToken, AuthErrorCode.INTERNAL_ERROR);\n    _assert(\n      typeof response.idToken !== 'undefined',\n      AuthErrorCode.INTERNAL_ERROR\n    );\n    _assert(\n      typeof response.refreshToken !== 'undefined',\n      AuthErrorCode.INTERNAL_ERROR\n    );\n    const expiresIn =\n      'expiresIn' in response && typeof response.expiresIn !== 'undefined'\n        ? Number(response.expiresIn)\n        : _tokenExpiresIn(response.idToken);\n    this.updateTokensAndExpiration(\n      response.idToken,\n      response.refreshToken,\n      expiresIn\n    );\n  }\n\n  async getToken(\n    auth: AuthInternal,\n    forceRefresh = false\n  ): Promise<string | null> {\n    _assert(\n      !this.accessToken || this.refreshToken,\n      auth,\n      AuthErrorCode.TOKEN_EXPIRED\n    );\n\n    if (!forceRefresh && this.accessToken && !this.isExpired) {\n      return this.accessToken;\n    }\n\n    if (this.refreshToken) {\n      await this.refresh(auth, this.refreshToken!);\n      return this.accessToken;\n    }\n\n    return null;\n  }\n\n  clearRefreshToken(): void {\n    this.refreshToken = null;\n  }\n\n  private async refresh(auth: AuthInternal, oldToken: string): Promise<void> {\n    const { accessToken, refreshToken, expiresIn } = await requestStsToken(\n      auth,\n      oldToken\n    );\n    this.updateTokensAndExpiration(\n      accessToken,\n      refreshToken,\n      Number(expiresIn)\n    );\n  }\n\n  private updateTokensAndExpiration(\n    accessToken: string,\n    refreshToken: string,\n    expiresInSec: number\n  ): void {\n    this.refreshToken = refreshToken || null;\n    this.accessToken = accessToken || null;\n    this.expirationTime = Date.now() + expiresInSec * 1000;\n  }\n\n  static fromJSON(appName: string, object: PersistedBlob): StsTokenManager {\n    const { refreshToken, accessToken, expirationTime } = object;\n\n    const manager = new StsTokenManager();\n    if (refreshToken) {\n      _assert(typeof refreshToken === 'string', AuthErrorCode.INTERNAL_ERROR, {\n        appName\n      });\n      manager.refreshToken = refreshToken;\n    }\n    if (accessToken) {\n      _assert(typeof accessToken === 'string', AuthErrorCode.INTERNAL_ERROR, {\n        appName\n      });\n      manager.accessToken = accessToken;\n    }\n    if (expirationTime) {\n      _assert(\n        typeof expirationTime === 'number',\n        AuthErrorCode.INTERNAL_ERROR,\n        {\n          appName\n        }\n      );\n      manager.expirationTime = expirationTime;\n    }\n    return manager;\n  }\n\n  toJSON(): object {\n    return {\n      refreshToken: this.refreshToken,\n      accessToken: this.accessToken,\n      expirationTime: this.expirationTime\n    };\n  }\n\n  _assign(stsTokenManager: StsTokenManager): void {\n    this.accessToken = stsTokenManager.accessToken;\n    this.refreshToken = stsTokenManager.refreshToken;\n    this.expirationTime = stsTokenManager.expirationTime;\n  }\n\n  _clone(): StsTokenManager {\n    return Object.assign(new StsTokenManager(), this.toJSON());\n  }\n\n  _performRefresh(): never {\n    return debugFail('not implemented');\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { IdTokenResult } from '../../model/public_types';\nimport { NextFn } from '@firebase/util';\n\nimport {\n  APIUserInfo,\n  deleteAccount\n} from '../../api/account_management/account';\nimport { FinalizeMfaResponse } from '../../api/authentication/mfa';\nimport { AuthInternal } from '../../model/auth';\nimport { IdTokenResponse } from '../../model/id_token';\nimport {\n  MutableUserInfo,\n  UserInternal,\n  UserParameters\n} from '../../model/user';\nimport { AuthErrorCode } from '../errors';\nimport { PersistedBlob } from '../persistence';\nimport { _assert } from '../util/assert';\nimport { getIdTokenResult } from './id_token_result';\nimport { _logoutIfInvalidated } from './invalidation';\nimport { ProactiveRefresh } from './proactive_refresh';\nimport { _reloadWithoutSaving, reload } from './reload';\nimport { StsTokenManager } from './token_manager';\nimport { UserMetadata } from './user_metadata';\nimport { ProviderId } from '../../model/enums';\n\nfunction assertStringOrUndefined(\n  assertion: unknown,\n  appName: string\n): asserts assertion is string | undefined {\n  _assert(\n    typeof assertion === 'string' || typeof assertion === 'undefined',\n    AuthErrorCode.INTERNAL_ERROR,\n    { appName }\n  );\n}\n\nexport class UserImpl implements UserInternal {\n  // For the user object, provider is always Firebase.\n  readonly providerId = ProviderId.FIREBASE;\n  stsTokenManager: StsTokenManager;\n  // Last known accessToken so we know when it changes\n  private accessToken: string | null;\n\n  uid: string;\n  auth: AuthInternal;\n  emailVerified: boolean;\n  isAnonymous: boolean;\n  tenantId: string | null;\n  readonly metadata: UserMetadata;\n  providerData: MutableUserInfo[];\n\n  // Optional fields from UserInfo\n  displayName: string | null;\n  email: string | null;\n  phoneNumber: string | null;\n  photoURL: string | null;\n\n  _redirectEventId?: string;\n  private readonly proactiveRefresh = new ProactiveRefresh(this);\n\n  constructor({ uid, auth, stsTokenManager, ...opt }: UserParameters) {\n    this.uid = uid;\n    this.auth = auth;\n    this.stsTokenManager = stsTokenManager;\n    this.accessToken = stsTokenManager.accessToken;\n    this.displayName = opt.displayName || null;\n    this.email = opt.email || null;\n    this.emailVerified = opt.emailVerified || false;\n    this.phoneNumber = opt.phoneNumber || null;\n    this.photoURL = opt.photoURL || null;\n    this.isAnonymous = opt.isAnonymous || false;\n    this.tenantId = opt.tenantId || null;\n    this.providerData = opt.providerData ? [...opt.providerData] : [];\n    this.metadata = new UserMetadata(\n      opt.createdAt || undefined,\n      opt.lastLoginAt || undefined\n    );\n  }\n\n  async getIdToken(forceRefresh?: boolean): Promise<string> {\n    const accessToken = await _logoutIfInvalidated(\n      this,\n      this.stsTokenManager.getToken(this.auth, forceRefresh)\n    );\n    _assert(accessToken, this.auth, AuthErrorCode.INTERNAL_ERROR);\n\n    if (this.accessToken !== accessToken) {\n      this.accessToken = accessToken;\n      await this.auth._persistUserIfCurrent(this);\n      this.auth._notifyListenersIfCurrent(this);\n    }\n\n    return accessToken;\n  }\n\n  getIdTokenResult(forceRefresh?: boolean): Promise<IdTokenResult> {\n    return getIdTokenResult(this, forceRefresh);\n  }\n\n  reload(): Promise<void> {\n    return reload(this);\n  }\n\n  private reloadUserInfo: APIUserInfo | null = null;\n  private reloadListener: NextFn<APIUserInfo> | null = null;\n\n  _assign(user: UserInternal): void {\n    if (this === user) {\n      return;\n    }\n    _assert(this.uid === user.uid, this.auth, AuthErrorCode.INTERNAL_ERROR);\n    this.displayName = user.displayName;\n    this.photoURL = user.photoURL;\n    this.email = user.email;\n    this.emailVerified = user.emailVerified;\n    this.phoneNumber = user.phoneNumber;\n    this.isAnonymous = user.isAnonymous;\n    this.tenantId = user.tenantId;\n    this.providerData = user.providerData.map(userInfo => ({ ...userInfo }));\n    this.metadata._copy(user.metadata);\n    this.stsTokenManager._assign(user.stsTokenManager);\n  }\n\n  _clone(auth: AuthInternal): UserInternal {\n    return new UserImpl({\n      ...this,\n      auth,\n      stsTokenManager: this.stsTokenManager._clone()\n    });\n  }\n\n  _onReload(callback: NextFn<APIUserInfo>): void {\n    // There should only ever be one listener, and that is a single instance of MultiFactorUser\n    _assert(!this.reloadListener, this.auth, AuthErrorCode.INTERNAL_ERROR);\n    this.reloadListener = callback;\n    if (this.reloadUserInfo) {\n      this._notifyReloadListener(this.reloadUserInfo);\n      this.reloadUserInfo = null;\n    }\n  }\n\n  _notifyReloadListener(userInfo: APIUserInfo): void {\n    if (this.reloadListener) {\n      this.reloadListener(userInfo);\n    } else {\n      // If no listener is subscribed yet, save the result so it's available when they do subscribe\n      this.reloadUserInfo = userInfo;\n    }\n  }\n\n  _startProactiveRefresh(): void {\n    this.proactiveRefresh._start();\n  }\n\n  _stopProactiveRefresh(): void {\n    this.proactiveRefresh._stop();\n  }\n\n  async _updateTokensIfNecessary(\n    response: IdTokenResponse | FinalizeMfaResponse,\n    reload = false\n  ): Promise<void> {\n    let tokensRefreshed = false;\n    if (\n      response.idToken &&\n      response.idToken !== this.stsTokenManager.accessToken\n    ) {\n      this.stsTokenManager.updateFromServerResponse(response);\n      tokensRefreshed = true;\n    }\n\n    if (reload) {\n      await _reloadWithoutSaving(this);\n    }\n\n    await this.auth._persistUserIfCurrent(this);\n    if (tokensRefreshed) {\n      this.auth._notifyListenersIfCurrent(this);\n    }\n  }\n\n  async delete(): Promise<void> {\n    const idToken = await this.getIdToken();\n    await _logoutIfInvalidated(this, deleteAccount(this.auth, { idToken }));\n    this.stsTokenManager.clearRefreshToken();\n\n    // TODO: Determine if cancellable-promises are necessary to use in this class so that delete()\n    //       cancels pending actions...\n\n    return this.auth.signOut();\n  }\n\n  toJSON(): PersistedBlob {\n    return {\n      uid: this.uid,\n      email: this.email || undefined,\n      emailVerified: this.emailVerified,\n      displayName: this.displayName || undefined,\n      isAnonymous: this.isAnonymous,\n      photoURL: this.photoURL || undefined,\n      phoneNumber: this.phoneNumber || undefined,\n      tenantId: this.tenantId || undefined,\n      providerData: this.providerData.map(userInfo => ({ ...userInfo })),\n      stsTokenManager: this.stsTokenManager.toJSON(),\n      // Redirect event ID must be maintained in case there is a pending\n      // redirect event.\n      _redirectEventId: this._redirectEventId,\n      ...this.metadata.toJSON(),\n\n      // Required for compatibility with the legacy SDK (go/firebase-auth-sdk-persistence-parsing):\n      apiKey: this.auth.config.apiKey,\n      appName: this.auth.name\n      // Missing authDomain will be tolerated by the legacy SDK.\n      // stsTokenManager.apiKey isn't actually required (despite the legacy SDK persisting it).\n    };\n  }\n\n  get refreshToken(): string {\n    return this.stsTokenManager.refreshToken || '';\n  }\n\n  static _fromJSON(auth: AuthInternal, object: PersistedBlob): UserInternal {\n    const displayName = object.displayName ?? undefined;\n    const email = object.email ?? undefined;\n    const phoneNumber = object.phoneNumber ?? undefined;\n    const photoURL = object.photoURL ?? undefined;\n    const tenantId = object.tenantId ?? undefined;\n    const _redirectEventId = object._redirectEventId ?? undefined;\n    const createdAt = object.createdAt ?? undefined;\n    const lastLoginAt = object.lastLoginAt ?? undefined;\n    const {\n      uid,\n      emailVerified,\n      isAnonymous,\n      providerData,\n      stsTokenManager: plainObjectTokenManager\n    } = object;\n\n    _assert(uid && plainObjectTokenManager, auth, AuthErrorCode.INTERNAL_ERROR);\n\n    const stsTokenManager = StsTokenManager.fromJSON(\n      this.name,\n      plainObjectTokenManager as PersistedBlob\n    );\n\n    _assert(typeof uid === 'string', auth, AuthErrorCode.INTERNAL_ERROR);\n    assertStringOrUndefined(displayName, auth.name);\n    assertStringOrUndefined(email, auth.name);\n    _assert(\n      typeof emailVerified === 'boolean',\n      auth,\n      AuthErrorCode.INTERNAL_ERROR\n    );\n    _assert(\n      typeof isAnonymous === 'boolean',\n      auth,\n      AuthErrorCode.INTERNAL_ERROR\n    );\n    assertStringOrUndefined(phoneNumber, auth.name);\n    assertStringOrUndefined(photoURL, auth.name);\n    assertStringOrUndefined(tenantId, auth.name);\n    assertStringOrUndefined(_redirectEventId, auth.name);\n    assertStringOrUndefined(createdAt, auth.name);\n    assertStringOrUndefined(lastLoginAt, auth.name);\n    const user = new UserImpl({\n      uid,\n      auth,\n      email,\n      emailVerified,\n      displayName,\n      isAnonymous,\n      photoURL,\n      phoneNumber,\n      tenantId,\n      stsTokenManager,\n      createdAt,\n      lastLoginAt\n    });\n\n    if (providerData && Array.isArray(providerData)) {\n      user.providerData = providerData.map(userInfo => ({ ...userInfo }));\n    }\n\n    if (_redirectEventId) {\n      user._redirectEventId = _redirectEventId;\n    }\n\n    return user;\n  }\n\n  /**\n   * Initialize a User from an idToken server response\n   * @param auth\n   * @param idTokenResponse\n   */\n  static async _fromIdTokenResponse(\n    auth: AuthInternal,\n    idTokenResponse: IdTokenResponse,\n    isAnonymous: boolean = false\n  ): Promise<UserInternal> {\n    const stsTokenManager = new StsTokenManager();\n    stsTokenManager.updateFromServerResponse(idTokenResponse);\n\n    // Initialize the Firebase Auth user.\n    const user = new UserImpl({\n      uid: idTokenResponse.localId,\n      auth,\n      stsTokenManager,\n      isAnonymous\n    });\n\n    // Updates the user info and data and resolves with a user instance.\n    await _reloadWithoutSaving(user);\n    return user;\n  }\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Persistence } from '../../model/public_types';\n\nimport {\n  PersistenceInternal,\n  PersistenceType,\n  PersistenceValue,\n  StorageEventListener\n} from '../persistence';\n\nexport class InMemoryPersistence implements PersistenceInternal {\n  static type: 'NONE' = 'NONE';\n  readonly type = PersistenceType.NONE;\n  storage: Record<string, PersistenceValue> = {};\n\n  async _isAvailable(): Promise<boolean> {\n    return true;\n  }\n\n  async _set(key: string, value: PersistenceValue): Promise<void> {\n    this.storage[key] = value;\n  }\n\n  async _get<T extends PersistenceValue>(key: string): Promise<T | null> {\n    const value = this.storage[key];\n    return value === undefined ? null : (value as T);\n  }\n\n  async _remove(key: string): Promise<void> {\n    delete this.storage[key];\n  }\n\n  _addListener(_key: string, _listener: StorageEventListener): void {\n    // Listeners are not supported for in-memory storage since it cannot be shared across windows/workers\n    return;\n  }\n\n  _removeListener(_key: string, _listener: StorageEventListener): void {\n    // Listeners are not supported for in-memory storage since it cannot be shared across windows/workers\n    return;\n  }\n}\n\n/**\n * An implementation of {@link Persistence} of type 'NONE'.\n *\n * @public\n */\nexport const inMemoryPersistence: Persistence = InMemoryPersistence;\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ApiKey, AppName, AuthInternal } from '../../model/auth';\nimport { UserInternal } from '../../model/user';\nimport { PersistedBlob, PersistenceInternal } from '../persistence';\nimport { UserImpl } from '../user/user_impl';\nimport { _getInstance } from '../util/instantiator';\nimport { inMemoryPersistence } from './in_memory';\n\nexport const enum KeyName {\n  AUTH_USER = 'authUser',\n  AUTH_EVENT = 'authEvent',\n  REDIRECT_USER = 'redirectUser',\n  PERSISTENCE_USER = 'persistence'\n}\nexport const enum Namespace {\n  PERSISTENCE = 'firebase'\n}\n\nexport function _persistenceKeyName(\n  key: string,\n  apiKey: ApiKey,\n  appName: AppName\n): string {\n  return `${Namespace.PERSISTENCE}:${key}:${apiKey}:${appName}`;\n}\n\nexport class PersistenceUserManager {\n  private readonly fullUserKey: string;\n  private readonly fullPersistenceKey: string;\n  private readonly boundEventHandler: () => void;\n\n  private constructor(\n    public persistence: PersistenceInternal,\n    private readonly auth: AuthInternal,\n    private readonly userKey: string\n  ) {\n    const { config, name } = this.auth;\n    this.fullUserKey = _persistenceKeyName(this.userKey, config.apiKey, name);\n    this.fullPersistenceKey = _persistenceKeyName(\n      KeyName.PERSISTENCE_USER,\n      config.apiKey,\n      name\n    );\n    this.boundEventHandler = auth._onStorageEvent.bind(auth);\n    this.persistence._addListener(this.fullUserKey, this.boundEventHandler);\n  }\n\n  setCurrentUser(user: UserInternal): Promise<void> {\n    return this.persistence._set(this.fullUserKey, user.toJSON());\n  }\n\n  async getCurrentUser(): Promise<UserInternal | null> {\n    const blob = await this.persistence._get<PersistedBlob>(this.fullUserKey);\n    return blob ? UserImpl._fromJSON(this.auth, blob) : null;\n  }\n\n  removeCurrentUser(): Promise<void> {\n    return this.persistence._remove(this.fullUserKey);\n  }\n\n  savePersistenceForRedirect(): Promise<void> {\n    return this.persistence._set(\n      this.fullPersistenceKey,\n      this.persistence.type\n    );\n  }\n\n  async setPersistence(newPersistence: PersistenceInternal): Promise<void> {\n    if (this.persistence === newPersistence) {\n      return;\n    }\n\n    const currentUser = await this.getCurrentUser();\n    await this.removeCurrentUser();\n\n    this.persistence = newPersistence;\n\n    if (currentUser) {\n      return this.setCurrentUser(currentUser);\n    }\n  }\n\n  delete(): void {\n    this.persistence._removeListener(this.fullUserKey, this.boundEventHandler);\n  }\n\n  static async create(\n    auth: AuthInternal,\n    persistenceHierarchy: PersistenceInternal[],\n    userKey = KeyName.AUTH_USER\n  ): Promise<PersistenceUserManager> {\n    if (!persistenceHierarchy.length) {\n      return new PersistenceUserManager(\n        _getInstance(inMemoryPersistence),\n        auth,\n        userKey\n      );\n    }\n\n    // Eliminate any persistences that are not available\n    const availablePersistences = (\n      await Promise.all(\n        persistenceHierarchy.map(async persistence => {\n          if (await persistence._isAvailable()) {\n            return persistence;\n          }\n          return undefined;\n        })\n      )\n    ).filter(persistence => persistence) as PersistenceInternal[];\n\n    // Fall back to the first persistence listed, or in memory if none available\n    let selectedPersistence =\n      availablePersistences[0] ||\n      _getInstance<PersistenceInternal>(inMemoryPersistence);\n\n    const key = _persistenceKeyName(userKey, auth.config.apiKey, auth.name);\n\n    // Pull out the existing user, setting the chosen persistence to that\n    // persistence if the user exists.\n    let userToMigrate: UserInternal | null = null;\n    // Note, here we check for a user in _all_ persistences, not just the\n    // ones deemed available. If we can migrate a user out of a broken\n    // persistence, we will (but only if that persistence supports migration).\n    for (const persistence of persistenceHierarchy) {\n      try {\n        const blob = await persistence._get<PersistedBlob>(key);\n        if (blob) {\n          const user = UserImpl._fromJSON(auth, blob); // throws for unparsable blob (wrong format)\n          if (persistence !== selectedPersistence) {\n            userToMigrate = user;\n          }\n          selectedPersistence = persistence;\n          break;\n        }\n      } catch {}\n    }\n\n    // If we find the user in a persistence that does support migration, use\n    // that migration path (of only persistences that support migration)\n    const migrationHierarchy = availablePersistences.filter(\n      p => p._shouldAllowMigration\n    );\n\n    // If the persistence does _not_ allow migration, just finish off here\n    if (\n      !selectedPersistence._shouldAllowMigration ||\n      !migrationHierarchy.length\n    ) {\n      return new PersistenceUserManager(selectedPersistence, auth, userKey);\n    }\n\n    selectedPersistence = migrationHierarchy[0];\n    if (userToMigrate) {\n      // This normally shouldn't throw since chosenPersistence.isAvailable() is true, but if it does\n      // we'll just let it bubble to surface the error.\n      await selectedPersistence._set(key, userToMigrate.toJSON());\n    }\n\n    // Attempt to clear the key in other persistences but ignore errors. This helps prevent issues\n    // such as users getting stuck with a previous account after signing out and refreshing the tab.\n    await Promise.all(\n      persistenceHierarchy.map(async persistence => {\n        if (persistence !== selectedPersistence) {\n          try {\n            await persistence._remove(key);\n          } catch {}\n        }\n      })\n    );\n    return new PersistenceUserManager(selectedPersistence, auth, userKey);\n  }\n}\n","/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AuthInternal } from '../../model/auth';\nimport { Unsubscribe, User } from '../../model/public_types';\nimport { AuthErrorCode } from '../errors';\n\ninterface MiddlewareEntry {\n  (user: User | null): Promise<void>;\n  onAbort?: () => void;\n}\n\nexport class AuthMiddlewareQueue {\n  private readonly queue: MiddlewareEntry[] = [];\n\n  constructor(private readonly auth: AuthInternal) {}\n\n  pushCallback(\n      callback: (user: User | null) => void | Promise<void>,\n      onAbort?: () => void): Unsubscribe {\n    // The callback could be sync or async. Wrap it into a\n    // function that is always async.\n    const wrappedCallback: MiddlewareEntry =\n      (user: User | null): Promise<void> => new Promise((resolve, reject) => {\n        try {\n          const result = callback(user);\n          // Either resolve with existing promise or wrap a non-promise\n          // return value into a promise.\n          resolve(result);\n        } catch (e) {\n          // Sync callback throws.\n          reject(e);\n        }\n      });\n    // Attach the onAbort if present\n    wrappedCallback.onAbort = onAbort;\n    this.queue.push(wrappedCallback);\n\n    const index = this.queue.length - 1;\n    return () => {\n      // Unsubscribe. Replace with no-op. Do not remove from array, or it will disturb\n      // indexing of other elements.\n      this.queue[index] = () => Promise.resolve();\n    };\n  }\n\n  async runMiddleware(nextUser: User | null): Promise<void> {\n    if (this.auth.currentUser === nextUser) {\n      return;\n    }\n\n    // While running the middleware, build a temporary stack of onAbort\n    // callbacks to call if one middleware callback rejects.\n\n    const onAbortStack: Array<() => void> = [];\n    try {\n      for (const beforeStateCallback of this.queue) {\n        await beforeStateCallback(nextUser);\n\n        // Only push the onAbort if the callback succeeds\n        if (beforeStateCallback.onAbort) {\n          onAbortStack.push(beforeStateCallback.onAbort);\n        }\n      }\n    } catch (e) {\n      // Run all onAbort, with separate try/catch to ignore any errors and\n      // continue\n      onAbortStack.reverse();\n      for (const onAbort of onAbortStack) {\n        try {\n          onAbort();\n        } catch (_) { /* swallow error */}\n      }\n\n      throw this.auth._errorFactory.create(\n        AuthErrorCode.LOGIN_BLOCKED, { originalMessage: e.message });\n    }\n  }\n}","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { _FirebaseService, FirebaseApp } from '@firebase/app';\nimport { Provider } from '@firebase/component';\nimport {\n  Auth,\n  AuthErrorMap,\n  AuthSettings,\n  EmulatorConfig,\n  NextOrObserver,\n  Persistence,\n  PopupRedirectResolver,\n  User,\n  UserCredential,\n  CompleteFn,\n  ErrorFn,\n  NextFn,\n  Unsubscribe\n} from '../../model/public_types';\nimport {\n  createSubscribe,\n  ErrorFactory,\n  getModularInstance,\n  Observer,\n  Subscribe\n} from '@firebase/util';\n\nimport { AuthInternal, ConfigInternal } from '../../model/auth';\nimport { PopupRedirectResolverInternal } from '../../model/popup_redirect';\nimport { UserInternal } from '../../model/user';\nimport {\n  AuthErrorCode,\n  AuthErrorParams,\n  ErrorMapRetriever,\n  _DEFAULT_AUTH_ERROR_FACTORY\n} from '../errors';\nimport { PersistenceInternal } from '../persistence';\nimport {\n  KeyName,\n  PersistenceUserManager\n} from '../persistence/persistence_user_manager';\nimport { _reloadWithoutSaving } from '../user/reload';\nimport { _assert } from '../util/assert';\nimport { _getInstance } from '../util/instantiator';\nimport { _getUserLanguage } from '../util/navigator';\nimport { _getClientVersion } from '../util/version';\nimport { HttpHeader } from '../../api';\nimport { AuthMiddlewareQueue } from './middleware';\n\ninterface AsyncAction {\n  (): Promise<void>;\n}\n\nexport const enum DefaultConfig {\n  TOKEN_API_HOST = 'securetoken.googleapis.com',\n  API_HOST = 'identitytoolkit.googleapis.com',\n  API_SCHEME = 'https'\n}\n\nexport class AuthImpl implements AuthInternal, _FirebaseService {\n  currentUser: User | null = null;\n  emulatorConfig: EmulatorConfig | null = null;\n  private operations = Promise.resolve();\n  private persistenceManager?: PersistenceUserManager;\n  private redirectPersistenceManager?: PersistenceUserManager;\n  private authStateSubscription = new Subscription<User>(this);\n  private idTokenSubscription = new Subscription<User>(this);\n  private readonly beforeStateQueue = new AuthMiddlewareQueue(this);\n  private redirectUser: UserInternal | null = null;\n  private isProactiveRefreshEnabled = false;\n\n  // Any network calls will set this to true and prevent subsequent emulator\n  // initialization\n  _canInitEmulator = true;\n  _isInitialized = false;\n  _deleted = false;\n  _initializationPromise: Promise<void> | null = null;\n  _popupRedirectResolver: PopupRedirectResolverInternal | null = null;\n  _errorFactory: ErrorFactory<AuthErrorCode, AuthErrorParams> =\n    _DEFAULT_AUTH_ERROR_FACTORY;\n  readonly name: string;\n\n  // Tracks the last notified UID for state change listeners to prevent\n  // repeated calls to the callbacks. Undefined means it's never been\n  // called, whereas null means it's been called with a signed out user\n  private lastNotifiedUid: string | null | undefined = undefined;\n\n  languageCode: string | null = null;\n  tenantId: string | null = null;\n  settings: AuthSettings = { appVerificationDisabledForTesting: false };\n\n  constructor(\n    public readonly app: FirebaseApp,\n    private readonly heartbeatServiceProvider: Provider<'heartbeat'>,\n    public readonly config: ConfigInternal\n  ) {\n    this.name = app.name;\n    this.clientVersion = config.sdkClientVersion;\n  }\n\n  _initializeWithPersistence(\n    persistenceHierarchy: PersistenceInternal[],\n    popupRedirectResolver?: PopupRedirectResolver\n  ): Promise<void> {\n    if (popupRedirectResolver) {\n      this._popupRedirectResolver = _getInstance(popupRedirectResolver);\n    }\n\n    // Have to check for app deletion throughout initialization (after each\n    // promise resolution)\n    this._initializationPromise = this.queue(async () => {\n      if (this._deleted) {\n        return;\n      }\n\n      this.persistenceManager = await PersistenceUserManager.create(\n        this,\n        persistenceHierarchy\n      );\n\n      if (this._deleted) {\n        return;\n      }\n\n      // Initialize the resolver early if necessary (only applicable to web:\n      // this will cause the iframe to load immediately in certain cases)\n      if (this._popupRedirectResolver?._shouldInitProactively) {\n        // If this fails, don't halt auth loading\n        try {\n          await this._popupRedirectResolver._initialize(this);\n        } catch (e) { /* Ignore the error */ }\n      }\n\n      await this.initializeCurrentUser(popupRedirectResolver);\n      this.lastNotifiedUid = this.currentUser?.uid || null;\n\n      if (this._deleted) {\n        return;\n      }\n\n      this._isInitialized = true;\n    });\n\n    return this._initializationPromise;\n  }\n\n  /**\n   * If the persistence is changed in another window, the user manager will let us know\n   */\n  async _onStorageEvent(): Promise<void> {\n    if (this._deleted) {\n      return;\n    }\n\n    const user = await this.assertedPersistence.getCurrentUser();\n\n    if (!this.currentUser && !user) {\n      // No change, do nothing (was signed out and remained signed out).\n      return;\n    }\n\n    // If the same user is to be synchronized.\n    if (this.currentUser && user && this.currentUser.uid === user.uid) {\n      // Data update, simply copy data changes.\n      this._currentUser._assign(user);\n      // If tokens changed from previous user tokens, this will trigger\n      // notifyAuthListeners_.\n      await this.currentUser.getIdToken();\n      return;\n    }\n\n    // Update current Auth state. Either a new login or logout.\n    // Skip blocking callbacks, they should not apply to a change in another tab.\n    await this._updateCurrentUser(user, /* skipBeforeStateCallbacks */ true);\n  }\n\n  private async initializeCurrentUser(\n    popupRedirectResolver?: PopupRedirectResolver\n  ): Promise<void> {\n    // First check to see if we have a pending redirect event.\n    const previouslyStoredUser =\n      (await this.assertedPersistence.getCurrentUser()) as UserInternal | null;\n    let futureCurrentUser = previouslyStoredUser;\n    let needsTocheckMiddleware = false;\n    if (popupRedirectResolver && this.config.authDomain) {\n      await this.getOrInitRedirectPersistenceManager();\n      const redirectUserEventId = this.redirectUser?._redirectEventId;\n      const storedUserEventId = futureCurrentUser?._redirectEventId;\n      const result = await this.tryRedirectSignIn(popupRedirectResolver);\n\n      // If the stored user (i.e. the old \"currentUser\") has a redirectId that\n      // matches the redirect user, then we want to initially sign in with the\n      // new user object from result.\n      // TODO(samgho): More thoroughly test all of this\n      if (\n        (!redirectUserEventId || redirectUserEventId === storedUserEventId) &&\n        result?.user\n      ) {\n        futureCurrentUser = result.user as UserInternal;\n        needsTocheckMiddleware = true;\n      }\n    }\n\n    // If no user in persistence, there is no current user. Set to null.\n    if (!futureCurrentUser) {\n      return this.directlySetCurrentUser(null);\n    }\n\n    if (!futureCurrentUser._redirectEventId) {\n      // This isn't a redirect link operation, we can reload and bail.\n      // First though, ensure that we check the middleware is happy.\n      if (needsTocheckMiddleware) {\n        try {\n          await this.beforeStateQueue.runMiddleware(futureCurrentUser);\n        } catch(e) {\n          futureCurrentUser = previouslyStoredUser;\n          // We know this is available since the bit is only set when the\n          // resolver is available\n          this._popupRedirectResolver!._overrideRedirectResult(this, () => Promise.reject(e));\n        }\n      }\n  \n      if (futureCurrentUser) {\n        return this.reloadAndSetCurrentUserOrClear(futureCurrentUser);\n      } else {\n        return this.directlySetCurrentUser(null);\n      }\n    }\n\n    _assert(this._popupRedirectResolver, this, AuthErrorCode.ARGUMENT_ERROR);\n    await this.getOrInitRedirectPersistenceManager();\n\n    // If the redirect user's event ID matches the current user's event ID,\n    // DO NOT reload the current user, otherwise they'll be cleared from storage.\n    // This is important for the reauthenticateWithRedirect() flow.\n    if (\n      this.redirectUser &&\n      this.redirectUser._redirectEventId === futureCurrentUser._redirectEventId\n    ) {\n      return this.directlySetCurrentUser(futureCurrentUser);\n    }\n\n    return this.reloadAndSetCurrentUserOrClear(futureCurrentUser);\n  }\n\n  private async tryRedirectSignIn(\n    redirectResolver: PopupRedirectResolver\n  ): Promise<UserCredential | null> {\n    // The redirect user needs to be checked (and signed in if available)\n    // during auth initialization. All of the normal sign in and link/reauth\n    // flows call back into auth and push things onto the promise queue. We\n    // need to await the result of the redirect sign in *inside the promise\n    // queue*. This presents a problem: we run into deadlock. See:\n    //    ┌> [Initialization] ─────┐\n    //    ┌> [<other queue tasks>] │\n    //    └─ [getRedirectResult] <─┘\n    //    where [] are tasks on the queue and arrows denote awaits\n    // Initialization will never complete because it's waiting on something\n    // that's waiting for initialization to complete!\n    //\n    // Instead, this method calls getRedirectResult() (stored in\n    // _completeRedirectFn) with an optional parameter that instructs all of\n    // the underlying auth operations to skip anything that mutates auth state.\n\n    let result: UserCredential | null = null;\n    try {\n      // We know this._popupRedirectResolver is set since redirectResolver\n      // is passed in. The _completeRedirectFn expects the unwrapped extern.\n      result = await this._popupRedirectResolver!._completeRedirectFn(\n        this,\n        redirectResolver,\n        true\n      );\n    } catch (e) {\n      // Swallow any errors here; the code can retrieve them in\n      // getRedirectResult().\n      await this._setRedirectUser(null);\n    }\n\n    return result;\n  }\n\n  private async reloadAndSetCurrentUserOrClear(\n    user: UserInternal\n  ): Promise<void> {\n    try {\n      await _reloadWithoutSaving(user);\n    } catch (e) {\n      if (e.code !== `auth/${AuthErrorCode.NETWORK_REQUEST_FAILED}`) {\n        // Something's wrong with the user's token. Log them out and remove\n        // them from storage\n        return this.directlySetCurrentUser(null);\n      }\n    }\n\n    return this.directlySetCurrentUser(user);\n  }\n\n  useDeviceLanguage(): void {\n    this.languageCode = _getUserLanguage();\n  }\n\n  async _delete(): Promise<void> {\n    this._deleted = true;\n  }\n\n  async updateCurrentUser(userExtern: User | null): Promise<void> {\n    // The public updateCurrentUser method needs to make a copy of the user,\n    // and also check that the project matches\n    const user = userExtern\n      ? (getModularInstance(userExtern) as UserInternal)\n      : null;\n    if (user) {\n      _assert(\n        user.auth.config.apiKey === this.config.apiKey,\n        this,\n        AuthErrorCode.INVALID_AUTH\n      );\n    }\n    return this._updateCurrentUser(user && user._clone(this));\n  }\n\n  async _updateCurrentUser(user: User | null, skipBeforeStateCallbacks: boolean = false): Promise<void> {\n    if (this._deleted) {\n      return;\n    }\n    if (user) {\n      _assert(\n        this.tenantId === user.tenantId,\n        this,\n        AuthErrorCode.TENANT_ID_MISMATCH\n      );\n    }\n\n    if (!skipBeforeStateCallbacks) {\n      await this.beforeStateQueue.runMiddleware(user);\n    }\n\n    return this.queue(async () => {\n      await this.directlySetCurrentUser(user as UserInternal | null);\n      this.notifyAuthListeners();\n    });\n  }\n\n  async signOut(): Promise<void> {\n    // Run first, to block _setRedirectUser() if any callbacks fail.\n    await this.beforeStateQueue.runMiddleware(null);\n    // Clear the redirect user when signOut is called\n    if (this.redirectPersistenceManager || this._popupRedirectResolver) {\n      await this._setRedirectUser(null);\n    }\n\n    // Prevent callbacks from being called again in _updateCurrentUser, as\n    // they were already called in the first line.\n    return this._updateCurrentUser(null, /* skipBeforeStateCallbacks */ true);\n  }\n\n  setPersistence(persistence: Persistence): Promise<void> {\n    return this.queue(async () => {\n      await this.assertedPersistence.setPersistence(_getInstance(persistence));\n    });\n  }\n\n  _getPersistence(): string {\n    return this.assertedPersistence.persistence.type;\n  }\n\n  _updateErrorMap(errorMap: AuthErrorMap): void {\n    this._errorFactory = new ErrorFactory<AuthErrorCode, AuthErrorParams>(\n      'auth',\n      'Firebase',\n      (errorMap as ErrorMapRetriever)()\n    );\n  }\n\n  onAuthStateChanged(\n    nextOrObserver: NextOrObserver<User>,\n    error?: ErrorFn,\n    completed?: CompleteFn\n  ): Unsubscribe {\n    return this.registerStateListener(\n      this.authStateSubscription,\n      nextOrObserver,\n      error,\n      completed\n    );\n  }\n\n  beforeAuthStateChanged(\n    callback: (user: User | null) => void | Promise<void>,\n    onAbort?: () => void,\n  ): Unsubscribe {\n    return this.beforeStateQueue.pushCallback(callback, onAbort);\n  }\n\n  onIdTokenChanged(\n    nextOrObserver: NextOrObserver<User>,\n    error?: ErrorFn,\n    completed?: CompleteFn\n  ): Unsubscribe {\n    return this.registerStateListener(\n      this.idTokenSubscription,\n      nextOrObserver,\n      error,\n      completed\n    );\n  }\n\n  toJSON(): object {\n    return {\n      apiKey: this.config.apiKey,\n      authDomain: this.config.authDomain,\n      appName: this.name,\n      currentUser: this._currentUser?.toJSON()\n    };\n  }\n\n  async _setRedirectUser(\n    user: UserInternal | null,\n    popupRedirectResolver?: PopupRedirectResolver\n  ): Promise<void> {\n    const redirectManager = await this.getOrInitRedirectPersistenceManager(\n      popupRedirectResolver\n    );\n    return user === null\n      ? redirectManager.removeCurrentUser()\n      : redirectManager.setCurrentUser(user);\n  }\n\n  private async getOrInitRedirectPersistenceManager(\n    popupRedirectResolver?: PopupRedirectResolver\n  ): Promise<PersistenceUserManager> {\n    if (!this.redirectPersistenceManager) {\n      const resolver: PopupRedirectResolverInternal | null =\n        (popupRedirectResolver && _getInstance(popupRedirectResolver)) ||\n        this._popupRedirectResolver;\n      _assert(resolver, this, AuthErrorCode.ARGUMENT_ERROR);\n      this.redirectPersistenceManager = await PersistenceUserManager.create(\n        this,\n        [_getInstance(resolver._redirectPersistence)],\n        KeyName.REDIRECT_USER\n      );\n      this.redirectUser =\n        await this.redirectPersistenceManager.getCurrentUser();\n    }\n\n    return this.redirectPersistenceManager;\n  }\n\n  async _redirectUserForId(id: string): Promise<UserInternal | null> {\n    // Make sure we've cleared any pending persistence actions if we're not in\n    // the initializer\n    if (this._isInitialized) {\n      await this.queue(async () => { });\n    }\n\n    if (this._currentUser?._redirectEventId === id) {\n      return this._currentUser;\n    }\n\n    if (this.redirectUser?._redirectEventId === id) {\n      return this.redirectUser;\n    }\n\n    return null;\n  }\n\n  async _persistUserIfCurrent(user: UserInternal): Promise<void> {\n    if (user === this.currentUser) {\n      return this.queue(async () => this.directlySetCurrentUser(user));\n    }\n  }\n\n  /** Notifies listeners only if the user is current */\n  _notifyListenersIfCurrent(user: UserInternal): void {\n    if (user === this.currentUser) {\n      this.notifyAuthListeners();\n    }\n  }\n\n  _key(): string {\n    return `${this.config.authDomain}:${this.config.apiKey}:${this.name}`;\n  }\n\n  _startProactiveRefresh(): void {\n    this.isProactiveRefreshEnabled = true;\n    if (this.currentUser) {\n      this._currentUser._startProactiveRefresh();\n    }\n  }\n\n  _stopProactiveRefresh(): void {\n    this.isProactiveRefreshEnabled = false;\n    if (this.currentUser) {\n      this._currentUser._stopProactiveRefresh();\n    }\n  }\n\n  /** Returns the current user cast as the internal type */\n  get _currentUser(): UserInternal {\n    return this.currentUser as UserInternal;\n  }\n\n  private notifyAuthListeners(): void {\n    if (!this._isInitialized) {\n      return;\n    }\n\n    this.idTokenSubscription.next(this.currentUser);\n\n    const currentUid = this.currentUser?.uid ?? null;\n    if (this.lastNotifiedUid !== currentUid) {\n      this.lastNotifiedUid = currentUid;\n      this.authStateSubscription.next(this.currentUser);\n    }\n  }\n\n  private registerStateListener(\n    subscription: Subscription<User>,\n    nextOrObserver: NextOrObserver<User>,\n    error?: ErrorFn,\n    completed?: CompleteFn\n  ): Unsubscribe {\n    if (this._deleted) {\n      return () => { };\n    }\n\n    const cb =\n      typeof nextOrObserver === 'function'\n        ? nextOrObserver\n        : nextOrObserver.next.bind(nextOrObserver);\n\n    const promise = this._isInitialized\n      ? Promise.resolve()\n      : this._initializationPromise;\n    _assert(promise, this, AuthErrorCode.INTERNAL_ERROR);\n    // The callback needs to be called asynchronously per the spec.\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    promise.then(() => cb(this.currentUser));\n\n    if (typeof nextOrObserver === 'function') {\n      return subscription.addObserver(nextOrObserver, error, completed);\n    } else {\n      return subscription.addObserver(nextOrObserver);\n    }\n  }\n\n  /**\n   * Unprotected (from race conditions) method to set the current user. This\n   * should only be called from within a queued callback. This is necessary\n   * because the queue shouldn't rely on another queued callback.\n   */\n  private async directlySetCurrentUser(\n    user: UserInternal | null\n  ): Promise<void> {\n    if (this.currentUser && this.currentUser !== user) {\n      this._currentUser._stopProactiveRefresh();\n      if (user && this.isProactiveRefreshEnabled) {\n        user._startProactiveRefresh();\n      }\n    }\n\n    this.currentUser = user;\n\n    if (user) {\n      await this.assertedPersistence.setCurrentUser(user);\n    } else {\n      await this.assertedPersistence.removeCurrentUser();\n    }\n  }\n\n  private queue(action: AsyncAction): Promise<void> {\n    // In case something errors, the callback still should be called in order\n    // to keep the promise chain alive\n    this.operations = this.operations.then(action, action);\n    return this.operations;\n  }\n\n  private get assertedPersistence(): PersistenceUserManager {\n    _assert(this.persistenceManager, this, AuthErrorCode.INTERNAL_ERROR);\n    return this.persistenceManager;\n  }\n\n  private frameworks: string[] = [];\n  private clientVersion: string;\n  _logFramework(framework: string): void {\n    if (!framework || this.frameworks.includes(framework)) {\n      return;\n    }\n    this.frameworks.push(framework);\n\n    // Sort alphabetically so that \"FirebaseCore-web,FirebaseUI-web\" and\n    // \"FirebaseUI-web,FirebaseCore-web\" aren't viewed as different.\n    this.frameworks.sort();\n    this.clientVersion = _getClientVersion(\n      this.config.clientPlatform,\n      this._getFrameworks()\n    );\n  }\n  _getFrameworks(): readonly string[] {\n    return this.frameworks;\n  }\n  async _getAdditionalHeaders(): Promise<Record<string, string>> {\n    // Additional headers on every request\n    const headers: Record<string, string> = {\n      [HttpHeader.X_CLIENT_VERSION]: this.clientVersion,\n    };\n\n    if (this.app.options.appId) {\n      headers[HttpHeader.X_FIREBASE_GMPID] = this.app.options.appId;\n    }\n\n    // If the heartbeat service exists, add the heartbeat string\n    const heartbeatsHeader = await this.heartbeatServiceProvider.getImmediate({\n      optional: true,\n    })?.getHeartbeatsHeader();\n    if (heartbeatsHeader) {\n      headers[HttpHeader.X_FIREBASE_CLIENT] = heartbeatsHeader;\n    }\n    return headers;\n  }\n}\n\n/**\n * Method to be used to cast down to our private implmentation of Auth.\n * It will also handle unwrapping from the compat type if necessary\n *\n * @param auth Auth object passed in from developer\n */\nexport function _castAuth(auth: Auth): AuthInternal {\n  return getModularInstance(auth) as AuthInternal;\n}\n\n/** Helper class to wrap subscriber logic */\nclass Subscription<T> {\n  private observer: Observer<T | null> | null = null;\n  readonly addObserver: Subscribe<T | null> = createSubscribe(\n    observer => (this.observer = observer)\n  );\n\n  constructor(readonly auth: AuthInternal) { }\n\n  get next(): NextFn<T | null> {\n    _assert(this.observer, this.auth, AuthErrorCode.INTERNAL_ERROR);\n    return this.observer.next.bind(this.observer);\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Unsubscribe } from '@firebase/util';\nimport { FirebaseAuthInternal } from '@firebase/auth-interop-types';\n\nimport { AuthInternal } from '../../model/auth';\nimport { UserInternal } from '../../model/user';\nimport { _assert } from '../util/assert';\nimport { AuthErrorCode } from '../errors';\n\ninterface TokenListener {\n  (tok: string | null): unknown;\n}\n\nexport class AuthInterop implements FirebaseAuthInternal {\n  private readonly internalListeners: Map<\n    TokenListener,\n    Unsubscribe\n  > = new Map();\n\n  constructor(private readonly auth: AuthInternal) {}\n\n  getUid(): string | null {\n    this.assertAuthConfigured();\n    return this.auth.currentUser?.uid || null;\n  }\n\n  async getToken(\n    forceRefresh?: boolean\n  ): Promise<{ accessToken: string } | null> {\n    this.assertAuthConfigured();\n    await this.auth._initializationPromise;\n    if (!this.auth.currentUser) {\n      return null;\n    }\n\n    const accessToken = await this.auth.currentUser.getIdToken(forceRefresh);\n    return { accessToken };\n  }\n\n  addAuthTokenListener(listener: TokenListener): void {\n    this.assertAuthConfigured();\n    if (this.internalListeners.has(listener)) {\n      return;\n    }\n\n    const unsubscribe = this.auth.onIdTokenChanged(user => {\n      listener(\n        (user as UserInternal | null)?.stsTokenManager.accessToken || null\n      );\n    });\n    this.internalListeners.set(listener, unsubscribe);\n    this.updateProactiveRefresh();\n  }\n\n  removeAuthTokenListener(listener: TokenListener): void {\n    this.assertAuthConfigured();\n    const unsubscribe = this.internalListeners.get(listener);\n    if (!unsubscribe) {\n      return;\n    }\n\n    this.internalListeners.delete(listener);\n    unsubscribe();\n    this.updateProactiveRefresh();\n  }\n\n  private assertAuthConfigured(): void {\n    _assert(\n      this.auth._initializationPromise,\n      AuthErrorCode.DEPENDENT_SDK_INIT_BEFORE_AUTH\n    );\n  }\n\n  private updateProactiveRefresh(): void {\n    if (this.internalListeners.size > 0) {\n      this.auth._startProactiveRefresh();\n    } else {\n      this.auth._stopProactiveRefresh();\n    }\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { _registerComponent, registerVersion } from '@firebase/app';\nimport {\n  Component,\n  ComponentType,\n  InstantiationMode,\n} from '@firebase/component';\n\nimport { name, version } from '../../../package.json';\nimport { AuthErrorCode } from '../errors';\nimport { _assert } from '../util/assert';\nimport { _getClientVersion, ClientPlatform } from '../util/version';\nimport { _castAuth, AuthImpl, DefaultConfig } from './auth_impl';\nimport { AuthInterop } from './firebase_internal';\nimport { ConfigInternal } from '../../model/auth';\nimport { Dependencies } from '../../model/public_types';\nimport { _initializeAuthInstance } from './initialize';\n\nexport const enum _ComponentName {\n  AUTH = 'auth',\n  AUTH_INTERNAL = 'auth-internal'\n}\n\nfunction getVersionForPlatform(\n  clientPlatform: ClientPlatform\n): string | undefined {\n  switch (clientPlatform) {\n    case ClientPlatform.NODE:\n      return 'node';\n    case ClientPlatform.REACT_NATIVE:\n      return 'rn';\n    case ClientPlatform.WORKER:\n      return 'webworker';\n    case ClientPlatform.CORDOVA:\n      return 'cordova';\n    default:\n      return undefined;\n  }\n}\n\n/** @internal */\nexport function registerAuth(clientPlatform: ClientPlatform): void {\n  _registerComponent(\n    new Component(\n      _ComponentName.AUTH,\n      (container, { options: deps }: { options?: Dependencies }) => {\n        const app = container.getProvider('app').getImmediate()!;\n        const heartbeatServiceProvider = container.getProvider<'heartbeat'>('heartbeat');\n        const { apiKey, authDomain } = app.options;\n        return ((app, heartbeatServiceProvider) => {\n          _assert(\n            apiKey && !apiKey.includes(':'),\n            AuthErrorCode.INVALID_API_KEY,\n            { appName: app.name }\n          );\n          // Auth domain is optional if IdP sign in isn't being used\n          _assert(!authDomain?.includes(':'), AuthErrorCode.ARGUMENT_ERROR, {\n            appName: app.name\n          });\n          const config: ConfigInternal = {\n            apiKey,\n            authDomain,\n            clientPlatform,\n            apiHost: DefaultConfig.API_HOST,\n            tokenApiHost: DefaultConfig.TOKEN_API_HOST,\n            apiScheme: DefaultConfig.API_SCHEME,\n            sdkClientVersion: _getClientVersion(clientPlatform)\n          };\n\n          const authInstance = new AuthImpl(app, heartbeatServiceProvider, config);\n          _initializeAuthInstance(authInstance, deps);\n\n          return authInstance;\n        })(app, heartbeatServiceProvider);\n      },\n      ComponentType.PUBLIC\n    )\n      /**\n       * Auth can only be initialized by explicitly calling getAuth() or initializeAuth()\n       * For why we do this, See go/firebase-next-auth-init\n       */\n      .setInstantiationMode(InstantiationMode.EXPLICIT)\n      /**\n       * Because all firebase products that depend on auth depend on auth-internal directly,\n       * we need to initialize auth-internal after auth is initialized to make it available to other firebase products.\n       */\n      .setInstanceCreatedCallback(\n        (container, _instanceIdentifier, _instance) => {\n          const authInternalProvider = container.getProvider(\n            _ComponentName.AUTH_INTERNAL\n          );\n          authInternalProvider.initialize();\n        }\n      )\n  );\n\n  _registerComponent(\n    new Component(\n      _ComponentName.AUTH_INTERNAL,\n      container => {\n        const auth = _castAuth(\n          container.getProvider(_ComponentName.AUTH).getImmediate()!\n        );\n        return (auth => new AuthInterop(auth))(auth);\n      },\n      ComponentType.PRIVATE\n    ).setInstantiationMode(InstantiationMode.EXPLICIT)\n  );\n\n  registerVersion(name, version, getVersionForPlatform(clientPlatform));\n  // BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation\n  registerVersion(name, version, '__BUILD_TARGET__');\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Persistence } from '../../model/public_types';\n\nexport const enum PersistenceType {\n  SESSION = 'SESSION',\n  LOCAL = 'LOCAL',\n  NONE = 'NONE'\n}\n\nexport type PersistedBlob = Record<string, unknown>;\n\nexport interface Instantiator<T> {\n  (blob: PersistedBlob): T;\n}\n\nexport type PersistenceValue = PersistedBlob | string;\n\nexport const STORAGE_AVAILABLE_KEY = '__sak';\n\nexport interface StorageEventListener {\n  (value: PersistenceValue | null): void;\n}\n\nexport interface PersistenceInternal extends Persistence {\n  type: PersistenceType;\n  _isAvailable(): Promise<boolean>;\n  _set(key: string, value: PersistenceValue): Promise<void>;\n  _get<T extends PersistenceValue>(key: string): Promise<T | null>;\n  _remove(key: string): Promise<void>;\n  _addListener(key: string, listener: StorageEventListener): void;\n  _removeListener(key: string, listener: StorageEventListener): void;\n  // Should this persistence allow migration up the chosen hierarchy?\n  _shouldAllowMigration?: boolean;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** TODO: remove this once tslib has a polyfill for Promise.allSettled */\ninterface PromiseFulfilledResult<T> {\n  fulfilled: true;\n  value: T;\n}\n\ninterface PromiseRejectedResult {\n  fulfilled: false;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  reason: any;\n}\n\nexport type PromiseSettledResult<T> =\n  | PromiseFulfilledResult<T>\n  | PromiseRejectedResult;\n\n/**\n * Shim for Promise.allSettled, note the slightly different format of `fulfilled` vs `status`.\n *\n * @param promises - Array of promises to wait on.\n */\nexport function _allSettled<T>(\n  promises: Array<Promise<T>>\n): Promise<Array<PromiseSettledResult<T>>> {\n  return Promise.all(\n    promises.map(async promise => {\n      try {\n        const value = await promise;\n        return {\n          fulfilled: true,\n          value\n        } as PromiseFulfilledResult<T>;\n      } catch (reason) {\n        return {\n          fulfilled: false,\n          reason\n        } as PromiseRejectedResult;\n      }\n    })\n  );\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  ReceiverHandler,\n  _EventType,\n  _ReceiverResponse,\n  SenderMessageEvent,\n  _Status,\n  _SenderRequest\n} from './index';\nimport { _allSettled } from './promise';\n\n/**\n * Interface class for receiving messages.\n *\n */\nexport class Receiver {\n  private static readonly receivers: Receiver[] = [];\n  private readonly boundEventHandler: EventListener;\n\n  private readonly handlersMap: {\n    // Typescript doesn't have existential types :(\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    [eventType: string]: Set<ReceiverHandler<any, any>>;\n  } = {};\n\n  constructor(private readonly eventTarget: EventTarget) {\n    this.boundEventHandler = this.handleEvent.bind(this);\n  }\n\n  /**\n   * Obtain an instance of a Receiver for a given event target, if none exists it will be created.\n   *\n   * @param eventTarget - An event target (such as window or self) through which the underlying\n   * messages will be received.\n   */\n  static _getInstance(eventTarget: EventTarget): Receiver {\n    // The results are stored in an array since objects can't be keys for other\n    // objects. In addition, setting a unique property on an event target as a\n    // hash map key may not be allowed due to CORS restrictions.\n    const existingInstance = this.receivers.find(receiver =>\n      receiver.isListeningto(eventTarget)\n    );\n    if (existingInstance) {\n      return existingInstance;\n    }\n    const newInstance = new Receiver(eventTarget);\n    this.receivers.push(newInstance);\n    return newInstance;\n  }\n\n  private isListeningto(eventTarget: EventTarget): boolean {\n    return this.eventTarget === eventTarget;\n  }\n\n  /**\n   * Fans out a MessageEvent to the appropriate listeners.\n   *\n   * @remarks\n   * Sends an {@link Status.ACK} upon receipt and a {@link Status.DONE} once all handlers have\n   * finished processing.\n   *\n   * @param event - The MessageEvent.\n   *\n   */\n  private async handleEvent<\n    T extends _ReceiverResponse,\n    S extends _SenderRequest\n  >(event: Event): Promise<void> {\n    const messageEvent = event as MessageEvent<SenderMessageEvent<S>>;\n    const { eventId, eventType, data } = messageEvent.data;\n\n    const handlers: Set<ReceiverHandler<T, S>> | undefined = this.handlersMap[\n      eventType\n    ];\n    if (!handlers?.size) {\n      return;\n    }\n\n    messageEvent.ports[0].postMessage({\n      status: _Status.ACK,\n      eventId,\n      eventType\n    });\n\n    const promises = Array.from(handlers).map(async handler =>\n      handler(messageEvent.origin, data)\n    );\n    const response = await _allSettled(promises);\n    messageEvent.ports[0].postMessage({\n      status: _Status.DONE,\n      eventId,\n      eventType,\n      response\n    });\n  }\n\n  /**\n   * Subscribe an event handler for a particular event.\n   *\n   * @param eventType - Event name to subscribe to.\n   * @param eventHandler - The event handler which should receive the events.\n   *\n   */\n  _subscribe<T extends _ReceiverResponse, S extends _SenderRequest>(\n    eventType: _EventType,\n    eventHandler: ReceiverHandler<T, S>\n  ): void {\n    if (Object.keys(this.handlersMap).length === 0) {\n      this.eventTarget.addEventListener('message', this.boundEventHandler);\n    }\n\n    if (!this.handlersMap[eventType]) {\n      this.handlersMap[eventType] = new Set();\n    }\n\n    this.handlersMap[eventType].add(eventHandler);\n  }\n\n  /**\n   * Unsubscribe an event handler from a particular event.\n   *\n   * @param eventType - Event name to unsubscribe from.\n   * @param eventHandler - Optinoal event handler, if none provided, unsubscribe all handlers on this event.\n   *\n   */\n  _unsubscribe<T extends _ReceiverResponse, S extends _SenderRequest>(\n    eventType: _EventType,\n    eventHandler?: ReceiverHandler<T, S>\n  ): void {\n    if (this.handlersMap[eventType] && eventHandler) {\n      this.handlersMap[eventType].delete(eventHandler);\n    }\n    if (!eventHandler || this.handlersMap[eventType].size === 0) {\n      delete this.handlersMap[eventType];\n    }\n\n    if (Object.keys(this.handlersMap).length === 0) {\n      this.eventTarget.removeEventListener('message', this.boundEventHandler);\n    }\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport function _generateEventId(prefix = '', digits = 10): string {\n  let random = '';\n  for (let i = 0; i < digits; i++) {\n    random += Math.floor(Math.random() * 10);\n  }\n  return prefix + random;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { _generateEventId } from '../../core/util/event_id';\nimport {\n  _SenderRequest,\n  _EventType,\n  ReceiverMessageEvent,\n  _MessageError,\n  SenderMessageEvent,\n  _Status,\n  _ReceiverMessageResponse,\n  _ReceiverResponse,\n  _TimeoutDuration\n} from './index';\n\ninterface MessageHandler {\n  messageChannel: MessageChannel;\n  onMessage: EventListenerOrEventListenerObject;\n}\n\n/**\n * Interface for sending messages and waiting for a completion response.\n *\n */\nexport class Sender {\n  private readonly handlers = new Set<MessageHandler>();\n\n  constructor(private readonly target: ServiceWorker) {}\n\n  /**\n   * Unsubscribe the handler and remove it from our tracking Set.\n   *\n   * @param handler - The handler to unsubscribe.\n   */\n  private removeMessageHandler(handler: MessageHandler): void {\n    if (handler.messageChannel) {\n      handler.messageChannel.port1.removeEventListener(\n        'message',\n        handler.onMessage\n      );\n      handler.messageChannel.port1.close();\n    }\n    this.handlers.delete(handler);\n  }\n\n  /**\n   * Send a message to the Receiver located at {@link target}.\n   *\n   * @remarks\n   * We'll first wait a bit for an ACK , if we get one we will wait significantly longer until the\n   * receiver has had a chance to fully process the event.\n   *\n   * @param eventType - Type of event to send.\n   * @param data - The payload of the event.\n   * @param timeout - Timeout for waiting on an ACK from the receiver.\n   *\n   * @returns An array of settled promises from all the handlers that were listening on the receiver.\n   */\n  async _send<T extends _ReceiverResponse, S extends _SenderRequest>(\n    eventType: _EventType,\n    data: S,\n    timeout = _TimeoutDuration.ACK\n  ): Promise<_ReceiverMessageResponse<T>> {\n    const messageChannel =\n      typeof MessageChannel !== 'undefined' ? new MessageChannel() : null;\n    if (!messageChannel) {\n      throw new Error(_MessageError.CONNECTION_UNAVAILABLE);\n    }\n    // Node timers and browser timers return fundamentally different types.\n    // We don't actually care what the value is but TS won't accept unknown and\n    // we can't cast properly in both environments.\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    let completionTimer: any;\n    let handler: MessageHandler;\n    return new Promise<_ReceiverMessageResponse<T>>((resolve, reject) => {\n      const eventId = _generateEventId('', 20);\n      messageChannel.port1.start();\n      const ackTimer = setTimeout(() => {\n        reject(new Error(_MessageError.UNSUPPORTED_EVENT));\n      }, timeout);\n      handler = {\n        messageChannel,\n        onMessage(event: Event): void {\n          const messageEvent = event as MessageEvent<ReceiverMessageEvent<T>>;\n          if (messageEvent.data.eventId !== eventId) {\n            return;\n          }\n          switch (messageEvent.data.status) {\n            case _Status.ACK:\n              // The receiver should ACK first.\n              clearTimeout(ackTimer);\n              completionTimer = setTimeout(() => {\n                reject(new Error(_MessageError.TIMEOUT));\n              }, _TimeoutDuration.COMPLETION);\n              break;\n            case _Status.DONE:\n              // Once the receiver's handlers are finished we will get the results.\n              clearTimeout(completionTimer);\n              resolve(messageEvent.data.response);\n              break;\n            default:\n              clearTimeout(ackTimer);\n              clearTimeout(completionTimer);\n              reject(new Error(_MessageError.INVALID_RESPONSE));\n              break;\n          }\n        }\n      };\n      this.handlers.add(handler);\n      messageChannel.port1.addEventListener('message', handler.onMessage);\n      this.target.postMessage(\n        {\n          eventType,\n          eventId,\n          data\n        } as SenderMessageEvent<S>,\n        [messageChannel.port2]\n      );\n    }).finally(() => {\n      if (handler) {\n        this.removeMessageHandler(handler);\n      }\n    });\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Recaptcha } from './recaptcha/recaptcha';\n\n/**\n * A specialized window type that melds the normal window type plus the\n * various bits we need. The three different blocks that are &'d together\n * cant be defined in the same block together.\n */\nexport type AuthWindow = {\n  // Standard window types\n  [T in keyof Window]: Window[T];\n} & {\n  // Any known / named properties we want to add\n  grecaptcha?: Recaptcha;\n  /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n  ___jsl?: Record<string, any>;\n  gapi?: typeof gapi;\n} & {\n  // A final catch-all for callbacks (which will have random names) that\n  // we will stick on the window.\n  [callback: string]: (...args: unknown[]) => void;\n};\n\n/**\n * Lazy accessor for window, since the compat layer won't tree shake this out,\n * we need to make sure not to mess with window unless we have to\n */\nexport function _window(): AuthWindow {\n  return (window as unknown) as AuthWindow;\n}\n\nexport function _setWindowLocation(url: string): void {\n  _window().location.href = url;\n}\n","/**\n * @license\n * Copyright 2020 Google LLC.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { _window } from '../auth_window';\n\nexport function _isWorker(): boolean {\n  return (\n    typeof _window()['WorkerGlobalScope'] !== 'undefined' &&\n    typeof _window()['importScripts'] === 'function'\n  );\n}\n\nexport async function _getActiveServiceWorker(): Promise<ServiceWorker | null> {\n  if (!navigator?.serviceWorker) {\n    return null;\n  }\n  try {\n    const registration = await navigator.serviceWorker.ready;\n    return registration.active;\n  } catch {\n    return null;\n  }\n}\n\nexport function _getServiceWorkerController(): ServiceWorker | null {\n  return navigator?.serviceWorker?.controller || null;\n}\n\nexport function _getWorkerGlobalScope(): ServiceWorker | null {\n  return _isWorker() ? ((self as unknown) as ServiceWorker) : null;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Persistence } from '../../model/public_types';\nimport {\n  PersistedBlob,\n  PersistenceInternal as InternalPersistence,\n  PersistenceType,\n  PersistenceValue,\n  StorageEventListener,\n  STORAGE_AVAILABLE_KEY\n} from '../../core/persistence/';\nimport {\n  _EventType,\n  _PingResponse,\n  KeyChangedResponse,\n  KeyChangedRequest,\n  PingRequest,\n  _TimeoutDuration\n} from '../messagechannel/index';\nimport { Receiver } from '../messagechannel/receiver';\nimport { Sender } from '../messagechannel/sender';\nimport {\n  _isWorker,\n  _getActiveServiceWorker,\n  _getServiceWorkerController,\n  _getWorkerGlobalScope\n} from '../util/worker';\n\nexport const DB_NAME = 'firebaseLocalStorageDb';\nconst DB_VERSION = 1;\nconst DB_OBJECTSTORE_NAME = 'firebaseLocalStorage';\nconst DB_DATA_KEYPATH = 'fbase_key';\n\ninterface DBObject {\n  [DB_DATA_KEYPATH]: string;\n  value: PersistedBlob;\n}\n\n/**\n * Promise wrapper for IDBRequest\n *\n * Unfortunately we can't cleanly extend Promise<T> since promises are not callable in ES6\n *\n */\nclass DBPromise<T> {\n  constructor(private readonly request: IDBRequest) {}\n\n  toPromise(): Promise<T> {\n    return new Promise<T>((resolve, reject) => {\n      this.request.addEventListener('success', () => {\n        resolve(this.request.result);\n      });\n      this.request.addEventListener('error', () => {\n        reject(this.request.error);\n      });\n    });\n  }\n}\n\nfunction getObjectStore(db: IDBDatabase, isReadWrite: boolean): IDBObjectStore {\n  return db\n    .transaction([DB_OBJECTSTORE_NAME], isReadWrite ? 'readwrite' : 'readonly')\n    .objectStore(DB_OBJECTSTORE_NAME);\n}\n\nexport async function _clearDatabase(db: IDBDatabase): Promise<void> {\n  const objectStore = getObjectStore(db, true);\n  return new DBPromise<void>(objectStore.clear()).toPromise();\n}\n\nexport function _deleteDatabase(): Promise<void> {\n  const request = indexedDB.deleteDatabase(DB_NAME);\n  return new DBPromise<void>(request).toPromise();\n}\n\nexport function _openDatabase(): Promise<IDBDatabase> {\n  const request = indexedDB.open(DB_NAME, DB_VERSION);\n  return new Promise((resolve, reject) => {\n    request.addEventListener('error', () => {\n      reject(request.error);\n    });\n\n    request.addEventListener('upgradeneeded', () => {\n      const db = request.result;\n\n      try {\n        db.createObjectStore(DB_OBJECTSTORE_NAME, { keyPath: DB_DATA_KEYPATH });\n      } catch (e) {\n        reject(e);\n      }\n    });\n\n    request.addEventListener('success', async () => {\n      const db: IDBDatabase = request.result;\n      // Strange bug that occurs in Firefox when multiple tabs are opened at the\n      // same time. The only way to recover seems to be deleting the database\n      // and re-initializing it.\n      // https://github.com/firebase/firebase-js-sdk/issues/634\n\n      if (!db.objectStoreNames.contains(DB_OBJECTSTORE_NAME)) {\n        // Need to close the database or else you get a `blocked` event\n        db.close();\n        await _deleteDatabase();\n        resolve(await _openDatabase());\n      } else {\n        resolve(db);\n      }\n    });\n  });\n}\n\nexport async function _putObject(\n  db: IDBDatabase,\n  key: string,\n  value: PersistenceValue | string\n): Promise<void> {\n  const request = getObjectStore(db, true).put({\n    [DB_DATA_KEYPATH]: key,\n    value\n  });\n  return new DBPromise<void>(request).toPromise();\n}\n\nasync function getObject(\n  db: IDBDatabase,\n  key: string\n): Promise<PersistedBlob | null> {\n  const request = getObjectStore(db, false).get(key);\n  const data = await new DBPromise<DBObject | undefined>(request).toPromise();\n  return data === undefined ? null : data.value;\n}\n\nexport function _deleteObject(db: IDBDatabase, key: string): Promise<void> {\n  const request = getObjectStore(db, true).delete(key);\n  return new DBPromise<void>(request).toPromise();\n}\n\nexport const _POLLING_INTERVAL_MS = 800;\nexport const _TRANSACTION_RETRY_COUNT = 3;\n\nclass IndexedDBLocalPersistence implements InternalPersistence {\n  static type: 'LOCAL' = 'LOCAL';\n\n  type = PersistenceType.LOCAL;\n  db?: IDBDatabase;\n  readonly _shouldAllowMigration = true;\n\n  private readonly listeners: Record<string, Set<StorageEventListener>> = {};\n  private readonly localCache: Record<string, PersistenceValue | null> = {};\n  // setTimeout return value is platform specific\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  private pollTimer: any | null = null;\n  private pendingWrites = 0;\n\n  private receiver: Receiver | null = null;\n  private sender: Sender | null = null;\n  private serviceWorkerReceiverAvailable = false;\n  private activeServiceWorker: ServiceWorker | null = null;\n  // Visible for testing only\n  readonly _workerInitializationPromise: Promise<void>;\n\n  constructor() {\n    // Fire & forget the service worker registration as it may never resolve\n    this._workerInitializationPromise =\n      this.initializeServiceWorkerMessaging().then(\n        () => {},\n        () => {}\n      );\n  }\n\n  async _openDb(): Promise<IDBDatabase> {\n    if (this.db) {\n      return this.db;\n    }\n    this.db = await _openDatabase();\n    return this.db;\n  }\n\n  async _withRetries<T>(op: (db: IDBDatabase) => Promise<T>): Promise<T> {\n    let numAttempts = 0;\n\n    while (true) {\n      try {\n        const db = await this._openDb();\n        return await op(db);\n      } catch (e) {\n        if (numAttempts++ > _TRANSACTION_RETRY_COUNT) {\n          throw e;\n        }\n        if (this.db) {\n          this.db.close();\n          this.db = undefined;\n        }\n        // TODO: consider adding exponential backoff\n      }\n    }\n  }\n\n  /**\n   * IndexedDB events do not propagate from the main window to the worker context.  We rely on a\n   * postMessage interface to send these events to the worker ourselves.\n   */\n  private async initializeServiceWorkerMessaging(): Promise<void> {\n    return _isWorker() ? this.initializeReceiver() : this.initializeSender();\n  }\n\n  /**\n   * As the worker we should listen to events from the main window.\n   */\n  private async initializeReceiver(): Promise<void> {\n    this.receiver = Receiver._getInstance(_getWorkerGlobalScope()!);\n    // Refresh from persistence if we receive a KeyChanged message.\n    this.receiver._subscribe(\n      _EventType.KEY_CHANGED,\n      async (_origin: string, data: KeyChangedRequest) => {\n        const keys = await this._poll();\n        return {\n          keyProcessed: keys.includes(data.key)\n        };\n      }\n    );\n    // Let the sender know that we are listening so they give us more timeout.\n    this.receiver._subscribe(\n      _EventType.PING,\n      async (_origin: string, _data: PingRequest) => {\n        return [_EventType.KEY_CHANGED];\n      }\n    );\n  }\n\n  /**\n   * As the main window, we should let the worker know when keys change (set and remove).\n   *\n   * @remarks\n   * {@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/ready | ServiceWorkerContainer.ready}\n   * may not resolve.\n   */\n  private async initializeSender(): Promise<void> {\n    // Check to see if there's an active service worker.\n    this.activeServiceWorker = await _getActiveServiceWorker();\n    if (!this.activeServiceWorker) {\n      return;\n    }\n    this.sender = new Sender(this.activeServiceWorker);\n    // Ping the service worker to check what events they can handle.\n    const results = await this.sender._send<_PingResponse, PingRequest>(\n      _EventType.PING,\n      {},\n      _TimeoutDuration.LONG_ACK\n    );\n    if (!results) {\n      return;\n    }\n    if (\n      results[0]?.fulfilled &&\n      results[0]?.value.includes(_EventType.KEY_CHANGED)\n    ) {\n      this.serviceWorkerReceiverAvailable = true;\n    }\n  }\n\n  /**\n   * Let the worker know about a changed key, the exact key doesn't technically matter since the\n   * worker will just trigger a full sync anyway.\n   *\n   * @remarks\n   * For now, we only support one service worker per page.\n   *\n   * @param key - Storage key which changed.\n   */\n  private async notifyServiceWorker(key: string): Promise<void> {\n    if (\n      !this.sender ||\n      !this.activeServiceWorker ||\n      _getServiceWorkerController() !== this.activeServiceWorker\n    ) {\n      return;\n    }\n    try {\n      await this.sender._send<KeyChangedResponse, KeyChangedRequest>(\n        _EventType.KEY_CHANGED,\n        { key },\n        // Use long timeout if receiver has previously responded to a ping from us.\n        this.serviceWorkerReceiverAvailable\n          ? _TimeoutDuration.LONG_ACK\n          : _TimeoutDuration.ACK\n      );\n    } catch {\n      // This is a best effort approach. Ignore errors.\n    }\n  }\n\n  async _isAvailable(): Promise<boolean> {\n    try {\n      if (!indexedDB) {\n        return false;\n      }\n      const db = await _openDatabase();\n      await _putObject(db, STORAGE_AVAILABLE_KEY, '1');\n      await _deleteObject(db, STORAGE_AVAILABLE_KEY);\n      return true;\n    } catch {}\n    return false;\n  }\n\n  private async _withPendingWrite(write: () => Promise<void>): Promise<void> {\n    this.pendingWrites++;\n    try {\n      await write();\n    } finally {\n      this.pendingWrites--;\n    }\n  }\n\n  async _set(key: string, value: PersistenceValue): Promise<void> {\n    return this._withPendingWrite(async () => {\n      await this._withRetries((db: IDBDatabase) => _putObject(db, key, value));\n      this.localCache[key] = value;\n      return this.notifyServiceWorker(key);\n    });\n  }\n\n  async _get<T extends PersistenceValue>(key: string): Promise<T | null> {\n    const obj = (await this._withRetries((db: IDBDatabase) =>\n      getObject(db, key)\n    )) as T;\n    this.localCache[key] = obj;\n    return obj;\n  }\n\n  async _remove(key: string): Promise<void> {\n    return this._withPendingWrite(async () => {\n      await this._withRetries((db: IDBDatabase) => _deleteObject(db, key));\n      delete this.localCache[key];\n      return this.notifyServiceWorker(key);\n    });\n  }\n\n  private async _poll(): Promise<string[]> {\n    // TODO: check if we need to fallback if getAll is not supported\n    const result = await this._withRetries((db: IDBDatabase) => {\n      const getAllRequest = getObjectStore(db, false).getAll();\n      return new DBPromise<DBObject[] | null>(getAllRequest).toPromise();\n    });\n\n    if (!result) {\n      return [];\n    }\n\n    // If we have pending writes in progress abort, we'll get picked up on the next poll\n    if (this.pendingWrites !== 0) {\n      return [];\n    }\n\n    const keys = [];\n    const keysInResult = new Set();\n    for (const { fbase_key: key, value } of result) {\n      keysInResult.add(key);\n      if (JSON.stringify(this.localCache[key]) !== JSON.stringify(value)) {\n        this.notifyListeners(key, value as PersistenceValue);\n        keys.push(key);\n      }\n    }\n    for (const localKey of Object.keys(this.localCache)) {\n      if (this.localCache[localKey] && !keysInResult.has(localKey)) {\n        // Deleted\n        this.notifyListeners(localKey, null);\n        keys.push(localKey);\n      }\n    }\n    return keys;\n  }\n\n  private notifyListeners(\n    key: string,\n    newValue: PersistenceValue | null\n  ): void {\n    this.localCache[key] = newValue;\n    const listeners = this.listeners[key];\n    if (listeners) {\n      for (const listener of Array.from(listeners)) {\n        listener(newValue);\n      }\n    }\n  }\n\n  private startPolling(): void {\n    this.stopPolling();\n\n    this.pollTimer = setInterval(\n      async () => this._poll(),\n      _POLLING_INTERVAL_MS\n    );\n  }\n\n  private stopPolling(): void {\n    if (this.pollTimer) {\n      clearInterval(this.pollTimer);\n      this.pollTimer = null;\n    }\n  }\n\n  _addListener(key: string, listener: StorageEventListener): void {\n    if (Object.keys(this.listeners).length === 0) {\n      this.startPolling();\n    }\n    if (!this.listeners[key]) {\n      this.listeners[key] = new Set();\n      // Populate the cache to avoid spuriously triggering on first poll.\n      void this._get(key); // This can happen in the background async and we can return immediately.\n    }\n    this.listeners[key].add(listener);\n  }\n\n  _removeListener(key: string, listener: StorageEventListener): void {\n    if (this.listeners[key]) {\n      this.listeners[key].delete(listener);\n\n      if (this.listeners[key].size === 0) {\n        delete this.listeners[key];\n      }\n    }\n\n    if (Object.keys(this.listeners).length === 0) {\n      this.stopPolling();\n    }\n  }\n}\n\n/**\n * An implementation of {@link Persistence} of type `LOCAL` using `indexedDB`\n * for the underlying storage.\n *\n * @public\n */\nexport const indexedDBLocalPersistence: Persistence = IndexedDBLocalPersistence;\n","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * An enum of factors that may be used for multifactor authentication.\n *\n * @public\n */\nexport const FactorId = {\n  /** Phone as second factor */\n  PHONE: 'phone'\n} as const;\n\n/**\n * Enumeration of supported providers.\n *\n * @public\n */\nexport const ProviderId = {\n  /** Facebook provider ID */\n  FACEBOOK: 'facebook.com',\n  /** GitHub provider ID */\n  GITHUB: 'github.com',\n  /** Google provider ID */\n  GOOGLE: 'google.com',\n  /** Password provider */\n  PASSWORD: 'password',\n  /** Phone provider */\n  PHONE: 'phone',\n  /** Twitter provider ID */\n  TWITTER: 'twitter.com'\n} as const;\n\n/**\n * Enumeration of supported sign-in methods.\n *\n * @public\n */\nexport const SignInMethod = {\n  /** Email link sign in method */\n  EMAIL_LINK: 'emailLink',\n  /** Email/password sign in method */\n  EMAIL_PASSWORD: 'password',\n  /** Facebook sign in method */\n  FACEBOOK: 'facebook.com',\n  /** GitHub sign in method */\n  GITHUB: 'github.com',\n  /** Google sign in method */\n  GOOGLE: 'google.com',\n  /** Phone sign in method */\n  PHONE: 'phone',\n  /** Twitter sign in method */\n  TWITTER: 'twitter.com'\n} as const;\n\n/**\n * Enumeration of supported operation types.\n *\n * @public\n */\nexport const OperationType = {\n  /** Operation involving linking an additional provider to an already signed-in user. */\n  LINK: 'link',\n  /** Operation involving using a provider to reauthenticate an already signed-in user. */\n  REAUTHENTICATE: 'reauthenticate',\n  /** Operation involving signing in a user. */\n  SIGN_IN: 'signIn'\n} as const;\n\n/**\n * An enumeration of the possible email action types.\n *\n * @public\n */\nexport const ActionCodeOperation = {\n  /** The email link sign-in action. */\n  EMAIL_SIGNIN: 'EMAIL_SIGNIN',\n  /** The password reset action. */\n  PASSWORD_RESET: 'PASSWORD_RESET',\n  /** The email revocation action. */\n  RECOVER_EMAIL: 'RECOVER_EMAIL',\n  /** The revert second factor addition email action. */\n  REVERT_SECOND_FACTOR_ADDITION: 'REVERT_SECOND_FACTOR_ADDITION',\n  /** The revert second factor addition email action. */\n  VERIFY_AND_CHANGE_EMAIL: 'VERIFY_AND_CHANGE_EMAIL',\n  /** The email verification action. */\n  VERIFY_EMAIL: 'VERIFY_EMAIL'\n} as const;\n","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Auth } from '../../model/public_types';\nimport { AuthErrorCode } from '../errors';\nimport { _assert } from '../util/assert';\nimport { _castAuth } from './auth_impl';\n\n/**\n * Changes the {@link Auth} instance to communicate with the Firebase Auth Emulator, instead of production\n * Firebase Auth services.\n *\n * @remarks\n * This must be called synchronously immediately following the first call to\n * {@link initializeAuth}.  Do not use with production credentials as emulator\n * traffic is not encrypted.\n *\n *\n * @example\n * ```javascript\n * connectAuthEmulator(auth, 'http://127.0.0.1:9099', { disableWarnings: true });\n * ```\n *\n * @param auth - The {@link Auth} instance.\n * @param url - The URL at which the emulator is running (eg, 'http://localhost:9099').\n * @param options - Optional. `options.disableWarnings` defaults to `false`. Set it to\n * `true` to disable the warning banner attached to the DOM.\n *\n * @public\n */\nexport function connectAuthEmulator(\n  auth: Auth,\n  url: string,\n  options?: { disableWarnings: boolean }\n): void {\n  const authInternal = _castAuth(auth);\n  _assert(\n    authInternal._canInitEmulator,\n    authInternal,\n    AuthErrorCode.EMULATOR_CONFIG_FAILED\n  );\n\n  _assert(\n    /^https?:\\/\\//.test(url),\n    authInternal,\n    AuthErrorCode.INVALID_EMULATOR_SCHEME\n  );\n\n  const disableWarnings = !!options?.disableWarnings;\n\n  const protocol = extractProtocol(url);\n  const { host, port } = extractHostAndPort(url);\n  const portStr = port === null ? '' : `:${port}`;\n\n  // Always replace path with \"/\" (even if input url had no path at all, or had a different one).\n  authInternal.config.emulator = { url: `${protocol}//${host}${portStr}/` };\n  authInternal.settings.appVerificationDisabledForTesting = true;\n  authInternal.emulatorConfig = Object.freeze({\n    host,\n    port,\n    protocol: protocol.replace(':', ''),\n    options: Object.freeze({ disableWarnings })\n  });\n\n  if (!disableWarnings) {\n    emitEmulatorWarning();\n  }\n}\n\nfunction extractProtocol(url: string): string {\n  const protocolEnd = url.indexOf(':');\n  return protocolEnd < 0 ? '' : url.substr(0, protocolEnd + 1);\n}\n\nfunction extractHostAndPort(url: string): {\n  host: string;\n  port: number | null;\n} {\n  const protocol = extractProtocol(url);\n  const authority = /(\\/\\/)?([^?#/]+)/.exec(url.substr(protocol.length)); // Between // and /, ? or #.\n  if (!authority) {\n    return { host: '', port: null };\n  }\n  const hostAndPort = authority[2].split('@').pop() || ''; // Strip out \"username:password@\".\n  const bracketedIPv6 = /^(\\[[^\\]]+\\])(:|$)/.exec(hostAndPort);\n  if (bracketedIPv6) {\n    const host = bracketedIPv6[1];\n    return { host, port: parsePort(hostAndPort.substr(host.length + 1)) };\n  } else {\n    const [host, port] = hostAndPort.split(':');\n    return { host, port: parsePort(port) };\n  }\n}\n\nfunction parsePort(portStr: string): number | null {\n  if (!portStr) {\n    return null;\n  }\n  const port = Number(portStr);\n  if (isNaN(port)) {\n    return null;\n  }\n  return port;\n}\n\nfunction emitEmulatorWarning(): void {\n  function attachBanner(): void {\n    const el = document.createElement('p');\n    const sty = el.style;\n    el.innerText =\n      'Running in emulator mode. Do not use with production credentials.';\n    sty.position = 'fixed';\n    sty.width = '100%';\n    sty.backgroundColor = '#ffffff';\n    sty.border = '.1em solid #000000';\n    sty.color = '#b50000';\n    sty.bottom = '0px';\n    sty.left = '0px';\n    sty.margin = '0px';\n    sty.zIndex = '10000';\n    sty.textAlign = 'center';\n    el.classList.add('firebase-emulator-warning');\n    document.body.appendChild(el);\n  }\n\n  if (typeof console !== 'undefined' && typeof console.info === 'function') {\n    console.info(\n      'WARNING: You are using the Auth Emulator,' +\n        ' which is intended for local testing only.  Do not use with' +\n        ' production credentials.'\n    );\n  }\n  if (\n    typeof window !== 'undefined' &&\n    typeof document !== 'undefined'\n  ) {\n    if (document.readyState === 'loading') {\n      window.addEventListener('DOMContentLoaded', attachBanner);\n    } else {\n      attachBanner();\n    }\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { PhoneOrOauthTokenResponse } from '../../api/authentication/mfa';\nimport { AuthInternal } from '../../model/auth';\nimport { IdTokenResponse } from '../../model/id_token';\nimport { debugFail } from '../util/assert';\n\n/**\n * Interface that represents the credentials returned by an {@link AuthProvider}.\n *\n * @remarks\n * Implementations specify the details about each auth provider's credential requirements.\n *\n * @public\n */\nexport class AuthCredential {\n  /** @internal */\n  protected constructor(\n    /**\n     * The authentication provider ID for the credential.\n     *\n     * @remarks\n     * For example, 'facebook.com', or 'google.com'.\n     */\n    readonly providerId: string,\n    /**\n     * The authentication sign in method for the credential.\n     *\n     * @remarks\n     * For example, {@link SignInMethod}.EMAIL_PASSWORD, or\n     * {@link SignInMethod}.EMAIL_LINK. This corresponds to the sign-in method\n     * identifier as returned in {@link fetchSignInMethodsForEmail}.\n     */\n    readonly signInMethod: string\n  ) {}\n\n  /**\n   * Returns a JSON-serializable representation of this object.\n   *\n   * @returns a JSON-serializable representation of this object.\n   */\n  toJSON(): object {\n    return debugFail('not implemented');\n  }\n\n  /** @internal */\n  _getIdTokenResponse(_auth: AuthInternal): Promise<PhoneOrOauthTokenResponse> {\n    return debugFail('not implemented');\n  }\n  /** @internal */\n  _linkToIdToken(\n    _auth: AuthInternal,\n    _idToken: string\n  ): Promise<IdTokenResponse> {\n    return debugFail('not implemented');\n  }\n  /** @internal */\n  _getReauthenticationResolver(_auth: AuthInternal): Promise<IdTokenResponse> {\n    return debugFail('not implemented');\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ActionCodeOperation, Auth } from '../../model/public_types';\n\nimport {\n  Endpoint,\n  HttpMethod,\n  _addTidIfNecessary,\n  _performApiRequest\n} from '../index';\nimport { IdTokenResponse } from '../../model/id_token';\nimport { MfaEnrollment } from './mfa';\n\nexport interface ResetPasswordRequest {\n  oobCode: string;\n  newPassword?: string;\n  tenantId?: string;\n}\n\nexport interface ResetPasswordResponse {\n  email: string;\n  newEmail?: string;\n  requestType?: ActionCodeOperation;\n  mfaInfo?: MfaEnrollment;\n}\n\nexport async function resetPassword(\n  auth: Auth,\n  request: ResetPasswordRequest\n): Promise<ResetPasswordResponse> {\n  return _performApiRequest<ResetPasswordRequest, ResetPasswordResponse>(\n    auth,\n    HttpMethod.POST,\n    Endpoint.RESET_PASSWORD,\n    _addTidIfNecessary(auth, request)\n  );\n}\nexport interface UpdateEmailPasswordRequest {\n  idToken: string;\n  returnSecureToken?: boolean;\n  email?: string;\n  password?: string;\n}\n\nexport interface UpdateEmailPasswordResponse extends IdTokenResponse {}\n\nexport async function updateEmailPassword(\n  auth: Auth,\n  request: UpdateEmailPasswordRequest\n): Promise<UpdateEmailPasswordResponse> {\n  return _performApiRequest<\n    UpdateEmailPasswordRequest,\n    UpdateEmailPasswordResponse\n  >(auth, HttpMethod.POST, Endpoint.SET_ACCOUNT_INFO, request);\n}\n\nexport interface ApplyActionCodeRequest {\n  oobCode: string;\n  tenantId?: string;\n}\n\nexport interface ApplyActionCodeResponse {}\n\nexport async function applyActionCode(\n  auth: Auth,\n  request: ApplyActionCodeRequest\n): Promise<ApplyActionCodeResponse> {\n  return _performApiRequest<ApplyActionCodeRequest, ApplyActionCodeResponse>(\n    auth,\n    HttpMethod.POST,\n    Endpoint.SET_ACCOUNT_INFO,\n    _addTidIfNecessary(auth, request)\n  );\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ActionCodeOperation, Auth } from '../../model/public_types';\n\nimport {\n  Endpoint,\n  HttpMethod,\n  _addTidIfNecessary,\n  _performApiRequest,\n  _performSignInRequest\n} from '../index';\nimport { IdToken, IdTokenResponse } from '../../model/id_token';\n\nexport interface SignInWithPasswordRequest {\n  returnSecureToken?: boolean;\n  email: string;\n  password: string;\n  tenantId?: string;\n}\n\nexport interface SignInWithPasswordResponse extends IdTokenResponse {\n  email: string;\n  displayName: string;\n}\n\nexport async function signInWithPassword(\n  auth: Auth,\n  request: SignInWithPasswordRequest\n): Promise<SignInWithPasswordResponse> {\n  return _performSignInRequest<\n    SignInWithPasswordRequest,\n    SignInWithPasswordResponse\n  >(\n    auth,\n    HttpMethod.POST,\n    Endpoint.SIGN_IN_WITH_PASSWORD,\n    _addTidIfNecessary(auth, request)\n  );\n}\n\nexport interface GetOobCodeRequest {\n  email?: string; // Everything except VERIFY_AND_CHANGE_EMAIL\n  continueUrl?: string;\n  iOSBundleId?: string;\n  iosAppStoreId?: string;\n  androidPackageName?: string;\n  androidInstallApp?: boolean;\n  androidMinimumVersionCode?: string;\n  canHandleCodeInApp?: boolean;\n  dynamicLinkDomain?: string;\n  tenantId?: string;\n  targetProjectid?: string;\n}\n\nexport interface VerifyEmailRequest extends GetOobCodeRequest {\n  requestType: ActionCodeOperation.VERIFY_EMAIL;\n  idToken: IdToken;\n}\n\nexport interface PasswordResetRequest extends GetOobCodeRequest {\n  requestType: ActionCodeOperation.PASSWORD_RESET;\n  email: string;\n  captchaResp?: string;\n}\n\nexport interface EmailSignInRequest extends GetOobCodeRequest {\n  requestType: ActionCodeOperation.EMAIL_SIGNIN;\n  email: string;\n}\n\nexport interface VerifyAndChangeEmailRequest extends GetOobCodeRequest {\n  requestType: ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL;\n  idToken: IdToken;\n  newEmail: string;\n}\n\ninterface GetOobCodeResponse {\n  email: string;\n}\n\nexport interface VerifyEmailResponse extends GetOobCodeResponse {}\nexport interface PasswordResetResponse extends GetOobCodeResponse {}\nexport interface EmailSignInResponse extends GetOobCodeResponse {}\nexport interface VerifyAndChangeEmailResponse extends GetOobCodeRequest {}\n\nasync function sendOobCode(\n  auth: Auth,\n  request: GetOobCodeRequest\n): Promise<GetOobCodeResponse> {\n  return _performApiRequest<GetOobCodeRequest, GetOobCodeResponse>(\n    auth,\n    HttpMethod.POST,\n    Endpoint.SEND_OOB_CODE,\n    _addTidIfNecessary(auth, request)\n  );\n}\n\nexport async function sendEmailVerification(\n  auth: Auth,\n  request: VerifyEmailRequest\n): Promise<VerifyEmailResponse> {\n  return sendOobCode(auth, request);\n}\n\nexport async function sendPasswordResetEmail(\n  auth: Auth,\n  request: PasswordResetRequest\n): Promise<PasswordResetResponse> {\n  return sendOobCode(auth, request);\n}\n\nexport async function sendSignInLinkToEmail(\n  auth: Auth,\n  request: EmailSignInRequest\n): Promise<EmailSignInResponse> {\n  return sendOobCode(auth, request);\n}\n\nexport async function verifyAndChangeEmail(\n  auth: Auth,\n  request: VerifyAndChangeEmailRequest\n): Promise<VerifyAndChangeEmailResponse> {\n  return sendOobCode(auth, request);\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  _performSignInRequest,\n  Endpoint,\n  HttpMethod,\n  _addTidIfNecessary\n} from '../index';\nimport { IdTokenResponse } from '../../model/id_token';\nimport { Auth } from '../../model/public_types';\n\nexport interface SignInWithEmailLinkRequest {\n  email: string;\n  oobCode: string;\n  tenantId?: string;\n}\n\nexport interface SignInWithEmailLinkResponse extends IdTokenResponse {\n  email: string;\n  isNewUser: boolean;\n}\n\nexport async function signInWithEmailLink(\n  auth: Auth,\n  request: SignInWithEmailLinkRequest\n): Promise<SignInWithEmailLinkResponse> {\n  return _performSignInRequest<\n    SignInWithEmailLinkRequest,\n    SignInWithEmailLinkResponse\n  >(\n    auth,\n    HttpMethod.POST,\n    Endpoint.SIGN_IN_WITH_EMAIL_LINK,\n    _addTidIfNecessary(auth, request)\n  );\n}\n\nexport interface SignInWithEmailLinkForLinkingRequest\n  extends SignInWithEmailLinkRequest {\n  idToken: string;\n}\n\nexport async function signInWithEmailLinkForLinking(\n  auth: Auth,\n  request: SignInWithEmailLinkForLinkingRequest\n): Promise<SignInWithEmailLinkResponse> {\n  return _performSignInRequest<\n    SignInWithEmailLinkForLinkingRequest,\n    SignInWithEmailLinkResponse\n  >(\n    auth,\n    HttpMethod.POST,\n    Endpoint.SIGN_IN_WITH_EMAIL_LINK,\n    _addTidIfNecessary(auth, request)\n  );\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ProviderId, SignInMethod } from '../../model/enums';\n\nimport { updateEmailPassword } from '../../api/account_management/email_and_password';\nimport { signInWithPassword } from '../../api/authentication/email_and_password';\nimport {\n  signInWithEmailLink,\n  signInWithEmailLinkForLinking\n} from '../../api/authentication/email_link';\nimport { AuthInternal } from '../../model/auth';\nimport { IdTokenResponse } from '../../model/id_token';\nimport { AuthErrorCode } from '../errors';\nimport { _fail } from '../util/assert';\nimport { AuthCredential } from './auth_credential';\n\n/**\n * Interface that represents the credentials returned by {@link EmailAuthProvider} for\n * {@link ProviderId}.PASSWORD\n *\n * @remarks\n * Covers both {@link SignInMethod}.EMAIL_PASSWORD and\n * {@link SignInMethod}.EMAIL_LINK.\n *\n * @public\n */\nexport class EmailAuthCredential extends AuthCredential {\n  /** @internal */\n  private constructor(\n    /** @internal */\n    readonly _email: string,\n    /** @internal */\n    readonly _password: string,\n    signInMethod: SignInMethod,\n    /** @internal */\n    readonly _tenantId: string | null = null\n  ) {\n    super(ProviderId.PASSWORD, signInMethod);\n  }\n\n  /** @internal */\n  static _fromEmailAndPassword(\n    email: string,\n    password: string\n  ): EmailAuthCredential {\n    return new EmailAuthCredential(\n      email,\n      password,\n      SignInMethod.EMAIL_PASSWORD\n    );\n  }\n\n  /** @internal */\n  static _fromEmailAndCode(\n    email: string,\n    oobCode: string,\n    tenantId: string | null = null\n  ): EmailAuthCredential {\n    return new EmailAuthCredential(\n      email,\n      oobCode,\n      SignInMethod.EMAIL_LINK,\n      tenantId\n    );\n  }\n\n  /** {@inheritdoc AuthCredential.toJSON} */\n  toJSON(): object {\n    return {\n      email: this._email,\n      password: this._password,\n      signInMethod: this.signInMethod,\n      tenantId: this._tenantId\n    };\n  }\n\n  /**\n   * Static method to deserialize a JSON representation of an object into an {@link  AuthCredential}.\n   *\n   * @param json - Either `object` or the stringified representation of the object. When string is\n   * provided, `JSON.parse` would be called first.\n   *\n   * @returns If the JSON input does not represent an {@link AuthCredential}, null is returned.\n   */\n  static fromJSON(json: object | string): EmailAuthCredential | null {\n    const obj = typeof json === 'string' ? JSON.parse(json) : json;\n    if (obj?.email && obj?.password) {\n      if (obj.signInMethod === SignInMethod.EMAIL_PASSWORD) {\n        return this._fromEmailAndPassword(obj.email, obj.password);\n      } else if (obj.signInMethod === SignInMethod.EMAIL_LINK) {\n        return this._fromEmailAndCode(obj.email, obj.password, obj.tenantId);\n      }\n    }\n    return null;\n  }\n\n  /** @internal */\n  async _getIdTokenResponse(auth: AuthInternal): Promise<IdTokenResponse> {\n    switch (this.signInMethod) {\n      case SignInMethod.EMAIL_PASSWORD:\n        return signInWithPassword(auth, {\n          returnSecureToken: true,\n          email: this._email,\n          password: this._password\n        });\n      case SignInMethod.EMAIL_LINK:\n        return signInWithEmailLink(auth, {\n          email: this._email,\n          oobCode: this._password\n        });\n      default:\n        _fail(auth, AuthErrorCode.INTERNAL_ERROR);\n    }\n  }\n\n  /** @internal */\n  async _linkToIdToken(\n    auth: AuthInternal,\n    idToken: string\n  ): Promise<IdTokenResponse> {\n    switch (this.signInMethod) {\n      case SignInMethod.EMAIL_PASSWORD:\n        return updateEmailPassword(auth, {\n          idToken,\n          returnSecureToken: true,\n          email: this._email,\n          password: this._password\n        });\n      case SignInMethod.EMAIL_LINK:\n        return signInWithEmailLinkForLinking(auth, {\n          idToken,\n          email: this._email,\n          oobCode: this._password\n        });\n      default:\n        _fail(auth, AuthErrorCode.INTERNAL_ERROR);\n    }\n  }\n\n  /** @internal */\n  _getReauthenticationResolver(auth: AuthInternal): Promise<IdTokenResponse> {\n    return this._getIdTokenResponse(auth);\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  Endpoint,\n  HttpMethod,\n  _addTidIfNecessary,\n  _performSignInRequest\n} from '../index';\nimport { IdToken, IdTokenResponse } from '../../model/id_token';\nimport { Auth } from '../../model/public_types';\n\nexport interface SignInWithIdpRequest {\n  requestUri: string;\n  postBody?: string;\n  sessionId?: string;\n  tenantId?: string;\n  returnSecureToken: boolean;\n  returnIdpCredential?: boolean;\n  idToken?: IdToken;\n  autoCreate?: boolean;\n  pendingToken?: string;\n}\n\n/**\n * @internal\n */\nexport interface SignInWithIdpResponse extends IdTokenResponse {\n  oauthAccessToken?: string;\n  oauthTokenSecret?: string;\n  nonce?: string;\n  oauthIdToken?: string;\n  pendingToken?: string;\n}\n\nexport async function signInWithIdp(\n  auth: Auth,\n  request: SignInWithIdpRequest\n): Promise<SignInWithIdpResponse> {\n  return _performSignInRequest<SignInWithIdpRequest, SignInWithIdpResponse>(\n    auth,\n    HttpMethod.POST,\n    Endpoint.SIGN_IN_WITH_IDP,\n    _addTidIfNecessary(auth, request)\n  );\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { querystring } from '@firebase/util';\n\nimport {\n  signInWithIdp,\n  SignInWithIdpRequest\n} from '../../api/authentication/idp';\nimport { AuthInternal } from '../../model/auth';\nimport { IdTokenResponse } from '../../model/id_token';\nimport { AuthErrorCode } from '../errors';\nimport { _fail } from '../util/assert';\nimport { AuthCredential } from './auth_credential';\n\nconst IDP_REQUEST_URI = 'http://localhost';\n\nexport interface OAuthCredentialParams {\n  // OAuth 2 uses either id token or access token\n  idToken?: string | null;\n  accessToken?: string | null;\n\n  // These fields are used with OAuth 1\n  oauthToken?: string;\n  secret?: string;\n  oauthTokenSecret?: string;\n\n  // Nonce is only set if pendingToken is not present\n  nonce?: string;\n  pendingToken?: string;\n\n  // Utilities\n  providerId: string;\n  signInMethod: string;\n}\n\n/**\n * Represents the OAuth credentials returned by an {@link OAuthProvider}.\n *\n * @remarks\n * Implementations specify the details about each auth provider's credential requirements.\n *\n * @public\n */\nexport class OAuthCredential extends AuthCredential {\n  /**\n   * The OAuth ID token associated with the credential if it belongs to an OIDC provider,\n   * such as `google.com`.\n   * @readonly\n   */\n  idToken?: string;\n  /**\n   * The OAuth access token associated with the credential if it belongs to an\n   * {@link OAuthProvider}, such as `facebook.com`, `twitter.com`, etc.\n   * @readonly\n   */\n  accessToken?: string;\n  /**\n   * The OAuth access token secret associated with the credential if it belongs to an OAuth 1.0\n   * provider, such as `twitter.com`.\n   * @readonly\n   */\n  secret?: string;\n  \n  private nonce?: string;\n  private pendingToken: string | null = null;\n\n  /** @internal */\n  static _fromParams(params: OAuthCredentialParams): OAuthCredential {\n    const cred = new OAuthCredential(params.providerId, params.signInMethod);\n\n    if (params.idToken || params.accessToken) {\n      // OAuth 2 and either ID token or access token.\n      if (params.idToken) {\n        cred.idToken = params.idToken;\n      }\n\n      if (params.accessToken) {\n        cred.accessToken = params.accessToken;\n      }\n\n      // Add nonce if available and no pendingToken is present.\n      if (params.nonce && !params.pendingToken) {\n        cred.nonce = params.nonce;\n      }\n\n      if (params.pendingToken) {\n        cred.pendingToken = params.pendingToken;\n      }\n    } else if (params.oauthToken && params.oauthTokenSecret) {\n      // OAuth 1 and OAuth token with token secret\n      cred.accessToken = params.oauthToken;\n      cred.secret = params.oauthTokenSecret;\n    } else {\n      _fail(AuthErrorCode.ARGUMENT_ERROR);\n    }\n\n    return cred;\n  }\n\n  /** {@inheritdoc AuthCredential.toJSON}  */\n  toJSON(): object {\n    return {\n      idToken: this.idToken,\n      accessToken: this.accessToken,\n      secret: this.secret,\n      nonce: this.nonce,\n      pendingToken: this.pendingToken,\n      providerId: this.providerId,\n      signInMethod: this.signInMethod\n    };\n  }\n\n  /**\n   * Static method to deserialize a JSON representation of an object into an\n   * {@link  AuthCredential}.\n   *\n   * @param json - Input can be either Object or the stringified representation of the object.\n   * When string is provided, JSON.parse would be called first.\n   *\n   * @returns If the JSON input does not represent an {@link  AuthCredential}, null is returned.\n   */\n  static fromJSON(json: string | object): OAuthCredential | null {\n    const obj = typeof json === 'string' ? JSON.parse(json) : json;\n    const { providerId, signInMethod, ...rest }: OAuthCredentialParams = obj;\n    if (!providerId || !signInMethod) {\n      return null;\n    }\n\n    const cred = new OAuthCredential(providerId, signInMethod);\n    cred.idToken = rest.idToken || undefined;\n    cred.accessToken = rest.accessToken || undefined;\n    cred.secret = rest.secret;\n    cred.nonce = rest.nonce;\n    cred.pendingToken = rest.pendingToken || null;\n    return cred;\n  }\n\n  /** @internal */\n  _getIdTokenResponse(auth: AuthInternal): Promise<IdTokenResponse> {\n    const request = this.buildRequest();\n    return signInWithIdp(auth, request);\n  }\n\n  /** @internal */\n  _linkToIdToken(\n    auth: AuthInternal,\n    idToken: string\n  ): Promise<IdTokenResponse> {\n    const request = this.buildRequest();\n    request.idToken = idToken;\n    return signInWithIdp(auth, request);\n  }\n\n  /** @internal */\n  _getReauthenticationResolver(auth: AuthInternal): Promise<IdTokenResponse> {\n    const request = this.buildRequest();\n    request.autoCreate = false;\n    return signInWithIdp(auth, request);\n  }\n\n  private buildRequest(): SignInWithIdpRequest {\n    const request: SignInWithIdpRequest = {\n      requestUri: IDP_REQUEST_URI,\n      returnSecureToken: true\n    };\n\n    if (this.pendingToken) {\n      request.pendingToken = this.pendingToken;\n    } else {\n      const postBody: Record<string, string> = {};\n      if (this.idToken) {\n        postBody['id_token'] = this.idToken;\n      }\n      if (this.accessToken) {\n        postBody['access_token'] = this.accessToken;\n      }\n      if (this.secret) {\n        postBody['oauth_token_secret'] = this.secret;\n      }\n\n      postBody['providerId'] = this.providerId;\n      if (this.nonce && !this.pendingToken) {\n        postBody['nonce'] = this.nonce;\n      }\n\n      request.postBody = querystring(postBody);\n    }\n\n    return request;\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  Endpoint,\n  HttpMethod,\n  _addTidIfNecessary,\n  _makeTaggedError,\n  _performApiRequest,\n  _performSignInRequest\n} from '../index';\nimport { AuthErrorCode } from '../../core/errors';\nimport { IdTokenResponse } from '../../model/id_token';\nimport { ServerError, ServerErrorMap } from '../errors';\nimport { Auth } from '../../model/public_types';\n\nexport interface SendPhoneVerificationCodeRequest {\n  phoneNumber: string;\n  recaptchaToken: string;\n  tenantId?: string;\n}\n\nexport interface SendPhoneVerificationCodeResponse {\n  sessionInfo: string;\n}\n\nexport async function sendPhoneVerificationCode(\n  auth: Auth,\n  request: SendPhoneVerificationCodeRequest\n): Promise<SendPhoneVerificationCodeResponse> {\n  return _performApiRequest<\n    SendPhoneVerificationCodeRequest,\n    SendPhoneVerificationCodeResponse\n  >(\n    auth,\n    HttpMethod.POST,\n    Endpoint.SEND_VERIFICATION_CODE,\n    _addTidIfNecessary(auth, request)\n  );\n}\n\n/**\n * @internal\n */\nexport interface SignInWithPhoneNumberRequest {\n  temporaryProof?: string;\n  phoneNumber?: string;\n  sessionInfo?: string;\n  code?: string;\n  tenantId?: string;\n}\n\nexport interface LinkWithPhoneNumberRequest\n  extends SignInWithPhoneNumberRequest {\n  idToken: string;\n}\n\n/**\n * @internal\n */\nexport interface SignInWithPhoneNumberResponse extends IdTokenResponse {\n  temporaryProof?: string;\n  phoneNumber?: string;\n}\n\nexport async function signInWithPhoneNumber(\n  auth: Auth,\n  request: SignInWithPhoneNumberRequest\n): Promise<SignInWithPhoneNumberResponse> {\n  return _performSignInRequest<\n    SignInWithPhoneNumberRequest,\n    SignInWithPhoneNumberResponse\n  >(\n    auth,\n    HttpMethod.POST,\n    Endpoint.SIGN_IN_WITH_PHONE_NUMBER,\n    _addTidIfNecessary(auth, request)\n  );\n}\n\nexport async function linkWithPhoneNumber(\n  auth: Auth,\n  request: LinkWithPhoneNumberRequest\n): Promise<SignInWithPhoneNumberResponse> {\n  const response = await _performSignInRequest<\n    LinkWithPhoneNumberRequest,\n    SignInWithPhoneNumberResponse\n  >(\n    auth,\n    HttpMethod.POST,\n    Endpoint.SIGN_IN_WITH_PHONE_NUMBER,\n    _addTidIfNecessary(auth, request)\n  );\n  if (response.temporaryProof) {\n    throw _makeTaggedError(auth, AuthErrorCode.NEED_CONFIRMATION, response);\n  }\n  return response;\n}\n\ninterface VerifyPhoneNumberForExistingRequest\n  extends SignInWithPhoneNumberRequest {\n  operation: 'REAUTH';\n}\n\nconst VERIFY_PHONE_NUMBER_FOR_EXISTING_ERROR_MAP_: Partial<\n  ServerErrorMap<ServerError>\n> = {\n  [ServerError.USER_NOT_FOUND]: AuthErrorCode.USER_DELETED\n};\n\nexport async function verifyPhoneNumberForExisting(\n  auth: Auth,\n  request: SignInWithPhoneNumberRequest\n): Promise<SignInWithPhoneNumberResponse> {\n  const apiRequest: VerifyPhoneNumberForExistingRequest = {\n    ...request,\n    operation: 'REAUTH'\n  };\n  return _performSignInRequest<\n    VerifyPhoneNumberForExistingRequest,\n    SignInWithPhoneNumberResponse\n  >(\n    auth,\n    HttpMethod.POST,\n    Endpoint.SIGN_IN_WITH_PHONE_NUMBER,\n    _addTidIfNecessary(auth, apiRequest),\n    VERIFY_PHONE_NUMBER_FOR_EXISTING_ERROR_MAP_\n  );\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ProviderId, SignInMethod } from '../../model/enums';\n\nimport { PhoneOrOauthTokenResponse } from '../../api/authentication/mfa';\nimport {\n  linkWithPhoneNumber,\n  signInWithPhoneNumber,\n  SignInWithPhoneNumberRequest,\n  verifyPhoneNumberForExisting\n} from '../../api/authentication/sms';\nimport { AuthInternal } from '../../model/auth';\nimport { IdTokenResponse } from '../../model/id_token';\nimport { AuthCredential } from './auth_credential';\n\nexport interface PhoneAuthCredentialParameters {\n  verificationId?: string;\n  verificationCode?: string;\n  phoneNumber?: string;\n  temporaryProof?: string;\n}\n\n/**\n * Represents the credentials returned by {@link PhoneAuthProvider}.\n *\n * @public\n */\nexport class PhoneAuthCredential extends AuthCredential {\n  private constructor(private readonly params: PhoneAuthCredentialParameters) {\n    super(ProviderId.PHONE, SignInMethod.PHONE);\n  }\n\n  /** @internal */\n  static _fromVerification(\n    verificationId: string,\n    verificationCode: string\n  ): PhoneAuthCredential {\n    return new PhoneAuthCredential({ verificationId, verificationCode });\n  }\n\n  /** @internal */\n  static _fromTokenResponse(\n    phoneNumber: string,\n    temporaryProof: string\n  ): PhoneAuthCredential {\n    return new PhoneAuthCredential({ phoneNumber, temporaryProof });\n  }\n\n  /** @internal */\n  _getIdTokenResponse(auth: AuthInternal): Promise<PhoneOrOauthTokenResponse> {\n    return signInWithPhoneNumber(auth, this._makeVerificationRequest());\n  }\n\n  /** @internal */\n  _linkToIdToken(\n    auth: AuthInternal,\n    idToken: string\n  ): Promise<IdTokenResponse> {\n    return linkWithPhoneNumber(auth, {\n      idToken,\n      ...this._makeVerificationRequest()\n    });\n  }\n\n  /** @internal */\n  _getReauthenticationResolver(auth: AuthInternal): Promise<IdTokenResponse> {\n    return verifyPhoneNumberForExisting(auth, this._makeVerificationRequest());\n  }\n\n  /** @internal */\n  _makeVerificationRequest(): SignInWithPhoneNumberRequest {\n    const { temporaryProof, phoneNumber, verificationId, verificationCode } =\n      this.params;\n    if (temporaryProof && phoneNumber) {\n      return { temporaryProof, phoneNumber };\n    }\n\n    return {\n      sessionInfo: verificationId,\n      code: verificationCode\n    };\n  }\n\n  /** {@inheritdoc AuthCredential.toJSON} */\n  toJSON(): object {\n    const obj: Record<string, string> = {\n      providerId: this.providerId\n    };\n    if (this.params.phoneNumber) {\n      obj.phoneNumber = this.params.phoneNumber;\n    }\n    if (this.params.temporaryProof) {\n      obj.temporaryProof = this.params.temporaryProof;\n    }\n    if (this.params.verificationCode) {\n      obj.verificationCode = this.params.verificationCode;\n    }\n    if (this.params.verificationId) {\n      obj.verificationId = this.params.verificationId;\n    }\n\n    return obj;\n  }\n\n  /** Generates a phone credential based on a plain object or a JSON string. */\n  static fromJSON(json: object | string): PhoneAuthCredential | null {\n    if (typeof json === 'string') {\n      json = JSON.parse(json);\n    }\n\n    const { verificationId, verificationCode, phoneNumber, temporaryProof } =\n      json as { [key: string]: string };\n    if (\n      !verificationCode &&\n      !verificationId &&\n      !phoneNumber &&\n      !temporaryProof\n    ) {\n      return null;\n    }\n\n    return new PhoneAuthCredential({\n      verificationId,\n      verificationCode,\n      phoneNumber,\n      temporaryProof\n    });\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { extractQuerystring, querystringDecode } from '@firebase/util';\nimport { ActionCodeOperation } from '../model/public_types';\nimport { AuthErrorCode } from './errors';\nimport { _assert } from './util/assert';\n\n/**\n * Enums for fields in URL query string.\n *\n * @enum {string}\n */\nconst enum QueryField {\n  API_KEY = 'apiKey',\n  CODE = 'oobCode',\n  CONTINUE_URL = 'continueUrl',\n  LANGUAGE_CODE = 'languageCode',\n  MODE = 'mode',\n  TENANT_ID = 'tenantId'\n}\n\n/**\n * Maps the mode string in action code URL to Action Code Info operation.\n *\n * @param mode\n */\nfunction parseMode(mode: string | null): ActionCodeOperation | null {\n  switch (mode) {\n    case 'recoverEmail':\n      return ActionCodeOperation.RECOVER_EMAIL;\n    case 'resetPassword':\n      return ActionCodeOperation.PASSWORD_RESET;\n    case 'signIn':\n      return ActionCodeOperation.EMAIL_SIGNIN;\n    case 'verifyEmail':\n      return ActionCodeOperation.VERIFY_EMAIL;\n    case 'verifyAndChangeEmail':\n      return ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL;\n    case 'revertSecondFactorAddition':\n      return ActionCodeOperation.REVERT_SECOND_FACTOR_ADDITION;\n    default:\n      return null;\n  }\n}\n\n/**\n * Helper to parse FDL links\n *\n * @param url\n */\nfunction parseDeepLink(url: string): string {\n  const link = querystringDecode(extractQuerystring(url))['link'];\n\n  // Double link case (automatic redirect).\n  const doubleDeepLink = link\n    ? querystringDecode(extractQuerystring(link))['deep_link_id']\n    : null;\n  // iOS custom scheme links.\n  const iOSDeepLink = querystringDecode(extractQuerystring(url))[\n    'deep_link_id'\n  ];\n  const iOSDoubleDeepLink = iOSDeepLink\n    ? querystringDecode(extractQuerystring(iOSDeepLink))['link']\n    : null;\n  return iOSDoubleDeepLink || iOSDeepLink || doubleDeepLink || link || url;\n}\n\n/**\n * A utility class to parse email action URLs such as password reset, email verification,\n * email link sign in, etc.\n *\n * @public\n */\nexport class ActionCodeURL {\n  /**\n   * The API key of the email action link.\n   */\n  readonly apiKey: string;\n  /**\n   * The action code of the email action link.\n   */\n  readonly code: string;\n  /**\n   * The continue URL of the email action link. Null if not provided.\n   */\n  readonly continueUrl: string | null;\n  /**\n   * The language code of the email action link. Null if not provided.\n   */\n  readonly languageCode: string | null;\n  /**\n   * The action performed by the email action link. It returns from one of the types from\n   * {@link ActionCodeInfo}\n   */\n  readonly operation: string;\n  /**\n   * The tenant ID of the email action link. Null if the email action is from the parent project.\n   */\n  readonly tenantId: string | null;\n\n  /**\n   * @param actionLink - The link from which to extract the URL.\n   * @returns The {@link ActionCodeURL} object, or null if the link is invalid.\n   *\n   * @internal\n   */\n  constructor(actionLink: string) {\n    const searchParams = querystringDecode(extractQuerystring(actionLink));\n    const apiKey = searchParams[QueryField.API_KEY] ?? null;\n    const code = searchParams[QueryField.CODE] ?? null;\n    const operation = parseMode(searchParams[QueryField.MODE] ?? null);\n    // Validate API key, code and mode.\n    _assert(apiKey && code && operation, AuthErrorCode.ARGUMENT_ERROR);\n    this.apiKey = apiKey;\n    this.operation = operation;\n    this.code = code;\n    this.continueUrl = searchParams[QueryField.CONTINUE_URL] ?? null;\n    this.languageCode = searchParams[QueryField.LANGUAGE_CODE] ?? null;\n    this.tenantId = searchParams[QueryField.TENANT_ID] ?? null;\n  }\n\n  /**\n   * Parses the email action link string and returns an {@link ActionCodeURL} if the link is valid,\n   * otherwise returns null.\n   *\n   * @param link  - The email action link string.\n   * @returns The {@link ActionCodeURL} object, or null if the link is invalid.\n   *\n   * @public\n   */\n  static parseLink(link: string): ActionCodeURL | null {\n    const actionLink = parseDeepLink(link);\n    try {\n      return new ActionCodeURL(actionLink);\n    } catch {\n      return null;\n    }\n  }\n}\n\n/**\n * Parses the email action link string and returns an {@link ActionCodeURL} if\n * the link is valid, otherwise returns null.\n *\n * @public\n */\nexport function parseActionCodeURL(link: string): ActionCodeURL | null {\n  return ActionCodeURL.parseLink(link);\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ProviderId, SignInMethod } from '../../model/enums';\nimport { AuthProvider } from '../../model/public_types';\n\nimport { ActionCodeURL } from '../action_code_url';\nimport { EmailAuthCredential } from '../credentials/email';\nimport { AuthErrorCode } from '../errors';\nimport { _assert } from '../util/assert';\n\n/**\n * Provider for generating {@link EmailAuthCredential}.\n *\n * @public\n */\nexport class EmailAuthProvider implements AuthProvider {\n  /**\n   * Always set to {@link ProviderId}.PASSWORD, even for email link.\n   */\n  static readonly PROVIDER_ID: 'password' = ProviderId.PASSWORD;\n  /**\n   * Always set to {@link SignInMethod}.EMAIL_PASSWORD.\n   */\n  static readonly EMAIL_PASSWORD_SIGN_IN_METHOD: 'password' =\n    SignInMethod.EMAIL_PASSWORD;\n  /**\n   * Always set to {@link SignInMethod}.EMAIL_LINK.\n   */\n  static readonly EMAIL_LINK_SIGN_IN_METHOD: 'emailLink' =\n    SignInMethod.EMAIL_LINK;\n  /**\n   * Always set to {@link ProviderId}.PASSWORD, even for email link.\n   */\n  readonly providerId = EmailAuthProvider.PROVIDER_ID;\n\n  /**\n   * Initialize an {@link AuthCredential} using an email and password.\n   *\n   * @example\n   * ```javascript\n   * const authCredential = EmailAuthProvider.credential(email, password);\n   * const userCredential = await signInWithCredential(auth, authCredential);\n   * ```\n   *\n   * @example\n   * ```javascript\n   * const userCredential = await signInWithEmailAndPassword(auth, email, password);\n   * ```\n   *\n   * @param email - Email address.\n   * @param password - User account password.\n   * @returns The auth provider credential.\n   */\n  static credential(email: string, password: string): EmailAuthCredential {\n    return EmailAuthCredential._fromEmailAndPassword(email, password);\n  }\n\n  /**\n   * Initialize an {@link AuthCredential} using an email and an email link after a sign in with\n   * email link operation.\n   *\n   * @example\n   * ```javascript\n   * const authCredential = EmailAuthProvider.credentialWithLink(auth, email, emailLink);\n   * const userCredential = await signInWithCredential(auth, authCredential);\n   * ```\n   *\n   * @example\n   * ```javascript\n   * await sendSignInLinkToEmail(auth, email);\n   * // Obtain emailLink from user.\n   * const userCredential = await signInWithEmailLink(auth, email, emailLink);\n   * ```\n   *\n   * @param auth - The {@link Auth} instance used to verify the link.\n   * @param email - Email address.\n   * @param emailLink - Sign-in email link.\n   * @returns - The auth provider credential.\n   */\n  static credentialWithLink(\n    email: string,\n    emailLink: string\n  ): EmailAuthCredential {\n    const actionCodeUrl = ActionCodeURL.parseLink(emailLink);\n    _assert(actionCodeUrl, AuthErrorCode.ARGUMENT_ERROR);\n\n    return EmailAuthCredential._fromEmailAndCode(\n      email,\n      actionCodeUrl.code,\n      actionCodeUrl.tenantId\n    );\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AuthProvider } from '../../model/public_types';\n\n/**\n * Map of OAuth Custom Parameters.\n *\n * @public\n */\nexport type CustomParameters = Record<string, string>;\n\n/**\n * The base class for all Federated providers (OAuth (including OIDC), SAML).\n *\n * This class is not meant to be instantiated directly.\n *\n * @public\n */\nexport abstract class FederatedAuthProvider implements AuthProvider {\n  /** @internal */\n  defaultLanguageCode: string | null = null;\n  /** @internal */\n  private customParameters: CustomParameters = {};\n\n  /**\n   * Constructor for generic OAuth providers.\n   *\n   * @param providerId - Provider for which credentials should be generated.\n   */\n  constructor(readonly providerId: string) {}\n\n  /**\n   * Set the language gode.\n   *\n   * @param languageCode - language code\n   */\n  setDefaultLanguage(languageCode: string | null): void {\n    this.defaultLanguageCode = languageCode;\n  }\n\n  /**\n   * Sets the OAuth custom parameters to pass in an OAuth request for popup and redirect sign-in\n   * operations.\n   *\n   * @remarks\n   * For a detailed list, check the reserved required OAuth 2.0 parameters such as `client_id`,\n   * `redirect_uri`, `scope`, `response_type`, and `state` are not allowed and will be ignored.\n   *\n   * @param customOAuthParameters - The custom OAuth parameters to pass in the OAuth request.\n   */\n  setCustomParameters(customOAuthParameters: CustomParameters): AuthProvider {\n    this.customParameters = customOAuthParameters;\n    return this;\n  }\n\n  /**\n   * Retrieve the current list of {@link CustomParameters}.\n   */\n  getCustomParameters(): CustomParameters {\n    return this.customParameters;\n  }\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AuthProvider, UserCredential } from '../../model/public_types';\n\nimport { _assert } from '../util/assert';\nimport { AuthErrorCode } from '../errors';\n\nimport { OAuthCredential, OAuthCredentialParams } from '../credentials/oauth';\nimport { UserCredentialInternal } from '../../model/user';\nimport { FirebaseError } from '@firebase/util';\nimport { TaggedWithTokenResponse } from '../../model/id_token';\nimport { SignInWithIdpResponse } from '../../../internal';\nimport { FederatedAuthProvider } from './federated';\n\n/**\n * Defines the options for initializing an {@link OAuthCredential}.\n *\n * @remarks\n * For ID tokens with nonce claim, the raw nonce has to also be provided.\n *\n * @public\n */\nexport interface OAuthCredentialOptions {\n  /**\n   * The OAuth ID token used to initialize the {@link OAuthCredential}.\n   */\n  idToken?: string;\n  /**\n   * The OAuth access token used to initialize the {@link OAuthCredential}.\n   */\n  accessToken?: string;\n  /**\n   * The raw nonce associated with the ID token.\n   *\n   * @remarks\n   * It is required when an ID token with a nonce field is provided. The SHA-256 hash of the\n   * raw nonce must match the nonce field in the ID token.\n   */\n  rawNonce?: string;\n}\n\n/**\n * Common code to all OAuth providers. This is separate from the\n * {@link OAuthProvider} so that child providers (like\n * {@link GoogleAuthProvider}) don't inherit the `credential` instance method.\n * Instead, they rely on a static `credential` method.\n */\nexport abstract class BaseOAuthProvider\n  extends FederatedAuthProvider\n  implements AuthProvider\n{\n  /** @internal */\n  private scopes: string[] = [];\n\n  /**\n   * Add an OAuth scope to the credential.\n   *\n   * @param scope - Provider OAuth scope to add.\n   */\n  addScope(scope: string): AuthProvider {\n    // If not already added, add scope to list.\n    if (!this.scopes.includes(scope)) {\n      this.scopes.push(scope);\n    }\n    return this;\n  }\n\n  /**\n   * Retrieve the current list of OAuth scopes.\n   */\n  getScopes(): string[] {\n    return [...this.scopes];\n  }\n}\n\n/**\n * Provider for generating generic {@link OAuthCredential}.\n *\n * @example\n * ```javascript\n * // Sign in using a redirect.\n * const provider = new OAuthProvider('google.com');\n * // Start a sign in process for an unauthenticated user.\n * provider.addScope('profile');\n * provider.addScope('email');\n * await signInWithRedirect(auth, provider);\n * // This will trigger a full page redirect away from your app\n *\n * // After returning from the redirect when your app initializes you can obtain the result\n * const result = await getRedirectResult(auth);\n * if (result) {\n *   // This is the signed-in user\n *   const user = result.user;\n *   // This gives you a OAuth Access Token for the provider.\n *   const credential = provider.credentialFromResult(auth, result);\n *   const token = credential.accessToken;\n * }\n * ```\n *\n * @example\n * ```javascript\n * // Sign in using a popup.\n * const provider = new OAuthProvider('google.com');\n * provider.addScope('profile');\n * provider.addScope('email');\n * const result = await signInWithPopup(auth, provider);\n *\n * // The signed-in user info.\n * const user = result.user;\n * // This gives you a OAuth Access Token for the provider.\n * const credential = provider.credentialFromResult(auth, result);\n * const token = credential.accessToken;\n * ```\n * @public\n */\nexport class OAuthProvider extends BaseOAuthProvider {\n  /**\n   * Creates an {@link OAuthCredential} from a JSON string or a plain object.\n   * @param json - A plain object or a JSON string\n   */\n  static credentialFromJSON(json: object | string): OAuthCredential {\n    const obj = typeof json === 'string' ? JSON.parse(json) : json;\n    _assert(\n      'providerId' in obj && 'signInMethod' in obj,\n      AuthErrorCode.ARGUMENT_ERROR\n    );\n    return OAuthCredential._fromParams(obj);\n  }\n\n  /**\n   * Creates a {@link OAuthCredential} from a generic OAuth provider's access token or ID token.\n   *\n   * @remarks\n   * The raw nonce is required when an ID token with a nonce field is provided. The SHA-256 hash of\n   * the raw nonce must match the nonce field in the ID token.\n   *\n   * @example\n   * ```javascript\n   * // `googleUser` from the onsuccess Google Sign In callback.\n   * // Initialize a generate OAuth provider with a `google.com` providerId.\n   * const provider = new OAuthProvider('google.com');\n   * const credential = provider.credential({\n   *   idToken: googleUser.getAuthResponse().id_token,\n   * });\n   * const result = await signInWithCredential(credential);\n   * ```\n   *\n   * @param params - Either the options object containing the ID token, access token and raw nonce\n   * or the ID token string.\n   */\n  credential(params: OAuthCredentialOptions): OAuthCredential {\n    return this._credential({...params, nonce: params.rawNonce});\n  }\n\n  /** An internal credential method that accepts more permissive options */\n  private _credential(\n    params: Omit<OAuthCredentialParams, 'signInMethod' | 'providerId'>\n  ): OAuthCredential {\n    _assert(params.idToken || params.accessToken, AuthErrorCode.ARGUMENT_ERROR);\n    // For OAuthCredential, sign in method is same as providerId.\n    return OAuthCredential._fromParams({\n      ...params,\n      providerId: this.providerId,\n      signInMethod: this.providerId\n    });\n  }\n\n  /**\n   * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\n   *\n   * @param userCredential - The user credential.\n   */\n  static credentialFromResult(\n    userCredential: UserCredential\n  ): OAuthCredential | null {\n    return OAuthProvider.oauthCredentialFromTaggedObject(\n      userCredential as UserCredentialInternal\n    );\n  }\n  /**\n   * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\n   * thrown during a sign-in, link, or reauthenticate operation.\n   *\n   * @param userCredential - The user credential.\n   */\n  static credentialFromError(error: FirebaseError): OAuthCredential | null {\n    return OAuthProvider.oauthCredentialFromTaggedObject(\n      (error.customData || {}) as TaggedWithTokenResponse\n    );\n  }\n\n  private static oauthCredentialFromTaggedObject({\n    _tokenResponse: tokenResponse\n  }: TaggedWithTokenResponse): OAuthCredential | null {\n    if (!tokenResponse) {\n      return null;\n    }\n\n    const {\n      oauthIdToken,\n      oauthAccessToken,\n      oauthTokenSecret,\n      pendingToken,\n      nonce,\n      providerId\n    } = tokenResponse as SignInWithIdpResponse;\n    if (\n      !oauthAccessToken &&\n      !oauthTokenSecret &&\n      !oauthIdToken &&\n      !pendingToken\n    ) {\n      return null;\n    }\n\n    if (!providerId) {\n      return null;\n    }\n\n    try {\n      return new OAuthProvider(providerId)._credential({\n        idToken: oauthIdToken,\n        accessToken: oauthAccessToken,\n        nonce,\n        pendingToken\n      });\n    } catch (e) {\n      return null;\n    }\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { UserCredential } from '../../model/public_types';\nimport { FirebaseError } from '@firebase/util';\n\nimport { TaggedWithTokenResponse } from '../../model/id_token';\nimport { UserCredentialInternal } from '../../model/user';\nimport { OAuthCredential } from '../credentials/oauth';\nimport { BaseOAuthProvider } from './oauth';\nimport { ProviderId, SignInMethod } from '../../model/enums';\n\n/**\n * Provider for generating an {@link OAuthCredential} for {@link ProviderId}.FACEBOOK.\n *\n * @example\n * ```javascript\n * // Sign in using a redirect.\n * const provider = new FacebookAuthProvider();\n * // Start a sign in process for an unauthenticated user.\n * provider.addScope('user_birthday');\n * await signInWithRedirect(auth, provider);\n * // This will trigger a full page redirect away from your app\n *\n * // After returning from the redirect when your app initializes you can obtain the result\n * const result = await getRedirectResult(auth);\n * if (result) {\n *   // This is the signed-in user\n *   const user = result.user;\n *   // This gives you a Facebook Access Token.\n *   const credential = FacebookAuthProvider.credentialFromResult(result);\n *   const token = credential.accessToken;\n * }\n * ```\n *\n * @example\n * ```javascript\n * // Sign in using a popup.\n * const provider = new FacebookAuthProvider();\n * provider.addScope('user_birthday');\n * const result = await signInWithPopup(auth, provider);\n *\n * // The signed-in user info.\n * const user = result.user;\n * // This gives you a Facebook Access Token.\n * const credential = FacebookAuthProvider.credentialFromResult(result);\n * const token = credential.accessToken;\n * ```\n *\n * @public\n */\nexport class FacebookAuthProvider extends BaseOAuthProvider {\n  /** Always set to {@link SignInMethod}.FACEBOOK. */\n  static readonly FACEBOOK_SIGN_IN_METHOD: 'facebook.com' =\n    SignInMethod.FACEBOOK;\n  /** Always set to {@link ProviderId}.FACEBOOK. */\n  static readonly PROVIDER_ID: 'facebook.com' = ProviderId.FACEBOOK;\n\n  constructor() {\n    super(ProviderId.FACEBOOK);\n  }\n\n  /**\n   * Creates a credential for Facebook.\n   *\n   * @example\n   * ```javascript\n   * // `event` from the Facebook auth.authResponseChange callback.\n   * const credential = FacebookAuthProvider.credential(event.authResponse.accessToken);\n   * const result = await signInWithCredential(credential);\n   * ```\n   *\n   * @param accessToken - Facebook access token.\n   */\n  static credential(accessToken: string): OAuthCredential {\n    return OAuthCredential._fromParams({\n      providerId: FacebookAuthProvider.PROVIDER_ID,\n      signInMethod: FacebookAuthProvider.FACEBOOK_SIGN_IN_METHOD,\n      accessToken\n    });\n  }\n\n  /**\n   * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\n   *\n   * @param userCredential - The user credential.\n   */\n  static credentialFromResult(\n    userCredential: UserCredential\n  ): OAuthCredential | null {\n    return FacebookAuthProvider.credentialFromTaggedObject(\n      userCredential as UserCredentialInternal\n    );\n  }\n\n  /**\n   * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\n   * thrown during a sign-in, link, or reauthenticate operation.\n   *\n   * @param userCredential - The user credential.\n   */\n  static credentialFromError(error: FirebaseError): OAuthCredential | null {\n    return FacebookAuthProvider.credentialFromTaggedObject(\n      (error.customData || {}) as TaggedWithTokenResponse\n    );\n  }\n\n  private static credentialFromTaggedObject({\n    _tokenResponse: tokenResponse\n  }: TaggedWithTokenResponse): OAuthCredential | null {\n    if (!tokenResponse || !('oauthAccessToken' in tokenResponse)) {\n      return null;\n    }\n\n    if (!tokenResponse.oauthAccessToken) {\n      return null;\n    }\n\n    try {\n      return FacebookAuthProvider.credential(tokenResponse.oauthAccessToken);\n    } catch {\n      return null;\n    }\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { UserCredential } from '../../model/public_types';\nimport { FirebaseError } from '@firebase/util';\n\nimport { SignInWithIdpResponse } from '../../api/authentication/idp';\nimport { TaggedWithTokenResponse } from '../../model/id_token';\nimport { UserCredentialInternal } from '../../model/user';\nimport { OAuthCredential } from '../credentials/oauth';\nimport { BaseOAuthProvider } from './oauth';\nimport { ProviderId, SignInMethod } from '../../model/enums';\n\n/**\n * Provider for generating an an {@link OAuthCredential} for {@link ProviderId}.GOOGLE.\n *\n * @example\n * ```javascript\n * // Sign in using a redirect.\n * const provider = new GoogleAuthProvider();\n * // Start a sign in process for an unauthenticated user.\n * provider.addScope('profile');\n * provider.addScope('email');\n * await signInWithRedirect(auth, provider);\n * // This will trigger a full page redirect away from your app\n *\n * // After returning from the redirect when your app initializes you can obtain the result\n * const result = await getRedirectResult(auth);\n * if (result) {\n *   // This is the signed-in user\n *   const user = result.user;\n *   // This gives you a Google Access Token.\n *   const credential = GoogleAuthProvider.credentialFromResult(result);\n *   const token = credential.accessToken;\n * }\n * ```\n *\n * @example\n * ```javascript\n * // Sign in using a popup.\n * const provider = new GoogleAuthProvider();\n * provider.addScope('profile');\n * provider.addScope('email');\n * const result = await signInWithPopup(auth, provider);\n *\n * // The signed-in user info.\n * const user = result.user;\n * // This gives you a Google Access Token.\n * const credential = GoogleAuthProvider.credentialFromResult(result);\n * const token = credential.accessToken;\n * ```\n *\n * @public\n */\nexport class GoogleAuthProvider extends BaseOAuthProvider {\n  /** Always set to {@link SignInMethod}.GOOGLE. */\n  static readonly GOOGLE_SIGN_IN_METHOD: 'google.com' = SignInMethod.GOOGLE;\n  /** Always set to {@link ProviderId}.GOOGLE. */\n  static readonly PROVIDER_ID: 'google.com' = ProviderId.GOOGLE;\n\n  constructor() {\n    super(ProviderId.GOOGLE);\n    this.addScope('profile');\n  }\n\n  /**\n   * Creates a credential for Google. At least one of ID token and access token is required.\n   *\n   * @example\n   * ```javascript\n   * // \\`googleUser\\` from the onsuccess Google Sign In callback.\n   * const credential = GoogleAuthProvider.credential(googleUser.getAuthResponse().id_token);\n   * const result = await signInWithCredential(credential);\n   * ```\n   *\n   * @param idToken - Google ID token.\n   * @param accessToken - Google access token.\n   */\n  static credential(\n    idToken?: string | null,\n    accessToken?: string | null\n  ): OAuthCredential {\n    return OAuthCredential._fromParams({\n      providerId: GoogleAuthProvider.PROVIDER_ID,\n      signInMethod: GoogleAuthProvider.GOOGLE_SIGN_IN_METHOD,\n      idToken,\n      accessToken\n    });\n  }\n\n  /**\n   * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\n   *\n   * @param userCredential - The user credential.\n   */\n  static credentialFromResult(\n    userCredential: UserCredential\n  ): OAuthCredential | null {\n    return GoogleAuthProvider.credentialFromTaggedObject(\n      userCredential as UserCredentialInternal\n    );\n  }\n  /**\n   * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\n   * thrown during a sign-in, link, or reauthenticate operation.\n   *\n   * @param userCredential - The user credential.\n   */\n  static credentialFromError(error: FirebaseError): OAuthCredential | null {\n    return GoogleAuthProvider.credentialFromTaggedObject(\n      (error.customData || {}) as TaggedWithTokenResponse\n    );\n  }\n\n  private static credentialFromTaggedObject({\n    _tokenResponse: tokenResponse\n  }: TaggedWithTokenResponse): OAuthCredential | null {\n    if (!tokenResponse) {\n      return null;\n    }\n\n    const { oauthIdToken, oauthAccessToken } =\n      tokenResponse as SignInWithIdpResponse;\n    if (!oauthIdToken && !oauthAccessToken) {\n      // This could be an oauth 1 credential or a phone credential\n      return null;\n    }\n\n    try {\n      return GoogleAuthProvider.credential(oauthIdToken, oauthAccessToken);\n    } catch {\n      return null;\n    }\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { UserCredential } from '../../model/public_types';\nimport { FirebaseError } from '@firebase/util';\n\nimport { TaggedWithTokenResponse } from '../../model/id_token';\nimport { UserCredentialInternal } from '../../model/user';\nimport { OAuthCredential } from '../credentials/oauth';\nimport { BaseOAuthProvider } from './oauth';\nimport { ProviderId, SignInMethod } from '../../model/enums';\n\n/**\n * Provider for generating an {@link OAuthCredential} for {@link ProviderId}.GITHUB.\n *\n * @remarks\n * GitHub requires an OAuth 2.0 redirect, so you can either handle the redirect directly, or use\n * the {@link signInWithPopup} handler:\n *\n * @example\n * ```javascript\n * // Sign in using a redirect.\n * const provider = new GithubAuthProvider();\n * // Start a sign in process for an unauthenticated user.\n * provider.addScope('repo');\n * await signInWithRedirect(auth, provider);\n * // This will trigger a full page redirect away from your app\n *\n * // After returning from the redirect when your app initializes you can obtain the result\n * const result = await getRedirectResult(auth);\n * if (result) {\n *   // This is the signed-in user\n *   const user = result.user;\n *   // This gives you a Github Access Token.\n *   const credential = GithubAuthProvider.credentialFromResult(result);\n *   const token = credential.accessToken;\n * }\n * ```\n *\n * @example\n * ```javascript\n * // Sign in using a popup.\n * const provider = new GithubAuthProvider();\n * provider.addScope('repo');\n * const result = await signInWithPopup(auth, provider);\n *\n * // The signed-in user info.\n * const user = result.user;\n * // This gives you a Github Access Token.\n * const credential = GithubAuthProvider.credentialFromResult(result);\n * const token = credential.accessToken;\n * ```\n * @public\n */\nexport class GithubAuthProvider extends BaseOAuthProvider {\n  /** Always set to {@link SignInMethod}.GITHUB. */\n  static readonly GITHUB_SIGN_IN_METHOD: 'github.com' = SignInMethod.GITHUB;\n  /** Always set to {@link ProviderId}.GITHUB. */\n  static readonly PROVIDER_ID: 'github.com' = ProviderId.GITHUB;\n\n  constructor() {\n    super(ProviderId.GITHUB);\n  }\n\n  /**\n   * Creates a credential for Github.\n   *\n   * @param accessToken - Github access token.\n   */\n  static credential(accessToken: string): OAuthCredential {\n    return OAuthCredential._fromParams({\n      providerId: GithubAuthProvider.PROVIDER_ID,\n      signInMethod: GithubAuthProvider.GITHUB_SIGN_IN_METHOD,\n      accessToken\n    });\n  }\n\n  /**\n   * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\n   *\n   * @param userCredential - The user credential.\n   */\n  static credentialFromResult(\n    userCredential: UserCredential\n  ): OAuthCredential | null {\n    return GithubAuthProvider.credentialFromTaggedObject(\n      userCredential as UserCredentialInternal\n    );\n  }\n\n  /**\n   * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\n   * thrown during a sign-in, link, or reauthenticate operation.\n   *\n   * @param userCredential - The user credential.\n   */\n  static credentialFromError(error: FirebaseError): OAuthCredential | null {\n    return GithubAuthProvider.credentialFromTaggedObject(\n      (error.customData || {}) as TaggedWithTokenResponse\n    );\n  }\n\n  private static credentialFromTaggedObject({\n    _tokenResponse: tokenResponse\n  }: TaggedWithTokenResponse): OAuthCredential | null {\n    if (!tokenResponse || !('oauthAccessToken' in tokenResponse)) {\n      return null;\n    }\n\n    if (!tokenResponse.oauthAccessToken) {\n      return null;\n    }\n\n    try {\n      return GithubAuthProvider.credential(tokenResponse.oauthAccessToken);\n    } catch {\n      return null;\n    }\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Represents the SAML credentials returned by an {@link SAMLAuthProvider}.\n *\n * @public\n */\n\nimport {\n  signInWithIdp,\n  SignInWithIdpRequest\n} from '../../api/authentication/idp';\nimport { AuthInternal } from '../../model/auth';\nimport { IdTokenResponse } from '../../model/id_token';\nimport { AuthCredential } from './auth_credential';\n\nconst IDP_REQUEST_URI = 'http://localhost';\n\n/**\n * @public\n */\nexport class SAMLAuthCredential extends AuthCredential {\n  /** @internal */\n  private constructor(\n    providerId: string,\n    private readonly pendingToken: string\n  ) {\n    super(providerId, providerId);\n  }\n\n  /** @internal */\n  _getIdTokenResponse(auth: AuthInternal): Promise<IdTokenResponse> {\n    const request = this.buildRequest();\n    return signInWithIdp(auth, request);\n  }\n\n  /** @internal */\n  _linkToIdToken(\n    auth: AuthInternal,\n    idToken: string\n  ): Promise<IdTokenResponse> {\n    const request = this.buildRequest();\n    request.idToken = idToken;\n    return signInWithIdp(auth, request);\n  }\n\n  /** @internal */\n  _getReauthenticationResolver(auth: AuthInternal): Promise<IdTokenResponse> {\n    const request = this.buildRequest();\n    request.autoCreate = false;\n    return signInWithIdp(auth, request);\n  }\n\n  /** {@inheritdoc AuthCredential.toJSON}  */\n  toJSON(): object {\n    return {\n      signInMethod: this.signInMethod,\n      providerId: this.providerId,\n      pendingToken: this.pendingToken\n    };\n  }\n\n  /**\n   * Static method to deserialize a JSON representation of an object into an\n   * {@link  AuthCredential}.\n   *\n   * @param json - Input can be either Object or the stringified representation of the object.\n   * When string is provided, JSON.parse would be called first.\n   *\n   * @returns If the JSON input does not represent an {@link  AuthCredential}, null is returned.\n   */\n  static fromJSON(json: string | object): SAMLAuthCredential | null {\n    const obj = typeof json === 'string' ? JSON.parse(json) : json;\n    const {\n      providerId,\n      signInMethod,\n      pendingToken\n    }: Record<string, string> = obj;\n    if (\n      !providerId ||\n      !signInMethod ||\n      !pendingToken ||\n      providerId !== signInMethod\n    ) {\n      return null;\n    }\n\n    return new SAMLAuthCredential(providerId, pendingToken);\n  }\n\n  /**\n   * Helper static method to avoid exposing the constructor to end users.\n   *\n   * @internal\n   */\n  static _create(providerId: string, pendingToken: string): SAMLAuthCredential {\n    return new SAMLAuthCredential(providerId, pendingToken);\n  }\n\n  private buildRequest(): SignInWithIdpRequest {\n    return {\n      requestUri: IDP_REQUEST_URI,\n      returnSecureToken: true,\n      pendingToken: this.pendingToken\n    };\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FirebaseError } from '@firebase/util';\nimport { SignInWithIdpResponse } from '../../api/authentication/idp';\nimport { TaggedWithTokenResponse } from '../../model/id_token';\nimport { UserCredential } from '../../model/public_types';\nimport { UserCredentialInternal } from '../../model/user';\nimport { AuthCredential } from '../credentials';\nimport { SAMLAuthCredential } from '../credentials/saml';\nimport { AuthErrorCode } from '../errors';\nimport { _assert } from '../util/assert';\nimport { FederatedAuthProvider } from './federated';\n\nconst SAML_PROVIDER_PREFIX = 'saml.';\n\n/**\n * An {@link AuthProvider} for SAML.\n *\n * @public\n */\nexport class SAMLAuthProvider extends FederatedAuthProvider {\n  /**\n   * Constructor. The providerId must start with \"saml.\"\n   * @param providerId - SAML provider ID.\n   */\n  constructor(providerId: string) {\n    _assert(\n      providerId.startsWith(SAML_PROVIDER_PREFIX),\n      AuthErrorCode.ARGUMENT_ERROR\n    );\n    super(providerId);\n  }\n\n  /**\n   * Generates an {@link AuthCredential} from a {@link UserCredential} after a\n   * successful SAML flow completes.\n   *\n   * @remarks\n   *\n   * For example, to get an {@link AuthCredential}, you could write the\n   * following code:\n   *\n   * ```js\n   * const userCredential = await signInWithPopup(auth, samlProvider);\n   * const credential = SAMLAuthProvider.credentialFromResult(userCredential);\n   * ```\n   *\n   * @param userCredential - The user credential.\n   */\n  static credentialFromResult(\n    userCredential: UserCredential\n  ): AuthCredential | null {\n    return SAMLAuthProvider.samlCredentialFromTaggedObject(\n      userCredential as UserCredentialInternal\n    );\n  }\n\n  /**\n   * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\n   * thrown during a sign-in, link, or reauthenticate operation.\n   *\n   * @param userCredential - The user credential.\n   */\n  static credentialFromError(error: FirebaseError): AuthCredential | null {\n    return SAMLAuthProvider.samlCredentialFromTaggedObject(\n      (error.customData || {}) as TaggedWithTokenResponse\n    );\n  }\n\n  /**\n   * Creates an {@link AuthCredential} from a JSON string or a plain object.\n   * @param json - A plain object or a JSON string\n   */\n  static credentialFromJSON(json: string | object): AuthCredential {\n    const credential = SAMLAuthCredential.fromJSON(json);\n    _assert(credential, AuthErrorCode.ARGUMENT_ERROR);\n    return credential;\n  }\n\n  private static samlCredentialFromTaggedObject({\n    _tokenResponse: tokenResponse\n  }: TaggedWithTokenResponse): SAMLAuthCredential | null {\n    if (!tokenResponse) {\n      return null;\n    }\n\n    const { pendingToken, providerId } = tokenResponse as SignInWithIdpResponse;\n\n    if (!pendingToken || !providerId) {\n      return null;\n    }\n\n    try {\n      return SAMLAuthCredential._create(providerId, pendingToken);\n    } catch (e) {\n      return null;\n    }\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @license\n * Copyright 2020 Twitter LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { UserCredential } from '../../model/public_types';\nimport { FirebaseError } from '@firebase/util';\n\nimport { SignInWithIdpResponse } from '../../api/authentication/idp';\nimport { TaggedWithTokenResponse } from '../../model/id_token';\nimport { UserCredentialInternal } from '../../model/user';\nimport { OAuthCredential } from '../credentials/oauth';\nimport { BaseOAuthProvider } from './oauth';\nimport { ProviderId, SignInMethod } from '../../model/enums';\n\n/**\n * Provider for generating an {@link OAuthCredential} for {@link ProviderId}.TWITTER.\n *\n * @example\n * ```javascript\n * // Sign in using a redirect.\n * const provider = new TwitterAuthProvider();\n * // Start a sign in process for an unauthenticated user.\n * await signInWithRedirect(auth, provider);\n * // This will trigger a full page redirect away from your app\n *\n * // After returning from the redirect when your app initializes you can obtain the result\n * const result = await getRedirectResult(auth);\n * if (result) {\n *   // This is the signed-in user\n *   const user = result.user;\n *   // This gives you a Twitter Access Token and Secret.\n *   const credential = TwitterAuthProvider.credentialFromResult(result);\n *   const token = credential.accessToken;\n *   const secret = credential.secret;\n * }\n * ```\n *\n * @example\n * ```javascript\n * // Sign in using a popup.\n * const provider = new TwitterAuthProvider();\n * const result = await signInWithPopup(auth, provider);\n *\n * // The signed-in user info.\n * const user = result.user;\n * // This gives you a Twitter Access Token and Secret.\n * const credential = TwitterAuthProvider.credentialFromResult(result);\n * const token = credential.accessToken;\n * const secret = credential.secret;\n * ```\n *\n * @public\n */\nexport class TwitterAuthProvider extends BaseOAuthProvider {\n  /** Always set to {@link SignInMethod}.TWITTER. */\n  static readonly TWITTER_SIGN_IN_METHOD: 'twitter.com' = SignInMethod.TWITTER;\n  /** Always set to {@link ProviderId}.TWITTER. */\n  static readonly PROVIDER_ID: 'twitter.com' = ProviderId.TWITTER;\n\n  constructor() {\n    super(ProviderId.TWITTER);\n  }\n\n  /**\n   * Creates a credential for Twitter.\n   *\n   * @param token - Twitter access token.\n   * @param secret - Twitter secret.\n   */\n  static credential(token: string, secret: string): OAuthCredential {\n    return OAuthCredential._fromParams({\n      providerId: TwitterAuthProvider.PROVIDER_ID,\n      signInMethod: TwitterAuthProvider.TWITTER_SIGN_IN_METHOD,\n      oauthToken: token,\n      oauthTokenSecret: secret\n    });\n  }\n\n  /**\n   * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\n   *\n   * @param userCredential - The user credential.\n   */\n  static credentialFromResult(\n    userCredential: UserCredential\n  ): OAuthCredential | null {\n    return TwitterAuthProvider.credentialFromTaggedObject(\n      userCredential as UserCredentialInternal\n    );\n  }\n\n  /**\n   * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\n   * thrown during a sign-in, link, or reauthenticate operation.\n   *\n   * @param userCredential - The user credential.\n   */\n  static credentialFromError(error: FirebaseError): OAuthCredential | null {\n    return TwitterAuthProvider.credentialFromTaggedObject(\n      (error.customData || {}) as TaggedWithTokenResponse\n    );\n  }\n\n  private static credentialFromTaggedObject({\n    _tokenResponse: tokenResponse\n  }: TaggedWithTokenResponse): OAuthCredential | null {\n    if (!tokenResponse) {\n      return null;\n    }\n    const { oauthAccessToken, oauthTokenSecret } =\n      tokenResponse as SignInWithIdpResponse;\n    if (!oauthAccessToken || !oauthTokenSecret) {\n      return null;\n    }\n\n    try {\n      return TwitterAuthProvider.credential(oauthAccessToken, oauthTokenSecret);\n    } catch {\n      return null;\n    }\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  Endpoint,\n  HttpMethod,\n  _addTidIfNecessary,\n  _performSignInRequest\n} from '../index';\nimport { IdTokenResponse } from '../../model/id_token';\nimport { Auth } from '../../model/public_types';\n\nexport interface SignUpRequest {\n  returnSecureToken?: boolean;\n  email?: string;\n  password?: string;\n  tenantId?: string;\n}\n\nexport interface SignUpResponse extends IdTokenResponse {\n  displayName?: string;\n  email?: string;\n}\n\nexport async function signUp(\n  auth: Auth,\n  request: SignUpRequest\n): Promise<SignUpResponse> {\n  return _performSignInRequest<SignUpRequest, SignUpResponse>(\n    auth,\n    HttpMethod.POST,\n    Endpoint.SIGN_UP,\n    _addTidIfNecessary(auth, request)\n  );\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { PhoneOrOauthTokenResponse } from '../../api/authentication/mfa';\nimport { IdTokenResponse } from '../../model/id_token';\nimport { UserInternal, UserCredentialInternal } from '../../model/user';\nimport { UserImpl } from './user_impl';\nimport { AuthInternal } from '../../model/auth';\nimport { OperationType, ProviderId } from '../../model/enums';\n\ninterface UserCredentialParams {\n  readonly user: UserInternal;\n  readonly providerId: ProviderId | string | null;\n  readonly _tokenResponse?: PhoneOrOauthTokenResponse;\n  readonly operationType: OperationType;\n}\n\nexport class UserCredentialImpl\n  implements UserCredentialInternal, UserCredentialParams\n{\n  readonly user: UserInternal;\n  readonly providerId: ProviderId | string | null;\n  readonly _tokenResponse: PhoneOrOauthTokenResponse | undefined;\n  readonly operationType: OperationType;\n\n  constructor(params: UserCredentialParams) {\n    this.user = params.user;\n    this.providerId = params.providerId;\n    this._tokenResponse = params._tokenResponse;\n    this.operationType = params.operationType;\n  }\n\n  static async _fromIdTokenResponse(\n    auth: AuthInternal,\n    operationType: OperationType,\n    idTokenResponse: IdTokenResponse,\n    isAnonymous: boolean = false\n  ): Promise<UserCredentialInternal> {\n    const user = await UserImpl._fromIdTokenResponse(\n      auth,\n      idTokenResponse,\n      isAnonymous\n    );\n    const providerId = providerIdForResponse(idTokenResponse);\n    const userCred = new UserCredentialImpl({\n      user,\n      providerId,\n      _tokenResponse: idTokenResponse,\n      operationType\n    });\n    return userCred;\n  }\n\n  static async _forOperation(\n    user: UserInternal,\n    operationType: OperationType,\n    response: PhoneOrOauthTokenResponse\n  ): Promise<UserCredentialImpl> {\n    await user._updateTokensIfNecessary(response, /* reload */ true);\n    const providerId = providerIdForResponse(response);\n    return new UserCredentialImpl({\n      user,\n      providerId,\n      _tokenResponse: response,\n      operationType\n    });\n  }\n}\n\nfunction providerIdForResponse(\n  response: IdTokenResponse\n): ProviderId | string | null {\n  if (response.providerId) {\n    return response.providerId;\n  }\n\n  if ('phoneNumber' in response) {\n    return ProviderId.PHONE;\n  }\n\n  return null;\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Auth, UserCredential } from '../../model/public_types';\nimport { signUp } from '../../api/authentication/sign_up';\nimport { UserInternal } from '../../model/user';\nimport { UserCredentialImpl } from '../user/user_credential_impl';\nimport { _castAuth } from '../auth/auth_impl';\nimport { OperationType } from '../../model/enums';\n\n/**\n * Asynchronously signs in as an anonymous user.\n *\n * @remarks\n * If there is already an anonymous user signed in, that user will be returned; otherwise, a\n * new anonymous user identity will be created and returned.\n *\n * @param auth - The {@link Auth} instance.\n *\n * @public\n */\nexport async function signInAnonymously(auth: Auth): Promise<UserCredential> {\n  const authInternal = _castAuth(auth);\n  await authInternal._initializationPromise;\n  if (authInternal.currentUser?.isAnonymous) {\n    // If an anonymous user is already signed in, no need to sign them in again.\n    return new UserCredentialImpl({\n      user: authInternal.currentUser as UserInternal,\n      providerId: null,\n      operationType: OperationType.SIGN_IN\n    });\n  }\n  const response = await signUp(authInternal, {\n    returnSecureToken: true\n  });\n  const userCredential = await UserCredentialImpl._fromIdTokenResponse(\n    authInternal,\n    OperationType.SIGN_IN,\n    response,\n    true\n  );\n  await authInternal._updateCurrentUser(userCredential.user);\n  return userCredential;\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MultiFactorError as MultiFactorErrorPublic } from '../model/public_types';\nimport { FirebaseError } from '@firebase/util';\nimport { AuthInternal } from '../model/auth';\nimport { IdTokenResponse } from '../model/id_token';\nimport { AuthErrorCode } from '../core/errors';\nimport { UserInternal } from '../model/user';\nimport { AuthCredential } from '../core/credentials';\nimport { IdTokenMfaResponse } from '../api/authentication/mfa';\nimport { OperationType } from '../model/enums';\n\nexport type MultiFactorErrorData = MultiFactorErrorPublic['customData'] & {\n  _serverResponse: IdTokenMfaResponse;\n};\n\nexport class MultiFactorError\n  extends FirebaseError\n  implements MultiFactorErrorPublic\n{\n  readonly customData: MultiFactorErrorData;\n\n  private constructor(\n    auth: AuthInternal,\n    error: FirebaseError,\n    readonly operationType: OperationType,\n    readonly user?: UserInternal\n  ) {\n    super(error.code, error.message);\n    // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n    Object.setPrototypeOf(this, MultiFactorError.prototype);\n    this.customData = {\n      appName: auth.name,\n      tenantId: auth.tenantId ?? undefined,\n      _serverResponse: error.customData!._serverResponse as IdTokenMfaResponse,\n      operationType,\n    };\n  }\n\n  static _fromErrorAndOperation(\n    auth: AuthInternal,\n    error: FirebaseError,\n    operationType: OperationType,\n    user?: UserInternal\n  ): MultiFactorError {\n    return new MultiFactorError(auth, error, operationType, user);\n  }\n}\n\nexport function _processCredentialSavingMfaContextIfNecessary(\n  auth: AuthInternal,\n  operationType: OperationType,\n  credential: AuthCredential,\n  user?: UserInternal\n): Promise<IdTokenResponse> {\n  const idTokenProvider =\n    operationType === OperationType.REAUTHENTICATE\n      ? credential._getReauthenticationResolver(auth)\n      : credential._getIdTokenResponse(auth);\n\n  return idTokenProvider.catch(error => {\n    if (error.code === `auth/${AuthErrorCode.MFA_REQUIRED}`) {\n      throw MultiFactorError._fromErrorAndOperation(\n        auth,\n        error,\n        operationType,\n        user\n      );\n    }\n\n    throw error;\n  });\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface ProviderAssociatedObject {\n  providerId?: string;\n}\n\n/**\n * Takes a set of UserInfo provider data and converts it to a set of names\n */\nexport function providerDataAsNames<T extends ProviderAssociatedObject>(\n  providerData: T[]\n): Set<string> {\n  return new Set(\n    providerData\n      .map(({ providerId }) => providerId)\n      .filter(pid => !!pid) as string[]\n  );\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { User } from '../../model/public_types';\n\nimport { deleteLinkedAccounts } from '../../api/account_management/account';\nimport { UserInternal, UserCredentialInternal } from '../../model/user';\nimport { AuthCredential } from '../credentials';\nimport { AuthErrorCode } from '../errors';\nimport { _assert } from '../util/assert';\nimport { providerDataAsNames } from '../util/providers';\nimport { _logoutIfInvalidated } from './invalidation';\nimport { _reloadWithoutSaving } from './reload';\nimport { UserCredentialImpl } from './user_credential_impl';\nimport { getModularInstance } from '@firebase/util';\nimport { OperationType, ProviderId } from '../../model/enums';\n\n/**\n * Unlinks a provider from a user account.\n *\n * @param user - The user.\n * @param providerId - The provider to unlink.\n *\n * @public\n */\nexport async function unlink(user: User, providerId: string): Promise<User> {\n  const userInternal = getModularInstance(user) as UserInternal;\n  await _assertLinkedStatus(true, userInternal, providerId);\n  const { providerUserInfo } = await deleteLinkedAccounts(userInternal.auth, {\n    idToken: await userInternal.getIdToken(),\n    deleteProvider: [providerId]\n  });\n\n  const providersLeft = providerDataAsNames(providerUserInfo || []);\n\n  userInternal.providerData = userInternal.providerData.filter(pd =>\n    providersLeft.has(pd.providerId)\n  );\n  if (!providersLeft.has(ProviderId.PHONE)) {\n    userInternal.phoneNumber = null;\n  }\n\n  await userInternal.auth._persistUserIfCurrent(userInternal);\n  return userInternal;\n}\n\nexport async function _link(\n  user: UserInternal,\n  credential: AuthCredential,\n  bypassAuthState = false\n): Promise<UserCredentialInternal> {\n  const response = await _logoutIfInvalidated(\n    user,\n    credential._linkToIdToken(user.auth, await user.getIdToken()),\n    bypassAuthState\n  );\n  return UserCredentialImpl._forOperation(user, OperationType.LINK, response);\n}\n\nexport async function _assertLinkedStatus(\n  expected: boolean,\n  user: UserInternal,\n  provider: string\n): Promise<void> {\n  await _reloadWithoutSaving(user);\n  const providerIds = providerDataAsNames(user.providerData);\n\n  const code =\n    expected === false\n      ? AuthErrorCode.PROVIDER_ALREADY_LINKED\n      : AuthErrorCode.NO_SUCH_PROVIDER;\n  _assert(providerIds.has(provider) === expected, user.auth, code);\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { _processCredentialSavingMfaContextIfNecessary } from '../../mfa/mfa_error';\nimport { OperationType } from '../../model/enums';\nimport { UserInternal } from '../../model/user';\nimport { AuthCredential } from '../credentials';\nimport { AuthErrorCode } from '../errors';\nimport { _assert, _fail } from '../util/assert';\nimport { _parseToken } from './id_token_result';\nimport { _logoutIfInvalidated } from './invalidation';\nimport { UserCredentialImpl } from './user_credential_impl';\n\nexport async function _reauthenticate(\n  user: UserInternal,\n  credential: AuthCredential,\n  bypassAuthState = false\n): Promise<UserCredentialImpl> {\n  const { auth } = user;\n  const operationType = OperationType.REAUTHENTICATE;\n\n  try {\n    const response = await _logoutIfInvalidated(\n      user,\n      _processCredentialSavingMfaContextIfNecessary(\n        auth,\n        operationType,\n        credential,\n        user\n      ),\n      bypassAuthState\n    );\n    _assert(response.idToken, auth, AuthErrorCode.INTERNAL_ERROR);\n    const parsed = _parseToken(response.idToken);\n    _assert(parsed, auth, AuthErrorCode.INTERNAL_ERROR);\n\n    const { sub: localId } = parsed;\n    _assert(user.uid === localId, auth, AuthErrorCode.USER_MISMATCH);\n\n    return UserCredentialImpl._forOperation(user, operationType, response);\n  } catch (e) {\n    // Convert user deleted error into user mismatch\n    if (e?.code === `auth/${AuthErrorCode.USER_DELETED}`) {\n      _fail(auth, AuthErrorCode.USER_MISMATCH);\n    }\n    throw e;\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { UserCredential, Auth, User } from '../../model/public_types';\n\nimport { _processCredentialSavingMfaContextIfNecessary } from '../../mfa/mfa_error';\nimport { AuthInternal } from '../../model/auth';\nimport { UserInternal } from '../../model/user';\nimport { AuthCredential } from '../credentials';\nimport { _assertLinkedStatus, _link } from '../user/link_unlink';\nimport { _reauthenticate } from '../user/reauthenticate';\nimport { UserCredentialImpl } from '../user/user_credential_impl';\nimport { _castAuth } from '../auth/auth_impl';\nimport { getModularInstance } from '@firebase/util';\nimport { OperationType } from '../../model/enums';\n\nexport async function _signInWithCredential(\n  auth: AuthInternal,\n  credential: AuthCredential,\n  bypassAuthState = false\n): Promise<UserCredential> {\n  const operationType = OperationType.SIGN_IN;\n  const response = await _processCredentialSavingMfaContextIfNecessary(\n    auth,\n    operationType,\n    credential\n  );\n  const userCredential = await UserCredentialImpl._fromIdTokenResponse(\n    auth,\n    operationType,\n    response\n  );\n\n  if (!bypassAuthState) {\n    await auth._updateCurrentUser(userCredential.user);\n  }\n  return userCredential;\n}\n\n/**\n * Asynchronously signs in with the given credentials.\n *\n * @remarks\n * An {@link AuthProvider} can be used to generate the credential.\n *\n * @param auth - The {@link Auth} instance.\n * @param credential - The auth credential.\n *\n * @public\n */\nexport async function signInWithCredential(\n  auth: Auth,\n  credential: AuthCredential\n): Promise<UserCredential> {\n  return _signInWithCredential(_castAuth(auth), credential);\n}\n\n/**\n * Links the user account with the given credentials.\n *\n * @remarks\n * An {@link AuthProvider} can be used to generate the credential.\n *\n * @param user - The user.\n * @param credential - The auth credential.\n *\n * @public\n */\nexport async function linkWithCredential(\n  user: User,\n  credential: AuthCredential\n): Promise<UserCredential> {\n  const userInternal = getModularInstance(user) as UserInternal;\n\n  await _assertLinkedStatus(false, userInternal, credential.providerId);\n\n  return _link(userInternal, credential);\n}\n\n/**\n * Re-authenticates a user using a fresh credential.\n *\n * @remarks\n * Use before operations such as {@link updatePassword} that require tokens from recent sign-in\n * attempts. This method can be used to recover from a `CREDENTIAL_TOO_OLD_LOGIN_AGAIN` error.\n *\n * @param user - The user.\n * @param credential - The auth credential.\n *\n * @public\n */\nexport async function reauthenticateWithCredential(\n  user: User,\n  credential: AuthCredential\n): Promise<UserCredential> {\n  return _reauthenticate(getModularInstance(user) as UserInternal, credential);\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  Endpoint,\n  HttpMethod,\n  _addTidIfNecessary,\n  _performSignInRequest\n} from '../index';\nimport { IdTokenResponse } from '../../model/id_token';\nimport { Auth } from '../../model/public_types';\n\nexport interface SignInWithCustomTokenRequest {\n  token: string;\n  returnSecureToken: boolean;\n  tenantId?: string;\n}\n\nexport interface SignInWithCustomTokenResponse extends IdTokenResponse {}\n\nexport async function signInWithCustomToken(\n  auth: Auth,\n  request: SignInWithCustomTokenRequest\n): Promise<SignInWithCustomTokenResponse> {\n  return _performSignInRequest<\n    SignInWithCustomTokenRequest,\n    SignInWithCustomTokenResponse\n  >(\n    auth,\n    HttpMethod.POST,\n    Endpoint.SIGN_IN_WITH_CUSTOM_TOKEN,\n    _addTidIfNecessary(auth, request)\n  );\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Auth, UserCredential } from '../../model/public_types';\n\nimport { signInWithCustomToken as getIdTokenResponse } from '../../api/authentication/custom_token';\nimport { IdTokenResponse } from '../../model/id_token';\nimport { UserCredentialImpl } from '../user/user_credential_impl';\nimport { _castAuth } from '../auth/auth_impl';\nimport { OperationType } from '../../model/enums';\n\n/**\n * Asynchronously signs in using a custom token.\n *\n * @remarks\n * Custom tokens are used to integrate Firebase Auth with existing auth systems, and must\n * be generated by an auth backend using the\n * {@link https://firebase.google.com/docs/reference/admin/node/admin.auth.Auth#createcustomtoken | createCustomToken}\n * method in the {@link https://firebase.google.com/docs/auth/admin | Admin SDK} .\n *\n * Fails with an error if the token is invalid, expired, or not accepted by the Firebase Auth service.\n *\n * @param auth - The {@link Auth} instance.\n * @param customToken - The custom token to sign in with.\n *\n * @public\n */\nexport async function signInWithCustomToken(\n  auth: Auth,\n  customToken: string\n): Promise<UserCredential> {\n  const authInternal = _castAuth(auth);\n  const response: IdTokenResponse = await getIdTokenResponse(authInternal, {\n    token: customToken,\n    returnSecureToken: true\n  });\n  const cred = await UserCredentialImpl._fromIdTokenResponse(\n    authInternal,\n    OperationType.SIGN_IN,\n    response\n  );\n  await authInternal._updateCurrentUser(cred.user);\n  return cred;\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FactorId, MultiFactorInfo, PhoneMultiFactorInfo } from '../model/public_types';\nimport {\n  PhoneMfaEnrollment,\n  MfaEnrollment\n} from '../api/account_management/mfa';\nimport { AuthErrorCode } from '../core/errors';\nimport { _fail } from '../core/util/assert';\nimport { AuthInternal } from '../model/auth';\n\nexport abstract class MultiFactorInfoImpl implements MultiFactorInfo {\n  readonly uid: string;\n  readonly displayName?: string | null;\n  readonly enrollmentTime: string;\n\n  protected constructor(readonly factorId: FactorId, response: MfaEnrollment) {\n    this.uid = response.mfaEnrollmentId;\n    this.enrollmentTime = new Date(response.enrolledAt).toUTCString();\n    this.displayName = response.displayName;\n  }\n\n  static _fromServerResponse(\n    auth: AuthInternal,\n    enrollment: MfaEnrollment\n  ): MultiFactorInfoImpl {\n    if ('phoneInfo' in enrollment) {\n      return PhoneMultiFactorInfoImpl._fromServerResponse(auth, enrollment);\n    }\n    return _fail(auth, AuthErrorCode.INTERNAL_ERROR);\n  }\n}\n\nexport class PhoneMultiFactorInfoImpl extends MultiFactorInfoImpl implements PhoneMultiFactorInfo {\n  readonly phoneNumber: string;\n\n  private constructor(response: PhoneMfaEnrollment) {\n    super(FactorId.PHONE, response);\n    this.phoneNumber = response.phoneInfo;\n  }\n\n  static _fromServerResponse(\n    _auth: AuthInternal,\n    enrollment: MfaEnrollment\n  ): PhoneMultiFactorInfoImpl {\n    return new PhoneMultiFactorInfoImpl(enrollment);\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ActionCodeSettings, Auth } from '../../model/public_types';\n\nimport { GetOobCodeRequest } from '../../api/authentication/email_and_password';\nimport { AuthErrorCode } from '../errors';\nimport { _assert } from '../util/assert';\n\nexport function _setActionCodeSettingsOnRequest(\n  auth: Auth,\n  request: GetOobCodeRequest,\n  actionCodeSettings: ActionCodeSettings\n): void {\n  _assert(\n    actionCodeSettings.url?.length > 0,\n    auth,\n    AuthErrorCode.INVALID_CONTINUE_URI\n  );\n  _assert(\n    typeof actionCodeSettings.dynamicLinkDomain === 'undefined' ||\n      actionCodeSettings.dynamicLinkDomain.length > 0,\n    auth,\n    AuthErrorCode.INVALID_DYNAMIC_LINK_DOMAIN\n  );\n\n  request.continueUrl = actionCodeSettings.url;\n  request.dynamicLinkDomain = actionCodeSettings.dynamicLinkDomain;\n  request.canHandleCodeInApp = actionCodeSettings.handleCodeInApp;\n\n  if (actionCodeSettings.iOS) {\n    _assert(\n      actionCodeSettings.iOS.bundleId.length > 0,\n      auth,\n      AuthErrorCode.MISSING_IOS_BUNDLE_ID\n    );\n    request.iOSBundleId = actionCodeSettings.iOS.bundleId;\n  }\n\n  if (actionCodeSettings.android) {\n    _assert(\n      actionCodeSettings.android.packageName.length > 0,\n      auth,\n      AuthErrorCode.MISSING_ANDROID_PACKAGE_NAME\n    );\n    request.androidInstallApp = actionCodeSettings.android.installApp;\n    request.androidMinimumVersionCode =\n      actionCodeSettings.android.minimumVersion;\n    request.androidPackageName = actionCodeSettings.android.packageName;\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  ActionCodeInfo,\n  ActionCodeOperation,\n  ActionCodeSettings,\n  Auth,\n  UserCredential\n} from '../../model/public_types';\n\nimport * as account from '../../api/account_management/email_and_password';\nimport * as authentication from '../../api/authentication/email_and_password';\nimport { signUp } from '../../api/authentication/sign_up';\nimport { MultiFactorInfoImpl } from '../../mfa/mfa_info';\nimport { EmailAuthProvider } from '../providers/email';\nimport { UserCredentialImpl } from '../user/user_credential_impl';\nimport { _assert } from '../util/assert';\nimport { _setActionCodeSettingsOnRequest } from './action_code_settings';\nimport { signInWithCredential } from './credential';\nimport { _castAuth } from '../auth/auth_impl';\nimport { AuthErrorCode } from '../errors';\nimport { getModularInstance } from '@firebase/util';\nimport { OperationType } from '../../model/enums';\n\n/**\n * Sends a password reset email to the given email address.\n *\n * @remarks\n * To complete the password reset, call {@link confirmPasswordReset} with the code supplied in\n * the email sent to the user, along with the new password specified by the user.\n *\n * @example\n * ```javascript\n * const actionCodeSettings = {\n *   url: 'https://www.example.com/?email=user@example.com',\n *   iOS: {\n *      bundleId: 'com.example.ios'\n *   },\n *   android: {\n *     packageName: 'com.example.android',\n *     installApp: true,\n *     minimumVersion: '12'\n *   },\n *   handleCodeInApp: true\n * };\n * await sendPasswordResetEmail(auth, 'user@example.com', actionCodeSettings);\n * // Obtain code from user.\n * await confirmPasswordReset('user@example.com', code);\n * ```\n *\n * @param auth - The {@link Auth} instance.\n * @param email - The user's email address.\n * @param actionCodeSettings - The {@link ActionCodeSettings}.\n *\n * @public\n */\nexport async function sendPasswordResetEmail(\n  auth: Auth,\n  email: string,\n  actionCodeSettings?: ActionCodeSettings\n): Promise<void> {\n  const authModular = getModularInstance(auth);\n  const request: authentication.PasswordResetRequest = {\n    requestType: ActionCodeOperation.PASSWORD_RESET,\n    email\n  };\n  if (actionCodeSettings) {\n    _setActionCodeSettingsOnRequest(authModular, request, actionCodeSettings);\n  }\n\n  await authentication.sendPasswordResetEmail(authModular, request);\n}\n\n/**\n * Completes the password reset process, given a confirmation code and new password.\n *\n * @param auth - The {@link Auth} instance.\n * @param oobCode - A confirmation code sent to the user.\n * @param newPassword - The new password.\n *\n * @public\n */\nexport async function confirmPasswordReset(\n  auth: Auth,\n  oobCode: string,\n  newPassword: string\n): Promise<void> {\n  await account.resetPassword(getModularInstance(auth), {\n    oobCode,\n    newPassword\n  });\n  // Do not return the email.\n}\n\n/**\n * Applies a verification code sent to the user by email or other out-of-band mechanism.\n *\n * @param auth - The {@link Auth} instance.\n * @param oobCode - A verification code sent to the user.\n *\n * @public\n */\nexport async function applyActionCode(\n  auth: Auth,\n  oobCode: string\n): Promise<void> {\n  await account.applyActionCode(getModularInstance(auth), { oobCode });\n}\n\n/**\n * Checks a verification code sent to the user by email or other out-of-band mechanism.\n *\n * @returns metadata about the code.\n *\n * @param auth - The {@link Auth} instance.\n * @param oobCode - A verification code sent to the user.\n *\n * @public\n */\nexport async function checkActionCode(\n  auth: Auth,\n  oobCode: string\n): Promise<ActionCodeInfo> {\n  const authModular = getModularInstance(auth);\n  const response = await account.resetPassword(authModular, { oobCode });\n\n  // Email could be empty only if the request type is EMAIL_SIGNIN or\n  // VERIFY_AND_CHANGE_EMAIL.\n  // New email should not be empty if the request type is\n  // VERIFY_AND_CHANGE_EMAIL.\n  // Multi-factor info could not be empty if the request type is\n  // REVERT_SECOND_FACTOR_ADDITION.\n  const operation = response.requestType;\n  _assert(operation, authModular, AuthErrorCode.INTERNAL_ERROR);\n  switch (operation) {\n    case ActionCodeOperation.EMAIL_SIGNIN:\n      break;\n    case ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL:\n      _assert(response.newEmail, authModular, AuthErrorCode.INTERNAL_ERROR);\n      break;\n    case ActionCodeOperation.REVERT_SECOND_FACTOR_ADDITION:\n      _assert(response.mfaInfo, authModular, AuthErrorCode.INTERNAL_ERROR);\n    // fall through\n    default:\n      _assert(response.email, authModular, AuthErrorCode.INTERNAL_ERROR);\n  }\n\n  // The multi-factor info for revert second factor addition\n  let multiFactorInfo: MultiFactorInfoImpl | null = null;\n  if (response.mfaInfo) {\n    multiFactorInfo = MultiFactorInfoImpl._fromServerResponse(\n      _castAuth(authModular),\n      response.mfaInfo\n    );\n  }\n\n  return {\n    data: {\n      email:\n        (response.requestType === ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL\n          ? response.newEmail\n          : response.email) || null,\n      previousEmail:\n        (response.requestType === ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL\n          ? response.email\n          : response.newEmail) || null,\n      multiFactorInfo\n    },\n    operation\n  };\n}\n\n/**\n * Checks a password reset code sent to the user by email or other out-of-band mechanism.\n *\n * @returns the user's email address if valid.\n *\n * @param auth - The {@link Auth} instance.\n * @param code - A verification code sent to the user.\n *\n * @public\n */\nexport async function verifyPasswordResetCode(\n  auth: Auth,\n  code: string\n): Promise<string> {\n  const { data } = await checkActionCode(getModularInstance(auth), code);\n  // Email should always be present since a code was sent to it\n  return data.email!;\n}\n\n/**\n * Creates a new user account associated with the specified email address and password.\n *\n * @remarks\n * On successful creation of the user account, this user will also be signed in to your application.\n *\n * User account creation can fail if the account already exists or the password is invalid.\n *\n * Note: The email address acts as a unique identifier for the user and enables an email-based\n * password reset. This function will create a new user account and set the initial user password.\n *\n * @param auth - The {@link Auth} instance.\n * @param email - The user's email address.\n * @param password - The user's chosen password.\n *\n * @public\n */\nexport async function createUserWithEmailAndPassword(\n  auth: Auth,\n  email: string,\n  password: string\n): Promise<UserCredential> {\n  const authInternal = _castAuth(auth);\n  const response = await signUp(authInternal, {\n    returnSecureToken: true,\n    email,\n    password\n  });\n\n  const userCredential = await UserCredentialImpl._fromIdTokenResponse(\n    authInternal,\n    OperationType.SIGN_IN,\n    response\n  );\n  await authInternal._updateCurrentUser(userCredential.user);\n\n  return userCredential;\n}\n\n/**\n * Asynchronously signs in using an email and password.\n *\n * @remarks\n * Fails with an error if the email address and password do not match.\n *\n * Note: The user's password is NOT the password used to access the user's email account. The\n * email address serves as a unique identifier for the user, and the password is used to access\n * the user's account in your Firebase project. See also: {@link createUserWithEmailAndPassword}.\n *\n * @param auth - The {@link Auth} instance.\n * @param email - The users email address.\n * @param password - The users password.\n *\n * @public\n */\nexport function signInWithEmailAndPassword(\n  auth: Auth,\n  email: string,\n  password: string\n): Promise<UserCredential> {\n  return signInWithCredential(\n    getModularInstance(auth),\n    EmailAuthProvider.credential(email, password)\n  );\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  ActionCodeOperation,\n  ActionCodeSettings,\n  Auth,\n  UserCredential\n} from '../../model/public_types';\n\nimport * as api from '../../api/authentication/email_and_password';\nimport { ActionCodeURL } from '../action_code_url';\nimport { EmailAuthProvider } from '../providers/email';\nimport { _getCurrentUrl } from '../util/location';\nimport { _setActionCodeSettingsOnRequest } from './action_code_settings';\nimport { signInWithCredential } from './credential';\nimport { AuthErrorCode } from '../errors';\nimport { _assert } from '../util/assert';\nimport { getModularInstance } from '@firebase/util';\n\n/**\n * Sends a sign-in email link to the user with the specified email.\n *\n * @remarks\n * The sign-in operation has to always be completed in the app unlike other out of band email\n * actions (password reset and email verifications). This is because, at the end of the flow,\n * the user is expected to be signed in and their Auth state persisted within the app.\n *\n * To complete sign in with the email link, call {@link signInWithEmailLink} with the email\n * address and the email link supplied in the email sent to the user.\n *\n * @example\n * ```javascript\n * const actionCodeSettings = {\n *   url: 'https://www.example.com/?email=user@example.com',\n *   iOS: {\n *      bundleId: 'com.example.ios'\n *   },\n *   android: {\n *     packageName: 'com.example.android',\n *     installApp: true,\n *     minimumVersion: '12'\n *   },\n *   handleCodeInApp: true\n * };\n * await sendSignInLinkToEmail(auth, 'user@example.com', actionCodeSettings);\n * // Obtain emailLink from the user.\n * if(isSignInWithEmailLink(auth, emailLink)) {\n *   await signInWithEmailLink(auth, 'user@example.com', emailLink);\n * }\n * ```\n *\n * @param authInternal - The {@link Auth} instance.\n * @param email - The user's email address.\n * @param actionCodeSettings - The {@link ActionCodeSettings}.\n *\n * @public\n */\nexport async function sendSignInLinkToEmail(\n  auth: Auth,\n  email: string,\n  actionCodeSettings: ActionCodeSettings\n): Promise<void> {\n  const authModular = getModularInstance(auth);\n  const request: api.EmailSignInRequest = {\n    requestType: ActionCodeOperation.EMAIL_SIGNIN,\n    email\n  };\n  _assert(\n    actionCodeSettings.handleCodeInApp,\n    authModular,\n    AuthErrorCode.ARGUMENT_ERROR\n  );\n  if (actionCodeSettings) {\n    _setActionCodeSettingsOnRequest(authModular, request, actionCodeSettings);\n  }\n\n  await api.sendSignInLinkToEmail(authModular, request);\n}\n\n/**\n * Checks if an incoming link is a sign-in with email link suitable for {@link signInWithEmailLink}.\n *\n * @param auth - The {@link Auth} instance.\n * @param emailLink - The link sent to the user's email address.\n *\n * @public\n */\nexport function isSignInWithEmailLink(auth: Auth, emailLink: string): boolean {\n  const actionCodeUrl = ActionCodeURL.parseLink(emailLink);\n  return actionCodeUrl?.operation === ActionCodeOperation.EMAIL_SIGNIN;\n}\n\n/**\n * Asynchronously signs in using an email and sign-in email link.\n *\n * @remarks\n * If no link is passed, the link is inferred from the current URL.\n *\n * Fails with an error if the email address is invalid or OTP in email link expires.\n *\n * Note: Confirm the link is a sign-in email link before calling this method firebase.auth.Auth.isSignInWithEmailLink.\n *\n * @example\n * ```javascript\n * const actionCodeSettings = {\n *   url: 'https://www.example.com/?email=user@example.com',\n *   iOS: {\n *      bundleId: 'com.example.ios'\n *   },\n *   android: {\n *     packageName: 'com.example.android',\n *     installApp: true,\n *     minimumVersion: '12'\n *   },\n *   handleCodeInApp: true\n * };\n * await sendSignInLinkToEmail(auth, 'user@example.com', actionCodeSettings);\n * // Obtain emailLink from the user.\n * if(isSignInWithEmailLink(auth, emailLink)) {\n *   await signInWithEmailLink(auth, 'user@example.com', emailLink);\n * }\n * ```\n *\n * @param auth - The {@link Auth} instance.\n * @param email - The user's email address.\n * @param emailLink - The link sent to the user's email address.\n *\n * @public\n */\nexport async function signInWithEmailLink(\n  auth: Auth,\n  email: string,\n  emailLink?: string\n): Promise<UserCredential> {\n  const authModular = getModularInstance(auth);\n  const credential = EmailAuthProvider.credentialWithLink(\n    email,\n    emailLink || _getCurrentUrl()\n  );\n  // Check if the tenant ID in the email link matches the tenant ID on Auth\n  // instance.\n  _assert(\n    credential._tenantId === (authModular.tenantId || null),\n    authModular,\n    AuthErrorCode.TENANT_ID_MISMATCH\n  );\n  return signInWithCredential(authModular, credential);\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  Endpoint,\n  HttpMethod,\n  _addTidIfNecessary,\n  _performApiRequest\n} from '../index';\nimport { Auth } from '../../model/public_types';\n\nexport interface CreateAuthUriRequest {\n  identifier: string;\n  continueUri: string;\n  tenantId?: string;\n}\n\nexport interface CreateAuthUriResponse {\n  signinMethods: string[];\n}\n\nexport async function createAuthUri(\n  auth: Auth,\n  request: CreateAuthUriRequest\n): Promise<CreateAuthUriResponse> {\n  return _performApiRequest<CreateAuthUriRequest, CreateAuthUriResponse>(\n    auth,\n    HttpMethod.POST,\n    Endpoint.CREATE_AUTH_URI,\n    _addTidIfNecessary(auth, request)\n  );\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  ActionCodeOperation,\n  ActionCodeSettings,\n  Auth,\n  User\n} from '../../model/public_types';\n\nimport {\n  createAuthUri,\n  CreateAuthUriRequest\n} from '../../api/authentication/create_auth_uri';\nimport * as api from '../../api/authentication/email_and_password';\nimport { UserInternal } from '../../model/user';\nimport { _getCurrentUrl, _isHttpOrHttps } from '../util/location';\nimport { _setActionCodeSettingsOnRequest } from './action_code_settings';\nimport { getModularInstance } from '@firebase/util';\n\n/**\n * Gets the list of possible sign in methods for the given email address.\n *\n * @remarks\n * This is useful to differentiate methods of sign-in for the same provider, eg.\n * {@link EmailAuthProvider} which has 2 methods of sign-in,\n * {@link SignInMethod}.EMAIL_PASSWORD and\n * {@link SignInMethod}.EMAIL_LINK.\n *\n * @param auth - The {@link Auth} instance.\n * @param email - The user's email address.\n *\n * @public\n */\nexport async function fetchSignInMethodsForEmail(\n  auth: Auth,\n  email: string\n): Promise<string[]> {\n  // createAuthUri returns an error if continue URI is not http or https.\n  // For environments like Cordova, Chrome extensions, native frameworks, file\n  // systems, etc, use http://localhost as continue URL.\n  const continueUri = _isHttpOrHttps() ? _getCurrentUrl() : 'http://localhost';\n  const request: CreateAuthUriRequest = {\n    identifier: email,\n    continueUri\n  };\n\n  const { signinMethods } = await createAuthUri(\n    getModularInstance(auth),\n    request\n  );\n\n  return signinMethods || [];\n}\n\n/**\n * Sends a verification email to a user.\n *\n * @remarks\n * The verification process is completed by calling {@link applyActionCode}.\n *\n * @example\n * ```javascript\n * const actionCodeSettings = {\n *   url: 'https://www.example.com/?email=user@example.com',\n *   iOS: {\n *      bundleId: 'com.example.ios'\n *   },\n *   android: {\n *     packageName: 'com.example.android',\n *     installApp: true,\n *     minimumVersion: '12'\n *   },\n *   handleCodeInApp: true\n * };\n * await sendEmailVerification(user, actionCodeSettings);\n * // Obtain code from the user.\n * await applyActionCode(auth, code);\n * ```\n *\n * @param user - The user.\n * @param actionCodeSettings - The {@link ActionCodeSettings}.\n *\n * @public\n */\nexport async function sendEmailVerification(\n  user: User,\n  actionCodeSettings?: ActionCodeSettings | null\n): Promise<void> {\n  const userInternal = getModularInstance(user) as UserInternal;\n  const idToken = await user.getIdToken();\n  const request: api.VerifyEmailRequest = {\n    requestType: ActionCodeOperation.VERIFY_EMAIL,\n    idToken\n  };\n  if (actionCodeSettings) {\n    _setActionCodeSettingsOnRequest(\n      userInternal.auth,\n      request,\n      actionCodeSettings\n    );\n  }\n\n  const { email } = await api.sendEmailVerification(userInternal.auth, request);\n\n  if (email !== user.email) {\n    await user.reload();\n  }\n}\n\n/**\n * Sends a verification email to a new email address.\n *\n * @remarks\n * The user's email will be updated to the new one after being verified.\n *\n * If you have a custom email action handler, you can complete the verification process by calling\n * {@link applyActionCode}.\n *\n * @example\n * ```javascript\n * const actionCodeSettings = {\n *   url: 'https://www.example.com/?email=user@example.com',\n *   iOS: {\n *      bundleId: 'com.example.ios'\n *   },\n *   android: {\n *     packageName: 'com.example.android',\n *     installApp: true,\n *     minimumVersion: '12'\n *   },\n *   handleCodeInApp: true\n * };\n * await verifyBeforeUpdateEmail(user, 'newemail@example.com', actionCodeSettings);\n * // Obtain code from the user.\n * await applyActionCode(auth, code);\n * ```\n *\n * @param user - The user.\n * @param newEmail - The new email address to be verified before update.\n * @param actionCodeSettings - The {@link ActionCodeSettings}.\n *\n * @public\n */\nexport async function verifyBeforeUpdateEmail(\n  user: User,\n  newEmail: string,\n  actionCodeSettings?: ActionCodeSettings | null\n): Promise<void> {\n  const userInternal = getModularInstance(user) as UserInternal;\n  const idToken = await user.getIdToken();\n  const request: api.VerifyAndChangeEmailRequest = {\n    requestType: ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL,\n    idToken,\n    newEmail\n  };\n  if (actionCodeSettings) {\n    _setActionCodeSettingsOnRequest(\n      userInternal.auth,\n      request,\n      actionCodeSettings\n    );\n  }\n\n  const { email } = await api.verifyAndChangeEmail(userInternal.auth, request);\n\n  if (email !== user.email) {\n    // If the local copy of the email on user is outdated, reload the\n    // user.\n    await user.reload();\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Endpoint, HttpMethod, _performApiRequest } from '../index';\nimport { IdTokenResponse } from '../../model/id_token';\nimport { Auth } from '../../model/public_types';\n\nexport interface UpdateProfileRequest {\n  idToken: string;\n  displayName?: string | null;\n  photoUrl?: string | null;\n  returnSecureToken: boolean;\n}\n\nexport interface UpdateProfileResponse extends IdTokenResponse {\n  displayName?: string | null;\n  photoUrl?: string | null;\n}\n\nexport async function updateProfile(\n  auth: Auth,\n  request: UpdateProfileRequest\n): Promise<UpdateProfileResponse> {\n  return _performApiRequest<UpdateProfileRequest, UpdateProfileResponse>(\n    auth,\n    HttpMethod.POST,\n    Endpoint.SET_ACCOUNT_INFO,\n    request\n  );\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { User } from '../../model/public_types';\n\nimport {\n  updateEmailPassword as apiUpdateEmailPassword,\n  UpdateEmailPasswordRequest\n} from '../../api/account_management/email_and_password';\nimport { updateProfile as apiUpdateProfile } from '../../api/account_management/profile';\nimport { UserInternal } from '../../model/user';\nimport { _logoutIfInvalidated } from './invalidation';\nimport { getModularInstance } from '@firebase/util';\nimport { ProviderId } from '../../model/enums';\n\n/**\n * Updates a user's profile data.\n *\n * @param user - The user.\n * @param profile - The profile's `displayName` and `photoURL` to update.\n *\n * @public\n */\nexport async function updateProfile(\n  user: User,\n  {\n    displayName,\n    photoURL: photoUrl\n  }: { displayName?: string | null; photoURL?: string | null }\n): Promise<void> {\n  if (displayName === undefined && photoUrl === undefined) {\n    return;\n  }\n\n  const userInternal = getModularInstance(user) as UserInternal;\n  const idToken = await userInternal.getIdToken();\n  const profileRequest = {\n    idToken,\n    displayName,\n    photoUrl,\n    returnSecureToken: true\n  };\n  const response = await _logoutIfInvalidated(\n    userInternal,\n    apiUpdateProfile(userInternal.auth, profileRequest)\n  );\n\n  userInternal.displayName = response.displayName || null;\n  userInternal.photoURL = response.photoUrl || null;\n\n  // Update the password provider as well\n  const passwordProvider = userInternal.providerData.find(\n    ({ providerId }) => providerId === ProviderId.PASSWORD\n  );\n  if (passwordProvider) {\n    passwordProvider.displayName = userInternal.displayName;\n    passwordProvider.photoURL = userInternal.photoURL;\n  }\n\n  await userInternal._updateTokensIfNecessary(response);\n}\n\n/**\n * Updates the user's email address.\n *\n * @remarks\n * An email will be sent to the original email address (if it was set) that allows to revoke the\n * email address change, in order to protect them from account hijacking.\n *\n * Important: this is a security sensitive operation that requires the user to have recently signed\n * in. If this requirement isn't met, ask the user to authenticate again and then call\n * {@link reauthenticateWithCredential}.\n *\n * @param user - The user.\n * @param newEmail - The new email address.\n *\n * @public\n */\nexport function updateEmail(user: User, newEmail: string): Promise<void> {\n  return updateEmailOrPassword(\n    getModularInstance(user) as UserInternal,\n    newEmail,\n    null\n  );\n}\n\n/**\n * Updates the user's password.\n *\n * @remarks\n * Important: this is a security sensitive operation that requires the user to have recently signed\n * in. If this requirement isn't met, ask the user to authenticate again and then call\n * {@link reauthenticateWithCredential}.\n *\n * @param user - The user.\n * @param newPassword - The new password.\n *\n * @public\n */\nexport function updatePassword(user: User, newPassword: string): Promise<void> {\n  return updateEmailOrPassword(\n    getModularInstance(user) as UserInternal,\n    null,\n    newPassword\n  );\n}\n\nasync function updateEmailOrPassword(\n  user: UserInternal,\n  email: string | null,\n  password: string | null\n): Promise<void> {\n  const { auth } = user;\n  const idToken = await user.getIdToken();\n  const request: UpdateEmailPasswordRequest = {\n    idToken,\n    returnSecureToken: true\n  };\n\n  if (email) {\n    request.email = email;\n  }\n\n  if (password) {\n    request.password = password;\n  }\n\n  const response = await _logoutIfInvalidated(\n    user,\n    apiUpdateEmailPassword(auth, request)\n  );\n  await user._updateTokensIfNecessary(response, /* reload */ true);\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AdditionalUserInfo, UserCredential } from '../../model/public_types';\nimport { IdTokenResponse, IdTokenResponseKind } from '../../model/id_token';\nimport { _parseToken } from './id_token_result';\nimport { UserCredentialInternal } from '../../model/user';\nimport { ProviderId } from '../../model/enums';\n\n/**\n * Parse the `AdditionalUserInfo` from the ID token response.\n *\n */\nexport function _fromIdTokenResponse(\n  idTokenResponse?: IdTokenResponse\n): AdditionalUserInfo | null {\n  if (!idTokenResponse) {\n    return null;\n  }\n  const { providerId } = idTokenResponse;\n  const profile = idTokenResponse.rawUserInfo\n    ? JSON.parse(idTokenResponse.rawUserInfo)\n    : {};\n  const isNewUser =\n    idTokenResponse.isNewUser ||\n    idTokenResponse.kind === IdTokenResponseKind.SignupNewUser;\n  if (!providerId && idTokenResponse?.idToken) {\n    const signInProvider = _parseToken(idTokenResponse.idToken)?.firebase?.[\n      'sign_in_provider'\n    ];\n    if (signInProvider) {\n      const filteredProviderId =\n        signInProvider !== ProviderId.ANONYMOUS &&\n        signInProvider !== ProviderId.CUSTOM\n          ? (signInProvider as ProviderId)\n          : null;\n      // Uses generic class in accordance with the legacy SDK.\n      return new GenericAdditionalUserInfo(isNewUser, filteredProviderId);\n    }\n  }\n  if (!providerId) {\n    return null;\n  }\n  switch (providerId) {\n    case ProviderId.FACEBOOK:\n      return new FacebookAdditionalUserInfo(isNewUser, profile);\n    case ProviderId.GITHUB:\n      return new GithubAdditionalUserInfo(isNewUser, profile);\n    case ProviderId.GOOGLE:\n      return new GoogleAdditionalUserInfo(isNewUser, profile);\n    case ProviderId.TWITTER:\n      return new TwitterAdditionalUserInfo(\n        isNewUser,\n        profile,\n        idTokenResponse.screenName || null\n      );\n    case ProviderId.CUSTOM:\n    case ProviderId.ANONYMOUS:\n      return new GenericAdditionalUserInfo(isNewUser, null);\n    default:\n      return new GenericAdditionalUserInfo(isNewUser, providerId, profile);\n  }\n}\n\nclass GenericAdditionalUserInfo implements AdditionalUserInfo {\n  constructor(\n    readonly isNewUser: boolean,\n    readonly providerId: ProviderId | string | null,\n    readonly profile: Record<string, unknown> = {}\n  ) {}\n}\n\nclass FederatedAdditionalUserInfoWithUsername extends GenericAdditionalUserInfo {\n  constructor(\n    isNewUser: boolean,\n    providerId: ProviderId,\n    profile: Record<string, unknown>,\n    readonly username: string | null\n  ) {\n    super(isNewUser, providerId, profile);\n  }\n}\n\nclass FacebookAdditionalUserInfo extends GenericAdditionalUserInfo {\n  constructor(isNewUser: boolean, profile: Record<string, unknown>) {\n    super(isNewUser, ProviderId.FACEBOOK, profile);\n  }\n}\n\nclass GithubAdditionalUserInfo extends FederatedAdditionalUserInfoWithUsername {\n  constructor(isNewUser: boolean, profile: Record<string, unknown>) {\n    super(\n      isNewUser,\n      ProviderId.GITHUB,\n      profile,\n      typeof profile?.login === 'string' ? profile?.login : null\n    );\n  }\n}\n\nclass GoogleAdditionalUserInfo extends GenericAdditionalUserInfo {\n  constructor(isNewUser: boolean, profile: Record<string, unknown>) {\n    super(isNewUser, ProviderId.GOOGLE, profile);\n  }\n}\n\nclass TwitterAdditionalUserInfo extends FederatedAdditionalUserInfoWithUsername {\n  constructor(\n    isNewUser: boolean,\n    profile: Record<string, unknown>,\n    screenName: string | null\n  ) {\n    super(isNewUser, ProviderId.TWITTER, profile, screenName);\n  }\n}\n\n/**\n * Extracts provider specific {@link AdditionalUserInfo} for the given credential.\n *\n * @param userCredential - The user credential.\n *\n * @public\n */\nexport function getAdditionalUserInfo(\n  userCredential: UserCredential\n): AdditionalUserInfo | null {\n  const { user, _tokenResponse } = userCredential as UserCredentialInternal;\n  if (user.isAnonymous && !_tokenResponse) {\n    // Handle the special case where signInAnonymously() gets called twice.\n    // No network call is made so there's nothing to actually fill this in\n    return {\n      providerId: null,\n      isNewUser: false,\n      profile: null\n    };\n  }\n\n  return _fromIdTokenResponse(_tokenResponse);\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getModularInstance } from '@firebase/util';\nimport {\n  Auth,\n  NextOrObserver,\n  Persistence,\n  User,\n  CompleteFn,\n  ErrorFn,\n  Unsubscribe\n} from '../model/public_types';\n\nexport {\n  debugErrorMap,\n  prodErrorMap,\n  AUTH_ERROR_CODES_MAP_DO_NOT_USE_INTERNALLY as AuthErrorCodes\n} from './errors';\n\n// Non-optional auth methods.\n/**\n * Changes the type of persistence on the {@link Auth} instance for the currently saved\n * `Auth` session and applies this type of persistence for future sign-in requests, including\n * sign-in with redirect requests.\n *\n * @remarks\n * This makes it easy for a user signing in to specify whether their session should be\n * remembered or not. It also makes it easier to never persist the `Auth` state for applications\n * that are shared by other users or have sensitive data.\n *\n * @example\n * ```javascript\n * setPersistence(auth, browserSessionPersistence);\n * ```\n *\n * @param auth - The {@link Auth} instance.\n * @param persistence - The {@link Persistence} to use.\n * @returns A `Promise` that resolves once the persistence change has completed\n *\n * @public\n */\nexport function setPersistence(\n  auth: Auth,\n  persistence: Persistence\n): Promise<void> {\n  return getModularInstance(auth).setPersistence(persistence);\n}\n/**\n * Adds an observer for changes to the signed-in user's ID token, which includes sign-in,\n * sign-out, and token refresh events.\n *\n * @param auth - The {@link Auth} instance.\n * @param nextOrObserver - callback triggered on change.\n * @param error - callback triggered on error.\n * @param completed - callback triggered when observer is removed.\n *\n * @public\n */\nexport function onIdTokenChanged(\n  auth: Auth,\n  nextOrObserver: NextOrObserver<User>,\n  error?: ErrorFn,\n  completed?: CompleteFn\n): Unsubscribe {\n  return getModularInstance(auth).onIdTokenChanged(\n    nextOrObserver,\n    error,\n    completed\n  );\n}\n/**\n * Adds a blocking callback that runs before an auth state change\n * sets a new user.\n *\n * @param auth - The {@link Auth} instance.\n * @param callback - callback triggered before new user value is set.\n *   If this throws, it blocks the user from being set.\n * @param onAbort - callback triggered if a later `beforeAuthStateChanged()`\n *   callback throws, allowing you to undo any side effects.\n */\n export function beforeAuthStateChanged(\n  auth: Auth,\n  callback: (user: User|null) => void | Promise<void>,\n  onAbort?: () => void,\n): Unsubscribe {\n  return getModularInstance(auth).beforeAuthStateChanged(\n    callback,\n    onAbort\n  );\n}\n/**\n * Adds an observer for changes to the user's sign-in state.\n *\n * @remarks\n * To keep the old behavior, see {@link onIdTokenChanged}.\n *\n * @param auth - The {@link Auth} instance.\n * @param nextOrObserver - callback triggered on change.\n * @param error - callback triggered on error.\n * @param completed - callback triggered when observer is removed.\n *\n * @public\n */\nexport function onAuthStateChanged(\n  auth: Auth,\n  nextOrObserver: NextOrObserver<User>,\n  error?: ErrorFn,\n  completed?: CompleteFn\n): Unsubscribe {\n  return getModularInstance(auth).onAuthStateChanged(\n    nextOrObserver,\n    error,\n    completed\n  );\n}\n/**\n * Sets the current language to the default device/browser preference.\n *\n * @param auth - The {@link Auth} instance.\n *\n * @public\n */\nexport function useDeviceLanguage(auth: Auth): void {\n  getModularInstance(auth).useDeviceLanguage();\n}\n/**\n * Asynchronously sets the provided user as {@link Auth.currentUser} on the\n * {@link Auth} instance.\n *\n * @remarks\n * A new instance copy of the user provided will be made and set as currentUser.\n *\n * This will trigger {@link onAuthStateChanged} and {@link onIdTokenChanged} listeners\n * like other sign in methods.\n *\n * The operation fails with an error if the user to be updated belongs to a different Firebase\n * project.\n *\n * @param auth - The {@link Auth} instance.\n * @param user - The new {@link User}.\n *\n * @public\n */\nexport function updateCurrentUser(\n  auth: Auth,\n  user: User | null\n): Promise<void> {\n  return getModularInstance(auth).updateCurrentUser(user);\n}\n/**\n * Signs out the current user.\n *\n * @param auth - The {@link Auth} instance.\n *\n * @public\n */\nexport function signOut(auth: Auth): Promise<void> {\n  return getModularInstance(auth).signOut();\n}\n\nexport { initializeAuth } from './auth/initialize';\nexport { connectAuthEmulator } from './auth/emulator';\n\n// credentials\nexport { AuthCredential } from './credentials';\nexport { EmailAuthCredential } from './credentials/email';\nexport { OAuthCredential } from './credentials/oauth';\nexport { PhoneAuthCredential } from './credentials/phone';\n\n// persistence\nexport { inMemoryPersistence } from './persistence/in_memory';\n\n// providers\nexport { EmailAuthProvider } from './providers/email';\nexport { FacebookAuthProvider } from './providers/facebook';\nexport { CustomParameters } from './providers/federated';\nexport { GoogleAuthProvider } from './providers/google';\nexport { GithubAuthProvider } from './providers/github';\nexport { OAuthProvider, OAuthCredentialOptions } from './providers/oauth';\nexport { SAMLAuthProvider } from './providers/saml';\nexport { TwitterAuthProvider } from './providers/twitter';\n\n// strategies\nexport { signInAnonymously } from './strategies/anonymous';\nexport {\n  signInWithCredential,\n  linkWithCredential,\n  reauthenticateWithCredential\n} from './strategies/credential';\nexport { signInWithCustomToken } from './strategies/custom_token';\nexport {\n  sendPasswordResetEmail,\n  confirmPasswordReset,\n  applyActionCode,\n  checkActionCode,\n  verifyPasswordResetCode,\n  createUserWithEmailAndPassword,\n  signInWithEmailAndPassword\n} from './strategies/email_and_password';\nexport {\n  sendSignInLinkToEmail,\n  isSignInWithEmailLink,\n  signInWithEmailLink\n} from './strategies/email_link';\nexport {\n  fetchSignInMethodsForEmail,\n  sendEmailVerification,\n  verifyBeforeUpdateEmail\n} from './strategies/email';\n\n// core\nexport { ActionCodeURL, parseActionCodeURL } from './action_code_url';\n\n// user\nexport {\n  updateProfile,\n  updateEmail,\n  updatePassword\n} from './user/account_info';\nexport { getIdToken, getIdTokenResult } from './user/id_token_result';\nexport { unlink } from './user/link_unlink';\nexport { getAdditionalUserInfo } from './user/additional_user_info';\n\n// Non-optional user methods.\nexport { reload } from './user/reload';\n/**\n * Deletes and signs out the user.\n *\n * @remarks\n * Important: this is a security-sensitive operation that requires the user to have recently\n * signed in. If this requirement isn't met, ask the user to authenticate again and then call\n * {@link reauthenticateWithCredential}.\n *\n * @param user - The user.\n *\n * @public\n */\nexport async function deleteUser(user: User): Promise<void> {\n  return getModularInstance(user).delete();\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { MultiFactorSession } from '../model/public_types';\n\nexport const enum MultiFactorSessionType {\n  ENROLL = 'enroll',\n  SIGN_IN = 'signin'\n}\n\ninterface SerializedMultiFactorSession {\n  multiFactorSession: {\n    idToken?: string;\n    pendingCredential?: string;\n  };\n}\n\nexport class MultiFactorSessionImpl implements MultiFactorSession {\n  private constructor(\n    readonly type: MultiFactorSessionType,\n    readonly credential: string\n  ) {}\n\n  static _fromIdtoken(idToken: string): MultiFactorSessionImpl {\n    return new MultiFactorSessionImpl(MultiFactorSessionType.ENROLL, idToken);\n  }\n\n  static _fromMfaPendingCredential(\n    mfaPendingCredential: string\n  ): MultiFactorSessionImpl {\n    return new MultiFactorSessionImpl(\n      MultiFactorSessionType.SIGN_IN,\n      mfaPendingCredential\n    );\n  }\n\n  toJSON(): SerializedMultiFactorSession {\n    const key =\n      this.type === MultiFactorSessionType.ENROLL\n        ? 'idToken'\n        : 'pendingCredential';\n    return {\n      multiFactorSession: {\n        [key]: this.credential\n      }\n    };\n  }\n\n  static fromJSON(\n    obj: Partial<SerializedMultiFactorSession>\n  ): MultiFactorSessionImpl | null {\n    if (obj?.multiFactorSession) {\n      if (obj.multiFactorSession?.pendingCredential) {\n        return MultiFactorSessionImpl._fromMfaPendingCredential(\n          obj.multiFactorSession.pendingCredential\n        );\n      } else if (obj.multiFactorSession?.idToken) {\n        return MultiFactorSessionImpl._fromIdtoken(\n          obj.multiFactorSession.idToken\n        );\n      }\n    }\n    return null;\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  Auth,\n  MultiFactorResolver,\n  UserCredential,\n  MultiFactorError\n} from '../model/public_types';\n\nimport { _castAuth } from '../core/auth/auth_impl';\nimport { AuthErrorCode } from '../core/errors';\nimport { UserCredentialImpl } from '../core/user/user_credential_impl';\nimport { _assert, _fail } from '../core/util/assert';\nimport { UserCredentialInternal } from '../model/user';\nimport { MultiFactorAssertionImpl } from './mfa_assertion';\nimport { MultiFactorError as MultiFactorErrorInternal } from './mfa_error';\nimport { MultiFactorInfoImpl } from './mfa_info';\nimport { MultiFactorSessionImpl } from './mfa_session';\nimport { getModularInstance } from '@firebase/util';\nimport { OperationType } from '../model/enums';\n\nexport class MultiFactorResolverImpl implements MultiFactorResolver {\n  private constructor(\n    readonly session: MultiFactorSessionImpl,\n    readonly hints: MultiFactorInfoImpl[],\n    private readonly signInResolver: (\n      assertion: MultiFactorAssertionImpl\n    ) => Promise<UserCredentialInternal>\n  ) {}\n\n  /** @internal */\n  static _fromError(\n    authExtern: Auth,\n    error: MultiFactorErrorInternal\n  ): MultiFactorResolverImpl {\n    const auth = _castAuth(authExtern);\n    const serverResponse = error.customData._serverResponse;\n    const hints = (serverResponse.mfaInfo || []).map(enrollment =>\n      MultiFactorInfoImpl._fromServerResponse(auth, enrollment)\n    );\n\n    _assert(\n      serverResponse.mfaPendingCredential,\n      auth,\n      AuthErrorCode.INTERNAL_ERROR\n    );\n    const session = MultiFactorSessionImpl._fromMfaPendingCredential(\n      serverResponse.mfaPendingCredential\n    );\n\n    return new MultiFactorResolverImpl(\n      session,\n      hints,\n      async (\n        assertion: MultiFactorAssertionImpl\n      ): Promise<UserCredentialInternal> => {\n        const mfaResponse = await assertion._process(auth, session);\n        // Clear out the unneeded fields from the old login response\n        delete serverResponse.mfaInfo;\n        delete serverResponse.mfaPendingCredential;\n\n        // Use in the new token & refresh token in the old response\n        const idTokenResponse = {\n          ...serverResponse,\n          idToken: mfaResponse.idToken,\n          refreshToken: mfaResponse.refreshToken\n        };\n\n        // TODO: we should collapse this switch statement into UserCredentialImpl._forOperation and have it support the SIGN_IN case\n        switch (error.operationType) {\n          case OperationType.SIGN_IN:\n            const userCredential =\n              await UserCredentialImpl._fromIdTokenResponse(\n                auth,\n                error.operationType,\n                idTokenResponse\n              );\n            await auth._updateCurrentUser(userCredential.user);\n            return userCredential;\n          case OperationType.REAUTHENTICATE:\n            _assert(error.user, auth, AuthErrorCode.INTERNAL_ERROR);\n            return UserCredentialImpl._forOperation(\n              error.user,\n              error.operationType,\n              idTokenResponse\n            );\n          default:\n            _fail(auth, AuthErrorCode.INTERNAL_ERROR);\n        }\n      }\n    );\n  }\n\n  async resolveSignIn(\n    assertionExtern: MultiFactorAssertionImpl\n  ): Promise<UserCredential> {\n    const assertion = assertionExtern as MultiFactorAssertionImpl;\n    return this.signInResolver(assertion);\n  }\n}\n\n/**\n * Provides a {@link MultiFactorResolver} suitable for completion of a\n * multi-factor flow.\n *\n * @param auth - The {@link Auth} instance.\n * @param error - The {@link MultiFactorError} raised during a sign-in, or\n * reauthentication operation.\n *\n * @public\n */\nexport function getMultiFactorResolver(\n  auth: Auth,\n  error: MultiFactorError\n): MultiFactorResolver {\n  const authModular = getModularInstance(auth);\n  const errorInternal = error as MultiFactorErrorInternal;\n  _assert(error.customData.operationType, authModular, AuthErrorCode.ARGUMENT_ERROR);\n  _assert(\n    errorInternal.customData._serverResponse?.mfaPendingCredential,\n    authModular,\n    AuthErrorCode.ARGUMENT_ERROR\n  );\n\n  return MultiFactorResolverImpl._fromError(authModular, errorInternal);\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Endpoint, HttpMethod, _addTidIfNecessary, _performApiRequest } from '../index';\nimport { SignInWithPhoneNumberRequest } from '../authentication/sms';\nimport { FinalizeMfaResponse } from '../authentication/mfa';\nimport { AuthInternal } from '../../model/auth';\n\n/**\n * MFA Info as returned by the API\n */\ninterface BaseMfaEnrollment {\n  mfaEnrollmentId: string;\n  enrolledAt: number;\n  displayName?: string;\n}\n\n/**\n * An MFA provided by SMS verification\n */\nexport interface PhoneMfaEnrollment extends BaseMfaEnrollment {\n  phoneInfo: string;\n}\n\n/**\n * MfaEnrollment can be any subtype of BaseMfaEnrollment, currently only PhoneMfaEnrollment is supported\n */\nexport type MfaEnrollment = PhoneMfaEnrollment;\n\nexport interface StartPhoneMfaEnrollmentRequest {\n  idToken: string;\n  phoneEnrollmentInfo: {\n    phoneNumber: string;\n    recaptchaToken: string;\n  };\n  tenantId?: string;\n}\n\nexport interface StartPhoneMfaEnrollmentResponse {\n  phoneSessionInfo: {\n    sessionInfo: string;\n  };\n}\n\nexport function startEnrollPhoneMfa(\n  auth: AuthInternal,\n  request: StartPhoneMfaEnrollmentRequest\n): Promise<StartPhoneMfaEnrollmentResponse> {\n  return _performApiRequest<\n    StartPhoneMfaEnrollmentRequest,\n    StartPhoneMfaEnrollmentResponse\n  >(auth, HttpMethod.POST, Endpoint.START_PHONE_MFA_ENROLLMENT, _addTidIfNecessary(auth, request));\n}\n\nexport interface FinalizePhoneMfaEnrollmentRequest {\n  idToken: string;\n  phoneVerificationInfo: SignInWithPhoneNumberRequest;\n  displayName?: string | null;\n  tenantId?: string;\n}\n\nexport interface FinalizePhoneMfaEnrollmentResponse\n  extends FinalizeMfaResponse {}\n\nexport function finalizeEnrollPhoneMfa(\n  auth: AuthInternal,\n  request: FinalizePhoneMfaEnrollmentRequest\n): Promise<FinalizePhoneMfaEnrollmentResponse> {\n  return _performApiRequest<\n    FinalizePhoneMfaEnrollmentRequest,\n    FinalizePhoneMfaEnrollmentResponse\n  >(auth, HttpMethod.POST, Endpoint.FINALIZE_PHONE_MFA_ENROLLMENT, _addTidIfNecessary(auth, request));\n}\n\nexport interface WithdrawMfaRequest {\n  idToken: string;\n  mfaEnrollmentId: string;\n  tenantId?: string;\n}\n\nexport interface WithdrawMfaResponse extends FinalizeMfaResponse {}\n\nexport function withdrawMfa(\n  auth: AuthInternal,\n  request: WithdrawMfaRequest\n): Promise<WithdrawMfaResponse> {\n  return _performApiRequest<WithdrawMfaRequest, WithdrawMfaResponse>(\n    auth,\n    HttpMethod.POST,\n    Endpoint.WITHDRAW_MFA,\n    _addTidIfNecessary(auth, request)\n  );\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n  MultiFactorAssertion,\n  MultiFactorInfo,\n  MultiFactorSession,\n  MultiFactorUser,\n  User\n} from '../model/public_types';\n\nimport { withdrawMfa } from '../api/account_management/mfa';\nimport { AuthErrorCode } from '../core/errors';\nimport { _logoutIfInvalidated } from '../core/user/invalidation';\nimport { UserInternal } from '../model/user';\nimport { MultiFactorAssertionImpl } from './mfa_assertion';\nimport { MultiFactorInfoImpl } from './mfa_info';\nimport { MultiFactorSessionImpl } from './mfa_session';\nimport { getModularInstance } from '@firebase/util';\n\nexport class MultiFactorUserImpl implements MultiFactorUser {\n  enrolledFactors: MultiFactorInfo[] = [];\n\n  private constructor(readonly user: UserInternal) {\n    user._onReload(userInfo => {\n      if (userInfo.mfaInfo) {\n        this.enrolledFactors = userInfo.mfaInfo.map(enrollment =>\n          MultiFactorInfoImpl._fromServerResponse(user.auth, enrollment)\n        );\n      }\n    });\n  }\n\n  static _fromUser(user: UserInternal): MultiFactorUserImpl {\n    return new MultiFactorUserImpl(user);\n  }\n\n  async getSession(): Promise<MultiFactorSession> {\n    return MultiFactorSessionImpl._fromIdtoken(await this.user.getIdToken());\n  }\n\n  async enroll(\n    assertionExtern: MultiFactorAssertion,\n    displayName?: string | null\n  ): Promise<void> {\n    const assertion = assertionExtern as MultiFactorAssertionImpl;\n    const session = (await this.getSession()) as MultiFactorSessionImpl;\n    const finalizeMfaResponse = await _logoutIfInvalidated(\n      this.user,\n      assertion._process(this.user.auth, session, displayName)\n    );\n    // New tokens will be issued after enrollment of the new second factors.\n    // They need to be updated on the user.\n    await this.user._updateTokensIfNecessary(finalizeMfaResponse);\n    // The user needs to be reloaded to get the new multi-factor information\n    // from server. USER_RELOADED event will be triggered and `enrolledFactors`\n    // will be updated.\n    return this.user.reload();\n  }\n\n  async unenroll(infoOrUid: MultiFactorInfo | string): Promise<void> {\n    const mfaEnrollmentId =\n      typeof infoOrUid === 'string' ? infoOrUid : infoOrUid.uid;\n    const idToken = await this.user.getIdToken();\n    const idTokenResponse = await _logoutIfInvalidated(\n      this.user,\n      withdrawMfa(this.user.auth, {\n        idToken,\n        mfaEnrollmentId\n      })\n    );\n    // Remove the second factor from the user's list.\n    this.enrolledFactors = this.enrolledFactors.filter(\n      ({ uid }) => uid !== mfaEnrollmentId\n    );\n    // Depending on whether the backend decided to revoke the user's session,\n    // the tokenResponse may be empty. If the tokens were not updated (and they\n    // are now invalid), reloading the user will discover this and invalidate\n    // the user's state accordingly.\n    await this.user._updateTokensIfNecessary(idTokenResponse);\n    try {\n      await this.user.reload();\n    } catch (e) {\n      if (e.code !== `auth/${AuthErrorCode.TOKEN_EXPIRED}`) {\n        throw e;\n      }\n    }\n  }\n}\n\nconst multiFactorUserCache = new WeakMap<User, MultiFactorUser>();\n\n/**\n * The {@link MultiFactorUser} corresponding to the user.\n *\n * @remarks\n * This is used to access all multi-factor properties and operations related to the user.\n *\n * @param user - The user.\n *\n * @public\n */\nexport function multiFactor(user: User): MultiFactorUser {\n  const userModular = getModularInstance(user);\n  if (!multiFactorUserCache.has(userModular)) {\n    multiFactorUserCache.set(\n      userModular,\n      MultiFactorUserImpl._fromUser(userModular as UserInternal)\n    );\n  }\n  return multiFactorUserCache.get(userModular)!;\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { _getProvider, FirebaseApp, getApp } from '@firebase/app';\nimport { Auth } from './src/model/public_types';\n\nimport { AuthImpl } from './src/core/auth/auth_impl';\nimport { _initializeAuthInstance } from './src/core/auth/initialize';\nimport { _ComponentName, registerAuth } from './src/core/auth/register';\nimport { PersistenceInternal } from './src/core/persistence';\nimport { _getInstance } from './src/core/util/instantiator';\nimport { ClientPlatform } from './src/core/util/version';\nimport { indexedDBLocalPersistence } from './src/platform_browser/persistence/indexed_db';\n\n// Core functionality shared by all clients\nexport * from './index.shared';\n\n// persistence\nexport { indexedDBLocalPersistence } from './src/platform_browser/persistence/indexed_db';\n\nregisterAuth(ClientPlatform.WORKER);\n\nexport function getAuth(app: FirebaseApp = getApp()): Auth {\n  // Unlike the other environments, we need to explicitly check if indexedDb is\n  // available. That means doing the whole rigamarole\n  const auth = _getProvider(\n    app,\n    _ComponentName.AUTH\n  ).getImmediate() as AuthImpl;\n\n  // This promise is intended to float; auth initialization happens in the\n  // background, meanwhile the auth object may be used by the app.\n  // eslint-disable-next-line @typescript-eslint/no-floating-promises\n  _getInstance<PersistenceInternal>(indexedDBLocalPersistence)\n    ._isAvailable()\n    .then(avail => {\n      const deps = avail ? { persistence: indexedDBLocalPersistence } : {};\n      _initializeAuthInstance(auth, deps);\n    });\n\n  return auth;\n}\n"],"names":["_a","applyActionCode","sendEmailVerification","sendPasswordResetEmail","sendSignInLinkToEmail","signInWithEmailLink","IDP_REQUEST_URI","signInWithCustomToken","getIdTokenResponse","authentication.sendPasswordResetEmail","account.resetPassword","account.applyActionCode","api.sendSignInLinkToEmail","api.sendEmailVerification","api.verifyAndChangeEmail","updateProfile","apiUpdateProfile","apiUpdateEmailPassword"],"mappings":"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"}