@metamask-previews/chain-agnostic-permission 0.1.0-preview-b69c669

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 (116) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/LICENSE +20 -0
  3. package/README.md +15 -0
  4. package/dist/adapters/caip-permission-adapter-eth-accounts.cjs +103 -0
  5. package/dist/adapters/caip-permission-adapter-eth-accounts.cjs.map +1 -0
  6. package/dist/adapters/caip-permission-adapter-eth-accounts.d.cts +20 -0
  7. package/dist/adapters/caip-permission-adapter-eth-accounts.d.cts.map +1 -0
  8. package/dist/adapters/caip-permission-adapter-eth-accounts.d.mts +20 -0
  9. package/dist/adapters/caip-permission-adapter-eth-accounts.d.mts.map +1 -0
  10. package/dist/adapters/caip-permission-adapter-eth-accounts.mjs +98 -0
  11. package/dist/adapters/caip-permission-adapter-eth-accounts.mjs.map +1 -0
  12. package/dist/adapters/caip-permission-adapter-permittedChains.cjs +115 -0
  13. package/dist/adapters/caip-permission-adapter-permittedChains.cjs.map +1 -0
  14. package/dist/adapters/caip-permission-adapter-permittedChains.d.cts +27 -0
  15. package/dist/adapters/caip-permission-adapter-permittedChains.d.cts.map +1 -0
  16. package/dist/adapters/caip-permission-adapter-permittedChains.d.mts +27 -0
  17. package/dist/adapters/caip-permission-adapter-permittedChains.d.mts.map +1 -0
  18. package/dist/adapters/caip-permission-adapter-permittedChains.mjs +109 -0
  19. package/dist/adapters/caip-permission-adapter-permittedChains.mjs.map +1 -0
  20. package/dist/adapters/caip-permission-adapter-session-scopes.cjs +85 -0
  21. package/dist/adapters/caip-permission-adapter-session-scopes.cjs.map +1 -0
  22. package/dist/adapters/caip-permission-adapter-session-scopes.d.cts +23 -0
  23. package/dist/adapters/caip-permission-adapter-session-scopes.d.cts.map +1 -0
  24. package/dist/adapters/caip-permission-adapter-session-scopes.d.mts +23 -0
  25. package/dist/adapters/caip-permission-adapter-session-scopes.d.mts.map +1 -0
  26. package/dist/adapters/caip-permission-adapter-session-scopes.mjs +80 -0
  27. package/dist/adapters/caip-permission-adapter-session-scopes.mjs.map +1 -0
  28. package/dist/caip25Permission.cjs +285 -0
  29. package/dist/caip25Permission.cjs.map +1 -0
  30. package/dist/caip25Permission.d.cts +131 -0
  31. package/dist/caip25Permission.d.cts.map +1 -0
  32. package/dist/caip25Permission.d.mts +131 -0
  33. package/dist/caip25Permission.d.mts.map +1 -0
  34. package/dist/caip25Permission.mjs +280 -0
  35. package/dist/caip25Permission.mjs.map +1 -0
  36. package/dist/index.cjs +43 -0
  37. package/dist/index.cjs.map +1 -0
  38. package/dist/index.d.cts +14 -0
  39. package/dist/index.d.cts.map +1 -0
  40. package/dist/index.d.mts +14 -0
  41. package/dist/index.d.mts.map +1 -0
  42. package/dist/index.mjs +11 -0
  43. package/dist/index.mjs.map +1 -0
  44. package/dist/scope/assert.cjs +170 -0
  45. package/dist/scope/assert.cjs.map +1 -0
  46. package/dist/scope/assert.d.cts +50 -0
  47. package/dist/scope/assert.d.cts.map +1 -0
  48. package/dist/scope/assert.d.mts +50 -0
  49. package/dist/scope/assert.d.mts.map +1 -0
  50. package/dist/scope/assert.mjs +162 -0
  51. package/dist/scope/assert.mjs.map +1 -0
  52. package/dist/scope/authorization.cjs +51 -0
  53. package/dist/scope/authorization.cjs.map +1 -0
  54. package/dist/scope/authorization.d.cts +50 -0
  55. package/dist/scope/authorization.d.cts.map +1 -0
  56. package/dist/scope/authorization.d.mts +50 -0
  57. package/dist/scope/authorization.d.mts.map +1 -0
  58. package/dist/scope/authorization.mjs +46 -0
  59. package/dist/scope/authorization.mjs.map +1 -0
  60. package/dist/scope/constants.cjs +83 -0
  61. package/dist/scope/constants.cjs.map +1 -0
  62. package/dist/scope/constants.d.cts +32 -0
  63. package/dist/scope/constants.d.cts.map +1 -0
  64. package/dist/scope/constants.d.mts +32 -0
  65. package/dist/scope/constants.d.mts.map +1 -0
  66. package/dist/scope/constants.mjs +84 -0
  67. package/dist/scope/constants.mjs.map +1 -0
  68. package/dist/scope/errors.cjs +47 -0
  69. package/dist/scope/errors.cjs.map +1 -0
  70. package/dist/scope/errors.d.cts +44 -0
  71. package/dist/scope/errors.d.cts.map +1 -0
  72. package/dist/scope/errors.d.mts +44 -0
  73. package/dist/scope/errors.d.mts.map +1 -0
  74. package/dist/scope/errors.mjs +44 -0
  75. package/dist/scope/errors.mjs.map +1 -0
  76. package/dist/scope/filter.cjs +76 -0
  77. package/dist/scope/filter.cjs.map +1 -0
  78. package/dist/scope/filter.d.cts +35 -0
  79. package/dist/scope/filter.d.cts.map +1 -0
  80. package/dist/scope/filter.d.mts +35 -0
  81. package/dist/scope/filter.d.mts.map +1 -0
  82. package/dist/scope/filter.mjs +71 -0
  83. package/dist/scope/filter.mjs.map +1 -0
  84. package/dist/scope/supported.cjs +116 -0
  85. package/dist/scope/supported.cjs.map +1 -0
  86. package/dist/scope/supported.d.cts +52 -0
  87. package/dist/scope/supported.d.cts.map +1 -0
  88. package/dist/scope/supported.d.mts +52 -0
  89. package/dist/scope/supported.d.mts.map +1 -0
  90. package/dist/scope/supported.mjs +109 -0
  91. package/dist/scope/supported.mjs.map +1 -0
  92. package/dist/scope/transform.cjs +152 -0
  93. package/dist/scope/transform.cjs.map +1 -0
  94. package/dist/scope/transform.d.cts +50 -0
  95. package/dist/scope/transform.d.cts.map +1 -0
  96. package/dist/scope/transform.d.mts +50 -0
  97. package/dist/scope/transform.d.mts.map +1 -0
  98. package/dist/scope/transform.mjs +144 -0
  99. package/dist/scope/transform.mjs.map +1 -0
  100. package/dist/scope/types.cjs +23 -0
  101. package/dist/scope/types.cjs.map +1 -0
  102. package/dist/scope/types.d.cts +81 -0
  103. package/dist/scope/types.d.cts.map +1 -0
  104. package/dist/scope/types.d.mts +81 -0
  105. package/dist/scope/types.d.mts.map +1 -0
  106. package/dist/scope/types.mjs +19 -0
  107. package/dist/scope/types.mjs.map +1 -0
  108. package/dist/scope/validation.cjs +87 -0
  109. package/dist/scope/validation.cjs.map +1 -0
  110. package/dist/scope/validation.d.cts +21 -0
  111. package/dist/scope/validation.d.cts.map +1 -0
  112. package/dist/scope/validation.d.mts +21 -0
  113. package/dist/scope/validation.d.mts.map +1 -0
  114. package/dist/scope/validation.mjs +82 -0
  115. package/dist/scope/validation.mjs.map +1 -0
  116. package/package.json +75 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.cts","sourceRoot":"","sources":["../../src/scope/validation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACrB,oBAAgB;AAGjB;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,gBACV,mBAAmB,eACnB,mBAAmB,KAC/B,OAsEF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,oBACR,oBAAoB,mBACpB,oBAAoB;;;CA8BtC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { ExternalScopeString, ExternalScopeObject, ExternalScopesObject } from "./types.mjs";
