@@ -25,12 +25,18 @@ type WebAuthnGetCredentialReturn =
25
25
CredentialReturn < __experimental_PublicKeyCredentialWithAuthenticatorAssertionResponse > ;
26
26
27
27
type ClerkWebAuthnErrorCode =
28
- | 'passkey_exists'
29
- | 'passkey_retrieval_aborted'
28
+ // Generic
29
+ | 'passkey_not_supported'
30
+ | 'passkeys_pa_not_supported'
31
+ | 'passkey_invalid_rpID_or_domain'
32
+ | 'passkey_already_exists'
33
+ | 'passkey_operation_aborted'
34
+ // Retrieval
30
35
| 'passkey_retrieval_cancelled'
36
+ | 'passkey_retrieval_failed'
37
+ // Registration
31
38
| 'passkey_registration_cancelled'
32
- | 'passkey_credential_create_failed'
33
- | 'passkey_credential_get_failed' ;
39
+ | 'passkey_registration_failed' ;
34
40
35
41
function isWebAuthnSupported ( ) {
36
42
return (
@@ -92,7 +98,7 @@ async function webAuthnCreateCredential(
92
98
if ( ! credential ) {
93
99
return {
94
100
error : new ClerkWebAuthnError ( 'Browser failed to create credential' , {
95
- code : 'passkey_credential_create_failed ' ,
101
+ code : 'passkey_registration_failed ' ,
96
102
} ) ,
97
103
publicKeyCredential : null ,
98
104
} ;
@@ -148,7 +154,7 @@ async function webAuthnGetCredential({
148
154
149
155
if ( ! credential ) {
150
156
return {
151
- error : new ClerkWebAuthnError ( 'Browser failed to get credential' , { code : 'passkey_credential_get_failed ' } ) ,
157
+ error : new ClerkWebAuthnError ( 'Browser failed to get credential' , { code : 'passkey_retrieval_failed ' } ) ,
152
158
publicKeyCredential : null ,
153
159
} ;
154
160
}
@@ -159,33 +165,40 @@ async function webAuthnGetCredential({
159
165
}
160
166
}
161
167
168
+ function handlePublicKeyError ( error : Error ) : ClerkWebAuthnError | ClerkRuntimeError | Error {
169
+ if ( error . name === 'AbortError' ) {
170
+ return new ClerkWebAuthnError ( error . message , { code : 'passkey_operation_aborted' } ) ;
171
+ }
172
+ if ( error . name === 'SecurityError' ) {
173
+ return new ClerkWebAuthnError ( error . message , { code : 'passkey_invalid_rpID_or_domain' } ) ;
174
+ }
175
+ return error ;
176
+ }
177
+
162
178
/**
163
179
* Map webauthn errors from `navigator.credentials.create()` to Clerk-js errors
164
180
* @param error
165
181
*/
166
182
function handlePublicKeyCreateError ( error : Error ) : ClerkWebAuthnError | ClerkRuntimeError | Error {
167
183
if ( error . name === 'InvalidStateError' ) {
168
184
// Note: Firefox will throw 'NotAllowedError' when passkeys exists
169
- return new ClerkWebAuthnError ( error . message , { code : 'passkey_exists' } ) ;
170
- } else if ( error . name === 'NotAllowedError' ) {
185
+ return new ClerkWebAuthnError ( error . message , { code : 'passkey_already_exists' } ) ;
186
+ }
187
+ if ( error . name === 'NotAllowedError' ) {
171
188
return new ClerkWebAuthnError ( error . message , { code : 'passkey_registration_cancelled' } ) ;
172
189
}
173
- return error ;
190
+ return handlePublicKeyError ( error ) ;
174
191
}
175
192
176
193
/**
177
194
* Map webauthn errors from `navigator.credentials.get()` to Clerk-js errors
178
195
* @param error
179
196
*/
180
197
function handlePublicKeyGetError ( error : Error ) : ClerkWebAuthnError | ClerkRuntimeError | Error {
181
- if ( error . name === 'AbortError' ) {
182
- return new ClerkWebAuthnError ( error . message , { code : 'passkey_retrieval_aborted' } ) ;
183
- }
184
-
185
198
if ( error . name === 'NotAllowedError' ) {
186
199
return new ClerkWebAuthnError ( error . message , { code : 'passkey_retrieval_cancelled' } ) ;
187
200
}
188
- return error ;
201
+ return handlePublicKeyError ( error ) ;
189
202
}
190
203
191
204
function convertJSONToPublicKeyCreateOptions ( jsonPublicKey : PublicKeyCredentialCreationOptionsJSON ) {
0 commit comments