@aws-amplify/auth 6.15.1 → 6.15.2-unstable.42b6d67.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 (111) hide show
  1. package/dist/cjs/client/utils/index.js +2 -1
  2. package/dist/cjs/client/utils/index.js.map +1 -1
  3. package/dist/cjs/client/utils/passkey/errors/handlePasskeyAuthenticationError.js +34 -0
  4. package/dist/cjs/client/utils/passkey/errors/handlePasskeyAuthenticationError.js.map +1 -0
  5. package/dist/cjs/client/utils/passkey/errors/handlePasskeyAuthenticationError.native.js +44 -0
  6. package/dist/cjs/client/utils/passkey/errors/handlePasskeyAuthenticationError.native.js.map +1 -0
  7. package/dist/cjs/client/utils/passkey/errors/handlePasskeyError.js +47 -0
  8. package/dist/cjs/client/utils/passkey/errors/handlePasskeyError.js.map +1 -0
  9. package/dist/cjs/client/utils/passkey/errors/handlePasskeyError.native.js +46 -0
  10. package/dist/cjs/client/utils/passkey/errors/handlePasskeyError.native.js.map +1 -0
  11. package/dist/cjs/client/utils/passkey/errors/handlePasskeyRegistrationError.js +45 -0
  12. package/dist/cjs/client/utils/passkey/errors/handlePasskeyRegistrationError.js.map +1 -0
  13. package/dist/cjs/client/utils/passkey/errors/handlePasskeyRegistrationError.native.js +55 -0
  14. package/dist/cjs/client/utils/passkey/errors/handlePasskeyRegistrationError.native.js.map +1 -0
  15. package/dist/cjs/client/utils/passkey/errors/index.js +15 -0
  16. package/dist/cjs/client/utils/passkey/errors/index.js.map +1 -0
  17. package/dist/cjs/client/utils/passkey/errors/passkeyError.js +82 -0
  18. package/dist/cjs/client/utils/passkey/errors/passkeyError.js.map +1 -0
  19. package/dist/cjs/client/utils/passkey/errors/passkeyErrorPlatformConstants.js +8 -0
  20. package/dist/cjs/client/utils/passkey/errors/passkeyErrorPlatformConstants.js.map +1 -0
  21. package/dist/cjs/client/utils/passkey/errors/passkeyErrorPlatformConstants.native.js +8 -0
  22. package/dist/cjs/client/utils/passkey/errors/passkeyErrorPlatformConstants.native.js.map +1 -0
  23. package/dist/cjs/client/utils/passkey/getIsPasskeySupported.native.js +2 -2
  24. package/dist/cjs/client/utils/passkey/getIsPasskeySupported.native.js.map +1 -1
  25. package/dist/cjs/client/utils/passkey/getPasskey.native.js +9 -3
  26. package/dist/cjs/client/utils/passkey/getPasskey.native.js.map +1 -1
  27. package/dist/cjs/client/utils/passkey/registerPasskey.native.js +9 -3
  28. package/dist/cjs/client/utils/passkey/registerPasskey.native.js.map +1 -1
  29. package/dist/cjs/index.js +2 -3
  30. package/dist/cjs/index.js.map +1 -1
  31. package/dist/cjs/providers/cognito/apis/signInWithRedirect.js +3 -0
  32. package/dist/cjs/providers/cognito/apis/signInWithRedirect.js.map +1 -1
  33. package/dist/esm/client/apis/associateWebAuthnCredential.mjs +1 -1
  34. package/dist/esm/client/flows/userAuth/handleWebAuthnSignInResult.mjs +1 -1
  35. package/dist/esm/client/utils/index.d.ts +1 -1
  36. package/dist/esm/client/utils/index.mjs +1 -2
  37. package/dist/esm/client/utils/index.mjs.map +1 -1
  38. package/dist/esm/client/utils/passkey/errors/handlePasskeyAuthenticationError.d.ts +9 -0
  39. package/dist/esm/client/utils/passkey/errors/handlePasskeyAuthenticationError.mjs +32 -0
  40. package/dist/esm/client/utils/passkey/errors/handlePasskeyAuthenticationError.mjs.map +1 -0
  41. package/dist/esm/client/utils/passkey/errors/handlePasskeyAuthenticationError.native.d.ts +8 -0
  42. package/dist/esm/client/utils/passkey/errors/handlePasskeyAuthenticationError.native.mjs +42 -0
  43. package/dist/esm/client/utils/passkey/errors/handlePasskeyAuthenticationError.native.mjs.map +1 -0
  44. package/dist/esm/client/utils/passkey/errors/handlePasskeyError.d.ts +10 -0
  45. package/dist/esm/client/utils/passkey/errors/handlePasskeyError.mjs +45 -0
  46. package/dist/esm/client/utils/passkey/errors/handlePasskeyError.mjs.map +1 -0
  47. package/dist/esm/client/utils/passkey/errors/handlePasskeyError.native.d.ts +8 -0
  48. package/dist/esm/client/utils/passkey/errors/handlePasskeyError.native.mjs +44 -0
  49. package/dist/esm/client/utils/passkey/errors/handlePasskeyError.native.mjs.map +1 -0
  50. package/dist/esm/client/utils/passkey/errors/handlePasskeyRegistrationError.d.ts +9 -0
  51. package/dist/esm/client/utils/passkey/errors/handlePasskeyRegistrationError.mjs +43 -0
  52. package/dist/esm/client/utils/passkey/errors/handlePasskeyRegistrationError.mjs.map +1 -0
  53. package/dist/esm/client/utils/passkey/errors/handlePasskeyRegistrationError.native.d.ts +8 -0
  54. package/dist/esm/client/utils/passkey/errors/handlePasskeyRegistrationError.native.mjs +53 -0
  55. package/dist/esm/client/utils/passkey/errors/handlePasskeyRegistrationError.native.mjs.map +1 -0
  56. package/dist/esm/client/utils/passkey/errors/index.d.ts +3 -0
  57. package/dist/esm/client/utils/passkey/errors/index.mjs +4 -0
  58. package/dist/esm/client/utils/passkey/errors/index.mjs.map +1 -0
  59. package/dist/esm/client/utils/passkey/{errors.d.ts → errors/passkeyError.d.ts} +2 -17
  60. package/dist/esm/client/utils/passkey/errors/passkeyError.mjs +80 -0
  61. package/dist/esm/client/utils/passkey/errors/passkeyError.mjs.map +1 -0
  62. package/dist/esm/client/utils/passkey/errors/passkeyErrorPlatformConstants.d.ts +1 -0
  63. package/dist/esm/client/utils/passkey/errors/passkeyErrorPlatformConstants.mjs +6 -0
  64. package/dist/esm/client/utils/passkey/errors/passkeyErrorPlatformConstants.mjs.map +1 -0
  65. package/dist/esm/client/utils/passkey/errors/passkeyErrorPlatformConstants.native.d.ts +1 -0
  66. package/dist/esm/client/utils/passkey/errors/passkeyErrorPlatformConstants.native.mjs +6 -0
  67. package/dist/esm/client/utils/passkey/errors/passkeyErrorPlatformConstants.native.mjs.map +1 -0
  68. package/dist/esm/client/utils/passkey/getIsPasskeySupported.native.d.ts +1 -1
  69. package/dist/esm/client/utils/passkey/getIsPasskeySupported.native.mjs +2 -2
  70. package/dist/esm/client/utils/passkey/getIsPasskeySupported.native.mjs.map +1 -1
  71. package/dist/esm/client/utils/passkey/getPasskey.mjs +3 -1
  72. package/dist/esm/client/utils/passkey/getPasskey.mjs.map +1 -1
  73. package/dist/esm/client/utils/passkey/getPasskey.native.d.ts +2 -1
  74. package/dist/esm/client/utils/passkey/getPasskey.native.mjs +11 -3
  75. package/dist/esm/client/utils/passkey/getPasskey.native.mjs.map +1 -1
  76. package/dist/esm/client/utils/passkey/registerPasskey.mjs +3 -1
  77. package/dist/esm/client/utils/passkey/registerPasskey.mjs.map +1 -1
  78. package/dist/esm/client/utils/passkey/registerPasskey.native.d.ts +2 -1
  79. package/dist/esm/client/utils/passkey/registerPasskey.native.mjs +11 -3
  80. package/dist/esm/client/utils/passkey/registerPasskey.native.mjs.map +1 -1
  81. package/dist/esm/client/utils/passkey/types/index.mjs +2 -1
  82. package/dist/esm/client/utils/passkey/types/index.mjs.map +1 -1
  83. package/dist/esm/client/utils/passkey/types/shared.d.ts +4 -4
  84. package/dist/esm/client/utils/passkey/types/shared.mjs +2 -1
  85. package/dist/esm/client/utils/passkey/types/shared.mjs.map +1 -1
  86. package/dist/esm/index.d.ts +1 -2
  87. package/dist/esm/providers/cognito/apis/signInWithRedirect.mjs +3 -0
  88. package/dist/esm/providers/cognito/apis/signInWithRedirect.mjs.map +1 -1
  89. package/package.json +111 -105
  90. package/src/client/utils/index.ts +1 -1
  91. package/src/client/utils/passkey/errors/handlePasskeyAuthenticationError.native.ts +54 -0
  92. package/src/client/utils/passkey/errors/handlePasskeyAuthenticationError.ts +40 -0
  93. package/src/client/utils/passkey/errors/handlePasskeyError.native.ts +53 -0
  94. package/src/client/utils/passkey/errors/handlePasskeyError.ts +53 -0
  95. package/src/client/utils/passkey/errors/handlePasskeyRegistrationError.native.ts +66 -0
  96. package/src/client/utils/passkey/errors/handlePasskeyRegistrationError.ts +52 -0
  97. package/src/client/utils/passkey/errors/index.ts +10 -0
  98. package/src/client/utils/passkey/errors/passkeyError.ts +96 -0
  99. package/src/client/utils/passkey/errors/passkeyErrorPlatformConstants.native.ts +5 -0
  100. package/src/client/utils/passkey/errors/passkeyErrorPlatformConstants.ts +5 -0
  101. package/src/client/utils/passkey/getIsPasskeySupported.native.ts +2 -2
  102. package/src/client/utils/passkey/getPasskey.native.ts +12 -3
  103. package/src/client/utils/passkey/registerPasskey.native.ts +12 -3
  104. package/src/client/utils/passkey/types/shared.ts +4 -4
  105. package/src/index.ts +1 -2
  106. package/src/providers/cognito/apis/signInWithRedirect.ts +3 -0
  107. package/dist/cjs/client/utils/passkey/errors.js +0 -180
  108. package/dist/cjs/client/utils/passkey/errors.js.map +0 -1
  109. package/dist/esm/client/utils/passkey/errors.mjs +0 -176
  110. package/dist/esm/client/utils/passkey/errors.mjs.map +0 -1
  111. package/src/client/utils/passkey/errors.ts +0 -214
