@firebase/auth 1.7.9-canary.aa6db78eb → 1.7.9-canary.b942e9e6e

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 (148) hide show
  1. package/README.md +32 -1
  2. package/dist/auth-public.d.ts +22 -10
  3. package/dist/auth.d.ts +22 -10
  4. package/dist/browser-cjs/{index-8c4960c5.js → index-c1e3d4f9.js} +392 -175
  5. package/dist/browser-cjs/index-c1e3d4f9.js.map +1 -0
  6. package/dist/browser-cjs/index.js +1 -1
  7. package/dist/browser-cjs/internal.js +1 -1
  8. package/dist/browser-cjs/src/api/account_management/mfa.d.ts +5 -1
  9. package/dist/browser-cjs/src/api/authentication/mfa.d.ts +5 -1
  10. package/dist/browser-cjs/src/api/authentication/sms.d.ts +5 -1
  11. package/dist/browser-cjs/src/api/index.d.ts +7 -3
  12. package/dist/browser-cjs/src/platform_browser/providers/phone.d.ts +7 -5
  13. package/dist/browser-cjs/src/platform_browser/recaptcha/recaptcha.d.ts +7 -0
  14. package/dist/browser-cjs/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +4 -4
  15. package/dist/browser-cjs/src/platform_browser/strategies/phone.d.ts +10 -6
  16. package/dist/browser-cjs/test/integration/flows/recaptcha_enterprise.test.d.ts +17 -0
  17. package/dist/cordova/auth-cordova-public.d.ts +7 -0
  18. package/dist/cordova/auth-cordova.d.ts +7 -0
  19. package/dist/cordova/index.js +2 -2
  20. package/dist/cordova/internal.js +168 -177
  21. package/dist/cordova/internal.js.map +1 -1
  22. package/dist/cordova/{popup_redirect-1e109c2a.js → popup_redirect-63b3580d.js} +285 -21
  23. package/dist/cordova/popup_redirect-63b3580d.js.map +1 -0
  24. package/dist/cordova/src/api/account_management/mfa.d.ts +5 -1
  25. package/dist/cordova/src/api/authentication/mfa.d.ts +5 -1
  26. package/dist/cordova/src/api/authentication/sms.d.ts +5 -1
  27. package/dist/cordova/src/api/index.d.ts +7 -3
  28. package/dist/cordova/src/platform_browser/providers/phone.d.ts +7 -5
  29. package/dist/cordova/src/platform_browser/recaptcha/recaptcha.d.ts +7 -0
  30. package/dist/cordova/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +4 -4
  31. package/dist/cordova/src/platform_browser/strategies/phone.d.ts +10 -6
  32. package/dist/cordova/test/integration/flows/recaptcha_enterprise.test.d.ts +17 -0
  33. package/dist/esm2017/{index-6cb7b51a.js → index-c8d513e3.js} +392 -175
  34. package/dist/esm2017/index-c8d513e3.js.map +1 -0
  35. package/dist/esm2017/index.js +1 -1
  36. package/dist/esm2017/internal.js +2 -2
  37. package/dist/esm2017/src/api/account_management/mfa.d.ts +5 -1
  38. package/dist/esm2017/src/api/authentication/mfa.d.ts +5 -1
  39. package/dist/esm2017/src/api/authentication/sms.d.ts +5 -1
  40. package/dist/esm2017/src/api/index.d.ts +7 -3
  41. package/dist/esm2017/src/platform_browser/providers/phone.d.ts +7 -5
  42. package/dist/esm2017/src/platform_browser/recaptcha/recaptcha.d.ts +7 -0
  43. package/dist/esm2017/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +4 -4
  44. package/dist/esm2017/src/platform_browser/strategies/phone.d.ts +10 -6
  45. package/dist/esm2017/test/integration/flows/recaptcha_enterprise.test.d.ts +17 -0
  46. package/dist/esm5/{index-262b3f24.js → index-82b3e33f.js} +450 -195
  47. package/dist/esm5/index-82b3e33f.js.map +1 -0
  48. package/dist/esm5/index.js +1 -1
  49. package/dist/esm5/internal.js +2 -2
  50. package/dist/esm5/src/api/account_management/mfa.d.ts +5 -1
  51. package/dist/esm5/src/api/authentication/mfa.d.ts +5 -1
  52. package/dist/esm5/src/api/authentication/sms.d.ts +5 -1
  53. package/dist/esm5/src/api/index.d.ts +7 -3
  54. package/dist/esm5/src/platform_browser/providers/phone.d.ts +7 -5
  55. package/dist/esm5/src/platform_browser/recaptcha/recaptcha.d.ts +7 -0
  56. package/dist/esm5/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +4 -4
  57. package/dist/esm5/src/platform_browser/strategies/phone.d.ts +10 -6
  58. package/dist/esm5/test/integration/flows/recaptcha_enterprise.test.d.ts +17 -0
  59. package/dist/index.webworker.esm5.js +163 -19
  60. package/dist/index.webworker.esm5.js.map +1 -1
  61. package/dist/node/index.js +1 -1
  62. package/dist/node/internal.js +1 -1
  63. package/dist/node/src/api/account_management/mfa.d.ts +5 -1
  64. package/dist/node/src/api/authentication/mfa.d.ts +5 -1
  65. package/dist/node/src/api/authentication/sms.d.ts +5 -1
  66. package/dist/node/src/api/index.d.ts +7 -3
  67. package/dist/node/src/platform_browser/providers/phone.d.ts +7 -5
  68. package/dist/node/src/platform_browser/recaptcha/recaptcha.d.ts +7 -0
  69. package/dist/node/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +4 -4
  70. package/dist/node/src/platform_browser/strategies/phone.d.ts +10 -6
  71. package/dist/node/test/integration/flows/recaptcha_enterprise.test.d.ts +17 -0
  72. package/dist/node/{totp-617e4db6.js → totp-c9a669c7.js} +164 -20
  73. package/dist/node/totp-c9a669c7.js.map +1 -0
  74. package/dist/node-esm/index.js +1 -1
  75. package/dist/node-esm/internal.js +2 -2
  76. package/dist/node-esm/src/api/account_management/mfa.d.ts +5 -1
  77. package/dist/node-esm/src/api/authentication/mfa.d.ts +5 -1
  78. package/dist/node-esm/src/api/authentication/sms.d.ts +5 -1
  79. package/dist/node-esm/src/api/index.d.ts +7 -3
  80. package/dist/node-esm/src/platform_browser/providers/phone.d.ts +7 -5
  81. package/dist/node-esm/src/platform_browser/recaptcha/recaptcha.d.ts +7 -0
  82. package/dist/node-esm/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +4 -4
  83. package/dist/node-esm/src/platform_browser/strategies/phone.d.ts +10 -6
  84. package/dist/node-esm/test/integration/flows/recaptcha_enterprise.test.d.ts +17 -0
  85. package/dist/node-esm/{totp-98ba6f1f.js → totp-9698d31a.js} +168 -30
  86. package/dist/node-esm/totp-9698d31a.js.map +1 -0
  87. package/dist/rn/{index-198b1e87.js → index-dd6cc9b0.js} +450 -195
  88. package/dist/rn/index-dd6cc9b0.js.map +1 -0
  89. package/dist/rn/index.js +1 -1
  90. package/dist/rn/internal.js +1 -1
  91. package/dist/rn/src/api/account_management/mfa.d.ts +5 -1
  92. package/dist/rn/src/api/authentication/mfa.d.ts +5 -1
  93. package/dist/rn/src/api/authentication/sms.d.ts +5 -1
  94. package/dist/rn/src/api/index.d.ts +7 -3
  95. package/dist/rn/src/platform_browser/providers/phone.d.ts +7 -5
  96. package/dist/rn/src/platform_browser/recaptcha/recaptcha.d.ts +7 -0
  97. package/dist/rn/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +4 -4
  98. package/dist/rn/src/platform_browser/strategies/phone.d.ts +10 -6
  99. package/dist/rn/test/integration/flows/recaptcha_enterprise.test.d.ts +17 -0
  100. package/dist/src/api/account_management/mfa.d.ts +5 -1
  101. package/dist/src/api/authentication/mfa.d.ts +5 -1
  102. package/dist/src/api/authentication/sms.d.ts +5 -1
  103. package/dist/src/api/index.d.ts +7 -3
  104. package/dist/src/platform_browser/providers/phone.d.ts +7 -5
  105. package/dist/src/platform_browser/recaptcha/recaptcha.d.ts +7 -0
  106. package/dist/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +4 -4
  107. package/dist/src/platform_browser/strategies/phone.d.ts +10 -6
  108. package/dist/test/integration/flows/recaptcha_enterprise.test.d.ts +17 -0
  109. package/dist/web-extension-cjs/index.js +1 -1
  110. package/dist/web-extension-cjs/internal.js +115 -147
  111. package/dist/web-extension-cjs/internal.js.map +1 -1
  112. package/dist/web-extension-cjs/{register-0aa8e295.js → register-1a706c5a.js} +283 -30
  113. package/dist/web-extension-cjs/register-1a706c5a.js.map +1 -0
  114. package/dist/web-extension-cjs/src/api/account_management/mfa.d.ts +5 -1
  115. package/dist/web-extension-cjs/src/api/authentication/mfa.d.ts +5 -1
  116. package/dist/web-extension-cjs/src/api/authentication/sms.d.ts +5 -1
  117. package/dist/web-extension-cjs/src/api/index.d.ts +7 -3
  118. package/dist/web-extension-cjs/src/platform_browser/providers/phone.d.ts +7 -5
  119. package/dist/web-extension-cjs/src/platform_browser/recaptcha/recaptcha.d.ts +7 -0
  120. package/dist/web-extension-cjs/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +4 -4
  121. package/dist/web-extension-cjs/src/platform_browser/strategies/phone.d.ts +10 -6
  122. package/dist/web-extension-cjs/test/integration/flows/recaptcha_enterprise.test.d.ts +17 -0
  123. package/dist/web-extension-esm2017/auth-web-extension-public.d.ts +7 -0
  124. package/dist/web-extension-esm2017/auth-web-extension.d.ts +7 -0
  125. package/dist/web-extension-esm2017/index.js +2 -2
  126. package/dist/web-extension-esm2017/internal.js +115 -147
  127. package/dist/web-extension-esm2017/internal.js.map +1 -1
  128. package/dist/web-extension-esm2017/{register-68ef89ff.js → register-3c017834.js} +280 -31
  129. package/dist/web-extension-esm2017/register-3c017834.js.map +1 -0
  130. package/dist/web-extension-esm2017/src/api/account_management/mfa.d.ts +5 -1
  131. package/dist/web-extension-esm2017/src/api/authentication/mfa.d.ts +5 -1
  132. package/dist/web-extension-esm2017/src/api/authentication/sms.d.ts +5 -1
  133. package/dist/web-extension-esm2017/src/api/index.d.ts +7 -3
  134. package/dist/web-extension-esm2017/src/platform_browser/providers/phone.d.ts +7 -5
  135. package/dist/web-extension-esm2017/src/platform_browser/recaptcha/recaptcha.d.ts +7 -0
  136. package/dist/web-extension-esm2017/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +4 -4
  137. package/dist/web-extension-esm2017/src/platform_browser/strategies/phone.d.ts +10 -6
  138. package/dist/web-extension-esm2017/test/integration/flows/recaptcha_enterprise.test.d.ts +17 -0
  139. package/package.json +6 -6
  140. package/dist/browser-cjs/index-8c4960c5.js.map +0 -1
  141. package/dist/cordova/popup_redirect-1e109c2a.js.map +0 -1
  142. package/dist/esm2017/index-6cb7b51a.js.map +0 -1
  143. package/dist/esm5/index-262b3f24.js.map +0 -1
  144. package/dist/node/totp-617e4db6.js.map +0 -1
  145. package/dist/node-esm/totp-98ba6f1f.js.map +0 -1
  146. package/dist/rn/index-198b1e87.js.map +0 -1
  147. package/dist/web-extension-cjs/register-0aa8e295.js.map +0 -1
  148. package/dist/web-extension-esm2017/register-68ef89ff.js.map +0 -1
