@firebase/auth 0.22.0 → 0.23.0-canary.0832dcac2

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 (209) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/auth-public.d.ts +57 -0
  3. package/dist/auth.d.ts +71 -1
  4. package/dist/browser-cjs/{index-5859881d.js → index-67779ffd.js} +590 -207
  5. package/dist/browser-cjs/index-67779ffd.js.map +1 -0
  6. package/dist/browser-cjs/index.js +3 -2
  7. package/dist/browser-cjs/index.js.map +1 -1
  8. package/dist/browser-cjs/internal.js +3 -2
  9. package/dist/browser-cjs/internal.js.map +1 -1
  10. package/dist/browser-cjs/src/api/authentication/email_and_password.d.ts +9 -0
  11. package/dist/browser-cjs/src/api/authentication/recaptcha.d.ts +16 -0
  12. package/dist/browser-cjs/src/api/authentication/sign_up.d.ts +4 -0
  13. package/dist/browser-cjs/src/api/errors.d.ts +9 -1
  14. package/dist/browser-cjs/src/api/index.d.ts +17 -2
  15. package/dist/browser-cjs/src/core/auth/auth_impl.d.ts +9 -1
  16. package/dist/browser-cjs/src/core/errors.d.ts +17 -1
  17. package/dist/browser-cjs/src/core/index.d.ts +26 -0
  18. package/dist/browser-cjs/src/core/util/handler.d.ts +1 -1
  19. package/dist/browser-cjs/src/core/util/log.d.ts +1 -0
  20. package/dist/browser-cjs/src/model/auth.d.ts +6 -0
  21. package/dist/browser-cjs/src/platform_browser/auth_window.d.ts +2 -2
  22. package/dist/browser-cjs/src/platform_browser/recaptcha/recaptcha.d.ts +33 -0
  23. package/dist/browser-cjs/src/platform_browser/recaptcha/recaptcha.test.d.ts +17 -0
  24. package/dist/browser-cjs/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +40 -0
  25. package/dist/browser-cjs/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.test.d.ts +17 -0
  26. package/dist/browser-cjs/src/platform_browser/recaptcha/recaptcha_mock.d.ts +16 -1
  27. package/dist/browser-cjs/src/platform_browser/strategies/popup.d.ts +1 -1
  28. package/dist/browser-cjs/test/helpers/api/helper.d.ts +2 -0
  29. package/dist/browser-cjs/test/helpers/mock_auth.d.ts +5 -0
  30. package/dist/cordova/index.js +2 -2
  31. package/dist/cordova/internal.js +21 -77
  32. package/dist/cordova/internal.js.map +1 -1
  33. package/dist/cordova/{popup_redirect-3519667a.js → popup_redirect-cc44b4cd.js} +778 -214
  34. package/dist/cordova/popup_redirect-cc44b4cd.js.map +1 -0
  35. package/dist/cordova/src/api/authentication/email_and_password.d.ts +9 -0
  36. package/dist/cordova/src/api/authentication/recaptcha.d.ts +16 -0
  37. package/dist/cordova/src/api/authentication/sign_up.d.ts +4 -0
  38. package/dist/cordova/src/api/errors.d.ts +9 -1
  39. package/dist/cordova/src/api/index.d.ts +17 -2
  40. package/dist/cordova/src/core/auth/auth_impl.d.ts +9 -1
  41. package/dist/cordova/src/core/errors.d.ts +17 -1
  42. package/dist/cordova/src/core/index.d.ts +26 -0
  43. package/dist/cordova/src/core/util/handler.d.ts +1 -1
  44. package/dist/cordova/src/core/util/log.d.ts +1 -0
  45. package/dist/cordova/src/model/auth.d.ts +6 -0
  46. package/dist/cordova/src/platform_browser/auth_window.d.ts +2 -2
  47. package/dist/cordova/src/platform_browser/recaptcha/recaptcha.d.ts +33 -0
  48. package/dist/cordova/src/platform_browser/recaptcha/recaptcha.test.d.ts +17 -0
  49. package/dist/cordova/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +40 -0
  50. package/dist/cordova/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.test.d.ts +17 -0
  51. package/dist/cordova/src/platform_browser/recaptcha/recaptcha_mock.d.ts +16 -1
  52. package/dist/cordova/src/platform_browser/strategies/popup.d.ts +1 -1
  53. package/dist/cordova/test/helpers/api/helper.d.ts +2 -0
  54. package/dist/cordova/test/helpers/mock_auth.d.ts +5 -0
  55. package/dist/esm2017/{index-680e2b70.js → index-55c8f96e.js} +591 -209
  56. package/dist/esm2017/index-55c8f96e.js.map +1 -0
  57. package/dist/esm2017/index.js +2 -2
  58. package/dist/esm2017/internal.js +3 -3
  59. package/dist/esm2017/src/api/authentication/email_and_password.d.ts +9 -0
  60. package/dist/esm2017/src/api/authentication/recaptcha.d.ts +16 -0
  61. package/dist/esm2017/src/api/authentication/sign_up.d.ts +4 -0
  62. package/dist/esm2017/src/api/errors.d.ts +9 -1
  63. package/dist/esm2017/src/api/index.d.ts +17 -2
  64. package/dist/esm2017/src/core/auth/auth_impl.d.ts +9 -1
  65. package/dist/esm2017/src/core/errors.d.ts +17 -1
  66. package/dist/esm2017/src/core/index.d.ts +26 -0
  67. package/dist/esm2017/src/core/util/handler.d.ts +1 -1
  68. package/dist/esm2017/src/core/util/log.d.ts +1 -0
  69. package/dist/esm2017/src/model/auth.d.ts +6 -0
  70. package/dist/esm2017/src/platform_browser/auth_window.d.ts +2 -2
  71. package/dist/esm2017/src/platform_browser/recaptcha/recaptcha.d.ts +33 -0
  72. package/dist/esm2017/src/platform_browser/recaptcha/recaptcha.test.d.ts +17 -0
  73. package/dist/esm2017/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +40 -0
  74. package/dist/esm2017/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.test.d.ts +17 -0
  75. package/dist/esm2017/src/platform_browser/recaptcha/recaptcha_mock.d.ts +16 -1
  76. package/dist/esm2017/src/platform_browser/strategies/popup.d.ts +1 -1
  77. package/dist/esm2017/test/helpers/api/helper.d.ts +2 -0
  78. package/dist/esm2017/test/helpers/mock_auth.d.ts +5 -0
  79. package/dist/esm5/{index-714e827f.js → index-ce1e2136.js} +797 -289
  80. package/dist/esm5/index-ce1e2136.js.map +1 -0
  81. package/dist/esm5/index.js +1 -1
  82. package/dist/esm5/internal.js +2 -2
  83. package/dist/esm5/src/api/authentication/email_and_password.d.ts +9 -0
  84. package/dist/esm5/src/api/authentication/recaptcha.d.ts +16 -0
  85. package/dist/esm5/src/api/authentication/sign_up.d.ts +4 -0
  86. package/dist/esm5/src/api/errors.d.ts +9 -1
  87. package/dist/esm5/src/api/index.d.ts +17 -2
  88. package/dist/esm5/src/core/auth/auth_impl.d.ts +9 -1
  89. package/dist/esm5/src/core/errors.d.ts +17 -1
  90. package/dist/esm5/src/core/index.d.ts +26 -0
  91. package/dist/esm5/src/core/util/handler.d.ts +1 -1
  92. package/dist/esm5/src/core/util/log.d.ts +1 -0
  93. package/dist/esm5/src/model/auth.d.ts +6 -0
  94. package/dist/esm5/src/platform_browser/auth_window.d.ts +2 -2
  95. package/dist/esm5/src/platform_browser/recaptcha/recaptcha.d.ts +33 -0
  96. package/dist/esm5/src/platform_browser/recaptcha/recaptcha.test.d.ts +17 -0
  97. package/dist/esm5/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +40 -0
  98. package/dist/esm5/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.test.d.ts +17 -0
  99. package/dist/esm5/src/platform_browser/recaptcha/recaptcha_mock.d.ts +16 -1
  100. package/dist/esm5/src/platform_browser/strategies/popup.d.ts +1 -1
  101. package/dist/esm5/test/helpers/api/helper.d.ts +2 -0
  102. package/dist/esm5/test/helpers/mock_auth.d.ts +5 -0
  103. package/dist/index.webworker.esm5.js +602 -74
  104. package/dist/index.webworker.esm5.js.map +1 -1
  105. package/dist/node/index.js +2 -1
  106. package/dist/node/index.js.map +1 -1
  107. package/dist/node/internal.js +62 -42
  108. package/dist/node/internal.js.map +1 -1
  109. package/dist/node/src/api/authentication/email_and_password.d.ts +9 -0
  110. package/dist/node/src/api/authentication/recaptcha.d.ts +16 -0
  111. package/dist/node/src/api/authentication/sign_up.d.ts +4 -0
  112. package/dist/node/src/api/errors.d.ts +9 -1
  113. package/dist/node/src/api/index.d.ts +17 -2
  114. package/dist/node/src/core/auth/auth_impl.d.ts +9 -1
  115. package/dist/node/src/core/errors.d.ts +17 -1
  116. package/dist/node/src/core/index.d.ts +26 -0
  117. package/dist/node/src/core/util/handler.d.ts +1 -1
  118. package/dist/node/src/core/util/log.d.ts +1 -0
  119. package/dist/node/src/model/auth.d.ts +6 -0
  120. package/dist/node/src/platform_browser/auth_window.d.ts +2 -2
  121. package/dist/node/src/platform_browser/recaptcha/recaptcha.d.ts +33 -0
  122. package/dist/node/src/platform_browser/recaptcha/recaptcha.test.d.ts +17 -0
  123. package/dist/node/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +40 -0
  124. package/dist/node/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.test.d.ts +17 -0
  125. package/dist/node/src/platform_browser/recaptcha/recaptcha_mock.d.ts +16 -1
  126. package/dist/node/src/platform_browser/strategies/popup.d.ts +1 -1
  127. package/dist/node/test/helpers/api/helper.d.ts +2 -0
  128. package/dist/node/test/helpers/mock_auth.d.ts +5 -0
  129. package/dist/node/{totp-416a2adc.js → totp-a3dac803.js} +700 -171
  130. package/dist/node/totp-a3dac803.js.map +1 -0
  131. package/dist/node-esm/index.js +1 -1
  132. package/dist/node-esm/internal.js +16 -4
  133. package/dist/node-esm/internal.js.map +1 -1
  134. package/dist/node-esm/src/api/authentication/email_and_password.d.ts +9 -0
  135. package/dist/node-esm/src/api/authentication/recaptcha.d.ts +16 -0
  136. package/dist/node-esm/src/api/authentication/sign_up.d.ts +4 -0
  137. package/dist/node-esm/src/api/errors.d.ts +9 -1
  138. package/dist/node-esm/src/api/index.d.ts +17 -2
  139. package/dist/node-esm/src/core/auth/auth_impl.d.ts +9 -1
  140. package/dist/node-esm/src/core/errors.d.ts +17 -1
  141. package/dist/node-esm/src/core/index.d.ts +26 -0
  142. package/dist/node-esm/src/core/util/handler.d.ts +1 -1
  143. package/dist/node-esm/src/core/util/log.d.ts +1 -0
  144. package/dist/node-esm/src/model/auth.d.ts +6 -0
  145. package/dist/node-esm/src/platform_browser/auth_window.d.ts +2 -2
  146. package/dist/node-esm/src/platform_browser/recaptcha/recaptcha.d.ts +33 -0
  147. package/dist/node-esm/src/platform_browser/recaptcha/recaptcha.test.d.ts +17 -0
  148. package/dist/node-esm/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +40 -0
  149. package/dist/node-esm/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.test.d.ts +17 -0
  150. package/dist/node-esm/src/platform_browser/recaptcha/recaptcha_mock.d.ts +16 -1
  151. package/dist/node-esm/src/platform_browser/strategies/popup.d.ts +1 -1
  152. package/dist/node-esm/test/helpers/api/helper.d.ts +2 -0
  153. package/dist/node-esm/test/helpers/mock_auth.d.ts +5 -0
  154. package/dist/node-esm/{totp-c3bf2a20.js → totp-65fbfdbe.js} +557 -140
  155. package/dist/node-esm/totp-65fbfdbe.js.map +1 -0
  156. package/dist/rn/index.js +2 -1
  157. package/dist/rn/index.js.map +1 -1
  158. package/dist/rn/internal.js +79 -48
  159. package/dist/rn/internal.js.map +1 -1
  160. package/dist/rn/{phone-2ec1815d.js → phone-97108d6a.js} +738 -259
  161. package/dist/rn/phone-97108d6a.js.map +1 -0
  162. package/dist/rn/src/api/authentication/email_and_password.d.ts +9 -0
  163. package/dist/rn/src/api/authentication/recaptcha.d.ts +16 -0
  164. package/dist/rn/src/api/authentication/sign_up.d.ts +4 -0
  165. package/dist/rn/src/api/errors.d.ts +9 -1
  166. package/dist/rn/src/api/index.d.ts +17 -2
  167. package/dist/rn/src/core/auth/auth_impl.d.ts +9 -1
  168. package/dist/rn/src/core/errors.d.ts +17 -1
  169. package/dist/rn/src/core/index.d.ts +26 -0
  170. package/dist/rn/src/core/util/handler.d.ts +1 -1
  171. package/dist/rn/src/core/util/log.d.ts +1 -0
  172. package/dist/rn/src/model/auth.d.ts +6 -0
  173. package/dist/rn/src/platform_browser/auth_window.d.ts +2 -2
  174. package/dist/rn/src/platform_browser/recaptcha/recaptcha.d.ts +33 -0
  175. package/dist/rn/src/platform_browser/recaptcha/recaptcha.test.d.ts +17 -0
  176. package/dist/rn/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +40 -0
  177. package/dist/rn/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.test.d.ts +17 -0
  178. package/dist/rn/src/platform_browser/recaptcha/recaptcha_mock.d.ts +16 -1
  179. package/dist/rn/src/platform_browser/strategies/popup.d.ts +1 -1
  180. package/dist/rn/test/helpers/api/helper.d.ts +2 -0
  181. package/dist/rn/test/helpers/mock_auth.d.ts +5 -0
  182. package/dist/src/api/authentication/email_and_password.d.ts +9 -0
  183. package/dist/src/api/authentication/recaptcha.d.ts +16 -0
  184. package/dist/src/api/authentication/sign_up.d.ts +4 -0
  185. package/dist/src/api/errors.d.ts +9 -1
  186. package/dist/src/api/index.d.ts +17 -2
  187. package/dist/src/core/auth/auth_impl.d.ts +9 -1
  188. package/dist/src/core/errors.d.ts +17 -1
  189. package/dist/src/core/index.d.ts +26 -0
  190. package/dist/src/core/util/handler.d.ts +1 -1
  191. package/dist/src/core/util/log.d.ts +1 -0
  192. package/dist/src/model/auth.d.ts +6 -0
  193. package/dist/src/platform_browser/auth_window.d.ts +2 -2
  194. package/dist/src/platform_browser/recaptcha/recaptcha.d.ts +33 -0
  195. package/dist/src/platform_browser/recaptcha/recaptcha.test.d.ts +17 -0
  196. package/dist/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +40 -0
  197. package/dist/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.test.d.ts +17 -0
  198. package/dist/src/platform_browser/recaptcha/recaptcha_mock.d.ts +16 -1
  199. package/dist/src/platform_browser/strategies/popup.d.ts +1 -1
  200. package/dist/test/helpers/api/helper.d.ts +2 -0
  201. package/dist/test/helpers/mock_auth.d.ts +5 -0
  202. package/package.json +6 -6
  203. package/dist/browser-cjs/index-5859881d.js.map +0 -1
  204. package/dist/cordova/popup_redirect-3519667a.js.map +0 -1
  205. package/dist/esm2017/index-680e2b70.js.map +0 -1
  206. package/dist/esm5/index-714e827f.js.map +0 -1
  207. package/dist/node/totp-416a2adc.js.map +0 -1
  208. package/dist/node-esm/totp-c3bf2a20.js.map +0 -1
  209. package/dist/rn/phone-2ec1815d.js.map +0 -1
