@firebase/auth 1.7.1-canary.ef3039ba8 → 1.7.1-passkey-preview.103ead202

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 (168) hide show
  1. package/dist/auth-public.d.ts +51 -0
  2. package/dist/auth.d.ts +55 -1
  3. package/dist/browser-cjs/{index-1478424f.js → index-763ce1de.js} +253 -3
  4. package/dist/browser-cjs/index-763ce1de.js.map +1 -0
  5. package/dist/browser-cjs/index.js +4 -1
  6. package/dist/browser-cjs/index.js.map +1 -1
  7. package/dist/browser-cjs/internal.js +4 -1
  8. package/dist/browser-cjs/internal.js.map +1 -1
  9. package/dist/browser-cjs/src/api/account_management/account.d.ts +2 -0
  10. package/dist/browser-cjs/src/api/account_management/passkey.d.ts +83 -0
  11. package/dist/browser-cjs/src/api/account_management/passkey.test.d.ts +17 -0
  12. package/dist/browser-cjs/src/api/index.d.ts +5 -1
  13. package/dist/browser-cjs/src/core/index.d.ts +1 -0
  14. package/dist/browser-cjs/src/core/strategies/passkey.d.ts +41 -0
  15. package/dist/browser-cjs/src/core/strategies/passkey.test.d.ts +17 -0
  16. package/dist/browser-cjs/src/core/user/user_impl.d.ts +2 -1
  17. package/dist/browser-cjs/src/model/enums.d.ts +6 -2
  18. package/dist/browser-cjs/src/model/public_types.d.ts +17 -0
  19. package/dist/browser-cjs/src/model/user.d.ts +3 -0
  20. package/dist/cordova/index.js +2 -2
  21. package/dist/cordova/internal.js +2 -2
  22. package/dist/cordova/{popup_redirect-d9462918.js → popup_redirect-619ee864.js} +323 -4
  23. package/dist/cordova/popup_redirect-619ee864.js.map +1 -0
  24. package/dist/cordova/src/api/account_management/account.d.ts +2 -0
  25. package/dist/cordova/src/api/account_management/passkey.d.ts +83 -0
  26. package/dist/cordova/src/api/account_management/passkey.test.d.ts +17 -0
  27. package/dist/cordova/src/api/index.d.ts +5 -1
  28. package/dist/cordova/src/core/index.d.ts +1 -0
  29. package/dist/cordova/src/core/strategies/passkey.d.ts +41 -0
  30. package/dist/cordova/src/core/strategies/passkey.test.d.ts +17 -0
  31. package/dist/cordova/src/core/user/user_impl.d.ts +2 -1
  32. package/dist/cordova/src/model/enums.d.ts +6 -2
  33. package/dist/cordova/src/model/public_types.d.ts +17 -0
  34. package/dist/cordova/src/model/user.d.ts +3 -0
  35. package/dist/esm2017/{index-84a2950d.js → index-e517538d.js} +251 -4
  36. package/dist/esm2017/index-e517538d.js.map +1 -0
  37. package/dist/esm2017/index.js +1 -1
  38. package/dist/esm2017/internal.js +2 -2
  39. package/dist/esm2017/src/api/account_management/account.d.ts +2 -0
  40. package/dist/esm2017/src/api/account_management/passkey.d.ts +83 -0
  41. package/dist/esm2017/src/api/account_management/passkey.test.d.ts +17 -0
  42. package/dist/esm2017/src/api/index.d.ts +5 -1
  43. package/dist/esm2017/src/core/index.d.ts +1 -0
  44. package/dist/esm2017/src/core/strategies/passkey.d.ts +41 -0
  45. package/dist/esm2017/src/core/strategies/passkey.test.d.ts +17 -0
  46. package/dist/esm2017/src/core/user/user_impl.d.ts +2 -1
  47. package/dist/esm2017/src/model/enums.d.ts +6 -2
  48. package/dist/esm2017/src/model/public_types.d.ts +17 -0
  49. package/dist/esm2017/src/model/user.d.ts +3 -0
  50. package/dist/esm5/{index-5794a272.js → index-5377e4d7.js} +323 -4
  51. package/dist/esm5/index-5377e4d7.js.map +1 -0
  52. package/dist/esm5/index.js +1 -1
  53. package/dist/esm5/internal.js +2 -2
  54. package/dist/esm5/src/api/account_management/account.d.ts +2 -0
  55. package/dist/esm5/src/api/account_management/passkey.d.ts +83 -0
  56. package/dist/esm5/src/api/account_management/passkey.test.d.ts +17 -0
  57. package/dist/esm5/src/api/index.d.ts +5 -1
  58. package/dist/esm5/src/core/index.d.ts +1 -0
  59. package/dist/esm5/src/core/strategies/passkey.d.ts +41 -0
  60. package/dist/esm5/src/core/strategies/passkey.test.d.ts +17 -0
  61. package/dist/esm5/src/core/user/user_impl.d.ts +2 -1
  62. package/dist/esm5/src/model/enums.d.ts +6 -2
  63. package/dist/esm5/src/model/public_types.d.ts +17 -0
  64. package/dist/esm5/src/model/user.d.ts +3 -0
  65. package/dist/index.webworker.esm5.js +322 -3
  66. package/dist/index.webworker.esm5.js.map +1 -1
  67. package/dist/node/index.js +4 -1
  68. package/dist/node/index.js.map +1 -1
  69. package/dist/node/internal.js +4 -1
  70. package/dist/node/internal.js.map +1 -1
  71. package/dist/node/src/api/account_management/account.d.ts +2 -0
  72. package/dist/node/src/api/account_management/passkey.d.ts +83 -0
  73. package/dist/node/src/api/account_management/passkey.test.d.ts +17 -0
  74. package/dist/node/src/api/index.d.ts +5 -1
  75. package/dist/node/src/core/index.d.ts +1 -0
  76. package/dist/node/src/core/strategies/passkey.d.ts +41 -0
  77. package/dist/node/src/core/strategies/passkey.test.d.ts +17 -0
  78. package/dist/node/src/core/user/user_impl.d.ts +2 -1
  79. package/dist/node/src/model/enums.d.ts +6 -2
  80. package/dist/node/src/model/public_types.d.ts +17 -0
  81. package/dist/node/src/model/user.d.ts +3 -0
  82. package/dist/node/{totp-459b14a2.js → totp-e59979fc.js} +325 -3
  83. package/dist/node/totp-e59979fc.js.map +1 -0
  84. package/dist/node-esm/index.js +1 -1
  85. package/dist/node-esm/internal.js +2 -2
  86. package/dist/node-esm/src/api/account_management/account.d.ts +2 -0
  87. package/dist/node-esm/src/api/account_management/passkey.d.ts +83 -0
  88. package/dist/node-esm/src/api/account_management/passkey.test.d.ts +17 -0
  89. package/dist/node-esm/src/api/index.d.ts +5 -1
  90. package/dist/node-esm/src/core/index.d.ts +1 -0
  91. package/dist/node-esm/src/core/strategies/passkey.d.ts +41 -0
  92. package/dist/node-esm/src/core/strategies/passkey.test.d.ts +17 -0
  93. package/dist/node-esm/src/core/user/user_impl.d.ts +2 -1
  94. package/dist/node-esm/src/model/enums.d.ts +6 -2
  95. package/dist/node-esm/src/model/public_types.d.ts +17 -0
  96. package/dist/node-esm/src/model/user.d.ts +3 -0
  97. package/dist/node-esm/{totp-b3ae2602.js → totp-86acc588.js} +251 -4
  98. package/dist/node-esm/totp-86acc588.js.map +1 -0
  99. package/dist/rn/{index-c095d784.js → index-551e6aca.js} +325 -3
  100. package/dist/rn/index-551e6aca.js.map +1 -0
  101. package/dist/rn/index.js +4 -1
  102. package/dist/rn/index.js.map +1 -1
  103. package/dist/rn/internal.js +4 -1
  104. package/dist/rn/internal.js.map +1 -1
  105. package/dist/rn/src/api/account_management/account.d.ts +2 -0
  106. package/dist/rn/src/api/account_management/passkey.d.ts +83 -0
  107. package/dist/rn/src/api/account_management/passkey.test.d.ts +17 -0
  108. package/dist/rn/src/api/index.d.ts +5 -1
  109. package/dist/rn/src/core/index.d.ts +1 -0
  110. package/dist/rn/src/core/strategies/passkey.d.ts +41 -0
  111. package/dist/rn/src/core/strategies/passkey.test.d.ts +17 -0
  112. package/dist/rn/src/core/user/user_impl.d.ts +2 -1
  113. package/dist/rn/src/model/enums.d.ts +6 -2
  114. package/dist/rn/src/model/public_types.d.ts +17 -0
  115. package/dist/rn/src/model/user.d.ts +3 -0
  116. package/dist/src/api/account_management/account.d.ts +2 -0
  117. package/dist/src/api/account_management/passkey.d.ts +83 -0
  118. package/dist/src/api/account_management/passkey.test.d.ts +17 -0
  119. package/dist/src/api/index.d.ts +5 -1
  120. package/dist/src/core/index.d.ts +1 -0
  121. package/dist/src/core/strategies/passkey.d.ts +41 -0
  122. package/dist/src/core/strategies/passkey.test.d.ts +17 -0
  123. package/dist/src/core/user/user_impl.d.ts +2 -1
  124. package/dist/src/model/enums.d.ts +6 -2
  125. package/dist/src/model/public_types.d.ts +17 -0
  126. package/dist/src/model/user.d.ts +3 -0
  127. package/dist/web-extension-cjs/index.js +4 -1
  128. package/dist/web-extension-cjs/index.js.map +1 -1
  129. package/dist/web-extension-cjs/internal.js +4 -1
  130. package/dist/web-extension-cjs/internal.js.map +1 -1
  131. package/dist/web-extension-cjs/{register-b012df0f.js → register-84d046a5.js} +253 -3
  132. package/dist/web-extension-cjs/register-84d046a5.js.map +1 -0
  133. package/dist/web-extension-cjs/src/api/account_management/account.d.ts +2 -0
  134. package/dist/web-extension-cjs/src/api/account_management/passkey.d.ts +83 -0
  135. package/dist/web-extension-cjs/src/api/account_management/passkey.test.d.ts +17 -0
  136. package/dist/web-extension-cjs/src/api/index.d.ts +5 -1
  137. package/dist/web-extension-cjs/src/core/index.d.ts +1 -0
  138. package/dist/web-extension-cjs/src/core/strategies/passkey.d.ts +41 -0
  139. package/dist/web-extension-cjs/src/core/strategies/passkey.test.d.ts +17 -0
  140. package/dist/web-extension-cjs/src/core/user/user_impl.d.ts +2 -1
  141. package/dist/web-extension-cjs/src/model/enums.d.ts +6 -2
  142. package/dist/web-extension-cjs/src/model/public_types.d.ts +17 -0
  143. package/dist/web-extension-cjs/src/model/user.d.ts +3 -0
  144. package/dist/web-extension-esm2017/index.js +2 -2
  145. package/dist/web-extension-esm2017/internal.js +2 -2
  146. package/dist/web-extension-esm2017/{register-85ceff81.js → register-49f5fb7d.js} +251 -4
  147. package/dist/web-extension-esm2017/register-49f5fb7d.js.map +1 -0
  148. package/dist/web-extension-esm2017/src/api/account_management/account.d.ts +2 -0
  149. package/dist/web-extension-esm2017/src/api/account_management/passkey.d.ts +83 -0
  150. package/dist/web-extension-esm2017/src/api/account_management/passkey.test.d.ts +17 -0
  151. package/dist/web-extension-esm2017/src/api/index.d.ts +5 -1
  152. package/dist/web-extension-esm2017/src/core/index.d.ts +1 -0
  153. package/dist/web-extension-esm2017/src/core/strategies/passkey.d.ts +41 -0
  154. package/dist/web-extension-esm2017/src/core/strategies/passkey.test.d.ts +17 -0
  155. package/dist/web-extension-esm2017/src/core/user/user_impl.d.ts +2 -1
  156. package/dist/web-extension-esm2017/src/model/enums.d.ts +6 -2
  157. package/dist/web-extension-esm2017/src/model/public_types.d.ts +17 -0
  158. package/dist/web-extension-esm2017/src/model/user.d.ts +3 -0
  159. package/package.json +6 -6
  160. package/dist/browser-cjs/index-1478424f.js.map +0 -1
  161. package/dist/cordova/popup_redirect-d9462918.js.map +0 -1
  162. package/dist/esm2017/index-84a2950d.js.map +0 -1
  163. package/dist/esm5/index-5794a272.js.map +0 -1
  164. package/dist/node/totp-459b14a2.js.map +0 -1
  165. package/dist/node-esm/totp-b3ae2602.js.map +0 -1
  166. package/dist/rn/index-c095d784.js.map +0 -1
  167. package/dist/web-extension-cjs/register-b012df0f.js.map +0 -1
  168. package/dist/web-extension-esm2017/register-85ceff81.js.map +0 -1
