@firebase/auth 1.13.1 → 1.13.2-eap-crashlytics.558ee841d

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/browser-cjs/{index-58b444b9.js → index-223cb6d8.js} +55 -15
  2. package/dist/browser-cjs/index-223cb6d8.js.map +1 -0
  3. package/dist/browser-cjs/index.js +1 -1
  4. package/dist/browser-cjs/internal.js +1 -1
  5. package/dist/browser-cjs/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +18 -0
  6. package/dist/browser-cjs/test/helpers/mock_loadjs.d.ts +17 -0
  7. package/dist/cordova/index.js +2 -2
  8. package/dist/cordova/internal.js +2 -2
  9. package/dist/cordova/{popup_redirect-e90e6597.js → popup_redirect-8f954bab.js} +56 -16
  10. package/dist/cordova/popup_redirect-8f954bab.js.map +1 -0
  11. package/dist/cordova/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +18 -0
  12. package/dist/cordova/test/helpers/mock_loadjs.d.ts +17 -0
  13. package/dist/esm/{index-907e9a1a.js → index-42b2f63a.js} +56 -16
  14. package/dist/esm/index-42b2f63a.js.map +1 -0
  15. package/dist/esm/index.js +1 -1
  16. package/dist/esm/internal.js +2 -2
  17. package/dist/esm/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +18 -0
  18. package/dist/esm/test/helpers/mock_loadjs.d.ts +17 -0
  19. package/dist/index.webworker.js +55 -15
  20. package/dist/index.webworker.js.map +1 -1
  21. package/dist/node/index.js +1 -1
  22. package/dist/node/internal.js +1 -1
  23. package/dist/node/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +18 -0
  24. package/dist/node/test/helpers/mock_loadjs.d.ts +17 -0
  25. package/dist/node/{totp-ec1dc837.js → totp-1de3d98e.js} +39 -5
  26. package/dist/node/totp-1de3d98e.js.map +1 -0
  27. package/dist/node-esm/index.js +1 -1
  28. package/dist/node-esm/internal.js +2 -2
  29. package/dist/node-esm/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +18 -0
  30. package/dist/node-esm/test/helpers/mock_loadjs.d.ts +17 -0
  31. package/dist/node-esm/{totp-97daafa8.js → totp-16b08ec9.js} +40 -6
  32. package/dist/node-esm/totp-16b08ec9.js.map +1 -0
  33. package/dist/rn/{index-ec5272bc.js → index-3c01bc90.js} +39 -5
  34. package/dist/rn/index-3c01bc90.js.map +1 -0
  35. package/dist/rn/index.js +1 -1
  36. package/dist/rn/internal.js +18 -12
  37. package/dist/rn/internal.js.map +1 -1
  38. package/dist/rn/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +18 -0
  39. package/dist/rn/test/helpers/mock_loadjs.d.ts +17 -0
  40. package/dist/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +18 -0
  41. package/dist/test/helpers/mock_loadjs.d.ts +17 -0
  42. package/dist/web-extension-cjs/index.js +1 -1
  43. package/dist/web-extension-cjs/internal.js +1 -1
  44. package/dist/web-extension-cjs/{register-410eef86.js → register-6a93d6fa.js} +55 -15
  45. package/dist/web-extension-cjs/register-6a93d6fa.js.map +1 -0
  46. package/dist/web-extension-cjs/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +18 -0
  47. package/dist/web-extension-cjs/test/helpers/mock_loadjs.d.ts +17 -0
  48. package/dist/web-extension-esm/index.js +2 -2
  49. package/dist/web-extension-esm/internal.js +2 -2
  50. package/dist/web-extension-esm/{register-4207f7c7.js → register-6e13f5d2.js} +56 -16
  51. package/dist/web-extension-esm/register-6e13f5d2.js.map +1 -0
  52. package/dist/web-extension-esm/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +18 -0
  53. package/dist/web-extension-esm/test/helpers/mock_loadjs.d.ts +17 -0
  54. package/package.json +6 -6
  55. package/dist/browser-cjs/index-58b444b9.js.map +0 -1
  56. package/dist/cordova/popup_redirect-e90e6597.js.map +0 -1
  57. package/dist/esm/index-907e9a1a.js.map +0 -1
  58. package/dist/node/totp-ec1dc837.js.map +0 -1
  59. package/dist/node-esm/totp-97daafa8.js.map +0 -1
  60. package/dist/rn/index-ec5272bc.js.map +0 -1
  61. package/dist/web-extension-cjs/register-410eef86.js.map +0 -1
  62. package/dist/web-extension-esm/register-4207f7c7.js.map +0 -1
