@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.
- package/dist/auth-public.d.ts +51 -0
- package/dist/auth.d.ts +55 -1
- package/dist/browser-cjs/{index-1478424f.js → index-763ce1de.js} +253 -3
- package/dist/browser-cjs/index-763ce1de.js.map +1 -0
- package/dist/browser-cjs/index.js +4 -1
- package/dist/browser-cjs/index.js.map +1 -1
- package/dist/browser-cjs/internal.js +4 -1
- package/dist/browser-cjs/internal.js.map +1 -1
- package/dist/browser-cjs/src/api/account_management/account.d.ts +2 -0
- package/dist/browser-cjs/src/api/account_management/passkey.d.ts +83 -0
- package/dist/browser-cjs/src/api/account_management/passkey.test.d.ts +17 -0
- package/dist/browser-cjs/src/api/index.d.ts +5 -1
- package/dist/browser-cjs/src/core/index.d.ts +1 -0
- package/dist/browser-cjs/src/core/strategies/passkey.d.ts +41 -0
- package/dist/browser-cjs/src/core/strategies/passkey.test.d.ts +17 -0
- package/dist/browser-cjs/src/core/user/user_impl.d.ts +2 -1
- package/dist/browser-cjs/src/model/enums.d.ts +6 -2
- package/dist/browser-cjs/src/model/public_types.d.ts +17 -0
- package/dist/browser-cjs/src/model/user.d.ts +3 -0
- package/dist/cordova/index.js +2 -2
- package/dist/cordova/internal.js +2 -2
- package/dist/cordova/{popup_redirect-d9462918.js → popup_redirect-619ee864.js} +323 -4
- package/dist/cordova/popup_redirect-619ee864.js.map +1 -0
- package/dist/cordova/src/api/account_management/account.d.ts +2 -0
- package/dist/cordova/src/api/account_management/passkey.d.ts +83 -0
- package/dist/cordova/src/api/account_management/passkey.test.d.ts +17 -0
- package/dist/cordova/src/api/index.d.ts +5 -1
- package/dist/cordova/src/core/index.d.ts +1 -0
- package/dist/cordova/src/core/strategies/passkey.d.ts +41 -0
- package/dist/cordova/src/core/strategies/passkey.test.d.ts +17 -0
- package/dist/cordova/src/core/user/user_impl.d.ts +2 -1
- package/dist/cordova/src/model/enums.d.ts +6 -2
- package/dist/cordova/src/model/public_types.d.ts +17 -0
- package/dist/cordova/src/model/user.d.ts +3 -0
- package/dist/esm2017/{index-84a2950d.js → index-e517538d.js} +251 -4
- package/dist/esm2017/index-e517538d.js.map +1 -0
- package/dist/esm2017/index.js +1 -1
- package/dist/esm2017/internal.js +2 -2
- package/dist/esm2017/src/api/account_management/account.d.ts +2 -0
- package/dist/esm2017/src/api/account_management/passkey.d.ts +83 -0
- package/dist/esm2017/src/api/account_management/passkey.test.d.ts +17 -0
- package/dist/esm2017/src/api/index.d.ts +5 -1
- package/dist/esm2017/src/core/index.d.ts +1 -0
- package/dist/esm2017/src/core/strategies/passkey.d.ts +41 -0
- package/dist/esm2017/src/core/strategies/passkey.test.d.ts +17 -0
- package/dist/esm2017/src/core/user/user_impl.d.ts +2 -1
- package/dist/esm2017/src/model/enums.d.ts +6 -2
- package/dist/esm2017/src/model/public_types.d.ts +17 -0
- package/dist/esm2017/src/model/user.d.ts +3 -0
- package/dist/esm5/{index-5794a272.js → index-5377e4d7.js} +323 -4
- package/dist/esm5/index-5377e4d7.js.map +1 -0
- package/dist/esm5/index.js +1 -1
- package/dist/esm5/internal.js +2 -2
- package/dist/esm5/src/api/account_management/account.d.ts +2 -0
- package/dist/esm5/src/api/account_management/passkey.d.ts +83 -0
- package/dist/esm5/src/api/account_management/passkey.test.d.ts +17 -0
- package/dist/esm5/src/api/index.d.ts +5 -1
- package/dist/esm5/src/core/index.d.ts +1 -0
- package/dist/esm5/src/core/strategies/passkey.d.ts +41 -0
- package/dist/esm5/src/core/strategies/passkey.test.d.ts +17 -0
- package/dist/esm5/src/core/user/user_impl.d.ts +2 -1
- package/dist/esm5/src/model/enums.d.ts +6 -2
- package/dist/esm5/src/model/public_types.d.ts +17 -0
- package/dist/esm5/src/model/user.d.ts +3 -0
- package/dist/index.webworker.esm5.js +322 -3
- package/dist/index.webworker.esm5.js.map +1 -1
- package/dist/node/index.js +4 -1
- package/dist/node/index.js.map +1 -1
- package/dist/node/internal.js +4 -1
- package/dist/node/internal.js.map +1 -1
- package/dist/node/src/api/account_management/account.d.ts +2 -0
- package/dist/node/src/api/account_management/passkey.d.ts +83 -0
- package/dist/node/src/api/account_management/passkey.test.d.ts +17 -0
- package/dist/node/src/api/index.d.ts +5 -1
- package/dist/node/src/core/index.d.ts +1 -0
- package/dist/node/src/core/strategies/passkey.d.ts +41 -0
- package/dist/node/src/core/strategies/passkey.test.d.ts +17 -0
- package/dist/node/src/core/user/user_impl.d.ts +2 -1
- package/dist/node/src/model/enums.d.ts +6 -2
- package/dist/node/src/model/public_types.d.ts +17 -0
- package/dist/node/src/model/user.d.ts +3 -0
- package/dist/node/{totp-459b14a2.js → totp-e59979fc.js} +325 -3
- package/dist/node/totp-e59979fc.js.map +1 -0
- package/dist/node-esm/index.js +1 -1
- package/dist/node-esm/internal.js +2 -2
- package/dist/node-esm/src/api/account_management/account.d.ts +2 -0
- package/dist/node-esm/src/api/account_management/passkey.d.ts +83 -0
- package/dist/node-esm/src/api/account_management/passkey.test.d.ts +17 -0
- package/dist/node-esm/src/api/index.d.ts +5 -1
- package/dist/node-esm/src/core/index.d.ts +1 -0
- package/dist/node-esm/src/core/strategies/passkey.d.ts +41 -0
- package/dist/node-esm/src/core/strategies/passkey.test.d.ts +17 -0
- package/dist/node-esm/src/core/user/user_impl.d.ts +2 -1
- package/dist/node-esm/src/model/enums.d.ts +6 -2
- package/dist/node-esm/src/model/public_types.d.ts +17 -0
- package/dist/node-esm/src/model/user.d.ts +3 -0
- package/dist/node-esm/{totp-b3ae2602.js → totp-86acc588.js} +251 -4
- package/dist/node-esm/totp-86acc588.js.map +1 -0
- package/dist/rn/{index-c095d784.js → index-551e6aca.js} +325 -3
- package/dist/rn/index-551e6aca.js.map +1 -0
- package/dist/rn/index.js +4 -1
- package/dist/rn/index.js.map +1 -1
- package/dist/rn/internal.js +4 -1
- package/dist/rn/internal.js.map +1 -1
- package/dist/rn/src/api/account_management/account.d.ts +2 -0
- package/dist/rn/src/api/account_management/passkey.d.ts +83 -0
- package/dist/rn/src/api/account_management/passkey.test.d.ts +17 -0
- package/dist/rn/src/api/index.d.ts +5 -1
- package/dist/rn/src/core/index.d.ts +1 -0
- package/dist/rn/src/core/strategies/passkey.d.ts +41 -0
- package/dist/rn/src/core/strategies/passkey.test.d.ts +17 -0
- package/dist/rn/src/core/user/user_impl.d.ts +2 -1
- package/dist/rn/src/model/enums.d.ts +6 -2
- package/dist/rn/src/model/public_types.d.ts +17 -0
- package/dist/rn/src/model/user.d.ts +3 -0
- package/dist/src/api/account_management/account.d.ts +2 -0
- package/dist/src/api/account_management/passkey.d.ts +83 -0
- package/dist/src/api/account_management/passkey.test.d.ts +17 -0
- package/dist/src/api/index.d.ts +5 -1
- package/dist/src/core/index.d.ts +1 -0
- package/dist/src/core/strategies/passkey.d.ts +41 -0
- package/dist/src/core/strategies/passkey.test.d.ts +17 -0
- package/dist/src/core/user/user_impl.d.ts +2 -1
- package/dist/src/model/enums.d.ts +6 -2
- package/dist/src/model/public_types.d.ts +17 -0
- package/dist/src/model/user.d.ts +3 -0
- package/dist/web-extension-cjs/index.js +4 -1
- package/dist/web-extension-cjs/index.js.map +1 -1
- package/dist/web-extension-cjs/internal.js +4 -1
- package/dist/web-extension-cjs/internal.js.map +1 -1
- package/dist/web-extension-cjs/{register-b012df0f.js → register-84d046a5.js} +253 -3
- package/dist/web-extension-cjs/register-84d046a5.js.map +1 -0
- package/dist/web-extension-cjs/src/api/account_management/account.d.ts +2 -0
- package/dist/web-extension-cjs/src/api/account_management/passkey.d.ts +83 -0
- package/dist/web-extension-cjs/src/api/account_management/passkey.test.d.ts +17 -0
- package/dist/web-extension-cjs/src/api/index.d.ts +5 -1
- package/dist/web-extension-cjs/src/core/index.d.ts +1 -0
- package/dist/web-extension-cjs/src/core/strategies/passkey.d.ts +41 -0
- package/dist/web-extension-cjs/src/core/strategies/passkey.test.d.ts +17 -0
- package/dist/web-extension-cjs/src/core/user/user_impl.d.ts +2 -1
- package/dist/web-extension-cjs/src/model/enums.d.ts +6 -2
- package/dist/web-extension-cjs/src/model/public_types.d.ts +17 -0
- package/dist/web-extension-cjs/src/model/user.d.ts +3 -0
- package/dist/web-extension-esm2017/index.js +2 -2
- package/dist/web-extension-esm2017/internal.js +2 -2
- package/dist/web-extension-esm2017/{register-85ceff81.js → register-49f5fb7d.js} +251 -4
- package/dist/web-extension-esm2017/register-49f5fb7d.js.map +1 -0
- package/dist/web-extension-esm2017/src/api/account_management/account.d.ts +2 -0
- package/dist/web-extension-esm2017/src/api/account_management/passkey.d.ts +83 -0
- package/dist/web-extension-esm2017/src/api/account_management/passkey.test.d.ts +17 -0
- package/dist/web-extension-esm2017/src/api/index.d.ts +5 -1
- package/dist/web-extension-esm2017/src/core/index.d.ts +1 -0
- package/dist/web-extension-esm2017/src/core/strategies/passkey.d.ts +41 -0
- package/dist/web-extension-esm2017/src/core/strategies/passkey.test.d.ts +17 -0
- package/dist/web-extension-esm2017/src/core/user/user_impl.d.ts +2 -1
- package/dist/web-extension-esm2017/src/model/enums.d.ts +6 -2
- package/dist/web-extension-esm2017/src/model/public_types.d.ts +17 -0
- package/dist/web-extension-esm2017/src/model/user.d.ts +3 -0
- package/package.json +6 -6
- package/dist/browser-cjs/index-1478424f.js.map +0 -1
- package/dist/cordova/popup_redirect-d9462918.js.map +0 -1
- package/dist/esm2017/index-84a2950d.js.map +0 -1
- package/dist/esm5/index-5794a272.js.map +0 -1
- package/dist/node/totp-459b14a2.js.map +0 -1
- package/dist/node-esm/totp-b3ae2602.js.map +0 -1
- package/dist/rn/index-c095d784.js.map +0 -1
- package/dist/web-extension-cjs/register-b012df0f.js.map +0 -1
- package/dist/web-extension-esm2017/register-85ceff81.js.map +0 -1
package/dist/auth-public.d.ts
CHANGED
|
@@ -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-
|
|
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-
|
|
11078
|
+
//# sourceMappingURL=index-763ce1de.js.map
|