@@ -237,6 +237,7 @@ declare interface APIUserInfo {
237
237
  passwordHash?: string;
238
238
  providerUserInfo?: ProviderUserInfo[];
239
239
  mfaInfo?: MfaEnrollment[];
240
+ passkeyInfo?: PasskeyInfo_2[];
240
241
  }
241
242
 
242
243
  /**
@@ -1102,6 +1103,15 @@ declare const enum EnforcementState {
1102
1103
  OFF = "OFF",
1103
1104
  ENFORCEMENT_STATE_UNSPECIFIED = "ENFORCEMENT_STATE_UNSPECIFIED"
1104
1105
  }
1106
+
1107
+ /**
1108
+ * Enrolls a passkey for the user account.
1109
+ * @param user - The user to enroll the passkey for.
1110
+ * @param name - The name associated with the passkey.
1111
+ * @returns A promise that resolves with a `UserCredential` object.
1112
+ * @public
1113
+ */
1114
+ export declare function enrollPasskey(user: User, name: string): Promise<UserCredential>;
1105
1115
  export { ErrorFn }
1106
1116
 
1107
1117
  /* Excluded from this release type: EventManager */
@@ -2275,6 +2285,25 @@ export declare interface ParsedToken {
2275
2285
  [key: string]: unknown;
2276
2286
  }