@@ -3431,6 +3431,7 @@ function generateRandomAlphaNumericString(len) {
3431
3431
  /* eslint-disable @typescript-eslint/no-require-imports */
3432
3432
  const RECAPTCHA_ENTERPRISE_VERIFIER_TYPE = 'recaptcha-enterprise';
3433
3433
  const FAKE_TOKEN = 'NO_RECAPTCHA';
3434
+ const RECAPTCHA_ENTERPRISE_ONLOAD_CALLBACK_NAME = 'onFirebaseAuthREInstanceReady';
3434
3435
  class RecaptchaEnterpriseVerifier {
3435
3436
  /**
3436
3437
  *
@@ -3510,8 +3511,13 @@ class RecaptchaEnterpriseVerifier {
3510
3511
  }
3511
3512
  return new Promise((resolve, reject) => {
3512
3513
  retrieveSiteKey(this.auth)
3513
- .then(siteKey => {
3514
- if (!forceRefresh && isEnterprise(window.grecaptcha)) {
3514
+ .then(async (siteKey) => {
3515
+ if (!forceRefresh &&
3516
+ isEnterprise(window.grecaptcha) &&
3517
+ // If download has already been initiated, do not trigger another
3518
+ // download, await the promise here.
3519
+ RecaptchaEnterpriseVerifier.scriptInjectionDeferred) {
3520
+ await RecaptchaEnterpriseVerifier.scriptInjectionDeferred.promise;
3515
3521
  retrieveRecaptchaToken(siteKey, resolve, reject);
3516
3522
  }
3517
3523
  else {
@@ -3521,9 +3527,25 @@ class RecaptchaEnterpriseVerifier {
3521
3527
  }
3522
3528
  let url = _recaptchaEnterpriseScriptUrl();
3523
3529
  if (url.length !== 0) {
3524
- url += siteKey;
3530
+ url +=
3531
+ siteKey +
3532
+ `&onload=${RECAPTCHA_ENTERPRISE_ONLOAD_CALLBACK_NAME}`;
3525
3533
  }
3534
+ // Existence of deferred indicates download has been initiated.
3535
+ RecaptchaEnterpriseVerifier.scriptInjectionDeferred =
3536
+ new util.Deferred();
3537
+ /**
3538
+ * Script attached to global window object that will be called
3539
+ * when the ReCAPTCHA Enterprise instance is ready.
3540
+ * grecaptcha.ready() is not reliable when there are multiple
3541
+ * scripts on the page, and script.onload only indicates the
3542
+ * script has downloaded, not that it has initialized.
3543
+ */
3544
+ window[RECAPTCHA_ENTERPRISE_ONLOAD_CALLBACK_NAME] = () => {
3545
+ RecaptchaEnterpriseVerifier.scriptInjectionDeferred?.resolve();
3546
+ };
3526
3547
  _loadJS(url)
3548
+ .then(() => RecaptchaEnterpriseVerifier.scriptInjectionDeferred?.promise)
3527
3549
  .then(() => {
3528
3550
  retrieveRecaptchaToken(siteKey, resolve, reject);
3529
3551
  })
@@ -3538,6 +3560,18 @@ class RecaptchaEnterpriseVerifier {
3538
3560
  });
3539
3561
  }
3540
3562
  }