@@ -168,6 +168,14 @@ function _debugErrorMap() {
168
168
  'different options. To avoid this error, call initializeAuth() with the ' +
169
169
  'same options as when it was originally called, or call getAuth() to return the' +
170
170
  ' already initialized instance.',
171
+ _a["missing-recaptcha-token" /* AuthErrorCode.MISSING_RECAPTCHA_TOKEN */] = 'The reCAPTCHA token is missing when sending request to the backend.',
172
+ _a["invalid-recaptcha-token" /* AuthErrorCode.INVALID_RECAPTCHA_TOKEN */] = 'The reCAPTCHA token is invalid when sending request to the backend.',
173
+ _a["invalid-recaptcha-action" /* AuthErrorCode.INVALID_RECAPTCHA_ACTION */] = 'The reCAPTCHA action is invalid when sending request to the backend.',
174
+ _a["recaptcha-not-enabled" /* AuthErrorCode.RECAPTCHA_NOT_ENABLED */] = 'reCAPTCHA Enterprise integration is not enabled for this project.',
175
+ _a["missing-client-type" /* AuthErrorCode.MISSING_CLIENT_TYPE */] = 'The reCAPTCHA client type is missing when sending request to the backend.',
176
+ _a["missing-recaptcha-version" /* AuthErrorCode.MISSING_RECAPTCHA_VERSION */] = 'The reCAPTCHA version is missing when sending request to the backend.',
177
+ _a["invalid-req-type" /* AuthErrorCode.INVALID_REQ_TYPE */] = 'Invalid request parameters.',
178
+ _a["invalid-recaptcha-version" /* AuthErrorCode.INVALID_RECAPTCHA_VERSION */] = 'The reCAPTCHA version is invalid when sending request to the backend.',
171
179
  _a;
172
180
  }