2277
2287
 
2288
+ /**
2289
+ * Represents information about a passkey.
2290
+ */
2291
+ export declare interface PasskeyInfo {
2292
+ /**
2293
+ * The credential ID of the passkey.
2294
+ */
2295
+ readonly credentialId: string;
2296
+ /**
2297
+ * The name associated with the passkey.
2298
+ */
2299
+ readonly name?: string;
2300
+ }
2301
+
2302
+ declare interface PasskeyInfo_2 {
2303
+ credentialId: string;
2304
+ name?: string;
2305
+ }
2306
+
2278
2307
  /**
2279
2308
  * A structure specifying password policy requirements.
2280
2309
  *
@@ -3292,6 +3321,15 @@ export declare function signInWithEmailLink(auth: Auth, email: string, emailLink
3292
3321
 
3293
3322
  /* Excluded from this release type: SignInWithIdpResponse */
3294
3323
 
3324
+ /**
3325
+ * Signs in a user with a passkey. Use enrollPasskey to enroll a passkey credential for the current user.
3326
+ * @param auth - The Firebase Auth instance.
3327
+ * @param name - The user's name for passkey.
3328
+ * @param manualSignUp - When false, automatically creates an anonymous user if a passkey credential does not exist. Defaults to false.
3329
+ * @returns A promise that resolves with a `UserCredential` object.
3330
+ */
3331
+ export declare function signInWithPasskey(auth: Auth, name: string, manualSignUp?: boolean): Promise<UserCredential>;
3332
+
3295
3333
  /**
3296
3334
  * Asynchronously signs in using a phone number.
3297
3335
  *
@@ -3624,6 +3662,15 @@ export declare class TwitterAuthProvider extends BaseOAuthProvider {
3624
3662
  private static credentialFromTaggedObject;
3625
3663
  }
3626
3664
 
3665
+ /**
3666
+ * Unenrolls the passkey corresponding to the specified credentialId.
3667
+ * @param user - The user to unenroll the passkey for.
3668
+ * @param credentialId - The ID of the passkey to unenroll.
3669
+ * @returns A promise that resolves when the passkey is successfully unenrolled.
3670
+ * @public
3671
+ */
3672
+ export declare function unenrollPasskey(user: User, credentialId: string): Promise<void>;
3673
+
3627
3674
  /**
3628
3675
  * Unlinks a provider from a user account.
3629
3676
  *
@@ -3767,6 +3814,10 @@ export declare interface User extends UserInfo {
3767
3814
  * Additional per provider such as displayName and profile information.
3768
3815
  */
