@firebase/auth 1.9.1 → 1.10.0

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 (130) hide show
  1. package/dist/auth-public.d.ts +28 -1
  2. package/dist/auth.d.ts +40 -2
  3. package/dist/browser-cjs/{index-018c7ebd.js → index-eddc1dc3.js} +211 -15
  4. package/dist/browser-cjs/index-eddc1dc3.js.map +1 -0
  5. package/dist/browser-cjs/index.d.ts +2 -1
  6. package/dist/browser-cjs/index.js +2 -1
  7. package/dist/browser-cjs/index.js.map +1 -1
  8. package/dist/browser-cjs/internal.js +2 -1
  9. package/dist/browser-cjs/internal.js.map +1 -1
  10. package/dist/browser-cjs/src/api/index.d.ts +1 -1
  11. package/dist/browser-cjs/src/core/auth/auth_impl.d.ts +4 -1
  12. package/dist/browser-cjs/src/core/persistence/index.d.ts +2 -1
  13. package/dist/browser-cjs/src/model/auth.d.ts +4 -1
  14. package/dist/browser-cjs/src/model/public_types.d.ts +2 -1
  15. package/dist/browser-cjs/src/platform_browser/persistence/cookie_storage.d.ts +40 -0
  16. package/dist/browser-cjs/src/platform_node/index.d.ts +1 -0
  17. package/dist/cordova/auth-cordova-public.d.ts +26 -1
  18. package/dist/cordova/auth-cordova.d.ts +29 -2
  19. package/dist/cordova/index.d.ts +2 -1
  20. package/dist/cordova/index.js +2 -2
  21. package/dist/cordova/internal.js +147 -3
  22. package/dist/cordova/internal.js.map +1 -1
  23. package/dist/cordova/{popup_redirect-e795474a.js → popup_redirect-5323ec00.js} +66 -15
  24. package/dist/cordova/popup_redirect-5323ec00.js.map +1 -0
  25. package/dist/cordova/src/api/index.d.ts +1 -1
  26. package/dist/cordova/src/core/auth/auth_impl.d.ts +4 -1
  27. package/dist/cordova/src/core/persistence/index.d.ts +2 -1
  28. package/dist/cordova/src/model/auth.d.ts +4 -1
  29. package/dist/cordova/src/model/public_types.d.ts +2 -1
  30. package/dist/cordova/src/platform_browser/persistence/cookie_storage.d.ts +40 -0
  31. package/dist/cordova/src/platform_node/index.d.ts +1 -0
  32. package/dist/esm2017/{index-e84cf44d.js → index-c92d61ad.js} +211 -16
  33. package/dist/esm2017/index-c92d61ad.js.map +1 -0
  34. package/dist/esm2017/index.d.ts +2 -1
  35. package/dist/esm2017/index.js +1 -1
  36. package/dist/esm2017/internal.js +2 -2
  37. package/dist/esm2017/src/api/index.d.ts +1 -1
  38. package/dist/esm2017/src/core/auth/auth_impl.d.ts +4 -1
  39. package/dist/esm2017/src/core/persistence/index.d.ts +2 -1
  40. package/dist/esm2017/src/model/auth.d.ts +4 -1
  41. package/dist/esm2017/src/model/public_types.d.ts +2 -1
  42. package/dist/esm2017/src/platform_browser/persistence/cookie_storage.d.ts +40 -0
  43. package/dist/esm2017/src/platform_node/index.d.ts +1 -0
  44. package/dist/index.d.ts +2 -1
  45. package/dist/index.webworker.js +65 -14
  46. package/dist/index.webworker.js.map +1 -1
  47. package/dist/node/index.d.ts +2 -1
  48. package/dist/node/index.js +2 -1
  49. package/dist/node/index.js.map +1 -1
  50. package/dist/node/internal.js +2 -1
  51. package/dist/node/internal.js.map +1 -1
  52. package/dist/node/src/api/index.d.ts +1 -1
  53. package/dist/node/src/core/auth/auth_impl.d.ts +4 -1
  54. package/dist/node/src/core/persistence/index.d.ts +2 -1
  55. package/dist/node/src/model/auth.d.ts +4 -1
  56. package/dist/node/src/model/public_types.d.ts +2 -1
  57. package/dist/node/src/platform_browser/persistence/cookie_storage.d.ts +40 -0
  58. package/dist/node/src/platform_node/index.d.ts +1 -0
  59. package/dist/node/{totp-06fa6909.js → totp-af329771.js} +68 -15
  60. package/dist/node/totp-af329771.js.map +1 -0
  61. package/dist/node-esm/index.d.ts +2 -1
  62. package/dist/node-esm/index.js +1 -1
  63. package/dist/node-esm/internal.js +2 -2
  64. package/dist/node-esm/internal.js.map +1 -1
  65. package/dist/node-esm/src/api/index.d.ts +1 -1
  66. package/dist/node-esm/src/core/auth/auth_impl.d.ts +4 -1
  67. package/dist/node-esm/src/core/persistence/index.d.ts +2 -1
  68. package/dist/node-esm/src/model/auth.d.ts +4 -1
  69. package/dist/node-esm/src/model/public_types.d.ts +2 -1
  70. package/dist/node-esm/src/platform_browser/persistence/cookie_storage.d.ts +40 -0
  71. package/dist/node-esm/src/platform_node/index.d.ts +1 -0
  72. package/dist/node-esm/{totp-d5ff2369.js → totp-7829abf2.js} +68 -16
  73. package/dist/node-esm/totp-7829abf2.js.map +1 -0
  74. package/dist/rn/{index-ee081591.js → index-e8d5e0fb.js} +66 -15
  75. package/dist/rn/index-e8d5e0fb.js.map +1 -0
  76. package/dist/rn/index.d.ts +2 -1
  77. package/dist/rn/index.js +1 -1
  78. package/dist/rn/internal.js +146 -1
  79. package/dist/rn/internal.js.map +1 -1
  80. package/dist/rn/src/api/index.d.ts +1 -1
  81. package/dist/rn/src/core/auth/auth_impl.d.ts +4 -1
  82. package/dist/rn/src/core/persistence/index.d.ts +2 -1
  83. package/dist/rn/src/model/auth.d.ts +4 -1
  84. package/dist/rn/src/model/public_types.d.ts +2 -1
  85. package/dist/rn/src/platform_browser/persistence/cookie_storage.d.ts +40 -0
  86. package/dist/rn/src/platform_node/index.d.ts +1 -0
  87. package/dist/src/api/index.d.ts +1 -1
  88. package/dist/src/core/auth/auth_impl.d.ts +4 -1
  89. package/dist/src/core/persistence/index.d.ts +2 -1
  90. package/dist/src/model/auth.d.ts +4 -1
  91. package/dist/src/model/public_types.d.ts +2 -1
  92. package/dist/src/platform_browser/persistence/cookie_storage.d.ts +40 -0
  93. package/dist/src/platform_node/index.d.ts +1 -0
  94. package/dist/web-extension-cjs/index.d.ts +2 -1
  95. package/dist/web-extension-cjs/index.js +1 -1
  96. package/dist/web-extension-cjs/internal.js +146 -1
  97. package/dist/web-extension-cjs/internal.js.map +1 -1
  98. package/dist/web-extension-cjs/{register-c2c7670d.js → register-b64ddc5e.js} +66 -15
  99. package/dist/web-extension-cjs/register-b64ddc5e.js.map +1 -0
  100. package/dist/web-extension-cjs/src/api/index.d.ts +1 -1
  101. package/dist/web-extension-cjs/src/core/auth/auth_impl.d.ts +4 -1
  102. package/dist/web-extension-cjs/src/core/persistence/index.d.ts +2 -1
  103. package/dist/web-extension-cjs/src/model/auth.d.ts +4 -1
  104. package/dist/web-extension-cjs/src/model/public_types.d.ts +2 -1
  105. package/dist/web-extension-cjs/src/platform_browser/persistence/cookie_storage.d.ts +40 -0
  106. package/dist/web-extension-cjs/src/platform_node/index.d.ts +1 -0
  107. package/dist/web-extension-esm2017/auth-web-extension-public.d.ts +26 -1
  108. package/dist/web-extension-esm2017/auth-web-extension.d.ts +29 -2
  109. package/dist/web-extension-esm2017/index.d.ts +2 -1
  110. package/dist/web-extension-esm2017/index.js +2 -2
  111. package/dist/web-extension-esm2017/internal.js +147 -3
  112. package/dist/web-extension-esm2017/internal.js.map +1 -1
  113. package/dist/web-extension-esm2017/{register-31c228e4.js → register-00522d81.js} +66 -15
  114. package/dist/web-extension-esm2017/register-00522d81.js.map +1 -0
  115. package/dist/web-extension-esm2017/src/api/index.d.ts +1 -1
  116. package/dist/web-extension-esm2017/src/core/auth/auth_impl.d.ts +4 -1
  117. package/dist/web-extension-esm2017/src/core/persistence/index.d.ts +2 -1
  118. package/dist/web-extension-esm2017/src/model/auth.d.ts +4 -1
  119. package/dist/web-extension-esm2017/src/model/public_types.d.ts +2 -1
  120. package/dist/web-extension-esm2017/src/platform_browser/persistence/cookie_storage.d.ts +40 -0
  121. package/dist/web-extension-esm2017/src/platform_node/index.d.ts +1 -0
  122. package/package.json +3 -2
  123. package/dist/browser-cjs/index-018c7ebd.js.map +0 -1
  124. package/dist/cordova/popup_redirect-e795474a.js.map +0 -1
  125. package/dist/esm2017/index-e84cf44d.js.map +0 -1
  126. package/dist/node/totp-06fa6909.js.map +0 -1
  127. package/dist/node-esm/totp-d5ff2369.js.map +0 -1
  128. package/dist/rn/index-ee081591.js.map +0 -1
  129. package/dist/web-extension-cjs/register-c2c7670d.js.map +0 -1
  130. package/dist/web-extension-esm2017/register-31c228e4.js.map +0 -1
