diff options
Diffstat (limited to 'frontend-old/node_modules/firebase/compat/index.d.ts')
| -rw-r--r-- | frontend-old/node_modules/firebase/compat/index.d.ts | 10316 |
1 files changed, 0 insertions, 10316 deletions
diff --git a/frontend-old/node_modules/firebase/compat/index.d.ts b/frontend-old/node_modules/firebase/compat/index.d.ts deleted file mode 100644 index fc2bb09..0000000 --- a/frontend-old/node_modules/firebase/compat/index.d.ts +++ /dev/null @@ -1,10316 +0,0 @@ -/** - * @license - * Copyright 2021 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * <code>firebase</code> is a global namespace from which all Firebase - * services are accessed. - */ -declare namespace firebase { - /** - * @hidden - */ - type NextFn<T> = (value: T) => void; - /** - * @hidden - */ - type ErrorFn<E = Error> = (error: E) => void; - /** - * @hidden - */ - type CompleteFn = () => void; - - /** - * `FirebaseError` is a subclass of the standard JavaScript `Error` object. In - * addition to a message string and stack trace, it contains a string code. - */ - interface FirebaseError { - /** - * Error codes are strings using the following format: `"service/string-code"`. - * Some examples include `"app/no-app"` and `"auth/user-not-found"`. - * - * While the message for a given error can change, the code will remain the same - * between backward-compatible versions of the Firebase SDK. - */ - code: string; - /** - * An explanatory message for the error that just occurred. - * - * This message is designed to be helpful to you, the developer. Because - * it generally does not convey meaningful information to end users, - * this message should not be displayed in your application. - */ - message: string; - /** - * The name of the class of errors, which is `"FirebaseError"`. - */ - name: 'FirebaseError'; - /** - * A string value containing the execution backtrace when the error originally - * occurred. This may not always be available. - * - * When it is available, this information can be sent to - * {@link https://firebase.google.com/support/ Firebase Support} to help - * explain the cause of an error. - */ - stack?: string; - } - - /** - * @hidden - */ - interface Observer<T, E = Error> { - next: NextFn<T>; - error: ErrorFn<E>; - complete: CompleteFn; - } - - /** - * The JS SDK supports 5 log levels and also allows a user the ability to - * silence the logs altogether. - * - * The order is as follows: - * silent < debug < verbose < info < warn < error - */ - type LogLevel = 'debug' | 'verbose' | 'info' | 'warn' | 'error' | 'silent'; - - /** - * The current SDK version. - */ - var SDK_VERSION: string; - - /** - * Registers a library's name and version for platform logging purposes. - * @param library Name of 1p or 3p library (e.g. firestore, angularfire) - * @param version Current version of that library. - * @param variant Bundle variant, e.g., node, rn, etc. - */ - function registerVersion( - library: string, - version: string, - variant?: string - ): void; - - /** - * Sets log level for all Firebase packages. - * - * All of the log types above the current log level are captured (i.e. if - * you set the log level to `info`, errors are logged, but `debug` and - * `verbose` logs are not). - */ - function setLogLevel(logLevel: LogLevel): void; - - /** - * Sets log handler for all Firebase packages. - * @param logCallback An optional custom log handler that executes user code whenever - * the Firebase SDK makes a logging call. - */ - function onLog( - logCallback: (callbackParams: { - /** - * Level of event logged. - */ - level: LogLevel; - /** - * Any text from logged arguments joined into one string. - */ - message: string; - /** - * The raw arguments passed to the log call. - */ - args: any[]; - /** - * A string indicating the name of the package that made the log call, - * such as `@firebase/firestore`. - */ - type: string; - }) => void, - options?: { - /** - * Threshhold log level. Only logs at or above this level trigger the `logCallback` - * passed to `onLog`. - */ - level: LogLevel; - } - ): void; - - /** - * @hidden - */ - type Unsubscribe = () => void; - - /** - * A user account. - */ - interface User extends firebase.UserInfo { - /** - * Deletes and signs out the user. - * - * <b>Important:</b> this is a security-sensitive operation that requires the - * user to have recently signed in. If this requirement isn't met, ask the user - * to authenticate again and then call - * {@link firebase.User.reauthenticateWithCredential}. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/requires-recent-login</dt> - * <dd>Thrown if the user's last sign-in time does not meet the security - * threshold. Use {@link firebase.User.reauthenticateWithCredential} to - * resolve. This does not apply if the user is anonymous.</dd> - * </dl> - */ - delete(): Promise<void>; - emailVerified: boolean; - getIdTokenResult( - forceRefresh?: boolean - ): Promise<firebase.auth.IdTokenResult>; - /** - * Returns a JSON Web Token (JWT) used to identify the user to a Firebase - * service. - * - * Returns the current token if it has not expired. Otherwise, this will - * refresh the token and return a new one. - * - * @param forceRefresh Force refresh regardless of token - * expiration. - */ - getIdToken(forceRefresh?: boolean): Promise<string>; - isAnonymous: boolean; - /** - * Links the user account with the given credentials and returns any available - * additional user information, such as user name. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/provider-already-linked</dt> - * <dd>Thrown if the provider has already been linked to the user. This error is - * thrown even if this is not the same provider's account that is currently - * linked to the user.</dd> - * <dt>auth/invalid-credential</dt> - * <dd>Thrown if the provider's credential is not valid. This can happen if it - * has already expired when calling link, or if it used invalid token(s). - * See the Firebase documentation for your provider, and make sure you pass - * in the correct parameters to the credential method.</dd> - * <dt>auth/credential-already-in-use</dt> - * <dd>Thrown if the account corresponding to the credential already exists - * among your users, or is already linked to a Firebase User. - * For example, this error could be thrown if you are upgrading an anonymous - * user to a Google user by linking a Google credential to it and the Google - * credential used is already associated with an existing Firebase Google - * user. - * The fields <code>error.email</code>, <code>error.phoneNumber</code>, and - * <code>error.credential</code> ({@link firebase.auth.AuthCredential}) - * may be provided, depending on the type of credential. You can recover - * from this error by signing in with <code>error.credential</code> directly - * via {@link firebase.auth.Auth.signInWithCredential}.</dd> - * <dt>auth/email-already-in-use</dt> - * <dd>Thrown if the email corresponding to the credential already exists - * among your users. When thrown while linking a credential to an existing - * user, an <code>error.email</code> and <code>error.credential</code> - * ({@link firebase.auth.AuthCredential}) fields are also provided. - * You have to link the credential to the existing user with that email if - * you wish to continue signing in with that credential. To do so, call - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}, sign in to - * <code>error.email</code> via one of the providers returned and then - * {@link firebase.User.linkWithCredential} the original credential to that - * newly signed in user.</dd> - * <dt>auth/operation-not-allowed</dt> - * <dd>Thrown if you have not enabled the provider in the Firebase Console. Go - * to the Firebase Console for your project, in the Auth section and the - * <strong>Sign in Method</strong> tab and configure the provider.</dd> - * <dt>auth/invalid-email</dt> - * <dd>Thrown if the email used in a - * {@link firebase.auth.EmailAuthProvider.credential} is invalid.</dd> - * <dt>auth/wrong-password</dt> - * <dd>Thrown if the password used in a - * {@link firebase.auth.EmailAuthProvider.credential} is not correct or - * when the user associated with the email does not have a password.</dd> - * <dt>auth/invalid-verification-code</dt> - * <dd>Thrown if the credential is a - * {@link firebase.auth.PhoneAuthProvider.credential} and the verification - * code of the credential is not valid.</dd> - * <dt>auth/invalid-verification-id</dt> - * <dd>Thrown if the credential is a - * {@link firebase.auth.PhoneAuthProvider.credential} and the verification - * ID of the credential is not valid.</dd> - * </dl> - * - * @deprecated This method is deprecated. Use - * {@link firebase.User.linkWithCredential} instead. - * - * @param credential The auth credential. - */ - linkAndRetrieveDataWithCredential( - credential: firebase.auth.AuthCredential - ): Promise<firebase.auth.UserCredential>; - /** - * Links the user account with the given credentials. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/provider-already-linked</dt> - * <dd>Thrown if the provider has already been linked to the user. This error is - * thrown even if this is not the same provider's account that is currently - * linked to the user.</dd> - * <dt>auth/invalid-credential</dt> - * <dd>Thrown if the provider's credential is not valid. This can happen if it - * has already expired when calling link, or if it used invalid token(s). - * See the Firebase documentation for your provider, and make sure you pass - * in the correct parameters to the credential method.</dd> - * <dt>auth/credential-already-in-use</dt> - * <dd>Thrown if the account corresponding to the credential already exists - * among your users, or is already linked to a Firebase User. - * For example, this error could be thrown if you are upgrading an anonymous - * user to a Google user by linking a Google credential to it and the Google - * credential used is already associated with an existing Firebase Google - * user. - * The fields <code>error.email</code>, <code>error.phoneNumber</code>, and - * <code>error.credential</code> ({@link firebase.auth.AuthCredential}) - * may be provided, depending on the type of credential. You can recover - * from this error by signing in with <code>error.credential</code> directly - * via {@link firebase.auth.Auth.signInWithCredential}.</dd> - * <dt>auth/email-already-in-use</dt> - * <dd>Thrown if the email corresponding to the credential already exists - * among your users. When thrown while linking a credential to an existing - * user, an <code>error.email</code> and <code>error.credential</code> - * ({@link firebase.auth.AuthCredential}) fields are also provided. - * You have to link the credential to the existing user with that email if - * you wish to continue signing in with that credential. To do so, call - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}, sign in to - * <code>error.email</code> via one of the providers returned and then - * {@link firebase.User.linkWithCredential} the original credential to that - * newly signed in user.</dd> - * <dt>auth/operation-not-allowed</dt> - * <dd>Thrown if you have not enabled the provider in the Firebase Console. Go - * to the Firebase Console for your project, in the Auth section and the - * <strong>Sign in Method</strong> tab and configure the provider.</dd> - * <dt>auth/invalid-email</dt> - * <dd>Thrown if the email used in a - * {@link firebase.auth.EmailAuthProvider.credential} is invalid.</dd> - * <dt>auth/wrong-password</dt> - * <dd>Thrown if the password used in a - * {@link firebase.auth.EmailAuthProvider.credential} is not correct or - * when the user associated with the email does not have a password.</dd> - * <dt>auth/invalid-verification-code</dt> - * <dd>Thrown if the credential is a - * {@link firebase.auth.PhoneAuthProvider.credential} and the verification - * code of the credential is not valid.</dd> - * <dt>auth/invalid-verification-id</dt> - * <dd>Thrown if the credential is a - * {@link firebase.auth.PhoneAuthProvider.credential} and the verification - * ID of the credential is not valid.</dd> - * </dl> - * - * @param credential The auth credential. - */ - linkWithCredential( - credential: firebase.auth.AuthCredential - ): Promise<firebase.auth.UserCredential>; - /** - * Links the user account with the given phone number. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/provider-already-linked</dt> - * <dd>Thrown if the provider has already been linked to the user. This error is - * thrown even if this is not the same provider's account that is currently - * linked to the user.</dd> - * <dt>auth/captcha-check-failed</dt> - * <dd>Thrown if the reCAPTCHA response token was invalid, expired, or if - * this method was called from a non-whitelisted domain.</dd> - * <dt>auth/invalid-phone-number</dt> - * <dd>Thrown if the phone number has an invalid format.</dd> - * <dt>auth/missing-phone-number</dt> - * <dd>Thrown if the phone number is missing.</dd> - * <dt>auth/quota-exceeded</dt> - * <dd>Thrown if the SMS quota for the Firebase project has been exceeded.</dd> - * <dt>auth/user-disabled</dt> - * <dd>Thrown if the user corresponding to the given phone number has been - * disabled.</dd> - * <dt>auth/credential-already-in-use</dt> - * <dd>Thrown if the account corresponding to the phone number already exists - * among your users, or is already linked to a Firebase User. - * The fields <code>error.phoneNumber</code> and - * <code>error.credential</code> ({@link firebase.auth.AuthCredential}) - * are provided in this case. You can recover from this error by signing in - * with that credential directly via - * {@link firebase.auth.Auth.signInWithCredential}.</dd> - * <dt>auth/operation-not-allowed</dt> - * <dd>Thrown if you have not enabled the phone authentication provider in the - * Firebase Console. Go to the Firebase Console for your project, in the - * Auth section and the <strong>Sign in Method</strong> tab and configure - * the provider.</dd> - * </dl> - * - * @param phoneNumber The user's phone number in E.164 format (e.g. - * +16505550101). - * @param applicationVerifier - */ - linkWithPhoneNumber( - phoneNumber: string, - applicationVerifier: firebase.auth.ApplicationVerifier - ): Promise<firebase.auth.ConfirmationResult>; - /** - * Links the authenticated provider to the user account using a pop-up based - * OAuth flow. - * - * If the linking is successful, the returned result will contain the user - * and the provider's credential. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/auth-domain-config-required</dt> - * <dd>Thrown if authDomain configuration is not provided when calling - * firebase.initializeApp(). Check Firebase Console for instructions on - * determining and passing that field.</dd> - * <dt>auth/cancelled-popup-request</dt> - * <dd>Thrown if successive popup operations are triggered. Only one popup - * request is allowed at one time on a user or an auth instance. All the - * popups would fail with this error except for the last one.</dd> - * <dt>auth/credential-already-in-use</dt> - * <dd>Thrown if the account corresponding to the credential already exists - * among your users, or is already linked to a Firebase User. - * For example, this error could be thrown if you are upgrading an anonymous - * user to a Google user by linking a Google credential to it and the Google - * credential used is already associated with an existing Firebase Google - * user. - * An <code>error.email</code> and <code>error.credential</code> - * ({@link firebase.auth.AuthCredential}) fields are also provided. You can - * recover from this error by signing in with that credential directly via - * {@link firebase.auth.Auth.signInWithCredential}.</dd> - * <dt>auth/email-already-in-use</dt> - * <dd>Thrown if the email corresponding to the credential already exists - * among your users. When thrown while linking a credential to an existing - * user, an <code>error.email</code> and <code>error.credential</code> - * ({@link firebase.auth.AuthCredential}) fields are also provided. - * You have to link the credential to the existing user with that email if - * you wish to continue signing in with that credential. To do so, call - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}, sign in to - * <code>error.email</code> via one of the providers returned and then - * {@link firebase.User.linkWithCredential} the original credential to that - * newly signed in user.</dd> - * <dt>auth/operation-not-allowed</dt> - * <dd>Thrown if you have not enabled the provider in the Firebase Console. Go - * to the Firebase Console for your project, in the Auth section and the - * <strong>Sign in Method</strong> tab and configure the provider.</dd> - * <dt>auth/popup-blocked</dt> - * <dt>auth/operation-not-supported-in-this-environment</dt> - * <dd>Thrown if this operation is not supported in the environment your - * application is running on. "location.protocol" must be http or https. - * </dd> - * <dd>Thrown if the popup was blocked by the browser, typically when this - * operation is triggered outside of a click handler.</dd> - * <dt>auth/popup-closed-by-user</dt> - * <dd>Thrown if the popup window is closed by the user without completing the - * sign in to the provider.</dd> - * <dt>auth/provider-already-linked</dt> - * <dd>Thrown if the provider has already been linked to the user. This error is - * thrown even if this is not the same provider's account that is currently - * linked to the user.</dd> - * <dt>auth/unauthorized-domain</dt> - * <dd>Thrown if the app domain is not authorized for OAuth operations for your - * Firebase project. Edit the list of authorized domains from the Firebase - * console.</dd> - * </dl> - * - * This method does not work in a Node.js environment. - * - * @example - * ```javascript - * // Creates the provider object. - * var provider = new firebase.auth.FacebookAuthProvider(); - * // You can add additional scopes to the provider: - * provider.addScope('email'); - * provider.addScope('user_friends'); - * // Link with popup: - * user.linkWithPopup(provider).then(function(result) { - * // The firebase.User instance: - * var user = result.user; - * // The Facebook firebase.auth.AuthCredential containing the Facebook - * // access token: - * var credential = result.credential; - * }, function(error) { - * // An error happened. - * }); - * ``` - * - * @param provider The provider to authenticate. - * The provider has to be an OAuth provider. Non-OAuth providers like {@link - * firebase.auth.EmailAuthProvider} will throw an error. - */ - linkWithPopup( - provider: firebase.auth.AuthProvider - ): Promise<firebase.auth.UserCredential>; - /** - * Links the authenticated provider to the user account using a full-page - * redirect flow. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/auth-domain-config-required</dt> - * <dd>Thrown if authDomain configuration is not provided when calling - * firebase.initializeApp(). Check Firebase Console for instructions on - * determining and passing that field.</dd> - * <dt>auth/operation-not-supported-in-this-environment</dt> - * <dd>Thrown if this operation is not supported in the environment your - * application is running on. "location.protocol" must be http or https. - * </dd> - * <dt>auth/provider-already-linked</dt> - * <dd>Thrown if the provider has already been linked to the user. This error is - * thrown even if this is not the same provider's account that is currently - * linked to the user.</dd> - * <dt>auth/unauthorized-domain</dt> - * <dd>Thrown if the app domain is not authorized for OAuth operations for your - * Firebase project. Edit the list of authorized domains from the Firebase - * console.</dd> - * </dl> - * - * @param provider The provider to authenticate. - * The provider has to be an OAuth provider. Non-OAuth providers like {@link - * firebase.auth.EmailAuthProvider} will throw an error. - */ - linkWithRedirect(provider: firebase.auth.AuthProvider): Promise<void>; - metadata: firebase.auth.UserMetadata; - /** - * The {@link firebase.User.MultiFactorUser} object corresponding to the current user. - * This is used to access all multi-factor properties and operations related to the - * current user. - */ - - multiFactor: firebase.User.MultiFactorUser; - /** - * The phone number normalized based on the E.164 standard (e.g. +16505550101) - * for the current user. This is null if the user has no phone credential linked - * to the account. - */ - phoneNumber: string | null; - providerData: (firebase.UserInfo | null)[]; - /** - * Re-authenticates a user using a fresh credential, and returns any available - * additional user information, such as user name. Use before operations - * such as {@link firebase.User.updatePassword} that require tokens from recent - * sign-in attempts. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/user-mismatch</dt> - * <dd>Thrown if the credential given does not correspond to the user.</dd> - * <dt>auth/user-not-found</dt> - * <dd>Thrown if the credential given does not correspond to any existing user. - * </dd> - * <dt>auth/invalid-credential</dt> - * <dd>Thrown if the provider's credential is not valid. This can happen if it - * has already expired when calling link, or if it used invalid token(s). - * See the Firebase documentation for your provider, and make sure you pass - * in the correct parameters to the credential method.</dd> - * <dt>auth/invalid-email</dt> - * <dd>Thrown if the email used in a - * {@link firebase.auth.EmailAuthProvider.credential} is invalid.</dd> - * <dt>auth/wrong-password</dt> - * <dd>Thrown if the password used in a - * {@link firebase.auth.EmailAuthProvider.credential} is not correct or when - * the user associated with the email does not have a password.</dd> - * <dt>auth/invalid-verification-code</dt> - * <dd>Thrown if the credential is a - * {@link firebase.auth.PhoneAuthProvider.credential} and the verification - * code of the credential is not valid.</dd> - * <dt>auth/invalid-verification-id</dt> - * <dd>Thrown if the credential is a - * {@link firebase.auth.PhoneAuthProvider.credential} and the verification - * ID of the credential is not valid.</dd> - * </dl> - * - * @deprecated - * This method is deprecated. Use - * {@link firebase.User.reauthenticateWithCredential} instead. - * - * @param credential - */ - reauthenticateAndRetrieveDataWithCredential( - credential: firebase.auth.AuthCredential - ): Promise<firebase.auth.UserCredential>; - /** - * Re-authenticates a user using a fresh credential. Use before operations - * such as {@link firebase.User.updatePassword} that require tokens from recent - * sign-in attempts. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/user-mismatch</dt> - * <dd>Thrown if the credential given does not correspond to the user.</dd> - * <dt>auth/user-not-found</dt> - * <dd>Thrown if the credential given does not correspond to any existing user. - * </dd> - * <dt>auth/invalid-credential</dt> - * <dd>Thrown if the provider's credential is not valid. This can happen if it - * has already expired when calling link, or if it used invalid token(s). - * See the Firebase documentation for your provider, and make sure you pass - * in the correct parameters to the credential method.</dd> - * <dt>auth/invalid-email</dt> - * <dd>Thrown if the email used in a - * {@link firebase.auth.EmailAuthProvider.credential} is invalid.</dd> - * <dt>auth/wrong-password</dt> - * <dd>Thrown if the password used in a - * {@link firebase.auth.EmailAuthProvider.credential} is not correct or when - * the user associated with the email does not have a password.</dd> - * <dt>auth/invalid-verification-code</dt> - * <dd>Thrown if the credential is a - * {@link firebase.auth.PhoneAuthProvider.credential} and the verification - * code of the credential is not valid.</dd> - * <dt>auth/invalid-verification-id</dt> - * <dd>Thrown if the credential is a - * {@link firebase.auth.PhoneAuthProvider.credential} and the verification - * ID of the credential is not valid.</dd> - * </dl> - * - * @param credential - */ - reauthenticateWithCredential( - credential: firebase.auth.AuthCredential - ): Promise<firebase.auth.UserCredential>; - /** - * Re-authenticates a user using a fresh credential. Use before operations - * such as {@link firebase.User.updatePassword} that require tokens from recent - * sign-in attempts. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/user-mismatch</dt> - * <dd>Thrown if the credential given does not correspond to the user.</dd> - * <dt>auth/user-not-found</dt> - * <dd>Thrown if the credential given does not correspond to any existing user. - * </dd> - * <dt>auth/captcha-check-failed</dt> - * <dd>Thrown if the reCAPTCHA response token was invalid, expired, or if - * this method was called from a non-whitelisted domain.</dd> - * <dt>auth/invalid-phone-number</dt> - * <dd>Thrown if the phone number has an invalid format.</dd> - * <dt>auth/missing-phone-number</dt> - * <dd>Thrown if the phone number is missing.</dd> - * <dt>auth/quota-exceeded</dt> - * <dd>Thrown if the SMS quota for the Firebase project has been exceeded.</dd> - * </dl> - * - * @param phoneNumber The user's phone number in E.164 format (e.g. - * +16505550101). - * @param applicationVerifier - */ - reauthenticateWithPhoneNumber( - phoneNumber: string, - applicationVerifier: firebase.auth.ApplicationVerifier - ): Promise<firebase.auth.ConfirmationResult>; - /** - * Reauthenticates the current user with the specified provider using a pop-up - * based OAuth flow. - * - * If the reauthentication is successful, the returned result will contain the - * user and the provider's credential. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/auth-domain-config-required</dt> - * <dd>Thrown if authDomain configuration is not provided when calling - * firebase.initializeApp(). Check Firebase Console for instructions on - * determining and passing that field.</dd> - * <dt>auth/cancelled-popup-request</dt> - * <dd>Thrown if successive popup operations are triggered. Only one popup - * request is allowed at one time on a user or an auth instance. All the - * popups would fail with this error except for the last one.</dd> - * <dt>auth/user-mismatch</dt> - * <dd>Thrown if the credential given does not correspond to the user.</dd> - * <dt>auth/operation-not-allowed</dt> - * <dd>Thrown if you have not enabled the provider in the Firebase Console. Go - * to the Firebase Console for your project, in the Auth section and the - * <strong>Sign in Method</strong> tab and configure the provider.</dd> - * <dt>auth/popup-blocked</dt> - * <dd>Thrown if the popup was blocked by the browser, typically when this - * operation is triggered outside of a click handler.</dd> - * <dt>auth/operation-not-supported-in-this-environment</dt> - * <dd>Thrown if this operation is not supported in the environment your - * application is running on. "location.protocol" must be http or https. - * </dd> - * <dt>auth/popup-closed-by-user</dt> - * <dd>Thrown if the popup window is closed by the user without completing the - * sign in to the provider.</dd> - * <dt>auth/unauthorized-domain</dt> - * <dd>Thrown if the app domain is not authorized for OAuth operations for your - * Firebase project. Edit the list of authorized domains from the Firebase - * console.</dd> - * </dl> - * - * This method does not work in a Node.js environment. - * - * @example - * ```javascript - * // Creates the provider object. - * var provider = new firebase.auth.FacebookAuthProvider(); - * // You can add additional scopes to the provider: - * provider.addScope('email'); - * provider.addScope('user_friends'); - * // Reauthenticate with popup: - * user.reauthenticateWithPopup(provider).then(function(result) { - * // The firebase.User instance: - * var user = result.user; - * // The Facebook firebase.auth.AuthCredential containing the Facebook - * // access token: - * var credential = result.credential; - * }, function(error) { - * // An error happened. - * }); - * ``` - * - * @param provider The provider to authenticate. - * The provider has to be an OAuth provider. Non-OAuth providers like {@link - * firebase.auth.EmailAuthProvider} will throw an error. - */ - reauthenticateWithPopup( - provider: firebase.auth.AuthProvider - ): Promise<firebase.auth.UserCredential>; - /** - * Reauthenticates the current user with the specified OAuth provider using a - * full-page redirect flow. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/auth-domain-config-required</dt> - * <dd>Thrown if authDomain configuration is not provided when calling - * firebase.initializeApp(). Check Firebase Console for instructions on - * determining and passing that field.</dd> - * <dt>auth/operation-not-supported-in-this-environment</dt> - * <dd>Thrown if this operation is not supported in the environment your - * application is running on. "location.protocol" must be http or https. - * </dd> - * <dt>auth/user-mismatch</dt> - * <dd>Thrown if the credential given does not correspond to the user.</dd> - * <dt>auth/unauthorized-domain</dt> - * <dd>Thrown if the app domain is not authorized for OAuth operations for your - * Firebase project. Edit the list of authorized domains from the Firebase - * console.</dd> - * </dl> - * - * This method does not work in a Node.js environment. - * - * @param provider The provider to authenticate. - * The provider has to be an OAuth provider. Non-OAuth providers like {@link - * firebase.auth.EmailAuthProvider} will throw an error. - */ - reauthenticateWithRedirect( - provider: firebase.auth.AuthProvider - ): Promise<void>; - refreshToken: string; - /** - * Refreshes the current user, if signed in. - * - */ - reload(): Promise<void>; - /** - * Sends a verification email to a user. - * - * The verification process is completed by calling - * {@link firebase.auth.Auth.applyActionCode} - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/missing-android-pkg-name</dt> - * <dd>An Android package name must be provided if the Android app is required - * to be installed.</dd> - * <dt>auth/missing-continue-uri</dt> - * <dd>A continue URL must be provided in the request.</dd> - * <dt>auth/missing-ios-bundle-id</dt> - * <dd>An iOS bundle ID must be provided if an App Store ID is provided.</dd> - * <dt>auth/invalid-continue-uri</dt> - * <dd>The continue URL provided in the request is invalid.</dd> - * <dt>auth/unauthorized-continue-uri</dt> - * <dd>The domain of the continue URL is not whitelisted. Whitelist - * the domain in the Firebase console.</dd> - * </dl> - * - * @example - * ```javascript - * var actionCodeSettings = { - * url: 'https://www.example.com/cart?email=user@example.com&cartId=123', - * iOS: { - * bundleId: 'com.example.ios' - * }, - * android: { - * packageName: 'com.example.android', - * installApp: true, - * minimumVersion: '12' - * }, - * handleCodeInApp: true - * }; - * firebase.auth().currentUser.sendEmailVerification(actionCodeSettings) - * .then(function() { - * // Verification email sent. - * }) - * .catch(function(error) { - * // Error occurred. Inspect error.code. - * }); - * ``` - * - * @param actionCodeSettings The action - * code settings. If specified, the state/continue URL will be set as the - * "continueUrl" parameter in the email verification link. The default email - * verification landing page will use this to display a link to go back to - * the app if it is installed. - * If the actionCodeSettings is not specified, no URL is appended to the - * action URL. - * The state URL provided must belong to a domain that is whitelisted by the - * developer in the console. Otherwise an error will be thrown. - * Mobile app redirects will only be applicable if the developer configures - * and accepts the Firebase Dynamic Links terms of condition. - * The Android package name and iOS bundle ID will be respected only if they - * are configured in the same Firebase Auth project used. - */ - sendEmailVerification( - actionCodeSettings?: firebase.auth.ActionCodeSettings | null - ): Promise<void>; - /** - * The current user's tenant ID. This is a read-only property, which indicates - * the tenant ID used to sign in the current user. This is null if the user is - * signed in from the parent project. - * - * @example - * ```javascript - * // Set the tenant ID on Auth instance. - * firebase.auth().tenantId = ‘TENANT_PROJECT_ID’; - * - * // All future sign-in request now include tenant ID. - * firebase.auth().signInWithEmailAndPassword(email, password) - * .then(function(result) { - * // result.user.tenantId should be ‘TENANT_PROJECT_ID’. - * }).catch(function(error) { - * // Handle error. - * }); - * ``` - */ - tenantId: string | null; - /** - * Returns a JSON-serializable representation of this object. - * - * @return A JSON-serializable representation of this object. - */ - toJSON(): Object; - /** - * Unlinks a provider from a user account. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/no-such-provider</dt> - * <dd>Thrown if the user does not have this provider linked or when the - * provider ID given does not exist.</dd> - * </dt> - * - * @param providerId - */ - unlink(providerId: string): Promise<firebase.User>; - /** - * Updates the user's email address. - * - * An email will be sent to the original email address (if it was set) that - * allows to revoke the email address change, in order to protect them from - * account hijacking. - * - * <b>Important:</b> this is a security sensitive operation that requires the - * user to have recently signed in. If this requirement isn't met, ask the user - * to authenticate again and then call - * {@link firebase.User.reauthenticateWithCredential}. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/invalid-email</dt> - * <dd>Thrown if the email used is invalid.</dd> - * <dt>auth/email-already-in-use</dt> - * <dd>Thrown if the email is already used by another user.</dd> - * <dt>auth/requires-recent-login</dt> - * <dd>Thrown if the user's last sign-in time does not meet the security - * threshold. Use {@link firebase.User.reauthenticateWithCredential} to - * resolve. This does not apply if the user is anonymous.</dd> - * </dl> - * - * @param newEmail The new email address. - */ - updateEmail(newEmail: string): Promise<void>; - /** - * Updates the user's password. - * - * <b>Important:</b> this is a security sensitive operation that requires the - * user to have recently signed in. If this requirement isn't met, ask the user - * to authenticate again and then call - * {@link firebase.User.reauthenticateWithCredential}. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/weak-password</dt> - * <dd>Thrown if the password is not strong enough.</dd> - * <dt>auth/requires-recent-login</dt> - * <dd>Thrown if the user's last sign-in time does not meet the security - * threshold. Use {@link firebase.User.reauthenticateWithCredential} to - * resolve. This does not apply if the user is anonymous.</dd> - * </dl> - * - * @param newPassword - */ - updatePassword(newPassword: string): Promise<void>; - /** - * Updates the user's phone number. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/invalid-verification-code</dt> - * <dd>Thrown if the verification code of the credential is not valid.</dd> - * <dt>auth/invalid-verification-id</dt> - * <dd>Thrown if the verification ID of the credential is not valid.</dd> - * </dl> - * - * @param phoneCredential - */ - updatePhoneNumber( - phoneCredential: firebase.auth.AuthCredential - ): Promise<void>; - /** - * Updates a user's profile data. - * - * @example - * ```javascript - * // Updates the user attributes: - * user.updateProfile({ - * displayName: "Jane Q. User", - * photoURL: "https://example.com/jane-q-user/profile.jpg" - * }).then(function() { - * // Profile updated successfully! - * // "Jane Q. User" - * var displayName = user.displayName; - * // "https://example.com/jane-q-user/profile.jpg" - * var photoURL = user.photoURL; - * }, function(error) { - * // An error happened. - * }); - * - * // Passing a null value will delete the current attribute's value, but not - * // passing a property won't change the current attribute's value: - * // Let's say we're using the same user than before, after the update. - * user.updateProfile({photoURL: null}).then(function() { - * // Profile updated successfully! - * // "Jane Q. User", hasn't changed. - * var displayName = user.displayName; - * // Now, this is null. - * var photoURL = user.photoURL; - * }, function(error) { - * // An error happened. - * }); - * ``` - * - * @param profile The profile's - * displayName and photoURL to update. - */ - updateProfile(profile: { - displayName?: string | null; - photoURL?: string | null; - }): Promise<void>; - /** - * Sends a verification email to a new email address. The user's email will be - * updated to the new one after being verified. - * - * If you have a custom email action handler, you can complete the verification - * process by calling {@link firebase.auth.Auth.applyActionCode}. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/missing-android-pkg-name</dt> - * <dd>An Android package name must be provided if the Android app is required - * to be installed.</dd> - * <dt>auth/missing-continue-uri</dt> - * <dd>A continue URL must be provided in the request.</dd> - * <dt>auth/missing-ios-bundle-id</dt> - * <dd>An iOS bundle ID must be provided if an App Store ID is provided.</dd> - * <dt>auth/invalid-continue-uri</dt> - * <dd>The continue URL provided in the request is invalid.</dd> - * <dt>auth/unauthorized-continue-uri</dt> - * <dd>The domain of the continue URL is not whitelisted. Whitelist - * the domain in the Firebase console.</dd> - * </dl> - * - * @example - * ```javascript - * var actionCodeSettings = { - * url: 'https://www.example.com/cart?email=user@example.com&cartId=123', - * iOS: { - * bundleId: 'com.example.ios' - * }, - * android: { - * packageName: 'com.example.android', - * installApp: true, - * minimumVersion: '12' - * }, - * handleCodeInApp: true - * }; - * firebase.auth().currentUser.verifyBeforeUpdateEmail( - * 'user@example.com', actionCodeSettings) - * .then(function() { - * // Verification email sent. - * }) - * .catch(function(error) { - * // Error occurred. Inspect error.code. - * }); - * ``` - * - * @param newEmail The email address to be verified and updated to. - * @param actionCodeSettings The action - * code settings. If specified, the state/continue URL will be set as the - * "continueUrl" parameter in the email verification link. The default email - * verification landing page will use this to display a link to go back to - * the app if it is installed. - * If the actionCodeSettings is not specified, no URL is appended to the - * action URL. - * The state URL provided must belong to a domain that is whitelisted by the - * developer in the console. Otherwise an error will be thrown. - * Mobile app redirects will only be applicable if the developer configures - * and accepts the Firebase Dynamic Links terms of condition. - * The Android package name and iOS bundle ID will be respected only if they - * are configured in the same Firebase Auth project used. - */ - verifyBeforeUpdateEmail( - newEmail: string, - actionCodeSettings?: firebase.auth.ActionCodeSettings | null - ): Promise<void>; - } - - /** - * User profile information, visible only to the Firebase project's - * apps. - * - */ - interface UserInfo { - displayName: string | null; - email: string | null; - phoneNumber: string | null; - photoURL: string | null; - providerId: string; - /** - * The user's unique ID. - */ - uid: string; - } - - type FirebaseSignInProvider = - | 'custom' - | 'email' - | 'password' - | 'phone' - | 'anonymous' - | 'google.com' - | 'facebook.com' - | 'github.com' - | 'twitter.com' - | 'microsoft.com' - | 'apple.com'; - - interface FirebaseIdToken { - /** Always set to https://securetoken.google.com/PROJECT_ID */ - iss: string; - - /** Always set to PROJECT_ID */ - aud: string; - - /** The user's unique ID */ - sub: string; - - /** The token issue time, in seconds since epoch */ - iat: number; - - /** The token expiry time, normally 'iat' + 3600 */ - exp: number; - - /** The user's unique ID. Must be equal to 'sub' */ - user_id: string; - - /** The time the user authenticated, normally 'iat' */ - auth_time: number; - - /** The sign in provider, only set when the provider is 'anonymous' */ - provider_id?: 'anonymous'; - - /** The user's primary email */ - email?: string; - - /** The user's email verification status */ - email_verified?: boolean; - - /** The user's primary phone number */ - phone_number?: string; - - /** The user's display name */ - name?: string; - - /** The user's profile photo URL */ - picture?: string; - - /** Information on all identities linked to this user */ - firebase: { - /** The primary sign-in provider */ - sign_in_provider: FirebaseSignInProvider; - - /** A map of providers to the user's list of unique identifiers from each provider */ - identities?: { [provider in FirebaseSignInProvider]?: string[] }; - }; - - /** Custom claims set by the developer */ - [claim: string]: unknown; - - // NO LONGER SUPPORTED. Use "sub" instead. (Not a jsdoc comment to avoid generating docs.) - uid?: never; - } - - export type EmulatorMockTokenOptions = ( - | { user_id: string } - | { sub: string } - ) & - Partial<FirebaseIdToken>; - - /** - * Retrieves a Firebase {@link firebase.app.App app} instance. - * - * When called with no arguments, the default app is returned. When an app name - * is provided, the app corresponding to that name is returned. - * - * An exception is thrown if the app being retrieved has not yet been - * initialized. - * - * @example - * ```javascript - * // Return the default app - * var app = firebase.app(); - * ``` - * - * @example - * ```javascript - * // Return a named app - * var otherApp = firebase.app("otherApp"); - * ``` - * - * @param name Optional name of the app to return. If no name is - * provided, the default is `"[DEFAULT]"`. - * - * @return The app corresponding to the provided app name. - * If no app name is provided, the default app is returned. - */ - function app(name?: string): firebase.app.App; - - /** - * A (read-only) array of all initialized apps. - */ - var apps: firebase.app.App[]; - - /** - * Gets the {@link firebase.auth.Auth `Auth`} service for the default app or a - * given app. - * - * `firebase.auth()` can be called with no arguments to access the default app's - * {@link firebase.auth.Auth `Auth`} service or as `firebase.auth(app)` to - * access the {@link firebase.auth.Auth `Auth`} service associated with a - * specific app. - * - * @example - * ```javascript - * - * // Get the Auth service for the default app - * var defaultAuth = firebase.auth(); - * ``` - * @example - * ```javascript - * - * // Get the Auth service for a given app - * var otherAuth = firebase.auth(otherApp); - * ``` - * @param app - */ - function auth(app?: firebase.app.App): firebase.auth.Auth; - - /** - * Gets the {@link firebase.database.Database `Database`} service for the - * default app or a given app. - * - * `firebase.database()` can be called with no arguments to access the default - * app's {@link firebase.database.Database `Database`} service or as - * `firebase.database(app)` to access the - * {@link firebase.database.Database `Database`} service associated with a - * specific app. - * - * `firebase.database` is also a namespace that can be used to access global - * constants and methods associated with the `Database` service. - * - * @example - * ```javascript - * // Get the Database service for the default app - * var defaultDatabase = firebase.database(); - * ``` - * - * @example - * ```javascript - * // Get the Database service for a specific app - * var otherDatabase = firebase.database(app); - * ``` - * - * @namespace - * @param app Optional app whose Database service to - * return. If not provided, the default Database service will be returned. - * @return The default Database service if no app - * is provided or the Database service associated with the provided app. - */ - function database(app?: firebase.app.App): firebase.database.Database; - - /** - * Creates and initializes a Firebase {@link firebase.app.App app} instance. - * - * See - * {@link - * https://firebase.google.com/docs/web/setup#add_firebase_to_your_app - * Add Firebase to your app} and - * {@link - * https://firebase.google.com/docs/web/learn-more#multiple-projects - * Initialize multiple projects} for detailed documentation. - * - * @example - * ```javascript - * - * // Initialize default app - * // Retrieve your own options values by adding a web app on - * // https://console.firebase.google.com - * firebase.initializeApp({ - * apiKey: "AIza....", // Auth / General Use - * appId: "1:27992087142:web:ce....", // General Use - * projectId: "my-firebase-project", // General Use - * authDomain: "YOUR_APP.firebaseapp.com", // Auth with popup/redirect - * databaseURL: "https://YOUR_APP.firebaseio.com", // Realtime Database - * storageBucket: "YOUR_APP.appspot.com", // Storage - * messagingSenderId: "123456789", // Cloud Messaging - * measurementId: "G-12345" // Analytics - * }); - * ``` - * - * @example - * ```javascript - * - * // Initialize another app - * var otherApp = firebase.initializeApp({ - * apiKey: "AIza....", - * appId: "1:27992087142:web:ce....", - * projectId: "my-firebase-project", - * databaseURL: "https://<OTHER_DATABASE_NAME>.firebaseio.com", - * storageBucket: "<OTHER_STORAGE_BUCKET>.appspot.com" - * }, "nameOfOtherApp"); - * ``` - * - * @param options Options to configure the app's services. - * @param name Optional name of the app to initialize. If no name - * is provided, the default is `"[DEFAULT]"`. - * - * @return {!firebase.app.App} The initialized app. - */ - function initializeApp(options: Object, name?: string): firebase.app.App; - - /** - * Gets the {@link firebase.messaging.Messaging `Messaging`} service for the - * default app or a given app. - * - * `firebase.messaging()` can be called with no arguments to access the default - * app's {@link firebase.messaging.Messaging `Messaging`} service or as - * `firebase.messaging(app)` to access the - * {@link firebase.messaging.Messaging `Messaging`} service associated with a - * specific app. - * - * Calling `firebase.messaging()` in a service worker results in Firebase - * generating notifications if the push message payload has a `notification` - * parameter. - * - * The Messaging SDK does not work in a Node.js environment. - * - * @example - * ```javascript - * // Get the Messaging service for the default app - * var defaultMessaging = firebase.messaging(); - * ``` - * - * @example - * ```javascript - * // Get the Messaging service for a given app - * var otherMessaging = firebase.messaging(otherApp); - * ``` - * - * @namespace - * @param app The app to create a Messaging service for. - * If not passed, uses the default app. - */ - function messaging(app?: firebase.app.App): firebase.messaging.Messaging; - - /** - * Gets the {@link firebase.storage.Storage `Storage`} service for the default - * app or a given app. - * - * `firebase.storage()` can be called with no arguments to access the default - * app's {@link firebase.storage.Storage `Storage`} service or as - * `firebase.storage(app)` to access the - * {@link firebase.storage.Storage `Storage`} service associated with a - * specific app. - * - * @example - * ```javascript - * // Get the Storage service for the default app - * var defaultStorage = firebase.storage(); - * ``` - * - * @example - * ```javascript - * // Get the Storage service for a given app - * var otherStorage = firebase.storage(otherApp); - * ``` - * - * @param app The app to create a storage service for. - * If not passed, uses the default app. - */ - function storage(app?: firebase.app.App): firebase.storage.Storage; - - function firestore(app?: firebase.app.App): firebase.firestore.Firestore; - - function functions(app?: firebase.app.App): firebase.functions.Functions; - - /** - * Gets the {@link firebase.performance.Performance `Performance`} service. - * - * `firebase.performance()` can be called with no arguments to access the default - * app's {@link firebase.performance.Performance `Performance`} service. - * The {@link firebase.performance.Performance `Performance`} service does not work with - * any other app. - * - * The Performance SDK does not work in a Node.js environment. - * - * @example - * ```javascript - * // Get the Performance service for the default app - * const defaultPerformance = firebase.performance(); - * ``` - * - * @param app The app to create a performance service for. Performance Monitoring only works with - * the default app. - * If not passed, uses the default app. - */ - function performance( - app?: firebase.app.App - ): firebase.performance.Performance; - - /** - * Gets the {@link firebase.remoteConfig.RemoteConfig `RemoteConfig`} instance. - * - * The Remote Config SDK does not work in a Node.js environment. - * - * @example - * ```javascript - * // Get the RemoteConfig instance for the default app - * const defaultRemoteConfig = firebase.remoteConfig(); - * ``` - * - * @param app The app to create a Remote Config service for. If not passed, uses the default app. - */ - function remoteConfig( - app?: firebase.app.App - ): firebase.remoteConfig.RemoteConfig; - - /** - * Gets the {@link firebase.analytics.Analytics `Analytics`} service. - * - * `firebase.analytics()` can be called with no arguments to access the default - * app's {@link firebase.analytics.Analytics `Analytics`} service. - * - * The Analytics SDK does not work in a Node.js environment. - * - * @example - * ```javascript - * // Get the Analytics service for the default app - * const defaultAnalytics = firebase.analytics(); - * ``` - * - * @param app The app to create an analytics service for. - * If not passed, uses the default app. - */ - function analytics(app?: firebase.app.App): firebase.analytics.Analytics; - - function appCheck(app?: firebase.app.App): firebase.appCheck.AppCheck; -} - -declare namespace firebase.app { - /** - * A Firebase App holds the initialization information for a collection of - * services. - * - * Do not call this constructor directly. Instead, use - * {@link firebase.initializeApp|`firebase.initializeApp()`} to create an app. - * - */ - interface App { - /** - * Gets the {@link firebase.auth.Auth `Auth`} service for the current app. - * - * @example - * ```javascript - * var auth = app.auth(); - * // The above is shorthand for: - * // var auth = firebase.auth(app); - * ``` - */ - auth(): firebase.auth.Auth; - /** - * Gets the {@link firebase.database.Database `Database`} service for the - * current app. - * - * @example - * ```javascript - * var database = app.database(); - * // The above is shorthand for: - * // var database = firebase.database(app); - * ``` - */ - database(url?: string): firebase.database.Database; - /** - * Renders this app unusable and frees the resources of all associated - * services. - * - * @example - * ```javascript - * app.delete() - * .then(function() { - * console.log("App deleted successfully"); - * }) - * .catch(function(error) { - * console.log("Error deleting app:", error); - * }); - * ``` - */ - delete(): Promise<any>; - /** - * Gets the {@link firebase.installations.Installations `Installations`} service for the - * current app. - * - * The Installations SDK does not work in a Node.js environment. - * - * @example - * ```javascript - * const installations = app.installations(); - * // The above is shorthand for: - * // const installations = firebase.installations(app); - * ``` - */ - installations(): firebase.installations.Installations; - /** - * Gets the {@link firebase.messaging.Messaging `Messaging`} service for the - * current app. - * - * The Messaging SDK does not work in a Node.js environment. - * - * @example - * ```javascript - * var messaging = app.messaging(); - * // The above is shorthand for: - * // var messaging = firebase.messaging(app); - * ``` - */ - messaging(): firebase.messaging.Messaging; - /** - * The (read-only) name for this app. - * - * The default app's name is `"[DEFAULT]"`. - * - * @example - * ```javascript - * // The default app's name is "[DEFAULT]" - * firebase.initializeApp(defaultAppConfig); - * console.log(firebase.app().name); // "[DEFAULT]" - * ``` - * - * @example - * ```javascript - * // A named app's name is what you provide to initializeApp() - * var otherApp = firebase.initializeApp(otherAppConfig, "other"); - * console.log(otherApp.name); // "other" - * ``` - */ - name: string; - /** - * The settable config flag for GDPR opt-in/opt-out - */ - automaticDataCollectionEnabled: boolean; - /** - * The (read-only) configuration options for this app. These are the original - * parameters given in - * {@link firebase.initializeApp `firebase.initializeApp()`}. - * - * @example - * ```javascript - * var app = firebase.initializeApp(config); - * console.log(app.options.databaseURL === config.databaseURL); // true - * ``` - */ - options: Object; - /** - * Gets the {@link firebase.storage.Storage `Storage`} service for the current - * app, optionally initialized with a custom storage bucket. - * - * @example - * ```javascript - * var storage = app.storage(); - * // The above is shorthand for: - * // var storage = firebase.storage(app); - * ``` - * - * @example - * ```javascript - * var storage = app.storage("gs://your-app.appspot.com"); - * ``` - * - * @param url The gs:// url to your Firebase Storage Bucket. - * If not passed, uses the app's default Storage Bucket. - */ - storage(url?: string): firebase.storage.Storage; - firestore(): firebase.firestore.Firestore; - functions(regionOrCustomDomain?: string): firebase.functions.Functions; - /** - * Gets the {@link firebase.performance.Performance `Performance`} service for the - * current app. If the current app is not the default one, throws an error. - * - * The Performance SDK does not work in a Node.js environment. - * - * @example - * ```javascript - * const perf = app.performance(); - * // The above is shorthand for: - * // const perf = firebase.performance(app); - * ``` - */ - performance(): firebase.performance.Performance; - /** - * Gets the {@link firebase.remoteConfig.RemoteConfig `RemoteConfig`} instance. - * - * The Remote Config SDK does not work in a Node.js environment. - * - * @example - * ```javascript - * const rc = app.remoteConfig(); - * // The above is shorthand for: - * // const rc = firebase.remoteConfig(app); - * ``` - */ - remoteConfig(): firebase.remoteConfig.RemoteConfig; - /** - * Gets the {@link firebase.analytics.Analytics `Analytics`} service for the - * current app. If the current app is not the default one, throws an error. - * - * The Analytics SDK does not work in a Node.js environment. - * - * @example - * ```javascript - * const analytics = app.analytics(); - * // The above is shorthand for: - * // const analytics = firebase.analytics(app); - * ``` - */ - analytics(): firebase.analytics.Analytics; - appCheck(): firebase.appCheck.AppCheck; - } -} - -/** - * Firebase App Check does not work in a Node.js environment using `ReCaptchaV3Provider` or - * `ReCaptchaEnterpriseProvider`, but can be used in Node.js if you use - * `CustomProvider` and write your own attestation method. - */ -declare namespace firebase.appCheck { - /** - * Result returned by - * {@link firebase.appCheck.AppCheck.getToken `firebase.appCheck().getToken()`}. - */ - interface AppCheckTokenResult { - token: string; - } - /* - * reCAPTCHA v3 token provider. - */ - class ReCaptchaV3Provider { - /** - * @param siteKey - reCAPTCHA v3 site key (public key). - */ - constructor(siteKey: string); - } - /* - * reCAPTCHA Enterprise token provider. - */ - class ReCaptchaEnterpriseProvider { - /** - * @param keyId - reCAPTCHA Enterprise key ID. - */ - constructor(keyId: string); - } - /* - * Custom token provider. - */ - class CustomProvider { - /** - * @param options - Options for creating the custom provider. - */ - constructor(options: CustomProviderOptions); - } - /** - * Options when creating a CustomProvider. - */ - interface CustomProviderOptions { - /** - * Function to get an App Check token through a custom provider - * service. - */ - getToken: () => Promise<AppCheckToken>; - } - - /** - * The Firebase AppCheck service interface. - * - * Do not call this constructor directly. Instead, use - * {@link firebase.appCheck `firebase.appCheck()`}. - */ - export interface AppCheck { - /** - * Activate AppCheck - * @param provider This can be a `ReCaptchaV3Provider` instance, - * a `ReCaptchaEnterpriseProvider` instance, a `CustomProvider` instance, - * an object with a custom `getToken()` method, or a reCAPTCHA site key. - * @param isTokenAutoRefreshEnabled If true, the SDK automatically - * refreshes App Check tokens as needed. If undefined, defaults to the - * value of `app.automaticDataCollectionEnabled`, which defaults to - * false and can be set in the app config. - */ - activate( - provider: - | ReCaptchaV3Provider - | ReCaptchaEnterpriseProvider - | CustomProvider - | AppCheckProvider - | { getToken: () => AppCheckToken } - | string, - isTokenAutoRefreshEnabled?: boolean - ): void; - - /** - * - * @param isTokenAutoRefreshEnabled If true, the SDK automatically - * refreshes App Check tokens as needed. This overrides any value set - * during `activate()`. - */ - setTokenAutoRefreshEnabled(isTokenAutoRefreshEnabled: boolean): void; - /** - * Get the current App Check token. Attaches to the most recent - * in-flight request if one is present. Returns null if no token - * is present and no token requests are in-flight. - * - * @param forceRefresh - If true, will always try to fetch a fresh token. - * If false, will use a cached token if found in storage. - */ - getToken( - forceRefresh?: boolean - ): Promise<firebase.appCheck.AppCheckTokenResult>; - - /** - * Registers a listener to changes in the token state. There can be more - * than one listener registered at the same time for one or more - * App Check instances. The listeners call back on the UI thread whenever - * the current token associated with this App Check instance changes. - * - * @param observer An object with `next`, `error`, and `complete` - * properties. `next` is called with an - * {@link firebase.appCheck.AppCheckTokenResult `AppCheckTokenResult`} - * whenever the token changes. `error` is optional and is called if an - * error is thrown by the listener (the `next` function). `complete` - * is unused, as the token stream is unending. - * - * @returns A function that unsubscribes this listener. - */ - onTokenChanged(observer: { - next: (tokenResult: firebase.appCheck.AppCheckTokenResult) => void; - error?: (error: Error) => void; - complete?: () => void; - }): Unsubscribe; - - /** - * Registers a listener to changes in the token state. There can be more - * than one listener registered at the same time for one or more - * App Check instances. The listeners call back on the UI thread whenever - * the current token associated with this App Check instance changes. - * - * @param onNext When the token changes, this function is called with aa - * {@link firebase.appCheck.AppCheckTokenResult `AppCheckTokenResult`}. - * @param onError Optional. Called if there is an error thrown by the - * listener (the `onNext` function). - * @param onCompletion Currently unused, as the token stream is unending. - * @returns A function that unsubscribes this listener. - */ - onTokenChanged( - onNext: (tokenResult: firebase.appCheck.AppCheckTokenResult) => void, - onError?: (error: Error) => void, - onCompletion?: () => void - ): Unsubscribe; - } - - /** - * An App Check provider. This can be either the built-in reCAPTCHA - * provider or a custom provider. For more on custom providers, see - * https://firebase.google.com/docs/app-check/web-custom-provider - */ - interface AppCheckProvider { - /** - * Returns an AppCheck token. - */ - getToken(): Promise<AppCheckToken>; - } - - /** - * The token returned from an {@link firebase.appCheck.AppCheckProvider `AppCheckProvider`}. - */ - interface AppCheckToken { - /** - * The token string in JWT format. - */ - readonly token: string; - /** - * The local timestamp after which the token will expire. - */ - readonly expireTimeMillis: number; - } -} - -/** - * The Installations SDK does not work in a Node.js environment. - */ -declare namespace firebase.installations { - /** - * The Firebase Installations service interface. - * - * Do not call this constructor directly. Instead, use - * {@link firebase.installations `firebase.installations()`}. - */ - export interface Installations { - /** - * The {@link firebase.app.App app} associated with the `Installations` service - * instance. - * - * @example - * ```javascript - * var app = analytics.app; - * ``` - */ - app: firebase.app.App; - /** - * Creates a Firebase Installation if there isn't one for the app and - * returns the Installation ID. - * - * @return Firebase Installation ID - */ - getId(): Promise<string>; - - /** - * Returns an Authentication Token for the current Firebase Installation. - * - * @return Firebase Installation Authentication Token - */ - getToken(forceRefresh?: boolean): Promise<string>; - - /** - * Deletes the Firebase Installation and all associated data. - */ - delete(): Promise<void>; - - /** - * Sets a new callback that will get called when Installation ID changes. - * Returns an unsubscribe function that will remove the callback when called. - */ - onIdChange(callback: (installationId: string) => void): () => void; - } -} - -/** - * The Performance SDK does not work in a Node.js environment. - */ -declare namespace firebase.performance { - /** - * The Firebase Performance Monitoring service interface. - * - * Do not call this constructor directly. Instead, use - * {@link firebase.performance `firebase.performance()`}. - */ - export interface Performance { - /** - * The {@link firebase.app.App app} associated with the `Performance` service - * instance. - * - * @example - * ```javascript - * var app = analytics.app; - * ``` - */ - app: firebase.app.App; - /** - * Creates an uninitialized instance of {@link firebase.performance.Trace `trace`} and returns - * it. - * - * @param traceName The name of the trace instance. - * @return The Trace instance. - */ - trace(traceName: string): Trace; - - /** - * Controls the logging of automatic traces and HTTP/S network monitoring. - */ - instrumentationEnabled: boolean; - /** - * Controls the logging of custom traces. - */ - dataCollectionEnabled: boolean; - } - - export interface Trace { - /** - * Starts the timing for the {@link firebase.performance.Trace `trace`} instance. - */ - start(): void; - /** - * Stops the timing of the {@link firebase.performance.Trace `trace`} instance and logs the - * data of the instance. - */ - stop(): void; - /** - * Records a {@link firebase.performance.Trace `trace`} from given parameters. This provides a - * direct way to use {@link firebase.performance.Trace `trace`} without a need to start/stop. - * This is useful for use cases in which the {@link firebase.performance.Trace `trace`} cannot - * directly be used (e.g. if the duration was captured before the Performance SDK was loaded). - * - * @param startTime Trace start time since epoch in millisec. - * @param duration The duration of the trace in millisec. - * @param options An object which can optionally hold maps of custom metrics and - * custom attributes. - */ - record( - startTime: number, - duration: number, - options?: { - metrics?: { [key: string]: number }; - attributes?: { [key: string]: string }; - } - ): void; - /** - * Adds to the value of a custom metric. If a custom metric with the provided name does not - * exist, it creates one with that name and the value equal to the given number. - * - * @param metricName The name of the custom metric. - * @param num The number to be added to the value of the custom metric. If not provided, it - * uses a default value of one. - */ - incrementMetric(metricName: string, num?: number): void; - /** - * Sets the value of the specified custom metric to the given number regardless of whether - * a metric with that name already exists on the {@link firebase.performance.Trace `trace`} - * instance or not. - * - * @param metricName Name of the custom metric. - * @param num Value to of the custom metric. - */ - putMetric(metricName: string, num: number): void; - /** - * Returns the value of the custom metric by that name. If a custom metric with that name does - * not exist returns zero. - * - * @param metricName Name of the custom metric. - */ - getMetric(metricName: string): number; - /** - * Set a custom attribute of a {@link firebase.performance.Trace `trace`} to a certain value. - * - * @param attr Name of the custom attribute. - * @param value Value of the custom attribute. - */ - putAttribute(attr: string, value: string): void; - /** - * Retrieves the value that the custom attribute is set to. - * - * @param attr Name of the custom attribute. - */ - getAttribute(attr: string): string | undefined; - /** - * Removes the specified custom attribute from a {@link firebase.performance.Trace `trace`} - * instance. - * - * @param attr Name of the custom attribute. - */ - - removeAttribute(attr: string): void; - /** - * Returns a map of all custom attributes of a {@link firebase.performance.Trace `trace`} - * instance. - */ - getAttributes(): { [key: string]: string }; - } -} - -/** - * The Remote Config SDK does not work in a Node.js environment. - */ -declare namespace firebase.remoteConfig { - /** - * The Firebase Remote Config service interface. - * - * Do not call this constructor directly. Instead, use - * {@link firebase.remoteConfig `firebase.remoteConfig()`}. - */ - export interface RemoteConfig { - /** - * The {@link firebase.app.App app} associated with the `Performance` service - * instance. - * - * @example - * ```javascript - * var app = analytics.app; - * ``` - */ - app: firebase.app.App; - /** - * Defines configuration for the Remote Config SDK. - */ - settings: Settings; - - /** - * Object containing default values for configs. - */ - defaultConfig: { [key: string]: string | number | boolean }; - - /** - * The Unix timestamp in milliseconds of the last <i>successful</i> fetch, or negative one if - * the {@link RemoteConfig} instance either hasn't fetched or initialization - * is incomplete. - */ - fetchTimeMillis: number; - - /** - * The status of the last fetch <i>attempt</i>. - */ - lastFetchStatus: FetchStatus; - - /** - * Makes the last fetched config available to the getters. - * Returns a promise which resolves to true if the current call activated the fetched configs. - * If the fetched configs were already activated, the promise will resolve to false. - */ - activate(): Promise<boolean>; - - /** - * Ensures the last activated config are available to the getters. - */ - ensureInitialized(): Promise<void>; - - /** - * Fetches and caches configuration from the Remote Config service. - */ - fetch(): Promise<void>; - - /** - * Performs fetch and activate operations, as a convenience. - * Returns a promise which resolves to true if the current call activated the fetched configs. - * If the fetched configs were already activated, the promise will resolve to false. - */ - fetchAndActivate(): Promise<boolean>; - - /** - * Gets all config. - */ - getAll(): { [key: string]: Value }; - - /** - * Gets the value for the given key as a boolean. - * - * Convenience method for calling <code>remoteConfig.getValue(key).asBoolean()</code>. - */ - getBoolean(key: string): boolean; - - /** - * Gets the value for the given key as a number. - * - * Convenience method for calling <code>remoteConfig.getValue(key).asNumber()</code>. - */ - getNumber(key: string): number; - - /** - * Gets the value for the given key as a String. - * - * Convenience method for calling <code>remoteConfig.getValue(key).asString()</code>. - */ - getString(key: string): string; - - /** - * Gets the {@link Value} for the given key. - */ - getValue(key: string): Value; - - /** - * Defines the log level to use. - */ - setLogLevel(logLevel: LogLevel): void; - } - - /** - * Indicates the source of a value. - * - * <ul> - * <li>"static" indicates the value was defined by a static constant.</li> - * <li>"default" indicates the value was defined by default config.</li> - * <li>"remote" indicates the value was defined by fetched config.</li> - * </ul> - */ - export type ValueSource = 'static' | 'default' | 'remote'; - - /** - * Wraps a value with metadata and type-safe getters. - */ - export interface Value { - /** - * Gets the value as a boolean. - * - * The following values (case-insensitive) are interpreted as true: - * "1", "true", "t", "yes", "y", "on". Other values are interpreted as false. - */ - asBoolean(): boolean; - - /** - * Gets the value as a number. Comparable to calling <code>Number(value) || 0</code>. - */ - asNumber(): number; - - /** - * Gets the value as a string. - */ - asString(): string; - - /** - * Gets the {@link ValueSource} for the given key. - */ - getSource(): ValueSource; - } - - /** - * Defines configuration options for the Remote Config SDK. - */ - export interface Settings { - /** - * Defines the maximum age in milliseconds of an entry in the config cache before - * it is considered stale. Defaults to 43200000 (Twelve hours). - */ - minimumFetchIntervalMillis: number; - - /** - * Defines the maximum amount of milliseconds to wait for a response when fetching - * configuration from the Remote Config server. Defaults to 60000 (One minute). - */ - fetchTimeoutMillis: number; - } - - /** - * Summarizes the outcome of the last attempt to fetch config from the Firebase Remote Config server. - * - * <ul> - * <li>"no-fetch-yet" indicates the {@link RemoteConfig} instance has not yet attempted - * to fetch config, or that SDK initialization is incomplete.</li> - * <li>"success" indicates the last attempt succeeded.</li> - * <li>"failure" indicates the last attempt failed.</li> - * <li>"throttle" indicates the last attempt was rate-limited.</li> - * </ul> - */ - export type FetchStatus = 'no-fetch-yet' | 'success' | 'failure' | 'throttle'; - - /** - * Defines levels of Remote Config logging. - */ - export type LogLevel = 'debug' | 'error' | 'silent'; - - /** - * This method provides two different checks: - * - * 1. Check if IndexedDB exists in the browser environment. - * 2. Check if the current browser context allows IndexedDB `open()` calls. - * - * It returns a `Promise` which resolves to true if a {@link RemoteConfig} instance - * can be initialized in this environment, or false if it cannot. - */ - export function isSupported(): Promise<boolean>; -} - -declare namespace firebase.functions { - /** - * An HttpsCallableResult wraps a single result from a function call. - */ - export interface HttpsCallableResult { - readonly data: any; - } - /** - * An HttpsCallable is a reference to a "callable" http trigger in - * Google Cloud Functions. - */ - export interface HttpsCallable { - (data?: any): Promise<HttpsCallableResult>; - } - export interface HttpsCallableOptions { - timeout?: number; - } - /** - * The Cloud Functions for Firebase service interface. - * - * Do not call this constructor directly. Instead, use - * {@link firebase.functions `firebase.functions()`}. - */ - export class Functions { - private constructor(); - - /** - * Modify this instance to communicate with the Cloud Functions emulator. - * - * Note: this must be called before this instance has been used to do any operations. - * - * @param host The emulator host (ex: localhost) - * @param port The emulator port (ex: 5001) - */ - useEmulator(host: string, port: number): void; - - /** - * Changes this instance to point to a Cloud Functions emulator running - * locally. See https://firebase.google.com/docs/functions/local-emulator - * - * @deprecated Prefer the useEmulator(host, port) method. - * @param origin The origin of the local emulator, such as - * "http://localhost:5005". - */ - useFunctionsEmulator(url: string): void; - /** - * Gets an `HttpsCallable` instance that refers to the function with the given - * name. - * - * @param name The name of the https callable function. - * @param options The options for this HttpsCallable instance. - * @return The `HttpsCallable` instance. - */ - httpsCallable(name: string, options?: HttpsCallableOptions): HttpsCallable; - } - /** - * The set of Firebase Functions status codes. The codes are the same at the - * ones exposed by gRPC here: - * https://github.com/grpc/grpc/blob/master/doc/statuscodes.md - * - * Possible values: - * - 'cancelled': The operation was cancelled (typically by the caller). - * - 'unknown': Unknown error or an error from a different error domain. - * - 'invalid-argument': Client specified an invalid argument. Note that this - * differs from 'failed-precondition'. 'invalid-argument' indicates - * arguments that are problematic regardless of the state of the system - * (e.g. an invalid field name). - * - 'deadline-exceeded': Deadline expired before operation could complete. - * For operations that change the state of the system, this error may be - * returned even if the operation has completed successfully. For example, - * a successful response from a server could have been delayed long enough - * for the deadline to expire. - * - 'not-found': Some requested document was not found. - * - 'already-exists': Some document that we attempted to create already - * exists. - * - 'permission-denied': The caller does not have permission to execute the - * specified operation. - * - 'resource-exhausted': Some resource has been exhausted, perhaps a - * per-user quota, or perhaps the entire file system is out of space. - * - 'failed-precondition': Operation was rejected because the system is not - * in a state required for the operation's execution. - * - 'aborted': The operation was aborted, typically due to a concurrency - * issue like transaction aborts, etc. - * - 'out-of-range': Operation was attempted past the valid range. - * - 'unimplemented': Operation is not implemented or not supported/enabled. - * - 'internal': Internal errors. Means some invariants expected by - * underlying system has been broken. If you see one of these errors, - * something is very broken. - * - 'unavailable': The service is currently unavailable. This is most likely - * a transient condition and may be corrected by retrying with a backoff. - * - 'data-loss': Unrecoverable data loss or corruption. - * - 'unauthenticated': The request does not have valid authentication - * credentials for the operation. - */ - export type FunctionsErrorCode = - | 'ok' - | 'cancelled' - | 'unknown' - | 'invalid-argument' - | 'deadline-exceeded' - | 'not-found' - | 'already-exists' - | 'permission-denied' - | 'resource-exhausted' - | 'failed-precondition' - | 'aborted' - | 'out-of-range' - | 'unimplemented' - | 'internal' - | 'unavailable' - | 'data-loss' - | 'unauthenticated'; - export interface HttpsError extends Error { - /** - * A standard error code that will be returned to the client. This also - * determines the HTTP status code of the response, as defined in code.proto. - */ - readonly code: FunctionsErrorCode; - /** - * Extra data to be converted to JSON and included in the error response. - */ - readonly details?: any; - } -} - -declare namespace firebase.auth { - /** - * A utility class to parse email action URLs. - */ - class ActionCodeURL { - private constructor(); - /** - * The API key of the email action link. - */ - apiKey: string; - /** - * The action code of the email action link. - */ - code: string; - /** - * The continue URL of the email action link. Null if not provided. - */ - continueUrl: string | null; - /** - * The language code of the email action link. Null if not provided. - */ - languageCode: string | null; - /** - * The action performed by the email action link. It returns from one - * of the types from {@link firebase.auth.ActionCodeInfo}. - */ - operation: firebase.auth.ActionCodeInfo.Operation; - /** - * Parses the email action link string and returns an ActionCodeURL object - * if the link is valid, otherwise returns null. - * - * @param link The email action link string. - * @return The ActionCodeURL object, or null if the link is invalid. - */ - static parseLink(link: string): firebase.auth.ActionCodeURL | null; - /** - * The tenant ID of the email action link. Null if the email action - * is from the parent project. - */ - tenantId: string | null; - } - /** - * A response from {@link firebase.auth.Auth.checkActionCode}. - */ - interface ActionCodeInfo { - /** - * The data associated with the action code. - * - * For the `PASSWORD_RESET`, `VERIFY_EMAIL`, and `RECOVER_EMAIL` actions, this object - * contains an `email` field with the address the email was sent to. - * - * For the RECOVER_EMAIL action, which allows a user to undo an email address - * change, this object also contains a `previousEmail` field with the user account's - * current email address. After the action completes, the user's email address will - * revert to the value in the `email` field from the value in `previousEmail` field. - * - * For the VERIFY_AND_CHANGE_EMAIL action, which allows a user to verify the email - * before updating it, this object contains a `previousEmail` field with the user - * account's email address before updating. After the action completes, the user's - * email address will be updated to the value in the `email` field from the value - * in `previousEmail` field. - * - * For the REVERT_SECOND_FACTOR_ADDITION action, which allows a user to unenroll - * a newly added second factor, this object contains a `multiFactorInfo` field with - * the information about the second factor. For phone second factor, the - * `multiFactorInfo` is a {@link firebase.auth.PhoneMultiFactorInfo} object, - * which contains the phone number. - */ - data: { - email?: string | null; - /** - * @deprecated - * This field is deprecated in favor of previousEmail. - */ - fromEmail?: string | null; - multiFactorInfo?: firebase.auth.MultiFactorInfo | null; - previousEmail?: string | null; - }; - /** - * The type of operation that generated the action code. This could be: - * <ul> - * <li>`EMAIL_SIGNIN`: email sign in code generated via - * {@link firebase.auth.Auth.sendSignInLinkToEmail}.</li> - * <li>`PASSWORD_RESET`: password reset code generated via - * {@link firebase.auth.Auth.sendPasswordResetEmail}.</li> - * <li>`RECOVER_EMAIL`: email change revocation code generated via - * {@link firebase.User.updateEmail}.</li> - * <li>`REVERT_SECOND_FACTOR_ADDITION`: revert second factor addition - * code generated via - * {@link firebase.User.MultiFactorUser.enroll}.</li> - * <li>`VERIFY_AND_CHANGE_EMAIL`: verify and change email code generated - * via {@link firebase.User.verifyBeforeUpdateEmail}.</li> - * <li>`VERIFY_EMAIL`: email verification code generated via - * {@link firebase.User.sendEmailVerification}.</li> - * </ul> - */ - operation: string; - } - - /** - * This is the interface that defines the required continue/state URL with - * optional Android and iOS bundle identifiers. - * The action code setting fields are: - * <ul> - * <li><p>url: Sets the link continue/state URL, which has different meanings - * in different contexts:</p> - * <ul> - * <li>When the link is handled in the web action widgets, this is the deep - * link in the continueUrl query parameter.</li> - * <li>When the link is handled in the app directly, this is the continueUrl - * query parameter in the deep link of the Dynamic Link.</li> - * </ul> - * </li> - * <li>iOS: Sets the iOS bundle ID. This will try to open the link in an iOS app - * if it is installed.</li> - * <li>android: Sets the Android package name. This will try to open the link in - * an android app if it is installed. If installApp is passed, it specifies - * whether to install the Android app if the device supports it and the app - * is not already installed. If this field is provided without a - * packageName, an error is thrown explaining that the packageName must be - * provided in conjunction with this field. - * If minimumVersion is specified, and an older version of the app is - * installed, the user is taken to the Play Store to upgrade the app.</li> - * <li>handleCodeInApp: The default is false. When set to true, the action code - * link will be be sent as a Universal Link or Android App Link and will be - * opened by the app if installed. In the false case, the code will be sent - * to the web widget first and then on continue will redirect to the app if - * installed.</li> - * </ul> - */ - type ActionCodeSettings = { - android?: { - installApp?: boolean; - minimumVersion?: string; - packageName: string; - }; - handleCodeInApp?: boolean; - iOS?: { bundleId: string }; - url: string; - dynamicLinkDomain?: string; - }; - - /** - * A structure containing additional user information from a federated identity - * provider. - */ - type AdditionalUserInfo = { - isNewUser: boolean; - profile: Object | null; - providerId: string; - username?: string | null; - }; - - /** - * A verifier for domain verification and abuse prevention. Currently, the - * only implementation is {@link firebase.auth.RecaptchaVerifier}. - */ - interface ApplicationVerifier { - /** - * Identifies the type of application verifier (e.g. "recaptcha"). - */ - type: string; - /** - * Executes the verification process. - * @return A Promise for a token that can be used to - * assert the validity of a request. - */ - verify(): Promise<string>; - } - - /** - * Interface representing an Auth instance's settings, currently used for - * enabling/disabling app verification for phone Auth testing. - */ - interface AuthSettings { - /** - * When set, this property disables app verification for the purpose of testing - * phone authentication. For this property to take effect, it needs to be set - * before rendering a reCAPTCHA app verifier. When this is disabled, a - * mock reCAPTCHA is rendered instead. This is useful for manual testing during - * development or for automated integration tests. - * - * In order to use this feature, you will need to - * {@link https://firebase.google.com/docs/auth/web/phone-auth#test-with-whitelisted-phone-numbers - * whitelist your phone number} via the - * Firebase Console. - * - * The default value is false (app verification is enabled). - */ - appVerificationDisabledForTesting: boolean; - } - - /** - * Interface representing the Auth config. - * - * @public - */ - export interface Config { - /** - * The API Key used to communicate with the Firebase Auth backend. - */ - apiKey: string; - /** - * The host at which the Firebase Auth backend is running. - */ - apiHost: string; - /** - * The scheme used to communicate with the Firebase Auth backend. - */ - apiScheme: string; - /** - * The host at which the Secure Token API is running. - */ - tokenApiHost: string; - /** - * The SDK Client Version. - */ - sdkClientVersion: string; - /** - * The domain at which the web widgets are hosted (provided via Firebase Config). - */ - authDomain?: string; - } - - /** - * Configuration of Firebase Authentication Emulator. - */ - export interface EmulatorConfig { - /** - * The protocol used to communicate with the emulator ("http"/"https"). - */ - readonly protocol: string; - /** - * The hostname of the emulator, which may be a domain ("localhost"), IPv4 address ("127.0.0.1") - * or quoted IPv6 address ("[::1]"). - */ - readonly host: string; - /** - * The port of the emulator, or null if port isn't specified (i.e. protocol default). - */ - readonly port: number | null; - /** - * The emulator-specific options. - */ - readonly options: { - /** - * Whether the warning banner attached to the DOM was disabled. - */ - readonly disableWarnings: boolean; - }; - } - - /** - * The Firebase Auth service interface. - * - * Do not call this constructor directly. Instead, use - * {@link firebase.auth `firebase.auth()`}. - * - * See - * {@link https://firebase.google.com/docs/auth/ Firebase Authentication} - * for a full guide on how to use the Firebase Auth service. - * - */ - interface Auth { - /** The name of the app associated with the Auth service instance. */ - readonly name: string; - /** The config used to initialize this instance. */ - readonly config: Config; - /** The current emulator configuration (or null). */ - readonly emulatorConfig: EmulatorConfig | null; - /** - * The {@link firebase.app.App app} associated with the `Auth` service - * instance. - * - * @example - * ```javascript - * var app = auth.app; - * ``` - */ - app: firebase.app.App; - /** - * Applies a verification code sent to the user by email or other out-of-band - * mechanism. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/expired-action-code</dt> - * <dd>Thrown if the action code has expired.</dd> - * <dt>auth/invalid-action-code</dt> - * <dd>Thrown if the action code is invalid. This can happen if the code is - * malformed or has already been used.</dd> - * <dt>auth/user-disabled</dt> - * <dd>Thrown if the user corresponding to the given action code has been - * disabled.</dd> - * <dt>auth/user-not-found</dt> - * <dd>Thrown if there is no user corresponding to the action code. This may - * have happened if the user was deleted between when the action code was - * issued and when this method was called.</dd> - * </dl> - * - * @param code A verification code sent to the user. - */ - applyActionCode(code: string): Promise<void>; - /** - * Checks a verification code sent to the user by email or other out-of-band - * mechanism. - * - * Returns metadata about the code. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/expired-action-code</dt> - * <dd>Thrown if the action code has expired.</dd> - * <dt>auth/invalid-action-code</dt> - * <dd>Thrown if the action code is invalid. This can happen if the code is - * malformed or has already been used.</dd> - * <dt>auth/user-disabled</dt> - * <dd>Thrown if the user corresponding to the given action code has been - * disabled.</dd> - * <dt>auth/user-not-found</dt> - * <dd>Thrown if there is no user corresponding to the action code. This may - * have happened if the user was deleted between when the action code was - * issued and when this method was called.</dd> - * </dl> - * - * @param code A verification code sent to the user. - */ - checkActionCode(code: string): Promise<firebase.auth.ActionCodeInfo>; - /** - * Completes the password reset process, given a confirmation code and new - * password. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/expired-action-code</dt> - * <dd>Thrown if the password reset code has expired.</dd> - * <dt>auth/invalid-action-code</dt> - * <dd>Thrown if the password reset code is invalid. This can happen if the - * code is malformed or has already been used.</dd> - * <dt>auth/user-disabled</dt> - * <dd>Thrown if the user corresponding to the given password reset code has - * been disabled.</dd> - * <dt>auth/user-not-found</dt> - * <dd>Thrown if there is no user corresponding to the password reset code. This - * may have happened if the user was deleted between when the code was - * issued and when this method was called.</dd> - * <dt>auth/weak-password</dt> - * <dd>Thrown if the new password is not strong enough.</dd> - * </dl> - * - * @param code The confirmation code send via email to the user. - * @param newPassword The new password. - */ - confirmPasswordReset(code: string, newPassword: string): Promise<void>; - - /** - * Creates a new user account associated with the specified email address and - * password. - * - * On successful creation of the user account, this user will also be - * signed in to your application. - * - * User account creation can fail if the account already exists or the password - * is invalid. - * - * Note: The email address acts as a unique identifier for the user and - * enables an email-based password reset. This function will create - * a new user account and set the initial user password. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/email-already-in-use</dt> - * <dd>Thrown if there already exists an account with the given email - * address.</dd> - * <dt>auth/invalid-email</dt> - * <dd>Thrown if the email address is not valid.</dd> - * <dt>auth/operation-not-allowed</dt> - * <dd>Thrown if email/password accounts are not enabled. Enable email/password - * accounts in the Firebase Console, under the Auth tab.</dd> - * <dt>auth/weak-password</dt> - * <dd>Thrown if the password is not strong enough.</dd> - * </dl> - * - * @example - * ```javascript - * firebase.auth().createUserWithEmailAndPassword(email, password) - * .catch(function(error) { - * // Handle Errors here. - * var errorCode = error.code; - * var errorMessage = error.message; - * if (errorCode == 'auth/weak-password') { - * alert('The password is too weak.'); - * } else { - * alert(errorMessage); - * } - * console.log(error); - * }); - * ``` - * @param email The user's email address. - * @param password The user's chosen password. - */ - createUserWithEmailAndPassword( - email: string, - password: string - ): Promise<firebase.auth.UserCredential>; - /** - * The currently signed-in user (or null). - */ - currentUser: firebase.User | null; - - /** - * Gets the list of possible sign in methods for the given email address. This - * is useful to differentiate methods of sign-in for the same provider, - * eg. `EmailAuthProvider` which has 2 methods of sign-in, email/password and - * email/link. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/invalid-email</dt> - * <dd>Thrown if the email address is not valid.</dd> - * </dl> - */ - fetchSignInMethodsForEmail(email: string): Promise<Array<string>>; - - /** - * Checks if an incoming link is a sign-in with email link. - */ - isSignInWithEmailLink(emailLink: string): boolean; - /** - * Returns a UserCredential from the redirect-based sign-in flow. - * - * If sign-in succeeded, returns the signed in user. If sign-in was - * unsuccessful, fails with an error. If no redirect operation was called, returns `null`. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/account-exists-with-different-credential</dt> - * <dd>Thrown if there already exists an account with the email address - * asserted by the credential. Resolve this by calling - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail} with the error.email - * and then asking the user to sign in using one of the returned providers. - * Once the user is signed in, the original credential retrieved from the - * error.credential can be linked to the user with - * {@link firebase.User.linkWithCredential} to prevent the user from signing - * in again to the original provider via popup or redirect. If you are using - * redirects for sign in, save the credential in session storage and then - * retrieve on redirect and repopulate the credential using for example - * {@link firebase.auth.GoogleAuthProvider.credential} depending on the - * credential provider id and complete the link.</dd> - * <dt>auth/auth-domain-config-required</dt> - * <dd>Thrown if authDomain configuration is not provided when calling - * firebase.initializeApp(). Check Firebase Console for instructions on - * determining and passing that field.</dd> - * <dt>auth/credential-already-in-use</dt> - * <dd>Thrown if the account corresponding to the credential already exists - * among your users, or is already linked to a Firebase User. - * For example, this error could be thrown if you are upgrading an anonymous - * user to a Google user by linking a Google credential to it and the Google - * credential used is already associated with an existing Firebase Google - * user. - * An <code>error.email</code> and <code>error.credential</code> - * ({@link firebase.auth.AuthCredential}) fields are also provided. You can - * recover from this error by signing in with that credential directly via - * {@link firebase.auth.Auth.signInWithCredential}.</dd> - * <dt>auth/email-already-in-use</dt> - * <dd>Thrown if the email corresponding to the credential already exists - * among your users. When thrown while linking a credential to an existing - * user, an <code>error.email</code> and <code>error.credential</code> - * ({@link firebase.auth.AuthCredential}) fields are also provided. - * You have to link the credential to the existing user with that email if - * you wish to continue signing in with that credential. To do so, call - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}, sign in to - * <code>error.email</code> via one of the providers returned and then - * {@link firebase.User.linkWithCredential} the original credential to that - * newly signed in user.</dd> - * <dt>auth/operation-not-allowed</dt> - * <dd>Thrown if the type of account corresponding to the credential - * is not enabled. Enable the account type in the Firebase Console, under - * the Auth tab.</dd> - * <dt>auth/operation-not-supported-in-this-environment</dt> - * <dd>Thrown if this operation is not supported in the environment your - * application is running on. "location.protocol" must be http or https. - * </dd> - * <dt>auth/timeout</dt> - * <dd>Thrown typically if the app domain is not authorized for OAuth operations - * for your Firebase project. Edit the list of authorized domains from the - * Firebase console.</dd> - * </dl> - * - * This method does not work in a Node.js environment. - * - * @example - * ```javascript - * // First, we perform the signInWithRedirect. - * // Creates the provider object. - * var provider = new firebase.auth.FacebookAuthProvider(); - * // You can add additional scopes to the provider: - * provider.addScope('email'); - * provider.addScope('user_friends'); - * // Sign in with redirect: - * auth.signInWithRedirect(provider) - * //////////////////////////////////////////////////////////// - * // The user is redirected to the provider's sign in flow... - * //////////////////////////////////////////////////////////// - * // Then redirected back to the app, where we check the redirect result: - * auth.getRedirectResult().then(function(result) { - * // The firebase.User instance: - * var user = result.user; - * // The Facebook firebase.auth.AuthCredential containing the Facebook - * // access token: - * var credential = result.credential; - * // As this API can be used for sign-in, linking and reauthentication, - * // check the operationType to determine what triggered this redirect - * // operation. - * var operationType = result.operationType; - * }, function(error) { - * // The provider's account email, can be used in case of - * // auth/account-exists-with-different-credential to fetch the providers - * // linked to the email: - * var email = error.email; - * // The provider's credential: - * var credential = error.credential; - * // In case of auth/account-exists-with-different-credential error, - * // you can fetch the providers using this: - * if (error.code === 'auth/account-exists-with-different-credential') { - * auth.fetchSignInMethodsForEmail(email).then(function(providers) { - * // The returned 'providers' is a list of the available providers - * // linked to the email address. Please refer to the guide for a more - * // complete explanation on how to recover from this error. - * }); - * } - * }); - * ``` - */ - getRedirectResult(): Promise<firebase.auth.UserCredential>; - /** - * The current Auth instance's language code. This is a readable/writable - * property. When set to null, the default Firebase Console language setting - * is applied. The language code will propagate to email action templates - * (password reset, email verification and email change revocation), SMS - * templates for phone authentication, reCAPTCHA verifier and OAuth - * popup/redirect operations provided the specified providers support - * localization with the language code specified. - */ - languageCode: string | null; - /** - * The current Auth instance's settings. This is used to edit/read configuration - * related options like app verification mode for phone authentication. - */ - settings: firebase.auth.AuthSettings; - /** - * Adds an observer for changes to the user's sign-in state. - * - * Prior to 4.0.0, this triggered the observer when users were signed in, - * signed out, or when the user's ID token changed in situations such as token - * expiry or password change. After 4.0.0, the observer is only triggered - * on sign-in or sign-out. - * - * To keep the old behavior, see {@link firebase.auth.Auth.onIdTokenChanged}. - * - * @example - * ```javascript - * firebase.auth().onAuthStateChanged(function(user) { - * if (user) { - * // User is signed in. - * } - * }); - * ``` - */ - onAuthStateChanged( - nextOrObserver: - | firebase.Observer<any> - | ((a: firebase.User | null) => any), - error?: (a: firebase.auth.Error) => any, - completed?: firebase.Unsubscribe - ): firebase.Unsubscribe; - /** - * Adds an observer for changes to the signed-in user's ID token, which includes - * sign-in, sign-out, and token refresh events. This method has the same - * behavior as {@link firebase.auth.Auth.onAuthStateChanged} had prior to 4.0.0. - * - * @example - * ```javascript - * firebase.auth().onIdTokenChanged(function(user) { - * if (user) { - * // User is signed in or token was refreshed. - * } - * }); - * ``` - * @param - * nextOrObserver An observer object or a function triggered on change. - * @param error Optional A function - * triggered on auth error. - * @param completed Optional A function triggered when the - * observer is removed. - */ - onIdTokenChanged( - nextOrObserver: - | firebase.Observer<any> - | ((a: firebase.User | null) => any), - error?: (a: firebase.auth.Error) => any, - completed?: firebase.Unsubscribe - ): firebase.Unsubscribe; - /** - * Sends a sign-in email link to the user with the specified email. - * - * The sign-in operation has to always be completed in the app unlike other out - * of band email actions (password reset and email verifications). This is - * because, at the end of the flow, the user is expected to be signed in and - * their Auth state persisted within the app. - * - * To complete sign in with the email link, call - * {@link firebase.auth.Auth.signInWithEmailLink} with the email address and - * the email link supplied in the email sent to the user. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/argument-error</dt> - * <dd>Thrown if handleCodeInApp is false.</dd> - * <dt>auth/invalid-email</dt> - * <dd>Thrown if the email address is not valid.</dd> - * <dt>auth/missing-android-pkg-name</dt> - * <dd>An Android package name must be provided if the Android app is required - * to be installed.</dd> - * <dt>auth/missing-continue-uri</dt> - * <dd>A continue URL must be provided in the request.</dd> - * <dt>auth/missing-ios-bundle-id</dt> - * <dd>An iOS Bundle ID must be provided if an App Store ID is provided.</dd> - * <dt>auth/invalid-continue-uri</dt> - * <dd>The continue URL provided in the request is invalid.</dd> - * <dt>auth/unauthorized-continue-uri</dt> - * <dd>The domain of the continue URL is not whitelisted. Whitelist - * the domain in the Firebase console.</dd> - * </dl> - * - * @example - * ```javascript - * var actionCodeSettings = { - * // The URL to redirect to for sign-in completion. This is also the deep - * // link for mobile redirects. The domain (www.example.com) for this URL - * // must be whitelisted in the Firebase Console. - * url: 'https://www.example.com/finishSignUp?cartId=1234', - * iOS: { - * bundleId: 'com.example.ios' - * }, - * android: { - * packageName: 'com.example.android', - * installApp: true, - * minimumVersion: '12' - * }, - * // This must be true. - * handleCodeInApp: true - * }; - * firebase.auth().sendSignInLinkToEmail('user@example.com', actionCodeSettings) - * .then(function() { - * // The link was successfully sent. Inform the user. Save the email - * // locally so you don't need to ask the user for it again if they open - * // the link on the same device. - * }) - * .catch(function(error) { - * // Some error occurred, you can inspect the code: error.code - * }); - * ``` - * @param email The email account to sign in with. - * @param actionCodeSettings The action - * code settings. The action code settings which provides Firebase with - * instructions on how to construct the email link. This includes the - * sign in completion URL or the deep link for mobile redirects, the mobile - * apps to use when the sign-in link is opened on an Android or iOS device. - * Mobile app redirects will only be applicable if the developer configures - * and accepts the Firebase Dynamic Links terms of condition. - * The Android package name and iOS bundle ID will be respected only if they - * are configured in the same Firebase Auth project used. - */ - sendSignInLinkToEmail( - email: string, - actionCodeSettings: firebase.auth.ActionCodeSettings - ): Promise<void>; - - /** - * Sends a password reset email to the given email address. - * - * To complete the password reset, call - * {@link firebase.auth.Auth.confirmPasswordReset} with the code supplied in the - * email sent to the user, along with the new password specified by the user. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/invalid-email</dt> - * <dd>Thrown if the email address is not valid.</dd> - * <dt>auth/missing-android-pkg-name</dt> - * <dd>An Android package name must be provided if the Android app is required - * to be installed.</dd> - * <dt>auth/missing-continue-uri</dt> - * <dd>A continue URL must be provided in the request.</dd> - * <dt>auth/missing-ios-bundle-id</dt> - * <dd>An iOS Bundle ID must be provided if an App Store ID is provided.</dd> - * <dt>auth/invalid-continue-uri</dt> - * <dd>The continue URL provided in the request is invalid.</dd> - * <dt>auth/unauthorized-continue-uri</dt> - * <dd>The domain of the continue URL is not whitelisted. Whitelist - * the domain in the Firebase console.</dd> - * <dt>auth/user-not-found</dt> - * <dd>Thrown if there is no user corresponding to the email address.</dd> - * </dl> - * - * @example - * ```javascript - * var actionCodeSettings = { - * url: 'https://www.example.com/?email=user@example.com', - * iOS: { - * bundleId: 'com.example.ios' - * }, - * android: { - * packageName: 'com.example.android', - * installApp: true, - * minimumVersion: '12' - * }, - * handleCodeInApp: true - * }; - * firebase.auth().sendPasswordResetEmail( - * 'user@example.com', actionCodeSettings) - * .then(function() { - * // Password reset email sent. - * }) - * .catch(function(error) { - * // Error occurred. Inspect error.code. - * }); - * ``` - * - * @param email The email address with the password to be reset. - * @param actionCodeSettings The action - * code settings. If specified, the state/continue URL will be set as the - * "continueUrl" parameter in the password reset link. The default password - * reset landing page will use this to display a link to go back to the app - * if it is installed. - * If the actionCodeSettings is not specified, no URL is appended to the - * action URL. - * The state URL provided must belong to a domain that is whitelisted by the - * developer in the console. Otherwise an error will be thrown. - * Mobile app redirects will only be applicable if the developer configures - * and accepts the Firebase Dynamic Links terms of condition. - * The Android package name and iOS bundle ID will be respected only if they - * are configured in the same Firebase Auth project used. - */ - sendPasswordResetEmail( - email: string, - actionCodeSettings?: firebase.auth.ActionCodeSettings | null - ): Promise<void>; - - /** - * Changes the current type of persistence on the current Auth instance for the - * currently saved Auth session and applies this type of persistence for - * future sign-in requests, including sign-in with redirect requests. This will - * return a promise that will resolve once the state finishes copying from one - * type of storage to the other. - * Calling a sign-in method after changing persistence will wait for that - * persistence change to complete before applying it on the new Auth state. - * - * This makes it easy for a user signing in to specify whether their session - * should be remembered or not. It also makes it easier to never persist the - * Auth state for applications that are shared by other users or have sensitive - * data. - * - * The default for web browser apps and React Native apps is 'local' (provided - * the browser supports this mechanism) whereas it is 'none' for Node.js backend - * apps. - * - * <h4>Error Codes (thrown synchronously)</h4> - * <dl> - * <dt>auth/invalid-persistence-type</dt> - * <dd>Thrown if the specified persistence type is invalid.</dd> - * <dt>auth/unsupported-persistence-type</dt> - * <dd>Thrown if the current environment does not support the specified - * persistence type.</dd> - * </dl> - * - * @example - * ```javascript - * firebase.auth().setPersistence(firebase.auth.Auth.Persistence.SESSION) - * .then(function() { - * // Existing and future Auth states are now persisted in the current - * // session only. Closing the window would clear any existing state even if - * // a user forgets to sign out. - * }); - * ``` - */ - setPersistence(persistence: firebase.auth.Auth.Persistence): Promise<void>; - - /** - * Asynchronously signs in with the given credentials, and returns any available - * additional user information, such as user name. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/account-exists-with-different-credential</dt> - * <dd>Thrown if there already exists an account with the email address - * asserted by the credential. Resolve this by calling - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail} and then asking the - * user to sign in using one of the returned providers. Once the user is - * signed in, the original credential can be linked to the user with - * {@link firebase.User.linkWithCredential}.</dd> - * <dt>auth/invalid-credential</dt> - * <dd>Thrown if the credential is malformed or has expired.</dd> - * <dt>auth/operation-not-allowed</dt> - * <dd>Thrown if the type of account corresponding to the credential - * is not enabled. Enable the account type in the Firebase Console, under - * the Auth tab.</dd> - * <dt>auth/user-disabled</dt> - * <dd>Thrown if the user corresponding to the given credential has been - * disabled.</dd> - * <dt>auth/user-not-found</dt> - * <dd>Thrown if signing in with a credential from - * {@link firebase.auth.EmailAuthProvider.credential} and there is no user - * corresponding to the given email. </dd> - * <dt>auth/wrong-password</dt> - * <dd>Thrown if signing in with a credential from - * {@link firebase.auth.EmailAuthProvider.credential} and the password is - * invalid for the given email, or if the account corresponding to the email - * does not have a password set.</dd> - * <dt>auth/invalid-verification-code</dt> - * <dd>Thrown if the credential is a - * {@link firebase.auth.PhoneAuthProvider.credential} and the verification - * code of the credential is not valid.</dd> - * <dt>auth/invalid-verification-id</dt> - * <dd>Thrown if the credential is a - * {@link firebase.auth.PhoneAuthProvider.credential} and the verification - * ID of the credential is not valid.</dd> - * </dl> - * - * @deprecated - * This method is deprecated. Use - * {@link firebase.auth.Auth.signInWithCredential} instead. - * - * @example - * ```javascript - * firebase.auth().signInAndRetrieveDataWithCredential(credential) - * .then(function(userCredential) { - * console.log(userCredential.additionalUserInfo.username); - * }); - * ``` - * @param credential The auth credential. - */ - signInAndRetrieveDataWithCredential( - credential: firebase.auth.AuthCredential - ): Promise<firebase.auth.UserCredential>; - /** - * Asynchronously signs in as an anonymous user. - * - * - * If there is already an anonymous user signed in, that user will be returned; - * otherwise, a new anonymous user identity will be created and returned. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/operation-not-allowed</dt> - * <dd>Thrown if anonymous accounts are not enabled. Enable anonymous accounts - * in the Firebase Console, under the Auth tab.</dd> - * </dl> - * - * @example - * ```javascript - * firebase.auth().signInAnonymously().catch(function(error) { - * // Handle Errors here. - * var errorCode = error.code; - * var errorMessage = error.message; - * - * if (errorCode === 'auth/operation-not-allowed') { - * alert('You must enable Anonymous auth in the Firebase Console.'); - * } else { - * console.error(error); - * } - * }); - * ``` - */ - signInAnonymously(): Promise<firebase.auth.UserCredential>; - - /** - * Asynchronously signs in with the given credentials. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/account-exists-with-different-credential</dt> - * <dd>Thrown if there already exists an account with the email address - * asserted by the credential. Resolve this by calling - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail} and then asking the - * user to sign in using one of the returned providers. Once the user is - * signed in, the original credential can be linked to the user with - * {@link firebase.User.linkWithCredential}.</dd> - * <dt>auth/invalid-credential</dt> - * <dd>Thrown if the credential is malformed or has expired.</dd> - * <dt>auth/operation-not-allowed</dt> - * <dd>Thrown if the type of account corresponding to the credential - * is not enabled. Enable the account type in the Firebase Console, under - * the Auth tab.</dd> - * <dt>auth/user-disabled</dt> - * <dd>Thrown if the user corresponding to the given credential has been - * disabled.</dd> - * <dt>auth/user-not-found</dt> - * <dd>Thrown if signing in with a credential from - * {@link firebase.auth.EmailAuthProvider.credential} and there is no user - * corresponding to the given email. </dd> - * <dt>auth/wrong-password</dt> - * <dd>Thrown if signing in with a credential from - * {@link firebase.auth.EmailAuthProvider.credential} and the password is - * invalid for the given email, or if the account corresponding to the email - * does not have a password set.</dd> - * <dt>auth/invalid-verification-code</dt> - * <dd>Thrown if the credential is a - * {@link firebase.auth.PhoneAuthProvider.credential} and the verification - * code of the credential is not valid.</dd> - * <dt>auth/invalid-verification-id</dt> - * <dd>Thrown if the credential is a - * {@link firebase.auth.PhoneAuthProvider.credential} and the verification - * ID of the credential is not valid.</dd> - * </dl> - * - * @example - * ```javascript - * firebase.auth().signInWithCredential(credential).catch(function(error) { - * // Handle Errors here. - * var errorCode = error.code; - * var errorMessage = error.message; - * // The email of the user's account used. - * var email = error.email; - * // The firebase.auth.AuthCredential type that was used. - * var credential = error.credential; - * if (errorCode === 'auth/account-exists-with-different-credential') { - * alert('Email already associated with another account.'); - * // Handle account linking here, if using. - * } else { - * console.error(error); - * } - * }); - * ``` - * - * @param credential The auth credential. - */ - signInWithCredential( - credential: firebase.auth.AuthCredential - ): Promise<firebase.auth.UserCredential>; - /** - * Asynchronously signs in using a custom token. - * - * Custom tokens are used to integrate Firebase Auth with existing auth systems, - * and must be generated by the auth backend. - * - * Fails with an error if the token is invalid, expired, or not accepted by the - * Firebase Auth service. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/custom-token-mismatch</dt> - * <dd>Thrown if the custom token is for a different Firebase App.</dd> - * <dt>auth/invalid-custom-token</dt> - * <dd>Thrown if the custom token format is incorrect.</dd> - * </dl> - * - * @example - * ```javascript - * firebase.auth().signInWithCustomToken(token).catch(function(error) { - * // Handle Errors here. - * var errorCode = error.code; - * var errorMessage = error.message; - * if (errorCode === 'auth/invalid-custom-token') { - * alert('The token you provided is not valid.'); - * } else { - * console.error(error); - * } - * }); - * ``` - * - * @param token The custom token to sign in with. - */ - signInWithCustomToken(token: string): Promise<firebase.auth.UserCredential>; - /** - * Asynchronously signs in using an email and password. - * - * Fails with an error if the email address and password do not match. - * - * Note: The user's password is NOT the password used to access the user's email - * account. The email address serves as a unique identifier for the user, and - * the password is used to access the user's account in your Firebase project. - * - * See also: {@link firebase.auth.Auth.createUserWithEmailAndPassword}. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/invalid-email</dt> - * <dd>Thrown if the email address is not valid.</dd> - * <dt>auth/user-disabled</dt> - * <dd>Thrown if the user corresponding to the given email has been - * disabled.</dd> - * <dt>auth/user-not-found</dt> - * <dd>Thrown if there is no user corresponding to the given email.</dd> - * <dt>auth/wrong-password</dt> - * <dd>Thrown if the password is invalid for the given email, or the account - * corresponding to the email does not have a password set.</dd> - * </dl> - * - * @example - * ```javascript - * firebase.auth().signInWithEmailAndPassword(email, password) - * .catch(function(error) { - * // Handle Errors here. - * var errorCode = error.code; - * var errorMessage = error.message; - * if (errorCode === 'auth/wrong-password') { - * alert('Wrong password.'); - * } else { - * alert(errorMessage); - * } - * console.log(error); - * }); - * ``` - * - * @param email The users email address. - * @param password The users password. - */ - signInWithEmailAndPassword( - email: string, - password: string - ): Promise<firebase.auth.UserCredential>; - - /** - * Asynchronously signs in using a phone number. This method sends a code via - * SMS to the given phone number, and returns a - * {@link firebase.auth.ConfirmationResult}. After the user provides the code - * sent to their phone, call {@link firebase.auth.ConfirmationResult.confirm} - * with the code to sign the user in. - * - * For abuse prevention, this method also requires a - * {@link firebase.auth.ApplicationVerifier}. The Firebase Auth SDK includes - * a reCAPTCHA-based implementation, {@link firebase.auth.RecaptchaVerifier}. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/captcha-check-failed</dt> - * <dd>Thrown if the reCAPTCHA response token was invalid, expired, or if - * this method was called from a non-whitelisted domain.</dd> - * <dt>auth/invalid-phone-number</dt> - * <dd>Thrown if the phone number has an invalid format.</dd> - * <dt>auth/missing-phone-number</dt> - * <dd>Thrown if the phone number is missing.</dd> - * <dt>auth/quota-exceeded</dt> - * <dd>Thrown if the SMS quota for the Firebase project has been exceeded.</dd> - * <dt>auth/user-disabled</dt> - * <dd>Thrown if the user corresponding to the given phone number has been - * disabled.</dd> - * <dt>auth/operation-not-allowed</dt> - * <dd>Thrown if you have not enabled the provider in the Firebase Console. Go - * to the Firebase Console for your project, in the Auth section and the - * <strong>Sign in Method</strong> tab and configure the provider.</dd> - * </dl> - * - * @example - * ```javascript - * // 'recaptcha-container' is the ID of an element in the DOM. - * var applicationVerifier = new firebase.auth.RecaptchaVerifier( - * 'recaptcha-container'); - * firebase.auth().signInWithPhoneNumber(phoneNumber, applicationVerifier) - * .then(function(confirmationResult) { - * var verificationCode = window.prompt('Please enter the verification ' + - * 'code that was sent to your mobile device.'); - * return confirmationResult.confirm(verificationCode); - * }) - * .catch(function(error) { - * // Handle Errors here. - * }); - * ``` - * - * @param phoneNumber The user's phone number in E.164 format (e.g. - * +16505550101). - * @param applicationVerifier - */ - signInWithPhoneNumber( - phoneNumber: string, - applicationVerifier: firebase.auth.ApplicationVerifier - ): Promise<firebase.auth.ConfirmationResult>; - /** - * Asynchronously signs in using an email and sign-in email link. If no link - * is passed, the link is inferred from the current URL. - * - * Fails with an error if the email address is invalid or OTP in email link - * expires. - * - * Note: Confirm the link is a sign-in email link before calling this method - * {@link firebase.auth.Auth.isSignInWithEmailLink}. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/expired-action-code</dt> - * <dd>Thrown if OTP in email link expires.</dd> - * <dt>auth/invalid-email</dt> - * <dd>Thrown if the email address is not valid.</dd> - * <dt>auth/user-disabled</dt> - * <dd>Thrown if the user corresponding to the given email has been - * disabled.</dd> - * </dl> - * - * @example - * ```javascript - * firebase.auth().signInWithEmailLink(email, emailLink) - * .catch(function(error) { - * // Some error occurred, you can inspect the code: error.code - * // Common errors could be invalid email and invalid or expired OTPs. - * }); - * ``` - * - * @param email The email account to sign in with. - * @param emailLink The optional link which contains the OTP needed - * to complete the sign in with email link. If not specified, the current - * URL is used instead. - */ - signInWithEmailLink( - email: string, - emailLink?: string - ): Promise<firebase.auth.UserCredential>; - /** - * Authenticates a Firebase client using a popup-based OAuth authentication - * flow. - * - * If succeeds, returns the signed in user along with the provider's credential. - * If sign in was unsuccessful, returns an error object containing additional - * information about the error. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/account-exists-with-different-credential</dt> - * <dd>Thrown if there already exists an account with the email address - * asserted by the credential. Resolve this by calling - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail} with the error.email - * and then asking the user to sign in using one of the returned providers. - * Once the user is signed in, the original credential retrieved from the - * error.credential can be linked to the user with - * {@link firebase.User.linkWithCredential} to prevent the user from signing - * in again to the original provider via popup or redirect. If you are using - * redirects for sign in, save the credential in session storage and then - * retrieve on redirect and repopulate the credential using for example - * {@link firebase.auth.GoogleAuthProvider.credential} depending on the - * credential provider id and complete the link.</dd> - * <dt>auth/auth-domain-config-required</dt> - * <dd>Thrown if authDomain configuration is not provided when calling - * firebase.initializeApp(). Check Firebase Console for instructions on - * determining and passing that field.</dd> - * <dt>auth/cancelled-popup-request</dt> - * <dd>Thrown if successive popup operations are triggered. Only one popup - * request is allowed at one time. All the popups would fail with this error - * except for the last one.</dd> - * <dt>auth/operation-not-allowed</dt> - * <dd>Thrown if the type of account corresponding to the credential - * is not enabled. Enable the account type in the Firebase Console, under - * the Auth tab.</dd> - * <dt>auth/operation-not-supported-in-this-environment</dt> - * <dd>Thrown if this operation is not supported in the environment your - * application is running on. "location.protocol" must be http or https. - * </dd> - * <dt>auth/popup-blocked</dt> - * <dd>Thrown if the popup was blocked by the browser, typically when this - * operation is triggered outside of a click handler.</dd> - * <dt>auth/popup-closed-by-user</dt> - * <dd>Thrown if the popup window is closed by the user without completing the - * sign in to the provider.</dd> - * <dt>auth/unauthorized-domain</dt> - * <dd>Thrown if the app domain is not authorized for OAuth operations for your - * Firebase project. Edit the list of authorized domains from the Firebase - * console.</dd> - * </dl> - * - * This method does not work in a Node.js environment. - * - * @example - * ```javascript - * // Creates the provider object. - * var provider = new firebase.auth.FacebookAuthProvider(); - * // You can add additional scopes to the provider: - * provider.addScope('email'); - * provider.addScope('user_friends'); - * // Sign in with popup: - * auth.signInWithPopup(provider).then(function(result) { - * // The firebase.User instance: - * var user = result.user; - * // The Facebook firebase.auth.AuthCredential containing the Facebook - * // access token: - * var credential = result.credential; - * }, function(error) { - * // The provider's account email, can be used in case of - * // auth/account-exists-with-different-credential to fetch the providers - * // linked to the email: - * var email = error.email; - * // The provider's credential: - * var credential = error.credential; - * // In case of auth/account-exists-with-different-credential error, - * // you can fetch the providers using this: - * if (error.code === 'auth/account-exists-with-different-credential') { - * auth.fetchSignInMethodsForEmail(email).then(function(providers) { - * // The returned 'providers' is a list of the available providers - * // linked to the email address. Please refer to the guide for a more - * // complete explanation on how to recover from this error. - * }); - * } - * }); - * ``` - * - * @param provider The provider to authenticate. - * The provider has to be an OAuth provider. Non-OAuth providers like {@link - * firebase.auth.EmailAuthProvider} will throw an error. - */ - signInWithPopup( - provider: firebase.auth.AuthProvider - ): Promise<firebase.auth.UserCredential>; - /** - * Authenticates a Firebase client using a full-page redirect flow. To handle - * the results and errors for this operation, refer to {@link - * firebase.auth.Auth.getRedirectResult}. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/auth-domain-config-required</dt> - * <dd>Thrown if authDomain configuration is not provided when calling - * firebase.initializeApp(). Check Firebase Console for instructions on - * determining and passing that field.</dd> - * <dt>auth/operation-not-supported-in-this-environment</dt> - * <dd>Thrown if this operation is not supported in the environment your - * application is running on. "location.protocol" must be http or https. - * </dd> - * <dt>auth/unauthorized-domain</dt> - * <dd>Thrown if the app domain is not authorized for OAuth operations for your - * Firebase project. Edit the list of authorized domains from the Firebase - * console.</dd> - * </dl> - * - * This method does not work in a Node.js environment. - * - * @param provider The provider to authenticate. - * The provider has to be an OAuth provider. Non-OAuth providers like {@link - * firebase.auth.EmailAuthProvider} will throw an error. - */ - signInWithRedirect(provider: firebase.auth.AuthProvider): Promise<void>; - /** - * Signs out the current user. - */ - signOut(): Promise<void>; - /** - * The current Auth instance's tenant ID. This is a readable/writable - * property. When you set the tenant ID of an Auth instance, all future - * sign-in/sign-up operations will pass this tenant ID and sign in or - * sign up users to the specified tenant project. - * When set to null, users are signed in to the parent project. By default, - * this is set to null. - * - * @example - * ```javascript - * // Set the tenant ID on Auth instance. - * firebase.auth().tenantId = ‘TENANT_PROJECT_ID’; - * - * // All future sign-in request now include tenant ID. - * firebase.auth().signInWithEmailAndPassword(email, password) - * .then(function(result) { - * // result.user.tenantId should be ‘TENANT_PROJECT_ID’. - * }).catch(function(error) { - * // Handle error. - * }); - * ``` - */ - tenantId: string | null; - /** - * Asynchronously sets the provided user as `currentUser` on the current Auth - * instance. A new instance copy of the user provided will be made and set as - * `currentUser`. - * - * This will trigger {@link firebase.auth.Auth.onAuthStateChanged} and - * {@link firebase.auth.Auth.onIdTokenChanged} listeners like other sign in - * methods. - * - * The operation fails with an error if the user to be updated belongs to a - * different Firebase project. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/invalid-user-token</dt> - * <dd>Thrown if the user to be updated belongs to a different Firebase - * project.</dd> - * <dt>auth/user-token-expired</dt> - * <dd>Thrown if the token of the user to be updated is expired.</dd> - * <dt>auth/null-user</dt> - * <dd>Thrown if the user to be updated is null.</dd> - * <dt>auth/tenant-id-mismatch</dt> - * <dd>Thrown if the provided user's tenant ID does not match the - * underlying Auth instance's configured tenant ID</dd> - * </dl> - */ - updateCurrentUser(user: firebase.User | null): Promise<void>; - /** - * Sets the current language to the default device/browser preference. - */ - useDeviceLanguage(): void; - /** - * Modify this Auth instance to communicate with the Firebase Auth emulator. This must be - * called synchronously immediately following the first call to `firebase.auth()`. Do not use - * with production credentials as emulator traffic is not encrypted. - * - * @param url The URL at which the emulator is running (eg, 'http://localhost:9099') - */ - useEmulator(url: string): void; - /** - * Checks a password reset code sent to the user by email or other out-of-band - * mechanism. - * - * Returns the user's email address if valid. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/expired-action-code</dt> - * <dd>Thrown if the password reset code has expired.</dd> - * <dt>auth/invalid-action-code</dt> - * <dd>Thrown if the password reset code is invalid. This can happen if the code - * is malformed or has already been used.</dd> - * <dt>auth/user-disabled</dt> - * <dd>Thrown if the user corresponding to the given password reset code has - * been disabled.</dd> - * <dt>auth/user-not-found</dt> - * <dd>Thrown if there is no user corresponding to the password reset code. This - * may have happened if the user was deleted between when the code was - * issued and when this method was called.</dd> - * </dl> - * - * @param code A verification code sent to the user. - */ - verifyPasswordResetCode(code: string): Promise<string>; - } - - /** - * Interface that represents the credentials returned by an auth provider. - * Implementations specify the details about each auth provider's credential - * requirements. - * - */ - abstract class AuthCredential { - /** - * The authentication provider ID for the credential. - * For example, 'facebook.com', or 'google.com'. - */ - providerId: string; - /** - * The authentication sign in method for the credential. - * For example, 'password', or 'emailLink. This corresponds to the sign-in - * method identifier as returned in - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}. - */ - signInMethod: string; - /** - * Returns a JSON-serializable representation of this object. - */ - toJSON(): Object; - /** - * Static method to deserialize a JSON representation of an object into an - * {@link firebase.auth.AuthCredential}. Input can be either Object or the - * stringified representation of the object. When string is provided, - * JSON.parse would be called first. If the JSON input does not represent - * an`AuthCredential`, null is returned. - * @param json The plain object representation of an - * AuthCredential. - */ - static fromJSON(json: Object | string): AuthCredential | null; - } - - /** - * Interface that represents the OAuth credentials returned by an OAuth - * provider. Implementations specify the details about each auth provider's - * credential requirements. - * - */ - class OAuthCredential extends AuthCredential { - private constructor(); - /** - * The OAuth ID token associated with the credential if it belongs to an - * OIDC provider, such as `google.com`. - */ - idToken?: string; - /** - * The OAuth access token associated with the credential if it belongs to - * an OAuth provider, such as `facebook.com`, `twitter.com`, etc. - */ - accessToken?: string; - /** - * The OAuth access token secret associated with the credential if it - * belongs to an OAuth 1.0 provider, such as `twitter.com`. - */ - secret?: string; - } - - /** - * Interface that represents an auth provider. - */ - interface AuthProvider { - providerId: string; - } - - /** - * A result from a phone number sign-in, link, or reauthenticate call. - */ - interface ConfirmationResult { - /** - * Finishes a phone number sign-in, link, or reauthentication, given the code - * that was sent to the user's mobile device. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/invalid-verification-code</dt> - * <dd>Thrown if the verification code is not valid.</dd> - * <dt>auth/missing-verification-code</dt> - * <dd>Thrown if the verification code is missing.</dd> - * </dl> - */ - confirm(verificationCode: string): Promise<firebase.auth.UserCredential>; - /** - * The phone number authentication operation's verification ID. This can be used - * along with the verification code to initialize a phone auth credential. - */ - verificationId: string; - } - - /** - * Email and password auth provider implementation. - * - * To authenticate: {@link firebase.auth.Auth.createUserWithEmailAndPassword} - * and {@link firebase.auth.Auth.signInWithEmailAndPassword}. - */ - class EmailAuthProvider extends EmailAuthProvider_Instance { - static PROVIDER_ID: string; - /** - * This corresponds to the sign-in method identifier as returned in - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}. - */ - static EMAIL_PASSWORD_SIGN_IN_METHOD: string; - /** - * This corresponds to the sign-in method identifier as returned in - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}. - */ - static EMAIL_LINK_SIGN_IN_METHOD: string; - /** - * @example - * ```javascript - * var cred = firebase.auth.EmailAuthProvider.credential( - * email, - * password - * ); - * ``` - * - * @param email Email address. - * @param password User account password. - * @return The auth provider credential. - */ - static credential( - email: string, - password: string - ): firebase.auth.AuthCredential; - /** - * Initialize an `EmailAuthProvider` credential using an email and an email link - * after a sign in with email link operation. - * - * @example - * ```javascript - * var cred = firebase.auth.EmailAuthProvider.credentialWithLink( - * email, - * emailLink - * ); - * ``` - * - * @param email Email address. - * @param emailLink Sign-in email link. - * @return The auth provider credential. - */ - static credentialWithLink( - email: string, - emailLink: string - ): firebase.auth.AuthCredential; - } - /** - * @hidden - */ - class EmailAuthProvider_Instance implements firebase.auth.AuthProvider { - providerId: string; - } - - /** - * An authentication error. - * For method-specific error codes, refer to the specific methods in the - * documentation. For common error codes, check the reference below. Use{@link - * firebase.auth.Error.code} to get the specific error code. For a detailed - * message, use {@link firebase.auth.Error.message}. - * Errors with the code <strong>auth/account-exists-with-different-credential - * </strong> will have the additional fields <strong>email</strong> and <strong> - * credential</strong> which are needed to provide a way to resolve these - * specific errors. Refer to {@link firebase.auth.Auth.signInWithPopup} for more - * information. - * - * <h4>Common Error Codes</h4> - * <dl> - * <dt>auth/app-deleted</dt> - * <dd>Thrown if the instance of FirebaseApp has been deleted.</dd> - * <dt>auth/app-not-authorized</dt> - * <dd>Thrown if the app identified by the domain where it's hosted, is not - * authorized to use Firebase Authentication with the provided API key. - * Review your key configuration in the Google API console.</dd> - * <dt>auth/argument-error</dt> - * <dd>Thrown if a method is called with incorrect arguments.</dd> - * <dt>auth/invalid-api-key</dt> - * <dd>Thrown if the provided API key is invalid. Please check that you have - * copied it correctly from the Firebase Console.</dd> - * <dt>auth/invalid-user-token</dt> - * <dd>Thrown if the user's credential is no longer valid. The user must sign in - * again.</dd> - * <dt>auth/invalid-tenant-id</dt> - * <dd>Thrown if the tenant ID provided is invalid.</dd> - * <dt>auth/network-request-failed</dt> - * <dd>Thrown if a network error (such as timeout, interrupted connection or - * unreachable host) has occurred.</dd> - * <dt>auth/operation-not-allowed</dt> - * <dd>Thrown if you have not enabled the provider in the Firebase Console. Go - * to the Firebase Console for your project, in the Auth section and the - * <strong>Sign in Method</strong> tab and configure the provider.</dd> - * <dt>auth/requires-recent-login</dt> - * <dd>Thrown if the user's last sign-in time does not meet the security - * threshold. Use {@link firebase.User.reauthenticateWithCredential} to - * resolve. This does not apply if the user is anonymous.</dd> - * <dt>auth/too-many-requests</dt> - * <dd>Thrown if requests are blocked from a device due to unusual activity. - * Trying again after some delay would unblock.</dd> - * <dt>auth/unauthorized-domain</dt> - * <dd>Thrown if the app domain is not authorized for OAuth operations for your - * Firebase project. Edit the list of authorized domains from the Firebase - * console.</dd> - * <dt>auth/user-disabled</dt> - * <dd>Thrown if the user account has been disabled by an administrator. - * Accounts can be enabled or disabled in the Firebase Console, the Auth - * section and Users subsection.</dd> - * <dt>auth/user-token-expired</dt> - * <dd>Thrown if the user's credential has expired. This could also be thrown if - * a user has been deleted. Prompting the user to sign in again should - * resolve this for either case.</dd> - * <dt>auth/web-storage-unsupported</dt> - * <dd>Thrown if the browser does not support web storage or if the user - * disables them.</dd> - * </dl> - */ - interface Error { - name: string; - /** - * Unique error code. - */ - code: string; - /** - * Complete error message. - */ - message: string; - } - - /** - * The account conflict error. - * Refer to {@link firebase.auth.Auth.signInWithPopup} for more information. - * - * <h4>Common Error Codes</h4> - * <dl> - * <dt>auth/account-exists-with-different-credential</dt> - * <dd>Thrown if there already exists an account with the email address - * asserted by the credential. Resolve this by calling - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail} with the error.email - * and then asking the user to sign in using one of the returned providers. - * Once the user is signed in, the original credential retrieved from the - * error.credential can be linked to the user with - * {@link firebase.User.linkWithCredential} to prevent the user from signing - * in again to the original provider via popup or redirect. If you are using - * redirects for sign in, save the credential in session storage and then - * retrieve on redirect and repopulate the credential using for example - * {@link firebase.auth.GoogleAuthProvider.credential} depending on the - * credential provider id and complete the link.</dd> - * <dt>auth/credential-already-in-use</dt> - * <dd>Thrown if the account corresponding to the credential already exists - * among your users, or is already linked to a Firebase User. - * For example, this error could be thrown if you are upgrading an anonymous - * user to a Google user by linking a Google credential to it and the Google - * credential used is already associated with an existing Firebase Google - * user. - * The fields <code>error.email</code>, <code>error.phoneNumber</code>, and - * <code>error.credential</code> ({@link firebase.auth.AuthCredential}) - * may be provided, depending on the type of credential. You can recover - * from this error by signing in with <code>error.credential</code> directly - * via {@link firebase.auth.Auth.signInWithCredential}.</dd> - * <dt>auth/email-already-in-use</dt> - * <dd>Thrown if the email corresponding to the credential already exists - * among your users. When thrown while linking a credential to an existing - * user, an <code>error.email</code> and <code>error.credential</code> - * ({@link firebase.auth.AuthCredential}) fields are also provided. - * You have to link the credential to the existing user with that email if - * you wish to continue signing in with that credential. To do so, call - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}, sign in to - * <code>error.email</code> via one of the providers returned and then - * {@link firebase.User.linkWithCredential} the original credential to that - * newly signed in user.</dd> - * </dl> - */ - interface AuthError extends firebase.auth.Error { - /** - * The {@link firebase.auth.AuthCredential} that can be used to resolve the - * error. - */ - credential?: firebase.auth.AuthCredential; - /** - * The email of the user's account used for sign-in/linking. - */ - email?: string; - /** - * The phone number of the user's account used for sign-in/linking. - */ - phoneNumber?: string; - /** - * The tenant ID being used for sign-in/linking. If you use - * {@link firebase.auth.Auth.signInWithRedirect} to sign in, you have to - * set the tenant ID on Auth instance again as the tenant ID is not - * persisted after redirection. - */ - tenantId?: string; - } - - /** - * The error thrown when the user needs to provide a second factor to sign in - * successfully. - * The error code for this error is <code>auth/multi-factor-auth-required</code>. - * This error provides a {@link firebase.auth.MultiFactorResolver} object, - * which you can use to get the second sign-in factor from the user. - * - * @example - * ```javascript - * firebase.auth().signInWithEmailAndPassword() - * .then(function(result) { - * // User signed in. No 2nd factor challenge is needed. - * }) - * .catch(function(error) { - * if (error.code == 'auth/multi-factor-auth-required') { - * var resolver = error.resolver; - * var multiFactorHints = resolver.hints; - * } else { - * // Handle other errors. - * } - * }); - * - * resolver.resolveSignIn(multiFactorAssertion) - * .then(function(userCredential) { - * // User signed in. - * }); - * ``` - */ - interface MultiFactorError extends firebase.auth.AuthError { - /** - * The multi-factor resolver to complete second factor sign-in. - */ - resolver: firebase.auth.MultiFactorResolver; - } - - /** - * Facebook auth provider. - * - * @example - * ```javascript - * // Sign in using a redirect. - * firebase.auth().getRedirectResult().then(function(result) { - * if (result.credential) { - * // This gives you a Google Access Token. - * var token = result.credential.accessToken; - * } - * var user = result.user; - * }) - * // Start a sign in process for an unauthenticated user. - * var provider = new firebase.auth.FacebookAuthProvider(); - * provider.addScope('user_birthday'); - * firebase.auth().signInWithRedirect(provider); - * ``` - * - * @example - * ```javascript - * // Sign in using a popup. - * var provider = new firebase.auth.FacebookAuthProvider(); - * provider.addScope('user_birthday'); - * firebase.auth().signInWithPopup(provider).then(function(result) { - * // This gives you a Facebook Access Token. - * var token = result.credential.accessToken; - * // The signed-in user info. - * var user = result.user; - * }); - * ``` - * - * @see {@link firebase.auth.Auth.onAuthStateChanged} to receive sign in state - * changes. - */ - class FacebookAuthProvider extends FacebookAuthProvider_Instance { - static PROVIDER_ID: string; - /** - * This corresponds to the sign-in method identifier as returned in - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}. - */ - static FACEBOOK_SIGN_IN_METHOD: string; - /** - * @example - * ```javascript - * var cred = firebase.auth.FacebookAuthProvider.credential( - * // `event` from the Facebook auth.authResponseChange callback. - * event.authResponse.accessToken - * ); - * ``` - * - * @param token Facebook access token. - */ - static credential(token: string): firebase.auth.OAuthCredential; - } - /** - * @hidden - */ - class FacebookAuthProvider_Instance implements firebase.auth.AuthProvider { - /** - * @param scope Facebook OAuth scope. - * @return The provider instance itself. - */ - addScope(scope: string): firebase.auth.AuthProvider; - providerId: string; - /** - * Sets the OAuth custom parameters to pass in a Facebook OAuth request for - * popup and redirect sign-in operations. - * Valid parameters include 'auth_type', 'display' and 'locale'. - * For a detailed list, check the - * {@link https://goo.gl/pve4fo Facebook} - * documentation. - * Reserved required OAuth 2.0 parameters such as 'client_id', 'redirect_uri', - * 'scope', 'response_type' and 'state' are not allowed and will be ignored. - * @param customOAuthParameters The custom OAuth parameters to pass - * in the OAuth request. - * @return The provider instance itself. - */ - setCustomParameters( - customOAuthParameters: Object - ): firebase.auth.AuthProvider; - } - - /** - * GitHub auth provider. - * - * GitHub requires an OAuth 2.0 redirect, so you can either handle the redirect - * directly, or use the signInWithPopup handler: - * - * @example - * ```javascript - * // Using a redirect. - * firebase.auth().getRedirectResult().then(function(result) { - * if (result.credential) { - * // This gives you a GitHub Access Token. - * var token = result.credential.accessToken; - * } - * var user = result.user; - * }).catch(function(error) { - * // Handle Errors here. - * var errorCode = error.code; - * var errorMessage = error.message; - * // The email of the user's account used. - * var email = error.email; - * // The firebase.auth.AuthCredential type that was used. - * var credential = error.credential; - * if (errorCode === 'auth/account-exists-with-different-credential') { - * alert('You have signed up with a different provider for that email.'); - * // Handle linking here if your app allows it. - * } else { - * console.error(error); - * } - * }); - * - * // Start a sign in process for an unauthenticated user. - * var provider = new firebase.auth.GithubAuthProvider(); - * provider.addScope('repo'); - * firebase.auth().signInWithRedirect(provider); - * ``` - * - * @example - * ```javascript - * // With popup. - * var provider = new firebase.auth.GithubAuthProvider(); - * provider.addScope('repo'); - * firebase.auth().signInWithPopup(provider).then(function(result) { - * // This gives you a GitHub Access Token. - * var token = result.credential.accessToken; - * // The signed-in user info. - * var user = result.user; - * }).catch(function(error) { - * // Handle Errors here. - * var errorCode = error.code; - * var errorMessage = error.message; - * // The email of the user's account used. - * var email = error.email; - * // The firebase.auth.AuthCredential type that was used. - * var credential = error.credential; - * if (errorCode === 'auth/account-exists-with-different-credential') { - * alert('You have signed up with a different provider for that email.'); - * // Handle linking here if your app allows it. - * } else { - * console.error(error); - * } - * }); - * ``` - * - * @see {@link firebase.auth.Auth.onAuthStateChanged} to receive sign in state - * changes. - */ - class GithubAuthProvider extends GithubAuthProvider_Instance { - static PROVIDER_ID: string; - /** - * This corresponds to the sign-in method identifier as returned in - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}. - */ - static GITHUB_SIGN_IN_METHOD: string; - /** - * @example - * ```javascript - * var cred = firebase.auth.GithubAuthProvider.credential( - * // `event` from the GitHub auth.authResponseChange callback. - * event.authResponse.accessToken - * ); - * ``` - * - * @param token GitHub access token. - * @return {!firebase.auth.OAuthCredential} The auth provider credential. - */ - static credential(token: string): firebase.auth.OAuthCredential; - } - /** - * @hidden - */ - class GithubAuthProvider_Instance implements firebase.auth.AuthProvider { - /** - * @param scope GitHub OAuth scope. - * @return The provider instance itself. - */ - addScope(scope: string): firebase.auth.AuthProvider; - providerId: string; - /** - * Sets the OAuth custom parameters to pass in a GitHub OAuth request for popup - * and redirect sign-in operations. - * Valid parameters include 'allow_signup'. - * For a detailed list, check the - * {@link https://developer.github.com/v3/oauth/ GitHub} documentation. - * Reserved required OAuth 2.0 parameters such as 'client_id', 'redirect_uri', - * 'scope', 'response_type' and 'state' are not allowed and will be ignored. - * @param customOAuthParameters The custom OAuth parameters to pass - * in the OAuth request. - * @return The provider instance itself. - */ - setCustomParameters( - customOAuthParameters: Object - ): firebase.auth.AuthProvider; - } - - /** - * Google auth provider. - * - * @example - * ```javascript - * // Using a redirect. - * firebase.auth().getRedirectResult().then(function(result) { - * if (result.credential) { - * // This gives you a Google Access Token. - * var token = result.credential.accessToken; - * } - * var user = result.user; - * }); - * - * // Start a sign in process for an unauthenticated user. - * var provider = new firebase.auth.GoogleAuthProvider(); - * provider.addScope('profile'); - * provider.addScope('email'); - * firebase.auth().signInWithRedirect(provider); - * ``` - * - * @example - * ```javascript - * // Using a popup. - * var provider = new firebase.auth.GoogleAuthProvider(); - * provider.addScope('profile'); - * provider.addScope('email'); - * firebase.auth().signInWithPopup(provider).then(function(result) { - * // This gives you a Google Access Token. - * var token = result.credential.accessToken; - * // The signed-in user info. - * var user = result.user; - * }); - * ``` - * - * @see {@link firebase.auth.Auth.onAuthStateChanged} to receive sign in state - * changes. - */ - class GoogleAuthProvider extends GoogleAuthProvider_Instance { - static PROVIDER_ID: string; - /** - * This corresponds to the sign-in method identifier as returned in - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}. - */ - static GOOGLE_SIGN_IN_METHOD: string; - /** - * Creates a credential for Google. At least one of ID token and access token - * is required. - * - * @example - * ```javascript - * // \`googleUser\` from the onsuccess Google Sign In callback. - * var credential = firebase.auth.GoogleAuthProvider.credential( - googleUser.getAuthResponse().id_token); - * firebase.auth().signInWithCredential(credential) - * ``` - * @param idToken Google ID token. - * @param accessToken Google access token. - * @return The auth provider credential. - */ - static credential( - idToken?: string | null, - accessToken?: string | null - ): firebase.auth.OAuthCredential; - } - /** - * @hidden - */ - class GoogleAuthProvider_Instance implements firebase.auth.AuthProvider { - /** - * @param scope Google OAuth scope. - * @return The provider instance itself. - */ - addScope(scope: string): firebase.auth.AuthProvider; - providerId: string; - /** - * Sets the OAuth custom parameters to pass in a Google OAuth request for popup - * and redirect sign-in operations. - * Valid parameters include 'hd', 'hl', 'include_granted_scopes', 'login_hint' - * and 'prompt'. - * For a detailed list, check the - * {@link https://goo.gl/Xo01Jm Google} - * documentation. - * Reserved required OAuth 2.0 parameters such as 'client_id', 'redirect_uri', - * 'scope', 'response_type' and 'state' are not allowed and will be ignored. - * @param customOAuthParameters The custom OAuth parameters to pass - * in the OAuth request. - * @return The provider instance itself. - */ - setCustomParameters( - customOAuthParameters: Object - ): firebase.auth.AuthProvider; - } - - /** - * Generic OAuth provider. - * - * @example - * ```javascript - * // Using a redirect. - * firebase.auth().getRedirectResult().then(function(result) { - * if (result.credential) { - * // This gives you the OAuth Access Token for that provider. - * var token = result.credential.accessToken; - * } - * var user = result.user; - * }); - * - * // Start a sign in process for an unauthenticated user. - * var provider = new firebase.auth.OAuthProvider('google.com'); - * provider.addScope('profile'); - * provider.addScope('email'); - * firebase.auth().signInWithRedirect(provider); - * ``` - * @example - * ```javascript - * // Using a popup. - * var provider = new firebase.auth.OAuthProvider('google.com'); - * provider.addScope('profile'); - * provider.addScope('email'); - * firebase.auth().signInWithPopup(provider).then(function(result) { - * // This gives you the OAuth Access Token for that provider. - * var token = result.credential.accessToken; - * // The signed-in user info. - * var user = result.user; - * }); - * ``` - * - * @see {@link firebase.auth.Auth.onAuthStateChanged} to receive sign in state - * changes. - * @param providerId The associated provider ID, such as `github.com`. - */ - class OAuthProvider implements firebase.auth.AuthProvider { - constructor(providerId: string); - providerId: string; - /** - * @param scope Provider OAuth scope to add. - */ - addScope(scope: string): firebase.auth.AuthProvider; - /** - * Creates a Firebase credential from a generic OAuth provider's access token or - * ID token. The raw nonce is required when an ID token with a nonce field is - * provided. The SHA-256 hash of the raw nonce must match the nonce field in - * the ID token. - * - * @example - * ```javascript - * // `googleUser` from the onsuccess Google Sign In callback. - * // Initialize a generate OAuth provider with a `google.com` providerId. - * var provider = new firebase.auth.OAuthProvider('google.com'); - * var credential = provider.credential({ - * idToken: googleUser.getAuthResponse().id_token, - * }); - * firebase.auth().signInWithCredential(credential) - * ``` - * - * @param optionsOrIdToken Either the options object containing - * the ID token, access token and raw nonce or the ID token string. - * @param accessToken The OAuth access token. - */ - credential( - optionsOrIdToken: firebase.auth.OAuthCredentialOptions | string | null, - accessToken?: string - ): firebase.auth.OAuthCredential; - /** - * Sets the OAuth custom parameters to pass in an OAuth request for popup - * and redirect sign-in operations. - * For a detailed list, check the - * reserved required OAuth 2.0 parameters such as `client_id`, `redirect_uri`, - * `scope`, `response_type` and `state` are not allowed and will be ignored. - * @param customOAuthParameters The custom OAuth parameters to pass - * in the OAuth request. - */ - setCustomParameters( - customOAuthParameters: Object - ): firebase.auth.AuthProvider; - } - - class SAMLAuthProvider implements firebase.auth.AuthProvider { - constructor(providerId: string); - providerId: string; - } - - /** - * Interface representing ID token result obtained from - * {@link firebase.User.getIdTokenResult}. It contains the ID token JWT string - * and other helper properties for getting different data associated with the - * token as well as all the decoded payload claims. - * - * Note that these claims are not to be trusted as they are parsed client side. - * Only server side verification can guarantee the integrity of the token - * claims. - */ - interface IdTokenResult { - /** - * The Firebase Auth ID token JWT string. - */ - token: string; - /** - * The ID token expiration time formatted as a UTC string. - */ - expirationTime: string; - /** - * The authentication time formatted as a UTC string. This is the time the - * user authenticated (signed in) and not the time the token was refreshed. - */ - authTime: string; - /** - * The ID token issued at time formatted as a UTC string. - */ - issuedAtTime: string; - /** - * The sign-in provider through which the ID token was obtained (anonymous, - * custom, phone, password, etc). Note, this does not map to provider IDs. - */ - signInProvider: string | null; - /** - * The type of second factor associated with this session, provided the user - * was multi-factor authenticated (eg. phone, etc). - */ - signInSecondFactor: string | null; - /** - * The entire payload claims of the ID token including the standard reserved - * claims as well as the custom claims. - */ - claims: { - [key: string]: any; - }; - } - - /** - * Defines the options for initializing an - * {@link firebase.auth.OAuthCredential}. For ID tokens with nonce claim, - * the raw nonce has to also be provided. - */ - interface OAuthCredentialOptions { - /** - * The OAuth ID token used to initialize the OAuthCredential. - */ - idToken?: string; - /** - * The OAuth access token used to initialize the OAuthCredential. - */ - accessToken?: string; - /** - * The raw nonce associated with the ID token. It is required when an ID token - * with a nonce field is provided. The SHA-256 hash of the raw nonce must match - * the nonce field in the ID token. - */ - rawNonce?: string; - } - - /** - * The base class for asserting ownership of a second factor. This is used to - * facilitate enrollment of a second factor on an existing user - * or sign-in of a user who already verified the first factor. - * - */ - abstract class MultiFactorAssertion { - /** - * The identifier of the second factor. - */ - factorId: string; - } - - /** - * The class for asserting ownership of a phone second factor. - */ - class PhoneMultiFactorAssertion extends firebase.auth.MultiFactorAssertion { - private constructor(); - } - - /** - * The class used to initialize {@link firebase.auth.PhoneMultiFactorAssertion}. - */ - class PhoneMultiFactorGenerator { - private constructor(); - /** - * The identifier of the phone second factor: `phone`. - */ - static FACTOR_ID: string; - /** - * Initializes the {@link firebase.auth.PhoneMultiFactorAssertion} to confirm ownership - * of the phone second factor. - */ - static assertion( - phoneAuthCredential: firebase.auth.PhoneAuthCredential - ): firebase.auth.PhoneMultiFactorAssertion; - } - - /** - * A structure containing the information of a second factor entity. - */ - interface MultiFactorInfo { - /** - * The multi-factor enrollment ID. - */ - uid: string; - /** - * The user friendly name of the current second factor. - */ - displayName?: string | null; - /** - * The enrollment date of the second factor formatted as a UTC string. - */ - enrollmentTime: string; - /** - * The identifier of the second factor. - */ - factorId: string; - } - - /** - * The subclass of the MultiFactorInfo interface for phone number second factors. - * The factorId of this second factor is - * {@link firebase.auth.PhoneMultiFactorGenerator.FACTOR_ID}. - */ - interface PhoneMultiFactorInfo extends firebase.auth.MultiFactorInfo { - /** - * The phone number associated with the current second factor. - */ - phoneNumber: string; - } - - /** - * The information required to verify the ownership of a phone number. The - * information that's required depends on whether you are doing single-factor - * sign-in, multi-factor enrollment or multi-factor sign-in. - */ - type PhoneInfoOptions = - | firebase.auth.PhoneSingleFactorInfoOptions - | firebase.auth.PhoneMultiFactorEnrollInfoOptions - | firebase.auth.PhoneMultiFactorSignInInfoOptions; - /** - * The phone info options for single-factor sign-in. Only phone number is - * required. - */ - interface PhoneSingleFactorInfoOptions { - phoneNumber: string; - } - - /** - * The phone info options for multi-factor enrollment. Phone number and - * multi-factor session are required. - */ - interface PhoneMultiFactorEnrollInfoOptions { - phoneNumber: string; - session: firebase.auth.MultiFactorSession; - } - - /** - * The phone info options for multi-factor sign-in. Either multi-factor hint or - * multi-factor UID and multi-factor session are required. - */ - interface PhoneMultiFactorSignInInfoOptions { - multiFactorHint?: firebase.auth.MultiFactorInfo; - multiFactorUid?: string; - session: firebase.auth.MultiFactorSession; - } - - /** - * The class used to facilitate recovery from - * {@link firebase.auth.MultiFactorError} when a user needs to provide a second - * factor to sign in. - * - * @example - * ```javascript - * firebase.auth().signInWithEmailAndPassword() - * .then(function(result) { - * // User signed in. No 2nd factor challenge is needed. - * }) - * .catch(function(error) { - * if (error.code == 'auth/multi-factor-auth-required') { - * var resolver = error.resolver; - * // Show UI to let user select second factor. - * var multiFactorHints = resolver.hints; - * } else { - * // Handle other errors. - * } - * }); - * - * // The enrolled second factors that can be used to complete - * // sign-in are returned in the `MultiFactorResolver.hints` list. - * // UI needs to be presented to allow the user to select a second factor - * // from that list. - * - * var selectedHint = // ; selected from multiFactorHints - * var phoneAuthProvider = new firebase.auth.PhoneAuthProvider(); - * var phoneInfoOptions = { - * multiFactorHint: selectedHint, - * session: resolver.session - * }; - * phoneAuthProvider.verifyPhoneNumber( - * phoneInfoOptions, - * appVerifier - * ).then(function(verificationId) { - * // store verificationID and show UI to let user enter verification code. - * }); - * - * // UI to enter verification code and continue. - * // Continue button click handler - * var phoneAuthCredential = - * firebase.auth.PhoneAuthProvider.credential(verificationId, verificationCode); - * var multiFactorAssertion = - * firebase.auth.PhoneMultiFactorGenerator.assertion(phoneAuthCredential); - * resolver.resolveSignIn(multiFactorAssertion) - * .then(function(userCredential) { - * // User signed in. - * }); - * ``` - */ - class MultiFactorResolver { - private constructor(); - /** - * The Auth instance used to sign in with the first factor. - */ - auth: firebase.auth.Auth; - /** - * The session identifier for the current sign-in flow, which can be used - * to complete the second factor sign-in. - */ - session: firebase.auth.MultiFactorSession; - /** - * The list of hints for the second factors needed to complete the sign-in - * for the current session. - */ - hints: firebase.auth.MultiFactorInfo[]; - /** - * A helper function to help users complete sign in with a second factor - * using an {@link firebase.auth.MultiFactorAssertion} confirming the user - * successfully completed the second factor challenge. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/invalid-verification-code</dt> - * <dd>Thrown if the verification code is not valid.</dd> - * <dt>auth/missing-verification-code</dt> - * <dd>Thrown if the verification code is missing.</dd> - * <dt>auth/invalid-verification-id</dt> - * <dd>Thrown if the credential is a - * {@link firebase.auth.PhoneAuthProvider.credential} and the verification - * ID of the credential is not valid.</dd> - * <dt>auth/missing-verification-id</dt> - * <dd>Thrown if the verification ID is missing.</dd> - * <dt>auth/code-expired</dt> - * <dd>Thrown if the verification code has expired.</dd> - * <dt>auth/invalid-multi-factor-session</dt> - * <dd>Thrown if the request does not contain a valid proof of first factor - * successful sign-in.</dd> - * <dt>auth/missing-multi-factor-session</dt> - * <dd>Thrown if The request is missing proof of first factor successful - * sign-in.</dd> - * </dl> - * - * @param assertion The multi-factor assertion to resolve sign-in with. - * @return The promise that resolves with the user credential object. - */ - resolveSignIn( - assertion: firebase.auth.MultiFactorAssertion - ): Promise<firebase.auth.UserCredential>; - } - - /** - * The multi-factor session object used for enrolling a second factor on a - * user or helping sign in an enrolled user with a second factor. - */ - class MultiFactorSession { - private constructor(); - } - - /** - * Classes that represents the Phone Auth credentials returned by a - * {@link firebase.auth.PhoneAuthProvider}. - * - */ - class PhoneAuthCredential extends AuthCredential { - private constructor(); - } - - /** - * Phone number auth provider. - * - * @example - * ```javascript - * // 'recaptcha-container' is the ID of an element in the DOM. - * var applicationVerifier = new firebase.auth.RecaptchaVerifier( - * 'recaptcha-container'); - * var provider = new firebase.auth.PhoneAuthProvider(); - * provider.verifyPhoneNumber('+16505550101', applicationVerifier) - * .then(function(verificationId) { - * var verificationCode = window.prompt('Please enter the verification ' + - * 'code that was sent to your mobile device.'); - * return firebase.auth.PhoneAuthProvider.credential(verificationId, - * verificationCode); - * }) - * .then(function(phoneCredential) { - * return firebase.auth().signInWithCredential(phoneCredential); - * }); - * ``` - * @param auth The Firebase Auth instance in which - * sign-ins should occur. Uses the default Auth instance if unspecified. - */ - class PhoneAuthProvider extends PhoneAuthProvider_Instance { - static PROVIDER_ID: string; - /** - * This corresponds to the sign-in method identifier as returned in - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}. - */ - static PHONE_SIGN_IN_METHOD: string; - /** - * Creates a phone auth credential, given the verification ID from - * {@link firebase.auth.PhoneAuthProvider.verifyPhoneNumber} and the code - * that was sent to the user's mobile device. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/missing-verification-code</dt> - * <dd>Thrown if the verification code is missing.</dd> - * <dt>auth/missing-verification-id</dt> - * <dd>Thrown if the verification ID is missing.</dd> - * </dl> - * - * @param verificationId The verification ID returned from - * {@link firebase.auth.PhoneAuthProvider.verifyPhoneNumber}. - * @param verificationCode The verification code sent to the user's - * mobile device. - * @return The auth provider credential. - */ - static credential( - verificationId: string, - verificationCode: string - ): firebase.auth.AuthCredential; - } - /** - * @hidden - */ - class PhoneAuthProvider_Instance implements firebase.auth.AuthProvider { - constructor(auth?: firebase.auth.Auth | null); - providerId: string; - /** - * Starts a phone number authentication flow by sending a verification code to - * the given phone number. Returns an ID that can be passed to - * {@link firebase.auth.PhoneAuthProvider.credential} to identify this flow. - * - * For abuse prevention, this method also requires a - * {@link firebase.auth.ApplicationVerifier}. The Firebase Auth SDK includes - * a reCAPTCHA-based implementation, {@link firebase.auth.RecaptchaVerifier}. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/captcha-check-failed</dt> - * <dd>Thrown if the reCAPTCHA response token was invalid, expired, or if - * this method was called from a non-whitelisted domain.</dd> - * <dt>auth/invalid-phone-number</dt> - * <dd>Thrown if the phone number has an invalid format.</dd> - * <dt>auth/missing-phone-number</dt> - * <dd>Thrown if the phone number is missing.</dd> - * <dt>auth/quota-exceeded</dt> - * <dd>Thrown if the SMS quota for the Firebase project has been exceeded.</dd> - * <dt>auth/user-disabled</dt> - * <dd>Thrown if the user corresponding to the given phone number has been - * disabled.</dd> - * <dt>auth/maximum-second-factor-count-exceeded</dt> - * <dd>Thrown if The maximum allowed number of second factors on a user - * has been exceeded.</dd> - * <dt>auth/second-factor-already-in-use</dt> - * <dd>Thrown if the second factor is already enrolled on this account.</dd> - * <dt>auth/unsupported-first-factor</dt> - * <dd>Thrown if the first factor being used to sign in is not supported.</dd> - * <dt>auth/unverified-email</dt> - * <dd>Thrown if the email of the account is not verified.</dd> - * </dl> - * - * @param phoneInfoOptions The user's {@link firebase.auth.PhoneInfoOptions}. - * The phone number should be in E.164 format (e.g. +16505550101). - * @param applicationVerifier - * @return A Promise for the verification ID. - */ - verifyPhoneNumber( - phoneInfoOptions: firebase.auth.PhoneInfoOptions | string, - applicationVerifier: firebase.auth.ApplicationVerifier - ): Promise<string>; - } - - /** - * An {@link https://www.google.com/recaptcha/ reCAPTCHA}-based application - * verifier. - * - * This class does not work in a Node.js environment. - * - * @param container The reCAPTCHA container parameter. This - * has different meaning depending on whether the reCAPTCHA is hidden or - * visible. For a visible reCAPTCHA the container must be empty. If a string - * is used, it has to correspond to an element ID. The corresponding element - * must also must be in the DOM at the time of initialization. - * @param parameters The optional reCAPTCHA parameters. Check the - * reCAPTCHA docs for a comprehensive list. All parameters are accepted - * except for the sitekey. Firebase Auth backend provisions a reCAPTCHA for - * each project and will configure this upon rendering. For an invisible - * reCAPTCHA, a size key must have the value 'invisible'. - * @param app The corresponding Firebase app. If none is - * provided, the default Firebase App instance is used. A Firebase App - * instance must be initialized with an API key, otherwise an error will be - * thrown. - */ - class RecaptchaVerifier extends RecaptchaVerifier_Instance {} - /** - * @hidden - */ - class RecaptchaVerifier_Instance - implements firebase.auth.ApplicationVerifier - { - constructor( - container: any | string, - parameters?: Object | null, - app?: firebase.app.App | null - ); - /** - * Clears the reCAPTCHA widget from the page and destroys the current instance. - */ - clear(): void; - /** - * Renders the reCAPTCHA widget on the page. - * @return A Promise that resolves with the - * reCAPTCHA widget ID. - */ - render(): Promise<number>; - /** - * The application verifier type. For a reCAPTCHA verifier, this is 'recaptcha'. - */ - type: string; - /** - * Waits for the user to solve the reCAPTCHA and resolves with the reCAPTCHA - * token. - * @return A Promise for the reCAPTCHA token. - */ - verify(): Promise<string>; - } - - /** - * Twitter auth provider. - * - * @example - * ```javascript - * // Using a redirect. - * firebase.auth().getRedirectResult().then(function(result) { - * if (result.credential) { - * // For accessing the Twitter API. - * var token = result.credential.accessToken; - * var secret = result.credential.secret; - * } - * var user = result.user; - * }); - * - * // Start a sign in process for an unauthenticated user. - * var provider = new firebase.auth.TwitterAuthProvider(); - * firebase.auth().signInWithRedirect(provider); - * ``` - * @example - * ```javascript - * // Using a popup. - * var provider = new firebase.auth.TwitterAuthProvider(); - * firebase.auth().signInWithPopup(provider).then(function(result) { - * // For accessing the Twitter API. - * var token = result.credential.accessToken; - * var secret = result.credential.secret; - * // The signed-in user info. - * var user = result.user; - * }); - * ``` - * - * @see {@link firebase.auth.Auth.onAuthStateChanged} to receive sign in state - * changes. - */ - class TwitterAuthProvider extends TwitterAuthProvider_Instance { - static PROVIDER_ID: string; - /** - * This corresponds to the sign-in method identifier as returned in - * {@link firebase.auth.Auth.fetchSignInMethodsForEmail}. - * - */ - static TWITTER_SIGN_IN_METHOD: string; - /** - * @param token Twitter access token. - * @param secret Twitter secret. - * @return The auth provider credential. - */ - static credential( - token: string, - secret: string - ): firebase.auth.OAuthCredential; - } - /** - * @hidden - */ - class TwitterAuthProvider_Instance implements firebase.auth.AuthProvider { - providerId: string; - /** - * Sets the OAuth custom parameters to pass in a Twitter OAuth request for popup - * and redirect sign-in operations. - * Valid parameters include 'lang'. - * Reserved required OAuth 1.0 parameters such as 'oauth_consumer_key', - * 'oauth_token', 'oauth_signature', etc are not allowed and will be ignored. - * @param customOAuthParameters The custom OAuth parameters to pass - * in the OAuth request. - * @return The provider instance itself. - */ - setCustomParameters( - customOAuthParameters: Object - ): firebase.auth.AuthProvider; - } - - /** - * A structure containing a User, an AuthCredential, the operationType, and - * any additional user information that was returned from the identity provider. - * operationType could be 'signIn' for a sign-in operation, 'link' for a linking - * operation and 'reauthenticate' for a reauthentication operation. - */ - type UserCredential = { - additionalUserInfo?: firebase.auth.AdditionalUserInfo | null; - credential: firebase.auth.AuthCredential | null; - operationType?: string | null; - user: firebase.User | null; - }; - - /** - * Interface representing a user's metadata. - */ - interface UserMetadata { - creationTime?: string; - lastSignInTime?: string; - } -} - -/** - * The Analytics SDK does not work in a Node.js environment. - */ -declare namespace firebase.analytics { - /** - * The Firebase Analytics service interface. - * - * Do not call this constructor directly. Instead, use - * {@link firebase.analytics `firebase.analytics()`}. - */ - export interface Analytics { - /** - * The {@link firebase.app.App app} associated with the `Analytics` service - * instance. - * - * @example - * ```javascript - * var app = analytics.app; - * ``` - */ - app: firebase.app.App; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'add_payment_info', - eventParams?: { - coupon?: EventParams['coupon']; - currency?: EventParams['currency']; - items?: EventParams['items']; - payment_type?: EventParams['payment_type']; - value?: EventParams['value']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'add_shipping_info', - eventParams?: { - coupon?: EventParams['coupon']; - currency?: EventParams['currency']; - items?: EventParams['items']; - shipping_tier?: EventParams['shipping_tier']; - value?: EventParams['value']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'add_to_cart' | 'add_to_wishlist' | 'remove_from_cart', - eventParams?: { - currency?: EventParams['currency']; - value?: EventParams['value']; - items?: EventParams['items']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'begin_checkout', - eventParams?: { - currency?: EventParams['currency']; - coupon?: EventParams['coupon']; - value?: EventParams['value']; - items?: EventParams['items']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'checkout_progress', - eventParams?: { - currency?: EventParams['currency']; - coupon?: EventParams['coupon']; - value?: EventParams['value']; - items?: EventParams['items']; - checkout_step?: EventParams['checkout_step']; - checkout_option?: EventParams['checkout_option']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * See - * {@link https://developers.google.com/analytics/devguides/collection/ga4/exceptions - * | Measure exceptions}. - */ - logEvent( - eventName: 'exception', - eventParams?: { - description?: EventParams['description']; - fatal?: EventParams['fatal']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'generate_lead', - eventParams?: { - value?: EventParams['value']; - currency?: EventParams['currency']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'login', - eventParams?: { - method?: EventParams['method']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * See - * {@link https://developers.google.com/analytics/devguides/collection/ga4/views - * | Page views}. - */ - logEvent( - eventName: 'page_view', - eventParams?: { - page_title?: string; - page_location?: string; - page_path?: string; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'purchase' | 'refund', - eventParams?: { - value?: EventParams['value']; - currency?: EventParams['currency']; - transaction_id: EventParams['transaction_id']; - tax?: EventParams['tax']; - shipping?: EventParams['shipping']; - items?: EventParams['items']; - coupon?: EventParams['coupon']; - affiliation?: EventParams['affiliation']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * See {@link https://firebase.google.com/docs/analytics/screenviews - * | Track Screenviews}. - */ - logEvent( - eventName: 'screen_view', - eventParams?: { - firebase_screen: EventParams['firebase_screen']; - firebase_screen_class: EventParams['firebase_screen_class']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'search' | 'view_search_results', - eventParams?: { - search_term?: EventParams['search_term']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'select_content', - eventParams?: { - content_type?: EventParams['content_type']; - item_id?: EventParams['item_id']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'select_item', - eventParams?: { - items?: EventParams['items']; - item_list_name?: EventParams['item_list_name']; - item_list_id?: EventParams['item_list_id']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'select_promotion' | 'view_promotion', - eventParams?: { - items?: EventParams['items']; - promotion_id?: EventParams['promotion_id']; - promotion_name?: EventParams['promotion_name']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'set_checkout_option', - eventParams?: { - checkout_step?: EventParams['checkout_step']; - checkout_option?: EventParams['checkout_option']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'share', - eventParams?: { - method?: EventParams['method']; - content_type?: EventParams['content_type']; - item_id?: EventParams['item_id']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'sign_up', - eventParams?: { - method?: EventParams['method']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'timing_complete', - eventParams?: { - name: string; - value: number; - event_category?: string; - event_label?: string; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'view_cart' | 'view_item', - eventParams?: { - currency?: EventParams['currency']; - items?: EventParams['items']; - value?: EventParams['value']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent( - eventName: 'view_item_list', - eventParams?: { - items?: EventParams['items']; - item_list_name?: EventParams['item_list_name']; - item_list_id?: EventParams['item_list_id']; - [key: string]: any; - }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sends analytics event with given `eventParams`. This method - * automatically associates this logged event with this Firebase web - * app instance on this device. - * List of recommended event parameters can be found in - * {@link https://developers.google.com/gtagjs/reference/ga4-events - * | the GA4 reference documentation}. - */ - logEvent<T extends string>( - eventName: CustomEventName<T>, - eventParams?: { [key: string]: any }, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Use gtag 'config' command to set 'screen_name'. - * - * @deprecated Use {@link logEvent} with `eventName` as 'screen_view' and add relevant `eventParams`. - * See {@link https://firebase.google.com/docs/analytics/screenviews | Track Screenviews}. - */ - setCurrentScreen( - screenName: string, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Use gtag 'config' command to set 'user_id'. - */ - setUserId( - id: string, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Use gtag 'config' command to set all params specified. - */ - setUserProperties( - properties: firebase.analytics.CustomParams, - options?: firebase.analytics.AnalyticsCallOptions - ): void; - - /** - * Sets whether analytics collection is enabled for this app on this device. - * window['ga-disable-analyticsId'] = true; - */ - setAnalyticsCollectionEnabled(enabled: boolean): void; - } - - export type CustomEventName<T> = T extends EventNameString ? never : T; - - /** - * Additional options that can be passed to Firebase Analytics method - * calls such as `logEvent`, `setCurrentScreen`, etc. - */ - export interface AnalyticsCallOptions { - /** - * If true, this config or event call applies globally to all - * analytics properties on the page. - */ - global: boolean; - } - - /** - * Specifies custom options for your Firebase Analytics instance. - * You must set these before initializing `firebase.analytics()`. - */ - export interface SettingsOptions { - /** Sets custom name for `gtag` function. */ - gtagName?: string; - /** Sets custom name for `dataLayer` array used by gtag. */ - dataLayerName?: string; - } - - /** - * Configures Firebase Analytics to use custom `gtag` or `dataLayer` names. - * Intended to be used if `gtag.js` script has been installed on - * this page independently of Firebase Analytics, and is using non-default - * names for either the `gtag` function or for `dataLayer`. - * Must be called before calling `firebase.analytics()` or it won't - * have any effect. - */ - export function settings(settings: firebase.analytics.SettingsOptions): void; - - /** - * Standard gtag.js control parameters. - * For more information, see - * {@link https://developers.google.com/gtagjs/reference/parameter - * the gtag.js documentation on parameters}. - */ - export interface ControlParams { - groups?: string | string[]; - send_to?: string | string[]; - event_callback?: () => void; - event_timeout?: number; - } - - /** - * Standard gtag.js event parameters. - * For more information, see - * {@link https://developers.google.com/gtagjs/reference/parameter - * the gtag.js documentation on parameters}. - */ - export interface EventParams { - checkout_option?: string; - checkout_step?: number; - item_id?: string; - content_type?: string; - coupon?: string; - currency?: string; - description?: string; - fatal?: boolean; - items?: Item[]; - method?: string; - number?: string; - promotions?: Promotion[]; - screen_name?: string; - /** - * Firebase-specific. Use to log a `screen_name` to Firebase Analytics. - */ - firebase_screen?: string; - /** - * Firebase-specific. Use to log a `screen_class` to Firebase Analytics. - */ - firebase_screen_class?: string; - search_term?: string; - shipping?: Currency; - tax?: Currency; - transaction_id?: string; - value?: number; - event_label?: string; - event_category: string; - shipping_tier?: string; - item_list_id?: string; - item_list_name?: string; - promotion_id?: string; - promotion_name?: string; - payment_type?: string; - affiliation?: string; - } - - /** - * Any custom params the user may pass to gtag.js. - */ - export interface CustomParams { - [key: string]: any; - } - - /** - * Type for standard gtag.js event names. `logEvent` also accepts any - * custom string and interprets it as a custom event name. - */ - export type EventNameString = - | 'add_payment_info' - | 'add_shipping_info' - | 'add_to_cart' - | 'add_to_wishlist' - | 'begin_checkout' - | 'checkout_progress' - | 'exception' - | 'generate_lead' - | 'login' - | 'page_view' - | 'purchase' - | 'refund' - | 'remove_from_cart' - | 'screen_view' - | 'search' - | 'select_content' - | 'select_item' - | 'select_promotion' - | 'set_checkout_option' - | 'share' - | 'sign_up' - | 'timing_complete' - | 'view_cart' - | 'view_item' - | 'view_item_list' - | 'view_promotion' - | 'view_search_results'; - - /** - * Enum of standard gtag.js event names provided for convenient - * developer usage. `logEvent` will also accept any custom string - * and interpret it as a custom event name. - */ - export enum EventName { - ADD_PAYMENT_INFO = 'add_payment_info', - ADD_SHIPPING_INFO = 'add_shipping_info', - ADD_TO_CART = 'add_to_cart', - ADD_TO_WISHLIST = 'add_to_wishlist', - BEGIN_CHECKOUT = 'begin_checkout', - /** @deprecated */ - CHECKOUT_PROGRESS = 'checkout_progress', - EXCEPTION = 'exception', - GENERATE_LEAD = 'generate_lead', - LOGIN = 'login', - PAGE_VIEW = 'page_view', - PURCHASE = 'purchase', - REFUND = 'refund', - REMOVE_FROM_CART = 'remove_from_cart', - SCREEN_VIEW = 'screen_view', - SEARCH = 'search', - SELECT_CONTENT = 'select_content', - SELECT_ITEM = 'select_item', - SELECT_PROMOTION = 'select_promotion', - /** @deprecated */ - SET_CHECKOUT_OPTION = 'set_checkout_option', - SHARE = 'share', - SIGN_UP = 'sign_up', - TIMING_COMPLETE = 'timing_complete', - VIEW_CART = 'view_cart', - VIEW_ITEM = 'view_item', - VIEW_ITEM_LIST = 'view_item_list', - VIEW_PROMOTION = 'view_promotion', - VIEW_SEARCH_RESULTS = 'view_search_results' - } - - export type Currency = string | number; - - export interface Item { - item_id?: string; - item_name?: string; - item_brand?: string; - item_category?: string; - item_category2?: string; - item_category3?: string; - item_category4?: string; - item_category5?: string; - item_variant?: string; - price?: Currency; - quantity?: number; - index?: number; - coupon?: string; - item_list_name?: string; - item_list_id?: string; - discount?: Currency; - affiliation?: string; - creative_name?: string; - creative_slot?: string; - promotion_id?: string; - promotion_name?: string; - location_id?: string; - /** @deprecated Use item_brand instead. */ - brand?: string; - /** @deprecated Use item_category instead. */ - category?: string; - /** @deprecated Use item_id instead. */ - id?: string; - /** @deprecated Use item_name instead. */ - name?: string; - } - - /** @deprecated Use Item instead. */ - export interface Promotion { - creative_name?: string; - creative_slot?: string; - id?: string; - name?: string; - } - - /** - * An async function that returns true if current browser context supports initialization of analytics module - * (`firebase.analytics()`). - * - * Returns false otherwise. - * - * - */ - function isSupported(): Promise<boolean>; -} - -declare namespace firebase.auth.Auth { - type Persistence = string; - /** - * An enumeration of the possible persistence mechanism types. - */ - var Persistence: { - /** - * Indicates that the state will be persisted even when the browser window is - * closed or the activity is destroyed in react-native. - */ - LOCAL: Persistence; - /** - * Indicates that the state will only be stored in memory and will be cleared - * when the window or activity is refreshed. - */ - NONE: Persistence; - /** - * Indicates that the state will only persist in current session/tab, relevant - * to web only, and will be cleared when the tab is closed. - */ - SESSION: Persistence; - }; -} - -declare namespace firebase.User { - /** - * This is the interface that defines the multi-factor related properties and - * operations pertaining to a {@link firebase.User}. - */ - interface MultiFactorUser { - /** - * Returns a list of the user's enrolled second factors. - */ - enrolledFactors: firebase.auth.MultiFactorInfo[]; - /** - * Enrolls a second factor as identified by the - * {@link firebase.auth.MultiFactorAssertion} for the current user. - * On resolution, the user tokens are updated to reflect the change in the - * JWT payload. - * Accepts an additional display name parameter used to identify the second - * factor to the end user. - * Recent re-authentication is required for this operation to succeed. - * On successful enrollment, existing Firebase sessions (refresh tokens) are - * revoked. When a new factor is enrolled, an email notification is sent - * to the user’s email. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/invalid-verification-code</dt> - * <dd>Thrown if the verification code is not valid.</dd> - * <dt>auth/missing-verification-code</dt> - * <dd>Thrown if the verification code is missing.</dd> - * <dt>auth/invalid-verification-id</dt> - * <dd>Thrown if the credential is a - * {@link firebase.auth.PhoneAuthProvider.credential} and the verification - * ID of the credential is not valid.</dd> - * <dt>auth/missing-verification-id</dt> - * <dd>Thrown if the verification ID is missing.</dd> - * <dt>auth/code-expired</dt> - * <dd>Thrown if the verification code has expired.</dd> - * <dt>auth/maximum-second-factor-count-exceeded</dt> - * <dd>Thrown if The maximum allowed number of second factors on a user - * has been exceeded.</dd> - * <dt>auth/second-factor-already-in-use</dt> - * <dd>Thrown if the second factor is already enrolled on this account.</dd> - * <dt>auth/unsupported-first-factor</dt> - * <dd>Thrown if the first factor being used to sign in is not supported.</dd> - * <dt>auth/unverified-email</dt> - * <dd>Thrown if the email of the account is not verified.</dd> - * <dt>auth/requires-recent-login</dt> - * <dd>Thrown if the user's last sign-in time does not meet the security - * threshold. Use {@link firebase.User.reauthenticateWithCredential} to - * resolve.</dd> - * </dl> - * - * @example - * ```javascript - * firebase.auth().currentUser.multiFactor.getSession() - * .then(function(multiFactorSession) { - * // Send verification code - * var phoneAuthProvider = new firebase.auth.PhoneAuthProvider(); - * var phoneInfoOptions = { - * phoneNumber: phoneNumber, - * session: multiFactorSession - * }; - * return phoneAuthProvider.verifyPhoneNumber( - * phoneInfoOptions, appVerifier); - * }).then(function(verificationId) { - * // Store verificationID and show UI to let user enter verification code. - * }); - * - * var phoneAuthCredential = - * firebase.auth.PhoneAuthProvider.credential(verificationId, verificationCode); - * var multiFactorAssertion = - * firebase.auth.PhoneMultiFactorGenerator.assertion(phoneAuthCredential); - * firebase.auth().currentUser.multiFactor.enroll(multiFactorAssertion) - * .then(function() { - * // Second factor enrolled. - * }); - * ``` - * - * @param assertion The multi-factor assertion to enroll with. - * @param displayName The display name of the second factor. - */ - enroll( - assertion: firebase.auth.MultiFactorAssertion, - displayName?: string | null - ): Promise<void>; - /** - * Returns the session identifier for a second factor enrollment operation. - * This is used to identify the current user trying to enroll a second factor. - * @return The promise that resolves with the - * {@link firebase.auth.MultiFactorSession}. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/user-token-expired</dt> - * <dd>Thrown if the token of the user is expired.</dd> - * </dl> - */ - getSession(): Promise<firebase.auth.MultiFactorSession>; - /** - * Unenrolls the specified second factor. To specify the factor to remove, pass - * a {@link firebase.auth.MultiFactorInfo} object - * (retrieved from <code>enrolledFactors()</code>) - * or the factor's UID string. - * Sessions are not revoked when the account is downgraded. An email - * notification is likely to be sent to the user notifying them of the change. - * Recent re-authentication is required for this operation to succeed. - * When an existing factor is unenrolled, an email notification is sent to the - * user’s email. - * - * <h4>Error Codes</h4> - * <dl> - * <dt>auth/multi-factor-info-not-found</dt> - * <dd>Thrown if the user does not have a second factor matching the - * identifier provided.</dd> - * <dt>auth/requires-recent-login</dt> - * <dd>Thrown if the user's last sign-in time does not meet the security - * threshold. Use {@link firebase.User.reauthenticateWithCredential} to - * resolve.</dd> - * </dl> - * - * @example - * ```javascript - * var options = firebase.auth().currentUser.multiFactor.enrolledFactors; - * // Present user the option to unenroll. - * return firebase.auth().currentUser.multiFactor.unenroll(options[i]) - * .then(function() { - * // User successfully unenrolled selected factor. - * }).catch(function(error) { - * // Handler error. - * }); - * ``` - * - * @param option The multi-factor option to unenroll. - */ - unenroll(option: firebase.auth.MultiFactorInfo | string): Promise<void>; - } -} - -declare namespace firebase.auth.ActionCodeInfo { - type Operation = string; - /** - * An enumeration of the possible email action types. - */ - var Operation: { - /** - * The email link sign-in action. - */ - EMAIL_SIGNIN: Operation; - /** - * The password reset action. - */ - PASSWORD_RESET: Operation; - /** - * The email revocation action. - */ - RECOVER_EMAIL: Operation; - /** - * The revert second factor addition email action. - */ - REVERT_SECOND_FACTOR_ADDITION: Operation; - /** - * The verify and update email action. - */ - VERIFY_AND_CHANGE_EMAIL: Operation; - /** - * The email verification action. - */ - VERIFY_EMAIL: Operation; - }; -} - -declare namespace firebase.database { - /** - * A `DataSnapshot` contains data from a Database location. - * - * Any time you read data from the Database, you receive the data as a - * `DataSnapshot`. A `DataSnapshot` is passed to the event callbacks you attach - * with `on()` or `once()`. You can extract the contents of the snapshot as a - * JavaScript object by calling the `val()` method. Alternatively, you can - * traverse into the snapshot by calling `child()` to return child snapshots - * (which you could then call `val()` on). - * - * A `DataSnapshot` is an efficiently generated, immutable copy of the data at - * a Database location. It cannot be modified and will never change (to modify - * data, you always call the `set()` method on a `Reference` directly). - * - */ - interface DataSnapshot { - /** - * Gets another `DataSnapshot` for the location at the specified relative path. - * - * Passing a relative path to the `child()` method of a DataSnapshot returns - * another `DataSnapshot` for the location at the specified relative path. The - * relative path can either be a simple child name (for example, "ada") or a - * deeper, slash-separated path (for example, "ada/name/first"). If the child - * location has no data, an empty `DataSnapshot` (that is, a `DataSnapshot` - * whose value is `null`) is returned. - * - * @example - * ```javascript - * // Assume we have the following data in the Database: - * { - * "name": { - * "first": "Ada", - * "last": "Lovelace" - * } - * } - * - * // Test for the existence of certain keys within a DataSnapshot - * var ref = firebase.database().ref("users/ada"); - * ref.once("value") - * .then(function(snapshot) { - * var name = snapshot.child("name").val(); // {first:"Ada",last:"Lovelace"} - * var firstName = snapshot.child("name/first").val(); // "Ada" - * var lastName = snapshot.child("name").child("last").val(); // "Lovelace" - * var age = snapshot.child("age").val(); // null - * }); - * ``` - * - * @param path A relative path to the location of child data. - */ - child(path: string): firebase.database.DataSnapshot; - /** - * Returns true if this `DataSnapshot` contains any data. It is slightly more - * efficient than using `snapshot.val() !== null`. - * - * @example - * ```javascript - * // Assume we have the following data in the Database: - * { - * "name": { - * "first": "Ada", - * "last": "Lovelace" - * } - * } - * - * // Test for the existence of certain keys within a DataSnapshot - * var ref = firebase.database().ref("users/ada"); - * ref.once("value") - * .then(function(snapshot) { - * var a = snapshot.exists(); // true - * var b = snapshot.child("name").exists(); // true - * var c = snapshot.child("name/first").exists(); // true - * var d = snapshot.child("name/middle").exists(); // false - * }); - * ``` - */ - exists(): boolean; - /** - * Exports the entire contents of the DataSnapshot as a JavaScript object. - * - * The `exportVal()` method is similar to `val()`, except priority information - * is included (if available), making it suitable for backing up your data. - * - * @return The DataSnapshot's contents as a JavaScript value (Object, - * Array, string, number, boolean, or `null`). - */ - exportVal(): any; - /** - * Enumerates the top-level children in the `DataSnapshot`. - * - * Because of the way JavaScript objects work, the ordering of data in the - * JavaScript object returned by `val()` is not guaranteed to match the ordering - * on the server nor the ordering of `child_added` events. That is where - * `forEach()` comes in handy. It guarantees the children of a `DataSnapshot` - * will be iterated in their query order. - * - * If no explicit `orderBy*()` method is used, results are returned - * ordered by key (unless priorities are used, in which case, results are - * returned by priority). - * - * @example - * ```javascript - * // Assume we have the following data in the Database: - * { - * "users": { - * "ada": { - * "first": "Ada", - * "last": "Lovelace" - * }, - * "alan": { - * "first": "Alan", - * "last": "Turing" - * } - * } - * } - * - * // Loop through users in order with the forEach() method. The callback - * // provided to forEach() will be called synchronously with a DataSnapshot - * // for each child: - * var query = firebase.database().ref("users").orderByKey(); - * query.once("value") - * .then(function(snapshot) { - * snapshot.forEach(function(childSnapshot) { - * // key will be "ada" the first time and "alan" the second time - * var key = childSnapshot.key; - * // childData will be the actual contents of the child - * var childData = childSnapshot.val(); - * }); - * }); - * ``` - * - * @example - * ```javascript - * // You can cancel the enumeration at any point by having your callback - * // function return true. For example, the following code sample will only - * // fire the callback function one time: - * var query = firebase.database().ref("users").orderByKey(); - * query.once("value") - * .then(function(snapshot) { - * snapshot.forEach(function(childSnapshot) { - * var key = childSnapshot.key; // "ada" - * - * // Cancel enumeration - * return true; - * }); - * }); - * ``` - * - * @param action A function - * that will be called for each child DataSnapshot. The callback can return - * true to cancel further enumeration. - * @return true if enumeration was canceled due to your callback - * returning true. - */ - forEach( - action: (a: firebase.database.IteratedDataSnapshot) => boolean | void - ): boolean; - /** - * Gets the priority value of the data in this `DataSnapshot`. - * - * Applications need not use priority but can order collections by - * ordinary properties (see - * {@link - * https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data - * Sorting and filtering data}). - */ - getPriority(): string | number | null; - /** - * Returns true if the specified child path has (non-null) data. - * - * @example - * ```javascript - * // Assume we have the following data in the Database: - * { - * "name": { - * "first": "Ada", - * "last": "Lovelace" - * } - * } - * - * // Determine which child keys in DataSnapshot have data. - * var ref = firebase.database().ref("users/ada"); - * ref.once("value") - * .then(function(snapshot) { - * var hasName = snapshot.hasChild("name"); // true - * var hasAge = snapshot.hasChild("age"); // false - * }); - * ``` - * - * @param path A relative path to the location of a potential child. - * @return `true` if data exists at the specified child path; else - * `false`. - */ - hasChild(path: string): boolean; - /** - * Returns whether or not the `DataSnapshot` has any non-`null` child - * properties. - * - * You can use `hasChildren()` to determine if a `DataSnapshot` has any - * children. If it does, you can enumerate them using `forEach()`. If it - * doesn't, then either this snapshot contains a primitive value (which can be - * retrieved with `val()`) or it is empty (in which case, `val()` will return - * `null`). - * - * @example - * ```javascript - * // Assume we have the following data in the Database: - * { - * "name": { - * "first": "Ada", - * "last": "Lovelace" - * } - * } - * - * var ref = firebase.database().ref("users/ada"); - * ref.once("value") - * .then(function(snapshot) { - * var a = snapshot.hasChildren(); // true - * var b = snapshot.child("name").hasChildren(); // true - * var c = snapshot.child("name/first").hasChildren(); // false - * }); - * ``` - * - * @return true if this snapshot has any children; else false. - */ - hasChildren(): boolean; - /** - * The key (last part of the path) of the location of this `DataSnapshot`. - * - * The last token in a Database location is considered its key. For example, - * "ada" is the key for the /users/ada/ node. Accessing the key on any - * `DataSnapshot` will return the key for the location that generated it. - * However, accessing the key on the root URL of a Database will return `null`. - * - * @example - * ```javascript - * // Assume we have the following data in the Database: - * { - * "name": { - * "first": "Ada", - * "last": "Lovelace" - * } - * } - * - * var ref = firebase.database().ref("users/ada"); - * ref.once("value") - * .then(function(snapshot) { - * var key = snapshot.key; // "ada" - * var childKey = snapshot.child("name/last").key; // "last" - * }); - * ``` - * - * @example - * ```javascript - * var rootRef = firebase.database().ref(); - * rootRef.once("value") - * .then(function(snapshot) { - * var key = snapshot.key; // null - * var childKey = snapshot.child("users/ada").key; // "ada" - * }); - * ``` - */ - key: string | null; - /** - * Returns the number of child properties of this `DataSnapshot`. - * - * @example - * ```javascript - * // Assume we have the following data in the Database: - * { - * "name": { - * "first": "Ada", - * "last": "Lovelace" - * } - * } - * - * var ref = firebase.database().ref("users/ada"); - * ref.once("value") - * .then(function(snapshot) { - * var a = snapshot.numChildren(); // 1 ("name") - * var b = snapshot.child("name").numChildren(); // 2 ("first", "last") - * var c = snapshot.child("name/first").numChildren(); // 0 - * }); - * ``` - */ - numChildren(): number; - /** - * Extracts a JavaScript value from a `DataSnapshot`. - * - * Depending on the data in a `DataSnapshot`, the `val()` method may return a - * scalar type (string, number, or boolean), an array, or an object. It may also - * return null, indicating that the `DataSnapshot` is empty (contains no data). - * - * @example - * ```javascript - * // Write and then read back a string from the Database. - * ref.set("hello") - * .then(function() { - * return ref.once("value"); - * }) - * .then(function(snapshot) { - * var data = snapshot.val(); // data === "hello" - * }); - * ``` - * - * @example - * ```javascript - * // Write and then read back a JavaScript object from the Database. - * ref.set({ name: "Ada", age: 36 }) - * .then(function() { - * return ref.once("value"); - * }) - * .then(function(snapshot) { - * var data = snapshot.val(); - * // data is { "name": "Ada", "age": 36 } - * // data.name === "Ada" - * // data.age === 36 - * }); - * ``` - * - * @return The DataSnapshot's contents as a JavaScript value (Object, - * Array, string, number, boolean, or `null`). - */ - val(): any; - /** - * The `Reference` for the location that generated this `DataSnapshot`. - */ - ref: firebase.database.Reference; - /** - * Returns a JSON-serializable representation of this object. - */ - toJSON(): Object | null; - } - - interface IteratedDataSnapshot extends DataSnapshot { - key: string; // key of the location of this snapshot. - } - - /** - * The Firebase Database service interface. - * - * Do not call this constructor directly. Instead, use - * {@link firebase.database `firebase.database()`}. - * - * See - * {@link - * https://firebase.google.com/docs/database/web/start/ - * Installation & Setup in JavaScript} - * for a full guide on how to use the Firebase Database service. - */ - interface Database { - /** - * The {@link firebase.app.App app} associated with the `Database` service - * instance. - * - * @example - * ```javascript - * var app = database.app; - * ``` - */ - app: firebase.app.App; - /** - * Additional methods for debugging and special cases. - * - */ - INTERNAL: { - /** - * Force the use of WebSockets instead of long polling. - */ - forceWebSockets: () => void; - /** - * Force the use of long polling instead of WebSockets. This will be ignored if the WebSocket protocol is used in `databaseURL`. - */ - forceLongPolling: () => void; - }; - /** - * Modify this instance to communicate with the Realtime Database emulator. - * - * <p>Note: This method must be called before performing any other operation. - * - * @param host the emulator host (ex: localhost) - * @param port the emulator port (ex: 8080) - * @param options.mockUserToken the mock auth token to use for unit testing Security Rules - */ - useEmulator( - host: string, - port: number, - options?: { - mockUserToken?: EmulatorMockTokenOptions | string; - } - ): void; - /** - * Disconnects from the server (all Database operations will be completed - * offline). - * - * The client automatically maintains a persistent connection to the Database - * server, which will remain active indefinitely and reconnect when - * disconnected. However, the `goOffline()` and `goOnline()` methods may be used - * to control the client connection in cases where a persistent connection is - * undesirable. - * - * While offline, the client will no longer receive data updates from the - * Database. However, all Database operations performed locally will continue to - * immediately fire events, allowing your application to continue behaving - * normally. Additionally, each operation performed locally will automatically - * be queued and retried upon reconnection to the Database server. - * - * To reconnect to the Database and begin receiving remote events, see - * `goOnline()`. - * - * @example - * ```javascript - * firebase.database().goOffline(); - * ``` - */ - goOffline(): any; - /** - * Reconnects to the server and synchronizes the offline Database state - * with the server state. - * - * This method should be used after disabling the active connection with - * `goOffline()`. Once reconnected, the client will transmit the proper data - * and fire the appropriate events so that your client "catches up" - * automatically. - * - * @example - * ```javascript - * firebase.database().goOnline(); - * ``` - */ - goOnline(): any; - /** - * Returns a `Reference` representing the location in the Database - * corresponding to the provided path. If no path is provided, the `Reference` - * will point to the root of the Database. - * - * @example - * ```javascript - * // Get a reference to the root of the Database - * var rootRef = firebase.database().ref(); - * ``` - * - * @example - * ```javascript - * // Get a reference to the /users/ada node - * var adaRef = firebase.database().ref("users/ada"); - * // The above is shorthand for the following operations: - * //var rootRef = firebase.database().ref(); - * //var adaRef = rootRef.child("users/ada"); - * ``` - * - * @param path Optional path representing the location the returned - * `Reference` will point. If not provided, the returned `Reference` will - * point to the root of the Database. - * @return If a path is provided, a `Reference` - * pointing to the provided path. Otherwise, a `Reference` pointing to the - * root of the Database. - */ - ref(path?: string): firebase.database.Reference; - /** - * Returns a `Reference` representing the location in the Database - * corresponding to the provided Firebase URL. - * - * An exception is thrown if the URL is not a valid Firebase Database URL or it - * has a different domain than the current `Database` instance. - * - * Note that all query parameters (`orderBy`, `limitToLast`, etc.) are ignored - * and are not applied to the returned `Reference`. - * - * @example - * ```javascript - * // Get a reference to the root of the Database - * var rootRef = firebase.database().ref("https://<DATABASE_NAME>.firebaseio.com"); - * ``` - * - * @example - * ```javascript - * // Get a reference to the /users/ada node - * var adaRef = firebase.database().ref("https://<DATABASE_NAME>.firebaseio.com/users/ada"); - * ``` - * - * @param url The Firebase URL at which the returned `Reference` will - * point. - * @return A `Reference` pointing to the provided - * Firebase URL. - */ - refFromURL(url: string): firebase.database.Reference; - } - - /** - * The `onDisconnect` class allows you to write or clear data when your client - * disconnects from the Database server. These updates occur whether your - * client disconnects cleanly or not, so you can rely on them to clean up data - * even if a connection is dropped or a client crashes. - * - * The `onDisconnect` class is most commonly used to manage presence in - * applications where it is useful to detect how many clients are connected and - * when other clients disconnect. See - * {@link - * https://firebase.google.com/docs/database/web/offline-capabilities - * Enabling Offline Capabilities in JavaScript} for more information. - * - * To avoid problems when a connection is dropped before the requests can be - * transferred to the Database server, these functions should be called before - * writing any data. - * - * Note that `onDisconnect` operations are only triggered once. If you want an - * operation to occur each time a disconnect occurs, you'll need to re-establish - * the `onDisconnect` operations each time you reconnect. - */ - interface OnDisconnect { - /** - * Cancels all previously queued `onDisconnect()` set or update events for this - * location and all children. - * - * If a write has been queued for this location via a `set()` or `update()` at a - * parent location, the write at this location will be canceled, though writes - * to sibling locations will still occur. - * - * @example - * ```javascript - * var ref = firebase.database().ref("onlineState"); - * ref.onDisconnect().set(false); - * // ... sometime later - * ref.onDisconnect().cancel(); - * ``` - * - * @param onComplete An optional callback function that will - * be called when synchronization to the server has completed. The callback - * will be passed a single parameter: null for success, or an Error object - * indicating a failure. - * @return Resolves when synchronization to the server - * is complete. - */ - cancel(onComplete?: (a: Error | null) => any): Promise<any>; - /** - * Ensures the data at this location is deleted when the client is disconnected - * (due to closing the browser, navigating to a new page, or network issues). - * - * @param onComplete An optional callback function that will - * be called when synchronization to the server has completed. The callback - * will be passed a single parameter: null for success, or an Error object - * indicating a failure. - * @return Resolves when synchronization to the server - * is complete. - */ - remove(onComplete?: (a: Error | null) => any): Promise<any>; - /** - * Ensures the data at this location is set to the specified value when the - * client is disconnected (due to closing the browser, navigating to a new page, - * or network issues). - * - * `set()` is especially useful for implementing "presence" systems, where a - * value should be changed or cleared when a user disconnects so that they - * appear "offline" to other users. See - * {@link - * https://firebase.google.com/docs/database/web/offline-capabilities - * Enabling Offline Capabilities in JavaScript} for more information. - * - * Note that `onDisconnect` operations are only triggered once. If you want an - * operation to occur each time a disconnect occurs, you'll need to re-establish - * the `onDisconnect` operations each time. - * - * @example - * ```javascript - * var ref = firebase.database().ref("users/ada/status"); - * ref.onDisconnect().set("I disconnected!"); - * ``` - * - * @param value The value to be written to this location on - * disconnect (can be an object, array, string, number, boolean, or null). - * @param onComplete An optional callback function that - * will be called when synchronization to the Database server has completed. - * The callback will be passed a single parameter: null for success, or an - * `Error` object indicating a failure. - * @return Resolves when synchronization to the - * Database is complete. - */ - set(value: any, onComplete?: (a: Error | null) => any): Promise<any>; - /** - * Ensures the data at this location is set to the specified value and priority - * when the client is disconnected (due to closing the browser, navigating to a - * new page, or network issues). - */ - setWithPriority( - value: any, - priority: number | string | null, - onComplete?: (a: Error | null) => any - ): Promise<any>; - /** - * Writes multiple values at this location when the client is disconnected (due - * to closing the browser, navigating to a new page, or network issues). - * - * The `values` argument contains multiple property-value pairs that will be - * written to the Database together. Each child property can either be a simple - * property (for example, "name") or a relative path (for example, "name/first") - * from the current location to the data to update. - * - * As opposed to the `set()` method, `update()` can be use to selectively update - * only the referenced properties at the current location (instead of replacing - * all the child properties at the current location). - * - * See more examples using the connected version of - * {@link firebase.database.Reference.update `update()`}. - * - * @example - * ```javascript - * var ref = firebase.database().ref("users/ada"); - * ref.update({ - * onlineState: true, - * status: "I'm online." - * }); - * ref.onDisconnect().update({ - * onlineState: false, - * status: "I'm offline." - * }); - * ``` - * - * @param values Object containing multiple values. - * @param onComplete An optional callback function that will - * be called when synchronization to the server has completed. The - * callback will be passed a single parameter: null for success, or an Error - * object indicating a failure. - * @return Resolves when synchronization to the - * Database is complete. - */ - update(values: Object, onComplete?: (a: Error | null) => any): Promise<any>; - } - - type EventType = - | 'value' - | 'child_added' - | 'child_changed' - | 'child_moved' - | 'child_removed'; - - /** - * A `Query` sorts and filters the data at a Database location so only a subset - * of the child data is included. This can be used to order a collection of - * data by some attribute (for example, height of dinosaurs) as well as to - * restrict a large list of items (for example, chat messages) down to a number - * suitable for synchronizing to the client. Queries are created by chaining - * together one or more of the filter methods defined here. - * - * Just as with a `Reference`, you can receive data from a `Query` by using the - * `on()` method. You will only receive events and `DataSnapshot`s for the - * subset of the data that matches your query. - * - * Read our documentation on - * {@link - * https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data - * Sorting and filtering data} for more information. - */ - interface Query { - /** - * Creates a `Query` with the specified ending point. - * - * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()` - * allows you to choose arbitrary starting and ending points for your queries. - * - * The ending point is inclusive, so children with exactly the specified value - * will be included in the query. The optional key argument can be used to - * further limit the range of the query. If it is specified, then children that - * have exactly the specified value must also have a key name less than or equal - * to the specified key. - * - * You can read more about `endAt()` in - * {@link - * https://firebase.google.com/docs/database/web/lists-of-data#filtering_data - * Filtering data}. - * - * @example - * ```javascript - * // Find all dinosaurs whose names come before Pterodactyl lexicographically. - * // Include Pterodactyl in the result. - * var ref = firebase.database().ref("dinosaurs"); - * ref.orderByKey().endAt("pterodactyl").on("child_added", function(snapshot) { - * console.log(snapshot.key); - * }); - * ``` - * - * @param value The value to end at. The argument - * type depends on which `orderBy*()` function was used in this query. - * Specify a value that matches the `orderBy*()` type. When used in - * combination with `orderByKey()`, the value must be a string. - * @param key The child key to end at, among the children with the - * previously specified priority. This argument is only allowed if ordering by - * child, value, or priority. - */ - endAt( - value: number | string | boolean | null, - key?: string - ): firebase.database.Query; - /** - * Creates a `Query` with the specified ending point (exclusive). - * - * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()` - * allows you to choose arbitrary starting and ending points for your queries. - * - * The ending point is exclusive. If only a value is provided, children - * with a value less than the specified value will be included in the query. - * If a key is specified, then children must have a value less than or equal - * to the specified value and a a key name less than the specified key. - * - * @example - * ```javascript - * // Find all dinosaurs whose names come before Pterodactyl lexicographically. - * // Do not include Pterodactyl in the result. - * var ref = firebase.database().ref("dinosaurs"); - * ref.orderByKey().endBefore("pterodactyl").on("child_added", function(snapshot) { - * console.log(snapshot.key); - * }); - * - * @param value The value to end before. The argument - * type depends on which `orderBy*()` function was used in this query. - * Specify a value that matches the `orderBy*()` type. When used in - * combination with `orderByKey()`, the value must be a string. - * @param key The child key to end before, among the children with the - * previously specified priority. This argument is only allowed if ordering by - * child, value, or priority. - */ - endBefore( - value: number | string | boolean | null, - key?: string - ): firebase.database.Query; - /** - * Creates a `Query` that includes children that match the specified value. - * - * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()` - * allows you to choose arbitrary starting and ending points for your queries. - * - * The optional key argument can be used to further limit the range of the - * query. If it is specified, then children that have exactly the specified - * value must also have exactly the specified key as their key name. This can be - * used to filter result sets with many matches for the same value. - * - * You can read more about `equalTo()` in - * {@link - * https://firebase.google.com/docs/database/web/lists-of-data#filtering_data - * Filtering data}. - * - * @example - * ```javascript - * // Find all dinosaurs whose height is exactly 25 meters. - * var ref = firebase.database().ref("dinosaurs"); - * ref.orderByChild("height").equalTo(25).on("child_added", function(snapshot) { - * console.log(snapshot.key); - * }); - * ``` - * - * @param value The value to match for. The - * argument type depends on which `orderBy*()` function was used in this - * query. Specify a value that matches the `orderBy*()` type. When used in - * combination with `orderByKey()`, the value must be a string. - * @param key The child key to start at, among the children with the - * previously specified priority. This argument is only allowed if ordering by - * child, value, or priority. - */ - equalTo( - value: number | string | boolean | null, - key?: string - ): firebase.database.Query; - /** - * Returns whether or not the current and provided queries represent the same - * location, have the same query parameters, and are from the same instance of - * `firebase.app.App`. - * - * Two `Reference` objects are equivalent if they represent the same location - * and are from the same instance of `firebase.app.App`. - * - * Two `Query` objects are equivalent if they represent the same location, have - * the same query parameters, and are from the same instance of - * `firebase.app.App`. Equivalent queries share the same sort order, limits, and - * starting and ending points. - * - * @example - * ```javascript - * var rootRef = firebase.database.ref(); - * var usersRef = rootRef.child("users"); - * - * usersRef.isEqual(rootRef); // false - * usersRef.isEqual(rootRef.child("users")); // true - * usersRef.parent.isEqual(rootRef); // true - * ``` - * - * @example - * ```javascript - * var rootRef = firebase.database.ref(); - * var usersRef = rootRef.child("users"); - * var usersQuery = usersRef.limitToLast(10); - * - * usersQuery.isEqual(usersRef); // false - * usersQuery.isEqual(usersRef.limitToLast(10)); // true - * usersQuery.isEqual(rootRef.limitToLast(10)); // false - * usersQuery.isEqual(usersRef.orderByKey().limitToLast(10)); // false - * ``` - * - * @param other The query to compare against. - * @return Whether or not the current and provided queries are - * equivalent. - */ - isEqual(other: firebase.database.Query | null): boolean; - /** - * Generates a new `Query` limited to the first specific number of children. - * - * The `limitToFirst()` method is used to set a maximum number of children to be - * synced for a given callback. If we set a limit of 100, we will initially only - * receive up to 100 `child_added` events. If we have fewer than 100 messages - * stored in our Database, a `child_added` event will fire for each message. - * However, if we have over 100 messages, we will only receive a `child_added` - * event for the first 100 ordered messages. As items change, we will receive - * `child_removed` events for each item that drops out of the active list so - * that the total number stays at 100. - * - * You can read more about `limitToFirst()` in - * {@link - * https://firebase.google.com/docs/database/web/lists-of-data#filtering_data - * Filtering data}. - * - * @example - * ```javascript - * // Find the two shortest dinosaurs. - * var ref = firebase.database().ref("dinosaurs"); - * ref.orderByChild("height").limitToFirst(2).on("child_added", function(snapshot) { - * // This will be called exactly two times (unless there are less than two - * // dinosaurs in the Database). - * - * // It will also get fired again if one of the first two dinosaurs is - * // removed from the data set, as a new dinosaur will now be the second - * // shortest. - * console.log(snapshot.key); - * }); - * ``` - * - * @param limit The maximum number of nodes to include in this query. - */ - limitToFirst(limit: number): firebase.database.Query; - /** - * Generates a new `Query` object limited to the last specific number of - * children. - * - * The `limitToLast()` method is used to set a maximum number of children to be - * synced for a given callback. If we set a limit of 100, we will initially only - * receive up to 100 `child_added` events. If we have fewer than 100 messages - * stored in our Database, a `child_added` event will fire for each message. - * However, if we have over 100 messages, we will only receive a `child_added` - * event for the last 100 ordered messages. As items change, we will receive - * `child_removed` events for each item that drops out of the active list so - * that the total number stays at 100. - * - * You can read more about `limitToLast()` in - * {@link - * https://firebase.google.com/docs/database/web/lists-of-data#filtering_data - * Filtering data}. - * - * @example - * ```javascript - * // Find the two heaviest dinosaurs. - * var ref = firebase.database().ref("dinosaurs"); - * ref.orderByChild("weight").limitToLast(2).on("child_added", function(snapshot) { - * // This callback will be triggered exactly two times, unless there are - * // fewer than two dinosaurs stored in the Database. It will also get fired - * // for every new, heavier dinosaur that gets added to the data set. - * console.log(snapshot.key); - * }); - * ``` - * - * @param limit The maximum number of nodes to include in this query. - */ - limitToLast(limit: number): firebase.database.Query; - /** - * Detaches a callback previously attached with `on()`. - * - * Detach a callback previously attached with `on()`. Note that if `on()` was - * called multiple times with the same eventType and callback, the callback - * will be called multiple times for each event, and `off()` must be called - * multiple times to remove the callback. Calling `off()` on a parent listener - * will not automatically remove listeners registered on child nodes, `off()` - * must also be called on any child listeners to remove the callback. - * - * If a callback is not specified, all callbacks for the specified eventType - * will be removed. Similarly, if no eventType is specified, all callbacks - * for the `Reference` will be removed. - * - * @example - * ```javascript - * var onValueChange = function(dataSnapshot) { ... }; - * ref.on('value', onValueChange); - * ref.child('meta-data').on('child_added', onChildAdded); - * // Sometime later... - * ref.off('value', onValueChange); - * - * // You must also call off() for any child listeners on ref - * // to cancel those callbacks - * ref.child('meta-data').off('child_added', onValueAdded); - * ``` - * - * @example - * ```javascript - * // Or you can save a line of code by using an inline function - * // and on()'s return value. - * var onValueChange = ref.on('value', function(dataSnapshot) { ... }); - * // Sometime later... - * ref.off('value', onValueChange); - * ``` - * - * @param eventType One of the following strings: "value", - * "child_added", "child_changed", "child_removed", or "child_moved." If - * omitted, all callbacks for the `Reference` will be removed. - * @param callback The callback function that was passed to `on()` or - * `undefined` to remove all callbacks. - * @param context The context that was passed to `on()`. - */ - off( - eventType?: EventType, - callback?: (a: firebase.database.DataSnapshot, b?: string | null) => any, - context?: Object | null - ): void; - - /** - * Gets the most up-to-date result for this query. - * - * @return A promise which resolves to the resulting DataSnapshot if - * a value is available, or rejects if the client is unable to return - * a value (e.g., if the server is unreachable and there is nothing - * cached). - */ - get(): Promise<DataSnapshot>; - - /** - * Listens for data changes at a particular location. - * - * This is the primary way to read data from a Database. Your callback - * will be triggered for the initial data and again whenever the data changes. - * Use `off( )` to stop receiving updates. See - * {@link https://firebase.google.com/docs/database/web/retrieve-data - * Retrieve Data on the Web} - * for more details. - * - * <h4>value event</h4> - * - * This event will trigger once with the initial data stored at this location, - * and then trigger again each time the data changes. The `DataSnapshot` passed - * to the callback will be for the location at which `on()` was called. It - * won't trigger until the entire contents has been synchronized. If the - * location has no data, it will be triggered with an empty `DataSnapshot` - * (`val()` will return `null`). - * - * <h4>child_added event</h4> - * - * This event will be triggered once for each initial child at this location, - * and it will be triggered again every time a new child is added. The - * `DataSnapshot` passed into the callback will reflect the data for the - * relevant child. For ordering purposes, it is passed a second argument which - * is a string containing the key of the previous sibling child by sort order, - * or `null` if it is the first child. - * - * <h4>child_removed event</h4> - * - * This event will be triggered once every time a child is removed. The - * `DataSnapshot` passed into the callback will be the old data for the child - * that was removed. A child will get removed when either: - * - * - a client explicitly calls `remove()` on that child or one of its ancestors - * - a client calls `set(null)` on that child or one of its ancestors - * - that child has all of its children removed - * - there is a query in effect which now filters out the child (because it's - * sort order changed or the max limit was hit) - * - * <h4>child_changed event</h4> - * - * This event will be triggered when the data stored in a child (or any of its - * descendants) changes. Note that a single `child_changed` event may represent - * multiple changes to the child. The `DataSnapshot` passed to the callback will - * contain the new child contents. For ordering purposes, the callback is also - * passed a second argument which is a string containing the key of the previous - * sibling child by sort order, or `null` if it is the first child. - * - * <h4>child_moved event</h4> - * - * This event will be triggered when a child's sort order changes such that its - * position relative to its siblings changes. The `DataSnapshot` passed to the - * callback will be for the data of the child that has moved. It is also passed - * a second argument which is a string containing the key of the previous - * sibling child by sort order, or `null` if it is the first child. - * - * @example **Handle a new value:** - * ```javascript - * ref.on('value', function(dataSnapshot) { - * ... - * }); - * ``` - * - * @example **Handle a new child:** - * ```javascript - * ref.on('child_added', function(childSnapshot, prevChildKey) { - * ... - * }); - * ``` - * - * @example **Handle child removal:** - * ```javascript - * ref.on('child_removed', function(oldChildSnapshot) { - * ... - * }); - * ``` - * - * @example **Handle child data changes:** - * ```javascript - * ref.on('child_changed', function(childSnapshot, prevChildKey) { - * ... - * }); - * ``` - * - * @example **Handle child ordering changes:** - * ```javascript - * ref.on('child_moved', function(childSnapshot, prevChildKey) { - * ... - * }); - * ``` - * - * @param eventType One of the following strings: "value", - * "child_added", "child_changed", "child_removed", or "child_moved." - * @param callback A - * callback that fires when the specified event occurs. The callback will be - * passed a DataSnapshot. For ordering purposes, "child_added", - * "child_changed", and "child_moved" will also be passed a string containing - * the key of the previous child, by sort order, or `null` if it is the - * first child. - * @param cancelCallbackOrContext An optional - * callback that will be notified if your event subscription is ever canceled - * because your client does not have permission to read this data (or it had - * permission but has now lost it). This callback will be passed an `Error` - * object indicating why the failure occurred. - * @param context If provided, this object will be used as `this` - * when calling your callback(s). - * @return The provided - * callback function is returned unmodified. This is just for convenience if - * you want to pass an inline function to `on()` but store the callback - * function for later passing to `off()`. - */ - on( - eventType: EventType, - callback: (a: firebase.database.DataSnapshot, b?: string | null) => any, - cancelCallbackOrContext?: ((a: Error) => any) | Object | null, - context?: Object | null - ): (a: firebase.database.DataSnapshot | null, b?: string | null) => any; - - /** - * Listens for exactly one event of the specified event type, and then stops - * listening. - * - * This is equivalent to calling {@link firebase.database.Query.on `on()`}, and - * then calling {@link firebase.database.Query.off `off()`} inside the callback - * function. See {@link firebase.database.Query.on `on()`} for details on the - * event types. - * - * @example - * ```javascript - * // Basic usage of .once() to read the data located at ref. - * ref.once('value') - * .then(function(dataSnapshot) { - * // handle read data. - * }); - * ``` - * - * @param eventType One of the following strings: "value", - * "child_added", "child_changed", "child_removed", or "child_moved." - * @param successCallback A - * callback that fires when the specified event occurs. The callback will be - * passed a DataSnapshot. For ordering purposes, "child_added", - * "child_changed", and "child_moved" will also be passed a string containing - * the key of the previous child by sort order, or `null` if it is the - * first child. - * @param failureCallbackOrContext An optional - * callback that will be notified if your client does not have permission to - * read the data. This callback will be passed an `Error` object indicating - * why the failure occurred. - * @param context If provided, this object will be used as `this` - * when calling your callback(s). - */ - once( - eventType: EventType, - successCallback?: ( - a: firebase.database.DataSnapshot, - b?: string | null - ) => any, - failureCallbackOrContext?: ((a: Error) => void) | Object | null, - context?: Object | null - ): Promise<firebase.database.DataSnapshot>; - /** - * Generates a new `Query` object ordered by the specified child key. - * - * Queries can only order by one key at a time. Calling `orderByChild()` - * multiple times on the same query is an error. - * - * Firebase queries allow you to order your data by any child key on the fly. - * However, if you know in advance what your indexes will be, you can define - * them via the .indexOn rule in your Security Rules for better performance. See - * the {@link https://firebase.google.com/docs/database/security/indexing-data - * .indexOn} rule for more information. - * - * You can read more about `orderByChild()` in - * {@link - * https://firebase.google.com/docs/database/web/lists-of-data#sort_data - * Sort data}. - * - * @example - * ```javascript - * var ref = firebase.database().ref("dinosaurs"); - * ref.orderByChild("height").on("child_added", function(snapshot) { - * console.log(snapshot.key + " was " + snapshot.val().height + " m tall"); - * }); - * ``` - */ - orderByChild(path: string): firebase.database.Query; - /** - * Generates a new `Query` object ordered by key. - * - * Sorts the results of a query by their (ascending) key values. - * - * You can read more about `orderByKey()` in - * {@link - * https://firebase.google.com/docs/database/web/lists-of-data#sort_data - * Sort data}. - * - * @example - * ```javascript - * var ref = firebase.database().ref("dinosaurs"); - * ref.orderByKey().on("child_added", function(snapshot) { - * console.log(snapshot.key); - * }); - * ``` - */ - orderByKey(): firebase.database.Query; - /** - * Generates a new `Query` object ordered by priority. - * - * Applications need not use priority but can order collections by - * ordinary properties (see - * {@link - * https://firebase.google.com/docs/database/web/lists-of-data#sort_data - * Sort data} for alternatives to priority. - */ - orderByPriority(): firebase.database.Query; - /** - * Generates a new `Query` object ordered by value. - * - * If the children of a query are all scalar values (string, number, or - * boolean), you can order the results by their (ascending) values. - * - * You can read more about `orderByValue()` in - * {@link - * https://firebase.google.com/docs/database/web/lists-of-data#sort_data - * Sort data}. - * - * @example - * ```javascript - * var scoresRef = firebase.database().ref("scores"); - * scoresRef.orderByValue().limitToLast(3).on("value", function(snapshot) { - * snapshot.forEach(function(data) { - * console.log("The " + data.key + " score is " + data.val()); - * }); - * }); - * ``` - */ - orderByValue(): firebase.database.Query; - /** - * Returns a `Reference` to the `Query`'s location. - */ - ref: firebase.database.Reference; - /** - * Creates a `Query` with the specified starting point. - * - * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()` - * allows you to choose arbitrary starting and ending points for your queries. - * - * The starting point is inclusive, so children with exactly the specified value - * will be included in the query. The optional key argument can be used to - * further limit the range of the query. If it is specified, then children that - * have exactly the specified value must also have a key name greater than or - * equal to the specified key. - * - * You can read more about `startAt()` in - * {@link - * https://firebase.google.com/docs/database/web/lists-of-data#filtering_data - * Filtering data}. - * - * @example - * ```javascript - * // Find all dinosaurs that are at least three meters tall. - * var ref = firebase.database().ref("dinosaurs"); - * ref.orderByChild("height").startAt(3).on("child_added", function(snapshot) { - * console.log(snapshot.key) - * }); - * ``` - * - * @param value The value to start at. The argument - * type depends on which `orderBy*()` function was used in this query. - * Specify a value that matches the `orderBy*()` type. When used in - * combination with `orderByKey()`, the value must be a string. - * @param key The child key to start at. This argument is only allowed - * if ordering by child, value, or priority. - */ - startAt( - value: number | string | boolean | null, - key?: string - ): firebase.database.Query; - /** - * Creates a `Query` with the specified starting point (exclusive). - * - * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()` - * allows you to choose arbitrary starting and ending points for your queries. - * - * The starting point is exclusive. If only a value is provided, children - * with a value greater than the specified value will be included in the query. - * If a key is specified, then children must have a value greater than or equal - * to the specified value and a a key name greater than the specified key. - * - * @example - * ```javascript - * // Find all dinosaurs that are more than three meters tall. - * var ref = firebase.database().ref("dinosaurs"); - * ref.orderByChild("height").startAfter(3).on("child_added", function(snapshot) { - * console.log(snapshot.key) - * }); - * ``` - * - * @param value The value to start after. The argument - * type depends on which `orderBy*()` function was used in this query. - * Specify a value that matches the `orderBy*()` type. When used in - * combination with `orderByKey()`, the value must be a string. - * @param key The child key to start after. This argument is only allowed - * if ordering by child, value, or priority. - */ - startAfter( - value: number | string | boolean | null, - key?: string - ): firebase.database.Query; - /** - * Returns a JSON-serializable representation of this object. - * - * @return A JSON-serializable representation of this object. - */ - toJSON(): Object; - /** - * Gets the absolute URL for this location. - * - * The `toString()` method returns a URL that is ready to be put into a browser, - * curl command, or a `firebase.database().refFromURL()` call. Since all of - * those expect the URL to be url-encoded, `toString()` returns an encoded URL. - * - * Append '.json' to the returned URL when typed into a browser to download - * JSON-formatted data. If the location is secured (that is, not publicly - * readable), you will get a permission-denied error. - * - * @example - * ```javascript - * // Calling toString() on a root Firebase reference returns the URL where its - * // data is stored within the Database: - * var rootRef = firebase.database().ref(); - * var rootUrl = rootRef.toString(); - * // rootUrl === "https://sample-app.firebaseio.com/". - * - * // Calling toString() at a deeper Firebase reference returns the URL of that - * // deep path within the Database: - * var adaRef = rootRef.child('users/ada'); - * var adaURL = adaRef.toString(); - * // adaURL === "https://sample-app.firebaseio.com/users/ada". - * ``` - * - * @return The absolute URL for this location. - */ - toString(): string; - } - - /** - * A `Reference` represents a specific location in your Database and can be used - * for reading or writing data to that Database location. - * - * You can reference the root or child location in your Database by calling - * `firebase.database().ref()` or `firebase.database().ref("child/path")`. - * - * Writing is done with the `set()` method and reading can be done with the - * `on()` method. See - * {@link - * https://firebase.google.com/docs/database/web/read-and-write - * Read and Write Data on the Web} - */ - interface Reference extends firebase.database.Query { - /** - * Gets a `Reference` for the location at the specified relative path. - * - * The relative path can either be a simple child name (for example, "ada") or - * a deeper slash-separated path (for example, "ada/name/first"). - * - * @example - * ```javascript - * var usersRef = firebase.database().ref('users'); - * var adaRef = usersRef.child('ada'); - * var adaFirstNameRef = adaRef.child('name/first'); - * var path = adaFirstNameRef.toString(); - * // path is now 'https://sample-app.firebaseio.com/users/ada/name/first' - * ``` - * - * @param path A relative path from this location to the desired child - * location. - * @return The specified child location. - */ - child(path: string): firebase.database.Reference; - /** - * The last part of the `Reference`'s path. - * - * For example, `"ada"` is the key for - * `https://<DATABASE_NAME>.firebaseio.com/users/ada`. - * - * The key of a root `Reference` is `null`. - * - * @example - * ```javascript - * // The key of a root reference is null - * var rootRef = firebase.database().ref(); - * var key = rootRef.key; // key === null - * ``` - * - * @example - * ```javascript - * // The key of any non-root reference is the last token in the path - * var adaRef = firebase.database().ref("users/ada"); - * var key = adaRef.key; // key === "ada" - * key = adaRef.child("name/last").key; // key === "last" - * ``` - */ - key: string | null; - /** - * Returns an `OnDisconnect` object - see - * {@link - * https://firebase.google.com/docs/database/web/offline-capabilities - * Enabling Offline Capabilities in JavaScript} for more information on how - * to use it. - */ - onDisconnect(): firebase.database.OnDisconnect; - /** - * The parent location of a `Reference`. - * - * The parent of a root `Reference` is `null`. - * - * @example - * ```javascript - * // The parent of a root reference is null - * var rootRef = firebase.database().ref(); - * parent = rootRef.parent; // parent === null - * ``` - * - * @example - * ```javascript - * // The parent of any non-root reference is the parent location - * var usersRef = firebase.database().ref("users"); - * var adaRef = firebase.database().ref("users/ada"); - * // usersRef and adaRef.parent represent the same location - * ``` - */ - parent: firebase.database.Reference | null; - /** - * Generates a new child location using a unique key and returns its - * `Reference`. - * - * This is the most common pattern for adding data to a collection of items. - * - * If you provide a value to `push()`, the value is written to the - * generated location. If you don't pass a value, nothing is written to the - * database and the child remains empty (but you can use the `Reference` - * elsewhere). - * - * The unique keys generated by `push()` are ordered by the current time, so the - * resulting list of items is chronologically sorted. The keys are also - * designed to be unguessable (they contain 72 random bits of entropy). - * - * - * See - * {@link - * https://firebase.google.com/docs/database/web/lists-of-data#append_to_a_list_of_data - * Append to a list of data} - * </br>See - * {@link - * https://firebase.googleblog.com/2015/02/the-2120-ways-to-ensure-unique_68.html - * The 2^120 Ways to Ensure Unique Identifiers} - * - * @example - * ```javascript - * var messageListRef = firebase.database().ref('message_list'); - * var newMessageRef = messageListRef.push(); - * newMessageRef.set({ - * 'user_id': 'ada', - * 'text': 'The Analytical Engine weaves algebraical patterns just as the Jacquard loom weaves flowers and leaves.' - * }); - * // We've appended a new message to the message_list location. - * var path = newMessageRef.toString(); - * // path will be something like - * // 'https://sample-app.firebaseio.com/message_list/-IKo28nwJLH0Nc5XeFmj' - * ``` - * - * @param value Optional value to be written at the generated location. - * @param onComplete Callback called when write to server is - * complete. - * @return Combined `Promise` and `Reference`; resolves when write is complete, but can be - * used immediately as the `Reference` to the child location. - */ - push( - value?: any, - onComplete?: (a: Error | null) => any - ): firebase.database.ThenableReference; - /** - * Removes the data at this Database location. - * - * Any data at child locations will also be deleted. - * - * The effect of the remove will be visible immediately and the corresponding - * event 'value' will be triggered. Synchronization of the remove to the - * Firebase servers will also be started, and the returned Promise will resolve - * when complete. If provided, the onComplete callback will be called - * asynchronously after synchronization has finished. - * - * @example - * ```javascript - * var adaRef = firebase.database().ref('users/ada'); - * adaRef.remove() - * .then(function() { - * console.log("Remove succeeded.") - * }) - * .catch(function(error) { - * console.log("Remove failed: " + error.message) - * }); - * ``` - * - * @param onComplete Callback called when write to server is - * complete. - * @return Resolves when remove on server is complete. - */ - remove(onComplete?: (a: Error | null) => void): Promise<void>; - /** - * The root `Reference` of the Database. - * - * @example - * ```javascript - * // The root of a root reference is itself - * var rootRef = firebase.database().ref(); - * // rootRef and rootRef.root represent the same location - * ``` - * - * @example - * ```javascript - * // The root of any non-root reference is the root location - * var adaRef = firebase.database().ref("users/ada"); - * // rootRef and adaRef.root represent the same location - * ``` - */ - root: firebase.database.Reference; - /** - * Writes data to this Database location. - * - * This will overwrite any data at this location and all child locations. - * - * The effect of the write will be visible immediately, and the corresponding - * events ("value", "child_added", etc.) will be triggered. Synchronization of - * the data to the Firebase servers will also be started, and the returned - * Promise will resolve when complete. If provided, the `onComplete` callback - * will be called asynchronously after synchronization has finished. - * - * Passing `null` for the new value is equivalent to calling `remove()`; namely, - * all data at this location and all child locations will be deleted. - * - * `set()` will remove any priority stored at this location, so if priority is - * meant to be preserved, you need to use `setWithPriority()` instead. - * - * Note that modifying data with `set()` will cancel any pending transactions - * at that location, so extreme care should be taken if mixing `set()` and - * `transaction()` to modify the same data. - * - * A single `set()` will generate a single "value" event at the location where - * the `set()` was performed. - * - * @example - * ```javascript - * var adaNameRef = firebase.database().ref('users/ada/name'); - * adaNameRef.child('first').set('Ada'); - * adaNameRef.child('last').set('Lovelace'); - * // We've written 'Ada' to the Database location storing Ada's first name, - * // and 'Lovelace' to the location storing her last name. - * ``` - * - * @example - * ```javascript - * adaNameRef.set({ first: 'Ada', last: 'Lovelace' }); - * // Exact same effect as the previous example, except we've written - * // Ada's first and last name simultaneously. - * ``` - * - * @example - * ```javascript - * adaNameRef.set({ first: 'Ada', last: 'Lovelace' }) - * .then(function() { - * console.log('Synchronization succeeded'); - * }) - * .catch(function(error) { - * console.log('Synchronization failed'); - * }); - * // Same as the previous example, except we will also log a message - * // when the data has finished synchronizing. - * ``` - * - * @param value The value to be written (string, number, boolean, object, - * array, or null). - * @param onComplete Callback called when write to server is - * complete. - * @return Resolves when write to server is complete. - */ - set(value: any, onComplete?: (a: Error | null) => void): Promise<void>; - /** - * Sets a priority for the data at this Database location. - * - * Applications need not use priority but can order collections by - * ordinary properties (see - * {@link - * https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data - * Sorting and filtering data}). - */ - setPriority( - priority: string | number | null, - onComplete: (a: Error | null) => void - ): Promise<void>; - /** - * Writes data the Database location. Like `set()` but also specifies the - * priority for that data. - * - * Applications need not use priority but can order collections by - * ordinary properties (see - * {@link - * https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data - * Sorting and filtering data}). - */ - setWithPriority( - newVal: any, - newPriority: string | number | null, - onComplete?: (a: Error | null) => void - ): Promise<void>; - /** - * Atomically modifies the data at this location. - * - * Atomically modify the data at this location. Unlike a normal `set()`, which - * just overwrites the data regardless of its previous value, `transaction()` is - * used to modify the existing value to a new value, ensuring there are no - * conflicts with other clients writing to the same location at the same time. - * - * To accomplish this, you pass `transaction()` an update function which is used - * to transform the current value into a new value. If another client writes to - * the location before your new value is successfully written, your update - * function will be called again with the new current value, and the write will - * be retried. This will happen repeatedly until your write succeeds without - * conflict or you abort the transaction by not returning a value from your - * update function. - * - * Note: Modifying data with `set()` will cancel any pending transactions at - * that location, so extreme care should be taken if mixing `set()` and - * `transaction()` to update the same data. - * - * Note: When using transactions with Security and Firebase Rules in place, be - * aware that a client needs `.read` access in addition to `.write` access in - * order to perform a transaction. This is because the client-side nature of - * transactions requires the client to read the data in order to transactionally - * update it. - * - * @example - * ```javascript - * // Increment Ada's rank by 1. - * var adaRankRef = firebase.database().ref('users/ada/rank'); - * adaRankRef.transaction(function(currentRank) { - * // If users/ada/rank has never been set, currentRank will be `null`. - * return currentRank + 1; - * }); - * ``` - * - * @example - * ```javascript - * // Try to create a user for ada, but only if the user id 'ada' isn't - * // already taken - * var adaRef = firebase.database().ref('users/ada'); - * adaRef.transaction(function(currentData) { - * if (currentData === null) { - * return { name: { first: 'Ada', last: 'Lovelace' } }; - * } else { - * console.log('User ada already exists.'); - * return; // Abort the transaction. - * } - * }, function(error, committed, snapshot) { - * if (error) { - * console.log('Transaction failed abnormally!', error); - * } else if (!committed) { - * console.log('We aborted the transaction (because ada already exists).'); - * } else { - * console.log('User ada added!'); - * } - * console.log("Ada's data: ", snapshot.val()); - * }); - * ``` - * - * @param transactionUpdate A developer-supplied function which - * will be passed the current data stored at this location (as a JavaScript - * object). The function should return the new value it would like written (as - * a JavaScript object). If `undefined` is returned (i.e. you return with no - * arguments) the transaction will be aborted and the data at this location - * will not be modified. - * @param onComplete A callback - * function that will be called when the transaction completes. The callback - * is passed three arguments: a possibly-null `Error`, a `boolean` indicating - * whether the transaction was committed, and a `DataSnapshot` indicating the - * final result. If the transaction failed abnormally, the first argument will - * be an `Error` object indicating the failure cause. If the transaction - * finished normally, but no data was committed because no data was returned - * from `transactionUpdate`, then second argument will be false. If the - * transaction completed and committed data to Firebase, the second argument - * will be true. Regardless, the third argument will be a `DataSnapshot` - * containing the resulting data in this location. - * @param applyLocally By default, events are raised each time the - * transaction update function runs. So if it is run multiple times, you may - * see intermediate states. You can set this to false to suppress these - * intermediate states and instead wait until the transaction has completed - * before events are raised. - * @return Returns a Promise that can optionally be used instead of the onComplete - * callback to handle success and failure. - */ - transaction( - transactionUpdate: (a: any) => any, - onComplete?: ( - a: Error | null, - b: boolean, - c: firebase.database.DataSnapshot | null - ) => void, - applyLocally?: boolean - ): Promise<TransactionResult>; - /** - * Writes multiple values to the Database at once. - * - * The `values` argument contains multiple property-value pairs that will be - * written to the Database together. Each child property can either be a simple - * property (for example, "name") or a relative path (for example, - * "name/first") from the current location to the data to update. - * - * As opposed to the `set()` method, `update()` can be use to selectively update - * only the referenced properties at the current location (instead of replacing - * all the child properties at the current location). - * - * The effect of the write will be visible immediately, and the corresponding - * events ('value', 'child_added', etc.) will be triggered. Synchronization of - * the data to the Firebase servers will also be started, and the returned - * Promise will resolve when complete. If provided, the `onComplete` callback - * will be called asynchronously after synchronization has finished. - * - * A single `update()` will generate a single "value" event at the location - * where the `update()` was performed, regardless of how many children were - * modified. - * - * Note that modifying data with `update()` will cancel any pending - * transactions at that location, so extreme care should be taken if mixing - * `update()` and `transaction()` to modify the same data. - * - * Passing `null` to `update()` will remove the data at this location. - * - * See - * {@link - * https://firebase.googleblog.com/2015/09/introducing-multi-location-updates-and_86.html - * Introducing multi-location updates and more}. - * - * @example - * ```javascript - * var adaNameRef = firebase.database().ref('users/ada/name'); - * // Modify the 'first' and 'last' properties, but leave other data at - * // adaNameRef unchanged. - * adaNameRef.update({ first: 'Ada', last: 'Lovelace' }); - * ``` - * - * @param values Object containing multiple values. - * @param onComplete Callback called when write to server is - * complete. - * @return Resolves when update on server is complete. - */ - update( - values: Object, - onComplete?: (a: Error | null) => void - ): Promise<void>; - } - - interface TransactionResult { - /** - * Whether the transaction was successfully committed. - */ - committed: boolean; - /** - * The resulting data snapshot. - */ - snapshot: DataSnapshot; - } - - interface ThenableReference - extends firebase.database.Reference, - Pick<Promise<Reference>, 'then' | 'catch'> { - key: string; - parent: Reference; - } - - /** - * Logs debugging information to the console. - * - * @example - * ```javascript - * // Enable logging - * firebase.database.enableLogging(true); - * ``` - * - * @example - * ```javascript - * // Disable logging - * firebase.database.enableLogging(false); - * ``` - * - * @example - * ```javascript - * // Enable logging across page refreshes - * firebase.database.enableLogging(true, true); - * ``` - * - * @example - * ```javascript - * // Provide custom logger which prefixes log statements with "[FIREBASE]" - * firebase.database.enableLogging(function(message) { - * console.log("[FIREBASE]", message); - * }); - * ``` - * - * @param logger Enables logging if `true`; - * disables logging if `false`. You can also provide a custom logger function - * to control how things get logged. - * @param persistent Remembers the logging state between page - * refreshes if `true`. - */ - function enableLogging( - logger?: boolean | ((a: string) => any), - persistent?: boolean - ): any; - - export type EmulatorMockTokenOptions = firebase.EmulatorMockTokenOptions; -} - -declare namespace firebase.database.ServerValue { - /** - * A placeholder value for auto-populating the current timestamp (time - * since the Unix epoch, in milliseconds) as determined by the Firebase - * servers. - * - * @example - * ```javascript - * var sessionsRef = firebase.database().ref("sessions"); - * sessionsRef.push({ - * startedAt: firebase.database.ServerValue.TIMESTAMP - * }); - * ``` - */ - var TIMESTAMP: Object; - - /** - * Returns a placeholder value that can be used to atomically increment the - * current database value by the provided delta. - * - * @param delta the amount to modify the current value atomically. - * @return a placeholder value for modifying data atomically server-side. - */ - function increment(delta: number): Object; -} - -/** - * The Messaging SDK does not work in a Node.js environment. - */ -declare namespace firebase.messaging { - /** - * The Firebase Messaging service interface. - * - * Do not call this constructor directly. Instead, use - * {@link firebase.messaging `firebase.messaging()`}. - * - * See {@link https://firebase.google.com/docs/cloud-messaging/js/client - * Set Up a JavaScript Firebase Cloud Messaging Client App} for a full guide on how to use the - * Firebase Messaging service. - * - */ - interface Messaging { - /** - * Deletes the registration token associated with this messaging instance and unsubscribes the - * messaging instance from the push subscription. - * - * @return The promise resolves when the token has been successfully deleted. - */ - deleteToken(): Promise<boolean>; - - /** - * Subscribes the messaging instance to push notifications. Returns an FCM registration token - * that can be used to send push messages to that messaging instance. - * - * If a notification permission isn't already granted, this method asks the user for permission. - * The returned promise rejects if the user does not allow the app to show notifications. - * - * @param options.vapidKey The public server key provided to push services. It is used to - * authenticate the push subscribers to receive push messages only from sending servers that - * hold the corresponding private key. If it is not provided, a default VAPID key is used. Note - * that some push services (Chrome Push Service) require a non-default VAPID key. Therefore, it - * is recommended to generate and import a VAPID key for your project with - * {@link https://firebase.google.com/docs/cloud-messaging/js/client#configure_web_credentials_with_fcm Configure Web Credentials with FCM}. - * See - * {@link https://developers.google.com/web/fundamentals/push-notifications/web-push-protocol The Web Push Protocol} - * for details on web push services.} - * - * @param options.serviceWorkerRegistration The service worker registration for receiving push - * messaging. If the registration is not provided explicitly, you need to have a - * `firebase-messaging-sw.js` at your root location. See - * {@link https://firebase.google.com/docs/cloud-messaging/js/client#access_the_registration_token | Access the registration token} - * for more details. - * - * @return The promise resolves with an FCM registration token. - * - */ - getToken(options?: { - vapidKey?: string; - serviceWorkerRegistration?: ServiceWorkerRegistration; - }): Promise<string>; - - /** - * When a push message is received and the user is currently on a page for your origin, the - * message is passed to the page and an `onMessage()` event is dispatched with the payload of - * the push message. - * - * @param - * nextOrObserver This function, or observer object with `next` defined, - * is called when a message is received and the user is currently viewing your page. - * @return To stop listening for messages execute this returned function. - */ - onMessage( - nextOrObserver: firebase.NextFn<any> | firebase.Observer<any> - ): firebase.Unsubscribe; - - /** - * Called when a message is received while the app is in the background. An app is considered to - * be in the background if no active window is displayed. - * - * @param - * nextOrObserver This function, or observer object with `next` defined, - * is called when a message is received and the app is currently in the background. - * - * @return To stop listening for messages execute this returned function - */ - onBackgroundMessage( - nextOrObserver: - | firebase.NextFn<MessagePayload> - | firebase.Observer<MessagePayload> - ): firebase.Unsubscribe; - } - - /** - * Message payload that contains the notification payload that is represented with - * {@link firebase.messaging.NotificationPayload} and the data payload that contains an arbitrary - * number of key-value pairs sent by developers through the - * {@link https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#notification Send API} - */ - export interface MessagePayload { - /** - * See {@link firebase.messaging.NotificationPayload}. - */ - notification?: NotificationPayload; - - /** - * Arbitrary key/value pairs. - */ - data?: { [key: string]: string }; - - /** - * See {@link firebase.messaging.FcmOptions}. - */ - fcmOptions?: FcmOptions; - - /** - * The sender of this message. - */ - from: string; - - /** - * The collapse key of this message. See - * {@link https://firebase.google.com/docs/cloud-messaging/concept-options#collapsible_and_non-collapsible_messages - * Collapsible and non-collapsible messages}. - */ - collapseKey: string; - } - - /** - * Options for features provided by the FCM SDK for Web. See - * {@link https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#webpushfcmoptions - * WebpushFcmOptions}. - */ - export interface FcmOptions { - /** - * The link to open when the user clicks on the notification. For all URL values, HTTPS is - * required. For example, by setting this value to your app's URL, a notification click event - * will put your app in focus for the user. - */ - link?: string; - - /** - * Label associated with the message's analytics data. See - * {@link https://firebase.google.com/docs/cloud-messaging/understand-delivery#adding-analytics-labels-to-messages - * Adding analytics labels}. - */ - analyticsLabel?: string; - } - - /** - * Parameters that define how a push notification is displayed to users. - */ - export interface NotificationPayload { - /** - * The title of a notification. - */ - title?: string; - - /** - * The body of a notification. - */ - body?: string; - - /** - * The URL of the image that is shown with the notification. See - * {@link https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#notification - * `notification.image`} for supported image format. - */ - image?: string; - } - - function isSupported(): boolean; -} - -declare namespace firebase.storage { - /** - * The full set of object metadata, including read-only properties. - */ - interface FullMetadata extends firebase.storage.UploadMetadata { - /** - * The bucket this object is contained in. - */ - bucket: string; - /** - * The full path of this object. - */ - fullPath: string; - /** - * The object's generation. - * @see {@link https://cloud.google.com/storage/docs/generations-preconditions} - */ - generation: string; - /** - * The object's metageneration. - * @see {@link https://cloud.google.com/storage/docs/generations-preconditions} - */ - metageneration: string; - /** - * The short name of this object, which is the last component of the full path. - * For example, if fullPath is 'full/path/image.png', name is 'image.png'. - */ - name: string; - /** - * The size of this object, in bytes. - */ - size: number; - /** - * A date string representing when this object was created. - */ - timeCreated: string; - /** - * A date string representing when this object was last updated. - */ - updated: string; - } - - /** - * Represents a reference to a Google Cloud Storage object. Developers can - * upload, download, and delete objects, as well as get/set object metadata. - */ - interface Reference { - /** - * The name of the bucket containing this reference's object. - */ - bucket: string; - /** - * Returns a reference to a relative path from this reference. - * @param path The relative path from this reference. - * Leading, trailing, and consecutive slashes are removed. - * @return The reference to the given path. - */ - child(path: string): firebase.storage.Reference; - /** - * Deletes the object at this reference's location. - * @return A Promise that resolves if the deletion - * succeeded and rejects if it failed, including if the object didn't exist. - */ - delete(): Promise<void>; - /** - * The full path of this object. - */ - fullPath: string; - /** - * Fetches a long lived download URL for this object. - * @return A Promise that resolves with the download - * URL or rejects if the fetch failed, including if the object did not - * exist. - */ - getDownloadURL(): Promise<string>; - /** - * Fetches metadata for the object at this location, if one exists. - * @return A Promise that - * resolves with the metadata, or rejects if the fetch failed, including if - * the object did not exist. - */ - getMetadata(): Promise<FullMetadata>; - /** - * The short name of this object, which is the last component of the full path. - * For example, if fullPath is 'full/path/image.png', name is 'image.png'. - */ - name: string; - /** - * A reference pointing to the parent location of this reference, or null if - * this reference is the root. - */ - parent: firebase.storage.Reference | null; - /** - * Uploads data to this reference's location. - * @param data The data to upload. - * @param metadata Metadata for the newly - * uploaded object. - * @return An object that can be used to monitor - * and manage the upload. - */ - put( - data: Blob | Uint8Array | ArrayBuffer, - metadata?: firebase.storage.UploadMetadata - ): firebase.storage.UploadTask; - /** - * Uploads string data to this reference's location. - * @param data The string to upload. - * @param format The format of the string to - * upload. - * @param metadata Metadata for the newly - * uploaded object. - * @throws If the format is not an allowed format, or if the given string - * doesn't conform to the specified format. - */ - putString( - data: string, - format?: firebase.storage.StringFormat, - metadata?: firebase.storage.UploadMetadata - ): firebase.storage.UploadTask; - /** - * A reference to the root of this reference's bucket. - */ - root: firebase.storage.Reference; - /** - * The storage service associated with this reference. - */ - storage: firebase.storage.Storage; - /** - * Returns a gs:// URL for this object in the form - * `gs://<bucket>/<path>/<to>/<object>` - * @return The gs:// URL. - */ - toString(): string; - /** - * Updates the metadata for the object at this location, if one exists. - * @param metadata The new metadata. - * Setting a property to 'null' removes it on the server, while leaving - * a property as 'undefined' has no effect. - * @return A Promise that - * resolves with the full updated metadata or rejects if the updated failed, - * including if the object did not exist. - */ - updateMetadata( - metadata: firebase.storage.SettableMetadata - ): Promise<FullMetadata>; - /** - * List all items (files) and prefixes (folders) under this storage reference. - * - * This is a helper method for calling `list()` repeatedly until there are - * no more results. The default pagination size is 1000. - * - * Note: The results may not be consistent if objects are changed while this - * operation is running. - * - * Warning: `listAll` may potentially consume too many resources if there are - * too many results. - * - * @return A Promise that resolves with all the items and prefixes under - * the current storage reference. `prefixes` contains references to - * sub-directories and `items` contains references to objects in this - * folder. `nextPageToken` is never returned. - */ - listAll(): Promise<ListResult>; - /** - * List items (files) and prefixes (folders) under this storage reference. - * - * List API is only available for Firebase Rules Version 2. - * - * GCS is a key-blob store. Firebase Storage imposes the semantic of '/' - * delimited folder structure. - * Refer to GCS's List API if you want to learn more. - * - * To adhere to Firebase Rules's Semantics, Firebase Storage does not - * support objects whose paths end with "/" or contain two consecutive - * "/"s. Firebase Storage List API will filter these unsupported objects. - * `list()` may fail if there are too many unsupported objects in the bucket. - * - * @param options See `ListOptions` for details. - * @return A Promise that resolves with the items and prefixes. - * `prefixes` contains references to sub-folders and `items` - * contains references to objects in this folder. `nextPageToken` - * can be used to get the rest of the results. - */ - list(options?: ListOptions): Promise<ListResult>; - } - - /** - * Result returned by list(). - */ - interface ListResult { - /** - * References to prefixes (sub-folders). You can call list() on them to - * get its contents. - * - * Folders are implicit based on '/' in the object paths. - * For example, if a bucket has two objects '/a/b/1' and '/a/b/2', list('/a') - * will return '/a/b' as a prefix. - */ - prefixes: Reference[]; - /** - * Objects in this directory. - * You can call getMetadata() and getDownloadUrl() on them. - */ - items: Reference[]; - /** - * If set, there might be more results for this list. Use this token to resume the list. - */ - nextPageToken: string | null; - } - - /** - * The options `list()` accepts. - */ - interface ListOptions { - /** - * If set, limits the total number of `prefixes` and `items` to return. - * The default and maximum maxResults is 1000. - */ - maxResults?: number | null; - /** - * The `nextPageToken` from a previous call to `list()`. If provided, - * listing is resumed from the previous position. - */ - pageToken?: string | null; - } - - /** - * Object metadata that can be set at any time. - */ - interface SettableMetadata { - /** - * Served as the 'Cache-Control' header on object download. - */ - cacheControl?: string | null; - contentDisposition?: string | null; - /** - * Served as the 'Content-Encoding' header on object download. - */ - contentEncoding?: string | null; - /** - * Served as the 'Content-Language' header on object download. - */ - contentLanguage?: string | null; - /** - * Served as the 'Content-Type' header on object download. - */ - contentType?: string | null; - /** - * Additional user-defined custom metadata. - */ - customMetadata?: { - [/* warning: coerced from ? */ key: string]: string; - } | null; - } - - /** - * The Firebase Storage service interface. - * - * Do not call this constructor directly. Instead, use - * {@link firebase.storage `firebase.storage()`}. - * - * See - * {@link - * https://firebase.google.com/docs/storage/web/start/ - * Get Started on Web} - * for a full guide on how to use the Firebase Storage service. - */ - interface Storage { - /** - * The {@link firebase.app.App app} associated with the `Storage` service - * instance. - * - * @example - * ```javascript - * var app = storage.app; - * ``` - */ - app: firebase.app.App; - /** - * The maximum time to retry operations other than uploads or downloads in - * milliseconds. - */ - maxOperationRetryTime: number; - /** - * The maximum time to retry uploads in milliseconds. - */ - maxUploadRetryTime: number; - /** - * Returns a reference for the given path in the default bucket. - * @param path A relative path to initialize the reference with, - * for example `path/to/image.jpg`. If not passed, the returned reference - * points to the bucket root. - * @return A reference for the given path. - */ - ref(path?: string): firebase.storage.Reference; - /** - * Returns a reference for the given absolute URL. - * @param url A URL in the form: <br /> - * 1) a gs:// URL, for example `gs://bucket/files/image.png` <br /> - * 2) a download URL taken from object metadata. <br /> - * @return A reference for the given URL. - */ - refFromURL(url: string): firebase.storage.Reference; - /** - * @param time The new maximum operation retry time in milliseconds. - * @see {@link firebase.storage.Storage.maxOperationRetryTime} - */ - setMaxOperationRetryTime(time: number): any; - /** - * @param time The new maximum upload retry time in milliseconds. - * @see {@link firebase.storage.Storage.maxUploadRetryTime} - */ - setMaxUploadRetryTime(time: number): any; - /** - * Modify this `Storage` instance to communicate with the Cloud Storage emulator. - * - * @param host - The emulator host (ex: localhost) - * @param port - The emulator port (ex: 5001) - * @param options.mockUserToken the mock auth token to use for unit testing Security Rules - */ - useEmulator( - host: string, - port: number, - options?: { - mockUserToken?: EmulatorMockTokenOptions | string; - } - ): void; - } - - /** - * @enum {string} - * An enumeration of the possible string formats for upload. - */ - type StringFormat = string; - var StringFormat: { - /** - * Indicates the string should be interpreted as base64-encoded data. - * Padding characters (trailing '='s) are optional. - * Example: The string 'rWmO++E6t7/rlw==' becomes the byte sequence - * ad 69 8e fb e1 3a b7 bf eb 97 - */ - BASE64: StringFormat; - /** - * Indicates the string should be interpreted as base64url-encoded data. - * Padding characters (trailing '='s) are optional. - * Example: The string 'rWmO--E6t7_rlw==' becomes the byte sequence - * ad 69 8e fb e1 3a b7 bf eb 97 - */ - BASE64URL: StringFormat; - /** - * Indicates the string is a data URL, such as one obtained from - * canvas.toDataURL(). - * Example: the string 'data:application/octet-stream;base64,aaaa' - * becomes the byte sequence - * 69 a6 9a - * (the content-type "application/octet-stream" is also applied, but can - * be overridden in the metadata object). - */ - DATA_URL: StringFormat; - /** - * Indicates the string should be interpreted "raw", that is, as normal text. - * The string will be interpreted as UTF-16, then uploaded as a UTF-8 byte - * sequence. - * Example: The string 'Hello! \ud83d\ude0a' becomes the byte sequence - * 48 65 6c 6c 6f 21 20 f0 9f 98 8a - */ - RAW: StringFormat; - }; - - /** - * An event that is triggered on a task. - * @enum {string} - * @see {@link firebase.storage.UploadTask.on} - */ - type TaskEvent = string; - var TaskEvent: { - /** - * For this event, - * <ul> - * <li>The `next` function is triggered on progress updates and when the - * task is paused/resumed with a - * {@link firebase.storage.UploadTaskSnapshot} as the first - * argument.</li> - * <li>The `error` function is triggered if the upload is canceled or fails - * for another reason.</li> - * <li>The `complete` function is triggered if the upload completes - * successfully.</li> - * </ul> - */ - STATE_CHANGED: TaskEvent; - }; - - /** - * Represents the current state of a running upload. - * @enum {string} - */ - type TaskState = string; - var TaskState: { - CANCELED: TaskState; - ERROR: TaskState; - PAUSED: TaskState; - RUNNING: TaskState; - SUCCESS: TaskState; - }; - - /** - * Object metadata that can be set at upload. - */ - interface UploadMetadata extends firebase.storage.SettableMetadata { - /** - * A Base64-encoded MD5 hash of the object being uploaded. - */ - md5Hash?: string | null; - } - - /** - * Error codes that can be attached to `StorageError` objects. - */ - export enum StorageErrorCode { - UNKNOWN = 'unknown', - OBJECT_NOT_FOUND = 'object-not-found', - BUCKET_NOT_FOUND = 'bucket-not-found', - PROJECT_NOT_FOUND = 'project-not-found', - QUOTA_EXCEEDED = 'quota-exceeded', - UNAUTHENTICATED = 'unauthenticated', - UNAUTHORIZED = 'unauthorized', - UNAUTHORIZED_APP = 'unauthorized-app', - RETRY_LIMIT_EXCEEDED = 'retry-limit-exceeded', - INVALID_CHECKSUM = 'invalid-checksum', - CANCELED = 'canceled', - INVALID_EVENT_NAME = 'invalid-event-name', - INVALID_URL = 'invalid-url', - INVALID_DEFAULT_BUCKET = 'invalid-default-bucket', - NO_DEFAULT_BUCKET = 'no-default-bucket', - CANNOT_SLICE_BLOB = 'cannot-slice-blob', - SERVER_FILE_WRONG_SIZE = 'server-file-wrong-size', - NO_DOWNLOAD_URL = 'no-download-url', - INVALID_ARGUMENT = 'invalid-argument', - INVALID_ARGUMENT_COUNT = 'invalid-argument-count', - APP_DELETED = 'app-deleted', - INVALID_ROOT_OPERATION = 'invalid-root-operation', - INVALID_FORMAT = 'invalid-format', - INTERNAL_ERROR = 'internal-error', - UNSUPPORTED_ENVIRONMENT = 'unsupported-environment' - } - - interface StorageObserver<T> { - next?: NextFn<T> | null; - error?: (error: FirebaseStorageError) => void | null; - complete?: CompleteFn | null; - } - - /** - * Represents the process of uploading an object. Allows you to monitor and - * manage the upload. - */ - interface UploadTask { - /** - * Cancels a running task. Has no effect on a complete or failed task. - * @return True if the cancel had an effect. - */ - cancel(): boolean; - /** - * Equivalent to calling `then(null, onRejected)`. - */ - catch(onRejected: (error: FirebaseStorageError) => any): Promise<any>; - /** - * Listens for events on this task. - * - * Events have three callback functions (referred to as `next`, `error`, and - * `complete`). - * - * If only the event is passed, a function that can be used to register the - * callbacks is returned. Otherwise, the callbacks are passed after the event. - * - * Callbacks can be passed either as three separate arguments <em>or</em> as the - * `next`, `error`, and `complete` properties of an object. Any of the three - * callbacks is optional, as long as at least one is specified. In addition, - * when you add your callbacks, you get a function back. You can call this - * function to unregister the associated callbacks. - * - * @example **Pass callbacks separately or in an object.** - * ```javascript - * var next = function(snapshot) {}; - * var error = function(error) {}; - * var complete = function() {}; - * - * // The first example. - * uploadTask.on( - * firebase.storage.TaskEvent.STATE_CHANGED, - * next, - * error, - * complete); - * - * // This is equivalent to the first example. - * uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED, { - * 'next': next, - * 'error': error, - * 'complete': complete - * }); - * - * // This is equivalent to the first example. - * var subscribe = uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED); - * subscribe(next, error, complete); - * - * // This is equivalent to the first example. - * var subscribe = uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED); - * subscribe({ - * 'next': next, - * 'error': error, - * 'complete': complete - * }); - * ``` - * - * @example **Any callback is optional.** - * ```javascript - * // Just listening for completion, this is legal. - * uploadTask.on( - * firebase.storage.TaskEvent.STATE_CHANGED, - * null, - * null, - * function() { - * console.log('upload complete!'); - * }); - * - * // Just listening for progress/state changes, this is legal. - * uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED, function(snapshot) { - * var percent = snapshot.bytesTransferred / snapshot.totalBytes * 100; - * console.log(percent + "% done"); - * }); - * - * // This is also legal. - * uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED, { - * 'complete': function() { - * console.log('upload complete!'); - * } - * }); - * ``` - * - * @example **Use the returned function to remove callbacks.** - * ```javascript - * var unsubscribe = uploadTask.on( - * firebase.storage.TaskEvent.STATE_CHANGED, - * function(snapshot) { - * var percent = snapshot.bytesTransferred / snapshot.totalBytes * 100; - * console.log(percent + "% done"); - * // Stop after receiving one update. - * unsubscribe(); - * }); - * - * // This code is equivalent to the above. - * var handle = uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED); - * unsubscribe = handle(function(snapshot) { - * var percent = snapshot.bytesTransferred / snapshot.totalBytes * 100; - * console.log(percent + "% done"); - * // Stop after receiving one update. - * unsubscribe(); - * }); - * ``` - * - * @param event The event to listen for. - * @param nextOrObserver - * The `next` function, which gets called for each item in - * the event stream, or an observer object with some or all of these three - * properties (`next`, `error`, `complete`). - * @param error A function that gets called with a `FirebaseStorageError` - * if the event stream ends due to an error. - * @param complete A function that gets called if the - * event stream ends normally. - * @return - * If only the event argument is passed, returns a function you can use to - * add callbacks (see the examples above). If more than just the event - * argument is passed, returns a function you can call to unregister the - * callbacks. - */ - on( - event: firebase.storage.TaskEvent, - nextOrObserver?: - | StorageObserver<UploadTaskSnapshot> - | null - | ((snapshot: UploadTaskSnapshot) => any), - error?: ((error: FirebaseStorageError) => any) | null, - complete?: firebase.Unsubscribe | null - ): Function; - /** - * Pauses a running task. Has no effect on a paused or failed task. - * @return True if the pause had an effect. - */ - pause(): boolean; - /** - * Resumes a paused task. Has no effect on a running or failed task. - * @return True if the resume had an effect. - */ - resume(): boolean; - /** - * A snapshot of the current task state. - */ - snapshot: firebase.storage.UploadTaskSnapshot; - /** - * This object behaves like a Promise, and resolves with its snapshot data when - * the upload completes. - * @param onFulfilled - * The fulfillment callback. Promise chaining works as normal. - * @param onRejected The rejection callback. - */ - then( - onFulfilled?: - | ((snapshot: firebase.storage.UploadTaskSnapshot) => any) - | null, - onRejected?: ((error: FirebaseStorageError) => any) | null - ): Promise<any>; - } - - /** - * Holds data about the current state of the upload task. - */ - interface UploadTaskSnapshot { - /** - * The number of bytes that have been successfully uploaded so far. - */ - bytesTransferred: number; - /** - * Before the upload completes, contains the metadata sent to the server. - * After the upload completes, contains the metadata sent back from the server. - */ - metadata: firebase.storage.FullMetadata; - /** - * The reference that spawned this snapshot's upload task. - */ - ref: firebase.storage.Reference; - /** - * The current state of the task. - */ - state: firebase.storage.TaskState; - /** - * The task of which this is a snapshot. - */ - task: firebase.storage.UploadTask; - /** - * The total number of bytes to be uploaded. - */ - totalBytes: number; - } - - /** - * An error returned by the Firebase Storage SDK. - */ - export interface FirebaseStorageError extends FirebaseError { - /** - * Stores custom error data unique to the `StorageError`. - */ - customData: { - serverResponse: string | null; - }; - - get status(): number; - set status(status: number); - /** - * Compares a `StorageErrorCode` against this error's code, filtering out the prefix. - */ - _codeEquals(code: StorageErrorCode): boolean; - /** - * Optional response message that was added by the server. - */ - get serverResponse(): null | string; - set serverResponse(serverResponse: string | null); - } -} - -declare namespace firebase.firestore { - /** - * Document data (for use with `DocumentReference.set()`) consists of fields - * mapped to values. - */ - export type DocumentData = { [field: string]: any }; - - /** - * Update data (for use with `DocumentReference.update()`) consists of field - * paths (e.g. 'foo' or 'foo.baz') mapped to values. Fields that contain dots - * reference nested fields within the document. - */ - export type UpdateData = { [fieldPath: string]: any }; - - /** - * Constant used to indicate the LRU garbage collection should be disabled. - * Set this value as the `cacheSizeBytes` on the settings passed to the - * `Firestore` instance. - */ - export const CACHE_SIZE_UNLIMITED: number; - - /** - * Specifies custom configurations for your Cloud Firestore instance. - * You must set these before invoking any other methods. - */ - export interface Settings { - /** The hostname to connect to. */ - host?: string; - /** Whether to use SSL when connecting. */ - ssl?: boolean; - - /** - * An approximate cache size threshold for the on-disk data. If the cache grows beyond this - * size, Firestore will start removing data that hasn't been recently used. The size is not a - * guarantee that the cache will stay below that size, only that if the cache exceeds the given - * size, cleanup will be attempted. - * - * The default value is 40 MB. The threshold must be set to at least 1 MB, and can be set to - * CACHE_SIZE_UNLIMITED to disable garbage collection. - */ - cacheSizeBytes?: number; - - /** - * Forces the SDK’s underlying network transport (WebChannel) to use - * long-polling. Each response from the backend will be closed immediately - * after the backend sends data (by default responses are kept open in - * case the backend has more data to send). This avoids incompatibility - * issues with certain proxies, antivirus software, etc. that incorrectly - * buffer traffic indefinitely. Use of this option will cause some - * performance degradation though. - * - * This setting cannot be used with `experimentalAutoDetectLongPolling` and - * may be removed in a future release. If you find yourself using it to - * work around a specific network reliability issue, please tell us about - * it in https://github.com/firebase/firebase-js-sdk/issues/1674. - * - * This setting does not work in a Node.js environment. - */ - experimentalForceLongPolling?: boolean; - - /** - * Configures the SDK's underlying transport (WebChannel) to automatically detect if - * long-polling should be used. This is very similar to `experimentalForceLongPolling`, - * but only uses long-polling if required. - * - * This setting will likely be enabled by default in future releases and cannot be - * combined with `experimentalForceLongPolling`. - * - * This setting does not work in a Node.js environment. - */ - experimentalAutoDetectLongPolling?: boolean; - - /** - * Whether to skip nested properties that are set to `undefined` during - * object serialization. If set to `true`, these properties are skipped - * and not written to Firestore. If set to `false` or omitted, the SDK - * throws an exception when it encounters properties of type `undefined`. - */ - ignoreUndefinedProperties?: boolean; - - /** - * Whether to merge the provided settings with the existing settings. If - * set to `true`, the settings are merged with existing settings. If - * set to `false` or left unset, the settings replace the existing - * settings. - */ - merge?: boolean; - } - - /** - * Settings that can be passed to Firestore.enablePersistence() to configure - * Firestore persistence. - */ - export interface PersistenceSettings { - /** - * Whether to synchronize the in-memory state of multiple tabs. Setting this - * to `true` in all open tabs enables shared access to local persistence, - * shared execution of queries and latency-compensated local document updates - * across all connected instances. - * - * To enable this mode, `synchronizeTabs:true` needs to be set globally in all - * active tabs. If omitted or set to 'false', `enablePersistence()` will fail - * in all but the first tab. - */ - synchronizeTabs?: boolean; - - /** - * Whether to force enable persistence for the client. This cannot be used - * with `synchronizeTabs:true` and is primarily intended for use with Web - * Workers. Setting this to `true` will enable persistence, but cause other - * tabs using persistence to fail. - * - * This setting may be removed in a future release. If you find yourself - * using it for a specific use case or run into any issues, please tell us - * about it in - * https://github.com/firebase/firebase-js-sdk/issues/983. - */ - experimentalForceOwningTab?: boolean; - } - - export type LogLevel = 'debug' | 'error' | 'silent'; - - /** - * Sets the verbosity of Cloud Firestore logs (debug, error, or silent). - * - * @param logLevel - * The verbosity you set for activity and error logging. Can be any of - * the following values: - * - * <ul> - * <li><code>debug</code> for the most verbose logging level, primarily for - * debugging.</li> - * <li><code>error</code> to log errors only.</li> - * <li><code>silent</code> to turn off logging.</li> - * </ul> - */ - export function setLogLevel(logLevel: LogLevel): void; - - /** - * Converter used by `withConverter()` to transform user objects of type T - * into Firestore data. - * - * Using the converter allows you to specify generic type arguments when - * storing and retrieving objects from Firestore. - * - * @example - * ```typescript - * class Post { - * constructor(readonly title: string, readonly author: string) {} - * - * toString(): string { - * return this.title + ', by ' + this.author; - * } - * } - * - * const postConverter = { - * toFirestore(post: Post): firebase.firestore.DocumentData { - * return {title: post.title, author: post.author}; - * }, - * fromFirestore( - * snapshot: firebase.firestore.QueryDocumentSnapshot, - * options: firebase.firestore.SnapshotOptions - * ): Post { - * const data = snapshot.data(options)!; - * return new Post(data.title, data.author); - * } - * }; - * - * const postSnap = await firebase.firestore() - * .collection('posts') - * .withConverter(postConverter) - * .doc().get(); - * const post = postSnap.data(); - * if (post !== undefined) { - * post.title; // string - * post.toString(); // Should be defined - * post.someNonExistentProperty; // TS error - * } - * ``` - */ - export interface FirestoreDataConverter<T> { - /** - * Called by the Firestore SDK to convert a custom model object of type T - * into a plain JavaScript object (suitable for writing directly to the - * Firestore database). To use `set()` with `merge` and `mergeFields`, - * `toFirestore()` must be defined with `Partial<T>`. - */ - toFirestore(modelObject: T): DocumentData; - toFirestore(modelObject: Partial<T>, options: SetOptions): DocumentData; - - /** - * Called by the Firestore SDK to convert Firestore data into an object of - * type T. You can access your data by calling: `snapshot.data(options)`. - * - * @param snapshot A QueryDocumentSnapshot containing your data and metadata. - * @param options The SnapshotOptions from the initial call to `data()`. - */ - fromFirestore(snapshot: QueryDocumentSnapshot, options: SnapshotOptions): T; - } - - /** - * The Cloud Firestore service interface. - * - * Do not call this constructor directly. Instead, use - * {@link firebase.firestore `firebase.firestore()`}. - */ - export class Firestore { - private constructor(); - /** - * Specifies custom settings to be used to configure the `Firestore` - * instance. Must be set before invoking any other methods. - * - * @param settings The settings to use. - */ - settings(settings: Settings): void; - - /** - * Modify this instance to communicate with the Cloud Firestore emulator. - * - * <p>Note: this must be called before this instance has been used to do any operations. - * - * @param host the emulator host (ex: localhost). - * @param port the emulator port (ex: 9000). - * @param options.mockUserToken - the mock auth token to use for unit - * testing Security Rules. - */ - useEmulator( - host: string, - port: number, - options?: { - mockUserToken?: EmulatorMockTokenOptions | string; - } - ): void; - - /** - * Attempts to enable persistent storage, if possible. - * - * Must be called before any other methods (other than settings() and - * clearPersistence()). - * - * If this fails, enablePersistence() will reject the promise it returns. - * Note that even after this failure, the firestore instance will remain - * usable, however offline persistence will be disabled. - * - * There are several reasons why this can fail, which can be identified by - * the `code` on the error. - * - * * failed-precondition: The app is already open in another browser tab. - * * unimplemented: The browser is incompatible with the offline - * persistence implementation. - * - * @param settings Optional settings object to configure persistence. - * @return A promise that represents successfully enabling persistent - * storage. - */ - enablePersistence(settings?: PersistenceSettings): Promise<void>; - - /** - * Gets a `CollectionReference` instance that refers to the collection at - * the specified path. - * - * @param collectionPath A slash-separated path to a collection. - * @return The `CollectionReference` instance. - */ - collection(collectionPath: string): CollectionReference<DocumentData>; - - /** - * Gets a `DocumentReference` instance that refers to the document at the - * specified path. - * - * @param documentPath A slash-separated path to a document. - * @return The `DocumentReference` instance. - */ - doc(documentPath: string): DocumentReference<DocumentData>; - - /** - * Creates and returns a new Query that includes all documents in the - * database that are contained in a collection or subcollection with the - * given collectionId. - * - * @param collectionId Identifies the collections to query over. Every - * collection or subcollection with this ID as the last segment of its path - * will be included. Cannot contain a slash. - * @return The created Query. - */ - collectionGroup(collectionId: string): Query<DocumentData>; - - /** - * Executes the given `updateFunction` and then attempts to commit the changes - * applied within the transaction. If any document read within the transaction - * has changed, Cloud Firestore retries the `updateFunction`. If it fails to - * commit after 5 attempts, the transaction fails. - * - * The maximum number of writes allowed in a single transaction is 500, but - * note that each usage of `FieldValue.serverTimestamp()`, - * `FieldValue.arrayUnion()`, `FieldValue.arrayRemove()`, or - * `FieldValue.increment()` inside a transaction counts as an additional write. - * - * @param updateFunction - * The function to execute within the transaction context. - * - * @return - * If the transaction completed successfully or was explicitly aborted - * (the `updateFunction` returned a failed promise), - * the promise returned by the updateFunction is returned here. Else, if the - * transaction failed, a rejected promise with the corresponding failure - * error will be returned. - */ - runTransaction<T>( - updateFunction: (transaction: Transaction) => Promise<T> - ): Promise<T>; - - /** - * Creates a write batch, used for performing multiple writes as a single - * atomic operation. The maximum number of writes allowed in a single WriteBatch - * is 500, but note that each usage of `FieldValue.serverTimestamp()`, - * `FieldValue.arrayUnion()`, `FieldValue.arrayRemove()`, or - * `FieldValue.increment()` inside a WriteBatch counts as an additional write. - * - * @return - * A `WriteBatch` that can be used to atomically execute multiple writes. - */ - batch(): WriteBatch; - - /** - * The {@link firebase.app.App app} associated with this `Firestore` service - * instance. - */ - app: firebase.app.App; - - /** - * Clears the persistent storage. This includes pending writes and cached - * documents. - * - * Must be called while the firestore instance is not started (after the app - * is shutdown or when the app is first initialized). On startup, this - * method must be called before other methods (other than settings()). If - * the firestore instance is still running, the promise will be rejected - * with the error code of `failed-precondition`. - * - * Note: clearPersistence() is primarily intended to help write reliable - * tests that use Cloud Firestore. It uses an efficient mechanism for - * dropping existing data but does not attempt to securely overwrite or - * otherwise make cached data unrecoverable. For applications that are - * sensitive to the disclosure of cached data in between user sessions, we - * strongly recommend not enabling persistence at all. - * - * @return A promise that is resolved when the persistent storage is - * cleared. Otherwise, the promise is rejected with an error. - */ - clearPersistence(): Promise<void>; - - /** - * Re-enables use of the network for this Firestore instance after a prior - * call to {@link firebase.firestore.Firestore.disableNetwork - * `disableNetwork()`}. - * - * @return A promise that is resolved once the network has been - * enabled. - */ - enableNetwork(): Promise<void>; - - /** - * Disables network usage for this instance. It can be re-enabled via - * {@link firebase.firestore.Firestore.enableNetwork `enableNetwork()`}. While - * the network is disabled, any snapshot listeners or get() calls will return - * results from cache, and any write operations will be queued until the network - * is restored. - * - * @return A promise that is resolved once the network has been - * disabled. - */ - disableNetwork(): Promise<void>; - - /** - * Waits until all currently pending writes for the active user have been acknowledged by the - * backend. - * - * The returned Promise resolves immediately if there are no outstanding writes. Otherwise, the - * Promise waits for all previously issued writes (including those written in a previous app - * session), but it does not wait for writes that were added after the method is called. If you - * want to wait for additional writes, call `waitForPendingWrites()` again. - * - * Any outstanding `waitForPendingWrites()` Promises are rejected during user changes. - * - * @return A Promise which resolves when all currently pending writes have been - * acknowledged by the backend. - */ - waitForPendingWrites(): Promise<void>; - - /** - * Attaches a listener for a snapshots-in-sync event. The snapshots-in-sync - * event indicates that all listeners affected by a given change have fired, - * even if a single server-generated change affects multiple listeners. - * - * NOTE: The snapshots-in-sync event only indicates that listeners are in sync - * with each other, but does not relate to whether those snapshots are in sync - * with the server. Use SnapshotMetadata in the individual listeners to - * determine if a snapshot is from the cache or the server. - * - * @param observer A single object containing `next` and `error` callbacks. - * @return An unsubscribe function that can be called to cancel the snapshot - * listener. - */ - onSnapshotsInSync(observer: { - next?: (value: void) => void; - error?: (error: FirestoreError) => void; - complete?: () => void; - }): () => void; - - /** - * Attaches a listener for a snapshots-in-sync event. The snapshots-in-sync - * event indicates that all listeners affected by a given change have fired, - * even if a single server-generated change affects multiple listeners. - * - * NOTE: The snapshots-in-sync event only indicates that listeners are in sync - * with each other, but does not relate to whether those snapshots are in sync - * with the server. Use SnapshotMetadata in the individual listeners to - * determine if a snapshot is from the cache or the server. - * - * @param onSync A callback to be called every time all snapshot listeners are - * in sync with each other. - * @return An unsubscribe function that can be called to cancel the snapshot - * listener. - */ - onSnapshotsInSync(onSync: () => void): () => void; - - /** - * Terminates this Firestore instance. - * - * After calling `terminate()` only the `clearPersistence()` method may be used. Any other method - * will throw a `FirestoreError`. - * - * To restart after termination, create a new instance of FirebaseFirestore with - * `firebase.firestore()`. - * - * Termination does not cancel any pending writes, and any promises that are awaiting a response - * from the server will not be resolved. If you have persistence enabled, the next time you - * start this instance, it will resume sending these writes to the server. - * - * Note: Under normal circumstances, calling `terminate()` is not required. This - * method is useful only when you want to force this instance to release all of its resources or - * in combination with `clearPersistence()` to ensure that all local state is destroyed - * between test runs. - * - * @return A promise that is resolved when the instance has been successfully terminated. - */ - terminate(): Promise<void>; - - /** - * Loads a Firestore bundle into the local cache. - * - * @param bundleData - * An object representing the bundle to be loaded. Valid objects are `ArrayBuffer`, - * `ReadableStream<Uint8Array>` or `string`. - * - * @return - * A `LoadBundleTask` object, which notifies callers with progress updates, and completion - * or error events. It can be used as a `Promise<LoadBundleTaskProgress>`. - */ - loadBundle( - bundleData: ArrayBuffer | ReadableStream<Uint8Array> | string - ): LoadBundleTask; - - /** - * Reads a Firestore `Query` from local cache, identified by the given name. - * - * The named queries are packaged into bundles on the server side (along - * with resulting documents), and loaded to local cache using `loadBundle`. Once in local - * cache, use this method to extract a `Query` by name. - */ - namedQuery(name: string): Promise<Query<DocumentData> | null>; - - /** - * @hidden - */ - INTERNAL: { delete: () => Promise<void> }; - } - - /** - * Represents the task of loading a Firestore bundle. It provides progress of bundle - * loading, as well as task completion and error events. - * - * The API is compatible with `Promise<LoadBundleTaskProgress>`. - */ - export interface LoadBundleTask extends PromiseLike<LoadBundleTaskProgress> { - /** - * Registers functions to listen to bundle loading progress events. - * @param next - * Called when there is a progress update from bundle loading. Typically `next` calls occur - * each time a Firestore document is loaded from the bundle. - * @param error - * Called when an error occurs during bundle loading. The task aborts after reporting the - * error, and there should be no more updates after this. - * @param complete - * Called when the loading task is complete. - */ - onProgress( - next?: (progress: LoadBundleTaskProgress) => any, - error?: (error: Error) => any, - complete?: () => void - ): void; - - /** - * Implements the `Promise<LoadBundleTaskProgress>.then` interface. - * - * @param onFulfilled - * Called on the completion of the loading task with a final `LoadBundleTaskProgress` update. - * The update will always have its `taskState` set to `"Success"`. - * @param onRejected - * Called when an error occurs during bundle loading. - */ - then<T, R>( - onFulfilled?: (a: LoadBundleTaskProgress) => T | PromiseLike<T>, - onRejected?: (a: Error) => R | PromiseLike<R> - ): Promise<T | R>; - - /** - * Implements the `Promise<LoadBundleTaskProgress>.catch` interface. - * - * @param onRejected - * Called when an error occurs during bundle loading. - */ - catch<R>( - onRejected: (a: Error) => R | PromiseLike<R> - ): Promise<R | LoadBundleTaskProgress>; - } - - /** - * Represents a progress update or a final state from loading bundles. - */ - export interface LoadBundleTaskProgress { - /** How many documents have been loaded. */ - documentsLoaded: number; - /** How many documents are in the bundle being loaded. */ - totalDocuments: number; - /** How many bytes have been loaded. */ - bytesLoaded: number; - /** How many bytes are in the bundle being loaded. */ - totalBytes: number; - /** Current task state. */ - taskState: TaskState; - } - - /** - * Represents the state of bundle loading tasks. - * - * Both 'Error' and 'Success' are sinking state: task will abort or complete and there will - * be no more updates after they are reported. - */ - export type TaskState = 'Error' | 'Running' | 'Success'; - - /** - * An immutable object representing a geo point in Firestore. The geo point - * is represented as latitude/longitude pair. - * - * Latitude values are in the range of [-90, 90]. - * Longitude values are in the range of [-180, 180]. - */ - export class GeoPoint { - /** - * Creates a new immutable GeoPoint object with the provided latitude and - * longitude values. - * @param latitude The latitude as number between -90 and 90. - * @param longitude The longitude as number between -180 and 180. - */ - constructor(latitude: number, longitude: number); - - /** - * The latitude of this GeoPoint instance. - */ - readonly latitude: number; - /** - * The longitude of this GeoPoint instance. - */ - readonly longitude: number; - - /** - * Returns true if this `GeoPoint` is equal to the provided one. - * - * @param other The `GeoPoint` to compare against. - * @return true if this `GeoPoint` is equal to the provided one. - */ - isEqual(other: GeoPoint): boolean; - } - - /** - * A Timestamp represents a point in time independent of any time zone or - * calendar, represented as seconds and fractions of seconds at nanosecond - * resolution in UTC Epoch time. - * - * It is encoded using the Proleptic Gregorian - * Calendar which extends the Gregorian calendar backwards to year one. It is - * encoded assuming all minutes are 60 seconds long, i.e. leap seconds are - * "smeared" so that no leap second table is needed for interpretation. Range is - * from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. - * - * @see https://github.com/google/protobuf/blob/master/src/google/protobuf/timestamp.proto - */ - export class Timestamp { - /** - * Creates a new timestamp. - * - * @param seconds The number of seconds of UTC time since Unix epoch - * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to - * 9999-12-31T23:59:59Z inclusive. - * @param nanoseconds The non-negative fractions of a second at nanosecond - * resolution. Negative second values with fractions must still have - * non-negative nanoseconds values that count forward in time. Must be - * from 0 to 999,999,999 inclusive. - */ - constructor(seconds: number, nanoseconds: number); - - /** - * Creates a new timestamp with the current date, with millisecond precision. - * - * @return a new timestamp representing the current date. - */ - static now(): Timestamp; - - /** - * Creates a new timestamp from the given date. - * - * @param date The date to initialize the `Timestamp` from. - * @return A new `Timestamp` representing the same point in time as the given - * date. - */ - static fromDate(date: Date): Timestamp; - - /** - * Creates a new timestamp from the given number of milliseconds. - * - * @param milliseconds Number of milliseconds since Unix epoch - * 1970-01-01T00:00:00Z. - * @return A new `Timestamp` representing the same point in time as the given - * number of milliseconds. - */ - static fromMillis(milliseconds: number): Timestamp; - - readonly seconds: number; - readonly nanoseconds: number; - - /** - * Convert a Timestamp to a JavaScript `Date` object. This conversion causes - * a loss of precision since `Date` objects only support millisecond precision. - * - * @return JavaScript `Date` object representing the same point in time as - * this `Timestamp`, with millisecond precision. - */ - toDate(): Date; - - /** - * Convert a timestamp to a numeric timestamp (in milliseconds since epoch). - * This operation causes a loss of precision. - * - * @return The point in time corresponding to this timestamp, represented as - * the number of milliseconds since Unix epoch 1970-01-01T00:00:00Z. - */ - toMillis(): number; - - /** - * Returns true if this `Timestamp` is equal to the provided one. - * - * @param other The `Timestamp` to compare against. - * @return true if this `Timestamp` is equal to the provided one. - */ - isEqual(other: Timestamp): boolean; - - /** - * Converts this object to a primitive string, which allows Timestamp objects to be compared - * using the `>`, `<=`, `>=` and `>` operators. - */ - valueOf(): string; - } - - /** - * An immutable object representing an array of bytes. - */ - export class Blob { - private constructor(); - - /** - * Creates a new Blob from the given Base64 string, converting it to - * bytes. - * - * @param base64 - * The Base64 string used to create the Blob object. - */ - static fromBase64String(base64: string): Blob; - - /** - * Creates a new Blob from the given Uint8Array. - * - * @param array - * The Uint8Array used to create the Blob object. - */ - static fromUint8Array(array: Uint8Array): Blob; - - /** - * Returns the bytes of a Blob as a Base64-encoded string. - * - * @return - * The Base64-encoded string created from the Blob object. - */ - public toBase64(): string; - - /** - * Returns the bytes of a Blob in a new Uint8Array. - * - * @return - * The Uint8Array created from the Blob object. - */ - public toUint8Array(): Uint8Array; - - /** - * Returns true if this `Blob` is equal to the provided one. - * - * @param other The `Blob` to compare against. - * @return true if this `Blob` is equal to the provided one. - */ - isEqual(other: Blob): boolean; - } - - /** - * A reference to a transaction. - * The `Transaction` object passed to a transaction's updateFunction provides - * the methods to read and write data within the transaction context. See - * `Firestore.runTransaction()`. - */ - export class Transaction { - private constructor(); - - /** - * Reads the document referenced by the provided `DocumentReference.` - * - * @param documentRef A reference to the document to be read. - * @return A DocumentSnapshot for the read data. - */ - get<T>(documentRef: DocumentReference<T>): Promise<DocumentSnapshot<T>>; - - /** - * Writes to the document referred to by the provided `DocumentReference`. - * If the document does not exist yet, it will be created. If you pass - * `SetOptions`, the provided data can be merged into the existing document. - * - * @param documentRef A reference to the document to be set. - * @param data An object of the fields and values for the document. - * @param options An object to configure the set behavior. - * @return This `Transaction` instance. Used for chaining method calls. - */ - set<T>( - documentRef: DocumentReference<T>, - data: Partial<T>, - options: SetOptions - ): Transaction; - - /** - * Writes to the document referred to by the provided `DocumentReference`. - * If the document does not exist yet, it will be created. If you pass - * `SetOptions`, the provided data can be merged into the existing document. - * - * @param documentRef A reference to the document to be set. - * @param data An object of the fields and values for the document. - * @return This `Transaction` instance. Used for chaining method calls. - */ - set<T>(documentRef: DocumentReference<T>, data: T): Transaction; - - /** - * Updates fields in the document referred to by the provided - * `DocumentReference`. The update will fail if applied to a document that - * does not exist. - * - * @param documentRef A reference to the document to be updated. - * @param data An object containing the fields and values with which to - * update the document. Fields can contain dots to reference nested fields - * within the document. - * @return This `Transaction` instance. Used for chaining method calls. - */ - update(documentRef: DocumentReference<any>, data: UpdateData): Transaction; - - /** - * Updates fields in the document referred to by the provided - * `DocumentReference`. The update will fail if applied to a document that - * does not exist. - * - * Nested fields can be updated by providing dot-separated field path - * strings or by providing FieldPath objects. - * - * @param documentRef A reference to the document to be updated. - * @param field The first field to update. - * @param value The first value. - * @param moreFieldsAndValues Additional key/value pairs. - * @return A Promise resolved once the data has been successfully written - * to the backend (Note that it won't resolve while you're offline). - */ - update( - documentRef: DocumentReference<any>, - field: string | FieldPath, - value: any, - ...moreFieldsAndValues: any[] - ): Transaction; - - /** - * Deletes the document referred to by the provided `DocumentReference`. - * - * @param documentRef A reference to the document to be deleted. - * @return This `Transaction` instance. Used for chaining method calls. - */ - delete(documentRef: DocumentReference<any>): Transaction; - } - - /** - * A write batch, used to perform multiple writes as a single atomic unit. - * - * A `WriteBatch` object can be acquired by calling `Firestore.batch()`. It - * provides methods for adding writes to the write batch. None of the - * writes will be committed (or visible locally) until `WriteBatch.commit()` - * is called. - * - * Unlike transactions, write batches are persisted offline and therefore are - * preferable when you don't need to condition your writes on read data. - */ - export class WriteBatch { - private constructor(); - - /** - * Writes to the document referred to by the provided `DocumentReference`. - * If the document does not exist yet, it will be created. If you pass - * `SetOptions`, the provided data can be merged into the existing document. - * - * @param documentRef A reference to the document to be set. - * @param data An object of the fields and values for the document. - * @param options An object to configure the set behavior. - * @return This `WriteBatch` instance. Used for chaining method calls. - */ - set<T>( - documentRef: DocumentReference<T>, - data: Partial<T>, - options: SetOptions - ): WriteBatch; - - /** - * Writes to the document referred to by the provided `DocumentReference`. - * If the document does not exist yet, it will be created. If you pass - * `SetOptions`, the provided data can be merged into the existing document. - * - * @param documentRef A reference to the document to be set. - * @param data An object of the fields and values for the document. - * @return This `WriteBatch` instance. Used for chaining method calls. - */ - set<T>(documentRef: DocumentReference<T>, data: T): WriteBatch; - - /** - * Updates fields in the document referred to by the provided - * `DocumentReference`. The update will fail if applied to a document that - * does not exist. - * - * @param documentRef A reference to the document to be updated. - * @param data An object containing the fields and values with which to - * update the document. Fields can contain dots to reference nested fields - * within the document. - * @return This `WriteBatch` instance. Used for chaining method calls. - */ - update(documentRef: DocumentReference<any>, data: UpdateData): WriteBatch; - - /** - * Updates fields in the document referred to by this `DocumentReference`. - * The update will fail if applied to a document that does not exist. - * - * Nested fields can be update by providing dot-separated field path strings - * or by providing FieldPath objects. - * - * @param documentRef A reference to the document to be updated. - * @param field The first field to update. - * @param value The first value. - * @param moreFieldsAndValues Additional key value pairs. - * @return A Promise resolved once the data has been successfully written - * to the backend (Note that it won't resolve while you're offline). - */ - update( - documentRef: DocumentReference<any>, - field: string | FieldPath, - value: any, - ...moreFieldsAndValues: any[] - ): WriteBatch; - - /** - * Deletes the document referred to by the provided `DocumentReference`. - * - * @param documentRef A reference to the document to be deleted. - * @return This `WriteBatch` instance. Used for chaining method calls. - */ - delete(documentRef: DocumentReference<any>): WriteBatch; - - /** - * Commits all of the writes in this write batch as a single atomic unit. - * - * @return A Promise resolved once all of the writes in the batch have been - * successfully written to the backend as an atomic unit. Note that it won't - * resolve while you're offline. - */ - commit(): Promise<void>; - } - - /** - * An options object that can be passed to `DocumentReference.onSnapshot()`, - * `Query.onSnapshot()` and `QuerySnapshot.docChanges()` to control which - * types of changes to include in the result set. - */ - export interface SnapshotListenOptions { - /** - * Include a change even if only the metadata of the query or of a document - * changed. Default is false. - */ - readonly includeMetadataChanges?: boolean; - } - - /** - * An options object that configures the behavior of `set()` calls in - * {@link firebase.firestore.DocumentReference.set DocumentReference}, {@link - * firebase.firestore.WriteBatch.set WriteBatch} and {@link - * firebase.firestore.Transaction.set Transaction}. These calls can be - * configured to perform granular merges instead of overwriting the target - * documents in their entirety by providing a `SetOptions` with `merge: true`. - */ - export interface SetOptions { - /** - * Changes the behavior of a set() call to only replace the values specified - * in its data argument. Fields omitted from the set() call remain - * untouched. - */ - readonly merge?: boolean; - - /** - * Changes the behavior of set() calls to only replace the specified field - * paths. Any field path that is not specified is ignored and remains - * untouched. - */ - readonly mergeFields?: (string | FieldPath)[]; - } - - /** - * An options object that configures the behavior of `get()` calls on - * `DocumentReference` and `Query`. By providing a `GetOptions` object, these - * methods can be configured to fetch results only from the server, only from - * the local cache or attempt to fetch results from the server and fall back to - * the cache (which is the default). - */ - export interface GetOptions { - /** - * Describes whether we should get from server or cache. - * - * Setting to `default` (or not setting at all), causes Firestore to try to - * retrieve an up-to-date (server-retrieved) snapshot, but fall back to - * returning cached data if the server can't be reached. - * - * Setting to `server` causes Firestore to avoid the cache, generating an - * error if the server cannot be reached. Note that the cache will still be - * updated if the server request succeeds. Also note that latency-compensation - * still takes effect, so any pending write operations will be visible in the - * returned data (merged into the server-provided data). - * - * Setting to `cache` causes Firestore to immediately return a value from the - * cache, ignoring the server completely (implying that the returned value - * may be stale with respect to the value on the server.) If there is no data - * in the cache to satisfy the `get()` call, `DocumentReference.get()` will - * return an error and `QuerySnapshot.get()` will return an empty - * `QuerySnapshot` with no documents. - */ - readonly source?: 'default' | 'server' | 'cache'; - } - - /** - * A `DocumentReference` refers to a document location in a Firestore database - * and can be used to write, read, or listen to the location. The document at - * the referenced location may or may not exist. A `DocumentReference` can - * also be used to create a `CollectionReference` to a subcollection. - */ - export class DocumentReference<T = DocumentData> { - private constructor(); - - /** - * The document's identifier within its collection. - */ - readonly id: string; - - /** - * The {@link firebase.firestore.Firestore} the document is in. - * This is useful for performing transactions, for example. - */ - readonly firestore: Firestore; - - /** - * The Collection this `DocumentReference` belongs to. - */ - readonly parent: CollectionReference<T>; - - /** - * A string representing the path of the referenced document (relative - * to the root of the database). - */ - readonly path: string; - - /** - * Gets a `CollectionReference` instance that refers to the collection at - * the specified path. - * - * @param collectionPath A slash-separated path to a collection. - * @return The `CollectionReference` instance. - */ - collection(collectionPath: string): CollectionReference<DocumentData>; - - /** - * Returns true if this `DocumentReference` is equal to the provided one. - * - * @param other The `DocumentReference` to compare against. - * @return true if this `DocumentReference` is equal to the provided one. - */ - isEqual(other: DocumentReference<T>): boolean; - - /** - * Writes to the document referred to by this `DocumentReference`. If the - * document does not yet exist, it will be created. If you pass - * `SetOptions`, the provided data can be merged into an existing document. - * - * @param data A map of the fields and values for the document. - * @param options An object to configure the set behavior. - * @return A Promise resolved once the data has been successfully written - * to the backend (Note that it won't resolve while you're offline). - */ - set(data: Partial<T>, options: SetOptions): Promise<void>; - - /** - * Writes to the document referred to by this `DocumentReference`. If the - * document does not yet exist, it will be created. If you pass - * `SetOptions`, the provided data can be merged into an existing document. - * - * @param data A map of the fields and values for the document. - * @return A Promise resolved once the data has been successfully written - * to the backend (Note that it won't resolve while you're offline). - */ - set(data: T): Promise<void>; - - /** - * Updates fields in the document referred to by this `DocumentReference`. - * The update will fail if applied to a document that does not exist. - * - * @param data An object containing the fields and values with which to - * update the document. Fields can contain dots to reference nested fields - * within the document. - * @return A Promise resolved once the data has been successfully written - * to the backend (Note that it won't resolve while you're offline). - */ - update(data: UpdateData): Promise<void>; - - /** - * Updates fields in the document referred to by this `DocumentReference`. - * The update will fail if applied to a document that does not exist. - * - * Nested fields can be updated by providing dot-separated field path - * strings or by providing FieldPath objects. - * - * @param field The first field to update. - * @param value The first value. - * @param moreFieldsAndValues Additional key value pairs. - * @return A Promise resolved once the data has been successfully written - * to the backend (Note that it won't resolve while you're offline). - */ - update( - field: string | FieldPath, - value: any, - ...moreFieldsAndValues: any[] - ): Promise<void>; - - /** - * Deletes the document referred to by this `DocumentReference`. - * - * @return A Promise resolved once the document has been successfully - * deleted from the backend (Note that it won't resolve while you're - * offline). - */ - delete(): Promise<void>; - - /** - * Reads the document referred to by this `DocumentReference`. - * - * Note: By default, get() attempts to provide up-to-date data when possible - * by waiting for data from the server, but it may return cached data or fail - * if you are offline and the server cannot be reached. This behavior can be - * altered via the `GetOptions` parameter. - * - * @param options An object to configure the get behavior. - * @return A Promise resolved with a DocumentSnapshot containing the - * current document contents. - */ - get(options?: GetOptions): Promise<DocumentSnapshot<T>>; - - /** - * Attaches a listener for DocumentSnapshot events. You may either pass - * individual `onNext` and `onError` callbacks or pass a single observer - * object with `next` and `error` callbacks. - * - * NOTE: Although an `onCompletion` callback can be provided, it will - * never be called because the snapshot stream is never-ending. - * - * @param observer A single object containing `next` and `error` callbacks. - * @return An unsubscribe function that can be called to cancel - * the snapshot listener. - */ - onSnapshot(observer: { - next?: (snapshot: DocumentSnapshot<T>) => void; - error?: (error: FirestoreError) => void; - complete?: () => void; - }): () => void; - /** - * Attaches a listener for DocumentSnapshot events. You may either pass - * individual `onNext` and `onError` callbacks or pass a single observer - * object with `next` and `error` callbacks. - * - * NOTE: Although an `onCompletion` callback can be provided, it will - * never be called because the snapshot stream is never-ending. - * - * @param options Options controlling the listen behavior. - * @param observer A single object containing `next` and `error` callbacks. - * @return An unsubscribe function that can be called to cancel - * the snapshot listener. - */ - onSnapshot( - options: SnapshotListenOptions, - observer: { - next?: (snapshot: DocumentSnapshot<T>) => void; - error?: (error: FirestoreError) => void; - complete?: () => void; - } - ): () => void; - /** - * Attaches a listener for DocumentSnapshot events. You may either pass - * individual `onNext` and `onError` callbacks or pass a single observer - * object with `next` and `error` callbacks. - * - * NOTE: Although an `onCompletion` callback can be provided, it will - * never be called because the snapshot stream is never-ending. - * - * @param onNext A callback to be called every time a new `DocumentSnapshot` - * is available. - * @param onError A callback to be called if the listen fails or is - * cancelled. No further callbacks will occur. - * @return An unsubscribe function that can be called to cancel - * the snapshot listener. - */ - onSnapshot( - onNext: (snapshot: DocumentSnapshot<T>) => void, - onError?: (error: FirestoreError) => void, - onCompletion?: () => void - ): () => void; - /** - * Attaches a listener for DocumentSnapshot events. You may either pass - * individual `onNext` and `onError` callbacks or pass a single observer - * object with `next` and `error` callbacks. - * - * NOTE: Although an `onCompletion` callback can be provided, it will - * never be called because the snapshot stream is never-ending. - * - * @param options Options controlling the listen behavior. - * @param onNext A callback to be called every time a new `DocumentSnapshot` - * is available. - * @param onError A callback to be called if the listen fails or is - * cancelled. No further callbacks will occur. - * @return An unsubscribe function that can be called to cancel - * the snapshot listener. - */ - onSnapshot( - options: SnapshotListenOptions, - onNext: (snapshot: DocumentSnapshot<T>) => void, - onError?: (error: FirestoreError) => void, - onCompletion?: () => void - ): () => void; - - /** - * Applies a custom data converter to this DocumentReference, allowing you - * to use your own custom model objects with Firestore. When you call - * set(), get(), etc. on the returned DocumentReference instance, the - * provided converter will convert between Firestore data and your custom - * type U. - * - * Passing in `null` as the converter parameter removes the current - * converter. - * - * @param converter Converts objects to and from Firestore. Passing in - * `null` removes the current converter. - * @return A DocumentReference<U> that uses the provided converter. - */ - withConverter(converter: null): DocumentReference<DocumentData>; - /** - * Applies a custom data converter to this DocumentReference, allowing you - * to use your own custom model objects with Firestore. When you call - * set(), get(), etc. on the returned DocumentReference instance, the - * provided converter will convert between Firestore data and your custom - * type U. - * - * Passing in `null` as the converter parameter removes the current - * converter. - * - * @param converter Converts objects to and from Firestore. Passing in - * `null` removes the current converter. - * @return A DocumentReference<U> that uses the provided converter. - */ - withConverter<U>( - converter: FirestoreDataConverter<U> - ): DocumentReference<U>; - } - - /** - * Options that configure how data is retrieved from a `DocumentSnapshot` - * (e.g. the desired behavior for server timestamps that have not yet been set - * to their final value). - */ - export interface SnapshotOptions { - /** - * If set, controls the return value for server timestamps that have not yet - * been set to their final value. - * - * By specifying 'estimate', pending server timestamps return an estimate - * based on the local clock. This estimate will differ from the final value - * and cause these values to change once the server result becomes available. - * - * By specifying 'previous', pending timestamps will be ignored and return - * their previous value instead. - * - * If omitted or set to 'none', `null` will be returned by default until the - * server value becomes available. - */ - readonly serverTimestamps?: 'estimate' | 'previous' | 'none'; - } - - /** - * Metadata about a snapshot, describing the state of the snapshot. - */ - export interface SnapshotMetadata { - /** - * True if the snapshot contains the result of local writes (e.g. set() or - * update() calls) that have not yet been committed to the backend. - * If your listener has opted into metadata updates (via - * `SnapshotListenOptions`) you will receive another - * snapshot with `hasPendingWrites` equal to false once the writes have been - * committed to the backend. - */ - readonly hasPendingWrites: boolean; - - /** - * True if the snapshot was created from cached data rather than guaranteed - * up-to-date server data. If your listener has opted into metadata updates - * (via `SnapshotListenOptions`) - * you will receive another snapshot with `fromCache` set to false once - * the client has received up-to-date data from the backend. - */ - readonly fromCache: boolean; - - /** - * Returns true if this `SnapshotMetadata` is equal to the provided one. - * - * @param other The `SnapshotMetadata` to compare against. - * @return true if this `SnapshotMetadata` is equal to the provided one. - */ - isEqual(other: SnapshotMetadata): boolean; - } - - /** - * A `DocumentSnapshot` contains data read from a document in your Firestore - * database. The data can be extracted with `.data()` or `.get(<field>)` to - * get a specific field. - * - * For a `DocumentSnapshot` that points to a non-existing document, any data - * access will return 'undefined'. You can use the `exists` property to - * explicitly verify a document's existence. - */ - export class DocumentSnapshot<T = DocumentData> { - protected constructor(); - - /** - * Property of the `DocumentSnapshot` that signals whether or not the data - * exists. True if the document exists. - */ - readonly exists: boolean; - /** - * The `DocumentReference` for the document included in the `DocumentSnapshot`. - */ - readonly ref: DocumentReference<T>; - /** - * Property of the `DocumentSnapshot` that provides the document's ID. - */ - readonly id: string; - /** - * Metadata about the `DocumentSnapshot`, including information about its - * source and local modifications. - */ - readonly metadata: SnapshotMetadata; - - /** - * Retrieves all fields in the document as an Object. Returns 'undefined' if - * the document doesn't exist. - * - * By default, `FieldValue.serverTimestamp()` values that have not yet been - * set to their final value will be returned as `null`. You can override - * this by passing an options object. - * - * @param options An options object to configure how data is retrieved from - * the snapshot (e.g. the desired behavior for server timestamps that have - * not yet been set to their final value). - * @return An Object containing all fields in the document or 'undefined' if - * the document doesn't exist. - */ - data(options?: SnapshotOptions): T | undefined; - - /** - * Retrieves the field specified by `fieldPath`. Returns `undefined` if the - * document or field doesn't exist. - * - * By default, a `FieldValue.serverTimestamp()` that has not yet been set to - * its final value will be returned as `null`. You can override this by - * passing an options object. - * - * @param fieldPath The path (e.g. 'foo' or 'foo.bar') to a specific field. - * @param options An options object to configure how the field is retrieved - * from the snapshot (e.g. the desired behavior for server timestamps that have - * not yet been set to their final value). - * @return The data at the specified field location or undefined if no such - * field exists in the document. - */ - get(fieldPath: string | FieldPath, options?: SnapshotOptions): any; - - /** - * Returns true if this `DocumentSnapshot` is equal to the provided one. - * - * @param other The `DocumentSnapshot` to compare against. - * @return true if this `DocumentSnapshot` is equal to the provided one. - */ - isEqual(other: DocumentSnapshot<T>): boolean; - } - - /** - * A `QueryDocumentSnapshot` contains data read from a document in your - * Firestore database as part of a query. The document is guaranteed to exist - * and its data can be extracted with `.data()` or `.get(<field>)` to get a - * specific field. - * - * A `QueryDocumentSnapshot` offers the same API surface as a - * `DocumentSnapshot`. Since query results contain only existing documents, the - * `exists` property will always be true and `data()` will never return - * 'undefined'. - */ - export class QueryDocumentSnapshot< - T = DocumentData - > extends DocumentSnapshot<T> { - private constructor(); - - /** - * Retrieves all fields in the document as an Object. - * - * By default, `FieldValue.serverTimestamp()` values that have not yet been - * set to their final value will be returned as `null`. You can override - * this by passing an options object. - * - * @override - * @param options An options object to configure how data is retrieved from - * the snapshot (e.g. the desired behavior for server timestamps that have - * not yet been set to their final value). - * @return An Object containing all fields in the document. - */ - data(options?: SnapshotOptions): T; - } - - /** - * The direction of a `Query.orderBy()` clause is specified as 'desc' or 'asc' - * (descending or ascending). - */ - export type OrderByDirection = 'desc' | 'asc'; - - /** - * Filter conditions in a `Query.where()` clause are specified using the - * strings '<', '<=', '==', '!=', '>=', '>', 'array-contains', 'in', - * 'array-contains-any', and 'not-in'. - */ - export type WhereFilterOp = - | '<' - | '<=' - | '==' - | '!=' - | '>=' - | '>' - | 'array-contains' - | 'in' - | 'array-contains-any' - | 'not-in'; - - /** - * A `Query` refers to a Query which you can read or listen to. You can also - * construct refined `Query` objects by adding filters and ordering. - */ - export class Query<T = DocumentData> { - protected constructor(); - - /** - * The `Firestore` for the Firestore database (useful for performing - * transactions, etc.). - */ - readonly firestore: Firestore; - - /** - * Creates and returns a new Query with the additional filter that documents - * must contain the specified field and the value should satisfy the - * relation constraint provided. - * - * @param fieldPath The path to compare - * @param opStr The operation string (e.g "<", "<=", "==", ">", ">="). - * @param value The value for comparison - * @return The created Query. - */ - where( - fieldPath: string | FieldPath, - opStr: WhereFilterOp, - value: any - ): Query<T>; - - /** - * Creates and returns a new Query that's additionally sorted by the - * specified field, optionally in descending order instead of ascending. - * - * @param fieldPath The field to sort by. - * @param directionStr Optional direction to sort by (`asc` or `desc`). If - * not specified, order will be ascending. - * @return The created Query. - */ - orderBy( - fieldPath: string | FieldPath, - directionStr?: OrderByDirection - ): Query<T>; - - /** - * Creates and returns a new Query that only returns the first matching - * documents. - * - * @param limit The maximum number of items to return. - * @return The created Query. - */ - limit(limit: number): Query<T>; - - /** - * Creates and returns a new Query that only returns the last matching - * documents. - * - * You must specify at least one `orderBy` clause for `limitToLast` queries, - * otherwise an exception will be thrown during execution. - * - * @param limit The maximum number of items to return. - * @return The created Query. - */ - limitToLast(limit: number): Query<T>; - - /** - * Creates and returns a new Query that starts at the provided document - * (inclusive). The starting position is relative to the order of the query. - * The document must contain all of the fields provided in the `orderBy` of - * this query. - * - * @param snapshot The snapshot of the document to start at. - * @return The created Query. - */ - startAt(snapshot: DocumentSnapshot<any>): Query<T>; - - /** - * Creates and returns a new Query that starts at the provided fields - * relative to the order of the query. The order of the field values - * must match the order of the order by clauses of the query. - * - * @param fieldValues The field values to start this query at, in order - * of the query's order by. - * @return The created Query. - */ - startAt(...fieldValues: any[]): Query<T>; - - /** - * Creates and returns a new Query that starts after the provided document - * (exclusive). The starting position is relative to the order of the query. - * The document must contain all of the fields provided in the orderBy of - * this query. - * - * @param snapshot The snapshot of the document to start after. - * @return The created Query. - */ - startAfter(snapshot: DocumentSnapshot<any>): Query<T>; - - /** - * Creates and returns a new Query that starts after the provided fields - * relative to the order of the query. The order of the field values - * must match the order of the order by clauses of the query. - * - * @param fieldValues The field values to start this query after, in order - * of the query's order by. - * @return The created Query. - */ - startAfter(...fieldValues: any[]): Query<T>; - - /** - * Creates and returns a new Query that ends before the provided document - * (exclusive). The end position is relative to the order of the query. The - * document must contain all of the fields provided in the orderBy of this - * query. - * - * @param snapshot The snapshot of the document to end before. - * @return The created Query. - */ - endBefore(snapshot: DocumentSnapshot<any>): Query<T>; - - /** - * Creates and returns a new Query that ends before the provided fields - * relative to the order of the query. The order of the field values - * must match the order of the order by clauses of the query. - * - * @param fieldValues The field values to end this query before, in order - * of the query's order by. - * @return The created Query. - */ - endBefore(...fieldValues: any[]): Query<T>; - - /** - * Creates and returns a new Query that ends at the provided document - * (inclusive). The end position is relative to the order of the query. The - * document must contain all of the fields provided in the orderBy of this - * query. - * - * @param snapshot The snapshot of the document to end at. - * @return The created Query. - */ - endAt(snapshot: DocumentSnapshot<any>): Query<T>; - - /** - * Creates and returns a new Query that ends at the provided fields - * relative to the order of the query. The order of the field values - * must match the order of the order by clauses of the query. - * - * @param fieldValues The field values to end this query at, in order - * of the query's order by. - * @return The created Query. - */ - endAt(...fieldValues: any[]): Query<T>; - - /** - * Returns true if this `Query` is equal to the provided one. - * - * @param other The `Query` to compare against. - * @return true if this `Query` is equal to the provided one. - */ - isEqual(other: Query<T>): boolean; - - /** - * Executes the query and returns the results as a `QuerySnapshot`. - * - * Note: By default, get() attempts to provide up-to-date data when possible - * by waiting for data from the server, but it may return cached data or fail - * if you are offline and the server cannot be reached. This behavior can be - * altered via the `GetOptions` parameter. - * - * @param options An object to configure the get behavior. - * @return A Promise that will be resolved with the results of the Query. - */ - get(options?: GetOptions): Promise<QuerySnapshot<T>>; - - /** - * Attaches a listener for QuerySnapshot events. You may either pass - * individual `onNext` and `onError` callbacks or pass a single observer - * object with `next` and `error` callbacks. The listener can be cancelled by - * calling the function that is returned when `onSnapshot` is called. - * - * NOTE: Although an `onCompletion` callback can be provided, it will - * never be called because the snapshot stream is never-ending. - * - * @param observer A single object containing `next` and `error` callbacks. - * @return An unsubscribe function that can be called to cancel - * the snapshot listener. - */ - onSnapshot(observer: { - next?: (snapshot: QuerySnapshot<T>) => void; - error?: (error: FirestoreError) => void; - complete?: () => void; - }): () => void; - /** - * Attaches a listener for QuerySnapshot events. You may either pass - * individual `onNext` and `onError` callbacks or pass a single observer - * object with `next` and `error` callbacks. The listener can be cancelled by - * calling the function that is returned when `onSnapshot` is called. - * - * NOTE: Although an `onCompletion` callback can be provided, it will - * never be called because the snapshot stream is never-ending. - * - * @param options Options controlling the listen behavior. - * @param observer A single object containing `next` and `error` callbacks. - * @return An unsubscribe function that can be called to cancel - * the snapshot listener. - */ - onSnapshot( - options: SnapshotListenOptions, - observer: { - next?: (snapshot: QuerySnapshot<T>) => void; - error?: (error: FirestoreError) => void; - complete?: () => void; - } - ): () => void; - /** - * Attaches a listener for QuerySnapshot events. You may either pass - * individual `onNext` and `onError` callbacks or pass a single observer - * object with `next` and `error` callbacks. The listener can be cancelled by - * calling the function that is returned when `onSnapshot` is called. - * - * NOTE: Although an `onCompletion` callback can be provided, it will - * never be called because the snapshot stream is never-ending. - * - * @param onNext A callback to be called every time a new `QuerySnapshot` - * is available. - * @param onError A callback to be called if the listen fails or is - * cancelled. No further callbacks will occur. - * @return An unsubscribe function that can be called to cancel - * the snapshot listener. - */ - onSnapshot( - onNext: (snapshot: QuerySnapshot<T>) => void, - onError?: (error: FirestoreError) => void, - onCompletion?: () => void - ): () => void; - /** - * Attaches a listener for QuerySnapshot events. You may either pass - * individual `onNext` and `onError` callbacks or pass a single observer - * object with `next` and `error` callbacks. The listener can be cancelled by - * calling the function that is returned when `onSnapshot` is called. - * - * NOTE: Although an `onCompletion` callback can be provided, it will - * never be called because the snapshot stream is never-ending. - * - * @param options Options controlling the listen behavior. - * @param onNext A callback to be called every time a new `QuerySnapshot` - * is available. - * @param onError A callback to be called if the listen fails or is - * cancelled. No further callbacks will occur. - * @return An unsubscribe function that can be called to cancel - * the snapshot listener. - */ - onSnapshot( - options: SnapshotListenOptions, - onNext: (snapshot: QuerySnapshot<T>) => void, - onError?: (error: FirestoreError) => void, - onCompletion?: () => void - ): () => void; - - /** - * Applies a custom data converter to this Query, allowing you to use your - * own custom model objects with Firestore. When you call get() on the - * returned Query, the provided converter will convert between Firestore - * data and your custom type U. - * - * Passing in `null` as the converter parameter removes the current - * converter. - * - * @param converter Converts objects to and from Firestore. Passing in - * `null` removes the current converter. - * @return A Query<U> that uses the provided converter. - */ - withConverter(converter: null): Query<DocumentData>; - /** - * Applies a custom data converter to this Query, allowing you to use your - * own custom model objects with Firestore. When you call get() on the - * returned Query, the provided converter will convert between Firestore - * data and your custom type U. - * - * Passing in `null` as the converter parameter removes the current - * converter. - * - * @param converter Converts objects to and from Firestore. Passing in - * `null` removes the current converter. - * @return A Query<U> that uses the provided converter. - */ - withConverter<U>(converter: FirestoreDataConverter<U>): Query<U>; - } - - /** - * A `QuerySnapshot` contains zero or more `DocumentSnapshot` objects - * representing the results of a query. The documents can be accessed as an - * array via the `docs` property or enumerated using the `forEach` method. The - * number of documents can be determined via the `empty` and `size` - * properties. - */ - export class QuerySnapshot<T = DocumentData> { - private constructor(); - - /** - * The query on which you called `get` or `onSnapshot` in order to get this - * `QuerySnapshot`. - */ - readonly query: Query<T>; - /** - * Metadata about this snapshot, concerning its source and if it has local - * modifications. - */ - readonly metadata: SnapshotMetadata; - - /** An array of all the documents in the `QuerySnapshot`. */ - readonly docs: Array<QueryDocumentSnapshot<T>>; - - /** The number of documents in the `QuerySnapshot`. */ - readonly size: number; - - /** True if there are no documents in the `QuerySnapshot`. */ - readonly empty: boolean; - - /** - * Returns an array of the documents changes since the last snapshot. If this - * is the first snapshot, all documents will be in the list as added changes. - * - * @param options `SnapshotListenOptions` that control whether metadata-only - * changes (i.e. only `DocumentSnapshot.metadata` changed) should trigger - * snapshot events. - */ - docChanges(options?: SnapshotListenOptions): Array<DocumentChange<T>>; - - /** - * Enumerates all of the documents in the `QuerySnapshot`. - * - * @param callback A callback to be called with a `QueryDocumentSnapshot` for - * each document in the snapshot. - * @param thisArg The `this` binding for the callback. - */ - forEach( - callback: (result: QueryDocumentSnapshot<T>) => void, - thisArg?: any - ): void; - - /** - * Returns true if this `QuerySnapshot` is equal to the provided one. - * - * @param other The `QuerySnapshot` to compare against. - * @return true if this `QuerySnapshot` is equal to the provided one. - */ - isEqual(other: QuerySnapshot<T>): boolean; - } - - /** - * The type of a `DocumentChange` may be 'added', 'removed', or 'modified'. - */ - export type DocumentChangeType = 'added' | 'removed' | 'modified'; - - /** - * A `DocumentChange` represents a change to the documents matching a query. - * It contains the document affected and the type of change that occurred. - */ - export interface DocumentChange<T = DocumentData> { - /** The type of change ('added', 'modified', or 'removed'). */ - readonly type: DocumentChangeType; - - /** The document affected by this change. */ - readonly doc: QueryDocumentSnapshot<T>; - - /** - * The index of the changed document in the result set immediately prior to - * this `DocumentChange` (i.e. supposing that all prior `DocumentChange` objects - * have been applied). Is -1 for 'added' events. - */ - readonly oldIndex: number; - - /** - * The index of the changed document in the result set immediately after - * this `DocumentChange` (i.e. supposing that all prior `DocumentChange` - * objects and the current `DocumentChange` object have been applied). - * Is -1 for 'removed' events. - */ - readonly newIndex: number; - } - - /** - * A `CollectionReference` object can be used for adding documents, getting - * document references, and querying for documents (using the methods - * inherited from `Query`). - */ - export class CollectionReference<T = DocumentData> extends Query<T> { - private constructor(); - - /** The collection's identifier. */ - readonly id: string; - - /** - * A reference to the containing `DocumentReference` if this is a subcollection. - * If this isn't a subcollection, the reference is null. - */ - readonly parent: DocumentReference<DocumentData> | null; - - /** - * A string representing the path of the referenced collection (relative - * to the root of the database). - */ - readonly path: string; - - /** - * Get a `DocumentReference` for the document within the collection at the - * specified path. If no path is specified, an automatically-generated - * unique ID will be used for the returned DocumentReference. - * - * @param documentPath A slash-separated path to a document. - * @return The `DocumentReference` instance. - */ - doc(documentPath?: string): DocumentReference<T>; - - /** - * Add a new document to this collection with the specified data, assigning - * it a document ID automatically. - * - * @param data An Object containing the data for the new document. - * @return A Promise resolved with a `DocumentReference` pointing to the - * newly created document after it has been written to the backend. - */ - add(data: T): Promise<DocumentReference<T>>; - - /** - * Returns true if this `CollectionReference` is equal to the provided one. - * - * @param other The `CollectionReference` to compare against. - * @return true if this `CollectionReference` is equal to the provided one. - */ - isEqual(other: CollectionReference<T>): boolean; - - /** - * Applies a custom data converter to this CollectionReference, allowing you - * to use your own custom model objects with Firestore. When you call add() - * on the returned CollectionReference instance, the provided converter will - * convert between Firestore data and your custom type U. - * - * Passing in `null` as the converter parameter removes the current - * converter. - * - * @param converter Converts objects to and from Firestore. Passing in - * `null` removes the current converter. - * @return A CollectionReference<U> that uses the provided converter. - */ - withConverter(converter: null): CollectionReference<DocumentData>; - /** - * Applies a custom data converter to this CollectionReference, allowing you - * to use your own custom model objects with Firestore. When you call add() - * on the returned CollectionReference instance, the provided converter will - * convert between Firestore data and your custom type U. - * - * Passing in `null` as the converter parameter removes the current - * converter. - * - * @param converter Converts objects to and from Firestore. Passing in - * `null` removes the current converter. - * @return A CollectionReference<U> that uses the provided converter. - */ - withConverter<U>( - converter: FirestoreDataConverter<U> - ): CollectionReference<U>; - } - - /** - * Sentinel values that can be used when writing document fields with `set()` - * or `update()`. - */ - export class FieldValue { - private constructor(); - - /** - * Returns a sentinel used with `set()` or `update()` to include a - * server-generated timestamp in the written data. - */ - static serverTimestamp(): FieldValue; - - /** - * Returns a sentinel for use with `update()` to mark a field for deletion. - */ - static delete(): FieldValue; - - /** - * Returns a special value that can be used with `set()` or `update()` that tells - * the server to union the given elements with any array value that already - * exists on the server. Each specified element that doesn't already exist in - * the array will be added to the end. If the field being modified is not - * already an array it will be overwritten with an array containing exactly - * the specified elements. - * - * @param elements The elements to union into the array. - * @return The FieldValue sentinel for use in a call to `set()` or `update()`. - */ - static arrayUnion(...elements: any[]): FieldValue; - - /** - * Returns a special value that can be used with `set()` or `update()` that tells - * the server to remove the given elements from any array value that already - * exists on the server. All instances of each element specified will be - * removed from the array. If the field being modified is not already an - * array it will be overwritten with an empty array. - * - * @param elements The elements to remove from the array. - * @return The FieldValue sentinel for use in a call to `set()` or `update()`. - */ - static arrayRemove(...elements: any[]): FieldValue; - - /** - * Returns a special value that can be used with `set()` or `update()` that tells - * the server to increment the field's current value by the given value. - * - * If either the operand or the current field value uses floating point precision, - * all arithmetic follows IEEE 754 semantics. If both values are integers, - * values outside of JavaScript's safe number range (`Number.MIN_SAFE_INTEGER` to - * `Number.MAX_SAFE_INTEGER`) are also subject to precision loss. Furthermore, - * once processed by the Firestore backend, all integer operations are capped - * between -2^63 and 2^63-1. - * - * If the current field value is not of type `number`, or if the field does not - * yet exist, the transformation sets the field to the given value. - * - * @param n The value to increment by. - * @return The FieldValue sentinel for use in a call to `set()` or `update()`. - */ - static increment(n: number): FieldValue; - - /** - * Returns true if this `FieldValue` is equal to the provided one. - * - * @param other The `FieldValue` to compare against. - * @return true if this `FieldValue` is equal to the provided one. - */ - isEqual(other: FieldValue): boolean; - } - - /** - * A FieldPath refers to a field in a document. The path may consist of a - * single field name (referring to a top-level field in the document), or a - * list of field names (referring to a nested field in the document). - * - * Create a FieldPath by providing field names. If more than one field - * name is provided, the path will point to a nested field in a document. - * - */ - export class FieldPath { - /** - * Creates a FieldPath from the provided field names. If more than one field - * name is provided, the path will point to a nested field in a document. - * - * @param fieldNames A list of field names. - */ - constructor(...fieldNames: string[]); - - /** - * Returns a special sentinel `FieldPath` to refer to the ID of a document. - * It can be used in queries to sort or filter by the document ID. - */ - static documentId(): FieldPath; - - /** - * Returns true if this `FieldPath` is equal to the provided one. - * - * @param other The `FieldPath` to compare against. - * @return true if this `FieldPath` is equal to the provided one. - */ - isEqual(other: FieldPath): boolean; - } - - /** - * The set of Firestore status codes. The codes are the same at the ones - * exposed by gRPC here: - * https://github.com/grpc/grpc/blob/master/doc/statuscodes.md - * - * Possible values: - * - 'cancelled': The operation was cancelled (typically by the caller). - * - 'unknown': Unknown error or an error from a different error domain. - * - 'invalid-argument': Client specified an invalid argument. Note that this - * differs from 'failed-precondition'. 'invalid-argument' indicates - * arguments that are problematic regardless of the state of the system - * (e.g. an invalid field name). - * - 'deadline-exceeded': Deadline expired before operation could complete. - * For operations that change the state of the system, this error may be - * returned even if the operation has completed successfully. For example, - * a successful response from a server could have been delayed long enough - * for the deadline to expire. - * - 'not-found': Some requested document was not found. - * - 'already-exists': Some document that we attempted to create already - * exists. - * - 'permission-denied': The caller does not have permission to execute the - * specified operation. - * - 'resource-exhausted': Some resource has been exhausted, perhaps a - * per-user quota, or perhaps the entire file system is out of space. - * - 'failed-precondition': Operation was rejected because the system is not - * in a state required for the operation's execution. - * - 'aborted': The operation was aborted, typically due to a concurrency - * issue like transaction aborts, etc. - * - 'out-of-range': Operation was attempted past the valid range. - * - 'unimplemented': Operation is not implemented or not supported/enabled. - * - 'internal': Internal errors. Means some invariants expected by - * underlying system has been broken. If you see one of these errors, - * something is very broken. - * - 'unavailable': The service is currently unavailable. This is most likely - * a transient condition and may be corrected by retrying with a backoff. - * - 'data-loss': Unrecoverable data loss or corruption. - * - 'unauthenticated': The request does not have valid authentication - * credentials for the operation. - */ - export type FirestoreErrorCode = - | 'cancelled' - | 'unknown' - | 'invalid-argument' - | 'deadline-exceeded' - | 'not-found' - | 'already-exists' - | 'permission-denied' - | 'resource-exhausted' - | 'failed-precondition' - | 'aborted' - | 'out-of-range' - | 'unimplemented' - | 'internal' - | 'unavailable' - | 'data-loss' - | 'unauthenticated'; - - /** An error returned by a Firestore operation. */ - // TODO(b/63008957): FirestoreError should extend firebase.FirebaseError - export interface FirestoreError { - code: FirestoreErrorCode; - message: string; - name: string; - stack?: string; - } - - export type EmulatorMockTokenOptions = firebase.EmulatorMockTokenOptions; -} - -export default firebase; -export as namespace firebase; |