@@ -1068,6 +1068,16 @@ var RecaptchaConfig = /** @class */ (function () {
1068
1068
  "ENFORCE" /* EnforcementState.ENFORCE */ ||
1069
1069
  this.getProviderEnforcementState(providerStr) === "AUDIT" /* EnforcementState.AUDIT */);
1070
1070
  };
1071
+ /**
1072
+ * Returns true if reCAPTCHA Enterprise protection is enabled in at least one provider, otherwise
1073
+ * returns false.
1074
+ *
1075
+ * @returns Whether or not reCAPTCHA Enterprise protection is enabled for at least one provider.
1076
+ */
1077
+ RecaptchaConfig.prototype.isAnyProviderEnabled = function () {
1078
+ return (this.isProviderEnabled("EMAIL_PASSWORD_PROVIDER" /* RecaptchaAuthProvider.EMAIL_PASSWORD_PROVIDER */) ||
1079
+ this.isProviderEnabled("PHONE_PROVIDER" /* RecaptchaAuthProvider.PHONE_PROVIDER */));
1080
+ };
1071
1081
  return RecaptchaConfig;
1072
1082
  }());
1073
1083
 
@@ -3737,6 +3747,180 @@ function _generateCallbackName(prefix) {
3737
3747
  return "__".concat(prefix).concat(Math.floor(Math.random() * 1000000));
3738
3748
  }
3739
3749
 
