mobileapplicationPassvault/node_modules/@firebase/auth/dist/index.webworker.esm5.js.map

1 line
579 KiB
Plaintext

{"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/api/password_policy/get_password_policy.ts","../src/core/auth/password_policy_impl.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/platform_browser/recaptcha/recaptcha.ts","../src/api/authentication/recaptcha.ts","../src/platform_browser/load_js.ts","../src/platform_browser/recaptcha/recaptcha_enterprise_verifier.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_CREDENTIAL = '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_PASSWORD = 'missing-password',\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 RECAPTCHA_NOT_ENABLED = 'recaptcha-not-enabled',\n MISSING_RECAPTCHA_TOKEN = 'missing-recaptcha-token',\n INVALID_RECAPTCHA_TOKEN = 'invalid-recaptcha-token',\n INVALID_RECAPTCHA_ACTION = 'invalid-recaptcha-action',\n MISSING_CLIENT_TYPE = 'missing-client-type',\n MISSING_RECAPTCHA_VERSION = 'missing-recaptcha-version',\n INVALID_RECAPTCHA_VERSION = 'invalid-recaptcha-version',\n INVALID_REQ_TYPE = 'invalid-req-type',\n UNSUPPORTED_PASSWORD_POLICY_SCHEMA_VERSION = 'unsupported-password-policy-schema-version',\n PASSWORD_DOES_NOT_MEET_REQUIREMENTS = 'password-does-not-meet-requirements'\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_CREDENTIAL]:\n 'The supplied auth credential is incorrect, 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]:\n '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_PASSWORD]: 'A non-empty password must be provided',\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 [AuthErrorCode.MISSING_RECAPTCHA_TOKEN]:\n 'The reCAPTCHA token is missing when sending request to the backend.',\n [AuthErrorCode.INVALID_RECAPTCHA_TOKEN]:\n 'The reCAPTCHA token is invalid when sending request to the backend.',\n [AuthErrorCode.INVALID_RECAPTCHA_ACTION]:\n 'The reCAPTCHA action is invalid when sending request to the backend.',\n [AuthErrorCode.RECAPTCHA_NOT_ENABLED]:\n 'reCAPTCHA Enterprise integration is not enabled for this project.',\n [AuthErrorCode.MISSING_CLIENT_TYPE]:\n 'The reCAPTCHA client type is missing when sending request to the backend.',\n [AuthErrorCode.MISSING_RECAPTCHA_VERSION]:\n 'The reCAPTCHA version is missing when sending request to the backend.',\n [AuthErrorCode.INVALID_REQ_TYPE]: 'Invalid request parameters.',\n [AuthErrorCode.INVALID_RECAPTCHA_VERSION]:\n 'The reCAPTCHA version is invalid when sending request to the backend.',\n [AuthErrorCode.UNSUPPORTED_PASSWORD_POLICY_SCHEMA_VERSION]:\n 'The password policy received from the backend uses a schema version that is not supported by this version of the Firebase SDK.',\n [AuthErrorCode.PASSWORD_DOES_NOT_MEET_REQUIREMENTS]:\n 'The password does not meet the requirements.'\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]: {\n appName?: AppName;\n originalMessage?: string;\n };\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_LOGIN_CREDENTIALS: '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 RECAPTCHA_NOT_ENABLED: 'auth/recaptcha-not-enabled',\n MISSING_RECAPTCHA_TOKEN: 'auth/missing-recaptcha-token',\n INVALID_RECAPTCHA_TOKEN: 'auth/invalid-recaptcha-token',\n INVALID_RECAPTCHA_ACTION: 'auth/invalid-recaptcha-action',\n MISSING_CLIENT_TYPE: 'auth/missing-client-type',\n MISSING_RECAPTCHA_VERSION: 'auth/missing-recaptcha-version',\n INVALID_RECAPTCHA_VERSION: 'auth/invalid-recaptcha-version',\n INVALID_REQ_TYPE: 'auth/invalid-req-type'\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 _logWarn(msg: string, ...args: string[]): void {\n if (logClient.logLevel <= LogLevel.WARN) {\n logClient.warn(`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(\n auth: Auth,\n code: AuthErrorCode,\n message: string\n): FirebaseError {\n const errorMap = {\n ...(prodErrorMap as ErrorMapRetriever)(),\n [code]: message\n };\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(\n auth: Auth,\n object: object,\n instance: unknown\n): 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(\n auth,\n 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}\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 * @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 (\n /iphone|ipad|ipod/i.test(ua) ||\n (/macintosh/i.test(ua) && /mobile/i.test(ua))\n );\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 WEB_EXTENSION = 'WebExtension'\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 if (typeof globalThis !== 'undefined' && globalThis.fetch) {\n return globalThis.fetch;\n }\n if (typeof fetch !== 'undefined') {\n return 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 if (typeof globalThis !== 'undefined' && globalThis.Headers) {\n return globalThis.Headers;\n }\n if (typeof Headers !== 'undefined') {\n return 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 if (typeof globalThis !== 'undefined' && globalThis.Response) {\n return globalThis.Response;\n }\n if (typeof Response !== 'undefined') {\n return 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_LOGIN_CREDENTIALS = 'INVALID_LOGIN_CREDENTIALS',\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 RECAPTCHA_NOT_ENABLED = 'RECAPTCHA_NOT_ENABLED',\n MISSING_RECAPTCHA_TOKEN = 'MISSING_RECAPTCHA_TOKEN',\n INVALID_RECAPTCHA_TOKEN = 'INVALID_RECAPTCHA_TOKEN',\n INVALID_RECAPTCHA_ACTION = 'INVALID_RECAPTCHA_ACTION',\n MISSING_CLIENT_TYPE = 'MISSING_CLIENT_TYPE',\n MISSING_RECAPTCHA_VERSION = 'MISSING_RECAPTCHA_VERSION',\n INVALID_RECAPTCHA_VERSION = 'INVALID_RECAPTCHA_VERSION',\n INVALID_REQ_TYPE = 'INVALID_REQ_TYPE',\n PASSWORD_DOES_NOT_MEET_REQUIREMENTS = 'PASSWORD_DOES_NOT_MEET_REQUIREMENTS'\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.MISSING_PASSWORD,\n // Thrown if Email Enumeration Protection is enabled in the project and the email or password is\n // invalid.\n [ServerError.INVALID_LOGIN_CREDENTIALS]: AuthErrorCode.INVALID_CREDENTIAL,\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_CREDENTIAL,\n [ServerError.INVALID_PENDING_TOKEN]: AuthErrorCode.INVALID_CREDENTIAL,\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 [ServerError.PASSWORD_DOES_NOT_MEET_REQUIREMENTS]:\n AuthErrorCode.PASSWORD_DOES_NOT_MEET_REQUIREMENTS,\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_CREDENTIAL,\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 // Recaptcha related errors.\n [ServerError.RECAPTCHA_NOT_ENABLED]: AuthErrorCode.RECAPTCHA_NOT_ENABLED,\n [ServerError.MISSING_RECAPTCHA_TOKEN]: AuthErrorCode.MISSING_RECAPTCHA_TOKEN,\n [ServerError.INVALID_RECAPTCHA_TOKEN]: AuthErrorCode.INVALID_RECAPTCHA_TOKEN,\n [ServerError.INVALID_RECAPTCHA_ACTION]:\n AuthErrorCode.INVALID_RECAPTCHA_ACTION,\n [ServerError.MISSING_CLIENT_TYPE]: AuthErrorCode.MISSING_CLIENT_TYPE,\n [ServerError.MISSING_RECAPTCHA_VERSION]:\n AuthErrorCode.MISSING_RECAPTCHA_VERSION,\n [ServerError.INVALID_RECAPTCHA_VERSION]:\n AuthErrorCode.INVALID_RECAPTCHA_VERSION,\n [ServerError.INVALID_REQ_TYPE]: AuthErrorCode.INVALID_REQ_TYPE\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 {\n _createError,\n _errorWithCustomMessage,\n _fail\n} 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 X_FIREBASE_APP_CHECK = 'X-Firebase-AppCheck'\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_MFA_ENROLLMENT = '/v2/accounts/mfaEnrollment:start',\n FINALIZE_MFA_ENROLLMENT = '/v2/accounts/mfaEnrollment:finalize',\n START_MFA_SIGN_IN = '/v2/accounts/mfaSignIn:start',\n FINALIZE_MFA_SIGN_IN = '/v2/accounts/mfaSignIn:finalize',\n WITHDRAW_MFA = '/v2/accounts/mfaEnrollment:withdraw',\n GET_PROJECT_CONFIG = '/v1/projects',\n GET_RECAPTCHA_CONFIG = '/v2/recaptchaConfig',\n GET_PASSWORD_POLICY = '/v2/passwordPolicy',\n TOKEN = '/v1/token',\n REVOKE_TOKEN = '/v2/accounts:revokeToken'\n}\n\nexport const enum RecaptchaClientType {\n WEB = 'CLIENT_TYPE_WEB',\n ANDROID = 'CLIENT_TYPE_ANDROID',\n IOS = 'CLIENT_TYPE_IOS'\n}\n\nexport const enum RecaptchaVersion {\n ENTERPRISE = 'RECAPTCHA_ENTERPRISE'\n}\n\nexport const enum RecaptchaActionName {\n SIGN_IN_WITH_PASSWORD = 'signInWithPassword',\n GET_OOB_CODE = 'getOobCode',\n SIGN_UP_PASSWORD = 'signUpPassword'\n}\n\nexport const enum EnforcementState {\n ENFORCE = 'ENFORCE',\n AUDIT = 'AUDIT',\n OFF = 'OFF',\n ENFORCEMENT_STATE_UNSPECIFIED = 'ENFORCEMENT_STATE_UNSPECIFIED'\n}\n\n// Providers that have reCAPTCHA Enterprise support.\nexport const enum RecaptchaProvider {\n EMAIL_PASSWORD_PROVIDER = 'EMAIL_PASSWORD_PROVIDER'\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 } else if (serverErrorCode === ServerError.USER_DISABLED) {\n throw _makeTaggedError(auth, AuthErrorCode.USER_DISABLED, 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 // Changing this to a different error code will log user out when there is a network error\n // because we treat any error other than NETWORK_REQUEST_FAILED as token is invalid.\n // https://github.com/firebase/firebase-js-sdk/blob/4fbc73610d70be4e0852e7de63a39cb7897e8546/packages/auth/src/core/auth/auth_impl.ts#L309-L316\n _fail(auth, AuthErrorCode.NETWORK_REQUEST_FAILED, { 'message': String(e) });\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\nexport function _parseEnforcementState(\n enforcementStateStr: string\n): EnforcementState {\n switch (enforcementStateStr) {\n case 'ENFORCE':\n return EnforcementState.ENFORCE;\n case 'AUDIT':\n return EnforcementState.AUDIT;\n case 'OFF':\n return EnforcementState.OFF;\n default:\n return EnforcementState.ENFORCEMENT_STATE_UNSPECIFIED;\n }\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(\n _createError(this.auth, AuthErrorCode.NETWORK_REQUEST_FAILED)\n );\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 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 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(\n 'Caught error parsing JWT payload as JSON',\n (e as Error)?.toString()\n );\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 { FirebaseError } from '@firebase/util';\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 (\n (e as FirebaseError)?.code ===\n `auth/${AuthErrorCode.NETWORK_REQUEST_FAILED}`\n ) {\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 _performApiRequest,\n _addTidIfNecessary,\n HttpMethod,\n HttpHeader,\n Endpoint\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 TokenType {\n REFRESH_TOKEN = 'REFRESH_TOKEN',\n ACCESS_TOKEN = 'ACCESS_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 interface RevokeTokenRequest {\n providerId: string;\n tokenType: TokenType;\n token: string;\n idToken: string;\n tenantId?: string;\n}\n\nexport interface RevokeTokenResponse {}\n\nexport async function requestStsToken(\n auth: Auth,\n refreshToken: string\n): Promise<RequestStsTokenResponse> {\n const response =\n 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\nexport async function revokeToken(\n auth: Auth,\n request: RevokeTokenRequest\n): Promise<RevokeTokenResponse> {\n return _performApiRequest<RevokeTokenRequest, RevokeTokenResponse>(\n auth,\n HttpMethod.POST,\n Endpoint.REVOKE_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 { 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 const newUser = new UserImpl({\n ...this,\n auth,\n stsTokenManager: this.stsTokenManager._clone()\n });\n newUser.metadata._copy(this.metadata);\n return newUser;\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\n ): 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\n ): Promise<void> =>\n 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 (_) {\n /* swallow error */\n }\n }\n\n throw this.auth._errorFactory.create(AuthErrorCode.LOGIN_BLOCKED, {\n originalMessage: (e as Error)?.message\n });\n }\n }\n}\n","/**\n * @license\n * Copyright 2023 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 _performApiRequest,\n Endpoint,\n HttpMethod,\n _addTidIfNecessary\n} from '../index';\nimport { Auth } from '../../model/public_types';\n\n/**\n * Request object for fetching the password policy.\n */\nexport interface GetPasswordPolicyRequest {\n tenantId?: string;\n}\n\n/**\n * Response object for fetching the password policy.\n */\nexport interface GetPasswordPolicyResponse {\n customStrengthOptions: {\n minPasswordLength?: number;\n maxPasswordLength?: number;\n containsLowercaseCharacter?: boolean;\n containsUppercaseCharacter?: boolean;\n containsNumericCharacter?: boolean;\n containsNonAlphanumericCharacter?: boolean;\n };\n allowedNonAlphanumericCharacters?: string[];\n enforcementState: string;\n forceUpgradeOnSignin?: boolean;\n schemaVersion: number;\n}\n\n/**\n * Fetches the password policy for the currently set tenant or the project if no tenant is set.\n *\n * @param auth Auth object.\n * @param request Password policy request.\n * @returns Password policy response.\n */\nexport async function _getPasswordPolicy(\n auth: Auth,\n request: GetPasswordPolicyRequest = {}\n): Promise<GetPasswordPolicyResponse> {\n return _performApiRequest<\n GetPasswordPolicyRequest,\n GetPasswordPolicyResponse\n >(\n auth,\n HttpMethod.GET,\n Endpoint.GET_PASSWORD_POLICY,\n _addTidIfNecessary(auth, request)\n );\n}\n","/**\n * @license\n * Copyright 2023 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 { GetPasswordPolicyResponse } from '../../api/password_policy/get_password_policy';\nimport {\n PasswordPolicyCustomStrengthOptions,\n PasswordPolicyInternal,\n PasswordValidationStatusInternal\n} from '../../model/password_policy';\nimport { PasswordValidationStatus } from '../../model/public_types';\n\n// Minimum min password length enforced by the backend, even if no minimum length is set.\nconst MINIMUM_MIN_PASSWORD_LENGTH = 6;\n\n/**\n * Stores password policy requirements and provides password validation against the policy.\n *\n * @internal\n */\nexport class PasswordPolicyImpl implements PasswordPolicyInternal {\n readonly customStrengthOptions: PasswordPolicyCustomStrengthOptions;\n readonly allowedNonAlphanumericCharacters: string;\n readonly enforcementState: string;\n readonly forceUpgradeOnSignin: boolean;\n readonly schemaVersion: number;\n\n constructor(response: GetPasswordPolicyResponse) {\n // Only include custom strength options defined in the response.\n const responseOptions = response.customStrengthOptions;\n this.customStrengthOptions = {};\n // TODO: Remove once the backend is updated to include the minimum min password length instead of undefined when there is no minimum length set.\n this.customStrengthOptions.minPasswordLength =\n responseOptions.minPasswordLength ?? MINIMUM_MIN_PASSWORD_LENGTH;\n if (responseOptions.maxPasswordLength) {\n this.customStrengthOptions.maxPasswordLength =\n responseOptions.maxPasswordLength;\n }\n if (responseOptions.containsLowercaseCharacter !== undefined) {\n this.customStrengthOptions.containsLowercaseLetter =\n responseOptions.containsLowercaseCharacter;\n }\n if (responseOptions.containsUppercaseCharacter !== undefined) {\n this.customStrengthOptions.containsUppercaseLetter =\n responseOptions.containsUppercaseCharacter;\n }\n if (responseOptions.containsNumericCharacter !== undefined) {\n this.customStrengthOptions.containsNumericCharacter =\n responseOptions.containsNumericCharacter;\n }\n if (responseOptions.containsNonAlphanumericCharacter !== undefined) {\n this.customStrengthOptions.containsNonAlphanumericCharacter =\n responseOptions.containsNonAlphanumericCharacter;\n }\n\n this.enforcementState = response.enforcementState;\n if (this.enforcementState === 'ENFORCEMENT_STATE_UNSPECIFIED') {\n this.enforcementState = 'OFF';\n }\n\n // Use an empty string if no non-alphanumeric characters are specified in the response.\n this.allowedNonAlphanumericCharacters =\n response.allowedNonAlphanumericCharacters?.join('') ?? '';\n\n this.forceUpgradeOnSignin = response.forceUpgradeOnSignin ?? false;\n this.schemaVersion = response.schemaVersion;\n }\n\n validatePassword(password: string): PasswordValidationStatus {\n const status: PasswordValidationStatusInternal = {\n isValid: true,\n passwordPolicy: this\n };\n\n // Check the password length and character options.\n this.validatePasswordLengthOptions(password, status);\n this.validatePasswordCharacterOptions(password, status);\n\n // Combine the status into single isValid property.\n status.isValid &&= status.meetsMinPasswordLength ?? true;\n status.isValid &&= status.meetsMaxPasswordLength ?? true;\n status.isValid &&= status.containsLowercaseLetter ?? true;\n status.isValid &&= status.containsUppercaseLetter ?? true;\n status.isValid &&= status.containsNumericCharacter ?? true;\n status.isValid &&= status.containsNonAlphanumericCharacter ?? true;\n\n return status;\n }\n\n /**\n * Validates that the password meets the length options for the policy.\n *\n * @param password Password to validate.\n * @param status Validation status.\n */\n private validatePasswordLengthOptions(\n password: string,\n status: PasswordValidationStatusInternal\n ): void {\n const minPasswordLength = this.customStrengthOptions.minPasswordLength;\n const maxPasswordLength = this.customStrengthOptions.maxPasswordLength;\n if (minPasswordLength) {\n status.meetsMinPasswordLength = password.length >= minPasswordLength;\n }\n if (maxPasswordLength) {\n status.meetsMaxPasswordLength = password.length <= maxPasswordLength;\n }\n }\n\n /**\n * Validates that the password meets the character options for the policy.\n *\n * @param password Password to validate.\n * @param status Validation status.\n */\n private validatePasswordCharacterOptions(\n password: string,\n status: PasswordValidationStatusInternal\n ): void {\n // Assign statuses for requirements even if the password is an empty string.\n this.updatePasswordCharacterOptionsStatuses(\n status,\n /* containsLowercaseCharacter= */ false,\n /* containsUppercaseCharacter= */ false,\n /* containsNumericCharacter= */ false,\n /* containsNonAlphanumericCharacter= */ false\n );\n\n let passwordChar;\n for (let i = 0; i < password.length; i++) {\n passwordChar = password.charAt(i);\n this.updatePasswordCharacterOptionsStatuses(\n status,\n /* containsLowercaseCharacter= */ passwordChar >= 'a' &&\n passwordChar <= 'z',\n /* containsUppercaseCharacter= */ passwordChar >= 'A' &&\n passwordChar <= 'Z',\n /* containsNumericCharacter= */ passwordChar >= '0' &&\n passwordChar <= '9',\n /* containsNonAlphanumericCharacter= */ this.allowedNonAlphanumericCharacters.includes(\n passwordChar\n )\n );\n }\n }\n\n /**\n * Updates the running validation status with the statuses for the character options.\n * Expected to be called each time a character is processed to update each option status\n * based on the current character.\n *\n * @param status Validation status.\n * @param containsLowercaseCharacter Whether the character is a lowercase letter.\n * @param containsUppercaseCharacter Whether the character is an uppercase letter.\n * @param containsNumericCharacter Whether the character is a numeric character.\n * @param containsNonAlphanumericCharacter Whether the character is a non-alphanumeric character.\n */\n private updatePasswordCharacterOptionsStatuses(\n status: PasswordValidationStatusInternal,\n containsLowercaseCharacter: boolean,\n containsUppercaseCharacter: boolean,\n containsNumericCharacter: boolean,\n containsNonAlphanumericCharacter: boolean\n ): void {\n if (this.customStrengthOptions.containsLowercaseLetter) {\n status.containsLowercaseLetter ||= containsLowercaseCharacter;\n }\n if (this.customStrengthOptions.containsUppercaseLetter) {\n status.containsUppercaseLetter ||= containsUppercaseCharacter;\n }\n if (this.customStrengthOptions.containsNumericCharacter) {\n status.containsNumericCharacter ||= containsNumericCharacter;\n }\n if (this.customStrengthOptions.containsNonAlphanumericCharacter) {\n status.containsNonAlphanumericCharacter ||=\n containsNonAlphanumericCharacter;\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 { _FirebaseService, FirebaseApp } from '@firebase/app';\nimport { Provider } from '@firebase/component';\nimport { AppCheckInternalComponentName } from '@firebase/app-check-interop-types';\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 PasswordValidationStatus\n} from '../../model/public_types';\nimport {\n createSubscribe,\n ErrorFactory,\n FirebaseError,\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 {\n RevokeTokenRequest,\n TokenType,\n revokeToken\n} from '../../api/authentication/token';\nimport { AuthMiddlewareQueue } from './middleware';\nimport { RecaptchaConfig } from '../../platform_browser/recaptcha/recaptcha';\nimport { _logWarn } from '../util/log';\nimport { _getPasswordPolicy } from '../../api/password_policy/get_password_policy';\nimport { PasswordPolicyInternal } from '../../model/password_policy';\nimport { PasswordPolicyImpl } from './password_policy_impl';\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 private readonly EXPECTED_PASSWORD_POLICY_SCHEMA_VERSION: number = 1;\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 _agentRecaptchaConfig: RecaptchaConfig | null = null;\n _tenantRecaptchaConfigs: Record<string, RecaptchaConfig> = {};\n _projectPasswordPolicy: PasswordPolicyInternal | null = null;\n _tenantPasswordPolicies: Record<string, PasswordPolicyInternal> = {};\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 private readonly appCheckServiceProvider: Provider<AppCheckInternalComponentName>,\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) {\n /* Ignore the error */\n }\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, () =>\n Promise.reject(e)\n );\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 (\n (e as FirebaseError)?.code !==\n `auth/${AuthErrorCode.NETWORK_REQUEST_FAILED}`\n ) {\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(\n user: User | null,\n skipBeforeStateCallbacks: boolean = false\n ): 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 _getRecaptchaConfig(): RecaptchaConfig | null {\n if (this.tenantId == null) {\n return this._agentRecaptchaConfig;\n } else {\n return this._tenantRecaptchaConfigs[this.tenantId];\n }\n }\n\n async validatePassword(password: string): Promise<PasswordValidationStatus> {\n if (!this._getPasswordPolicyInternal()) {\n await this._updatePasswordPolicy();\n }\n\n // Password policy will be defined after fetching.\n const passwordPolicy: PasswordPolicyInternal =\n this._getPasswordPolicyInternal()!;\n\n // Check that the policy schema version is supported by the SDK.\n // TODO: Update this logic to use a max supported policy schema version once we have multiple schema versions.\n if (\n passwordPolicy.schemaVersion !==\n this.EXPECTED_PASSWORD_POLICY_SCHEMA_VERSION\n ) {\n return Promise.reject(\n this._errorFactory.create(\n AuthErrorCode.UNSUPPORTED_PASSWORD_POLICY_SCHEMA_VERSION,\n {}\n )\n );\n }\n\n return passwordPolicy.validatePassword(password);\n }\n\n _getPasswordPolicyInternal(): PasswordPolicyInternal | null {\n if (this.tenantId === null) {\n return this._projectPasswordPolicy;\n } else {\n return this._tenantPasswordPolicies[this.tenantId];\n }\n }\n\n async _updatePasswordPolicy(): Promise<void> {\n const response = await _getPasswordPolicy(this);\n\n const passwordPolicy: PasswordPolicyInternal = new PasswordPolicyImpl(\n response\n );\n\n if (this.tenantId === null) {\n this._projectPasswordPolicy = passwordPolicy;\n } else {\n this._tenantPasswordPolicies[this.tenantId] = passwordPolicy;\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 authStateReady(): Promise<void> {\n return new Promise((resolve, reject) => {\n if (this.currentUser) {\n resolve();\n } else {\n const unsubscribe = this.onAuthStateChanged(() => {\n unsubscribe();\n resolve();\n }, reject);\n }\n });\n }\n\n /**\n * Revokes the given access token. Currently only supports Apple OAuth access tokens.\n */\n async revokeAccessToken(token: string): Promise<void> {\n if (this.currentUser) {\n const idToken = await this.currentUser.getIdToken();\n // Generalize this to accept other providers once supported.\n const request: RevokeTokenRequest = {\n providerId: 'apple.com',\n tokenType: TokenType.ACCESS_TOKEN,\n token,\n idToken\n };\n if (this.tenantId != null) {\n request.tenantId = this.tenantId;\n }\n await revokeToken(this, request);\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 let isUnsubscribed = false;\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(() => {\n if (isUnsubscribed) {\n return;\n }\n cb(this.currentUser);\n });\n\n if (typeof nextOrObserver === 'function') {\n const unsubscribe = subscription.addObserver(\n nextOrObserver,\n error,\n completed\n );\n return () => {\n isUnsubscribed = true;\n unsubscribe();\n };\n } else {\n const unsubscribe = subscription.addObserver(nextOrObserver);\n return () => {\n isUnsubscribed = true;\n unsubscribe();\n };\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 }\n if (user && this.isProactiveRefreshEnabled) {\n user._startProactiveRefresh();\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\n .getImmediate({\n optional: true\n })\n ?.getHeartbeatsHeader();\n if (heartbeatsHeader) {\n headers[HttpHeader.X_FIREBASE_CLIENT] = heartbeatsHeader;\n }\n\n // If the App Check service exists, add the App Check token in the headers\n const appCheckToken = await this._getAppCheckToken();\n if (appCheckToken) {\n headers[HttpHeader.X_FIREBASE_APP_CHECK] = appCheckToken;\n }\n\n return headers;\n }\n\n async _getAppCheckToken(): Promise<string | undefined> {\n const appCheckTokenResult = await this.appCheckServiceProvider\n .getImmediate({ optional: true })\n ?.getToken();\n if (appCheckTokenResult?.error) {\n // Context: appCheck.getToken() will never throw even if an error happened.\n // In the error case, a dummy token will be returned along with an error field describing\n // the error. In general, we shouldn't care about the error condition and just use\n // the token (actual or dummy) to send requests.\n _logWarn(\n `Error while retrieving App Check token: ${appCheckTokenResult.error}`\n );\n }\n return appCheckTokenResult?.token;\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<TokenListener, 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 case ClientPlatform.WEB_EXTENSION:\n return 'web-extension';\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 =\n container.getProvider<'heartbeat'>('heartbeat');\n const appCheckServiceProvider =\n container.getProvider<'app-check-internal'>('app-check-internal');\n const { apiKey, authDomain } = app.options;\n\n _assert(\n apiKey && !apiKey.includes(':'),\n AuthErrorCode.INVALID_API_KEY,\n { appName: app.name }\n );\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(\n app,\n heartbeatServiceProvider,\n appCheckServiceProvider,\n config\n );\n _initializeAuthInstance(authInstance, deps);\n\n return authInstance;\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 =\n this.handlersMap[eventType];\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, GreCAPTCHATopLevel } 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 | GreCAPTCHATopLevel;\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 if (result.length !== 0) {\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 }\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 TOTP: 'totp'\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 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 { RecaptchaParameters } from '../../model/public_types';\nimport {\n GetRecaptchaConfigResponse,\n RecaptchaEnforcementProviderState\n} from '../../api/authentication/recaptcha';\nimport { EnforcementState, _parseEnforcementState } from '../../api/index';\n\n// reCAPTCHA v2 interface\nexport interface Recaptcha {\n render: (container: HTMLElement, parameters: RecaptchaParameters) => number;\n getResponse: (id: number) => string;\n execute: (id: number) => unknown;\n reset: (id: number) => unknown;\n}\n\nexport function isV2(\n grecaptcha: Recaptcha | GreCAPTCHA | undefined\n): grecaptcha is Recaptcha {\n return (\n grecaptcha !== undefined &&\n (grecaptcha as Recaptcha).getResponse !== undefined\n );\n}\n\n// reCAPTCHA Enterprise & v3 shared interface\nexport interface GreCAPTCHATopLevel extends GreCAPTCHA {\n enterprise: GreCAPTCHA;\n}\n\n// reCAPTCHA Enterprise interface\nexport interface GreCAPTCHA {\n ready: (callback: () => void) => void;\n execute: (siteKey: string, options: { action: string }) => Promise<string>;\n render: (\n container: string | HTMLElement,\n parameters: GreCAPTCHARenderOption\n ) => string;\n}\n\nexport interface GreCAPTCHARenderOption {\n sitekey: string;\n size: 'invisible';\n}\n\nexport function isEnterprise(\n grecaptcha: Recaptcha | GreCAPTCHA | undefined\n): grecaptcha is GreCAPTCHATopLevel {\n return (\n grecaptcha !== undefined &&\n (grecaptcha as GreCAPTCHATopLevel).enterprise !== undefined\n );\n}\n\n// TODO(chuanr): Replace this with the AuthWindow after resolving the dependency issue in Node.js env.\ndeclare global {\n interface Window {\n grecaptcha?: Recaptcha | GreCAPTCHATopLevel;\n }\n}\n\nexport class RecaptchaConfig {\n /**\n * The reCAPTCHA site key.\n */\n siteKey: string = '';\n\n /**\n * The list of providers and their enablement status for reCAPTCHA Enterprise.\n */\n recaptchaEnforcementState: RecaptchaEnforcementProviderState[] = [];\n\n constructor(response: GetRecaptchaConfigResponse) {\n if (response.recaptchaKey === undefined) {\n throw new Error('recaptchaKey undefined');\n }\n // Example response.recaptchaKey: \"projects/proj123/keys/sitekey123\"\n this.siteKey = response.recaptchaKey.split('/')[3];\n this.recaptchaEnforcementState = response.recaptchaEnforcementState;\n }\n\n /**\n * Returns the reCAPTCHA Enterprise enforcement state for the given provider.\n *\n * @param providerStr - The provider whose enforcement state is to be returned.\n * @returns The reCAPTCHA Enterprise enforcement state for the given provider.\n */\n getProviderEnforcementState(providerStr: string): EnforcementState | null {\n if (\n !this.recaptchaEnforcementState ||\n this.recaptchaEnforcementState.length === 0\n ) {\n return null;\n }\n\n for (const recaptchaEnforcementState of this.recaptchaEnforcementState) {\n if (\n recaptchaEnforcementState.provider &&\n recaptchaEnforcementState.provider === providerStr\n ) {\n return _parseEnforcementState(\n recaptchaEnforcementState.enforcementState\n );\n }\n }\n return null;\n }\n\n /**\n * Returns true if the reCAPTCHA Enterprise enforcement state for the provider is set to ENFORCE or AUDIT.\n *\n * @param providerStr - The provider whose enablement state is to be returned.\n * @returns Whether or not reCAPTCHA Enterprise protection is enabled for the given provider.\n */\n isProviderEnabled(providerStr: string): boolean {\n return (\n this.getProviderEnforcementState(providerStr) ===\n EnforcementState.ENFORCE ||\n this.getProviderEnforcementState(providerStr) === EnforcementState.AUDIT\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 RecaptchaClientType,\n RecaptchaVersion,\n _performApiRequest,\n _addTidIfNecessary\n} from '../index';\nimport { Auth } from '../../model/public_types';\n\ninterface GetRecaptchaParamResponse {\n recaptchaSiteKey?: string;\n}\n\nexport async function getRecaptchaParams(auth: Auth): Promise<string> {\n return (\n (\n await _performApiRequest<void, GetRecaptchaParamResponse>(\n auth,\n HttpMethod.GET,\n Endpoint.GET_RECAPTCHA_PARAM\n )\n ).recaptchaSiteKey || ''\n );\n}\n\n// The following functions are for reCAPTCHA enterprise integration.\ninterface GetRecaptchaConfigRequest {\n tenantId?: string;\n clientType?: RecaptchaClientType;\n version?: RecaptchaVersion;\n}\n\nexport interface RecaptchaEnforcementProviderState {\n provider: string;\n enforcementState: string;\n}\n\nexport interface GetRecaptchaConfigResponse {\n recaptchaKey: string;\n recaptchaEnforcementState: RecaptchaEnforcementProviderState[];\n}\n\nexport async function getRecaptchaConfig(\n auth: Auth,\n request: GetRecaptchaConfigRequest\n): Promise<GetRecaptchaConfigResponse> {\n return _performApiRequest<\n GetRecaptchaConfigRequest,\n GetRecaptchaConfigResponse\n >(\n auth,\n HttpMethod.GET,\n Endpoint.GET_RECAPTCHA_CONFIG,\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\ninterface ExternalJSProvider {\n loadJS(url: string): Promise<Event>;\n recaptchaV2Script: string;\n recaptchaEnterpriseScript: string;\n gapiScript: string;\n}\n\nlet externalJSProvider: ExternalJSProvider = {\n async loadJS() {\n throw new Error('Unable to load external scripts');\n },\n\n recaptchaV2Script: '',\n recaptchaEnterpriseScript: '',\n gapiScript: ''\n};\n\nexport function _setExternalJSProvider(p: ExternalJSProvider): void {\n externalJSProvider = p;\n}\n\nexport function _loadJS(url: string): Promise<Event> {\n return externalJSProvider.loadJS(url);\n}\n\nexport function _recaptchaV2ScriptUrl(): string {\n return externalJSProvider.recaptchaV2Script;\n}\n\nexport function _recaptchaEnterpriseScriptUrl(): string {\n return externalJSProvider.recaptchaEnterpriseScript;\n}\n\nexport function _gapiScriptUrl(): string {\n return externalJSProvider.gapiScript;\n}\n\nexport function _generateCallbackName(prefix: string): string {\n return `__${prefix}${Math.floor(Math.random() * 1000000)}`;\n}\n","/* eslint-disable @typescript-eslint/no-require-imports */\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 { isEnterprise, RecaptchaConfig } from './recaptcha';\nimport { getRecaptchaConfig } from '../../api/authentication/recaptcha';\nimport {\n RecaptchaClientType,\n RecaptchaVersion,\n RecaptchaActionName,\n RecaptchaProvider\n} from '../../api';\n\nimport { Auth } from '../../model/public_types';\nimport { AuthInternal } from '../../model/auth';\nimport { _castAuth } from '../../core/auth/auth_impl';\nimport * as jsHelpers from '../load_js';\nimport { AuthErrorCode } from '../../core/errors';\n\nexport const RECAPTCHA_ENTERPRISE_VERIFIER_TYPE = 'recaptcha-enterprise';\nexport const FAKE_TOKEN = 'NO_RECAPTCHA';\n\nexport class RecaptchaEnterpriseVerifier {\n /**\n * Identifies the type of application verifier (e.g. \"recaptcha-enterprise\").\n */\n readonly type = RECAPTCHA_ENTERPRISE_VERIFIER_TYPE;\n\n private readonly auth: AuthInternal;\n\n /**\n *\n * @param authExtern - The corresponding Firebase {@link Auth} instance.\n *\n */\n constructor(authExtern: Auth) {\n this.auth = _castAuth(authExtern);\n }\n\n /**\n * Executes the verification process.\n *\n * @returns A Promise for a token that can be used to assert the validity of a request.\n */\n async verify(\n action: string = 'verify',\n forceRefresh = false\n ): Promise<string> {\n async function retrieveSiteKey(auth: AuthInternal): Promise<string> {\n if (!forceRefresh) {\n if (auth.tenantId == null && auth._agentRecaptchaConfig != null) {\n return auth._agentRecaptchaConfig.siteKey;\n }\n if (\n auth.tenantId != null &&\n auth._tenantRecaptchaConfigs[auth.tenantId] !== undefined\n ) {\n return auth._tenantRecaptchaConfigs[auth.tenantId].siteKey;\n }\n }\n\n return new Promise<string>(async (resolve, reject) => {\n getRecaptchaConfig(auth, {\n clientType: RecaptchaClientType.WEB,\n version: RecaptchaVersion.ENTERPRISE\n })\n .then(response => {\n if (response.recaptchaKey === undefined) {\n reject(new Error('recaptcha Enterprise site key undefined'));\n } else {\n const config = new RecaptchaConfig(response);\n if (auth.tenantId == null) {\n auth._agentRecaptchaConfig = config;\n } else {\n auth._tenantRecaptchaConfigs[auth.tenantId] = config;\n }\n return resolve(config.siteKey);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n }\n\n function retrieveRecaptchaToken(\n siteKey: string,\n resolve: (value: string | PromiseLike<string>) => void,\n reject: (reason?: unknown) => void\n ): void {\n const grecaptcha = window.grecaptcha;\n if (isEnterprise(grecaptcha)) {\n grecaptcha.enterprise.ready(() => {\n grecaptcha.enterprise\n .execute(siteKey, { action })\n .then(token => {\n resolve(token);\n })\n .catch(() => {\n resolve(FAKE_TOKEN);\n });\n });\n } else {\n reject(Error('No reCAPTCHA enterprise script loaded.'));\n }\n }\n\n return new Promise<string>((resolve, reject) => {\n retrieveSiteKey(this.auth)\n .then(siteKey => {\n if (!forceRefresh && isEnterprise(window.grecaptcha)) {\n retrieveRecaptchaToken(siteKey, resolve, reject);\n } else {\n if (typeof window === 'undefined') {\n reject(\n new Error('RecaptchaVerifier is only supported in browser')\n );\n return;\n }\n let url = jsHelpers._recaptchaEnterpriseScriptUrl();\n if (url.length !== 0) {\n url += siteKey;\n }\n jsHelpers\n ._loadJS(url)\n .then(() => {\n retrieveRecaptchaToken(siteKey, resolve, reject);\n })\n .catch(error => {\n reject(error);\n });\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n }\n}\n\nexport async function injectRecaptchaFields<T>(\n auth: AuthInternal,\n request: T,\n action: RecaptchaActionName,\n captchaResp = false\n): Promise<T> {\n const verifier = new RecaptchaEnterpriseVerifier(auth);\n let captchaResponse;\n try {\n captchaResponse = await verifier.verify(action);\n } catch (error) {\n captchaResponse = await verifier.verify(action, true);\n }\n const newRequest = { ...request };\n if (!captchaResp) {\n Object.assign(newRequest, { captchaResponse });\n } else {\n Object.assign(newRequest, { 'captchaResp': captchaResponse });\n }\n Object.assign(newRequest, { 'clientType': RecaptchaClientType.WEB });\n Object.assign(newRequest, {\n 'recaptchaVersion': RecaptchaVersion.ENTERPRISE\n });\n return newRequest;\n}\n\ntype ActionMethod<TRequest, TResponse> = (\n auth: Auth,\n request: TRequest\n) => Promise<TResponse>;\n\nexport async function handleRecaptchaFlow<TRequest, TResponse>(\n authInstance: AuthInternal,\n request: TRequest,\n actionName: RecaptchaActionName,\n actionMethod: ActionMethod<TRequest, TResponse>\n): Promise<TResponse> {\n if (\n authInstance\n ._getRecaptchaConfig()\n ?.isProviderEnabled(RecaptchaProvider.EMAIL_PASSWORD_PROVIDER)\n ) {\n const requestWithRecaptcha = await injectRecaptchaFields(\n authInstance,\n request,\n actionName,\n actionName === RecaptchaActionName.GET_OOB_CODE\n );\n return actionMethod(authInstance, requestWithRecaptcha);\n } else {\n return actionMethod(authInstance, request).catch(async error => {\n if (error.code === `auth/${AuthErrorCode.MISSING_RECAPTCHA_TOKEN}`) {\n console.log(\n `${actionName} is protected by reCAPTCHA Enterprise for this project. Automatically triggering the reCAPTCHA flow and restarting the flow.`\n );\n const requestWithRecaptcha = await injectRecaptchaFields(\n authInstance,\n request,\n actionName,\n actionName === RecaptchaActionName.GET_OOB_CODE\n );\n return actionMethod(authInstance, requestWithRecaptcha);\n } else {\n return Promise.reject(error);\n }\n });\n }\n}\n\nexport async function _initializeRecaptchaConfig(auth: Auth): Promise<void> {\n const authInternal = _castAuth(auth);\n\n const response = await getRecaptchaConfig(authInternal, {\n clientType: RecaptchaClientType.WEB,\n version: RecaptchaVersion.ENTERPRISE\n });\n\n const config = new RecaptchaConfig(response);\n if (authInternal.tenantId == null) {\n authInternal._agentRecaptchaConfig = config;\n } else {\n authInternal._tenantRecaptchaConfigs[authInternal.tenantId] = config;\n }\n\n if (config.isProviderEnabled(RecaptchaProvider.EMAIL_PASSWORD_PROVIDER)) {\n const verifier = new RecaptchaEnterpriseVerifier(authInternal);\n void verifier.verify();\n }\n}\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 (typeof window !== 'undefined' && typeof document !== 'undefined') {\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';\nimport { SignUpRequest, SignUpResponse } from '../authentication/sign_up';\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\n// Used for linking an email/password account to an existing idToken. Uses the same request/response\n// format as updateEmailPassword.\nexport async function linkEmailPassword(\n auth: Auth,\n request: SignUpRequest\n): Promise<SignUpResponse> {\n return _performApiRequest<SignUpRequest, SignUpResponse>(\n auth,\n HttpMethod.POST,\n Endpoint.SIGN_UP,\n request\n );\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 RecaptchaClientType,\n RecaptchaVersion,\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 captchaResponse?: string;\n clientType?: RecaptchaClientType;\n recaptchaVersion?: RecaptchaVersion;\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 clientType?: RecaptchaClientType;\n recaptchaVersion?: RecaptchaVersion;\n}\n\nexport interface EmailSignInRequest extends GetOobCodeRequest {\n requestType: ActionCodeOperation.EMAIL_SIGNIN;\n email: string;\n captchaResp?: string;\n clientType?: RecaptchaClientType;\n recaptchaVersion?: RecaptchaVersion;\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 { linkEmailPassword } from '../../api/account_management/email_and_password';\nimport {\n signInWithPassword,\n SignInWithPasswordRequest\n} 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';\nimport { handleRecaptchaFlow } from '../../platform_browser/recaptcha/recaptcha_enterprise_verifier';\nimport { RecaptchaActionName, RecaptchaClientType } from '../../api';\nimport { SignUpRequest } from '../../api/authentication/sign_up';\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 const request: SignInWithPasswordRequest = {\n returnSecureToken: true,\n email: this._email,\n password: this._password,\n clientType: RecaptchaClientType.WEB\n };\n return handleRecaptchaFlow(\n auth,\n request,\n RecaptchaActionName.SIGN_IN_WITH_PASSWORD,\n signInWithPassword\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 const request: SignUpRequest = {\n idToken,\n returnSecureToken: true,\n email: this._email,\n password: this._password,\n clientType: RecaptchaClientType.WEB\n };\n return handleRecaptchaFlow(\n auth,\n request,\n RecaptchaActionName.SIGN_UP_PASSWORD,\n linkEmailPassword\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 {@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 { providerId, signInMethod, pendingToken }: Record<string, string> =\n 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 RecaptchaClientType,\n RecaptchaVersion,\n _addTidIfNecessary,\n _performSignInRequest\n} from '../index';\nimport { IdTokenResponse } from '../../model/id_token';\nimport { Auth } from '../../model/public_types';\n\nexport interface SignUpRequest {\n idToken?: string;\n returnSecureToken?: boolean;\n email?: string;\n password?: string;\n tenantId?: string;\n captchaResponse?: string;\n clientType?: RecaptchaClientType;\n recaptchaVersion?: RecaptchaVersion;\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 { FirebaseError } from '@firebase/util';\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 as FirebaseError)?.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 * or a `TOKEN_EXPIRED` 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 {\n FactorId,\n MultiFactorInfo,\n PhoneMultiFactorInfo,\n TotpMultiFactorInfo\n} from '../model/public_types';\nimport {\n PhoneMfaEnrollment,\n MfaEnrollment,\n TotpMfaEnrollment\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 } else if ('totpInfo' in enrollment) {\n return TotpMultiFactorInfoImpl._fromServerResponse(auth, enrollment);\n }\n return _fail(auth, AuthErrorCode.INTERNAL_ERROR);\n }\n}\n\nexport class PhoneMultiFactorInfoImpl\n extends MultiFactorInfoImpl\n implements PhoneMultiFactorInfo\n{\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 as PhoneMfaEnrollment);\n }\n}\nexport class TotpMultiFactorInfoImpl\n extends MultiFactorInfoImpl\n implements TotpMultiFactorInfo\n{\n private constructor(response: TotpMfaEnrollment) {\n super(FactorId.TOTP, response);\n }\n\n static _fromServerResponse(\n _auth: AuthInternal,\n enrollment: MfaEnrollment\n ): TotpMultiFactorInfoImpl {\n return new TotpMultiFactorInfoImpl(enrollment as TotpMfaEnrollment);\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, SignUpRequest } 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';\nimport { handleRecaptchaFlow } from '../../platform_browser/recaptcha/recaptcha_enterprise_verifier';\nimport { IdTokenResponse } from '../../model/id_token';\nimport { RecaptchaActionName, RecaptchaClientType } from '../../api';\n\n/**\n * Updates the password policy cached in the {@link Auth} instance if a policy is already\n * cached for the project or tenant.\n *\n * @remarks\n * We only fetch the password policy if the password did not meet policy requirements and\n * there is an existing policy cached. A developer must call validatePassword at least\n * once for the cache to be automatically updated.\n *\n * @param auth - The {@link Auth} instance.\n *\n * @private\n */\nasync function recachePasswordPolicy(auth: Auth): Promise<void> {\n const authInternal = _castAuth(auth);\n if (authInternal._getPasswordPolicyInternal()) {\n await authInternal._updatePasswordPolicy();\n }\n}\n\n/**\n * Sends a password reset email to the given email address. This method does not throw an error when\n * there's no user account with the given email address and\n * [Email Enumeration Protection](https://cloud.google.com/identity-platform/docs/admin/email-enumeration-protection) is enabled.\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 authInternal = _castAuth(auth);\n const request: authentication.PasswordResetRequest = {\n requestType: ActionCodeOperation.PASSWORD_RESET,\n email,\n clientType: RecaptchaClientType.WEB\n };\n if (actionCodeSettings) {\n _setActionCodeSettingsOnRequest(authInternal, request, actionCodeSettings);\n }\n await handleRecaptchaFlow(\n authInternal,\n request,\n RecaptchaActionName.GET_OOB_CODE,\n authentication.sendPasswordResetEmail\n );\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\n .resetPassword(getModularInstance(auth), {\n oobCode,\n newPassword\n })\n .catch(async error => {\n if (\n error.code ===\n `auth/${AuthErrorCode.PASSWORD_DOES_NOT_MEET_REQUIREMENTS}`\n ) {\n void recachePasswordPolicy(auth);\n }\n\n throw error;\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 request: SignUpRequest = {\n returnSecureToken: true,\n email,\n password,\n clientType: RecaptchaClientType.WEB\n };\n const signUpResponse: Promise<IdTokenResponse> = handleRecaptchaFlow(\n authInternal,\n request,\n RecaptchaActionName.SIGN_UP_PASSWORD,\n signUp\n );\n const response = await signUpResponse.catch(error => {\n if (\n error.code === `auth/${AuthErrorCode.PASSWORD_DOES_NOT_MEET_REQUIREMENTS}`\n ) {\n void recachePasswordPolicy(auth);\n }\n\n throw error;\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 * When [Email Enumeration Protection](https://cloud.google.com/identity-platform/docs/admin/email-enumeration-protection) is enabled,\n * this method fails with \"auth/invalid-credential\" in case of an invalid email/password.\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 ).catch(async error => {\n if (\n error.code === `auth/${AuthErrorCode.PASSWORD_DOES_NOT_MEET_REQUIREMENTS}`\n ) {\n void recachePasswordPolicy(auth);\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\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';\nimport { _castAuth } from '../auth/auth_impl';\nimport { handleRecaptchaFlow } from '../../platform_browser/recaptcha/recaptcha_enterprise_verifier';\nimport { RecaptchaActionName, RecaptchaClientType } from '../../api';\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 authInternal = _castAuth(auth);\n const request: api.EmailSignInRequest = {\n requestType: ActionCodeOperation.EMAIL_SIGNIN,\n email,\n clientType: RecaptchaClientType.WEB\n };\n function setActionCodeSettings(\n request: api.EmailSignInRequest,\n actionCodeSettings: ActionCodeSettings\n ): void {\n _assert(\n actionCodeSettings.handleCodeInApp,\n authInternal,\n AuthErrorCode.ARGUMENT_ERROR\n );\n if (actionCodeSettings) {\n _setActionCodeSettingsOnRequest(\n authInternal,\n request,\n actionCodeSettings\n );\n }\n }\n setActionCodeSettings(request, actionCodeSettings);\n await handleRecaptchaFlow(\n authInternal,\n request,\n RecaptchaActionName.GET_OOB_CODE,\n api.sendSignInLinkToEmail\n );\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. This method returns an\n * empty list when [Email Enumeration Protection](https://cloud.google.com/identity-platform/docs/admin/email-enumeration-protection) is enabled, irrespective of the number of\n * authentication methods available for the given email.\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 * Deprecated. Migrating off of this method is recommended as a security best-practice.\n * Learn more in the Identity Platform documentation for [Email Enumeration Protection](https://cloud.google.com/identity-platform/docs/admin/email-enumeration-protection).\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 * Throws \"auth/operation-not-allowed\" error when [Email Enumeration Protection](https://cloud.google.com/identity-platform/docs/admin/email-enumeration-protection) is enabled.\n * Deprecated - Use {@link verifyBeforeUpdateEmail} instead.\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 PasswordValidationStatus\n} from '../model/public_types';\nimport { _initializeRecaptchaConfig } from '../platform_browser/recaptcha/recaptcha_enterprise_verifier';\nimport { _castAuth } from '../core/auth/auth_impl';\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 * This method does not work in a Node.js environment.\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/**\n * Loads the reCAPTCHA configuration into the `Auth` instance.\n *\n * @remarks\n * This will load the reCAPTCHA config, which indicates whether the reCAPTCHA\n * verification flow should be triggered for each auth provider, into the\n * current Auth session.\n *\n * If initializeRecaptchaConfig() is not invoked, the auth flow will always start\n * without reCAPTCHA verification. If the provider is configured to require reCAPTCHA\n * verification, the SDK will transparently load the reCAPTCHA config and restart the\n * auth flows.\n *\n * Thus, by calling this optional method, you will reduce the latency of future auth flows.\n * Loading the reCAPTCHA config early will also enhance the signal collected by reCAPTCHA.\n *\n * This method does not work in a Node.js environment.\n *\n * @example\n * ```javascript\n * initializeRecaptchaConfig(auth);\n * ```\n *\n * @param auth - The {@link Auth} instance.\n *\n * @public\n */\nexport function initializeRecaptchaConfig(auth: Auth): Promise<void> {\n return _initializeRecaptchaConfig(auth);\n}\n\n/**\n * Validates the password against the password policy configured for the project or tenant.\n *\n * @remarks\n * If no tenant ID is set on the `Auth` instance, then this method will use the password\n * policy configured for the project. Otherwise, this method will use the policy configured\n * for the tenant. If a password policy has not been configured, then the default policy\n * configured for all projects will be used.\n *\n * If an auth flow fails because a submitted password does not meet the password policy\n * requirements and this method has previously been called, then this method will use the\n * most recent policy available when called again.\n *\n * @example\n * ```javascript\n * validatePassword(auth, 'some-password');\n * ```\n *\n * @param auth The {@link Auth} instance.\n * @param password The password to validate.\n *\n * @public\n */\nexport async function validatePassword(\n auth: Auth,\n password: string\n): Promise<PasswordValidationStatus> {\n const authInternal = _castAuth(auth);\n return authInternal.validatePassword(password);\n}\n\n/**\n * Adds an observer for changes to the signed-in user's ID token.\n *\n * @remarks\n * This includes sign-in, sign-out, and token refresh events.\n * This will not be triggered automatically upon ID token expiration. Use {@link User.getIdToken} to refresh the ID token.\n *\n * @param auth - The {@link Auth} instance.\n * @param nextOrObserver - callback triggered on change.\n * @param error - Deprecated. This callback is never triggered. Errors\n * on signing in/out can be caught in promises returned from\n * sign-in/sign-out functions.\n * @param completed - Deprecated. This callback is never triggered.\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 */\nexport function beforeAuthStateChanged(\n auth: Auth,\n callback: (user: User | null) => void | Promise<void>,\n onAbort?: () => void\n): Unsubscribe {\n return getModularInstance(auth).beforeAuthStateChanged(callback, onAbort);\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 - Deprecated. This callback is never triggered. Errors\n * on signing in/out can be caught in promises returned from\n * sign-in/sign-out functions.\n * @param completed - Deprecated. This callback is never triggered.\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\n/**\n * Revokes the given access token. Currently only supports Apple OAuth access tokens.\n *\n * @param auth - The {@link Auth} instance.\n * @param token - The Apple OAuth access token.\n *\n * @public\n */\nexport function revokeAccessToken(auth: Auth, token: string): Promise<void> {\n const authInternal = _castAuth(auth);\n return authInternal.revokeAccessToken(token);\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 */\n\nimport { UserInternal } from '../model/user';\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 readonly user?: UserInternal\n ) {}\n\n static _fromIdtoken(\n idToken: string,\n user?: UserInternal\n ): MultiFactorSessionImpl {\n return new MultiFactorSessionImpl(\n MultiFactorSessionType.ENROLL,\n idToken,\n user\n );\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(\n error.customData.operationType,\n authModular,\n AuthErrorCode.ARGUMENT_ERROR\n );\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 {\n Endpoint,\n HttpMethod,\n _addTidIfNecessary,\n _performApiRequest\n} 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 * An MFA provided by TOTP (Time-based One Time Password).\n */\nexport interface TotpMfaEnrollment extends BaseMfaEnrollment {}\n\n/**\n * MfaEnrollment can be any subtype of BaseMfaEnrollment, currently only PhoneMfaEnrollment and TotpMfaEnrollment are supported.\n */\nexport type MfaEnrollment = PhoneMfaEnrollment | TotpMfaEnrollment;\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 >(\n auth,\n HttpMethod.POST,\n Endpoint.START_MFA_ENROLLMENT,\n _addTidIfNecessary(auth, request)\n );\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 >(\n auth,\n HttpMethod.POST,\n Endpoint.FINALIZE_MFA_ENROLLMENT,\n _addTidIfNecessary(auth, request)\n );\n}\nexport interface StartTotpMfaEnrollmentRequest {\n idToken: string;\n totpEnrollmentInfo: {};\n tenantId?: string;\n}\n\nexport interface StartTotpMfaEnrollmentResponse {\n totpSessionInfo: {\n sharedSecretKey: string;\n verificationCodeLength: number;\n hashingAlgorithm: string;\n periodSec: number;\n sessionInfo: string;\n finalizeEnrollmentTime: number;\n };\n}\n\nexport function startEnrollTotpMfa(\n auth: AuthInternal,\n request: StartTotpMfaEnrollmentRequest\n): Promise<StartTotpMfaEnrollmentResponse> {\n return _performApiRequest<\n StartTotpMfaEnrollmentRequest,\n StartTotpMfaEnrollmentResponse\n >(\n auth,\n HttpMethod.POST,\n Endpoint.START_MFA_ENROLLMENT,\n _addTidIfNecessary(auth, request)\n );\n}\n\nexport interface TotpVerificationInfo {\n sessionInfo: string;\n verificationCode: string;\n}\nexport interface FinalizeTotpMfaEnrollmentRequest {\n idToken: string;\n totpVerificationInfo: TotpVerificationInfo;\n displayName?: string | null;\n tenantId?: string;\n}\n\nexport interface FinalizeTotpMfaEnrollmentResponse\n extends FinalizeMfaResponse {}\n\nexport function finalizeEnrollTotpMfa(\n auth: AuthInternal,\n request: FinalizeTotpMfaEnrollmentRequest\n): Promise<FinalizeTotpMfaEnrollmentResponse> {\n return _performApiRequest<\n FinalizeTotpMfaEnrollmentRequest,\n FinalizeTotpMfaEnrollmentResponse\n >(\n auth,\n HttpMethod.POST,\n Endpoint.FINALIZE_MFA_ENROLLMENT,\n _addTidIfNecessary(auth, request)\n );\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 { _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(\n await this.user.getIdToken(),\n this.user\n );\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 try {\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 await this.user.reload();\n } catch (e) {\n throw e;\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","jsHelpers._recaptchaEnterpriseScriptUrl","jsHelpers\r\n ._loadJS","applyActionCode","sendEmailVerification","sendPasswordResetEmail","sendSignInLinkToEmail","signInWithEmailLink","IDP_REQUEST_URI","signInWithCustomToken","getIdTokenResponse","authentication.sendPasswordResetEmail","account\r\n .resetPassword","account.applyActionCode","account.resetPassword","api.sendSignInLinkToEmail","api.sendEmailVerification","api.verifyAndChangeEmail","updateProfile","apiUpdateProfile","apiUpdateEmailPassword"],"mappings":"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"}