@@ -91,7 +91,7 @@ export declare function _addTidIfNecessary<T extends {
91
91
  export declare function _performApiRequest<T, V>(auth: Auth, method: HttpMethod, path: Endpoint, request?: T, customErrorMap?: Partial<ServerErrorMap<ServerError>>): Promise<V>;
92
92
  export declare function _performFetchWithErrorHandling<V>(auth: Auth, customErrorMap: Partial<ServerErrorMap<ServerError>>, fetchFn: () => Promise<Response>): Promise<V>;
93
93
  export declare function _performSignInRequest<T, V extends IdTokenResponse>(auth: Auth, method: HttpMethod, path: Endpoint, request?: T, customErrorMap?: Partial<ServerErrorMap<ServerError>>): Promise<V>;
94
- export declare function _getFinalTarget(auth: Auth, host: string, path: string, query: string): string;
94
+ export declare function _getFinalTarget(auth: Auth, host: string, path: string, query: string): Promise<string>;
95
95
  export declare function _parseEnforcementState(enforcementStateStr: string): EnforcementState;
96
96
  interface PotentialResponse extends IdTokenResponse {
97
97
  email?: string;
@@ -57,6 +57,8 @@ export declare class AuthImpl implements AuthInternal, _FirebaseService {
57
57
  _tenantRecaptchaConfigs: Record<string, RecaptchaConfig>;
58
58
  _projectPasswordPolicy: PasswordPolicyInternal | null;
59
59
  _tenantPasswordPolicies: Record<string, PasswordPolicyInternal>;
60
+ _resolvePersistenceManagerAvailable: ((value: void | PromiseLike<void>) => void) | undefined;
61
+ _persistenceManagerAvailable: Promise<void>;
60
62
  readonly name: string;
61
63
  private lastNotifiedUid;
62
64
  languageCode: string | null;
@@ -82,7 +84,8 @@ export declare class AuthImpl implements AuthInternal, _FirebaseService {
82
84
  validatePassword(password: string): Promise<PasswordValidationStatus>;
83
85
  _getPasswordPolicyInternal(): PasswordPolicyInternal | null;
84
86
  _updatePasswordPolicy(): Promise<void>;
85
- _getPersistence(): string;
87
+ _getPersistenceType(): string;
88
+ _getPersistence(): PersistenceInternal;
86
89
  _updateErrorMap(errorMap: AuthErrorMap): void;
87
90
  onAuthStateChanged(nextOrObserver: NextOrObserver<User>, error?: ErrorFn, completed?: CompleteFn): Unsubscribe;
88
91
  beforeAuthStateChanged(callback: (user: User | null) => void | Promise<void>, onAbort?: () => void): Unsubscribe;
@@ -18,7 +18,8 @@ import { Persistence } from '../../model/public_types';
18
18
  export declare const enum PersistenceType {
19
19
  SESSION = "SESSION",
20
20
  LOCAL = "LOCAL",
21
- NONE = "NONE"
21
+ NONE = "NONE",
22
+ COOKIE = "COOKIE"
22
23
  }
23
24
  export type PersistedBlob = Record<string, unknown>;
24
25
  export interface Instantiator<T> {
@@ -22,6 +22,7 @@ import { UserInternal } from './user';
22
22
  import { ClientPlatform } from '../core/util/version';
23
23
  import { RecaptchaConfig } from '../platform_browser/recaptcha/recaptcha';
24
24
  import { PasswordPolicyInternal } from './password_policy';
25
+ import { PersistenceInternal } from '../core/persistence';
25
26
  export type AppName = string;
26
27
  export type ApiKey = string;
27
28
  export type AuthDomain = string;
@@ -56,6 +57,7 @@ export interface AuthInternal extends Auth {
56
57
  _canInitEmulator: boolean;
57
58
  _isInitialized: boolean;
58
59
  _initializationPromise: Promise<void> | null;
60
+ _persistenceManagerAvailable: Promise<void>;
59
61
  _updateCurrentUser(user: UserInternal | null): Promise<void>;
60
62
  _onStorageEvent(): void;
61
63
  _notifyListenersIfCurrent(user: UserInternal): void;
@@ -66,7 +68,8 @@ export interface AuthInternal extends Auth {
66
68
  _key(): string;
67
69
  _startProactiveRefresh(): void;
68
70
  _stopProactiveRefresh(): void;
69
- _getPersistence(): string;
71
+ _getPersistenceType(): string;
72
+ _getPersistence(): PersistenceInternal;
70
73
  _getRecaptchaConfig(): RecaptchaConfig | null;
71
74
  _getPasswordPolicyInternal(): PasswordPolicyInternal | null;
72
75
  _updatePasswordPolicy(): Promise<void>;
@@ -305,8 +305,9 @@ export interface Persistence {
305
305
  * - 'SESSION' is used for temporary persistence such as `sessionStorage`.
306
306
  * - 'LOCAL' is used for long term persistence such as `localStorage` or `IndexedDB`.
307
307
  * - 'NONE' is used for in-memory, or no persistence.
308
+ * - 'COOKIE' is used for cookie persistence, useful for server-side rendering.
308
309
  */
309
- readonly type: 'SESSION' | 'LOCAL' | 'NONE';
310
+ readonly type: 'SESSION' | 'LOCAL' | 'NONE' | 'COOKIE';
310
311
  }
311
312
  /**
312
313
  * Interface representing ID token result obtained from {@link User.getIdTokenResult}.
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import { Persistence } from '../../model/public_types';
18
+ import { PersistenceInternal, PersistenceType, PersistenceValue, StorageEventListener } from '../../core/persistence';
19
+ export declare class CookiePersistence implements PersistenceInternal {
20
+ static type: 'COOKIE';
21
+ readonly type = PersistenceType.COOKIE;
22
+ listenerUnsubscribes: Map<StorageEventListener, () => void>;
23
+ _getFinalTarget(originalUrl: string): URL | string;
24
+ _isAvailable(): Promise<boolean>;
25
+ _set(_key: string, _value: PersistenceValue): Promise<void>;
26
+ _get<T extends PersistenceValue>(key: string): Promise<T | null>;
27
+ _remove(key: string): Promise<void>;
28
+ _addListener(key: string, listener: StorageEventListener): void;
29
+ _removeListener(_key: string, listener: StorageEventListener): void;
30
+ }
31
+ /**
32
+ * An implementation of {@link Persistence} of type `COOKIE`, for use on the client side in
33
+ * applications leveraging hybrid rendering and middleware.
34
+ *
35
+ * @remarks This persistence method requires companion middleware to function, such as that provided
36
+ * by {@link https://firebaseopensource.com/projects/firebaseextended/reactfire/ | ReactFire} for
37
+ * NextJS.
38
+ * @beta
39
+ */
40
+ export declare const browserCookiePersistence: Persistence;
@@ -28,6 +28,7 @@ declare class FailClass {
28
28
  }
29
29
  export declare const browserLocalPersistence: import("../model/public_types").Persistence;
30
30
  export declare const browserSessionPersistence: import("../model/public_types").Persistence;
31
+ export declare const browserCookiePersistence: import("../model/public_types").Persistence;
31
32
  export declare const indexedDBLocalPersistence: import("../model/public_types").Persistence;
32
33
  export declare const browserPopupRedirectResolver: import("@firebase/app").FirebaseError;
33
34
  export declare const PhoneAuthProvider: typeof FailClass;
@@ -2183,10 +2183,31 @@ declare interface Persistence {
2183
2183
  * - 'SESSION' is used for temporary persistence such as `sessionStorage`.
2184
2184
  * - 'LOCAL' is used for long term persistence such as `localStorage` or `IndexedDB`.
2185
2185
  * - 'NONE' is used for in-memory, or no persistence.
2186
+ * - 'COOKIE' is used for cookie persistence, useful for server-side rendering.
2186
2187
  */
2187
- readonly type: 'SESSION' | 'LOCAL' | 'NONE';
2188
+ readonly type: 'SESSION' | 'LOCAL' | 'NONE' | 'COOKIE';
2188
2189
  }
2189
2190
 
2191
+ declare interface PersistenceInternal extends Persistence {
2192
+ type: PersistenceType;
2193
+ _isAvailable(): Promise<boolean>;
2194
+ _set(key: string, value: PersistenceValue): Promise<void>;
2195
+ _get<T extends PersistenceValue>(key: string): Promise<T | null>;
2196
+ _remove(key: string): Promise<void>;
2197
+ _addListener(key: string, listener: StorageEventListener): void;
2198
+ _removeListener(key: string, listener: StorageEventListener): void;
2199
+ _shouldAllowMigration?: boolean;
2200
+ }
2201
+
2202
+ declare const enum PersistenceType {
2203
+ SESSION = "SESSION",
2204
+ LOCAL = "LOCAL",
2205
+ NONE = "NONE",
2206
+ COOKIE = "COOKIE"
2207
+ }
2208
+
2209
+ declare type PersistenceValue = PersistedBlob | string;
2210
+
2190
2211
  /**
2191
2212
  * Represents the credentials returned by {@link PhoneAuthProvider}.
2192
2213
  *
@@ -2651,6 +2672,10 @@ declare interface StartTotpMfaEnrollmentResponse {
2651
2672
  };
2652
2673
  }
2653
2674
 
2675
+ declare interface StorageEventListener {
2676
+ (value: PersistenceValue | null): void;
2677
+ }
2678
+
2654
2679
  /* Excluded from this release type: StsTokenManager */
2655
2680
 
2656
2681
  /* Excluded from this release type: TaggedWithTokenResponse */
@@ -839,6 +839,7 @@ declare interface AuthInternal extends Auth {
839
839
  _canInitEmulator: boolean;
840
840
  _isInitialized: boolean;
841
841
  _initializationPromise: Promise<void> | null;
842
+ _persistenceManagerAvailable: Promise<void>;
842
843
  _updateCurrentUser(user: UserInternal | null): Promise<void>;
843
844
  _onStorageEvent(): void;
844
845
  _notifyListenersIfCurrent(user: UserInternal): void;
@@ -849,7 +850,8 @@ declare interface AuthInternal extends Auth {
849
850
  _key(): string;
850
851
  _startProactiveRefresh(): void;
851
852
  _stopProactiveRefresh(): void;
852
- _getPersistence(): string;
853
+ _getPersistenceType(): string;
854
+ _getPersistence(): PersistenceInternal;
853
855
  _getRecaptchaConfig(): RecaptchaConfig | null;
854
856
  _getPasswordPolicyInternal(): PasswordPolicyInternal | null;
855
857
  _updatePasswordPolicy(): Promise<void>;
@@ -2580,10 +2582,31 @@ declare interface Persistence {
2580
2582
  * - 'SESSION' is used for temporary persistence such as `sessionStorage`.
2581
2583
  * - 'LOCAL' is used for long term persistence such as `localStorage` or `IndexedDB`.
2582
2584
  * - 'NONE' is used for in-memory, or no persistence.
2585
+ * - 'COOKIE' is used for cookie persistence, useful for server-side rendering.
2583
2586
  */
2584
- readonly type: 'SESSION' | 'LOCAL' | 'NONE';
2587
+ readonly type: 'SESSION' | 'LOCAL' | 'NONE' | 'COOKIE';
2585
2588
  }
2586
2589
 
2590
+ declare interface PersistenceInternal extends Persistence {
2591
+ type: PersistenceType;
2592
+ _isAvailable(): Promise<boolean>;
2593
+ _set(key: string, value: PersistenceValue): Promise<void>;
2594
+ _get<T extends PersistenceValue>(key: string): Promise<T | null>;
2595
+ _remove(key: string): Promise<void>;
2596
+ _addListener(key: string, listener: StorageEventListener): void;
2597
+ _removeListener(key: string, listener: StorageEventListener): void;
2598
+ _shouldAllowMigration?: boolean;
2599
+ }
2600
+
2601
+ declare const enum PersistenceType {
2602
+ SESSION = "SESSION",
2603
+ LOCAL = "LOCAL",
2604
+ NONE = "NONE",
2605
+ COOKIE = "COOKIE"
2606
+ }
2607
+
2608
+ declare type PersistenceValue = PersistedBlob | string;
2609
+
2587
2610
  /**
2588
2611
  * Represents the credentials returned by {@link PhoneAuthProvider}.
2589
2612
  *
@@ -3136,6 +3159,10 @@ declare interface StartTotpMfaEnrollmentResponse {
3136
3159
  };
3137
3160
  }
3138
3161
 
3162
+ declare interface StorageEventListener {
3163
+ (value: PersistenceValue | null): void;
3164
+ }
3165
+
3139
3166
  /**
3140
3167
  * We need to mark this class as internal explicitly to exclude it in the public typings, because
3141
3168
  * it references AuthInternal which has a circular dependency with UserInternal.
@@ -23,6 +23,7 @@ export * from './src/model/public_types';
23
23
  export { FactorId, ProviderId, SignInMethod, OperationType, ActionCodeOperation } from './src/model/enum_maps';
24
24
  export * from './src';
25
25
  import { browserLocalPersistence } from './src/platform_browser/persistence/local_storage';
26
+ import { browserCookiePersistence } from './src/platform_browser/persistence/cookie_storage';
26
27
  import { browserSessionPersistence } from './src/platform_browser/persistence/session_storage';
27
28
  import { indexedDBLocalPersistence } from './src/platform_browser/persistence/indexed_db';
28
29
  import { PhoneAuthProvider } from './src/platform_browser/providers/phone';
@@ -34,4 +35,4 @@ import { browserPopupRedirectResolver } from './src/platform_browser/popup_redir
34
35
  import { PhoneMultiFactorGenerator } from './src/platform_browser/mfa/assertions/phone';
35
36
  import { TotpMultiFactorGenerator, TotpSecret } from './src/mfa/assertions/totp';
36
37
  import { getAuth } from './src/platform_browser';
37
- export { browserLocalPersistence, browserSessionPersistence, indexedDBLocalPersistence, PhoneAuthProvider, signInWithPhoneNumber, linkWithPhoneNumber, reauthenticateWithPhoneNumber, updatePhoneNumber, signInWithPopup, linkWithPopup, reauthenticateWithPopup, signInWithRedirect, linkWithRedirect, reauthenticateWithRedirect, getRedirectResult, RecaptchaVerifier, browserPopupRedirectResolver, PhoneMultiFactorGenerator, TotpMultiFactorGenerator, TotpSecret, getAuth };
38
+ export { browserLocalPersistence, browserCookiePersistence, browserSessionPersistence, indexedDBLocalPersistence, PhoneAuthProvider, signInWithPhoneNumber, linkWithPhoneNumber, reauthenticateWithPhoneNumber, updatePhoneNumber, signInWithPopup, linkWithPopup, reauthenticateWithPopup, signInWithRedirect, linkWithRedirect, reauthenticateWithRedirect, getRedirectResult, RecaptchaVerifier, browserPopupRedirectResolver, PhoneMultiFactorGenerator, TotpMultiFactorGenerator, TotpSecret, getAuth };
@@ -1,5 +1,5 @@
1
- import { r as registerAuth, i as initializeAuth, a as indexedDBLocalPersistence, c as connectAuthEmulator } from './register-31c228e4.js';
2
- export { Y as ActionCodeURL, m as AuthCredential, A as AuthErrorCodes, E as EmailAuthCredential, q as EmailAuthProvider, F as FacebookAuthProvider, t as GithubAuthProvider, G as GoogleAuthProvider, O as OAuthCredential, w as OAuthProvider, P as PhoneAuthCredential, S as SAMLAuthProvider, T as TotpMultiFactorGenerator, b as TotpSecret, x as TwitterAuthProvider, J as applyActionCode, e as beforeAuthStateChanged, K as checkActionCode, I as confirmPasswordReset, c as connectAuthEmulator, M as createUserWithEmailAndPassword, l as debugErrorMap, k as deleteUser, V as fetchSignInMethodsForEmail, a4 as getAdditionalUserInfo, a1 as getIdToken, a2 as getIdTokenResult, a6 as getMultiFactorResolver, n as inMemoryPersistence, a as indexedDBLocalPersistence, i as initializeAuth, d as initializeRecaptchaConfig, R as isSignInWithEmailLink, B as linkWithCredential, a7 as multiFactor, f as onAuthStateChanged, o as onIdTokenChanged, Z as parseActionCodeURL, p as prodErrorMap, C as reauthenticateWithCredential, a5 as reload, j as revokeAccessToken, W as sendEmailVerification, H as sendPasswordResetEmail, Q as sendSignInLinkToEmail, s as setPersistence, y as signInAnonymously, z as signInWithCredential, D as signInWithCustomToken, N as signInWithEmailAndPassword, U as signInWithEmailLink, h as signOut, a3 as unlink, g as updateCurrentUser, $ as updateEmail, a0 as updatePassword, _ as updateProfile, u as useDeviceLanguage, v as validatePassword, X as verifyBeforeUpdateEmail, L as verifyPasswordResetCode } from './register-31c228e4.js';
1
+ import { r as registerAuth, i as initializeAuth, a as indexedDBLocalPersistence, c as connectAuthEmulator } from './register-00522d81.js';
2
+ export { Y as ActionCodeURL, m as AuthCredential, A as AuthErrorCodes, E as EmailAuthCredential, q as EmailAuthProvider, F as FacebookAuthProvider, t as GithubAuthProvider, G as GoogleAuthProvider, O as OAuthCredential, w as OAuthProvider, P as PhoneAuthCredential, S as SAMLAuthProvider, T as TotpMultiFactorGenerator, b as TotpSecret, x as TwitterAuthProvider, J as applyActionCode, e as beforeAuthStateChanged, K as checkActionCode, I as confirmPasswordReset, c as connectAuthEmulator, M as createUserWithEmailAndPassword, l as debugErrorMap, k as deleteUser, V as fetchSignInMethodsForEmail, a4 as getAdditionalUserInfo, a1 as getIdToken, a2 as getIdTokenResult, a6 as getMultiFactorResolver, n as inMemoryPersistence, a as indexedDBLocalPersistence, i as initializeAuth, d as initializeRecaptchaConfig, R as isSignInWithEmailLink, B as linkWithCredential, a7 as multiFactor, f as onAuthStateChanged, o as onIdTokenChanged, Z as parseActionCodeURL, p as prodErrorMap, C as reauthenticateWithCredential, a5 as reload, j as revokeAccessToken, W as sendEmailVerification, H as sendPasswordResetEmail, Q as sendSignInLinkToEmail, s as setPersistence, y as signInAnonymously, z as signInWithCredential, D as signInWithCustomToken, N as signInWithEmailAndPassword, U as signInWithEmailLink, h as signOut, a3 as unlink, g as updateCurrentUser, $ as updateEmail, a0 as updatePassword, _ as updateProfile, u as useDeviceLanguage, v as validatePassword, X as verifyBeforeUpdateEmail, L as verifyPasswordResetCode } from './register-00522d81.js';
3
3
  import { _getProvider, getApp } from '@firebase/app';
4
4
  import { getDefaultEmulatorHost } from '@firebase/util';
5
5
  import 'tslib';
@@ -1,5 +1,5 @@
1
- import { a8 as STORAGE_AVAILABLE_KEY, a9 as _isMobileBrowser, aa as _isIE10, ab as Delay, ac as _window, ad as _assert, ae as isV2, af as _createError, ag as _recaptchaV2ScriptUrl, ah as _loadJS, ai as MockReCaptcha, aj as _generateCallbackName, ak as _castAuth, al as _isHttpOrHttps, am as _isWorker, an as getRecaptchaParams, ao as _serverAppCurrentUserOperationNotSupportedError, z as signInWithCredential, ap as _assertLinkedStatus, B as linkWithCredential, C as reauthenticateWithCredential, aq as _initializeRecaptchaConfig, ar as FAKE_TOKEN, as as startEnrollPhoneMfa, at as handleRecaptchaFlow, au as startSignInPhoneMfa, av as sendPhoneVerificationCode, aw as _link$1, P as PhoneAuthCredential, ax as _getInstance, ay as _signInWithCredential, az as _reauthenticate, m as AuthCredential, aA as signInWithIdp, aB as _fail, aC as debugAssert, aD as _assertInstanceOf, aE as _generateEventId, aF as FederatedAuthProvider, aG as _persistenceKeyName, aH as _performApiRequest, aI as _getCurrentUrl, aJ as _gapiScriptUrl, aK as _emulatorUrl, aL as _isChromeIOS, aM as _isFirefox, aN as _isIOSStandalone, aO as BaseOAuthProvider, aP as _setWindowLocation, aQ as _isSafari, aR as _isIOS, aS as MultiFactorAssertionImpl, aT as finalizeEnrollPhoneMfa, aU as finalizeSignInPhoneMfa, r as registerAuth, i as initializeAuth, a as indexedDBLocalPersistence, e as beforeAuthStateChanged, o as onIdTokenChanged, c as connectAuthEmulator, aV as _setExternalJSProvider, aW as _isAndroid, aX as _isIOS7Or8 } from './register-31c228e4.js';
2
- export { Y as ActionCodeURL, m as AuthCredential, A as AuthErrorCodes, aZ as AuthImpl, E as EmailAuthCredential, q as EmailAuthProvider, F as FacebookAuthProvider, a$ as FetchProvider, t as GithubAuthProvider, G as GoogleAuthProvider, O as OAuthCredential, w as OAuthProvider, P as PhoneAuthCredential, b0 as SAMLAuthCredential, S as SAMLAuthProvider, T as TotpMultiFactorGenerator, b as TotpSecret, x as TwitterAuthProvider, aY as UserImpl, ad as _assert, ak as _castAuth, aB as _fail, aE as _generateEventId, a_ as _getClientVersion, ax as _getInstance, aG as _persistenceKeyName, J as applyActionCode, e as beforeAuthStateChanged, K as checkActionCode, I as confirmPasswordReset, c as connectAuthEmulator, M as createUserWithEmailAndPassword, l as debugErrorMap, k as deleteUser, V as fetchSignInMethodsForEmail, a4 as getAdditionalUserInfo, a1 as getIdToken, a2 as getIdTokenResult, a6 as getMultiFactorResolver, n as inMemoryPersistence, a as indexedDBLocalPersistence, i as initializeAuth, d as initializeRecaptchaConfig, R as isSignInWithEmailLink, B as linkWithCredential, a7 as multiFactor, f as onAuthStateChanged, o as onIdTokenChanged, Z as parseActionCodeURL, p as prodErrorMap, C as reauthenticateWithCredential, a5 as reload, j as revokeAccessToken, W as sendEmailVerification, H as sendPasswordResetEmail, Q as sendSignInLinkToEmail, s as setPersistence, y as signInAnonymously, z as signInWithCredential, D as signInWithCustomToken, N as signInWithEmailAndPassword, U as signInWithEmailLink, h as signOut, a3 as unlink, g as updateCurrentUser, $ as updateEmail, a0 as updatePassword, _ as updateProfile, u as useDeviceLanguage, v as validatePassword, X as verifyBeforeUpdateEmail, L as verifyPasswordResetCode } from './register-31c228e4.js';
1
+ import { a8 as STORAGE_AVAILABLE_KEY, a9 as _isMobileBrowser, aa as _isIE10, ab as Delay, ac as _window, ad as _assert, ae as isV2, af as _createError, ag as _recaptchaV2ScriptUrl, ah as _loadJS, ai as MockReCaptcha, aj as _generateCallbackName, ak as _castAuth, al as _isHttpOrHttps, am as _isWorker, an as getRecaptchaParams, ao as _serverAppCurrentUserOperationNotSupportedError, z as signInWithCredential, ap as _assertLinkedStatus, B as linkWithCredential, C as reauthenticateWithCredential, aq as _initializeRecaptchaConfig, ar as FAKE_TOKEN, as as startEnrollPhoneMfa, at as handleRecaptchaFlow, au as startSignInPhoneMfa, av as sendPhoneVerificationCode, aw as _link$1, P as PhoneAuthCredential, ax as _getInstance, ay as _signInWithCredential, az as _reauthenticate, m as AuthCredential, aA as signInWithIdp, aB as _fail, aC as debugAssert, aD as _assertInstanceOf, aE as _generateEventId, aF as FederatedAuthProvider, aG as _persistenceKeyName, aH as _performApiRequest, aI as _getCurrentUrl, aJ as _gapiScriptUrl, aK as _emulatorUrl, aL as _isChromeIOS, aM as _isFirefox, aN as _isIOSStandalone, aO as BaseOAuthProvider, aP as _setWindowLocation, aQ as _isSafari, aR as _isIOS, aS as MultiFactorAssertionImpl, aT as finalizeEnrollPhoneMfa, aU as finalizeSignInPhoneMfa, r as registerAuth, i as initializeAuth, a as indexedDBLocalPersistence, e as beforeAuthStateChanged, o as onIdTokenChanged, c as connectAuthEmulator, aV as _setExternalJSProvider, aW as _isAndroid, aX as _isIOS7Or8 } from './register-00522d81.js';
2
+ export { Y as ActionCodeURL, m as AuthCredential, A as AuthErrorCodes, aZ as AuthImpl, E as EmailAuthCredential, q as EmailAuthProvider, F as FacebookAuthProvider, a$ as FetchProvider, t as GithubAuthProvider, G as GoogleAuthProvider, O as OAuthCredential, w as OAuthProvider, P as PhoneAuthCredential, b0 as SAMLAuthCredential, S as SAMLAuthProvider, T as TotpMultiFactorGenerator, b as TotpSecret, x as TwitterAuthProvider, aY as UserImpl, ad as _assert, ak as _castAuth, aB as _fail, aE as _generateEventId, a_ as _getClientVersion, ax as _getInstance, aG as _persistenceKeyName, J as applyActionCode, e as beforeAuthStateChanged, K as checkActionCode, I as confirmPasswordReset, c as connectAuthEmulator, M as createUserWithEmailAndPassword, l as debugErrorMap, k as deleteUser, V as fetchSignInMethodsForEmail, a4 as getAdditionalUserInfo, a1 as getIdToken, a2 as getIdTokenResult, a6 as getMultiFactorResolver, n as inMemoryPersistence, a as indexedDBLocalPersistence, i as initializeAuth, d as initializeRecaptchaConfig, R as isSignInWithEmailLink, B as linkWithCredential, a7 as multiFactor, f as onAuthStateChanged, o as onIdTokenChanged, Z as parseActionCodeURL, p as prodErrorMap, C as reauthenticateWithCredential, a5 as reload, j as revokeAccessToken, W as sendEmailVerification, H as sendPasswordResetEmail, Q as sendSignInLinkToEmail, s as setPersistence, y as signInAnonymously, z as signInWithCredential, D as signInWithCustomToken, N as signInWithEmailAndPassword, U as signInWithEmailLink, h as signOut, a3 as unlink, g as updateCurrentUser, $ as updateEmail, a0 as updatePassword, _ as updateProfile, u as useDeviceLanguage, v as validatePassword, X as verifyBeforeUpdateEmail, L as verifyPasswordResetCode } from './register-00522d81.js';
3
3
  import { querystring, getModularInstance, getUA, isEmpty, getExperimentalSetting, getDefaultEmulatorHost, querystringDecode } from '@firebase/util';
4
4
  import { _isFirebaseServerApp, SDK_VERSION, _getProvider, getApp } from '@firebase/app';
5
5
  import 'tslib';
@@ -341,6 +341,150 @@ BrowserLocalPersistence.type = 'LOCAL';
341
341
  */
342
342
  const browserLocalPersistence = BrowserLocalPersistence;
343
343
 
344
+ /**
345
+ * @license
346
+ * Copyright 2025 Google LLC
347
+ *
348
+ * Licensed under the Apache License, Version 2.0 (the "License");
349
+ * you may not use this file except in compliance with the License.
350
+ * You may obtain a copy of the License at
351
+ *
352
+ * http://www.apache.org/licenses/LICENSE-2.0
353
+ *
354
+ * Unless required by applicable law or agreed to in writing, software
355
+ * distributed under the License is distributed on an "AS IS" BASIS,
356
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
357
+ * See the License for the specific language governing permissions and
358
+ * limitations under the License.
359
+ */
360
+ const POLLING_INTERVAL_MS = 1000;
361
+ // Pull a cookie value from document.cookie
362
+ function getDocumentCookie(name) {
363
+ var _a, _b;
364
+ const escapedName = name.replace(/[\\^$.*+?()[\]{}|]/g, '\\$&');
365
+ const matcher = RegExp(`${escapedName}=([^;]+)`);
366
+ return (_b = (_a = document.cookie.match(matcher)) === null || _a === void 0 ? void 0 : _a[1]) !== null && _b !== void 0 ? _b : null;
367
+ }
368
+ // Produce a sanitized cookie name from the persistence key
369
+ function getCookieName(key) {
370
+ // __HOST- doesn't work in localhost https://issues.chromium.org/issues/40196122 but it has
371
+ // desirable security properties, so lets use a different cookie name while in dev-mode.
372
+ // Already checked isSecureContext in _isAvailable, so if it's http we're hitting local.
373
+ const isDevMode = window.location.protocol === 'http:';
374
+ return `${isDevMode ? '__dev_' : '__HOST-'}FIREBASE_${key.split(':')[3]}`;
375
+ }
376
+ class CookiePersistence {
377
+ constructor() {
378
+ this.type = "COOKIE" /* PersistenceType.COOKIE */;
379
+ this.listenerUnsubscribes = new Map();
380
+ }
381
+ // used to get the URL to the backend to proxy to
382
+ _getFinalTarget(originalUrl) {
383
+ if (typeof window === undefined) {
384
+ return originalUrl;
385
+ }
386
+ const url = new URL(`${window.location.origin}/__cookies__`);
387
+ url.searchParams.set('finalTarget', originalUrl);
388
+ return url;
389
+ }
390
+ // To be a usable persistence method in a chain browserCookiePersistence ensures that
391
+ // prerequisites have been met, namely that we're in a secureContext, navigator and document are
392
+ // available and cookies are enabled. Not all UAs support these method, so fallback accordingly.
393
+ async _isAvailable() {
394
+ var _a;
395
+ if (typeof isSecureContext === 'boolean' && !isSecureContext) {
396
+ return false;
397
+ }
398
+ if (typeof navigator === 'undefined' || typeof document === 'undefined') {
399
+ return false;
400
+ }
401
+ return (_a = navigator.cookieEnabled) !== null && _a !== void 0 ? _a : true;
402
+ }
403
+ // Set should be a noop as we expect middleware to handle this
404
+ async _set(_key, _value) {
405
+ return;
406
+ }
407
+ // Attempt to get the cookie from cookieStore, fallback to document.cookie
408
+ async _get(key) {
409
+ if (!this._isAvailable()) {
410
+ return null;
411
+ }
412
+ const name = getCookieName(key);
413
+ if (window.cookieStore) {
414
+ const cookie = await window.cookieStore.get(name);
415
+ return cookie === null || cookie === void 0 ? void 0 : cookie.value;
416
+ }
417
+ return getDocumentCookie(name);
418
+ }
419
+ // Log out by overriding the idToken with a sentinel value of ""
420
+ async _remove(key) {
421
+ if (!this._isAvailable()) {
422
+ return;
423
+ }
424
+ // To make sure we don't hit signout over and over again, only do this operation if we need to
425
+ // with the logout sentinel value of "" this can cause race conditions. Unnecessary set-cookie
426
+ // headers will reduce CDN hit rates too.
427
+ const existingValue = await this._get(key);
428
+ if (!existingValue) {
429
+ return;
430
+ }
431
+ const name = getCookieName(key);
432
+ document.cookie = `${name}=;Max-Age=34560000;Partitioned;Secure;SameSite=Strict;Path=/;Priority=High`;
433
+ await fetch(`/__cookies__`, { method: 'DELETE' }).catch(() => undefined);
434
+ }
435
+ // Listen for cookie changes, both cookieStore and fallback to polling document.cookie
436
+ _addListener(key, listener) {
437
+ if (!this._isAvailable()) {
438
+ return;
439
+ }
440
+ const name = getCookieName(key);
441
+ if (window.cookieStore) {
442
+ const cb = ((event) => {
443
+ const changedCookie = event.changed.find(change => change.name === name);
444
+ if (changedCookie) {
445
+ listener(changedCookie.value);
446
+ }
447
+ const deletedCookie = event.deleted.find(change => change.name === name);
448
+ if (deletedCookie) {
449
+ listener(null);
450
+ }
451
+ });
452
+ const unsubscribe = () => window.cookieStore.removeEventListener('change', cb);
453
+ this.listenerUnsubscribes.set(listener, unsubscribe);
454
+ return window.cookieStore.addEventListener('change', cb);
455
+ }
456
+ let lastValue = getDocumentCookie(name);
457
+ const interval = setInterval(() => {
458
+ const currentValue = getDocumentCookie(name);
459
+ if (currentValue !== lastValue) {
460
+ listener(currentValue);
461
+ lastValue = currentValue;
462
+ }
463
+ }, POLLING_INTERVAL_MS);
464
+ const unsubscribe = () => clearInterval(interval);
465
+ this.listenerUnsubscribes.set(listener, unsubscribe);
466
+ }
467
+ _removeListener(_key, listener) {
468
+ const unsubscribe = this.listenerUnsubscribes.get(listener);
469
+ if (!unsubscribe) {
470
+ return;
471
+ }
472
+ unsubscribe();
473
+ this.listenerUnsubscribes.delete(listener);
474
+ }
475
+ }
476
+ CookiePersistence.type = 'COOKIE';
477
+ /**
478
+ * An implementation of {@link Persistence} of type `COOKIE`, for use on the client side in
479
+ * applications leveraging hybrid rendering and middleware.
480
+ *
481
+ * @remarks This persistence method requires companion middleware to function, such as that provided
482
+ * by {@link https://firebaseopensource.com/projects/firebaseextended/reactfire/ | ReactFire} for
483
+ * NextJS.
484
+ * @beta
485
+ */
486
+ const browserCookiePersistence = CookiePersistence;
487
+
344
488
  /**
345
489
  * @license
346
490
  * Copyright 2020 Google LLC
@@ -3328,5 +3472,5 @@ function addFrameworkForLogging(auth, framework) {
3328
3472
  _castAuth(auth)._logFramework(framework);
3329
3473
  }
3330
3474
 
3331
- export { ActionCodeOperation, AuthPopup, FactorId, OperationType, PhoneAuthProvider, PhoneMultiFactorGenerator, ProviderId, RecaptchaVerifier, SignInMethod, _getRedirectResult, _overrideRedirectResult, addFrameworkForLogging, browserLocalPersistence, browserPopupRedirectResolver, browserSessionPersistence, cordovaPopupRedirectResolver, getAuth, getRedirectResult, linkWithPhoneNumber, linkWithPopup, linkWithRedirect, reauthenticateWithPhoneNumber, reauthenticateWithPopup, reauthenticateWithRedirect, signInWithPhoneNumber, signInWithPopup, signInWithRedirect, updatePhoneNumber };
3475
+ export { ActionCodeOperation, AuthPopup, FactorId, OperationType, PhoneAuthProvider, PhoneMultiFactorGenerator, ProviderId, RecaptchaVerifier, SignInMethod, _getRedirectResult, _overrideRedirectResult, addFrameworkForLogging, browserCookiePersistence, browserLocalPersistence, browserPopupRedirectResolver, browserSessionPersistence, cordovaPopupRedirectResolver, getAuth, getRedirectResult, linkWithPhoneNumber, linkWithPopup, linkWithRedirect, reauthenticateWithPhoneNumber, reauthenticateWithPopup, reauthenticateWithRedirect, signInWithPhoneNumber, signInWithPopup, signInWithRedirect, updatePhoneNumber };
3332
3476
  //# sourceMappingURL=internal.js.map