3750
+ /**
3751
+ * @license
3752
+ * Copyright 2020 Google LLC
3753
+ *
3754
+ * Licensed under the Apache License, Version 2.0 (the "License");
3755
+ * you may not use this file except in compliance with the License.
3756
+ * You may obtain a copy of the License at
3757
+ *
3758
+ * http://www.apache.org/licenses/LICENSE-2.0
3759
+ *
3760
+ * Unless required by applicable law or agreed to in writing, software
3761
+ * distributed under the License is distributed on an "AS IS" BASIS,
3762
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3763
+ * See the License for the specific language governing permissions and
3764
+ * limitations under the License.
3765
+ */
3766
+ var _SOLVE_TIME_MS = 500;
3767
+ var _EXPIRATION_TIME_MS = 60000;
3768
+ var _WIDGET_ID_START = 1000000000000;
3769
+ var MockReCaptcha = /** @class */ (function () {
3770
+ function MockReCaptcha(auth) {
3771
+ this.auth = auth;
3772
+ this.counter = _WIDGET_ID_START;
3773
+ this._widgets = new Map();
3774
+ }
3775
+ MockReCaptcha.prototype.render = function (container, parameters) {
3776
+ var id = this.counter;
3777
+ this._widgets.set(id, new MockWidget(container, this.auth.name, parameters || {}));
3778
+ this.counter++;
3779
+ return id;
3780
+ };
3781
+ MockReCaptcha.prototype.reset = function (optWidgetId) {
3782
+ var _a;
3783
+ var id = optWidgetId || _WIDGET_ID_START;
3784
+ void ((_a = this._widgets.get(id)) === null || _a === void 0 ? void 0 : _a.delete());
3785
+ this._widgets.delete(id);
3786
+ };
3787
+ MockReCaptcha.prototype.getResponse = function (optWidgetId) {
3788
+ var _a;
3789
+ var id = optWidgetId || _WIDGET_ID_START;
3790
+ return ((_a = this._widgets.get(id)) === null || _a === void 0 ? void 0 : _a.getResponse()) || '';
3791
+ };
3792
+ MockReCaptcha.prototype.execute = function (optWidgetId) {
3793
+ var _a;
3794
+ return tslib.__awaiter(this, void 0, void 0, function () {
3795
+ var id;
3796
+ return tslib.__generator(this, function (_b) {
3797
+ id = optWidgetId || _WIDGET_ID_START;
3798
+ void ((_a = this._widgets.get(id)) === null || _a === void 0 ? void 0 : _a.execute());
3799
+ return [2 /*return*/, ''];
3800
+ });
3801
+ });
3802
+ };
3803
+ return MockReCaptcha;
3804
+ }());
3805
+ var MockGreCAPTCHATopLevel = /** @class */ (function () {
3806
+ function MockGreCAPTCHATopLevel() {
3807
+ this.enterprise = new MockGreCAPTCHA();
3808
+ }
3809
+ MockGreCAPTCHATopLevel.prototype.ready = function (callback) {
3810
+ callback();
3811
+ };
3812
+ MockGreCAPTCHATopLevel.prototype.execute = function (
3813
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
3814
+ _siteKey, _options) {
3815
+ return Promise.resolve('token');
3816
+ };
3817
+ MockGreCAPTCHATopLevel.prototype.render = function (
3818
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
3819
+ _container, _parameters) {
3820
+ return '';
3821
+ };
3822
+ return MockGreCAPTCHATopLevel;
3823
+ }());
3824
+ var MockGreCAPTCHA = /** @class */ (function () {
3825
+ function MockGreCAPTCHA() {
3826
+ }
3827
+ MockGreCAPTCHA.prototype.ready = function (callback) {
3828
+ callback();
3829
+ };
3830
+ MockGreCAPTCHA.prototype.execute = function (
3831
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
3832
+ _siteKey, _options) {
3833
+ return Promise.resolve('token');
3834
+ };
3835
+ MockGreCAPTCHA.prototype.render = function (
3836
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
3837
+ _container, _parameters) {
3838
+ return '';
3839
+ };
3840
+ return MockGreCAPTCHA;
3841
+ }());
3842
+ var MockWidget = /** @class */ (function () {
3843
+ function MockWidget(containerOrId, appName, params) {
3844
+ var _this = this;
3845
+ this.params = params;
3846
+ this.timerId = null;
3847
+ this.deleted = false;
3848
+ this.responseToken = null;
3849
+ this.clickHandler = function () {
3850
+ _this.execute();
3851
+ };
3852
+ var container = typeof containerOrId === 'string'
3853
+ ? document.getElementById(containerOrId)
3854
+ : containerOrId;
3855
+ _assert(container, "argument-error" /* AuthErrorCode.ARGUMENT_ERROR */, { appName: appName });
3856
+ this.container = container;
3857
+ this.isVisible = this.params.size !== 'invisible';
3858
+ if (this.isVisible) {
3859
+ this.execute();
3860
+ }
3861
+ else {
3862
+ this.container.addEventListener('click', this.clickHandler);
3863
+ }
3864
+ }
3865
+ MockWidget.prototype.getResponse = function () {
3866
+ this.checkIfDeleted();
3867
+ return this.responseToken;
3868
+ };
3869
+ MockWidget.prototype.delete = function () {
3870
+ this.checkIfDeleted();
3871
+ this.deleted = true;
3872
+ if (this.timerId) {
3873
+ clearTimeout(this.timerId);
3874
+ this.timerId = null;
3875
+ }
3876
+ this.container.removeEventListener('click', this.clickHandler);
3877
+ };
3878
+ MockWidget.prototype.execute = function () {
3879
+ var _this = this;
3880
+ this.checkIfDeleted();
3881
+ if (this.timerId) {
3882
+ return;
3883
+ }
3884
+ this.timerId = window.setTimeout(function () {
3885
+ _this.responseToken = generateRandomAlphaNumericString(50);
3886
+ var _a = _this.params, callback = _a.callback, expiredCallback = _a["expired-callback"];
3887
+ if (callback) {
3888
+ try {
3889
+ callback(_this.responseToken);
3890
+ }
3891
+ catch (e) { }
3892
+ }
3893
+ _this.timerId = window.setTimeout(function () {
3894
+ _this.timerId = null;
3895
+ _this.responseToken = null;
3896
+ if (expiredCallback) {
3897
+ try {
3898
+ expiredCallback();
3899
+ }
3900
+ catch (e) { }
3901
+ }
3902
+ if (_this.isVisible) {
3903
+ _this.execute();
3904
+ }
3905
+ }, _EXPIRATION_TIME_MS);
3906
+ }, _SOLVE_TIME_MS);
3907
+ };
3908
+ MockWidget.prototype.checkIfDeleted = function () {
3909
+ if (this.deleted) {
3910
+ throw new Error('reCAPTCHA mock was already deleted!');
3911
+ }
3912
+ };
3913
+ return MockWidget;
3914
+ }());
3915
+ function generateRandomAlphaNumericString(len) {
3916
+ var chars = [];
3917
+ var allowedChars = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
3918
+ for (var i = 0; i < len; i++) {
3919
+ chars.push(allowedChars.charAt(Math.floor(Math.random() * allowedChars.length)));
3920
+ }
3921
+ return chars.join('');
3922
+ }
3923
+
3740
3924
  /* eslint-disable @typescript-eslint/no-require-imports */
3741
3925
  var RECAPTCHA_ENTERPRISE_VERIFIER_TYPE = 'recaptcha-enterprise';
3742
3926
  var FAKE_TOKEN = 'NO_RECAPTCHA';
@@ -3823,8 +4007,14 @@ var RecaptchaEnterpriseVerifier = /** @class */ (function () {
3823
4007
  reject(Error('No reCAPTCHA enterprise script loaded.'));
3824
4008
  }
3825
4009
  }
4010
+ var mockRecaptcha;
3826
4011
  var _this = this;