3769
3816
  readonly providerData: UserInfo[];
3817
+ /**
3818
+ * An array of PasskeyInfo objects representing the passkeys that the user has enrolled.
3819
+ */
3820
+ readonly enrolledPasskeys: PasskeyInfo[];
3770
3821
  /**
3771
3822
  * Refresh token used to reauthenticate the user. Avoid using this directly and prefer
3772
3823
  * {@link User.getIdToken} to refresh the ID token instead.
package/dist/auth.d.ts CHANGED
@@ -243,6 +243,7 @@ declare interface APIUserInfo {
243
243
  passwordHash?: string;
244
244
  providerUserInfo?: ProviderUserInfo[];
245
245
  mfaInfo?: MfaEnrollment[];
246
+ passkeyInfo?: PasskeyInfo_2[];
246
247
  }
247
248
 
248
249
  /**
@@ -1384,6 +1385,15 @@ declare const enum EnforcementState {
1384
1385
  OFF = "OFF",
1385
1386
  ENFORCEMENT_STATE_UNSPECIFIED = "ENFORCEMENT_STATE_UNSPECIFIED"
1386
1387
  }
1388
+
1389
+ /**
1390
+ * Enrolls a passkey for the user account.
1391
+ * @param user - The user to enroll the passkey for.
1392
+ * @param name - The name associated with the passkey.
1393
+ * @returns A promise that resolves with a `UserCredential` object.
1394
+ * @public
1395
+ */
1396
+ export declare function enrollPasskey(user: User, name: string): Promise<UserCredential>;
1387
1397
  export { ErrorFn }
1388
1398
 
1389
1399
  /**
@@ -2622,6 +2632,25 @@ export declare interface ParsedToken {
2622
2632
  [key: string]: unknown;
2623
2633
  }
2624
2634
 
2635
+ /**
2636
+ * Represents information about a passkey.
2637
+ */
2638
+ export declare interface PasskeyInfo {
2639
+ /**
2640
+ * The credential ID of the passkey.
2641
+ */
2642
+ readonly credentialId: string;
2643
+ /**
2644
+ * The name associated with the passkey.
2645
+ */
2646
+ readonly name?: string;
2647
+ }
2648
+
2649
+ declare interface PasskeyInfo_2 {
2650
+ credentialId: string;
2651
+ name?: string;
2652
+ }
2653
+
2625
2654
  /**
2626
2655
  * A structure specifying password policy requirements.
2627
2656
  *
@@ -3148,7 +3177,9 @@ declare const enum ProviderId_2 {
3148
3177
  /** Phone provider */
3149
3178
  PHONE = "phone",
3150
3179
  /** Twitter provider ID */
3151
- TWITTER = "twitter.com"
3180
+ TWITTER = "twitter.com",
3181
+ /** Passkey provider */
3182
+ PASSKEY = "passkey"
3152
3183
  }