173
181
  function _prodErrorMap() {
@@ -304,7 +312,15 @@ var AUTH_ERROR_CODES_MAP_DO_NOT_USE_INTERNALLY = {
304
312
  USER_SIGNED_OUT: 'auth/user-signed-out',
305
313
  WEAK_PASSWORD: 'auth/weak-password',
306
314
  WEB_STORAGE_UNSUPPORTED: 'auth/web-storage-unsupported',
307
- ALREADY_INITIALIZED: 'auth/already-initialized'
315
+ ALREADY_INITIALIZED: 'auth/already-initialized',
316
+ RECAPTCHA_NOT_ENABLED: 'auth/recaptcha-not-enabled',
317
+ MISSING_RECAPTCHA_TOKEN: 'auth/missing-recaptcha-token',
318
+ INVALID_RECAPTCHA_TOKEN: 'auth/invalid-recaptcha-token',
319
+ INVALID_RECAPTCHA_ACTION: 'auth/invalid-recaptcha-action',
320
+ MISSING_CLIENT_TYPE: 'auth/missing-client-type',
321
+ MISSING_RECAPTCHA_VERSION: 'auth/missing-recaptcha-version',
322
+ INVALID_RECAPTCHA_VERSION: 'auth/invalid-recaptcha-version',
323
+ INVALID_REQ_TYPE: 'auth/invalid-req-type'
308
324
  };
309
325
 
310
326
  /**
@@ -324,6 +340,15 @@ var AUTH_ERROR_CODES_MAP_DO_NOT_USE_INTERNALLY = {
324
340
  * limitations under the License.
325
341
  */
326
342
  var logClient = new Logger('@firebase/auth');
343
+ function _logWarn(msg) {
344
+ var args = [];
345
+ for (var _i = 1; _i < arguments.length; _i++) {
346
+ args[_i - 1] = arguments[_i];
347
+ }
348
+ if (logClient.logLevel <= LogLevel.WARN) {
349
+ logClient.warn.apply(logClient, __spreadArray(["Auth (".concat(SDK_VERSION, "): ").concat(msg)], args, false));
350
+ }
351
+ }
327
352
  function _logError(msg) {
328
353
  var args = [];
329
354
  for (var _i = 1; _i < arguments.length; _i++) {
@@ -524,7 +549,7 @@ function _initializeAuthInstance(auth, deps) {
524
549
  }
525
550
 
526
551
  var name = "@firebase/auth";
527
- var version = "0.22.0";
552
+ var version = "0.23.0-canary.0832dcac2";
528
553
 
529
554
  /**
530
555
  * @license
@@ -954,6 +979,15 @@ var SERVER_ERROR_MAP = (_a$1 = {},
954
979
  _a$1["SECOND_FACTOR_LIMIT_EXCEEDED" /* ServerError.SECOND_FACTOR_LIMIT_EXCEEDED */] = "maximum-second-factor-count-exceeded" /* AuthErrorCode.SECOND_FACTOR_LIMIT_EXCEEDED */,
955
980
  // Blocking functions related errors.
956
981
  _a$1["BLOCKING_FUNCTION_ERROR_RESPONSE" /* ServerError.BLOCKING_FUNCTION_ERROR_RESPONSE */] = "internal-error" /* AuthErrorCode.INTERNAL_ERROR */,
982
+ // Recaptcha related errors.
983
+ _a$1["RECAPTCHA_NOT_ENABLED" /* ServerError.RECAPTCHA_NOT_ENABLED */] = "recaptcha-not-enabled" /* AuthErrorCode.RECAPTCHA_NOT_ENABLED */,
984
+ _a$1["MISSING_RECAPTCHA_TOKEN" /* ServerError.MISSING_RECAPTCHA_TOKEN */] = "missing-recaptcha-token" /* AuthErrorCode.MISSING_RECAPTCHA_TOKEN */,
985
+ _a$1["INVALID_RECAPTCHA_TOKEN" /* ServerError.INVALID_RECAPTCHA_TOKEN */] = "invalid-recaptcha-token" /* AuthErrorCode.INVALID_RECAPTCHA_TOKEN */,
986
+ _a$1["INVALID_RECAPTCHA_ACTION" /* ServerError.INVALID_RECAPTCHA_ACTION */] = "invalid-recaptcha-action" /* AuthErrorCode.INVALID_RECAPTCHA_ACTION */,
987
+ _a$1["MISSING_CLIENT_TYPE" /* ServerError.MISSING_CLIENT_TYPE */] = "missing-client-type" /* AuthErrorCode.MISSING_CLIENT_TYPE */,
988
+ _a$1["MISSING_RECAPTCHA_VERSION" /* ServerError.MISSING_RECAPTCHA_VERSION */] = "missing-recaptcha-version" /* AuthErrorCode.MISSING_RECAPTCHA_VERSION */,
989
+ _a$1["INVALID_RECAPTCHA_VERSION" /* ServerError.INVALID_RECAPTCHA_VERSION */] = "invalid-recaptcha-version" /* AuthErrorCode.INVALID_RECAPTCHA_VERSION */,
990
+ _a$1["INVALID_REQ_TYPE" /* ServerError.INVALID_REQ_TYPE */] = "invalid-req-type" /* AuthErrorCode.INVALID_REQ_TYPE */,
957
991
  _a$1);
958
992
 
959
993
  /**
@@ -2331,6 +2365,271 @@ var PersistenceUserManager = /** @class */ (function () {
2331
2365
  return PersistenceUserManager;
2332
2366
  }());
2333
2367
 
2368
+ /**
2369
+ * @license
2370
+ * Copyright 2020 Google LLC
2371
+ *
2372
+ * Licensed under the Apache License, Version 2.0 (the "License");
2373
+ * you may not use this file except in compliance with the License.
2374
+ * You may obtain a copy of the License at
2375
+ *
2376
+ * http://www.apache.org/licenses/LICENSE-2.0
2377
+ *
2378
+ * Unless required by applicable law or agreed to in writing, software
2379
+ * distributed under the License is distributed on an "AS IS" BASIS,
2380
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2381
+ * See the License for the specific language governing permissions and
2382
+ * limitations under the License.
2383
+ */
2384
+ function getRecaptchaConfig(auth, request) {
2385
+ return __awaiter(this, void 0, void 0, function () {
2386
+ return __generator(this, function (_a) {
2387
+ return [2 /*return*/, _performApiRequest(auth, "GET" /* HttpMethod.GET */, "/v2/recaptchaConfig" /* Endpoint.GET_RECAPTCHA_CONFIG */, _addTidIfNecessary(auth, request))];
2388
+ });
2389
+ });
2390
+ }
2391
+
2392
+ /**
2393
+ * @license
2394
+ * Copyright 2020 Google LLC
2395
+ *
2396
+ * Licensed under the Apache License, Version 2.0 (the "License");
2397
+ * you may not use this file except in compliance with the License.
2398
+ * You may obtain a copy of the License at
2399
+ *
2400
+ * http://www.apache.org/licenses/LICENSE-2.0
2401
+ *
2402
+ * Unless required by applicable law or agreed to in writing, software
2403
+ * distributed under the License is distributed on an "AS IS" BASIS,
2404
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2405
+ * See the License for the specific language governing permissions and
2406
+ * limitations under the License.
2407
+ */
2408
+ function isEnterprise(grecaptcha) {
2409
+ return (grecaptcha !== undefined &&
2410
+ grecaptcha.enterprise !== undefined);
2411
+ }
2412
+ var RecaptchaConfig = /** @class */ (function () {
2413
+ function RecaptchaConfig(response) {
2414
+ /**
2415
+ * The reCAPTCHA site key.
2416
+ */
2417
+ this.siteKey = '';
2418
+ /**
2419
+ * The reCAPTCHA enablement status of the {@link EmailAuthProvider} for the current tenant.
2420
+ */
2421
+ this.emailPasswordEnabled = false;
2422
+ if (response.recaptchaKey === undefined) {
2423
+ throw new Error('recaptchaKey undefined');
2424
+ }
2425
+ // Example response.recaptchaKey: "projects/proj123/keys/sitekey123"
2426
+ this.siteKey = response.recaptchaKey.split('/')[3];
2427
+ this.emailPasswordEnabled = response.recaptchaEnforcementState.some(function (enforcementState) {
2428
+ return enforcementState.provider === 'EMAIL_PASSWORD_PROVIDER' &&
2429
+ enforcementState.enforcementState !== 'OFF';
2430
+ });
2431
+ }
2432
+ return RecaptchaConfig;
2433
+ }());
2434
+
2435
+ /**
2436
+ * @license
2437
+ * Copyright 2020 Google LLC
2438
+ *
2439
+ * Licensed under the Apache License, Version 2.0 (the "License");
2440
+ * you may not use this file except in compliance with the License.
2441
+ * You may obtain a copy of the License at
2442
+ *
2443
+ * http://www.apache.org/licenses/LICENSE-2.0
2444
+ *
2445
+ * Unless required by applicable law or agreed to in writing, software
2446
+ * distributed under the License is distributed on an "AS IS" BASIS,
2447
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2448
+ * See the License for the specific language governing permissions and
2449
+ * limitations under the License.
2450
+ */
2451
+ function getScriptParentElement() {
2452
+ var _a, _b;
2453
+ return (_b = (_a = document.getElementsByTagName('head')) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : document;
2454
+ }
2455
+ function _loadJS(url) {
2456
+ // TODO: consider adding timeout support & cancellation
2457
+ return new Promise(function (resolve, reject) {
2458
+ var el = document.createElement('script');
2459
+ el.setAttribute('src', url);
2460
+ el.onload = resolve;
2461
+ el.onerror = function (e) {
2462
+ var error = _createError("internal-error" /* AuthErrorCode.INTERNAL_ERROR */);
2463
+ error.customData = e;
2464
+ reject(error);
2465
+ };
2466
+ el.type = 'text/javascript';
2467
+ el.charset = 'UTF-8';
2468
+ getScriptParentElement().appendChild(el);
2469
+ });
2470
+ }
2471
+
2472
+ /* eslint-disable @typescript-eslint/no-require-imports */
2473
+ var RECAPTCHA_ENTERPRISE_URL = 'https://www.google.com/recaptcha/enterprise.js?render=';
2474
+ var RECAPTCHA_ENTERPRISE_VERIFIER_TYPE = 'recaptcha-enterprise';
2475
+ var RecaptchaEnterpriseVerifier = /** @class */ (function () {
2476
+ /**
2477
+ *
2478
+ * @param authExtern - The corresponding Firebase {@link Auth} instance.
2479
+ *
2480
+ */
2481
+ function RecaptchaEnterpriseVerifier(authExtern) {
2482
+ /**
2483
+ * Identifies the type of application verifier (e.g. "recaptcha-enterprise").
2484
+ */
2485
+ this.type = RECAPTCHA_ENTERPRISE_VERIFIER_TYPE;
2486
+ this.auth = _castAuth(authExtern);
2487
+ }
2488
+ /**
2489
+ * Executes the verification process.
2490
+ *
2491
+ * @returns A Promise for a token that can be used to assert the validity of a request.
2492
+ */
2493
+ RecaptchaEnterpriseVerifier.prototype.verify = function (action, forceRefresh) {
2494
+ if (action === void 0) { action = 'verify'; }
2495
+ if (forceRefresh === void 0) { forceRefresh = false; }
2496
+ return __awaiter(this, void 0, void 0, function () {
2497
+ function retrieveSiteKey(auth) {
2498
+ return __awaiter(this, void 0, void 0, function () {
2499
+ var _this = this;
2500
+ return __generator(this, function (_a) {
2501
+ if (!forceRefresh) {
2502
+ if (auth.tenantId == null && auth._agentRecaptchaConfig != null) {
2503
+ return [2 /*return*/, auth._agentRecaptchaConfig.siteKey];
2504
+ }
2505
+ if (auth.tenantId != null &&
2506
+ auth._tenantRecaptchaConfigs[auth.tenantId] !== undefined) {
2507
+ return [2 /*return*/, auth._tenantRecaptchaConfigs[auth.tenantId].siteKey];
2508
+ }
2509
+ }
2510
+ return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
2511
+ return __generator(this, function (_a) {
2512
+ getRecaptchaConfig(auth, {
2513
+ clientType: "CLIENT_TYPE_WEB" /* RecaptchaClientType.WEB */,
2514
+ version: "RECAPTCHA_ENTERPRISE" /* RecaptchaVersion.ENTERPRISE */
2515
+ })
2516
+ .then(function (response) {
2517
+ if (response.recaptchaKey === undefined) {
2518
+ reject(new Error('recaptcha Enterprise site key undefined'));
2519
+ }
2520
+ else {
2521
+ var config = new RecaptchaConfig(response);
2522
+ if (auth.tenantId == null) {
2523
+ auth._agentRecaptchaConfig = config;
2524
+ }
2525
+ else {
2526
+ auth._tenantRecaptchaConfigs[auth.tenantId] = config;
2527
+ }
2528
+ return resolve(config.siteKey);
2529
+ }
2530
+ })
2531
+ .catch(function (error) {
2532
+ reject(error);
2533
+ });
2534
+ return [2 /*return*/];
2535
+ });
2536
+ }); })];
2537
+ });
2538
+ });
2539
+ }
2540
+ function retrieveRecaptchaToken(siteKey, resolve, reject) {
2541
+ var grecaptcha = window.grecaptcha;
2542
+ if (isEnterprise(grecaptcha)) {
2543
+ grecaptcha.enterprise.ready(function () {
2544
+ try {
2545
+ grecaptcha.enterprise
2546
+ .execute(siteKey, { action: action })
2547
+ .then(function (token) {
2548
+ resolve(token);
2549
+ })
2550
+ .catch(function (error) {
2551
+ reject(error);
2552
+ });
2553
+ }
2554
+ catch (error) {
2555
+ reject(error);
2556
+ }
2557
+ });
2558
+ }
2559
+ else {
2560
+ reject(Error('No reCAPTCHA enterprise script loaded.'));
2561
+ }
2562
+ }
2563
+ var _this = this;
2564
+ return __generator(this, function (_a) {
2565
+ return [2 /*return*/, new Promise(function (resolve, reject) {
2566
+ retrieveSiteKey(_this.auth)
2567
+ .then(function (siteKey) {
2568
+ if (!forceRefresh && isEnterprise(window.grecaptcha)) {
2569
+ retrieveRecaptchaToken(siteKey, resolve, reject);
2570
+ }
2571
+ else {
2572
+ if (typeof window === 'undefined') {
2573
+ reject(new Error('RecaptchaVerifier is only supported in browser'));
2574
+ return;
2575
+ }
2576
+ _loadJS(RECAPTCHA_ENTERPRISE_URL + siteKey)
2577
+ .then(function () {
2578
+ retrieveRecaptchaToken(siteKey, resolve, reject);
2579
+ })
2580
+ .catch(function (error) {
2581
+ reject(error);
2582
+ });
2583
+ }
2584
+ })
2585
+ .catch(function (error) {
2586
+ reject(error);
2587
+ });
2588
+ })];
2589
+ });
2590
+ });
2591
+ };
2592
+ return RecaptchaEnterpriseVerifier;
2593
+ }());
2594
+ function injectRecaptchaFields(auth, request, action, captchaResp) {
2595
+ if (captchaResp === void 0) { captchaResp = false; }
2596
+ return __awaiter(this, void 0, void 0, function () {
2597
+ var verifier, captchaResponse, newRequest;
2598
+ return __generator(this, function (_a) {
2599
+ switch (_a.label) {
2600
+ case 0:
2601
+ verifier = new RecaptchaEnterpriseVerifier(auth);
2602
+ _a.label = 1;
2603
+ case 1:
2604
+ _a.trys.push([1, 3, , 5]);
2605
+ return [4 /*yield*/, verifier.verify(action)];
2606
+ case 2:
2607
+ captchaResponse = _a.sent();
2608
+ return [3 /*break*/, 5];
2609
+ case 3:
2610
+ _a.sent();
2611
+ return [4 /*yield*/, verifier.verify(action, true)];
2612
+ case 4:
2613
+ captchaResponse = _a.sent();
2614
+ return [3 /*break*/, 5];
2615
+ case 5:
2616
+ newRequest = __assign({}, request);
2617
+ if (!captchaResp) {
2618
+ Object.assign(newRequest, { captchaResponse: captchaResponse });
2619
+ }
2620
+ else {
2621
+ Object.assign(newRequest, { 'captchaResp': captchaResponse });
2622
+ }
2623
+ Object.assign(newRequest, { 'clientType': "CLIENT_TYPE_WEB" /* RecaptchaClientType.WEB */ });
2624
+ Object.assign(newRequest, {
2625
+ 'recaptchaVersion': "RECAPTCHA_ENTERPRISE" /* RecaptchaVersion.ENTERPRISE */
2626
+ });
2627
+ return [2 /*return*/, newRequest];
2628
+ }
2629
+ });
2630
+ });
2631
+ }
2632
+
2334
2633
  /**
2335
2634
  * @license
2336
2635
  * Copyright 2022 Google LLC
@@ -2452,9 +2751,10 @@ var AuthMiddlewareQueue = /** @class */ (function () {
2452
2751
  * limitations under the License.
2453
2752
  */
2454
2753
  var AuthImpl = /** @class */ (function () {
2455
- function AuthImpl(app, heartbeatServiceProvider, config) {
2754
+ function AuthImpl(app, heartbeatServiceProvider, appCheckServiceProvider, config) {
2456
2755
  this.app = app;
2457
2756
  this.heartbeatServiceProvider = heartbeatServiceProvider;
2757
+ this.appCheckServiceProvider = appCheckServiceProvider;
2458
2758
  this.config = config;
2459
2759
  this.currentUser = null;
2460
2760
  this.emulatorConfig = null;
@@ -2472,6 +2772,8 @@ var AuthImpl = /** @class */ (function () {
2472
2772
  this._initializationPromise = null;
2473
2773
  this._popupRedirectResolver = null;
2474
2774
  this._errorFactory = _DEFAULT_AUTH_ERROR_FACTORY;
2775
+ this._agentRecaptchaConfig = null;
2776
+ this._tenantRecaptchaConfigs = {};
2475
2777
  // Tracks the last notified UID for state change listeners to prevent
2476
2778
  // repeated calls to the callbacks. Undefined means it's never been
2477
2779
  // called, whereas null means it's been called with a signed out user
@@ -2801,6 +3103,41 @@ var AuthImpl = /** @class */ (function () {
2801
3103
  });
2802
3104
  }); });
2803
3105
  };
3106
+ AuthImpl.prototype.initializeRecaptchaConfig = function () {
3107
+ return __awaiter(this, void 0, void 0, function () {
3108
+ var response, config, verifier;
3109
+ return __generator(this, function (_a) {
3110
+ switch (_a.label) {
3111
+ case 0: return [4 /*yield*/, getRecaptchaConfig(this, {
3112
+ clientType: "CLIENT_TYPE_WEB" /* RecaptchaClientType.WEB */,
3113
+ version: "RECAPTCHA_ENTERPRISE" /* RecaptchaVersion.ENTERPRISE */
3114
+ })];
3115
+ case 1:
3116
+ response = _a.sent();
3117
+ config = new RecaptchaConfig(response);
3118
+ if (this.tenantId == null) {
3119
+ this._agentRecaptchaConfig = config;
3120
+ }
3121
+ else {
3122
+ this._tenantRecaptchaConfigs[this.tenantId] = config;
3123
+ }
3124
+ if (config.emailPasswordEnabled) {
3125
+ verifier = new RecaptchaEnterpriseVerifier(this);
3126
+ void verifier.verify();
3127
+ }
3128
+ return [2 /*return*/];
3129
+ }
3130
+ });
3131
+ });
3132
+ };
3133
+ AuthImpl.prototype._getRecaptchaConfig = function () {
3134
+ if (this.tenantId == null) {
3135
+ return this._agentRecaptchaConfig;
3136
+ }
3137
+ else {
3138
+ return this._tenantRecaptchaConfigs[this.tenantId];
3139
+ }
3140
+ };
2804
3141
  AuthImpl.prototype._getPersistence = function () {
2805
3142
  return this.assertedPersistence.persistence.type;
2806
3143
  };
@@ -3028,7 +3365,7 @@ var AuthImpl = /** @class */ (function () {
3028
3365
  AuthImpl.prototype._getAdditionalHeaders = function () {
3029
3366
  var _a;
3030
3367
  return __awaiter(this, void 0, void 0, function () {
3031
- var headers, heartbeatsHeader;
3368
+ var headers, heartbeatsHeader, appCheckToken;
3032
3369
  var _b;
3033
3370
  return __generator(this, function (_c) {
3034
3371
  switch (_c.label) {
@@ -3048,11 +3385,39 @@ var AuthImpl = /** @class */ (function () {
3048
3385
  if (heartbeatsHeader) {
3049
3386
  headers["X-Firebase-Client" /* HttpHeader.X_FIREBASE_CLIENT */] = heartbeatsHeader;
3050
3387
  }
3388
+ return [4 /*yield*/, this._getAppCheckToken()];
3389
+ case 2:
3390
+ appCheckToken = _c.sent();
3391
+ if (appCheckToken) {
3392
+ headers["X-Firebase-AppCheck" /* HttpHeader.X_FIREBASE_APP_CHECK */] = appCheckToken;
3393
+ }
3051
3394
  return [2 /*return*/, headers];
3052
3395
  }
3053
3396
  });
3054
3397
  });
3055
3398
  };
3399
+ AuthImpl.prototype._getAppCheckToken = function () {
3400
+ var _a;
3401
+ return __awaiter(this, void 0, void 0, function () {
3402
+ var appCheckTokenResult;
3403
+ return __generator(this, function (_b) {
3404
+ switch (_b.label) {
3405
+ case 0: return [4 /*yield*/, ((_a = this.appCheckServiceProvider
3406
+ .getImmediate({ optional: true })) === null || _a === void 0 ? void 0 : _a.getToken())];
3407
+ case 1:
3408
+ appCheckTokenResult = _b.sent();
3409
+ if (appCheckTokenResult === null || appCheckTokenResult === void 0 ? void 0 : appCheckTokenResult.error) {
3410
+ // Context: appCheck.getToken() will never throw even if an error happened.
3411
+ // In the error case, a dummy token will be returned along with an error field describing
3412
+ // the error. In general, we shouldn't care about the error condition and just use
3413
+ // the token (actual or dummy) to send requests.
3414
+ _logWarn("Error while retrieving App Check token: ".concat(appCheckTokenResult.error));
3415
+ }
3416
+ return [2 /*return*/, appCheckTokenResult === null || appCheckTokenResult === void 0 ? void 0 : appCheckTokenResult.token];
3417
+ }
3418
+ });
3419
+ });
3420
+ };
3056
3421
  return AuthImpl;
3057
3422
  }());
3058
3423
  /**
@@ -3201,26 +3566,25 @@ function registerAuth(clientPlatform) {
3201
3566
  var deps = _a.options;
3202
3567
  var app = container.getProvider('app').getImmediate();
3203
3568
  var heartbeatServiceProvider = container.getProvider('heartbeat');
3569
+ var appCheckServiceProvider = container.getProvider('app-check-internal');
3204
3570
  var _b = app.options, apiKey = _b.apiKey, authDomain = _b.authDomain;
3205
- return (function (app, heartbeatServiceProvider) {
3206
- _assert(apiKey && !apiKey.includes(':'), "invalid-api-key" /* AuthErrorCode.INVALID_API_KEY */, { appName: app.name });
3207
- // Auth domain is optional if IdP sign in isn't being used
3208
- _assert(!(authDomain === null || authDomain === void 0 ? void 0 : authDomain.includes(':')), "argument-error" /* AuthErrorCode.ARGUMENT_ERROR */, {
3209
- appName: app.name
3210
- });
3211
- var config = {
3212
- apiKey: apiKey,
3213
- authDomain: authDomain,
3214
- clientPlatform: clientPlatform,
3215
- apiHost: "identitytoolkit.googleapis.com" /* DefaultConfig.API_HOST */,
3216
- tokenApiHost: "securetoken.googleapis.com" /* DefaultConfig.TOKEN_API_HOST */,
3217
- apiScheme: "https" /* DefaultConfig.API_SCHEME */,
3218
- sdkClientVersion: _getClientVersion(clientPlatform)
3219
- };
3220
- var authInstance = new AuthImpl(app, heartbeatServiceProvider, config);
3221
- _initializeAuthInstance(authInstance, deps);
3222
- return authInstance;
3223
- })(app, heartbeatServiceProvider);
3571
+ _assert(apiKey && !apiKey.includes(':'), "invalid-api-key" /* AuthErrorCode.INVALID_API_KEY */, { appName: app.name });
3572
+ // Auth domain is optional if IdP sign in isn't being used
3573
+ _assert(!(authDomain === null || authDomain === void 0 ? void 0 : authDomain.includes(':')), "argument-error" /* AuthErrorCode.ARGUMENT_ERROR */, {
3574
+ appName: app.name
3575
+ });
3576
+ var config = {
3577
+ apiKey: apiKey,
3578
+ authDomain: authDomain,
3579
+ clientPlatform: clientPlatform,
3580
+ apiHost: "identitytoolkit.googleapis.com" /* DefaultConfig.API_HOST */,
3581
+ tokenApiHost: "securetoken.googleapis.com" /* DefaultConfig.TOKEN_API_HOST */,
3582
+ apiScheme: "https" /* DefaultConfig.API_SCHEME */,
3583
+ sdkClientVersion: _getClientVersion(clientPlatform)
3584
+ };
3585
+ var authInstance = new AuthImpl(app, heartbeatServiceProvider, appCheckServiceProvider, config);
3586
+ _initializeAuthInstance(authInstance, deps);
3587
+ return authInstance;
3224
3588
  }, "PUBLIC" /* ComponentType.PUBLIC */)