2
+ /**
3
+ * Validates a scope object according to the [CAIP-217](https://chainagnostic.org/CAIPs/caip-217) spec.
4
+ *
5
+ * @param scopeString - The scope string to validate.
6
+ * @param scopeObject - The scope object to validate.
7
+ * @returns A boolean indicating if the scope object is valid according to the [CAIP-217](https://chainagnostic.org/CAIPs/caip-217) spec.
8
+ */
9
+ export declare const isValidScope: (scopeString: ExternalScopeString, scopeObject: ExternalScopeObject) => boolean;
10
+ /**
11
+ * Filters out invalid scopes and returns valid sets of required and optional scopes according to the [CAIP-217](https://chainagnostic.org/CAIPs/caip-217) spec.
12
+ *
13
+ * @param requiredScopes - The required scopes to validate.
14
+ * @param optionalScopes - The optional scopes to validate.
15
+ * @returns An object containing valid required scopes and optional scopes.
16
+ */
17
+ export declare const getValidScopes: (requiredScopes?: ExternalScopesObject, optionalScopes?: ExternalScopesObject) => {
18
+ validRequiredScopes: ExternalScopesObject;
19
+ validOptionalScopes: ExternalScopesObject;
20
+ };
21
+ //# sourceMappingURL=validation.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.mts","sourceRoot":"","sources":["../../src/scope/validation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACrB,oBAAgB;AAGjB;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,gBACV,mBAAmB,eACnB,mBAAmB,KAC/B,OAsEF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,oBACR,oBAAoB,mBACpB,oBAAoB;;;CA8BtC,CAAC"}
@@ -0,0 +1,82 @@
1
+ import { isCaipReference } from "@metamask/utils";
2
+ import { parseScopeString } from "./types.mjs";
3
+ /**
4
+ * Validates a scope object according to the [CAIP-217](https://chainagnostic.org/CAIPs/caip-217) spec.
5
+ *
6
+ * @param scopeString - The scope string to validate.
7
+ * @param scopeObject - The scope object to validate.
8
+ * @returns A boolean indicating if the scope object is valid according to the [CAIP-217](https://chainagnostic.org/CAIPs/caip-217) spec.
9
+ */
10
+ export const isValidScope = (scopeString, scopeObject) => {
11
+ const { namespace, reference } = parseScopeString(scopeString);
12
+ // Namespace is required
13
+ if (!namespace) {
14
+ return false;
15
+ }
16
+ const { references, methods, notifications, accounts, rpcDocuments, rpcEndpoints, ...extraProperties } = scopeObject;
17
+ // Methods and notifications are required
18
+ if (!methods || !notifications) {
19
+ return false;
20
+ }
21
+ // For namespaces other than 'wallet', either reference or non-empty references array must be present
22
+ if (namespace !== 'wallet' &&
23
+ !reference &&
24
+ (!references || references.length === 0)) {
25
+ return false;
26
+ }
27
+ // If references are present, reference must be absent and all references must be valid
28
+ if (references) {
29
+ if (reference) {
30
+ return false;
31
+ }
32
+ const areReferencesValid = references.every((nestedReference) => isCaipReference(nestedReference));
33
+ if (!areReferencesValid) {
34
+ return false;
35
+ }
36
+ }
37
+ const areMethodsValid = methods.every((method) => typeof method === 'string' && method.trim() !== '');
38
+ if (!areMethodsValid) {
39
+ return false;
40
+ }
41
+ const areNotificationsValid = notifications.every((notification) => typeof notification === 'string' && notification.trim() !== '');
42
+ if (!areNotificationsValid) {
43
+ return false;
44
+ }
45
+ // Ensure no unexpected properties are present in the scope object
46
+ if (Object.keys(extraProperties).length > 0) {
47
+ return false;
48
+ }
49
+ return true;
50
+ };
51
+ /**
52
+ * Filters out invalid scopes and returns valid sets of required and optional scopes according to the [CAIP-217](https://chainagnostic.org/CAIPs/caip-217) spec.
53
+ *
54
+ * @param requiredScopes - The required scopes to validate.
55
+ * @param optionalScopes - The optional scopes to validate.
56
+ * @returns An object containing valid required scopes and optional scopes.
57
+ */
58
+ export const getValidScopes = (requiredScopes, optionalScopes) => {
59
+ const validRequiredScopes = {};
60
+ for (const [scopeString, scopeObject] of Object.entries(requiredScopes || {})) {
61
+ if (isValidScope(scopeString, scopeObject)) {
62
+ validRequiredScopes[scopeString] = {
63
+ accounts: [],
64
+ ...scopeObject,
65
+ };
66
+ }
67
+ }
68
+ const validOptionalScopes = {};
69
+ for (const [scopeString, scopeObject] of Object.entries(optionalScopes || {})) {
70
+ if (isValidScope(scopeString, scopeObject)) {
71
+ validOptionalScopes[scopeString] = {
72
+ accounts: [],
73
+ ...scopeObject,
74
+ };
75
+ }
76
+ }
77
+ return {
78
+ validRequiredScopes,
79
+ validOptionalScopes,
80
+ };
81
+ };
82
+ //# sourceMappingURL=validation.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.mjs","sourceRoot":"","sources":["../../src/scope/validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { isCaipReference } from '@metamask/utils';\n\nimport type {\n ExternalScopeString,\n ExternalScopeObject,\n ExternalScopesObject,\n} from './types';\nimport { parseScopeString } from './types';\n\n/**\n * Validates a scope object according to the [CAIP-217](https://chainagnostic.org/CAIPs/caip-217) spec.\n *\n * @param scopeString - The scope string to validate.\n * @param scopeObject - The scope object to validate.\n * @returns A boolean indicating if the scope object is valid according to the [CAIP-217](https://chainagnostic.org/CAIPs/caip-217) spec.\n */\nexport const isValidScope = (\n scopeString: ExternalScopeString,\n scopeObject: ExternalScopeObject,\n): boolean => {\n const { namespace, reference } = parseScopeString(scopeString);\n\n // Namespace is required\n if (!namespace) {\n return false;\n }\n\n const {\n references,\n methods,\n notifications,\n accounts,\n rpcDocuments,\n rpcEndpoints,\n ...extraProperties\n } = scopeObject;\n\n // Methods and notifications are required\n if (!methods || !notifications) {\n return false;\n }\n\n // For namespaces other than 'wallet', either reference or non-empty references array must be present\n if (\n namespace !== 'wallet' &&\n !reference &&\n (!references || references.length === 0)\n ) {\n return false;\n }\n\n // If references are present, reference must be absent and all references must be valid\n if (references) {\n if (reference) {\n return false;\n }\n\n const areReferencesValid = references.every((nestedReference) =>\n isCaipReference(nestedReference),\n );\n\n if (!areReferencesValid) {\n return false;\n }\n }\n\n const areMethodsValid = methods.every(\n (method) => typeof method === 'string' && method.trim() !== '',\n );\n\n if (!areMethodsValid) {\n return false;\n }\n\n const areNotificationsValid = notifications.every(\n (notification) =>\n typeof notification === 'string' && notification.trim() !== '',\n );\n\n if (!areNotificationsValid) {\n return false;\n }\n\n // Ensure no unexpected properties are present in the scope object\n if (Object.keys(extraProperties).length > 0) {\n return false;\n }\n\n return true;\n};\n\n/**\n * Filters out invalid scopes and returns valid sets of required and optional scopes according to the [CAIP-217](https://chainagnostic.org/CAIPs/caip-217) spec.\n *\n * @param requiredScopes - The required scopes to validate.\n * @param optionalScopes - The optional scopes to validate.\n * @returns An object containing valid required scopes and optional scopes.\n */\nexport const getValidScopes = (\n requiredScopes?: ExternalScopesObject,\n optionalScopes?: ExternalScopesObject,\n) => {\n const validRequiredScopes: ExternalScopesObject = {};\n for (const [scopeString, scopeObject] of Object.entries(\n requiredScopes || {},\n )) {\n if (isValidScope(scopeString, scopeObject)) {\n validRequiredScopes[scopeString] = {\n accounts: [],\n ...scopeObject,\n };\n }\n }\n\n const validOptionalScopes: ExternalScopesObject = {};\n for (const [scopeString, scopeObject] of Object.entries(\n optionalScopes || {},\n )) {\n if (isValidScope(scopeString, scopeObject)) {\n validOptionalScopes[scopeString] = {\n accounts: [],\n ...scopeObject,\n };\n }\n }\n\n return {\n validRequiredScopes,\n validOptionalScopes,\n };\n};\n"]}
package/package.json ADDED
@@ -0,0 +1,75 @@
1
+ {
2
+ "name": "@metamask-previews/chain-agnostic-permission",
3
+ "version": "0.1.0-preview-b69c669",
4
+ "description": "Defines a CAIP-25 based endowment permission and helpers for interfacing with it",
5
+ "keywords": [
6
+ "MetaMask",
7
+ "Ethereum"
8
+ ],
9
+ "homepage": "https://github.com/MetaMask/core/tree/main/packages/chain-agnostic-permission#readme",
10
+ "bugs": {
11
+ "url": "https://github.com/MetaMask/core/issues"
12
+ },
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "https://github.com/MetaMask/core.git"
16
+ },
17
+ "license": "MIT",
18
+ "sideEffects": false,
19
+ "exports": {
20
+ ".": {
21
+ "import": {
22
+ "types": "./dist/index.d.mts",
23
+ "default": "./dist/index.mjs"
24
+ },
25
+ "require": {
26
+ "types": "./dist/index.d.cts",
27
+ "default": "./dist/index.cjs"
28
+ }
29
+ },
30
+ "./package.json": "./package.json"
31
+ },
32
+ "main": "./dist/index.cjs",
33
+ "types": "./dist/index.d.cts",
34
+ "files": [
35
+ "dist/"
36
+ ],
37
+ "scripts": {
38
+ "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
39
+ "build:docs": "typedoc",
40
+ "changelog:update": "../../scripts/update-changelog.sh @metamask/chain-agnostic-permission",
41
+ "changelog:validate": "../../scripts/validate-changelog.sh @metamask/chain-agnostic-permission",
42
+ "publish:preview": "yarn npm publish --tag preview",
43
+ "since-latest-release": "../../scripts/since-latest-release.sh",
44
+ "test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter",
45
+ "test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache",
46
+ "test:verbose": "NODE_OPTIONS=--experimental-vm-modules jest --verbose",
47
+ "test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch"
48
+ },
49
+ "dependencies": {
50
+ "@metamask/api-specs": "^0.10.12",
51
+ "@metamask/controller-utils": "^11.6.0",
52
+ "@metamask/network-controller": "^22.2.1",
53
+ "@metamask/permission-controller": "^11.0.6",
54
+ "@metamask/rpc-errors": "^7.0.2",
55
+ "@metamask/utils": "^11.2.0",
56
+ "lodash": "^4.17.21"
57
+ },
58
+ "devDependencies": {
59
+ "@metamask/auto-changelog": "^3.4.4",
60
+ "@types/jest": "^27.4.1",
61
+ "deepmerge": "^4.2.2",
62
+ "jest": "^27.5.1",
63
+ "ts-jest": "^27.1.4",
64
+ "typedoc": "^0.24.8",
65
+ "typedoc-plugin-missing-exports": "^2.0.0",
66
+ "typescript": "~5.2.2"
67
+ },
68
+ "engines": {
69
+ "node": "^18.18 || >=20"
70
+ },
71
+ "publishConfig": {
72
+ "access": "public",
73
+ "registry": "https://registry.npmjs.org/"
74
+ }
75
+ }