@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
package/package.json CHANGED
@@ -1,107 +1,113 @@
1
1
  {
2
- "name": "@aws-amplify/auth",
3
- "version": "6.15.1",
4
- "description": "Auth category of aws-amplify",
5
- "main": "./dist/cjs/index.js",
6
- "module": "./dist/esm/index.mjs",
7
- "typings": "./dist/esm/index.d.ts",
8
- "react-native": "./dist/cjs/index.js",
9
- "sideEffects": [
10
- "./dist/cjs/providers/cognito/apis/signInWithRedirect.js",
11
- "./dist/esm/providers/cognito/apis/signInWithRedirect.mjs",
12
- "./dist/cjs/providers/cognito/utils/oauth/enableOAuthListener.js",
13
- "./dist/esm/providers/cognito/utils/oauth/enableOAuthListener.mjs"
14
- ],
15
- "publishConfig": {
16
- "access": "public"
17
- },
18
- "scripts": {
19
- "test": "yarn lint --fix && jest -w 1 --coverage --logHeapUsage",
20
- "build-with-test": "npm test && npm run build",
21
- "build:umd": "webpack && webpack --config ./webpack.config.dev.js",
22
- "build:esm-cjs": "rollup --forceExit -c rollup.config.mjs",
23
- "build:watch": "npm run build:esm-cjs -- --watch",
24
- "build": "npm run clean && npm run build:esm-cjs && npm run build:umd",
25
- "clean": "npm run clean:size && rimraf lib-esm lib dist",
26
- "clean:size": "rimraf dual-publish-tmp tmp*",
27
- "format": "echo \"Not implemented\"",
28
- "lint": "eslint '**/*.{ts,tsx}' && npm run ts-coverage",
29
- "lint:fix": "eslint '**/*.{ts,tsx}' --fix",
30
- "ts-coverage": "typescript-coverage-report -p ./tsconfig.build.json -t 91.18"
31
- },
32
- "typesVersions": {
33
- ">=4.2": {
34
- "cognito": [
35
- "./dist/esm/providers/cognito/index.d.ts"
36
- ],
37
- "cognito/server": [
38
- "./dist/esm/providers/cognito/apis/server/index.d.ts"
39
- ],
40
- "server": [
41
- "./dist/esm/server.d.ts"
42
- ]
43
- }
44
- },
45
- "exports": {
46
- ".": {
47
- "react-native": "./dist/cjs/index.js",
48
- "types": "./dist/esm/index.d.ts",
49
- "import": "./dist/esm/index.mjs",
50
- "require": "./dist/cjs/index.js"
51
- },
52
- "./cognito": {
53
- "react-native": "./dist/cjs/providers/cognito/index.js",
54
- "types": "./dist/esm/providers/cognito/index.d.ts",
55
- "import": "./dist/esm/providers/cognito/index.mjs",
56
- "require": "./dist/cjs/providers/cognito/index.js"
57
- },
58
- "./cognito/server": {
59
- "types": "./dist/esm/providers/cognito/apis/server/index.d.ts",
60
- "import": "./dist/esm/providers/cognito/apis/server/index.mjs",
61
- "require": "./dist/cjs/providers/cognito/apis/server/index.js"
62
- },
63
- "./server": {
64
- "types": "./dist/esm/server.d.ts",
65
- "import": "./dist/esm/server.mjs",
66
- "require": "./dist/cjs/server.js"
67
- },
68
- "./enable-oauth-listener": {
69
- "types": "./dist/esm/providers/cognito/utils/oauth/enableOAuthListener.d.ts",
70
- "import": "./dist/esm/providers/cognito/utils/oauth/enableOAuthListener.mjs",
71
- "require": "./dist/cjs/providers/cognito/utils/oauth/enableOAuthListener.js"
72
- },
73
- "./package.json": "./package.json"
74
- },
75
- "repository": {
76
- "type": "git",
77
- "url": "https://github.com/aws-amplify/amplify-js.git"
78
- },
79
- "author": "Amazon Web Services",
80
- "license": "Apache-2.0",
81
- "bugs": {
82
- "url": "https://github.com/aws/aws-amplify/issues"
83
- },
84
- "homepage": "https://aws-amplify.github.io/",
85
- "files": [
86
- "dist/cjs",
87
- "dist/esm",
88
- "src",
89
- "cognito",
90
- "server",
91
- "enable-oauth-listener"
92
- ],
93
- "dependencies": {
94
- "@aws-crypto/sha256-js": "5.2.0",
95
- "@smithy/types": "^3.3.0",
96
- "tslib": "^2.5.0"
97
- },
98
- "peerDependencies": {
99
- "@aws-amplify/core": "^6.1.0"
100
- },
101
- "devDependencies": {
102
- "@aws-amplify/core": "6.13.2",
103
- "@aws-amplify/react-native": "1.1.10",
104
- "@jest/test-sequencer": "^29.7.0"
105
- },
106
- "gitHead": "21ebe0a1e6f009a419864ed8550d20a3528d8944"
2
+ "name": "@aws-amplify/auth",
3
+ "version": "6.15.2-unstable.42b6d67.0+42b6d67",
4
+ "description": "Auth category of aws-amplify",
5
+ "main": "./dist/cjs/index.js",
6
+ "module": "./dist/esm/index.mjs",
7
+ "typings": "./dist/esm/index.d.ts",
8
+ "react-native": "./dist/cjs/index.js",
9
+ "sideEffects": [
10
+ "./dist/cjs/providers/cognito/apis/signInWithRedirect.js",
11
+ "./dist/esm/providers/cognito/apis/signInWithRedirect.mjs",
12
+ "./dist/cjs/providers/cognito/utils/oauth/enableOAuthListener.js",
13
+ "./dist/esm/providers/cognito/utils/oauth/enableOAuthListener.mjs"
14
+ ],
15
+ "publishConfig": {
16
+ "access": "public"
17
+ },
18
+ "scripts": {
19
+ "test": "yarn lint --fix && jest -w 1 --coverage --logHeapUsage",
20
+ "build-with-test": "npm test && npm run build",
21
+ "build:umd": "webpack && webpack --config ./webpack.config.dev.js",
22
+ "build:esm-cjs": "rollup --forceExit -c rollup.config.mjs",
23
+ "build:watch": "npm run build:esm-cjs -- --watch",
24
+ "build": "npm run clean && npm run build:esm-cjs && npm run build:umd",
25
+ "clean": "npm run clean:size && rimraf lib-esm lib dist",
26
+ "clean:size": "rimraf dual-publish-tmp tmp*",
27
+ "format": "echo \"Not implemented\"",
28
+ "lint": "eslint '**/*.{ts,tsx}' && npm run ts-coverage",
29
+ "lint:fix": "eslint '**/*.{ts,tsx}' --fix",
30
+ "ts-coverage": "typescript-coverage-report -p ./tsconfig.build.json -t 91.18"
31
+ },
32
+ "typesVersions": {
33
+ ">=4.2": {
34
+ "cognito": [
35
+ "./dist/esm/providers/cognito/index.d.ts"
36
+ ],
37
+ "cognito/server": [
38
+ "./dist/esm/providers/cognito/apis/server/index.d.ts"
39
+ ],
40
+ "server": [
41
+ "./dist/esm/server.d.ts"
42
+ ]
43
+ }
44
+ },
45
+ "exports": {
46
+ ".": {
47
+ "react-native": "./dist/cjs/index.js",
48
+ "types": "./dist/esm/index.d.ts",
49
+ "import": "./dist/esm/index.mjs",
50
+ "require": "./dist/cjs/index.js"
51
+ },
52
+ "./cognito": {
53
+ "react-native": "./dist/cjs/providers/cognito/index.js",
54
+ "types": "./dist/esm/providers/cognito/index.d.ts",
55
+ "import": "./dist/esm/providers/cognito/index.mjs",
56
+ "require": "./dist/cjs/providers/cognito/index.js"
57
+ },
58
+ "./cognito/server": {
59
+ "types": "./dist/esm/providers/cognito/apis/server/index.d.ts",
60
+ "import": "./dist/esm/providers/cognito/apis/server/index.mjs",
61
+ "require": "./dist/cjs/providers/cognito/apis/server/index.js"
62
+ },
63
+ "./server": {
64
+ "types": "./dist/esm/server.d.ts",
65
+ "import": "./dist/esm/server.mjs",
66
+ "require": "./dist/cjs/server.js"
67
+ },
68
+ "./enable-oauth-listener": {
69
+ "types": "./dist/esm/providers/cognito/utils/oauth/enableOAuthListener.d.ts",
70
+ "import": "./dist/esm/providers/cognito/utils/oauth/enableOAuthListener.mjs",
71
+ "require": "./dist/cjs/providers/cognito/utils/oauth/enableOAuthListener.js"
72
+ },
73
+ "./package.json": "./package.json"
74
+ },
75
+ "repository": {
76
+ "type": "git",
77
+ "url": "https://github.com/aws-amplify/amplify-js.git"
78
+ },
79
+ "author": "Amazon Web Services",
80
+ "license": "Apache-2.0",
81
+ "bugs": {
82
+ "url": "https://github.com/aws/aws-amplify/issues"
83
+ },
84
+ "homepage": "https://aws-amplify.github.io/",
85
+ "files": [
86
+ "dist/cjs",
87
+ "dist/esm",
88
+ "src",
89
+ "cognito",
90
+ "server",
91
+ "enable-oauth-listener"
92
+ ],
93
+ "dependencies": {
94
+ "@aws-crypto/sha256-js": "5.2.0",
95
+ "@smithy/types": "^3.3.0",
96
+ "tslib": "^2.5.0"
97
+ },
98
+ "peerDependencies": {
99
+ "@aws-amplify/core": "6.13.3-unstable.42b6d67.0+42b6d67",
100
+ "@aws-amplify/react-native": "^1.1.10"
101
+ },
102
+ "peerDependenciesMeta": {
103
+ "@aws-amplify/react-native": {
104
+ "optional": true
105
+ }
106
+ },
107
+ "devDependencies": {
108
+ "@aws-amplify/core": "6.13.3-unstable.42b6d67.0+42b6d67",
109
+ "@aws-amplify/react-native": "1.1.11-unstable.42b6d67.0+42b6d67",
110
+ "@jest/test-sequencer": "^29.7.0"
111
+ },
112
+ "gitHead": "42b6d6709f540c76502c8736e9b2da8fa2934fd4"
107
113
  }