3225
3589
  /**
3226
3590
  * Auth can only be initialized by explicitly calling getAuth() or initializeAuth()
@@ -4642,24 +5006,55 @@ var EmailAuthCredential = /** @class */ (function (_super) {
4642
5006
  };
4643
5007
  /** @internal */
4644
5008
  EmailAuthCredential.prototype._getIdTokenResponse = function (auth) {
5009
+ var _a;
4645
5010
  return __awaiter(this, void 0, void 0, function () {
4646
- return __generator(this, function (_a) {
4647
- switch (this.signInMethod) {
4648
- case "password" /* SignInMethod.EMAIL_PASSWORD */:
4649
- return [2 /*return*/, signInWithPassword(auth, {
4650
- returnSecureToken: true,
4651
- email: this._email,
4652
- password: this._password
4653
- })];
4654
- case "emailLink" /* SignInMethod.EMAIL_LINK */:
4655
- return [2 /*return*/, signInWithEmailLink$1(auth, {
4656
- email: this._email,
4657
- oobCode: this._password
4658
- })];
4659
- default:
5011
+ var _b, request_1, requestWithRecaptcha;
5012
+ var _this = this;
5013
+ return __generator(this, function (_c) {
5014
+ switch (_c.label) {
5015
+ case 0:
5016
+ _b = this.signInMethod;
5017
+ switch (_b) {
5018
+ case "password" /* SignInMethod.EMAIL_PASSWORD */: return [3 /*break*/, 1];
5019
+ case "emailLink" /* SignInMethod.EMAIL_LINK */: return [3 /*break*/, 4];
5020
+ }
5021
+ return [3 /*break*/, 5];
5022
+ case 1:
5023
+ request_1 = {
5024
+ returnSecureToken: true,
5025
+ email: this._email,
5026
+ password: this._password,
5027
+ clientType: "CLIENT_TYPE_WEB" /* RecaptchaClientType.WEB */
5028
+ };
5029
+ if (!((_a = auth._getRecaptchaConfig()) === null || _a === void 0 ? void 0 : _a.emailPasswordEnabled)) return [3 /*break*/, 3];
5030
+ return [4 /*yield*/, injectRecaptchaFields(auth, request_1, "signInWithPassword" /* RecaptchaActionName.SIGN_IN_WITH_PASSWORD */)];
5031
+ case 2:
5032
+ requestWithRecaptcha = _c.sent();
5033
+ return [2 /*return*/, signInWithPassword(auth, requestWithRecaptcha)];
5034
+ case 3: return [2 /*return*/, signInWithPassword(auth, request_1).catch(function (error) { return __awaiter(_this, void 0, void 0, function () {
5035
+ var requestWithRecaptcha;
5036
+ return __generator(this, function (_a) {
5037
+ switch (_a.label) {
5038
+ case 0:
5039
+ if (!(error.code === "auth/".concat("missing-recaptcha-token" /* AuthErrorCode.MISSING_RECAPTCHA_TOKEN */))) return [3 /*break*/, 2];
5040
+ console.log('Sign-in with email address and password is protected by reCAPTCHA for this project. Automatically triggering the reCAPTCHA flow and restarting the sign-in flow.');
5041
+ return [4 /*yield*/, injectRecaptchaFields(auth, request_1, "signInWithPassword" /* RecaptchaActionName.SIGN_IN_WITH_PASSWORD */)];
5042
+ case 1:
5043
+ requestWithRecaptcha = _a.sent();
5044
+ return [2 /*return*/, signInWithPassword(auth, requestWithRecaptcha)];
5045
+ case 2: return [2 /*return*/, Promise.reject(error)];
5046
+ }
5047
+ });
5048
+ }); })];
5049
+ case 4: return [2 /*return*/, signInWithEmailLink$1(auth, {
5050
+ email: this._email,
5051
+ oobCode: this._password
5052
+ })];
5053
+ case 5:
4660
5054
  _fail(auth, "internal-error" /* AuthErrorCode.INTERNAL_ERROR */);
5055
+ _c.label = 6;
5056
+ case 6: return [2 /*return*/];
4661
5057
  }
4662
- return [2 /*return*/];
4663
5058
  });
4664
5059
  });
4665
5060
  };
@@ -6839,23 +7234,61 @@ function _setActionCodeSettingsOnRequest(auth, request, actionCodeSettings) {
6839
7234
  * @public
6840
7235
  */
6841
7236
  function sendPasswordResetEmail(auth, email, actionCodeSettings) {
7237
+ var _a;
6842
7238
  return __awaiter(this, void 0, void 0, function () {
6843
- var authModular, request;
6844
- return __generator(this, function (_a) {
6845
- switch (_a.label) {
7239
+ var authInternal, request, requestWithRecaptcha;
7240
+ var _this = this;
7241
+ return __generator(this, function (_b) {
7242
+ switch (_b.label) {
6846
7243
  case 0:
6847
- authModular = getModularInstance(auth);
7244
+ authInternal = _castAuth(auth);
6848
7245
  request = {
6849
7246
  requestType: "PASSWORD_RESET" /* ActionCodeOperation.PASSWORD_RESET */,
6850
- email: email
7247
+ email: email,
7248
+ clientType: "CLIENT_TYPE_WEB" /* RecaptchaClientType.WEB */
6851
7249
  };
7250
+ if (!((_a = authInternal._getRecaptchaConfig()) === null || _a === void 0 ? void 0 : _a.emailPasswordEnabled)) return [3 /*break*/, 3];
7251
+ return [4 /*yield*/, injectRecaptchaFields(authInternal, request, "getOobCode" /* RecaptchaActionName.GET_OOB_CODE */, true)];
7252
+ case 1:
7253
+ requestWithRecaptcha = _b.sent();
6852
7254
  if (actionCodeSettings) {
6853
- _setActionCodeSettingsOnRequest(authModular, request, actionCodeSettings);
7255
+ _setActionCodeSettingsOnRequest(authInternal, requestWithRecaptcha, actionCodeSettings);
6854
7256
  }
6855
- return [4 /*yield*/, sendPasswordResetEmail$1(authModular, request)];
6856
- case 1:
6857
- _a.sent();
6858
- return [2 /*return*/];
7257
+ return [4 /*yield*/, sendPasswordResetEmail$1(authInternal, requestWithRecaptcha)];
7258
+ case 2:
7259
+ _b.sent();
7260
+ return [3 /*break*/, 5];
7261
+ case 3:
7262
+ if (actionCodeSettings) {
7263
+ _setActionCodeSettingsOnRequest(authInternal, request, actionCodeSettings);
7264
+ }
7265
+ return [4 /*yield*/, sendPasswordResetEmail$1(authInternal, request)
7266
+ .catch(function (error) { return __awaiter(_this, void 0, void 0, function () {
7267
+ var requestWithRecaptcha;
7268
+ return __generator(this, function (_a) {
7269
+ switch (_a.label) {
7270
+ case 0:
7271
+ if (!(error.code === "auth/".concat("missing-recaptcha-token" /* AuthErrorCode.MISSING_RECAPTCHA_TOKEN */))) return [3 /*break*/, 3];
7272
+ console.log('Password resets are protected by reCAPTCHA for this project. Automatically triggering the reCAPTCHA flow and restarting the password reset flow.');
7273
+ return [4 /*yield*/, injectRecaptchaFields(authInternal, request, "getOobCode" /* RecaptchaActionName.GET_OOB_CODE */, true)];
7274
+ case 1:
7275
+ requestWithRecaptcha = _a.sent();
7276
+ if (actionCodeSettings) {
7277
+ _setActionCodeSettingsOnRequest(authInternal, requestWithRecaptcha, actionCodeSettings);
7278
+ }
7279
+ return [4 /*yield*/, sendPasswordResetEmail$1(authInternal, requestWithRecaptcha)];
7280
+ case 2:
7281
+ _a.sent();
7282
+ return [3 /*break*/, 4];
7283
+ case 3: return [2 /*return*/, Promise.reject(error)];
7284
+ case 4: return [2 /*return*/];
7285
+ }
7286
+ });
7287
+ }); })];
7288
+ case 4:
7289
+ _b.sent();
7290
+ _b.label = 5;
7291
+ case 5: return [2 /*return*/];
6859
7292
  }
6860
7293
  });
6861
7294
  });
@@ -7000,25 +7433,54 @@ function verifyPasswordResetCode(auth, code) {
7000
7433
  * @public
7001
7434
  */
7002
7435
  function createUserWithEmailAndPassword(auth, email, password) {
7436
+ var _a;
7003
7437
  return __awaiter(this, void 0, void 0, function () {
7004
- var authInternal, response, userCredential;
7005
- return __generator(this, function (_a) {
7006
- switch (_a.label) {
7438
+ var authInternal, request, signUpResponse, requestWithRecaptcha, response, userCredential;
7439
+ var _this = this;
7440
+ return __generator(this, function (_b) {
7441
+ switch (_b.label) {
7007
7442
  case 0:
7008
7443
  authInternal = _castAuth(auth);
7009
- return [4 /*yield*/, signUp(authInternal, {
7010
- returnSecureToken: true,
7011
- email: email,
7012
- password: password
7013
- })];
7444
+ request = {
7445
+ returnSecureToken: true,
7446
+ email: email,
7447
+ password: password,
7448
+ clientType: "CLIENT_TYPE_WEB" /* RecaptchaClientType.WEB */
7449
+ };
7450
+ if (!((_a = authInternal._getRecaptchaConfig()) === null || _a === void 0 ? void 0 : _a.emailPasswordEnabled)) return [3 /*break*/, 2];
7451
+ return [4 /*yield*/, injectRecaptchaFields(authInternal, request, "signUpPassword" /* RecaptchaActionName.SIGN_UP_PASSWORD */)];
7014
7452
  case 1:
7015
- response = _a.sent();
7016
- return [4 /*yield*/, UserCredentialImpl._fromIdTokenResponse(authInternal, "signIn" /* OperationType.SIGN_IN */, response)];
7453
+ requestWithRecaptcha = _b.sent();
7454
+ signUpResponse = signUp(authInternal, requestWithRecaptcha);
7455
+ return [3 /*break*/, 3];
7017
7456
  case 2:
7018
- userCredential = _a.sent();
7457
+ signUpResponse = signUp(authInternal, request).catch(function (error) { return __awaiter(_this, void 0, void 0, function () {
7458
+ var requestWithRecaptcha;
7459
+ return __generator(this, function (_a) {
7460
+ switch (_a.label) {
7461
+ case 0:
7462
+ if (!(error.code === "auth/".concat("missing-recaptcha-token" /* AuthErrorCode.MISSING_RECAPTCHA_TOKEN */))) return [3 /*break*/, 2];
7463
+ console.log('Sign-up is protected by reCAPTCHA for this project. Automatically triggering the reCAPTCHA flow and restarting the sign-up flow.');
7464
+ return [4 /*yield*/, injectRecaptchaFields(authInternal, request, "signUpPassword" /* RecaptchaActionName.SIGN_UP_PASSWORD */)];
7465
+ case 1:
7466
+ requestWithRecaptcha = _a.sent();
7467
+ return [2 /*return*/, signUp(authInternal, requestWithRecaptcha)];
7468
+ case 2: return [2 /*return*/, Promise.reject(error)];
7469
+ }
7470
+ });
7471
+ }); });
7472
+ _b.label = 3;
7473
+ case 3: return [4 /*yield*/, signUpResponse.catch(function (error) {
7474
+ return Promise.reject(error);
7475
+ })];
7476
+ case 4:
7477
+ response = _b.sent();
7478
+ return [4 /*yield*/, UserCredentialImpl._fromIdTokenResponse(authInternal, "signIn" /* OperationType.SIGN_IN */, response)];
7479
+ case 5:
7480
+ userCredential = _b.sent();
7019
7481
  return [4 /*yield*/, authInternal._updateCurrentUser(userCredential.user)];
7020
- case 3:
7021
- _a.sent();
7482
+ case 6:
7483
+ _b.sent();
7022
7484
  return [2 /*return*/, userCredential];
7023
7485
  }
7024
7486
  });
@@ -7099,24 +7561,61 @@ function signInWithEmailAndPassword(auth, email, password) {
7099
7561
  * @public
7100
7562
  */
7101
7563
  function sendSignInLinkToEmail(auth, email, actionCodeSettings) {
7564
+ var _a;
7102
7565
  return __awaiter(this, void 0, void 0, function () {
7103
- var authModular, request;
7104
- return __generator(this, function (_a) {
7105
- switch (_a.label) {
7566
+ function setActionCodeSettings(request, actionCodeSettings) {
7567
+ _assert(actionCodeSettings.handleCodeInApp, authInternal, "argument-error" /* AuthErrorCode.ARGUMENT_ERROR */);
7568
+ if (actionCodeSettings) {
7569
+ _setActionCodeSettingsOnRequest(authInternal, request, actionCodeSettings);
7570
+ }
7571
+ }
7572
+ var authInternal, request, requestWithRecaptcha;
7573
+ var _this = this;
7574
+ return __generator(this, function (_b) {
7575
+ switch (_b.label) {
7106
7576
  case 0:
7107
- authModular = getModularInstance(auth);
7577
+ authInternal = _castAuth(auth);
7108
7578
  request = {
7109
7579
  requestType: "EMAIL_SIGNIN" /* ActionCodeOperation.EMAIL_SIGNIN */,
7110
- email: email
7580
+ email: email,
7581
+ clientType: "CLIENT_TYPE_WEB" /* RecaptchaClientType.WEB */
7111
7582
  };
7112
- _assert(actionCodeSettings.handleCodeInApp, authModular, "argument-error" /* AuthErrorCode.ARGUMENT_ERROR */);
7113
- if (actionCodeSettings) {
7114
- _setActionCodeSettingsOnRequest(authModular, request, actionCodeSettings);
7115
- }
7116
- return [4 /*yield*/, sendSignInLinkToEmail$1(authModular, request)];
7583
+ if (!((_a = authInternal._getRecaptchaConfig()) === null || _a === void 0 ? void 0 : _a.emailPasswordEnabled)) return [3 /*break*/, 3];
7584
+ return [4 /*yield*/, injectRecaptchaFields(authInternal, request, "getOobCode" /* RecaptchaActionName.GET_OOB_CODE */, true)];
7117
7585
  case 1:
7118
- _a.sent();
7119
- return [2 /*return*/];
7586
+ requestWithRecaptcha = _b.sent();
7587
+ setActionCodeSettings(requestWithRecaptcha, actionCodeSettings);
7588
+ return [4 /*yield*/, sendSignInLinkToEmail$1(authInternal, requestWithRecaptcha)];
7589
+ case 2:
7590
+ _b.sent();
7591
+ return [3 /*break*/, 5];
7592
+ case 3:
7593
+ setActionCodeSettings(request, actionCodeSettings);
7594
+ return [4 /*yield*/, sendSignInLinkToEmail$1(authInternal, request)
7595
+ .catch(function (error) { return __awaiter(_this, void 0, void 0, function () {
7596
+ var requestWithRecaptcha;
7597
+ return __generator(this, function (_a) {
7598
+ switch (_a.label) {
7599
+ case 0:
7600
+ if (!(error.code === "auth/".concat("missing-recaptcha-token" /* AuthErrorCode.MISSING_RECAPTCHA_TOKEN */))) return [3 /*break*/, 3];
7601
+ console.log('Email link sign-in is protected by reCAPTCHA for this project. Automatically triggering the reCAPTCHA flow and restarting the sign-in flow.');
7602
+ return [4 /*yield*/, injectRecaptchaFields(authInternal, request, "getOobCode" /* RecaptchaActionName.GET_OOB_CODE */, true)];
7603
+ case 1:
7604
+ requestWithRecaptcha = _a.sent();
7605
+ setActionCodeSettings(requestWithRecaptcha, actionCodeSettings);
7606
+ return [4 /*yield*/, sendSignInLinkToEmail$1(authInternal, requestWithRecaptcha)];
7607
+ case 2:
7608
+ _a.sent();
7609
+ return [3 /*break*/, 4];
7610
+ case 3: return [2 /*return*/, Promise.reject(error)];
7611
+ case 4: return [2 /*return*/];
7612
+ }
7613
+ });
7614
+ }); })];
7615
+ case 4:
7616
+ _b.sent();
7617
+ _b.label = 5;
7618
+ case 5: return [2 /*return*/];
7120
7619
  }
7121
7620
  });
7122
7621
  });
@@ -7712,6 +8211,35 @@ function getAdditionalUserInfo(userCredential) {
7712
8211
  function setPersistence(auth, persistence) {
7713
8212
  return getModularInstance(auth).setPersistence(persistence);
7714
8213
  }
8214
+ /**
8215
+ * Loads the reCAPTCHA configuration into the `Auth` instance.
8216
+ *
8217
+ * @remarks
8218
+ * This will load the reCAPTCHA config, which indicates whether the reCAPTCHA
8219
+ * verification flow should be triggered for each auth provider, into the
8220
+ * current Auth session.
8221
+ *
8222
+ * If initializeRecaptchaConfig() is not invoked, the auth flow will always start
8223
+ * without reCAPTCHA verification. If the provider is configured to require reCAPTCHA
8224
+ * verification, the SDK will transparently load the reCAPTCHA config and restart the
8225
+ * auth flows.
8226
+ *
8227
+ * Thus, by calling this optional method, you will reduce the latency of future auth flows.
8228
+ * Loading the reCAPTCHA config early will also enhance the signal collected by reCAPTCHA.
8229
+ *
8230
+ * @example
8231
+ * ```javascript
8232
+ * initializeRecaptchaConfig(auth);
8233
+ * ```
8234
+ *
8235
+ * @param auth - The {@link Auth} instance.
8236
+ *
8237
+ * @public
8238
+ */
8239
+ function initializeRecaptchaConfig(auth) {
8240
+ var authInternal = _castAuth(auth);
8241
+ return authInternal.initializeRecaptchaConfig();
8242
+ }
7715
8243
  /**
7716
8244
  * Adds an observer for changes to the signed-in user's ID token.
7717
8245
  *
@@ -8137,5 +8665,5 @@ function getAuth(app) {
8137
8665
  return auth;
8138
8666
  }
8139
8667
 
8140
- export { ActionCodeOperation, ActionCodeURL, AuthCredential, AUTH_ERROR_CODES_MAP_DO_NOT_USE_INTERNALLY as AuthErrorCodes, EmailAuthCredential, EmailAuthProvider, FacebookAuthProvider, FactorId, GithubAuthProvider, GoogleAuthProvider, OAuthCredential, OAuthProvider, OperationType, PhoneAuthCredential, ProviderId, SAMLAuthProvider, SignInMethod, TwitterAuthProvider, applyActionCode, beforeAuthStateChanged, checkActionCode, confirmPasswordReset, connectAuthEmulator, createUserWithEmailAndPassword, debugErrorMap, deleteUser, fetchSignInMethodsForEmail, getAdditionalUserInfo, getAuth, getIdToken, getIdTokenResult, getMultiFactorResolver, inMemoryPersistence, indexedDBLocalPersistence, initializeAuth, isSignInWithEmailLink, linkWithCredential, multiFactor, onAuthStateChanged, onIdTokenChanged, parseActionCodeURL, prodErrorMap, reauthenticateWithCredential, reload, sendEmailVerification, sendPasswordResetEmail, sendSignInLinkToEmail, setPersistence, signInAnonymously, signInWithCredential, signInWithCustomToken, signInWithEmailAndPassword, signInWithEmailLink, signOut, unlink, updateCurrentUser, updateEmail, updatePassword, updateProfile, useDeviceLanguage, verifyBeforeUpdateEmail, verifyPasswordResetCode };
8668
+ export { ActionCodeOperation, ActionCodeURL, AuthCredential, AUTH_ERROR_CODES_MAP_DO_NOT_USE_INTERNALLY as AuthErrorCodes, EmailAuthCredential, EmailAuthProvider, FacebookAuthProvider, FactorId, GithubAuthProvider, GoogleAuthProvider, OAuthCredential, OAuthProvider, OperationType, PhoneAuthCredential, ProviderId, SAMLAuthProvider, SignInMethod, TwitterAuthProvider, applyActionCode, beforeAuthStateChanged, checkActionCode, confirmPasswordReset, connectAuthEmulator, createUserWithEmailAndPassword, debugErrorMap, deleteUser, fetchSignInMethodsForEmail, getAdditionalUserInfo, getAuth, getIdToken, getIdTokenResult, getMultiFactorResolver, inMemoryPersistence, indexedDBLocalPersistence, initializeAuth, initializeRecaptchaConfig, isSignInWithEmailLink, linkWithCredential, multiFactor, onAuthStateChanged, onIdTokenChanged, parseActionCodeURL, prodErrorMap, reauthenticateWithCredential, reload, sendEmailVerification, sendPasswordResetEmail, sendSignInLinkToEmail, setPersistence, signInAnonymously, signInWithCredential, signInWithCustomToken, signInWithEmailAndPassword, signInWithEmailLink, signOut, unlink, updateCurrentUser, updateEmail, updatePassword, updateProfile, useDeviceLanguage, verifyBeforeUpdateEmail, verifyPasswordResetCode };
8141
8669
  //# sourceMappingURL=index.webworker.esm5.js.map