3563
+ /**
3564
+ * Deferred that resolves when script tag has been injected onto the page
3565
+ * and the script is ready (grecaptcha.ready() and script.onload are not
3566
+ * reliable indicators, so this resolves when the global
3567
+ * `window[RECAPTCHA_ENTERPRISE_ONLOAD_CALLBACK_NAME]()` callback provided to the recaptcha url param "onload"
3568
+ * is triggered).
3569
+ * As a static variable this is applied to all instances of the class.
3570
+ * This will cause an error if users try to create multiple RecaptchaVerifiers
3571
+ * with different Recaptcha Enterprise sitekeys, which should be an
3572
+ * unuspported use case.
3573
+ */
3574
+ RecaptchaEnterpriseVerifier.scriptInjectionDeferred = null;
3541
3575
  async function injectRecaptchaFields(auth, request, action, isCaptchaResp = false, isFakeToken = false) {
3542
3576
  const verifier = new RecaptchaEnterpriseVerifier(auth);
3543
3577
  let captchaResponse;
@@ -8193,6 +8227,7 @@ const _TRANSACTION_RETRY_COUNT = 3;
8193
8227
  class IndexedDBLocalPersistence {
8194
8228
  constructor() {
8195
8229
  this.type = "LOCAL" /* PersistenceType.LOCAL */;
8230
+ this.dbPromise = null;
8196
8231
  this._shouldAllowMigration = true;
8197
8232
  this.listeners = {};
8198
8233
  this.localCache = {};
@@ -8209,11 +8244,14 @@ class IndexedDBLocalPersistence {
8209
8244
  this.initializeServiceWorkerMessaging().then(() => { }, () => { });
8210
8245
  }
8211
8246
  async _openDb() {
8212
- if (this.db) {
8213
- return this.db;
8247
+ if (this.dbPromise) {
8248
+ return this.dbPromise;
8214
8249
  }
8215
- this.db = await _openDatabase();
8216
- return this.db;
8250
+ this.dbPromise = _openDatabase();
8251
+ this.dbPromise.catch(() => {
8252
+ this.dbPromise = null;
8253
+ });
8254
+ return this.dbPromise;
8217
8255
  }
8218
8256
  async _withRetries(op) {
8219
8257
  let numAttempts = 0;
@@ -8226,9 +8264,10 @@ class IndexedDBLocalPersistence {
8226
8264
  if (numAttempts++ > _TRANSACTION_RETRY_COUNT) {
8227
8265
  throw e;
8228
8266
  }
8229
- if (this.db) {
8230
- this.db.close();
8231
- this.db = undefined;
8267
+ if (this.dbPromise) {
8268
+ const db = await this.dbPromise;
8269
+ db.close();
8270
+ this.dbPromise = null;
8232
8271
  }
8233
8272
  // TODO: consider adding exponential backoff
8234
8273
  }
@@ -8313,9 +8352,10 @@ class IndexedDBLocalPersistence {
8313
8352
  if (!indexedDB) {
8314
8353
  return false;
8315
8354
  }
8316
- const db = await _openDatabase();
8317
- await _putObject(db, STORAGE_AVAILABLE_KEY, '1');
8318
- await _deleteObject(db, STORAGE_AVAILABLE_KEY);
8355
+ await this._withRetries(async (db) => {
8356
+ await _putObject(db, STORAGE_AVAILABLE_KEY, '1');
8357
+ await _deleteObject(db, STORAGE_AVAILABLE_KEY);
8358
+ });
8319
8359
  return true;
8320
8360
  }
8321
8361
  catch { }
@@ -10901,7 +10941,7 @@ function _isEmptyString(input) {
10901
10941
  }
10902
10942
 
10903
10943
  var name = "@firebase/auth";
10904
- var version = "1.13.1";
10944
+ var version = "1.13.2-eap-crashlytics.558ee841d";
10905
10945
 
10906
10946
  /**
10907
10947
  * @license
@@ -11261,4 +11301,4 @@ exports.useDeviceLanguage = useDeviceLanguage;
11261
11301
  exports.validatePassword = validatePassword;
11262
11302
  exports.verifyBeforeUpdateEmail = verifyBeforeUpdateEmail;
11263
11303
  exports.verifyPasswordResetCode = verifyPasswordResetCode;
11264
- //# sourceMappingURL=index-58b444b9.js.map
11304
+ //# sourceMappingURL=index-223cb6d8.js.map