@@ -1,4 +1,4 @@
1
1
  // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
- export { registerPasskey } from './passkey';
4
+ export { getPasskey, registerPasskey } from './passkey';
@@ -0,0 +1,54 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { getIsNativeError } from '@aws-amplify/react-native';
5
+
6
+ import { handlePasskeyError } from './handlePasskeyError';
7
+ import {
8
+ PasskeyError,
9
+ PasskeyErrorCode,
10
+ passkeyErrorMap,
11
+ } from './passkeyError';
12
+
13
+ /**
14
+ * Handle Passkey Authentication Errors
15
+ *
16
+ * @param err unknown
17
+ * @returns PasskeyError
18
+ */
19
+ export const handlePasskeyAuthenticationError = (
20
+ err: unknown,
21
+ ): PasskeyError => {
22
+ if (err instanceof PasskeyError) {
23
+ return err;
24
+ }
25
+
26
+ if (getIsNativeError(err)) {
27
+ // Passkey Retrieval Failed
28
+ if (err.code === 'FAILED') {
29
+ const { message, recoverySuggestion } =
30
+ passkeyErrorMap[PasskeyErrorCode.PasskeyRetrievalFailed];
31
+
32
+ return new PasskeyError({
33
+ name: PasskeyErrorCode.PasskeyRetrievalFailed,
34
+ message,
35
+ recoverySuggestion,
36
+ underlyingError: err,
37
+ });
38
+ }
39
+
40
+ if (err.code === 'CANCELED') {
41
+ const { message, recoverySuggestion } =
42
+ passkeyErrorMap[PasskeyErrorCode.PasskeyAuthenticationCanceled];
43
+
44
+ return new PasskeyError({
45
+ name: PasskeyErrorCode.PasskeyAuthenticationCanceled,
46
+ message,
47
+ recoverySuggestion,
48
+ underlyingError: err,
49
+ });
50
+ }
51
+ }
52
+
53
+ return handlePasskeyError(err);
54
+ };
@@ -0,0 +1,40 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { handlePasskeyError } from './handlePasskeyError';
5
+ import {
6
+ PasskeyError,
7
+ PasskeyErrorCode,
8
+ passkeyErrorMap,
9
+ } from './passkeyError';
10
+
11
+ /**
12
+ * Handle Passkey Authentication Errors
13
+ * https://w3c.github.io/webauthn/#sctn-get-request-exceptions
14
+ *
15
+ * @param err unknown
16
+ * @returns PasskeyError
17
+ */
18
+ export const handlePasskeyAuthenticationError = (
19
+ err: unknown,
20
+ ): PasskeyError => {
21
+ if (err instanceof PasskeyError) {
22
+ return err;
23
+ }
24
+
25
+ if (err instanceof Error) {
26
+ if (err.name === 'NotAllowedError') {
27
+ const { message, recoverySuggestion } =
28
+ passkeyErrorMap[PasskeyErrorCode.PasskeyAuthenticationCanceled];
29
+
30
+ return new PasskeyError({
31
+ name: PasskeyErrorCode.PasskeyAuthenticationCanceled,
32
+ message,
33
+ recoverySuggestion,
34
+ underlyingError: err,
35
+ });
36
+ }
37
+ }
38
+
39
+ return handlePasskeyError(err);
40
+ };
@@ -0,0 +1,53 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { AmplifyErrorCode } from '@aws-amplify/core/internals/utils';
5
+ import { getIsNativeError } from '@aws-amplify/react-native';
6
+
7
+ import {
8
+ PasskeyError,
9
+ PasskeyErrorCode,
10
+ passkeyErrorMap,
11
+ } from './passkeyError';
12
+
13
+ /**
14
+ * Handles Overlapping Passkey Errors Between Registration & Authentication
15
+ *
16
+ * @param err unknown
17
+ * @returns PasskeyError
18
+ */
19
+ export const handlePasskeyError = (err: unknown): PasskeyError => {
20
+ if (getIsNativeError(err)) {
21
+ // Relying Party / Domain Mismatch
22
+ if (err.code === 'RELYING_PARTY_MISMATCH') {
23
+ const { message, recoverySuggestion } =
24
+ passkeyErrorMap[PasskeyErrorCode.RelyingPartyMismatch];
25
+
26
+ return new PasskeyError({
27
+ name: PasskeyErrorCode.RelyingPartyMismatch,
28
+ message,
29
+ recoverySuggestion,
30
+ underlyingError: err,
31
+ });
32
+ }
33
+
34
+ // Not Supported
35
+ if (err.code === 'NOT_SUPPORTED') {
36
+ const { message, recoverySuggestion } =
37
+ passkeyErrorMap[PasskeyErrorCode.PasskeyNotSupported];
38
+
39
+ return new PasskeyError({
40
+ name: PasskeyErrorCode.PasskeyNotSupported,
41
+ message,
42
+ recoverySuggestion,
43
+ underlyingError: err,
44
+ });
45
+ }
46
+ }
47
+
48
+ return new PasskeyError({
49
+ name: AmplifyErrorCode.Unknown,
50
+ message: 'An unknown error has occurred.',
51
+ underlyingError: err,
52
+ });
53
+ };
@@ -0,0 +1,53 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { AmplifyErrorCode } from '@aws-amplify/core/internals/utils';
5
+
6
+ import {
7
+ PasskeyError,
8
+ PasskeyErrorCode,
9
+ passkeyErrorMap,
10
+ } from './passkeyError';
11
+
12
+ /**
13
+ * Handles Overlapping Passkey Errors Between Registration & Authentication
14
+ * https://w3c.github.io/webauthn/#sctn-create-request-exceptions
15
+ * https://w3c.github.io/webauthn/#sctn-get-request-exceptions
16
+ *
17
+ * @param err unknown
18
+ * @returns PasskeyError
19
+ */
20
+ export const handlePasskeyError = (err: unknown): PasskeyError => {
21
+ if (err instanceof Error) {
22
+ // Passkey Operation Aborted
23
+ if (err.name === 'AbortError') {
24
+ const { message, recoverySuggestion } =
25
+ passkeyErrorMap[PasskeyErrorCode.PasskeyOperationAborted];
26
+
27
+ return new PasskeyError({
28
+ name: PasskeyErrorCode.PasskeyOperationAborted,
29
+ message,
30
+ recoverySuggestion,
31
+ underlyingError: err,
32
+ });
33
+ }
34
+ // Relying Party / Domain Mismatch
35
+ if (err.name === 'SecurityError') {
36
+ const { message, recoverySuggestion } =
37
+ passkeyErrorMap[PasskeyErrorCode.RelyingPartyMismatch];
38
+
39
+ return new PasskeyError({
40
+ name: PasskeyErrorCode.RelyingPartyMismatch,
41
+ message,
42
+ recoverySuggestion,
43
+ underlyingError: err,
44
+ });
45
+ }
46
+ }
47
+
48
+ return new PasskeyError({
49
+ name: AmplifyErrorCode.Unknown,
50
+ message: 'An unknown error has occurred.',
51
+ underlyingError: err,
52
+ });
53
+ };
@@ -0,0 +1,66 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { getIsNativeError } from '@aws-amplify/react-native';
5
+
6
+ import { handlePasskeyError } from './handlePasskeyError';
7
+ import {
8
+ PasskeyError,
9
+ PasskeyErrorCode,
10
+ passkeyErrorMap,
11
+ } from './passkeyError';
12
+
13
+ /**
14
+ * Handle Passkey Registration Errors
15
+ *
16
+ * @param err unknown
17
+ * @returns PasskeyError
18
+ */
19
+ export const handlePasskeyRegistrationError = (err: unknown): PasskeyError => {
20
+ if (err instanceof PasskeyError) {
21
+ return err;
22
+ }
23
+
24
+ if (getIsNativeError(err)) {
25
+ // Passkey Registration Failed
26
+ if (err.code === 'FAILED') {
27
+ const { message, recoverySuggestion } =
28
+ passkeyErrorMap[PasskeyErrorCode.PasskeyRegistrationFailed];
29
+
30
+ return new PasskeyError({
31
+ name: PasskeyErrorCode.PasskeyRegistrationFailed,
32
+ message,
33
+ recoverySuggestion,
34
+ underlyingError: err,
35
+ });
36
+ }
37
+
38
+ // Duplicate Passkey
39
+ if (err.code === 'DUPLICATE') {
40
+ const { message, recoverySuggestion } =
41
+ passkeyErrorMap[PasskeyErrorCode.PasskeyAlreadyExists];
42
+
43
+ return new PasskeyError({
44
+ name: PasskeyErrorCode.PasskeyAlreadyExists,
45
+ message,
46
+ recoverySuggestion,
47
+ underlyingError: err,
48
+ });
49
+ }
50
+
51
+ // User Cancels Ceremony
52
+ if (err.code === 'CANCELED') {
53
+ const { message, recoverySuggestion } =
54
+ passkeyErrorMap[PasskeyErrorCode.PasskeyRegistrationCanceled];
55
+
56
+ return new PasskeyError({
57
+ name: PasskeyErrorCode.PasskeyRegistrationCanceled,
58
+ message,
59
+ recoverySuggestion,
60
+ underlyingError: err,
61
+ });
62
+ }
63
+ }
64
+
65
+ return handlePasskeyError(err);
66
+ };
@@ -0,0 +1,52 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { handlePasskeyError } from './handlePasskeyError';
5
+ import {
6
+ PasskeyError,
7
+ PasskeyErrorCode,
8
+ passkeyErrorMap,
9
+ } from './passkeyError';
10
+
11
+ /**
12
+ * Handle Passkey Registration Errors
13
+ * https://w3c.github.io/webauthn/#sctn-create-request-exceptions
14
+ *
15
+ * @param err unknown
16
+ * @returns PasskeyError
17
+ */
18
+ export const handlePasskeyRegistrationError = (err: unknown): PasskeyError => {
19
+ if (err instanceof PasskeyError) {
20
+ return err;
21
+ }
22
+
23
+ if (err instanceof Error) {
24
+ // Duplicate Passkey
25
+ if (err.name === 'InvalidStateError') {
26
+ const { message, recoverySuggestion } =
27
+ passkeyErrorMap[PasskeyErrorCode.PasskeyAlreadyExists];
28
+
29
+ return new PasskeyError({
30
+ name: PasskeyErrorCode.PasskeyAlreadyExists,
31
+ message,
32
+ recoverySuggestion,
33
+ underlyingError: err,
34
+ });
35
+ }
36
+
37
+ // User Cancels Ceremony / Generic Catch All
38
+ if (err.name === 'NotAllowedError') {
39
+ const { message, recoverySuggestion } =
40
+ passkeyErrorMap[PasskeyErrorCode.PasskeyRegistrationCanceled];
41
+
42
+ return new PasskeyError({
43
+ name: PasskeyErrorCode.PasskeyRegistrationCanceled,
44
+ message,
45
+ recoverySuggestion,
46
+ underlyingError: err,
47
+ });
48
+ }
49
+ }
50
+
51
+ return handlePasskeyError(err);
52
+ };
@@ -0,0 +1,10 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ export { handlePasskeyAuthenticationError } from './handlePasskeyAuthenticationError';
5
+ export { handlePasskeyRegistrationError } from './handlePasskeyRegistrationError';
6
+ export {
7
+ PasskeyError,
8
+ PasskeyErrorCode,
9
+ assertPasskeyError,
10
+ } from './passkeyError';
@@ -0,0 +1,96 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import {
5
+ AmplifyError,
6
+ AmplifyErrorMap,
7
+ AmplifyErrorParams,
8
+ AssertionFunction,
9
+ createAssertionFunction,
10
+ } from '@aws-amplify/core/internals/utils';
11
+
12
+ import { NOT_SUPPORTED_RECOVERY_SUGGESTION } from './passkeyErrorPlatformConstants';
13
+
14
+ export class PasskeyError extends AmplifyError {
15
+ constructor(params: AmplifyErrorParams) {
16
+ super(params);
17
+
18
+ // Hack for making the custom error class work when transpiled to es5
19
+ // TODO: Delete the following 2 lines after we change the build target to >= es2015
20
+ this.constructor = PasskeyError;
21
+ Object.setPrototypeOf(this, PasskeyError.prototype);
22
+ }
23
+ }
24
+
25
+ export enum PasskeyErrorCode {
26
+ // not supported
27
+ PasskeyNotSupported = 'PasskeyNotSupported',
28
+ // duplicate passkey
29
+ PasskeyAlreadyExists = 'PasskeyAlreadyExists',
30
+ // misconfigurations
31
+ InvalidPasskeyRegistrationOptions = 'InvalidPasskeyRegistrationOptions',
32
+ InvalidPasskeyAuthenticationOptions = 'InvalidPasskeyAuthenticationOptions',
33
+ RelyingPartyMismatch = 'RelyingPartyMismatch',
34
+ // failed credential creation / retrieval
35
+ PasskeyRegistrationFailed = 'PasskeyRegistrationFailed',
36
+ PasskeyRetrievalFailed = 'PasskeyRetrievalFailed',
37
+ // cancel / aborts
38
+ PasskeyRegistrationCanceled = 'PasskeyRegistrationCanceled',
39
+ PasskeyAuthenticationCanceled = 'PasskeyAuthenticationCanceled',
40
+ PasskeyOperationAborted = 'PasskeyOperationAborted',
41
+ }
42
+
43
+ const ABORT_OR_CANCEL_RECOVERY_SUGGESTION =
44
+ 'User may have canceled the ceremony or another interruption has occurred. Check underlying error for details.';
45
+
46
+ const MISCONFIGURATION_RECOVERY_SUGGESTION =
47
+ 'Ensure your user pool is configured to support the WEB_AUTHN as an authentication factor.';
48
+
49
+ export const passkeyErrorMap: AmplifyErrorMap<PasskeyErrorCode> = {
50
+ [PasskeyErrorCode.PasskeyNotSupported]: {
51
+ message: 'Passkeys may not be supported on this device.',
52
+ recoverySuggestion: NOT_SUPPORTED_RECOVERY_SUGGESTION,
53
+ },
54
+ [PasskeyErrorCode.InvalidPasskeyRegistrationOptions]: {
55
+ message: 'Invalid passkey registration options.',
56
+ recoverySuggestion: MISCONFIGURATION_RECOVERY_SUGGESTION,
57
+ },
58
+ [PasskeyErrorCode.InvalidPasskeyAuthenticationOptions]: {
59
+ message: 'Invalid passkey authentication options.',
60
+ recoverySuggestion: MISCONFIGURATION_RECOVERY_SUGGESTION,
61
+ },
62
+ [PasskeyErrorCode.PasskeyRegistrationFailed]: {
63
+ message: 'Device failed to create passkey.',
64
+ recoverySuggestion: NOT_SUPPORTED_RECOVERY_SUGGESTION,
65
+ },
66
+ [PasskeyErrorCode.PasskeyRetrievalFailed]: {
67
+ message: 'Device failed to retrieve passkey.',
68
+ recoverySuggestion:
69
+ 'Passkeys may not be available on this device. Try an alternative authentication factor like PASSWORD, EMAIL_OTP, or SMS_OTP.',
70
+ },
71
+ [PasskeyErrorCode.PasskeyAlreadyExists]: {
72
+ message: 'Passkey already exists in authenticator.',
73
+ recoverySuggestion:
74
+ 'Proceed with existing passkey or try again after deleting the credential.',
75
+ },
76
+ [PasskeyErrorCode.PasskeyRegistrationCanceled]: {
77
+ message: 'Passkey registration ceremony has been canceled.',
78
+ recoverySuggestion: ABORT_OR_CANCEL_RECOVERY_SUGGESTION,
79
+ },
80
+ [PasskeyErrorCode.PasskeyAuthenticationCanceled]: {
81
+ message: 'Passkey authentication ceremony has been canceled.',
82
+ recoverySuggestion: ABORT_OR_CANCEL_RECOVERY_SUGGESTION,
83
+ },
84
+ [PasskeyErrorCode.PasskeyOperationAborted]: {
85
+ message: 'Passkey operation has been aborted.',
86
+ recoverySuggestion: ABORT_OR_CANCEL_RECOVERY_SUGGESTION,
87
+ },
88
+ [PasskeyErrorCode.RelyingPartyMismatch]: {
89
+ message: 'Relying party does not match current domain.',
90
+ recoverySuggestion:
91
+ 'Ensure relying party identifier matches current domain.',
92
+ },
93
+ };
94
+
95
+ export const assertPasskeyError: AssertionFunction<PasskeyErrorCode> =
96
+ createAssertionFunction(passkeyErrorMap, PasskeyError);
@@ -0,0 +1,5 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ export const NOT_SUPPORTED_RECOVERY_SUGGESTION =
5
+ 'Passkeys may not be supported on this device. Ensure your application is running on a supported platform.';
@@ -0,0 +1,5 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ export const NOT_SUPPORTED_RECOVERY_SUGGESTION =
5
+ 'Passkeys may not be supported on this device. Ensure your application is running in a secure context (HTTPS) and Web Authentication API is supported.';