/** * @license Copyright 2017 Google Inc. * * 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. */ /** * @fileoverview Firebase client Auth API. * @externs */ /** * 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. * *

Error Codes

*
*
auth/auth-domain-config-required
*
Thrown if authDomain configuration is not provided when calling * firebase.initializeApp(). Check Firebase Console for instructions on * determining and passing that field.
*
auth/cancelled-popup-request
*
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.
*
auth/credential-already-in-use
*
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 error.email and error.credential * ({@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}.
*
auth/email-already-in-use
*
Thrown if the email corresponding to the credential already exists * among your users. When thrown while linking a credential to an existing * user, an error.email and error.credential * ({@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#fetchProvidersForEmail}, sign in to * error.email via one of the providers returned and then * {@link firebase.User#linkWithCredential} the original credential to that * newly signed in user.
*
auth/operation-not-allowed
*
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 * Sign in Method tab and configure the provider.
*
auth/popup-blocked
*
auth/operation-not-supported-in-this-environment
*
Thrown if this operation is not supported in the environment your * application is running on. "location.protocol" must be http or https. *
*
Thrown if the popup was blocked by the browser, typically when this * operation is triggered outside of a click handler.
*
auth/popup-closed-by-user
*
Thrown if the popup window is closed by the user without completing the * sign in to the provider.
*
auth/provider-already-linked
*
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.
*
auth/unauthorized-domain
*
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.
*
* * @example * // 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 {!firebase.auth.AuthProvider} 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. * @return {!firebase.Promise} */ firebase.User.prototype.linkWithPopup = function(provider) {}; /** * Links the authenticated provider to the user account using a full-page * redirect flow. * *

Error Codes

*
*
auth/auth-domain-config-required
*
Thrown if authDomain configuration is not provided when calling * firebase.initializeApp(). Check Firebase Console for instructions on * determining and passing that field.
*
auth/operation-not-supported-in-this-environment
*
Thrown if this operation is not supported in the environment your * application is running on. "location.protocol" must be http or https. *
*
auth/provider-already-linked
*
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.
*
auth/unauthorized-domain
*
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.
*
* * @param {!firebase.auth.AuthProvider} 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. * @return {!firebase.Promise} */ firebase.User.prototype.linkWithRedirect = function(provider) {}; /** * 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. * *

Error Codes

*
*
auth/account-exists-with-different-credential
*
Thrown if there already exists an account with the email address * asserted by the credential. Resolve this by calling * {@link firebase.auth.Auth#fetchProvidersForEmail} 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.
*
auth/auth-domain-config-required
*
Thrown if authDomain configuration is not provided when calling * firebase.initializeApp(). Check Firebase Console for instructions on * determining and passing that field.
*
auth/cancelled-popup-request
*
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.
*
auth/operation-not-allowed
*
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.
*
auth/operation-not-supported-in-this-environment
*
Thrown if this operation is not supported in the environment your * application is running on. "location.protocol" must be http or https. *
*
auth/popup-blocked
*
Thrown if the popup was blocked by the browser, typically when this * operation is triggered outside of a click handler.
*
auth/popup-closed-by-user
*
Thrown if the popup window is closed by the user without completing the * sign in to the provider.
*
auth/unauthorized-domain
*
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.
*
* * @example * // 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.fetchProvidersForEmail(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 {!firebase.auth.AuthProvider} 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. * @return {!firebase.Promise} */ firebase.auth.Auth.prototype.signInWithPopup = function(provider) {}; /** * 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}. * *

Error Codes

*
*
auth/auth-domain-config-required
*
Thrown if authDomain configuration is not provided when calling * firebase.initializeApp(). Check Firebase Console for instructions on * determining and passing that field.
*
auth/operation-not-supported-in-this-environment
*
Thrown if this operation is not supported in the environment your * application is running on. "location.protocol" must be http or https. *
*
auth/unauthorized-domain
*
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.
*
* * @param {!firebase.auth.AuthProvider} 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. * @return {!firebase.Promise} */ firebase.auth.Auth.prototype.signInWithRedirect = function(provider) {}; /** * 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. * *

Error Codes

*
*
auth/auth-domain-config-required
*
Thrown if authDomain configuration is not provided when calling * firebase.initializeApp(). Check Firebase Console for instructions on * determining and passing that field.
*
auth/cancelled-popup-request
*
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.
*
auth/user-mismatch
*
Thrown if the credential given does not correspond to the user.
*
auth/operation-not-allowed
*
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 * Sign in Method tab and configure the provider.
*
auth/popup-blocked
*
Thrown if the popup was blocked by the browser, typically when this * operation is triggered outside of a click handler.
*
auth/operation-not-supported-in-this-environment
*
Thrown if this operation is not supported in the environment your * application is running on. "location.protocol" must be http or https. *
*
auth/popup-closed-by-user
*
Thrown if the popup window is closed by the user without completing the * sign in to the provider.
*
auth/unauthorized-domain
*
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.
*
* * @example * // 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 {!firebase.auth.AuthProvider} 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. * @return {!firebase.Promise} */ firebase.User.prototype.reauthenticateWithPopup = function(provider) {}; /** * Reauthenticates the current user with the specified OAuth provider using a * full-page redirect flow. * *

Error Codes

*
*
auth/auth-domain-config-required
*
Thrown if authDomain configuration is not provided when calling * firebase.initializeApp(). Check Firebase Console for instructions on * determining and passing that field.
*
auth/operation-not-supported-in-this-environment
*
Thrown if this operation is not supported in the environment your * application is running on. "location.protocol" must be http or https. *
*
auth/user-mismatch
*
Thrown if the credential given does not correspond to the user.
*
auth/unauthorized-domain
*
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.
*
* * @param {!firebase.auth.AuthProvider} 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. * @return {!firebase.Promise} */ firebase.User.prototype.reauthenticateWithRedirect = function(provider) {}; /** * 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 a UserCredential with a null User. * *

Error Codes

*
*
auth/account-exists-with-different-credential
*
Thrown if there already exists an account with the email address * asserted by the credential. Resolve this by calling * {@link firebase.auth.Auth#fetchProvidersForEmail} 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.
*
auth/auth-domain-config-required
*
Thrown if authDomain configuration is not provided when calling * firebase.initializeApp(). Check Firebase Console for instructions on * determining and passing that field.
*
auth/credential-already-in-use
*
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 error.email and error.credential * ({@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}.
*
auth/email-already-in-use
*
Thrown if the email corresponding to the credential already exists * among your users. When thrown while linking a credential to an existing * user, an error.email and error.credential * ({@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#fetchProvidersForEmail}, sign in to * error.email via one of the providers returned and then * {@link firebase.User#linkWithCredential} the original credential to that * newly signed in user.
*
auth/operation-not-allowed
*
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.
*
auth/operation-not-supported-in-this-environment
*
Thrown if this operation is not supported in the environment your * application is running on. "location.protocol" must be http or https. *
*
auth/timeout
*
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.
*
* * @example * // 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.fetchProvidersForEmail(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. * }); * } * }); * * @return {!firebase.Promise} */ firebase.auth.Auth.prototype.getRedirectResult = function() {}; /** * An {@link https://www.google.com/recaptcha/ reCAPTCHA}-based application * verifier. * @param {!Element|string} 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 {?Object=} 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 {?firebase.app.App=} 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. * @constructor * @implements {firebase.auth.ApplicationVerifier} */ firebase.auth.RecaptchaVerifier = function(container, parameters, app) {}; /** * The application verifier type. For a reCAPTCHA verifier, this is 'recaptcha'. * @type {string} */ firebase.auth.RecaptchaVerifier.prototype.type; /** * Clears the reCAPTCHA widget from the page and destroys the current instance. */ firebase.auth.RecaptchaVerifier.prototype.clear = function() {}; /** * Renders the reCAPTCHA widget on the page. * @return {!firebase.Promise} A Promise that resolves with the * reCAPTCHA widget ID. */ firebase.auth.RecaptchaVerifier.prototype.render = function() {}; /** * Waits for the user to solve the reCAPTCHA and resolves with the reCAPTCHA * token. * @return {!firebase.Promise} A Promise for the reCAPTCHA token. */ firebase.auth.RecaptchaVerifier.prototype.verify = function() {};