3153
3184
 
3154
3185
  declare interface ProviderUserInfo {
@@ -3775,6 +3806,15 @@ declare interface SignInWithIdpResponse extends IdTokenResponse {
3775
3806
  pendingToken?: string;
3776
3807
  }
3777
3808
 
3809
+ /**
3810
+ * Signs in a user with a passkey. Use enrollPasskey to enroll a passkey credential for the current user.
3811
+ * @param auth - The Firebase Auth instance.
3812
+ * @param name - The user's name for passkey.
3813
+ * @param manualSignUp - When false, automatically creates an anonymous user if a passkey credential does not exist. Defaults to false.
3814
+ * @returns A promise that resolves with a `UserCredential` object.
3815
+ */
3816
+ export declare function signInWithPasskey(auth: Auth, name: string, manualSignUp?: boolean): Promise<UserCredential>;
3817
+
3778
3818
  /**
3779
3819
  * Asynchronously signs in using a phone number.
3780
3820
  *
@@ -4151,6 +4191,15 @@ export declare class TwitterAuthProvider extends BaseOAuthProvider {
4151
4191
  private static credentialFromTaggedObject;
4152
4192
  }
4153
4193
 
4194
+ /**
4195
+ * Unenrolls the passkey corresponding to the specified credentialId.
4196
+ * @param user - The user to unenroll the passkey for.
4197
+ * @param credentialId - The ID of the passkey to unenroll.
4198
+ * @returns A promise that resolves when the passkey is successfully unenrolled.
4199
+ * @public
4200
+ */
4201
+ export declare function unenrollPasskey(user: User, credentialId: string): Promise<void>;
4202
+
4154
4203
  /**
4155
4204
  * Unlinks a provider from a user account.
4156
4205
  *
@@ -4294,6 +4343,10 @@ export declare interface User extends UserInfo {
4294
4343
  * Additional per provider such as displayName and profile information.
4295
4344
  */
4296
4345
  readonly providerData: UserInfo[];
4346
+ /**
4347
+ * An array of PasskeyInfo objects representing the passkeys that the user has enrolled.
4348
+ */
4349
+ readonly enrolledPasskeys: PasskeyInfo[];
4297
4350
  /**
4298
4351
  * Refresh token used to reauthenticate the user. Avoid using this directly and prefer
4299
4352
  * {@link User.getIdToken} to refresh the ID token instead.
@@ -4448,6 +4501,7 @@ declare interface UserInternal extends User {
4448
4501
  tenantId: string | null;
4449
4502
  providerData: MutableUserInfo[];
4450
4503
  metadata: UserMetadata_2;
4504
+ enrolledPasskeys: PasskeyInfo_2[];
4451
4505
  stsTokenManager: StsTokenManager;
4452
4506
  _redirectEventId?: string;
4453
4507
  _updateTokensIfNecessary(response: IdTokenResponse | FinalizeMfaResponse, reload?: boolean): Promise<void>;
@@ -1471,7 +1471,8 @@ async function _reloadWithoutSaving(user) {
1471
1471
  tenantId: coreAccount.tenantId || null,
1472
1472
  providerData,
1473
1473
  metadata: new UserMetadata(coreAccount.createdAt, coreAccount.lastLoginAt),
1474
- isAnonymous
1474
+ isAnonymous,
1475
+ enrolledPasskeys: coreAccount.passkeyInfo || []
1475
1476
  };
1476
1477
  Object.assign(user, updates);
1477
1478
  }
@@ -1703,6 +1704,9 @@ class UserImpl {
1703
1704
  this.isAnonymous = opt.isAnonymous || false;
1704
1705
  this.tenantId = opt.tenantId || null;
1705
1706
  this.providerData = opt.providerData ? [...opt.providerData] : [];
1707
+ this.enrolledPasskeys = opt.enrolledPasskeys
1708
+ ? [...opt.enrolledPasskeys]
1709
+ : [];
1706
1710
  this.metadata = new UserMetadata(opt.createdAt || undefined, opt.lastLoginAt || undefined);
1707
1711
  }
1708
1712
  async getIdToken(forceRefresh) {
@@ -1734,6 +1738,7 @@ class UserImpl {
1734
1738
  this.isAnonymous = user.isAnonymous;
1735
1739
  this.tenantId = user.tenantId;
1736
1740
  this.providerData = user.providerData.map(userInfo => (Object.assign({}, userInfo)));
1741
+ this.enrolledPasskeys = user.enrolledPasskeys.map(passkeyInfo => (Object.assign({}, passkeyInfo)));
1737
1742
  this.metadata._copy(user.metadata);
1738
1743
  this.stsTokenManager._assign(user.stsTokenManager);
1739
1744
  }
@@ -6259,6 +6264,248 @@ async function verifyBeforeUpdateEmail(user, newEmail, actionCodeSettings) {
6259
6264
  }
6260
6265
  }
6261
6266
 
6267
+ /**
6268
+ * @license
6269
+ * Copyright 2023 Google LLC
6270
+ *
6271
+ * Licensed under the Apache License, Version 2.0 (the "License");
6272
+ * you may not use this file except in compliance with the License.
6273
+ * You may obtain a copy of the License at
6274
+ *
6275
+ * http://www.apache.org/licenses/LICENSE-2.0
6276
+ *
6277
+ * Unless required by applicable law or agreed to in writing, software
6278
+ * distributed under the License is distributed on an "AS IS" BASIS,
6279
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
6280
+ * See the License for the specific language governing permissions and
6281
+ * limitations under the License.
6282
+ */
6283
+ function publicKeyCredentialToJSON(pubKeyCred) {
6284
+ // Convert ArrayBuffer to Base64
6285
+ function bufferToBase64(buffer) {
6286
+ const byteArray = Array.from(new Uint8Array(buffer));
6287
+ return btoa(String.fromCharCode.apply(null, byteArray));
6288
+ }
6289
+ const clientDataJSON = bufferToBase64(pubKeyCred.response.clientDataJSON);
6290
+ let result = {};
6291
+ // Handle Attestation Response (Registration)
6292
+ if (pubKeyCred.response instanceof AuthenticatorAttestationResponse) {
6293
+ const attestationObject = bufferToBase64(pubKeyCred.response.attestationObject);
6294
+ result = {
6295
+ id: pubKeyCred.id,
6296
+ type: pubKeyCred.type,
6297
+ rawId: bufferToBase64(pubKeyCred.rawId),
6298
+ response: {
6299
+ clientDataJSON,
6300
+ attestationObject
6301
+ }
6302
+ };
6303
+ }
6304
+ // Handle Assertion Response (Authentication)
6305
+ if (pubKeyCred.response instanceof AuthenticatorAssertionResponse) {
6306
+ const authenticatorData = bufferToBase64(pubKeyCred.response.authenticatorData);
6307
+ const signature = bufferToBase64(pubKeyCred.response.signature);
6308
+ const userHandle = pubKeyCred.response.userHandle
6309
+ ? bufferToBase64(pubKeyCred.response.userHandle)
6310
+ : undefined;
6311
+ result = {
6312
+ id: pubKeyCred.id,
6313
+ type: pubKeyCred.type,
6314
+ rawId: bufferToBase64(pubKeyCred.rawId),
6315
+ response: {
6316
+ clientDataJSON,
6317
+ authenticatorData,
6318
+ signature,
6319
+ userHandle
6320
+ }
6321
+ };
6322
+ }
6323
+ return result;
6324
+ }
6325
+ async function startPasskeyEnrollment(auth, request) {
6326
+ return _performApiRequest(auth, "POST" /* HttpMethod.POST */, "/v2/accounts/passkeyEnrollment:start" /* Endpoint.START_PASSKEY_ENROLLMENT */, _addTidIfNecessary(auth, request));
6327
+ }
6328
+ async function finalizePasskeyEnrollment(auth, request) {
6329
+ return _performApiRequest(auth, "POST" /* HttpMethod.POST */, "/v2/accounts/passkeyEnrollment:finalize" /* Endpoint.FINALIZE_PASSKEY_ENROLLMENT */, _addTidIfNecessary(auth, request));
6330
+ }
6331
+ async function startPasskeySignIn(auth, request) {
6332
+ return _performApiRequest(auth, "POST" /* HttpMethod.POST */, "/v2/accounts/passkeySignIn:start" /* Endpoint.START_PASSKEY_SIGNIN */, _addTidIfNecessary(auth, request));
6333
+ }
6334
+ async function finalizePasskeySignIn(auth, request) {
6335
+ return _performApiRequest(auth, "POST" /* HttpMethod.POST */, "/v2/accounts/passkeySignIn:finalize" /* Endpoint.FINALIZE_PASSKEY_SIGNIN */, _addTidIfNecessary(auth, request));
6336
+ }
6337
+ async function passkeyUnenroll(auth, request) {
6338
+ return _performApiRequest(auth, "POST" /* HttpMethod.POST */, "/v1/accounts:update" /* Endpoint.SET_ACCOUNT_INFO */, request);
6339
+ }
6340
+
6341
+ /**
6342
+ * @license
6343
+ * Copyright 2023 Google LLC
6344
+ *
6345
+ * Licensed under the Apache License, Version 2.0 (the "License");
6346
+ * you may not use this file except in compliance with the License.
6347
+ * You may obtain a copy of the License at
6348
+ *
6349
+ * http://www.apache.org/licenses/LICENSE-2.0
6350
+ *
6351
+ * Unless required by applicable law or agreed to in writing, software
6352
+ * distributed under the License is distributed on an "AS IS" BASIS,
6353
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
6354
+ * See the License for the specific language governing permissions and
6355
+ * limitations under the License.
6356
+ */
6357
+ const DEFAULT_PASSKEY_ACCOUNT_NAME = 'Unnamed account (Web)';
6358
+ const PASSKEY_LOOK_UP_ERROR_MESSAGE = 'The operation either timed out or was not allowed.';
6359
+ /**
6360
+ * Signs in a user with a passkey. Use enrollPasskey to enroll a passkey credential for the current user.
6361
+ * @param auth - The Firebase Auth instance.
6362
+ * @param name - The user's name for passkey.
6363
+ * @param manualSignUp - When false, automatically creates an anonymous user if a passkey credential does not exist. Defaults to false.
6364
+ * @returns A promise that resolves with a `UserCredential` object.
6365
+ */
6366
+ async function signInWithPasskey(auth, name, manualSignUp = false) {
6367
+ const authInternal = _castAuth(auth);
6368
+ // Start Passkey Sign in
6369
+ const startSignInRequest = {};
6370
+ const startSignInResponse = await startPasskeySignIn(authInternal, startSignInRequest);
6371
+ const options = getPasskeyCredentialRequestOptions(startSignInResponse, name);
6372
+ // Get the credential
6373
+ let credential;
6374
+ try {
6375
+ credential = (await navigator.credentials.get({
6376
+ publicKey: options
6377
+ }));
6378
+ const finalizeSignInRequest = {
6379
+ authenticatorAuthenticationResponse: publicKeyCredentialToJSON(credential),
6380
+ name,
6381
+ displayName: name
6382
+ };
6383
+ const finalizeSignInResponse = await finalizePasskeySignIn(authInternal, finalizeSignInRequest);
6384
+ const operationType = "signIn" /* OperationType.SIGN_IN */;
6385
+ const userCredential = await UserCredentialImpl._fromIdTokenResponse(authInternal, operationType, finalizeSignInResponse);
6386
+ await auth.updateCurrentUser(userCredential.user);
6387
+ return userCredential;
6388
+ }
6389
+ catch (error) {
6390
+ if (error.message.includes(PASSKEY_LOOK_UP_ERROR_MESSAGE) &&
6391
+ !manualSignUp) {
6392
+ // If the user is not signed up, sign them up anonymously
6393
+ const userCredential = await signInAnonymously(authInternal);
6394
+ const user = userCredential.user;
6395
+ return enrollPasskey(user, name);
6396
+ }
6397
+ return Promise.reject(error);
6398
+ }
6399
+ }
6400
+ /**
6401
+ * Enrolls a passkey for the user account.
6402
+ * @param user - The user to enroll the passkey for.
6403
+ * @param name - The name associated with the passkey.
6404
+ * @returns A promise that resolves with a `UserCredential` object.
6405
+ * @public
6406
+ */
6407
+ async function enrollPasskey(user, name) {
6408
+ const userInternal = util.getModularInstance(user);
6409
+ const authInternal = _castAuth(userInternal.auth);
6410
+ if (name === '') {
6411
+ name = DEFAULT_PASSKEY_ACCOUNT_NAME;
6412
+ }
6413
+ // Start Passkey Enrollment
6414
+ const idToken = await userInternal.getIdToken();
6415
+ const startEnrollmentRequest = {
6416
+ idToken
6417
+ };
6418
+ const startEnrollmentResponse = await startPasskeyEnrollment(authInternal, startEnrollmentRequest);
6419
+ // Create the crendential
6420
+ try {
6421
+ const options = getPasskeyCredentialCreationOptions(startEnrollmentResponse, name);
6422
+ const credential = (await navigator.credentials.create({
6423
+ publicKey: options
6424
+ }));
6425
+ const idToken = await userInternal.getIdToken();
6426
+ const finalizeEnrollmentRequest = {
6427
+ idToken,
6428
+ authenticatorRegistrationResponse: publicKeyCredentialToJSON(credential),
6429
+ name,
6430
+ displayName: name
6431
+ };
6432
+ const finalizeEnrollmentResponse = await finalizePasskeyEnrollment(authInternal, finalizeEnrollmentRequest);
6433
+ // The passkey provider is linked with the user's current providers.
6434
+ const operationType = "link" /* OperationType.LINK */;
6435
+ const userCredential = await UserCredentialImpl._fromIdTokenResponse(userInternal.auth, operationType, finalizeEnrollmentResponse);
6436
+ return userCredential;
6437
+ }
6438
+ catch (err) {
6439
+ return Promise.reject(err);
6440
+ }
6441
+ }
6442
+ /**
6443
+ * Unenrolls the passkey corresponding to the specified credentialId.
6444
+ * @param user - The user to unenroll the passkey for.
6445
+ * @param credentialId - The ID of the passkey to unenroll.
6446
+ * @returns A promise that resolves when the passkey is successfully unenrolled.
6447
+ * @public
6448
+ */
6449
+ async function unenrollPasskey(user, credentialId) {
6450
+ const userInternal = util.getModularInstance(user);
6451
+ const authInternal = _castAuth(userInternal.auth);
6452
+ const idToken = await userInternal.getIdToken();
6453
+ const request = {
6454
+ idToken,
6455
+ deletePasskey: [credentialId]
6456
+ };
6457
+ await passkeyUnenroll(authInternal, request);
6458
+ }
6459
+ // Converts an array of credential IDs of `excludeCredentials` field to an array of `PublicKeyCredentialDescriptor` objects.
6460
+ function convertExcludeCredentials(options) {
6461
+ function base64ToBuffer(base64) {
6462
+ const binaryStr = atob(base64);
6463
+ const len = binaryStr.length;
6464
+ const bytes = new Uint8Array(len);
6465
+ for (let i = 0; i < len; i++) {
6466
+ bytes[i] = binaryStr.charCodeAt(i);
6467
+ }
6468
+ return bytes.buffer;
6469
+ }
6470
+ if ('excludeCredentials' in options && options.excludeCredentials) {
6471
+ for (const cred of options.excludeCredentials) {
6472
+ if (typeof cred.id === 'string') {
6473
+ // Assuming Base64 encoded strings
6474
+ cred.id = base64ToBuffer(cred.id);
6475
+ }
6476
+ }
6477
+ }
6478
+ }
6479
+ function getPasskeyCredentialCreationOptions(response, name = '') {
6480
+ const options = response.credentialCreationOptions;
6481
+ if (name === '') {
6482
+ name = 'Unnamed account (Web)';
6483
+ }
6484
+ options.user.name = name;
6485
+ options.user.displayName = name;
6486
+ const userId = options.user.id;
6487
+ options.user.id = Uint8Array.from(atob(userId), c => c.charCodeAt(0));
6488
+ const rpId = window.location.hostname;
6489
+ options.rp.id = rpId;
6490
+ options.rp.name = rpId;
6491
+ const challengeBase64 = options.challenge;
6492
+ options.challenge = Uint8Array.from(atob(challengeBase64), c => c.charCodeAt(0));
6493
+ convertExcludeCredentials(options);
6494
+ return options;
6495
+ }
6496
+ function getPasskeyCredentialRequestOptions(response, name = '') {
6497
+ const options = response.credentialRequestOptions;
6498
+ if (name === '') {
6499
+ name = 'Unnamed account (Web)';
6500
+ }
6501
+ const rpId = window.location.hostname;
6502
+ options.rpId = rpId;
6503
+ const challengeBase64 = options.challenge;
6504
+ options.challenge = Uint8Array.from(atob(challengeBase64), c => c.charCodeAt(0));
6505
+ convertExcludeCredentials(options);
6506
+ return options;
6507
+ }
6508
+
6262
6509
  /**
6263
6510
  * @license
6264
6511
  * Copyright 2020 Google LLC
@@ -10464,7 +10711,7 @@ function _isEmptyString(input) {
10464
10711
  }
10465
10712
 
10466
10713
  var name = "@firebase/auth";
10467
- var version = "1.7.1-canary.ef3039ba8";
10714
+ var version = "1.7.1-passkey-preview.103ead202";
10468
10715
 
10469
10716
  /**
10470
10717
  * @license
@@ -10775,6 +11022,7 @@ exports.createUserWithEmailAndPassword = createUserWithEmailAndPassword;
10775
11022
  exports.debugAssert = debugAssert;
10776
11023
  exports.debugErrorMap = debugErrorMap;
10777
11024
  exports.deleteUser = deleteUser;
11025
+ exports.enrollPasskey = enrollPasskey;
10778
11026
  exports.fetchSignInMethodsForEmail = fetchSignInMethodsForEmail;
10779
11027
  exports.getAdditionalUserInfo = getAdditionalUserInfo;
10780
11028
  exports.getAuth = getAuth;
@@ -10811,10 +11059,12 @@ exports.signInWithCredential = signInWithCredential;
10811
11059
  exports.signInWithCustomToken = signInWithCustomToken;
10812
11060
  exports.signInWithEmailAndPassword = signInWithEmailAndPassword;
10813
11061
  exports.signInWithEmailLink = signInWithEmailLink;
11062
+ exports.signInWithPasskey = signInWithPasskey;
10814
11063
  exports.signInWithPhoneNumber = signInWithPhoneNumber;
10815
11064
  exports.signInWithPopup = signInWithPopup;
10816
11065
  exports.signInWithRedirect = signInWithRedirect;
10817
11066
  exports.signOut = signOut;
11067
+ exports.unenrollPasskey = unenrollPasskey;
10818
11068
  exports.unlink = unlink;
10819
11069
  exports.updateCurrentUser = updateCurrentUser;
10820
11070
  exports.updateEmail = updateEmail;
@@ -10825,4 +11075,4 @@ exports.useDeviceLanguage = useDeviceLanguage;
10825
11075
  exports.validatePassword = validatePassword;
10826
11076
  exports.verifyBeforeUpdateEmail = verifyBeforeUpdateEmail;
10827
11077
  exports.verifyPasswordResetCode = verifyPasswordResetCode;
10828
- //# sourceMappingURL=index-1478424f.js.map
11078
+ //# sourceMappingURL=index-763ce1de.js.map