3827
4012
  return tslib.__generator(this, function (_a) {
4013
+ // Returns Promise for a mock token when appVerificationDisabledForTesting is true.
4014
+ if (this.auth.settings.appVerificationDisabledForTesting) {
4015
+ mockRecaptcha = new MockGreCAPTCHATopLevel();
4016
+ return [2 /*return*/, mockRecaptcha.execute('siteKey', { action: 'verify' })];
4017
+ }
3828
4018
  return [2 /*return*/, new Promise(function (resolve, reject) {
3829
4019
  retrieveSiteKey(_this.auth)
3830
4020
  .then(function (siteKey) {
@@ -3858,15 +4048,18 @@ var RecaptchaEnterpriseVerifier = /** @class */ (function () {
3858
4048
  };
3859
4049
  return RecaptchaEnterpriseVerifier;
3860
4050
  }());
3861
- function injectRecaptchaFields(auth, request, action, captchaResp) {
3862
- if (captchaResp === void 0) { captchaResp = false; }
4051
+ function injectRecaptchaFields(auth, request, action, isCaptchaResp, isFakeToken) {
4052
+ if (isCaptchaResp === void 0) { isCaptchaResp = false; }
4053
+ if (isFakeToken === void 0) { isFakeToken = false; }
3863
4054
  return tslib.__awaiter(this, void 0, void 0, function () {
3864
- var verifier, captchaResponse, newRequest;
4055
+ var verifier, captchaResponse, newRequest, phoneNumber, recaptchaToken, recaptchaToken;
3865
4056
  return tslib.__generator(this, function (_a) {
3866
4057
  switch (_a.label) {
3867
4058
  case 0:
3868
4059
  verifier = new RecaptchaEnterpriseVerifier(auth);
3869
- _a.label = 1;
4060
+ if (!isFakeToken) return [3 /*break*/, 1];
4061
+ captchaResponse = FAKE_TOKEN;
4062
+ return [3 /*break*/, 5];
3870
4063
  case 1:
3871
4064
  _a.trys.push([1, 3, , 5]);
3872
4065
  return [4 /*yield*/, verifier.verify(action)];
@@ -3881,7 +4074,35 @@ function injectRecaptchaFields(auth, request, action, captchaResp) {
3881
4074
  return [3 /*break*/, 5];
3882
4075
  case 5:
3883
4076
  newRequest = tslib.__assign({}, request);
3884
- if (!captchaResp) {
4077
+ if (action === "mfaSmsEnrollment" /* RecaptchaActionName.MFA_SMS_ENROLLMENT */ ||
4078
+ action === "mfaSmsSignIn" /* RecaptchaActionName.MFA_SMS_SIGNIN */) {
4079
+ if ('phoneEnrollmentInfo' in newRequest) {
4080
+ phoneNumber = newRequest.phoneEnrollmentInfo.phoneNumber;
4081
+ recaptchaToken = newRequest.phoneEnrollmentInfo.recaptchaToken;
4082
+ Object.assign(newRequest, {
4083
+ 'phoneEnrollmentInfo': {
4084
+ phoneNumber: phoneNumber,
4085
+ recaptchaToken: recaptchaToken,
4086
+ captchaResponse: captchaResponse,
4087
+ 'clientType': "CLIENT_TYPE_WEB" /* RecaptchaClientType.WEB */,
4088
+ 'recaptchaVersion': "RECAPTCHA_ENTERPRISE" /* RecaptchaVersion.ENTERPRISE */
4089
+ }
4090
+ });
4091
+ }
4092
+ else if ('phoneSignInInfo' in newRequest) {
4093
+ recaptchaToken = newRequest.phoneSignInInfo.recaptchaToken;
4094
+ Object.assign(newRequest, {
4095
+ 'phoneSignInInfo': {
4096
+ recaptchaToken: recaptchaToken,
4097
+ captchaResponse: captchaResponse,
4098
+ 'clientType': "CLIENT_TYPE_WEB" /* RecaptchaClientType.WEB */,
4099
+ 'recaptchaVersion': "RECAPTCHA_ENTERPRISE" /* RecaptchaVersion.ENTERPRISE */
4100
+ }
4101
+ });
4102
+ }
4103
+ return [2 /*return*/, newRequest];
4104
+ }
4105
+ if (!isCaptchaResp) {
3885
4106
  Object.assign(newRequest, { captchaResponse: captchaResponse });
3886
4107
  }
3887
4108
  else {
@@ -3896,19 +4117,20 @@ function injectRecaptchaFields(auth, request, action, captchaResp) {
3896
4117
  });
3897
4118
  });
3898
4119
  }
3899
- function handleRecaptchaFlow(authInstance, request, actionName, actionMethod) {
3900
- var _a;
4120
+ function handleRecaptchaFlow(authInstance, request, actionName, actionMethod, recaptchaAuthProvider) {
4121
+ var _a, _b;
3901
4122
  return tslib.__awaiter(this, void 0, void 0, function () {
3902
- var requestWithRecaptcha;
4123
+ var requestWithRecaptcha, requestWithRecaptcha, requestWithRecaptchaFields;
3903
4124
  var _this = this;
3904
- return tslib.__generator(this, function (_b) {
3905
- switch (_b.label) {
4125
+ return tslib.__generator(this, function (_c) {
4126
+ switch (_c.label) {
3906
4127
  case 0:
4128
+ if (!(recaptchaAuthProvider === "EMAIL_PASSWORD_PROVIDER" /* RecaptchaAuthProvider.EMAIL_PASSWORD_PROVIDER */)) return [3 /*break*/, 4];
3907
4129
  if (!((_a = authInstance
3908
- ._getRecaptchaConfig()) === null || _a === void 0 ? void 0 : _a.isProviderEnabled("EMAIL_PASSWORD_PROVIDER" /* RecaptchaProvider.EMAIL_PASSWORD_PROVIDER */))) return [3 /*break*/, 2];
4130
+ ._getRecaptchaConfig()) === null || _a === void 0 ? void 0 : _a.isProviderEnabled("EMAIL_PASSWORD_PROVIDER" /* RecaptchaAuthProvider.EMAIL_PASSWORD_PROVIDER */))) return [3 /*break*/, 2];
3909
4131
  return [4 /*yield*/, injectRecaptchaFields(authInstance, request, actionName, actionName === "getOobCode" /* RecaptchaActionName.GET_OOB_CODE */)];
3910
4132
  case 1:
3911
- requestWithRecaptcha = _b.sent();
4133
+ requestWithRecaptcha = _c.sent();
3912
4134
  return [2 /*return*/, actionMethod(authInstance, requestWithRecaptcha)];
3913
4135
  case 2: return [2 /*return*/, actionMethod(authInstance, request).catch(function (error) { return tslib.__awaiter(_this, void 0, void 0, function () {
3914
4136
  var requestWithRecaptcha;
@@ -3925,6 +4147,48 @@ function handleRecaptchaFlow(authInstance, request, actionName, actionMethod) {
3925
4147
  }
3926
4148
  });
3927
4149
  }); })];
4150
+ case 3: return [3 /*break*/, 10];
4151
+ case 4:
4152
+ if (!(recaptchaAuthProvider === "PHONE_PROVIDER" /* RecaptchaAuthProvider.PHONE_PROVIDER */)) return [3 /*break*/, 9];
4153
+ if (!((_b = authInstance
4154
+ ._getRecaptchaConfig()) === null || _b === void 0 ? void 0 : _b.isProviderEnabled("PHONE_PROVIDER" /* RecaptchaAuthProvider.PHONE_PROVIDER */))) return [3 /*break*/, 6];
4155
+ return [4 /*yield*/, injectRecaptchaFields(authInstance, request, actionName)];
4156
+ case 5:
4157
+ requestWithRecaptcha = _c.sent();
4158
+ return [2 /*return*/, actionMethod(authInstance, requestWithRecaptcha).catch(function (error) { return tslib.__awaiter(_this, void 0, void 0, function () {
4159
+ var requestWithRecaptchaFields;
4160
+ var _a;
4161
+ return tslib.__generator(this, function (_b) {
4162
+ switch (_b.label) {
4163
+ case 0:
4164
+ if (!(((_a = authInstance
4165
+ ._getRecaptchaConfig()) === null || _a === void 0 ? void 0 : _a.getProviderEnforcementState("PHONE_PROVIDER" /* RecaptchaAuthProvider.PHONE_PROVIDER */)) === "AUDIT" /* EnforcementState.AUDIT */)) return [3 /*break*/, 2];
4166
+ if (!(error.code === "auth/".concat("missing-recaptcha-token" /* AuthErrorCode.MISSING_RECAPTCHA_TOKEN */) ||
4167
+ error.code === "auth/".concat("invalid-app-credential" /* AuthErrorCode.INVALID_APP_CREDENTIAL */))) return [3 /*break*/, 2];
4168
+ console.log("Failed to verify with reCAPTCHA Enterprise. Automatically triggering the reCAPTCHA v2 flow to complete the ".concat(actionName, " flow."));
4169
+ return [4 /*yield*/, injectRecaptchaFields(authInstance, request, actionName, false, // isCaptchaResp
4170
+ true // isFakeToken
4171
+ )];
4172
+ case 1:
4173
+ requestWithRecaptchaFields = _b.sent();
4174
+ // This will call the PhoneApiCaller to fetch and inject reCAPTCHA v2 token.
4175
+ return [2 /*return*/, actionMethod(authInstance, requestWithRecaptchaFields)];
4176
+ case 2:
4177
+ // ENFORCE mode or AUDIT mode with any other error.
4178
+ return [2 /*return*/, Promise.reject(error)];
4179
+ }
4180
+ });
4181
+ }); })];
4182
+ case 6: return [4 /*yield*/, injectRecaptchaFields(authInstance, request, actionName, false, // isCaptchaResp
4183
+ true // isFakeToken
4184
+ )];
4185
+ case 7:
4186
+ requestWithRecaptchaFields = _c.sent();
4187
+ // This will call the PhoneApiCaller to fetch and inject v2 token.
4188
+ return [2 /*return*/, actionMethod(authInstance, requestWithRecaptchaFields)];
4189
+ case 8: return [3 /*break*/, 10];
4190
+ case 9: return [2 /*return*/, Promise.reject(recaptchaAuthProvider + ' provider is not supported.')];
4191
+ case 10: return [2 /*return*/];
3928
4192
  }
3929
4193
  });
3930
4194
  });
@@ -3949,7 +4213,7 @@ function _initializeRecaptchaConfig(auth) {
3949
4213
  else {
3950
4214
  authInternal._tenantRecaptchaConfigs[authInternal.tenantId] = config;
3951
4215
  }
3952
- if (config.isProviderEnabled("EMAIL_PASSWORD_PROVIDER" /* RecaptchaProvider.EMAIL_PASSWORD_PROVIDER */)) {
4216
+ if (config.isAnyProviderEnabled()) {
3953
4217
  verifier = new RecaptchaEnterpriseVerifier(authInternal);
3954
4218
  void verifier.verify();
3955
4219
  }
@@ -4435,7 +4699,7 @@ var EmailAuthCredential = /** @class */ (function (_super) {
4435
4699
  password: this._password,
4436
4700
  clientType: "CLIENT_TYPE_WEB" /* RecaptchaClientType.WEB */
4437
4701
  };
4438
- return [2 /*return*/, handleRecaptchaFlow(auth, request, "signInWithPassword" /* RecaptchaActionName.SIGN_IN_WITH_PASSWORD */, signInWithPassword)];
4702
+ return [2 /*return*/, handleRecaptchaFlow(auth, request, "signInWithPassword" /* RecaptchaActionName.SIGN_IN_WITH_PASSWORD */, signInWithPassword, "EMAIL_PASSWORD_PROVIDER" /* RecaptchaAuthProvider.EMAIL_PASSWORD_PROVIDER */)];
4439
4703
  case "emailLink" /* SignInMethod.EMAIL_LINK */:
4440
4704
  return [2 /*return*/, signInWithEmailLink$1(auth, {
4441
4705
  email: this._email,
@@ -4462,7 +4726,7 @@ var EmailAuthCredential = /** @class */ (function (_super) {
4462
4726
  password: this._password,
4463
4727
  clientType: "CLIENT_TYPE_WEB" /* RecaptchaClientType.WEB */
4464
4728
  };
4465
- return [2 /*return*/, handleRecaptchaFlow(auth, request, "signUpPassword" /* RecaptchaActionName.SIGN_UP_PASSWORD */, linkEmailPassword)];
4729
+ return [2 /*return*/, handleRecaptchaFlow(auth, request, "signUpPassword" /* RecaptchaActionName.SIGN_UP_PASSWORD */, linkEmailPassword, "EMAIL_PASSWORD_PROVIDER" /* RecaptchaAuthProvider.EMAIL_PASSWORD_PROVIDER */)];
4466
4730
  case "emailLink" /* SignInMethod.EMAIL_LINK */:
4467
4731
  return [2 /*return*/, signInWithEmailLinkForLinking(auth, {
4468
4732
  idToken: idToken,
@@ -6705,7 +6969,7 @@ function sendPasswordResetEmail(auth, email, actionCodeSettings) {
6705
6969
  if (actionCodeSettings) {
6706
6970
  _setActionCodeSettingsOnRequest(authInternal, request, actionCodeSettings);
6707
6971
  }
6708
- return [4 /*yield*/, handleRecaptchaFlow(authInternal, request, "getOobCode" /* RecaptchaActionName.GET_OOB_CODE */, sendPasswordResetEmail$1)];
6972
+ return [4 /*yield*/, handleRecaptchaFlow(authInternal, request, "getOobCode" /* RecaptchaActionName.GET_OOB_CODE */, sendPasswordResetEmail$1, "EMAIL_PASSWORD_PROVIDER" /* RecaptchaAuthProvider.EMAIL_PASSWORD_PROVIDER */)];
6709
6973
  case 1:
6710
6974
  _a.sent();
6711
6975
  return [2 /*return*/];
@@ -6881,7 +7145,7 @@ function createUserWithEmailAndPassword(auth, email, password) {
6881
7145
  password: password,
6882
7146
  clientType: "CLIENT_TYPE_WEB" /* RecaptchaClientType.WEB */
6883
7147
  };
6884
- signUpResponse = handleRecaptchaFlow(authInternal, request, "signUpPassword" /* RecaptchaActionName.SIGN_UP_PASSWORD */, signUp);
7148
+ signUpResponse = handleRecaptchaFlow(authInternal, request, "signUpPassword" /* RecaptchaActionName.SIGN_UP_PASSWORD */, signUp, "EMAIL_PASSWORD_PROVIDER" /* RecaptchaAuthProvider.EMAIL_PASSWORD_PROVIDER */);
6885
7149
  return [4 /*yield*/, signUpResponse.catch(function (error) {
6886
7150
  if (error.code === "auth/".concat("password-does-not-meet-requirements" /* AuthErrorCode.PASSWORD_DOES_NOT_MEET_REQUIREMENTS */)) {
6887
7151
  void recachePasswordPolicy(auth);
@@ -7012,7 +7276,7 @@ function sendSignInLinkToEmail(auth, email, actionCodeSettings) {
7012
7276
  clientType: "CLIENT_TYPE_WEB" /* RecaptchaClientType.WEB */
7013
7277
  };
7014
7278
  setActionCodeSettings(request, actionCodeSettings);
7015
- return [4 /*yield*/, handleRecaptchaFlow(authInternal, request, "getOobCode" /* RecaptchaActionName.GET_OOB_CODE */, sendSignInLinkToEmail$1)];
7279
+ return [4 /*yield*/, handleRecaptchaFlow(authInternal, request, "getOobCode" /* RecaptchaActionName.GET_OOB_CODE */, sendSignInLinkToEmail$1, "EMAIL_PASSWORD_PROVIDER" /* RecaptchaAuthProvider.EMAIL_PASSWORD_PROVIDER */)];
7016
7280
  case 1:
7017
7281
  _a.sent();
7018
7282
  return [2 /*return*/];
@@ -8140,7 +8404,7 @@ function multiFactor(user) {
8140
8404
  }
8141
8405
 
8142
8406
  var name = "@firebase/auth";
8143
- var version = "1.7.9-canary.aa6db78eb";
8407
+ var version = "1.7.9-canary.b942e9e6e";
8144
8408
 
8145
8409
  /**
8146
8410
  * @license
@@ -8504,143 +8768,6 @@ function _getWorkerGlobalScope() {
8504
8768
  return _isWorker() ? self : null;
8505
8769
  }
8506
8770
 
8507
- /**
8508
- * @license
8509
- * Copyright 2020 Google LLC
8510
- *
8511
- * Licensed under the Apache License, Version 2.0 (the "License");
8512
- * you may not use this file except in compliance with the License.
8513
- * You may obtain a copy of the License at
8514
- *
8515
- * http://www.apache.org/licenses/LICENSE-2.0
8516
- *
8517
- * Unless required by applicable law or agreed to in writing, software
8518
- * distributed under the License is distributed on an "AS IS" BASIS,
8519
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
8520
- * See the License for the specific language governing permissions and
8521
- * limitations under the License.
8522
- */
8523
- var _SOLVE_TIME_MS = 500;
8524
- var _EXPIRATION_TIME_MS = 60000;
8525
- var _WIDGET_ID_START = 1000000000000;
8526
- var MockReCaptcha = /** @class */ (function () {
8527
- function MockReCaptcha(auth) {
8528
- this.auth = auth;
8529
- this.counter = _WIDGET_ID_START;
8530
- this._widgets = new Map();
8531
- }
8532
- MockReCaptcha.prototype.render = function (container, parameters) {
8533
- var id = this.counter;
8534
- this._widgets.set(id, new MockWidget(container, this.auth.name, parameters || {}));
8535
- this.counter++;
8536
- return id;
8537
- };
8538
- MockReCaptcha.prototype.reset = function (optWidgetId) {
8539
- var _a;
8540
- var id = optWidgetId || _WIDGET_ID_START;
8541
- void ((_a = this._widgets.get(id)) === null || _a === void 0 ? void 0 : _a.delete());
8542
- this._widgets.delete(id);
8543
- };
8544
- MockReCaptcha.prototype.getResponse = function (optWidgetId) {
8545
- var _a;
8546
- var id = optWidgetId || _WIDGET_ID_START;
8547
- return ((_a = this._widgets.get(id)) === null || _a === void 0 ? void 0 : _a.getResponse()) || '';
8548
- };
8549
- MockReCaptcha.prototype.execute = function (optWidgetId) {
8550
- var _a;
8551
- return tslib.__awaiter(this, void 0, void 0, function () {
8552
- var id;
8553
- return tslib.__generator(this, function (_b) {
8554
- id = optWidgetId || _WIDGET_ID_START;
8555
- void ((_a = this._widgets.get(id)) === null || _a === void 0 ? void 0 : _a.execute());
8556
- return [2 /*return*/, ''];
8557
- });
8558
- });
8559
- };
8560
- return MockReCaptcha;
8561
- }());
8562
- var MockWidget = /** @class */ (function () {
8563
- function MockWidget(containerOrId, appName, params) {
8564
- var _this = this;
8565
- this.params = params;
8566
- this.timerId = null;
8567
- this.deleted = false;
8568
- this.responseToken = null;
8569
- this.clickHandler = function () {
8570
- _this.execute();
8571
- };
8572
- var container = typeof containerOrId === 'string'
8573
- ? document.getElementById(containerOrId)
8574
- : containerOrId;
8575
- _assert(container, "argument-error" /* AuthErrorCode.ARGUMENT_ERROR */, { appName: appName });
8576
- this.container = container;
8577
- this.isVisible = this.params.size !== 'invisible';
8578
- if (this.isVisible) {
8579
- this.execute();
8580
- }
8581
- else {
8582
- this.container.addEventListener('click', this.clickHandler);
8583
- }
8584
- }
8585
- MockWidget.prototype.getResponse = function () {
8586
- this.checkIfDeleted();
8587
- return this.responseToken;
8588
- };
8589
- MockWidget.prototype.delete = function () {
8590
- this.checkIfDeleted();
8591
- this.deleted = true;
8592
- if (this.timerId) {
8593
- clearTimeout(this.timerId);
8594
- this.timerId = null;
8595
- }
8596
- this.container.removeEventListener('click', this.clickHandler);
8597
- };
8598
- MockWidget.prototype.execute = function () {
8599
- var _this = this;
8600
- this.checkIfDeleted();
8601
- if (this.timerId) {
8602
- return;
8603
- }
8604
- this.timerId = window.setTimeout(function () {
8605
- _this.responseToken = generateRandomAlphaNumericString(50);
8606
- var _a = _this.params, callback = _a.callback, expiredCallback = _a["expired-callback"];
8607
- if (callback) {
8608
- try {
8609
- callback(_this.responseToken);
8610
- }
8611
- catch (e) { }
8612
- }
8613
- _this.timerId = window.setTimeout(function () {
8614
- _this.timerId = null;
8615
- _this.responseToken = null;
8616
- if (expiredCallback) {
8617
- try {
8618
- expiredCallback();
8619
- }
8620
- catch (e) { }
8621
- }
8622
- if (_this.isVisible) {
8623
- _this.execute();
8624
- }
8625
- }, _EXPIRATION_TIME_MS);
8626
- }, _SOLVE_TIME_MS);
8627
- };
8628
- MockWidget.prototype.checkIfDeleted = function () {
8629
- if (this.deleted) {
8630
- throw new Error('reCAPTCHA mock was already deleted!');
8631
- }
8632
- };
8633
- return MockWidget;
8634
- }());
8635
- function generateRandomAlphaNumericString(len) {
8636
- var chars = [];
8637
- var allowedChars = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
8638
- for (var i = 0; i < len; i++) {
8639
- chars.push(allowedChars.charAt(Math.floor(Math.random() * allowedChars.length)));
8640
- }
8641
- return chars.join('');
8642
- }
8643
-
8644
8771
  /**
8645
8772
  * @license
8646
8773
  * Copyright 2020 Google LLC
@@ -9047,12 +9174,15 @@ var ConfirmationResultImpl = /** @class */ (function () {
9047
9174
  * provides the code sent to their phone, call {@link ConfirmationResult.confirm}
9048
9175
  * with the code to sign the user in.
9049
9176
  *
9050
- * For abuse prevention, this method also requires a {@link ApplicationVerifier}.
9051
- * This SDK includes a reCAPTCHA-based implementation, {@link RecaptchaVerifier}.
9177
+ * For abuse prevention, this method requires a {@link ApplicationVerifier}.
9178
+ * This SDK includes an implementation based on reCAPTCHA v2, {@link RecaptchaVerifier}.
9052
9179
  * This function can work on other platforms that do not support the
9053
9180
  * {@link RecaptchaVerifier} (like React Native), but you need to use a
9054
9181
  * third-party {@link ApplicationVerifier} implementation.
9055
9182
  *
9183
+ * If you've enabled project-level reCAPTCHA Enterprise bot protection in
9184
+ * Enforce mode, you can omit the {@link ApplicationVerifier}.
9185
+ *
9056
9186
  * This method does not work in a Node.js environment or with {@link Auth} instances created with a
9057
9187
  * {@link @firebase/app#FirebaseServerApp}.
9058
9188
  *
@@ -9165,17 +9295,29 @@ function reauthenticateWithPhoneNumber(user, phoneNumber, appVerifier) {
9165
9295
  function _verifyPhoneNumber(auth, options, verifier) {
9166
9296
  var _a;
9167
9297
  return tslib.__awaiter(this, void 0, void 0, function () {
9168
- var recaptchaToken, phoneInfoOptions, session, response, mfaEnrollmentId, response, sessionInfo;
9298
+ var phoneInfoOptions, session, startPhoneMfaEnrollmentRequest, startEnrollPhoneMfaActionCallback, startPhoneMfaEnrollmentResponse, response, mfaEnrollmentId, startPhoneMfaSignInRequest, startSignInPhoneMfaActionCallback, startPhoneMfaSignInResponse, response, sendPhoneVerificationCodeRequest, sendPhoneVerificationCodeActionCallback, sendPhoneVerificationCodeResponse, response;
9299
+ var _this = this;
9169
9300
  return tslib.__generator(this, function (_b) {
9170
9301
  switch (_b.label) {
9171
- case 0: return [4 /*yield*/, verifier.verify()];
9302
+ case 0:
9303
+ if (!!auth._getRecaptchaConfig()) return [3 /*break*/, 4];
9304
+ _b.label = 1;
9172
9305
  case 1:
9173
- recaptchaToken = _b.sent();
9174
- _b.label = 2;
9306
+ _b.trys.push([1, 3, , 4]);
9307
+ return [4 /*yield*/, _initializeRecaptchaConfig(auth)];
9175
9308
  case 2:
9176
- _b.trys.push([2, , 10, 11]);
9177
- _assert(typeof recaptchaToken === 'string', auth, "argument-error" /* AuthErrorCode.ARGUMENT_ERROR */);
9178
- _assert(verifier.type === RECAPTCHA_VERIFIER_TYPE, auth, "argument-error" /* AuthErrorCode.ARGUMENT_ERROR */);
9309
+ _b.sent();
9310
+ return [3 /*break*/, 4];
9311
+ case 3:
9312
+ _b.sent();
9313
+ // If an error occurs while fetching the config, there is no way to know the enablement state
9314
+ // of Phone provider, so we proceed with recaptcha V2 verification.
9315
+ // The error is likely "recaptchaKey undefined", as reCAPTCHA Enterprise is not
9316
+ // enabled for any provider.
9317
+ console.log('Failed to initialize reCAPTCHA Enterprise config. Triggering the reCAPTCHA v2 verification.');
9318
+ return [3 /*break*/, 4];
9319
+ case 4:
9320
+ _b.trys.push([4, , 12, 13]);
9179
9321
  phoneInfoOptions = void 0;
9180
9322
  if (typeof options === 'string') {
9181
9323
  phoneInfoOptions = {
@@ -9185,48 +9327,106 @@ function _verifyPhoneNumber(auth, options, verifier) {
9185
9327
  else {
9186
9328
  phoneInfoOptions = options;
9187
9329
  }
9188
- if (!('session' in phoneInfoOptions)) return [3 /*break*/, 7];
9330
+ if (!('session' in phoneInfoOptions)) return [3 /*break*/, 9];
9189
9331
  session = phoneInfoOptions.session;
9190
- if (!('phoneNumber' in phoneInfoOptions)) return [3 /*break*/, 4];
9332
+ if (!('phoneNumber' in phoneInfoOptions)) return [3 /*break*/, 6];
9191
9333
  _assert(session.type === "enroll" /* MultiFactorSessionType.ENROLL */, auth, "internal-error" /* AuthErrorCode.INTERNAL_ERROR */);
9192
- return [4 /*yield*/, startEnrollPhoneMfa(auth, {
9193
- idToken: session.credential,
9194
- phoneEnrollmentInfo: {
9195
- phoneNumber: phoneInfoOptions.phoneNumber,
9196
- recaptchaToken: recaptchaToken
9334
+ startPhoneMfaEnrollmentRequest = {
9335
+ idToken: session.credential,
9336
+ phoneEnrollmentInfo: {
9337
+ phoneNumber: phoneInfoOptions.phoneNumber,
9338
+ clientType: "CLIENT_TYPE_WEB" /* RecaptchaClientType.WEB */
9339
+ }
9340
+ };
9341
+ startEnrollPhoneMfaActionCallback = function (authInstance, request) { return tslib.__awaiter(_this, void 0, void 0, function () {
9342
+ var requestWithRecaptchaV2;
9343
+ return tslib.__generator(this, function (_a) {
9344
+ switch (_a.label) {
9345
+ case 0:
9346
+ if (!(request.phoneEnrollmentInfo.captchaResponse === FAKE_TOKEN)) return [3 /*break*/, 2];
9347
+ _assert((verifier === null || verifier === void 0 ? void 0 : verifier.type) === RECAPTCHA_VERIFIER_TYPE, authInstance, "argument-error" /* AuthErrorCode.ARGUMENT_ERROR */);
9348
+ return [4 /*yield*/, injectRecaptchaV2Token(authInstance, request, verifier)];
9349
+ case 1:
9350
+ requestWithRecaptchaV2 = _a.sent();
9351
+ return [2 /*return*/, startEnrollPhoneMfa(authInstance, requestWithRecaptchaV2)];
9352
+ case 2: return [2 /*return*/, startEnrollPhoneMfa(authInstance, request)];
9197
9353
  }
9354
+ });
9355
+ }); };
9356
+ startPhoneMfaEnrollmentResponse = handleRecaptchaFlow(auth, startPhoneMfaEnrollmentRequest, "mfaSmsEnrollment" /* RecaptchaActionName.MFA_SMS_ENROLLMENT */, startEnrollPhoneMfaActionCallback, "PHONE_PROVIDER" /* RecaptchaAuthProvider.PHONE_PROVIDER */);
9357
+ return [4 /*yield*/, startPhoneMfaEnrollmentResponse.catch(function (error) {
9358
+ return Promise.reject(error);
9198
9359
  })];
9199
- case 3:
9360
+ case 5:
9200
9361
  response = _b.sent();
9201
9362
  return [2 /*return*/, response.phoneSessionInfo.sessionInfo];
9202
- case 4:
9363
+ case 6:
9203
9364
  _assert(session.type === "signin" /* MultiFactorSessionType.SIGN_IN */, auth, "internal-error" /* AuthErrorCode.INTERNAL_ERROR */);
9204
9365
  mfaEnrollmentId = ((_a = phoneInfoOptions.multiFactorHint) === null || _a === void 0 ? void 0 : _a.uid) ||
9205
9366
  phoneInfoOptions.multiFactorUid;
9206
9367
  _assert(mfaEnrollmentId, auth, "missing-multi-factor-info" /* AuthErrorCode.MISSING_MFA_INFO */);
9207
- return [4 /*yield*/, startSignInPhoneMfa(auth, {
9208
- mfaPendingCredential: session.credential,
9209
- mfaEnrollmentId: mfaEnrollmentId,
9210
- phoneSignInInfo: {
9211
- recaptchaToken: recaptchaToken
9368
+ startPhoneMfaSignInRequest = {
9369
+ mfaPendingCredential: session.credential,
9370
+ mfaEnrollmentId: mfaEnrollmentId,
9371
+ phoneSignInInfo: {
9372
+ clientType: "CLIENT_TYPE_WEB" /* RecaptchaClientType.WEB */
9373
+ }
9374
+ };
9375
+ startSignInPhoneMfaActionCallback = function (authInstance, request) { return tslib.__awaiter(_this, void 0, void 0, function () {
9376
+ var requestWithRecaptchaV2;
9377
+ return tslib.__generator(this, function (_a) {
9378
+ switch (_a.label) {
9379
+ case 0:
9380
+ if (!(request.phoneSignInInfo.captchaResponse === FAKE_TOKEN)) return [3 /*break*/, 2];
9381
+ _assert((verifier === null || verifier === void 0 ? void 0 : verifier.type) === RECAPTCHA_VERIFIER_TYPE, authInstance, "argument-error" /* AuthErrorCode.ARGUMENT_ERROR */);
9382
+ return [4 /*yield*/, injectRecaptchaV2Token(authInstance, request, verifier)];
9383
+ case 1:
9384
+ requestWithRecaptchaV2 = _a.sent();
9385
+ return [2 /*return*/, startSignInPhoneMfa(authInstance, requestWithRecaptchaV2)];
9386
+ case 2: return [2 /*return*/, startSignInPhoneMfa(authInstance, request)];
9212
9387
  }
9388
+ });
9389
+ }); };
9390
+ startPhoneMfaSignInResponse = handleRecaptchaFlow(auth, startPhoneMfaSignInRequest, "mfaSmsSignIn" /* RecaptchaActionName.MFA_SMS_SIGNIN */, startSignInPhoneMfaActionCallback, "PHONE_PROVIDER" /* RecaptchaAuthProvider.PHONE_PROVIDER */);
9391
+ return [4 /*yield*/, startPhoneMfaSignInResponse.catch(function (error) {
9392
+ return Promise.reject(error);
9213
9393
  })];
9214
- case 5:
9394
+ case 7:
9215
9395
  response = _b.sent();
9216
9396
  return [2 /*return*/, response.phoneResponseInfo.sessionInfo];
9217
- case 6: return [3 /*break*/, 9];
9218
- case 7: return [4 /*yield*/, sendPhoneVerificationCode(auth, {
9397
+ case 8: return [3 /*break*/, 11];
9398
+ case 9:
9399
+ sendPhoneVerificationCodeRequest = {
9219
9400
  phoneNumber: phoneInfoOptions.phoneNumber,
9220
- recaptchaToken: recaptchaToken
9221
- })];
9222
- case 8:
9223
- sessionInfo = (_b.sent()).sessionInfo;
9224
- return [2 /*return*/, sessionInfo];
9225
- case 9: return [3 /*break*/, 11];
9401
+ clientType: "CLIENT_TYPE_WEB" /* RecaptchaClientType.WEB */
9402
+ };
9403
+ sendPhoneVerificationCodeActionCallback = function (authInstance, request) { return tslib.__awaiter(_this, void 0, void 0, function () {
9404
+ var requestWithRecaptchaV2;
9405
+ return tslib.__generator(this, function (_a) {
9406
+ switch (_a.label) {
9407
+ case 0:
9408
+ if (!(request.captchaResponse === FAKE_TOKEN)) return [3 /*break*/, 2];
9409
+ _assert((verifier === null || verifier === void 0 ? void 0 : verifier.type) === RECAPTCHA_VERIFIER_TYPE, authInstance, "argument-error" /* AuthErrorCode.ARGUMENT_ERROR */);
9410
+ return [4 /*yield*/, injectRecaptchaV2Token(authInstance, request, verifier)];
9411
+ case 1:
9412
+ requestWithRecaptchaV2 = _a.sent();
9413
+ return [2 /*return*/, sendPhoneVerificationCode(authInstance, requestWithRecaptchaV2)];
9414
+ case 2: return [2 /*return*/, sendPhoneVerificationCode(authInstance, request)];
9415
+ }
9416
+ });
9417
+ }); };
9418
+ sendPhoneVerificationCodeResponse = handleRecaptchaFlow(auth, sendPhoneVerificationCodeRequest, "sendVerificationCode" /* RecaptchaActionName.SEND_VERIFICATION_CODE */, sendPhoneVerificationCodeActionCallback, "PHONE_PROVIDER" /* RecaptchaAuthProvider.PHONE_PROVIDER */);
9419
+ return [4 /*yield*/, sendPhoneVerificationCodeResponse.catch(function (error) {
9420
+ return Promise.reject(error);
9421
+ })];
9226
9422
  case 10:
9227
- verifier._reset();
9423
+ response = _b.sent();
9424
+ return [2 /*return*/, response.sessionInfo];
9425
+ case 11: return [3 /*break*/, 13];
9426
+ case 12:
9427
+ verifier === null || verifier === void 0 ? void 0 : verifier._reset();
9228
9428
  return [7 /*endfinally*/];
9229
- case 11: return [2 /*return*/];
9429
+ case 13: return [2 /*return*/];
9230
9430
  }
9231
9431
  });
9232
9432
  });
@@ -9271,6 +9471,59 @@ function updatePhoneNumber(user, credential) {
9271
9471
  }
9272
9472
  });
9273
9473
  });
9474
+ }
9475
+ // Helper function that fetches and injects a reCAPTCHA v2 token into the request.
9476
+ function injectRecaptchaV2Token(auth, request, recaptchaV2Verifier) {
9477
+ return tslib.__awaiter(this, void 0, void 0, function () {
9478
+ var recaptchaV2Token, newRequest, phoneNumber, captchaResponse, clientType, recaptchaVersion, captchaResponse, clientType, recaptchaVersion;
9479
+ return tslib.__generator(this, function (_a) {
9480
+ switch (_a.label) {
9481
+ case 0:
9482
+ _assert(recaptchaV2Verifier.type === RECAPTCHA_VERIFIER_TYPE, auth, "argument-error" /* AuthErrorCode.ARGUMENT_ERROR */);
9483
+ return [4 /*yield*/, recaptchaV2Verifier.verify()];
9484
+ case 1:
9485
+ recaptchaV2Token = _a.sent();
9486
+ _assert(typeof recaptchaV2Token === 'string', auth, "argument-error" /* AuthErrorCode.ARGUMENT_ERROR */);
9487
+ newRequest = tslib.__assign({}, request);
9488
+ if ('phoneEnrollmentInfo' in newRequest) {
9489
+ phoneNumber = newRequest.phoneEnrollmentInfo.phoneNumber;
9490
+ captchaResponse = newRequest.phoneEnrollmentInfo.captchaResponse;
9491
+ clientType = newRequest
9492
+ .phoneEnrollmentInfo.clientType;
9493
+ recaptchaVersion = newRequest.phoneEnrollmentInfo.recaptchaVersion;
9494
+ Object.assign(newRequest, {
9495
+ 'phoneEnrollmentInfo': {
9496
+ phoneNumber: phoneNumber,
9497
+ recaptchaToken: recaptchaV2Token,
9498
+ captchaResponse: captchaResponse,
9499
+ clientType: clientType,
9500
+ recaptchaVersion: recaptchaVersion
9501
+ }
9502
+ });
9503
+ return [2 /*return*/, newRequest];
9504
+ }
9505
+ else if ('phoneSignInInfo' in newRequest) {
9506
+ captchaResponse = newRequest.phoneSignInInfo.captchaResponse;
9507
+ clientType = newRequest
9508
+ .phoneSignInInfo.clientType;
9509
+ recaptchaVersion = newRequest.phoneSignInInfo.recaptchaVersion;
9510
+ Object.assign(newRequest, {
9511
+ 'phoneSignInInfo': {
9512
+ recaptchaToken: recaptchaV2Token,
9513
+ captchaResponse: captchaResponse,
9514
+ clientType: clientType,
9515
+ recaptchaVersion: recaptchaVersion
9516
+ }
9517
+ });
9518
+ return [2 /*return*/, newRequest];
9519
+ }
9520
+ else {
9521
+ Object.assign(newRequest, { 'recaptchaToken': recaptchaV2Token });
9522
+ return [2 /*return*/, newRequest];
9523
+ }
9524
+ }
9525
+ });
9526
+ });
9274
9527
  }
9275
9528
 
9276
9529
  /**
@@ -9342,12 +9595,14 @@ var PhoneAuthProvider = /** @class */ (function () {
9342
9595
  *
9343
9596
  * @param phoneInfoOptions - The user's {@link PhoneInfoOptions}. The phone number should be in
9344
9597
  * E.164 format (e.g. +16505550101).
9345
- * @param applicationVerifier - For abuse prevention, this method also requires a
9346
- * {@link ApplicationVerifier}. This SDK includes a reCAPTCHA-based implementation,
9347
- * {@link RecaptchaVerifier}.
9598
+ * @param applicationVerifier - An {@link ApplicationVerifier}, which prevents
9599
+ * requests from unauthorized clients. This SDK includes an implementation
9600
+ * based on reCAPTCHA v2, {@link RecaptchaVerifier}. If you've enabled
9601
+ * reCAPTCHA Enterprise bot protection in Enforce mode, this parameter is
9602
+ * optional; in all other configurations, the parameter is required.
9348
9603
  *
9349
9604
  * @returns A Promise for a verification ID that can be passed to
9350
- * {@link PhoneAuthProvider.credential} to identify this flow..
9605
+ * {@link PhoneAuthProvider.credential} to identify this flow.
9351
9606
  */
9352
9607
  PhoneAuthProvider.prototype.verifyPhoneNumber = function (phoneOptions, applicationVerifier) {
9353
9608
  return _verifyPhoneNumber(this.auth, phoneOptions, util.getModularInstance(applicationVerifier));
@@ -9816,4 +10071,4 @@ exports.useDeviceLanguage = useDeviceLanguage;
9816
10071
  exports.validatePassword = validatePassword;
9817
10072
  exports.verifyBeforeUpdateEmail = verifyBeforeUpdateEmail;
9818
10073
  exports.verifyPasswordResetCode = verifyPasswordResetCode;
9819
- //# sourceMappingURL=index-198b1e87.js.map
10074
+ //# sourceMappingURL=index-dd6cc9b0.js.map