@@ -1,8 +1,8 @@
1
1
  // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
- import { PlatformNotSupportedError } from '@aws-amplify/core/internals/utils';
4
+ import { loadAmplifyRtnPasskeys } from '@aws-amplify/react-native';
5
5
 
6
6
  export const getIsPasskeySupported = () => {
7
- throw new PlatformNotSupportedError();
7
+ return loadAmplifyRtnPasskeys().getIsPasskeySupported();
8
8
  };
@@ -1,8 +1,17 @@
1
1
  // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
- import { PlatformNotSupportedError } from '@aws-amplify/core/internals/utils';
4
+ import { loadAmplifyRtnPasskeys } from '@aws-amplify/react-native';
5
5
 
6
- export const getPasskey = async () => {
7
- throw new PlatformNotSupportedError();
6
+ import { PasskeyGetOptionsJson, PasskeyGetResultJson } from './types';
7
+ import { handlePasskeyAuthenticationError } from './errors';
8
+
9
+ export const getPasskey = async (
10
+ input: PasskeyGetOptionsJson,
11
+ ): Promise<PasskeyGetResultJson> => {
12
+ try {
13
+ return await loadAmplifyRtnPasskeys().getPasskey(input);
14
+ } catch (err: unknown) {
15
+ throw handlePasskeyAuthenticationError(err);
16
+ }
8
17
  };
@@ -1,8 +1,17 @@
1
1
  // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
- import { PlatformNotSupportedError } from '@aws-amplify/core/internals/utils';
4
+ import { loadAmplifyRtnPasskeys } from '@aws-amplify/react-native';
5
5
 
6
- export const registerPasskey = async () => {
7
- throw new PlatformNotSupportedError();
6
+ import { PasskeyCreateOptionsJson, PasskeyCreateResultJson } from './types';
7
+ import { handlePasskeyRegistrationError } from './errors';
8
+
9
+ export const registerPasskey = async (
10
+ input: PasskeyCreateOptionsJson,
11
+ ): Promise<PasskeyCreateResultJson> => {
12
+ try {
13
+ return await loadAmplifyRtnPasskeys().createPasskey(input);
14
+ } catch (err: unknown) {
15
+ throw handlePasskeyRegistrationError(err);
16
+ }
8
17
  };
@@ -55,8 +55,8 @@ export interface PkcAttestationResponse<T> {
55
55
  attestationObject: T;
56
56
  transports: string[];
57
57
  publicKey?: string;
58
- publicKeyAlgorithm: number;
59
- authenticatorData: T;
58
+ publicKeyAlgorithm?: number;
59
+ authenticatorData?: T;
60
60
  }
61
61
  export interface PasskeyCreateResult {
62
62
  id: string;
@@ -69,7 +69,7 @@ export interface PasskeyCreateResultJson {
69
69
  id: string;
70
70
  rawId: string;
71
71
  type: string;
72
- clientExtensionResults: {
72
+ clientExtensionResults?: {
73
73
  appId?: boolean;
74
74
  credProps?: { rk?: boolean };
75
75
  hmacCreateSecret?: boolean;
@@ -121,7 +121,7 @@ export interface PasskeyGetResultJson {
121
121
  id: string;
122
122
  rawId: string;
123
123
  type: string;
124
- clientExtensionResults: {
124
+ clientExtensionResults?: {
125
125
  appId?: boolean;
126
126
  credProps?: { rk?: boolean };
127
127
  hmacCreateSecret?: boolean;
package/src/index.ts CHANGED
@@ -88,9 +88,8 @@ export {
88
88
  JWT,
89
89
  } from '@aws-amplify/core';
90
90
 
91
- export { associateWebAuthnCredential } from './client/apis';
92
-
93
91
  export {
92
+ associateWebAuthnCredential,
94
93
  listWebAuthnCredentials,
95
94
  deleteWebAuthnCredential,
96
95
  } from './client/apis';
@@ -149,6 +149,9 @@ const oauthSignIn = async ({
149
149
  if (type === 'error') {
150
150
  throw createOAuthError(String(error));
151
151
  }
152
+ if (type === 'canceled') {
153
+ throw createOAuthError(String(type));
154
+ }
152
155
  if (type === 'success' && url) {
153
156
  await completeOAuthFlow({
154
157
  currentUrl: url,
@@ -1,180 +0,0 @@
1
- 'use strict';
2
-
3
- // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
4
- // SPDX-License-Identifier: Apache-2.0
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.handlePasskeyRegistrationError = exports.handlePasskeyAuthenticationError = exports.assertPasskeyError = exports.PasskeyErrorCode = exports.PasskeyError = void 0;
7
- const utils_1 = require("@aws-amplify/core/internals/utils");
8
- class PasskeyError extends utils_1.AmplifyError {
9
- constructor(params) {
10
- super(params);
11
- // Hack for making the custom error class work when transpiled to es5
12
- // TODO: Delete the following 2 lines after we change the build target to >= es2015
13
- this.constructor = PasskeyError;
14
- Object.setPrototypeOf(this, PasskeyError.prototype);
15
- }
16
- }
17
- exports.PasskeyError = PasskeyError;
18
- var PasskeyErrorCode;
19
- (function (PasskeyErrorCode) {
20
- // not supported
21
- PasskeyErrorCode["PasskeyNotSupported"] = "PasskeyNotSupported";
22
- // duplicate passkey
23
- PasskeyErrorCode["PasskeyAlreadyExists"] = "PasskeyAlreadyExists";
24
- // misconfigurations
25
- PasskeyErrorCode["InvalidPasskeyRegistrationOptions"] = "InvalidPasskeyRegistrationOptions";
26
- PasskeyErrorCode["InvalidPasskeyAuthenticationOptions"] = "InvalidPasskeyAuthenticationOptions";
27
- PasskeyErrorCode["RelyingPartyMismatch"] = "RelyingPartyMismatch";
28
- // failed credential creation / retrieval
29
- PasskeyErrorCode["PasskeyRegistrationFailed"] = "PasskeyRegistrationFailed";
30
- PasskeyErrorCode["PasskeyRetrievalFailed"] = "PasskeyRetrievalFailed";
31
- // cancel / aborts
32
- PasskeyErrorCode["PasskeyRegistrationCanceled"] = "PasskeyRegistrationCanceled";
33
- PasskeyErrorCode["PasskeyAuthenticationCanceled"] = "PasskeyAuthenticationCanceled";
34
- PasskeyErrorCode["PasskeyOperationAborted"] = "PasskeyOperationAborted";
35
- })(PasskeyErrorCode || (exports.PasskeyErrorCode = PasskeyErrorCode = {}));
36
- const notSupportedRecoverySuggestion = 'Passkeys may not be supported on this device. Ensure your application is running in a secure context (HTTPS) and Web Authentication API is supported.';
37
- const abortOrCancelRecoverySuggestion = 'User may have canceled the ceremony or another interruption has occurred. Check underlying error for details.';
38
- const misconfigurationRecoverySuggestion = 'Ensure your user pool is configured to support the WEB_AUTHN as an authentication factor.';
39
- const passkeyErrorMap = {
40
- [PasskeyErrorCode.PasskeyNotSupported]: {
41
- message: 'Passkeys may not be supported on this device.',
42
- recoverySuggestion: notSupportedRecoverySuggestion,
43
- },
44
- [PasskeyErrorCode.InvalidPasskeyRegistrationOptions]: {
45
- message: 'Invalid passkey registration options.',
46
- recoverySuggestion: misconfigurationRecoverySuggestion,
47
- },
48
- [PasskeyErrorCode.InvalidPasskeyAuthenticationOptions]: {
49
- message: 'Invalid passkey authentication options.',
50
- recoverySuggestion: misconfigurationRecoverySuggestion,
51
- },
52
- [PasskeyErrorCode.PasskeyRegistrationFailed]: {
53
- message: 'Device failed to create passkey.',
54
- recoverySuggestion: notSupportedRecoverySuggestion,
55
- },
56
- [PasskeyErrorCode.PasskeyRetrievalFailed]: {
57
- message: 'Device failed to retrieve passkey.',
58
- recoverySuggestion: 'Passkeys may not be available on this device. Try an alternative authentication factor like PASSWORD, EMAIL_OTP, or SMS_OTP.',
59
- },
60
- [PasskeyErrorCode.PasskeyAlreadyExists]: {
61
- message: 'Passkey already exists in authenticator.',
62
- recoverySuggestion: 'Proceed with existing passkey or try again after deleting the credential.',
63
- },
64
- [PasskeyErrorCode.PasskeyRegistrationCanceled]: {
65
- message: 'Passkey registration ceremony has been canceled.',
66
- recoverySuggestion: abortOrCancelRecoverySuggestion,
67
- },
68
- [PasskeyErrorCode.PasskeyAuthenticationCanceled]: {
69
- message: 'Passkey authentication ceremony has been canceled.',
70
- recoverySuggestion: abortOrCancelRecoverySuggestion,
71
- },
72
- [PasskeyErrorCode.PasskeyOperationAborted]: {
73
- message: 'Passkey operation has been aborted.',
74
- recoverySuggestion: abortOrCancelRecoverySuggestion,
75
- },
76
- [PasskeyErrorCode.RelyingPartyMismatch]: {
77
- message: 'Relying party does not match current domain.',
78
- recoverySuggestion: 'Ensure relying party identifier matches current domain.',
79
- },
80
- };
81
- exports.assertPasskeyError = (0, utils_1.createAssertionFunction)(passkeyErrorMap, PasskeyError);
82
- /**
83
- * Handle Passkey Authentication Errors
84
- * https://w3c.github.io/webauthn/#sctn-get-request-exceptions
85
- *
86
- * @param err unknown
87
- * @returns PasskeyError
88
- */
89
- const handlePasskeyAuthenticationError = (err) => {
90
- if (err instanceof PasskeyError) {
91
- return err;
92
- }
93
- if (err instanceof Error) {
94
- if (err.name === 'NotAllowedError') {
95
- const { message, recoverySuggestion } = passkeyErrorMap[PasskeyErrorCode.PasskeyAuthenticationCanceled];
96
- return new PasskeyError({
97
- name: PasskeyErrorCode.PasskeyAuthenticationCanceled,
98
- message,
99
- recoverySuggestion,
100
- underlyingError: err,
101
- });
102
- }
103
- }
104
- return handlePasskeyError(err);
105
- };
106
- exports.handlePasskeyAuthenticationError = handlePasskeyAuthenticationError;
107
- /**
108
- * Handle Passkey Registration Errors
109
- * https://w3c.github.io/webauthn/#sctn-create-request-exceptions
110
- *
111
- * @param err unknown
112
- * @returns PasskeyError
113
- */
114
- const handlePasskeyRegistrationError = (err) => {
115
- if (err instanceof PasskeyError) {
116
- return err;
117
- }
118
- if (err instanceof Error) {
119
- // Duplicate Passkey
120
- if (err.name === 'InvalidStateError') {
121
- const { message, recoverySuggestion } = passkeyErrorMap[PasskeyErrorCode.PasskeyAlreadyExists];
122
- return new PasskeyError({
123
- name: PasskeyErrorCode.PasskeyAlreadyExists,
124
- message,
125
- recoverySuggestion,
126
- underlyingError: err,
127
- });
128
- }
129
- // User Cancels Ceremony / Generic Catch All
130
- if (err.name === 'NotAllowedError') {
131
- const { message, recoverySuggestion } = passkeyErrorMap[PasskeyErrorCode.PasskeyRegistrationCanceled];
132
- return new PasskeyError({
133
- name: PasskeyErrorCode.PasskeyRegistrationCanceled,
134
- message,
135
- recoverySuggestion,
136
- underlyingError: err,
137
- });
138
- }
139
- }
140
- return handlePasskeyError(err);
141
- };
142
- exports.handlePasskeyRegistrationError = handlePasskeyRegistrationError;
143
- /**
144
- * Handles Overlapping Passkey Errors Between Registration & Authentication
145
- * https://w3c.github.io/webauthn/#sctn-create-request-exceptions
146
- * https://w3c.github.io/webauthn/#sctn-get-request-exceptions
147
- *
148
- * @param err unknown
149
- * @returns PasskeyError
150
- */
151
- const handlePasskeyError = (err) => {
152
- if (err instanceof Error) {
153
- // Passkey Operation Aborted
154
- if (err.name === 'AbortError') {
155
- const { message, recoverySuggestion } = passkeyErrorMap[PasskeyErrorCode.PasskeyOperationAborted];
156
- return new PasskeyError({
157
- name: PasskeyErrorCode.PasskeyOperationAborted,
158
- message,
159
- recoverySuggestion,
160
- underlyingError: err,
161
- });
162
- }
163
- // Relying Party / Domain Mismatch
164
- if (err.name === 'SecurityError') {
165
- const { message, recoverySuggestion } = passkeyErrorMap[PasskeyErrorCode.RelyingPartyMismatch];
166
- return new PasskeyError({
167
- name: PasskeyErrorCode.RelyingPartyMismatch,
168
- message,
169
- recoverySuggestion,
170
- underlyingError: err,
171
- });
172
- }
173
- }
174
- return new PasskeyError({
175
- name: utils_1.AmplifyErrorCode.Unknown,
176
- message: 'An unknown error has occurred.',
177
- underlyingError: err,
178
- });
179
- };
180
- //# sourceMappingURL=errors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.js","sources":["../../../../../src/client/utils/passkey/errors.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.handlePasskeyRegistrationError = exports.handlePasskeyAuthenticationError = exports.assertPasskeyError = exports.PasskeyErrorCode = exports.PasskeyError = void 0;\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nclass PasskeyError extends utils_1.AmplifyError {\n constructor(params) {\n super(params);\n // Hack for making the custom error class work when transpiled to es5\n // TODO: Delete the following 2 lines after we change the build target to >= es2015\n this.constructor = PasskeyError;\n Object.setPrototypeOf(this, PasskeyError.prototype);\n }\n}\nexports.PasskeyError = PasskeyError;\nvar PasskeyErrorCode;\n(function (PasskeyErrorCode) {\n // not supported\n PasskeyErrorCode[\"PasskeyNotSupported\"] = \"PasskeyNotSupported\";\n // duplicate passkey\n PasskeyErrorCode[\"PasskeyAlreadyExists\"] = \"PasskeyAlreadyExists\";\n // misconfigurations\n PasskeyErrorCode[\"InvalidPasskeyRegistrationOptions\"] = \"InvalidPasskeyRegistrationOptions\";\n PasskeyErrorCode[\"InvalidPasskeyAuthenticationOptions\"] = \"InvalidPasskeyAuthenticationOptions\";\n PasskeyErrorCode[\"RelyingPartyMismatch\"] = \"RelyingPartyMismatch\";\n // failed credential creation / retrieval\n PasskeyErrorCode[\"PasskeyRegistrationFailed\"] = \"PasskeyRegistrationFailed\";\n PasskeyErrorCode[\"PasskeyRetrievalFailed\"] = \"PasskeyRetrievalFailed\";\n // cancel / aborts\n PasskeyErrorCode[\"PasskeyRegistrationCanceled\"] = \"PasskeyRegistrationCanceled\";\n PasskeyErrorCode[\"PasskeyAuthenticationCanceled\"] = \"PasskeyAuthenticationCanceled\";\n PasskeyErrorCode[\"PasskeyOperationAborted\"] = \"PasskeyOperationAborted\";\n})(PasskeyErrorCode || (exports.PasskeyErrorCode = PasskeyErrorCode = {}));\nconst notSupportedRecoverySuggestion = 'Passkeys may not be supported on this device. Ensure your application is running in a secure context (HTTPS) and Web Authentication API is supported.';\nconst abortOrCancelRecoverySuggestion = 'User may have canceled the ceremony or another interruption has occurred. Check underlying error for details.';\nconst misconfigurationRecoverySuggestion = 'Ensure your user pool is configured to support the WEB_AUTHN as an authentication factor.';\nconst passkeyErrorMap = {\n [PasskeyErrorCode.PasskeyNotSupported]: {\n message: 'Passkeys may not be supported on this device.',\n recoverySuggestion: notSupportedRecoverySuggestion,\n },\n [PasskeyErrorCode.InvalidPasskeyRegistrationOptions]: {\n message: 'Invalid passkey registration options.',\n recoverySuggestion: misconfigurationRecoverySuggestion,\n },\n [PasskeyErrorCode.InvalidPasskeyAuthenticationOptions]: {\n message: 'Invalid passkey authentication options.',\n recoverySuggestion: misconfigurationRecoverySuggestion,\n },\n [PasskeyErrorCode.PasskeyRegistrationFailed]: {\n message: 'Device failed to create passkey.',\n recoverySuggestion: notSupportedRecoverySuggestion,\n },\n [PasskeyErrorCode.PasskeyRetrievalFailed]: {\n message: 'Device failed to retrieve passkey.',\n recoverySuggestion: 'Passkeys may not be available on this device. Try an alternative authentication factor like PASSWORD, EMAIL_OTP, or SMS_OTP.',\n },\n [PasskeyErrorCode.PasskeyAlreadyExists]: {\n message: 'Passkey already exists in authenticator.',\n recoverySuggestion: 'Proceed with existing passkey or try again after deleting the credential.',\n },\n [PasskeyErrorCode.PasskeyRegistrationCanceled]: {\n message: 'Passkey registration ceremony has been canceled.',\n recoverySuggestion: abortOrCancelRecoverySuggestion,\n },\n [PasskeyErrorCode.PasskeyAuthenticationCanceled]: {\n message: 'Passkey authentication ceremony has been canceled.',\n recoverySuggestion: abortOrCancelRecoverySuggestion,\n },\n [PasskeyErrorCode.PasskeyOperationAborted]: {\n message: 'Passkey operation has been aborted.',\n recoverySuggestion: abortOrCancelRecoverySuggestion,\n },\n [PasskeyErrorCode.RelyingPartyMismatch]: {\n message: 'Relying party does not match current domain.',\n recoverySuggestion: 'Ensure relying party identifier matches current domain.',\n },\n};\nexports.assertPasskeyError = (0, utils_1.createAssertionFunction)(passkeyErrorMap, PasskeyError);\n/**\n * Handle Passkey Authentication Errors\n * https://w3c.github.io/webauthn/#sctn-get-request-exceptions\n *\n * @param err unknown\n * @returns PasskeyError\n */\nconst handlePasskeyAuthenticationError = (err) => {\n if (err instanceof PasskeyError) {\n return err;\n }\n if (err instanceof Error) {\n if (err.name === 'NotAllowedError') {\n const { message, recoverySuggestion } = passkeyErrorMap[PasskeyErrorCode.PasskeyAuthenticationCanceled];\n return new PasskeyError({\n name: PasskeyErrorCode.PasskeyAuthenticationCanceled,\n message,\n recoverySuggestion,\n underlyingError: err,\n });\n }\n }\n return handlePasskeyError(err);\n};\nexports.handlePasskeyAuthenticationError = handlePasskeyAuthenticationError;\n/**\n * Handle Passkey Registration Errors\n * https://w3c.github.io/webauthn/#sctn-create-request-exceptions\n *\n * @param err unknown\n * @returns PasskeyError\n */\nconst handlePasskeyRegistrationError = (err) => {\n if (err instanceof PasskeyError) {\n return err;\n }\n if (err instanceof Error) {\n // Duplicate Passkey\n if (err.name === 'InvalidStateError') {\n const { message, recoverySuggestion } = passkeyErrorMap[PasskeyErrorCode.PasskeyAlreadyExists];\n return new PasskeyError({\n name: PasskeyErrorCode.PasskeyAlreadyExists,\n message,\n recoverySuggestion,\n underlyingError: err,\n });\n }\n // User Cancels Ceremony / Generic Catch All\n if (err.name === 'NotAllowedError') {\n const { message, recoverySuggestion } = passkeyErrorMap[PasskeyErrorCode.PasskeyRegistrationCanceled];\n return new PasskeyError({\n name: PasskeyErrorCode.PasskeyRegistrationCanceled,\n message,\n recoverySuggestion,\n underlyingError: err,\n });\n }\n }\n return handlePasskeyError(err);\n};\nexports.handlePasskeyRegistrationError = handlePasskeyRegistrationError;\n/**\n * Handles Overlapping Passkey Errors Between Registration & Authentication\n * https://w3c.github.io/webauthn/#sctn-create-request-exceptions\n * https://w3c.github.io/webauthn/#sctn-get-request-exceptions\n *\n * @param err unknown\n * @returns PasskeyError\n */\nconst handlePasskeyError = (err) => {\n if (err instanceof Error) {\n // Passkey Operation Aborted\n if (err.name === 'AbortError') {\n const { message, recoverySuggestion } = passkeyErrorMap[PasskeyErrorCode.PasskeyOperationAborted];\n return new PasskeyError({\n name: PasskeyErrorCode.PasskeyOperationAborted,\n message,\n recoverySuggestion,\n underlyingError: err,\n });\n }\n // Relying Party / Domain Mismatch\n if (err.name === 'SecurityError') {\n const { message, recoverySuggestion } = passkeyErrorMap[PasskeyErrorCode.RelyingPartyMismatch];\n return new PasskeyError({\n name: PasskeyErrorCode.RelyingPartyMismatch,\n message,\n recoverySuggestion,\n underlyingError: err,\n });\n }\n }\n return new PasskeyError({\n name: utils_1.AmplifyErrorCode.Unknown,\n message: 'An unknown error has occurred.',\n underlyingError: err,\n });\n};\n"],"names":[],"mappings":"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"}
@@ -1,176 +0,0 @@
1
- import { createAssertionFunction, AmplifyError, AmplifyErrorCode } from '@aws-amplify/core/internals/utils';
2
-
3
- // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
4
- // SPDX-License-Identifier: Apache-2.0
5
- class PasskeyError extends AmplifyError {
6
- constructor(params) {
7
- super(params);
8
- // Hack for making the custom error class work when transpiled to es5
9
- // TODO: Delete the following 2 lines after we change the build target to >= es2015
10
- this.constructor = PasskeyError;
11
- Object.setPrototypeOf(this, PasskeyError.prototype);
12
- }
13
- }
14
- var PasskeyErrorCode;
15
- (function (PasskeyErrorCode) {
16
- // not supported
17
- PasskeyErrorCode["PasskeyNotSupported"] = "PasskeyNotSupported";
18
- // duplicate passkey
19
- PasskeyErrorCode["PasskeyAlreadyExists"] = "PasskeyAlreadyExists";
20
- // misconfigurations
21
- PasskeyErrorCode["InvalidPasskeyRegistrationOptions"] = "InvalidPasskeyRegistrationOptions";
22
- PasskeyErrorCode["InvalidPasskeyAuthenticationOptions"] = "InvalidPasskeyAuthenticationOptions";
23
- PasskeyErrorCode["RelyingPartyMismatch"] = "RelyingPartyMismatch";
24
- // failed credential creation / retrieval
25
- PasskeyErrorCode["PasskeyRegistrationFailed"] = "PasskeyRegistrationFailed";
26
- PasskeyErrorCode["PasskeyRetrievalFailed"] = "PasskeyRetrievalFailed";
27
- // cancel / aborts
28
- PasskeyErrorCode["PasskeyRegistrationCanceled"] = "PasskeyRegistrationCanceled";
29
- PasskeyErrorCode["PasskeyAuthenticationCanceled"] = "PasskeyAuthenticationCanceled";
30
- PasskeyErrorCode["PasskeyOperationAborted"] = "PasskeyOperationAborted";
31
- })(PasskeyErrorCode || (PasskeyErrorCode = {}));
32
- const notSupportedRecoverySuggestion = 'Passkeys may not be supported on this device. Ensure your application is running in a secure context (HTTPS) and Web Authentication API is supported.';
33
- const abortOrCancelRecoverySuggestion = 'User may have canceled the ceremony or another interruption has occurred. Check underlying error for details.';
34
- const misconfigurationRecoverySuggestion = 'Ensure your user pool is configured to support the WEB_AUTHN as an authentication factor.';
35
- const passkeyErrorMap = {
36
- [PasskeyErrorCode.PasskeyNotSupported]: {
37
- message: 'Passkeys may not be supported on this device.',
38
- recoverySuggestion: notSupportedRecoverySuggestion,
39
- },
40
- [PasskeyErrorCode.InvalidPasskeyRegistrationOptions]: {
41
- message: 'Invalid passkey registration options.',
42
- recoverySuggestion: misconfigurationRecoverySuggestion,
43
- },
44
- [PasskeyErrorCode.InvalidPasskeyAuthenticationOptions]: {
45
- message: 'Invalid passkey authentication options.',
46
- recoverySuggestion: misconfigurationRecoverySuggestion,
47
- },
48
- [PasskeyErrorCode.PasskeyRegistrationFailed]: {
49
- message: 'Device failed to create passkey.',
50
- recoverySuggestion: notSupportedRecoverySuggestion,
51
- },
52
- [PasskeyErrorCode.PasskeyRetrievalFailed]: {
53
- message: 'Device failed to retrieve passkey.',
54
- recoverySuggestion: 'Passkeys may not be available on this device. Try an alternative authentication factor like PASSWORD, EMAIL_OTP, or SMS_OTP.',
55
- },
56
- [PasskeyErrorCode.PasskeyAlreadyExists]: {
57
- message: 'Passkey already exists in authenticator.',
58
- recoverySuggestion: 'Proceed with existing passkey or try again after deleting the credential.',
59
- },
60
- [PasskeyErrorCode.PasskeyRegistrationCanceled]: {
61
- message: 'Passkey registration ceremony has been canceled.',
62
- recoverySuggestion: abortOrCancelRecoverySuggestion,
63
- },
64
- [PasskeyErrorCode.PasskeyAuthenticationCanceled]: {
65
- message: 'Passkey authentication ceremony has been canceled.',
66
- recoverySuggestion: abortOrCancelRecoverySuggestion,
67
- },
68
- [PasskeyErrorCode.PasskeyOperationAborted]: {
69
- message: 'Passkey operation has been aborted.',
70
- recoverySuggestion: abortOrCancelRecoverySuggestion,
71
- },
72
- [PasskeyErrorCode.RelyingPartyMismatch]: {
73
- message: 'Relying party does not match current domain.',
74
- recoverySuggestion: 'Ensure relying party identifier matches current domain.',
75
- },
76
- };
77
- const assertPasskeyError = createAssertionFunction(passkeyErrorMap, PasskeyError);
78
- /**
79
- * Handle Passkey Authentication Errors
80
- * https://w3c.github.io/webauthn/#sctn-get-request-exceptions
81
- *
82
- * @param err unknown
83
- * @returns PasskeyError
84
- */
85
- const handlePasskeyAuthenticationError = (err) => {
86
- if (err instanceof PasskeyError) {
87
- return err;
88
- }
89
- if (err instanceof Error) {
90
- if (err.name === 'NotAllowedError') {
91
- const { message, recoverySuggestion } = passkeyErrorMap[PasskeyErrorCode.PasskeyAuthenticationCanceled];
92
- return new PasskeyError({
93
- name: PasskeyErrorCode.PasskeyAuthenticationCanceled,
94
- message,
95
- recoverySuggestion,
96
- underlyingError: err,
97
- });
98
- }
99
- }
100
- return handlePasskeyError(err);
101
- };
102
- /**
103
- * Handle Passkey Registration Errors
104
- * https://w3c.github.io/webauthn/#sctn-create-request-exceptions
105
- *
106
- * @param err unknown
107
- * @returns PasskeyError
108
- */
109
- const handlePasskeyRegistrationError = (err) => {
110
- if (err instanceof PasskeyError) {
111
- return err;
112
- }
113
- if (err instanceof Error) {
114
- // Duplicate Passkey
115
- if (err.name === 'InvalidStateError') {
116
- const { message, recoverySuggestion } = passkeyErrorMap[PasskeyErrorCode.PasskeyAlreadyExists];
117
- return new PasskeyError({
118
- name: PasskeyErrorCode.PasskeyAlreadyExists,
119
- message,
120
- recoverySuggestion,
121
- underlyingError: err,
122
- });
123
- }
124
- // User Cancels Ceremony / Generic Catch All
125
- if (err.name === 'NotAllowedError') {
126
- const { message, recoverySuggestion } = passkeyErrorMap[PasskeyErrorCode.PasskeyRegistrationCanceled];
127
- return new PasskeyError({
128
- name: PasskeyErrorCode.PasskeyRegistrationCanceled,
129
- message,
130
- recoverySuggestion,
131
- underlyingError: err,
132
- });
133
- }
134
- }
135
- return handlePasskeyError(err);
136
- };
137
- /**
138
- * Handles Overlapping Passkey Errors Between Registration & Authentication
139
- * https://w3c.github.io/webauthn/#sctn-create-request-exceptions
140
- * https://w3c.github.io/webauthn/#sctn-get-request-exceptions
141
- *
142
- * @param err unknown
143
- * @returns PasskeyError
144
- */
145
- const handlePasskeyError = (err) => {
146
- if (err instanceof Error) {
147
- // Passkey Operation Aborted
148
- if (err.name === 'AbortError') {
149
- const { message, recoverySuggestion } = passkeyErrorMap[PasskeyErrorCode.PasskeyOperationAborted];
150
- return new PasskeyError({
151
- name: PasskeyErrorCode.PasskeyOperationAborted,
152
- message,
153
- recoverySuggestion,
154
- underlyingError: err,
155
- });
156
- }
157
- // Relying Party / Domain Mismatch
158
- if (err.name === 'SecurityError') {
159
- const { message, recoverySuggestion } = passkeyErrorMap[PasskeyErrorCode.RelyingPartyMismatch];
160
- return new PasskeyError({
161
- name: PasskeyErrorCode.RelyingPartyMismatch,
162
- message,
163
- recoverySuggestion,
164
- underlyingError: err,
165
- });
166
- }
167
- }
168
- return new PasskeyError({
169
- name: AmplifyErrorCode.Unknown,
170
- message: 'An unknown error has occurred.',
171
- underlyingError: err,
172
- });
173
- };
174
-
175
- export { PasskeyError, PasskeyErrorCode, assertPasskeyError, handlePasskeyAuthenticationError, handlePasskeyRegistrationError };
176
- //# sourceMappingURL=errors.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.mjs","sources":["../../../../../src/client/utils/passkey/errors.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { AmplifyError, AmplifyErrorCode, createAssertionFunction, } from '@aws-amplify/core/internals/utils';\nexport class PasskeyError extends AmplifyError {\n constructor(params) {\n super(params);\n // Hack for making the custom error class work when transpiled to es5\n // TODO: Delete the following 2 lines after we change the build target to >= es2015\n this.constructor = PasskeyError;\n Object.setPrototypeOf(this, PasskeyError.prototype);\n }\n}\nexport var PasskeyErrorCode;\n(function (PasskeyErrorCode) {\n // not supported\n PasskeyErrorCode[\"PasskeyNotSupported\"] = \"PasskeyNotSupported\";\n // duplicate passkey\n PasskeyErrorCode[\"PasskeyAlreadyExists\"] = \"PasskeyAlreadyExists\";\n // misconfigurations\n PasskeyErrorCode[\"InvalidPasskeyRegistrationOptions\"] = \"InvalidPasskeyRegistrationOptions\";\n PasskeyErrorCode[\"InvalidPasskeyAuthenticationOptions\"] = \"InvalidPasskeyAuthenticationOptions\";\n PasskeyErrorCode[\"RelyingPartyMismatch\"] = \"RelyingPartyMismatch\";\n // failed credential creation / retrieval\n PasskeyErrorCode[\"PasskeyRegistrationFailed\"] = \"PasskeyRegistrationFailed\";\n PasskeyErrorCode[\"PasskeyRetrievalFailed\"] = \"PasskeyRetrievalFailed\";\n // cancel / aborts\n PasskeyErrorCode[\"PasskeyRegistrationCanceled\"] = \"PasskeyRegistrationCanceled\";\n PasskeyErrorCode[\"PasskeyAuthenticationCanceled\"] = \"PasskeyAuthenticationCanceled\";\n PasskeyErrorCode[\"PasskeyOperationAborted\"] = \"PasskeyOperationAborted\";\n})(PasskeyErrorCode || (PasskeyErrorCode = {}));\nconst notSupportedRecoverySuggestion = 'Passkeys may not be supported on this device. Ensure your application is running in a secure context (HTTPS) and Web Authentication API is supported.';\nconst abortOrCancelRecoverySuggestion = 'User may have canceled the ceremony or another interruption has occurred. Check underlying error for details.';\nconst misconfigurationRecoverySuggestion = 'Ensure your user pool is configured to support the WEB_AUTHN as an authentication factor.';\nconst passkeyErrorMap = {\n [PasskeyErrorCode.PasskeyNotSupported]: {\n message: 'Passkeys may not be supported on this device.',\n recoverySuggestion: notSupportedRecoverySuggestion,\n },\n [PasskeyErrorCode.InvalidPasskeyRegistrationOptions]: {\n message: 'Invalid passkey registration options.',\n recoverySuggestion: misconfigurationRecoverySuggestion,\n },\n [PasskeyErrorCode.InvalidPasskeyAuthenticationOptions]: {\n message: 'Invalid passkey authentication options.',\n recoverySuggestion: misconfigurationRecoverySuggestion,\n },\n [PasskeyErrorCode.PasskeyRegistrationFailed]: {\n message: 'Device failed to create passkey.',\n recoverySuggestion: notSupportedRecoverySuggestion,\n },\n [PasskeyErrorCode.PasskeyRetrievalFailed]: {\n message: 'Device failed to retrieve passkey.',\n recoverySuggestion: 'Passkeys may not be available on this device. Try an alternative authentication factor like PASSWORD, EMAIL_OTP, or SMS_OTP.',\n },\n [PasskeyErrorCode.PasskeyAlreadyExists]: {\n message: 'Passkey already exists in authenticator.',\n recoverySuggestion: 'Proceed with existing passkey or try again after deleting the credential.',\n },\n [PasskeyErrorCode.PasskeyRegistrationCanceled]: {\n message: 'Passkey registration ceremony has been canceled.',\n recoverySuggestion: abortOrCancelRecoverySuggestion,\n },\n [PasskeyErrorCode.PasskeyAuthenticationCanceled]: {\n message: 'Passkey authentication ceremony has been canceled.',\n recoverySuggestion: abortOrCancelRecoverySuggestion,\n },\n [PasskeyErrorCode.PasskeyOperationAborted]: {\n message: 'Passkey operation has been aborted.',\n recoverySuggestion: abortOrCancelRecoverySuggestion,\n },\n [PasskeyErrorCode.RelyingPartyMismatch]: {\n message: 'Relying party does not match current domain.',\n recoverySuggestion: 'Ensure relying party identifier matches current domain.',\n },\n};\nexport const assertPasskeyError = createAssertionFunction(passkeyErrorMap, PasskeyError);\n/**\n * Handle Passkey Authentication Errors\n * https://w3c.github.io/webauthn/#sctn-get-request-exceptions\n *\n * @param err unknown\n * @returns PasskeyError\n */\nexport const handlePasskeyAuthenticationError = (err) => {\n if (err instanceof PasskeyError) {\n return err;\n }\n if (err instanceof Error) {\n if (err.name === 'NotAllowedError') {\n const { message, recoverySuggestion } = passkeyErrorMap[PasskeyErrorCode.PasskeyAuthenticationCanceled];\n return new PasskeyError({\n name: PasskeyErrorCode.PasskeyAuthenticationCanceled,\n message,\n recoverySuggestion,\n underlyingError: err,\n });\n }\n }\n return handlePasskeyError(err);\n};\n/**\n * Handle Passkey Registration Errors\n * https://w3c.github.io/webauthn/#sctn-create-request-exceptions\n *\n * @param err unknown\n * @returns PasskeyError\n */\nexport const handlePasskeyRegistrationError = (err) => {\n if (err instanceof PasskeyError) {\n return err;\n }\n if (err instanceof Error) {\n // Duplicate Passkey\n if (err.name === 'InvalidStateError') {\n const { message, recoverySuggestion } = passkeyErrorMap[PasskeyErrorCode.PasskeyAlreadyExists];\n return new PasskeyError({\n name: PasskeyErrorCode.PasskeyAlreadyExists,\n message,\n recoverySuggestion,\n underlyingError: err,\n });\n }\n // User Cancels Ceremony / Generic Catch All\n if (err.name === 'NotAllowedError') {\n const { message, recoverySuggestion } = passkeyErrorMap[PasskeyErrorCode.PasskeyRegistrationCanceled];\n return new PasskeyError({\n name: PasskeyErrorCode.PasskeyRegistrationCanceled,\n message,\n recoverySuggestion,\n underlyingError: err,\n });\n }\n }\n return handlePasskeyError(err);\n};\n/**\n * Handles Overlapping Passkey Errors Between Registration & Authentication\n * https://w3c.github.io/webauthn/#sctn-create-request-exceptions\n * https://w3c.github.io/webauthn/#sctn-get-request-exceptions\n *\n * @param err unknown\n * @returns PasskeyError\n */\nconst handlePasskeyError = (err) => {\n if (err instanceof Error) {\n // Passkey Operation Aborted\n if (err.name === 'AbortError') {\n const { message, recoverySuggestion } = passkeyErrorMap[PasskeyErrorCode.PasskeyOperationAborted];\n return new PasskeyError({\n name: PasskeyErrorCode.PasskeyOperationAborted,\n message,\n recoverySuggestion,\n underlyingError: err,\n });\n }\n // Relying Party / Domain Mismatch\n if (err.name === 'SecurityError') {\n const { message, recoverySuggestion } = passkeyErrorMap[PasskeyErrorCode.RelyingPartyMismatch];\n return new PasskeyError({\n name: PasskeyErrorCode.RelyingPartyMismatch,\n message,\n recoverySuggestion,\n underlyingError: err,\n });\n }\n }\n return new PasskeyError({\n name: AmplifyErrorCode.Unknown,\n message: 'An unknown error has occurred.',\n underlyingError: err,\n });\n};\n"],"names":[],"mappings":"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"}