@metamask-previews/chain-agnostic-permission 0.2.0-preview-62c1e797 → 0.2.0-preview-49487623

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 (45) hide show
  1. package/dist/adapters/{caip-permission-adapter-accounts.cjs → caip-permission-adapter-eth-accounts.cjs} +2 -72
  2. package/dist/adapters/caip-permission-adapter-eth-accounts.cjs.map +1 -0
  3. package/dist/adapters/{caip-permission-adapter-accounts.d.cts → caip-permission-adapter-eth-accounts.d.cts} +2 -20
  4. package/dist/adapters/caip-permission-adapter-eth-accounts.d.cts.map +1 -0
  5. package/dist/adapters/{caip-permission-adapter-accounts.d.mts → caip-permission-adapter-eth-accounts.d.mts} +2 -20
  6. package/dist/adapters/caip-permission-adapter-eth-accounts.d.mts.map +1 -0
  7. package/dist/adapters/{caip-permission-adapter-accounts.mjs → caip-permission-adapter-eth-accounts.mjs} +1 -70
  8. package/dist/adapters/caip-permission-adapter-eth-accounts.mjs.map +1 -0
  9. package/dist/adapters/caip-permission-adapter-permittedChains.cjs +1 -68
  10. package/dist/adapters/caip-permission-adapter-permittedChains.cjs.map +1 -1
  11. package/dist/adapters/caip-permission-adapter-permittedChains.d.cts +1 -18
  12. package/dist/adapters/caip-permission-adapter-permittedChains.d.cts.map +1 -1
  13. package/dist/adapters/caip-permission-adapter-permittedChains.d.mts +1 -18
  14. package/dist/adapters/caip-permission-adapter-permittedChains.d.mts.map +1 -1
  15. package/dist/adapters/caip-permission-adapter-permittedChains.mjs +1 -66
  16. package/dist/adapters/caip-permission-adapter-permittedChains.mjs.map +1 -1
  17. package/dist/caip25Permission.cjs +1 -30
  18. package/dist/caip25Permission.cjs.map +1 -1
  19. package/dist/caip25Permission.d.cts +1 -17
  20. package/dist/caip25Permission.d.cts.map +1 -1
  21. package/dist/caip25Permission.d.mts +1 -17
  22. package/dist/caip25Permission.d.mts.map +1 -1
  23. package/dist/caip25Permission.mjs +0 -28
  24. package/dist/caip25Permission.mjs.map +1 -1
  25. package/dist/index.cjs +4 -8
  26. package/dist/index.cjs.map +1 -1
  27. package/dist/index.d.cts +3 -3
  28. package/dist/index.d.cts.map +1 -1
  29. package/dist/index.d.mts +3 -3
  30. package/dist/index.d.mts.map +1 -1
  31. package/dist/index.mjs +3 -3
  32. package/dist/index.mjs.map +1 -1
  33. package/dist/scope/types.cjs +1 -12
  34. package/dist/scope/types.cjs.map +1 -1
  35. package/dist/scope/types.d.cts +1 -9
  36. package/dist/scope/types.d.cts.map +1 -1
  37. package/dist/scope/types.d.mts +1 -9
  38. package/dist/scope/types.d.mts.map +1 -1
  39. package/dist/scope/types.mjs +1 -11
  40. package/dist/scope/types.mjs.map +1 -1
  41. package/package.json +1 -1
  42. package/dist/adapters/caip-permission-adapter-accounts.cjs.map +0 -1
  43. package/dist/adapters/caip-permission-adapter-accounts.d.cts.map +0 -1
  44. package/dist/adapters/caip-permission-adapter-accounts.d.mts.map +0 -1
  45. package/dist/adapters/caip-permission-adapter-accounts.mjs.map +0 -1
@@ -1,11 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getAllAccountsFromCaip25Caveat = exports.setPermittedAccounts = exports.setEthAccounts = exports.getEthAccounts = void 0;
3
+ exports.setEthAccounts = exports.getEthAccounts = void 0;
4
4
  const utils_1 = require("@metamask/utils");
5
5
  const constants_1 = require("../scope/constants.cjs");
6
6
  const transform_1 = require("../scope/transform.cjs");
7
7
  const types_1 = require("../scope/types.cjs");
8
- const lodash_1 = require("lodash");
9
8
  /**
10
9
  * Checks if a scope string is either an EIP155 or wallet namespaced scope string.
11
10
  *
@@ -101,73 +100,4 @@ const setEthAccounts = (caip25CaveatValue, accounts) => {
101
100
  };
102
101
  };
103
102
  exports.setEthAccounts = setEthAccounts;
104
- /**
105
- * Sets the permitted accounts for the given scopes object.
106
- *
107
- * @param scopesObject - The scopes object to set the permitted accounts for.
108
- * @param accounts - The permitted accounts to add to the appropriate scopes.
109
- * @returns The updated scopes object with the permitted accounts set.
110
- */
111
- const setPermittedAccountsForScopesObject = (scopesObject, accounts) => {
112
- const updatedScopesObject = {};
113
- Object.entries(scopesObject).forEach(([key, scopeObject]) => {
114
- // Cast needed because index type is returned as `string` by `Object.entries`
115
- const scopeString = key;
116
- const { namespace, reference } = (0, types_1.parseScopeString)(scopeString);
117
- let caipAccounts = [];
118
- if (namespace && reference) {
119
- caipAccounts = accounts.reduce((acc, account) => {
120
- const { chain: { namespace: accountNamespace }, address: accountAddress, } = (0, utils_1.parseCaipAccountId)(account);
121
- // If the account namespace is the same as the scope namespace, add the account to the scope
122
- // This will, for example, distribute all EIP155 accounts, regardless of reference, to all EIP155 scopes
123
- if (namespace === accountNamespace) {
124
- acc.push(`${namespace}:${reference}:${accountAddress}`);
125
- }
126
- return acc;
127
- }, []);
128
- }
129
- updatedScopesObject[scopeString] = {
130
- ...scopeObject,
131
- accounts: (0, lodash_1.uniq)(caipAccounts),
132
- };
133
- });
134
- return updatedScopesObject;
135
- };
136
- /**
137
- * Sets the permitted accounts for the given CAIP-25 caveat value.
138
- *
139
- * @param caip25CaveatValue - The CAIP-25 caveat value to set the permitted accounts for.
140
- * @param accounts - The permitted accounts to add to the appropriate scopes.
141
- * @returns The updated CAIP-25 caveat value with the permitted accounts set.
142
- */
143
- const setPermittedAccounts = (caip25CaveatValue, accounts) => {
144
- return {
145
- ...caip25CaveatValue,
146
- requiredScopes: setPermittedAccountsForScopesObject(caip25CaveatValue.requiredScopes, accounts),
147
- optionalScopes: setPermittedAccountsForScopesObject(caip25CaveatValue.optionalScopes, accounts),
148
- };
149
- };
150
- exports.setPermittedAccounts = setPermittedAccounts;
151
- /**
152
- * Gets the requested accounts from the given CAIP-25 caveat value.
153
- *
154
- * @param requestedCaip25CaveatValue - CAIP-25 request values.
155
- * @returns Accounts available for requesting.
156
- */
157
- function getAllAccountsFromCaip25Caveat(requestedCaip25CaveatValue) {
158
- const requiredAccounts = Object.values(requestedCaip25CaveatValue.requiredScopes)
159
- .flatMap((scope) => scope.accounts)
160
- .map((account) => ({
161
- address: (0, utils_1.parseCaipAccountId)(account).address,
162
- chainId: (0, utils_1.parseCaipAccountId)(account).chainId,
163
- }));
164
- const optionalAccounts = Object.values(requestedCaip25CaveatValue.optionalScopes)
165
- .flatMap((scope) => scope.accounts)
166
- .map((account) => ({
167
- address: (0, utils_1.parseCaipAccountId)(account).address,
168
- chainId: (0, utils_1.parseCaipAccountId)(account).chainId,
169
- }));
170
- return [...requiredAccounts, ...optionalAccounts];
171
- }
172
- exports.getAllAccountsFromCaip25Caveat = getAllAccountsFromCaip25Caveat;
173
- //# sourceMappingURL=caip-permission-adapter-accounts.cjs.map
103
+ //# sourceMappingURL=caip-permission-adapter-eth-accounts.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caip-permission-adapter-eth-accounts.cjs","sourceRoot":"","sources":["../../src/adapters/caip-permission-adapter-eth-accounts.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n assertIsStrictHexString,\n type CaipAccountId,\n type Hex,\n KnownCaipNamespace,\n parseCaipAccountId,\n} from '@metamask/utils';\n\nimport type { Caip25CaveatValue } from '../caip25Permission';\nimport { KnownWalletScopeString } from '../scope/constants';\nimport { getUniqueArrayItems } from '../scope/transform';\nimport type { InternalScopeString, InternalScopesObject } from '../scope/types';\nimport { parseScopeString } from '../scope/types';\n\n/**\n * Checks if a scope string is either an EIP155 or wallet namespaced scope string.\n *\n * @param scopeString - The scope string to check.\n * @returns True if the scope string is an EIP155 or wallet namespaced scope string, false otherwise.\n */\nconst isEip155ScopeString = (scopeString: InternalScopeString) => {\n const { namespace } = parseScopeString(scopeString);\n\n return (\n namespace === KnownCaipNamespace.Eip155 ||\n // We are trying to discern the type of `scopeString`.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison\n scopeString === KnownWalletScopeString.Eip155\n );\n};\n\n/**\n * Gets the Ethereum (EIP155 namespaced) accounts from internal scopes.\n *\n * @param scopes - The internal scopes from which to get the Ethereum accounts.\n * @returns An array of Ethereum accounts.\n */\nconst getEthAccountsFromScopes = (scopes: InternalScopesObject) => {\n const ethAccounts: Hex[] = [];\n\n Object.entries(scopes).forEach(([_, { accounts }]) => {\n accounts?.forEach((account) => {\n const { address, chainId } = parseCaipAccountId(account);\n\n if (isEip155ScopeString(chainId)) {\n // This address should always be a valid Hex string because\n // it's an EIP155/Ethereum account\n assertIsStrictHexString(address);\n ethAccounts.push(address);\n }\n });\n });\n\n return ethAccounts;\n};\n\n/**\n * Gets the Ethereum (EIP155 namespaced) accounts from the required and optional scopes.\n *\n * @param caip25CaveatValue - The CAIP-25 caveat value to get the Ethereum accounts from.\n * @returns An array of Ethereum accounts.\n */\nexport const getEthAccounts = (\n caip25CaveatValue: Pick<\n Caip25CaveatValue,\n 'requiredScopes' | 'optionalScopes'\n >,\n): Hex[] => {\n const { requiredScopes, optionalScopes } = caip25CaveatValue;\n\n const ethAccounts: Hex[] = [\n ...getEthAccountsFromScopes(requiredScopes),\n ...getEthAccountsFromScopes(optionalScopes),\n ];\n\n return getUniqueArrayItems(ethAccounts);\n};\n\n/**\n * Sets the Ethereum (EIP155 namespaced) accounts for the given scopes object.\n *\n * @param scopesObject - The scopes object to set the Ethereum accounts for.\n * @param accounts - The Ethereum accounts to set.\n * @returns The updated scopes object with the Ethereum accounts set.\n */\nconst setEthAccountsForScopesObject = (\n scopesObject: InternalScopesObject,\n accounts: Hex[],\n) => {\n const updatedScopesObject: InternalScopesObject = {};\n Object.entries(scopesObject).forEach(([key, scopeObject]) => {\n // Cast needed because index type is returned as `string` by `Object.entries`\n const scopeString = key as keyof typeof scopesObject;\n const isWalletNamespace = scopeString === KnownCaipNamespace.Wallet;\n const { namespace, reference } = parseScopeString(scopeString);\n if (!isEip155ScopeString(scopeString) && !isWalletNamespace) {\n updatedScopesObject[scopeString] = scopeObject;\n return;\n }\n\n let caipAccounts: CaipAccountId[] = [];\n if (namespace && reference) {\n caipAccounts = accounts.map<CaipAccountId>(\n (account) => `${namespace}:${reference}:${account}`,\n );\n }\n\n updatedScopesObject[scopeString] = {\n ...scopeObject,\n accounts: caipAccounts,\n };\n });\n\n return updatedScopesObject;\n};\n\n/**\n * Sets the Ethereum (EIP155 namespaced) accounts for the given CAIP-25 caveat value.\n * We set the same accounts for all the scopes that are EIP155 or Wallet namespaced because\n * we do not provide UI/UX flows for selecting different accounts across different chains.\n *\n * @param caip25CaveatValue - The CAIP-25 caveat value to set the Ethereum accounts for.\n * @param accounts - The Ethereum accounts to set.\n * @returns The updated CAIP-25 caveat value with the Ethereum accounts set.\n */\nexport const setEthAccounts = (\n caip25CaveatValue: Caip25CaveatValue,\n accounts: Hex[],\n): Caip25CaveatValue => {\n return {\n ...caip25CaveatValue,\n requiredScopes: setEthAccountsForScopesObject(\n caip25CaveatValue.requiredScopes,\n accounts,\n ),\n optionalScopes: setEthAccountsForScopesObject(\n caip25CaveatValue.optionalScopes,\n accounts,\n ),\n };\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { type CaipAccountId, type Hex } from "@metamask/utils";
1
+ import { type Hex } from "@metamask/utils";
2
2
  import type { Caip25CaveatValue } from "../caip25Permission.cjs";
3
3
  /**
4
4
  * Gets the Ethereum (EIP155 namespaced) accounts from the required and optional scopes.
@@ -17,22 +17,4 @@ export declare const getEthAccounts: (caip25CaveatValue: Pick<Caip25CaveatValue,
17
17
  * @returns The updated CAIP-25 caveat value with the Ethereum accounts set.
18
18
  */
19
19
  export declare const setEthAccounts: (caip25CaveatValue: Caip25CaveatValue, accounts: Hex[]) => Caip25CaveatValue;
20
- /**
21
- * Sets the permitted accounts for the given CAIP-25 caveat value.
22
- *
23
- * @param caip25CaveatValue - The CAIP-25 caveat value to set the permitted accounts for.
24
- * @param accounts - The permitted accounts to add to the appropriate scopes.
25
- * @returns The updated CAIP-25 caveat value with the permitted accounts set.
26
- */
27
- export declare const setPermittedAccounts: (caip25CaveatValue: Caip25CaveatValue, accounts: CaipAccountId[]) => Caip25CaveatValue;
28
- /**
29
- * Gets the requested accounts from the given CAIP-25 caveat value.
30
- *
31
- * @param requestedCaip25CaveatValue - CAIP-25 request values.
32
- * @returns Accounts available for requesting.
33
- */
34
- export declare function getAllAccountsFromCaip25Caveat(requestedCaip25CaveatValue: Caip25CaveatValue): {
35
- address: string;
36
- chainId: `${string}:${string}`;
37
- }[];
38
- //# sourceMappingURL=caip-permission-adapter-accounts.d.cts.map
20
+ //# sourceMappingURL=caip-permission-adapter-eth-accounts.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caip-permission-adapter-eth-accounts.d.cts","sourceRoot":"","sources":["../../src/adapters/caip-permission-adapter-eth-accounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,GAAG,EAGT,wBAAwB;AAEzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,gCAA4B;AAgD7D;;;;;GAKG;AACH,eAAO,MAAM,cAAc,sBACN,KACjB,iBAAiB,EACjB,gBAAgB,GAAG,gBAAgB,CACpC,KACA,GAAG,EASL,CAAC;AAwCF;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,sBACN,iBAAiB,YAC1B,GAAG,EAAE,KACd,iBAYF,CAAC"}
@@ -1,4 +1,4 @@
1
- import { type CaipAccountId, type Hex } from "@metamask/utils";
1
+ import { type Hex } from "@metamask/utils";
2
2
  import type { Caip25CaveatValue } from "../caip25Permission.mjs";
3
3
  /**
4
4
  * Gets the Ethereum (EIP155 namespaced) accounts from the required and optional scopes.
@@ -17,22 +17,4 @@ export declare const getEthAccounts: (caip25CaveatValue: Pick<Caip25CaveatValue,
17
17
  * @returns The updated CAIP-25 caveat value with the Ethereum accounts set.
18
18
  */
19
19
  export declare const setEthAccounts: (caip25CaveatValue: Caip25CaveatValue, accounts: Hex[]) => Caip25CaveatValue;
20
- /**
21
- * Sets the permitted accounts for the given CAIP-25 caveat value.
22
- *
23
- * @param caip25CaveatValue - The CAIP-25 caveat value to set the permitted accounts for.
24
- * @param accounts - The permitted accounts to add to the appropriate scopes.
25
- * @returns The updated CAIP-25 caveat value with the permitted accounts set.
26
- */
27
- export declare const setPermittedAccounts: (caip25CaveatValue: Caip25CaveatValue, accounts: CaipAccountId[]) => Caip25CaveatValue;
28
- /**
29
- * Gets the requested accounts from the given CAIP-25 caveat value.
30
- *
31
- * @param requestedCaip25CaveatValue - CAIP-25 request values.
32
- * @returns Accounts available for requesting.
33
- */
34
- export declare function getAllAccountsFromCaip25Caveat(requestedCaip25CaveatValue: Caip25CaveatValue): {
35
- address: string;
36
- chainId: `${string}:${string}`;
37
- }[];
38
- //# sourceMappingURL=caip-permission-adapter-accounts.d.mts.map
20
+ //# sourceMappingURL=caip-permission-adapter-eth-accounts.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caip-permission-adapter-eth-accounts.d.mts","sourceRoot":"","sources":["../../src/adapters/caip-permission-adapter-eth-accounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,GAAG,EAGT,wBAAwB;AAEzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,gCAA4B;AAgD7D;;;;;GAKG;AACH,eAAO,MAAM,cAAc,sBACN,KACjB,iBAAiB,EACjB,gBAAgB,GAAG,gBAAgB,CACpC,KACA,GAAG,EASL,CAAC;AAwCF;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,sBACN,iBAAiB,YAC1B,GAAG,EAAE,KACd,iBAYF,CAAC"}
@@ -2,8 +2,6 @@ import { assertIsStrictHexString, KnownCaipNamespace, parseCaipAccountId } from
2
2
  import { KnownWalletScopeString } from "../scope/constants.mjs";
3
3
  import { getUniqueArrayItems } from "../scope/transform.mjs";
4
4
  import { parseScopeString } from "../scope/types.mjs";
5
- import $lodash from "lodash";
6
- const { uniq } = $lodash;
7
5
  /**
8
6
  * Checks if a scope string is either an EIP155 or wallet namespaced scope string.
9
7
  *
@@ -97,71 +95,4 @@ export const setEthAccounts = (caip25CaveatValue, accounts) => {
97
95
  optionalScopes: setEthAccountsForScopesObject(caip25CaveatValue.optionalScopes, accounts),
98
96
  };
99
97
  };
100
- /**
101
- * Sets the permitted accounts for the given scopes object.
102
- *
103
- * @param scopesObject - The scopes object to set the permitted accounts for.
104
- * @param accounts - The permitted accounts to add to the appropriate scopes.
105
- * @returns The updated scopes object with the permitted accounts set.
106
- */
107
- const setPermittedAccountsForScopesObject = (scopesObject, accounts) => {
108
- const updatedScopesObject = {};
109
- Object.entries(scopesObject).forEach(([key, scopeObject]) => {
110
- // Cast needed because index type is returned as `string` by `Object.entries`
111
- const scopeString = key;
112
- const { namespace, reference } = parseScopeString(scopeString);
113
- let caipAccounts = [];
114
- if (namespace && reference) {
115
- caipAccounts = accounts.reduce((acc, account) => {
116
- const { chain: { namespace: accountNamespace }, address: accountAddress, } = parseCaipAccountId(account);
117
- // If the account namespace is the same as the scope namespace, add the account to the scope
118
- // This will, for example, distribute all EIP155 accounts, regardless of reference, to all EIP155 scopes
119
- if (namespace === accountNamespace) {
120
- acc.push(`${namespace}:${reference}:${accountAddress}`);
121
- }
122
- return acc;
123
- }, []);
124
- }
125
- updatedScopesObject[scopeString] = {
126
- ...scopeObject,
127
- accounts: uniq(caipAccounts),
128
- };
129
- });
130
- return updatedScopesObject;
131
- };
132
- /**
133
- * Sets the permitted accounts for the given CAIP-25 caveat value.
134
- *
135
- * @param caip25CaveatValue - The CAIP-25 caveat value to set the permitted accounts for.
136
- * @param accounts - The permitted accounts to add to the appropriate scopes.
137
- * @returns The updated CAIP-25 caveat value with the permitted accounts set.
138
- */
139
- export const setPermittedAccounts = (caip25CaveatValue, accounts) => {
140
- return {
141
- ...caip25CaveatValue,
142
- requiredScopes: setPermittedAccountsForScopesObject(caip25CaveatValue.requiredScopes, accounts),
143
- optionalScopes: setPermittedAccountsForScopesObject(caip25CaveatValue.optionalScopes, accounts),
144
- };
145
- };
146
- /**
147
- * Gets the requested accounts from the given CAIP-25 caveat value.
148
- *
149
- * @param requestedCaip25CaveatValue - CAIP-25 request values.
150
- * @returns Accounts available for requesting.
151
- */
152
- export function getAllAccountsFromCaip25Caveat(requestedCaip25CaveatValue) {
153
- const requiredAccounts = Object.values(requestedCaip25CaveatValue.requiredScopes)
154
- .flatMap((scope) => scope.accounts)
155
- .map((account) => ({
156
- address: parseCaipAccountId(account).address,
157
- chainId: parseCaipAccountId(account).chainId,
158
- }));
159
- const optionalAccounts = Object.values(requestedCaip25CaveatValue.optionalScopes)
160
- .flatMap((scope) => scope.accounts)
161
- .map((account) => ({
162
- address: parseCaipAccountId(account).address,
163
- chainId: parseCaipAccountId(account).chainId,
164
- }));
165
- return [...requiredAccounts, ...optionalAccounts];
166
- }
167
- //# sourceMappingURL=caip-permission-adapter-accounts.mjs.map
98
+ //# sourceMappingURL=caip-permission-adapter-eth-accounts.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caip-permission-adapter-eth-accounts.mjs","sourceRoot":"","sources":["../../src/adapters/caip-permission-adapter-eth-accounts.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n assertIsStrictHexString,\n type CaipAccountId,\n type Hex,\n KnownCaipNamespace,\n parseCaipAccountId,\n} from '@metamask/utils';\n\nimport type { Caip25CaveatValue } from '../caip25Permission';\nimport { KnownWalletScopeString } from '../scope/constants';\nimport { getUniqueArrayItems } from '../scope/transform';\nimport type { InternalScopeString, InternalScopesObject } from '../scope/types';\nimport { parseScopeString } from '../scope/types';\n\n/**\n * Checks if a scope string is either an EIP155 or wallet namespaced scope string.\n *\n * @param scopeString - The scope string to check.\n * @returns True if the scope string is an EIP155 or wallet namespaced scope string, false otherwise.\n */\nconst isEip155ScopeString = (scopeString: InternalScopeString) => {\n const { namespace } = parseScopeString(scopeString);\n\n return (\n namespace === KnownCaipNamespace.Eip155 ||\n // We are trying to discern the type of `scopeString`.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison\n scopeString === KnownWalletScopeString.Eip155\n );\n};\n\n/**\n * Gets the Ethereum (EIP155 namespaced) accounts from internal scopes.\n *\n * @param scopes - The internal scopes from which to get the Ethereum accounts.\n * @returns An array of Ethereum accounts.\n */\nconst getEthAccountsFromScopes = (scopes: InternalScopesObject) => {\n const ethAccounts: Hex[] = [];\n\n Object.entries(scopes).forEach(([_, { accounts }]) => {\n accounts?.forEach((account) => {\n const { address, chainId } = parseCaipAccountId(account);\n\n if (isEip155ScopeString(chainId)) {\n // This address should always be a valid Hex string because\n // it's an EIP155/Ethereum account\n assertIsStrictHexString(address);\n ethAccounts.push(address);\n }\n });\n });\n\n return ethAccounts;\n};\n\n/**\n * Gets the Ethereum (EIP155 namespaced) accounts from the required and optional scopes.\n *\n * @param caip25CaveatValue - The CAIP-25 caveat value to get the Ethereum accounts from.\n * @returns An array of Ethereum accounts.\n */\nexport const getEthAccounts = (\n caip25CaveatValue: Pick<\n Caip25CaveatValue,\n 'requiredScopes' | 'optionalScopes'\n >,\n): Hex[] => {\n const { requiredScopes, optionalScopes } = caip25CaveatValue;\n\n const ethAccounts: Hex[] = [\n ...getEthAccountsFromScopes(requiredScopes),\n ...getEthAccountsFromScopes(optionalScopes),\n ];\n\n return getUniqueArrayItems(ethAccounts);\n};\n\n/**\n * Sets the Ethereum (EIP155 namespaced) accounts for the given scopes object.\n *\n * @param scopesObject - The scopes object to set the Ethereum accounts for.\n * @param accounts - The Ethereum accounts to set.\n * @returns The updated scopes object with the Ethereum accounts set.\n */\nconst setEthAccountsForScopesObject = (\n scopesObject: InternalScopesObject,\n accounts: Hex[],\n) => {\n const updatedScopesObject: InternalScopesObject = {};\n Object.entries(scopesObject).forEach(([key, scopeObject]) => {\n // Cast needed because index type is returned as `string` by `Object.entries`\n const scopeString = key as keyof typeof scopesObject;\n const isWalletNamespace = scopeString === KnownCaipNamespace.Wallet;\n const { namespace, reference } = parseScopeString(scopeString);\n if (!isEip155ScopeString(scopeString) && !isWalletNamespace) {\n updatedScopesObject[scopeString] = scopeObject;\n return;\n }\n\n let caipAccounts: CaipAccountId[] = [];\n if (namespace && reference) {\n caipAccounts = accounts.map<CaipAccountId>(\n (account) => `${namespace}:${reference}:${account}`,\n );\n }\n\n updatedScopesObject[scopeString] = {\n ...scopeObject,\n accounts: caipAccounts,\n };\n });\n\n return updatedScopesObject;\n};\n\n/**\n * Sets the Ethereum (EIP155 namespaced) accounts for the given CAIP-25 caveat value.\n * We set the same accounts for all the scopes that are EIP155 or Wallet namespaced because\n * we do not provide UI/UX flows for selecting different accounts across different chains.\n *\n * @param caip25CaveatValue - The CAIP-25 caveat value to set the Ethereum accounts for.\n * @param accounts - The Ethereum accounts to set.\n * @returns The updated CAIP-25 caveat value with the Ethereum accounts set.\n */\nexport const setEthAccounts = (\n caip25CaveatValue: Caip25CaveatValue,\n accounts: Hex[],\n): Caip25CaveatValue => {\n return {\n ...caip25CaveatValue,\n requiredScopes: setEthAccountsForScopesObject(\n caip25CaveatValue.requiredScopes,\n accounts,\n ),\n optionalScopes: setEthAccountsForScopesObject(\n caip25CaveatValue.optionalScopes,\n accounts,\n ),\n };\n};\n"]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setPermittedChainIds = exports.addPermittedChainId = exports.setPermittedEthChainIds = exports.addPermittedEthChainId = exports.getPermittedEthChainIds = void 0;
3
+ exports.setPermittedEthChainIds = exports.addPermittedEthChainId = exports.getPermittedEthChainIds = void 0;
4
4
  const controller_utils_1 = require("@metamask/controller-utils");
5
5
  const utils_1 = require("@metamask/utils");
6
6
  const transform_1 = require("../scope/transform.cjs");
@@ -112,71 +112,4 @@ const setPermittedEthChainIds = (caip25CaveatValue, chainIds) => {
112
112
  return updatedCaveatValue;
113
113
  };
114
114
  exports.setPermittedEthChainIds = setPermittedEthChainIds;
115
- /**
116
- * Filters the scopes object to only include:
117
- * - Scopes without references (e.g. "wallet:")
118
- * - CAIP-2 ChainId scopes for the given chainIDs
119
- *
120
- * @param scopesObject - The scopes object to filter.
121
- * @param chainIds - The CAIP-2 chainIDs to filter for.
122
- * @returns The filtered scopes object.
123
- */
124
- const filterChainScopesObjectByChainId = (scopesObject, chainIds) => {
125
- const updatedScopesObject = {};
126
- Object.entries(scopesObject).forEach(([key, scopeObject]) => {
127
- // Cast needed because index type is returned as `string` by `Object.entries`
128
- const scopeString = key;
129
- // If its a wallet scope or a wallet:* scope we don't filter it
130
- if ((0, types_1.isWalletScope)(scopeString)) {
131
- updatedScopesObject[scopeString] = scopeObject;
132
- }
133
- else if (chainIds.includes(scopeString)) {
134
- updatedScopesObject[scopeString] = scopeObject;
135
- }
136
- });
137
- return updatedScopesObject;
138
- };
139
- /**
140
- * Adds a chainID to the optional scopes if it is not already present
141
- * in either the pre-existing required or optional scopes.
142
- *
143
- * @param caip25CaveatValue - The CAIP-25 caveat value to add the chainID to.
144
- * @param chainId - The chainID to add.
145
- * @returns The updated CAIP-25 caveat value with the added chainID.
146
- */
147
- const addPermittedChainId = (caip25CaveatValue, chainId) => {
148
- if (Object.keys(caip25CaveatValue.requiredScopes).includes(chainId) ||
149
- Object.keys(caip25CaveatValue.optionalScopes).includes(chainId)) {
150
- return caip25CaveatValue;
151
- }
152
- return {
153
- ...caip25CaveatValue,
154
- optionalScopes: {
155
- ...caip25CaveatValue.optionalScopes,
156
- [chainId]: {
157
- accounts: [],
158
- },
159
- },
160
- };
161
- };
162
- exports.addPermittedChainId = addPermittedChainId;
163
- /**
164
- * Sets the permitted CAIP-2 chainIDs for the required and optional scopes.
165
- *
166
- * @param caip25CaveatValue - The CAIP-25 caveat value to set the permitted CAIP-2 chainIDs for.
167
- * @param chainIds - The CAIP-2 chainIDs to set as permitted.
168
- * @returns The updated CAIP-25 caveat value with the permitted CAIP-2 chainIDs.
169
- */
170
- const setPermittedChainIds = (caip25CaveatValue, chainIds) => {
171
- let updatedCaveatValue = {
172
- ...caip25CaveatValue,
173
- requiredScopes: filterChainScopesObjectByChainId(caip25CaveatValue.requiredScopes, chainIds),
174
- optionalScopes: filterChainScopesObjectByChainId(caip25CaveatValue.optionalScopes, chainIds),
175
- };
176
- chainIds.forEach((chainId) => {
177
- updatedCaveatValue = (0, exports.addPermittedChainId)(updatedCaveatValue, chainId);
178
- });
179
- return updatedCaveatValue;
180
- };
181
- exports.setPermittedChainIds = setPermittedChainIds;
182
115
  //# sourceMappingURL=caip-permission-adapter-permittedChains.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"caip-permission-adapter-permittedChains.cjs","sourceRoot":"","sources":["../../src/adapters/caip-permission-adapter-permittedChains.ts"],"names":[],"mappings":"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","sourcesContent":["import { toHex } from '@metamask/controller-utils';\nimport type { Hex, CaipChainId } from '@metamask/utils';\nimport { hexToBigInt, KnownCaipNamespace } from '@metamask/utils';\n\nimport type { Caip25CaveatValue } from '../caip25Permission';\nimport { getUniqueArrayItems } from '../scope/transform';\nimport type { InternalScopesObject } from '../scope/types';\nimport { isWalletScope, parseScopeString } from '../scope/types';\n\n/**\n * Gets the Ethereum (EIP155 namespaced) chainIDs from internal scopes.\n *\n * @param scopes - The internal scopes from which to get the Ethereum chainIDs.\n * @returns An array of Ethereum chainIDs.\n */\nconst getPermittedEthChainIdsFromScopes = (scopes: InternalScopesObject) => {\n const ethChainIds: Hex[] = [];\n\n Object.keys(scopes).forEach((scopeString) => {\n const { namespace, reference } = parseScopeString(scopeString);\n if (namespace === KnownCaipNamespace.Eip155 && reference) {\n ethChainIds.push(toHex(reference));\n }\n });\n\n return ethChainIds;\n};\n\n/**\n * Gets the Ethereum (EIP155 namespaced) chainIDs from the required and optional scopes.\n *\n * @param caip25CaveatValue - The CAIP-25 caveat value from which to get the Ethereum chainIDs.\n * @returns An array of Ethereum chainIDs.\n */\nexport const getPermittedEthChainIds = (\n caip25CaveatValue: Pick<\n Caip25CaveatValue,\n 'requiredScopes' | 'optionalScopes'\n >,\n) => {\n const { requiredScopes, optionalScopes } = caip25CaveatValue;\n\n const ethChainIds: Hex[] = [\n ...getPermittedEthChainIdsFromScopes(requiredScopes),\n ...getPermittedEthChainIdsFromScopes(optionalScopes),\n ];\n\n return getUniqueArrayItems(ethChainIds);\n};\n\n/**\n * Adds an Ethereum (EIP155 namespaced) chainID to the optional scopes if it is not already present\n * in either the pre-existing required or optional scopes.\n *\n * @param caip25CaveatValue - The CAIP-25 caveat value to add the Ethereum chainID to.\n * @param chainId - The Ethereum chainID to add.\n * @returns The updated CAIP-25 caveat value with the added Ethereum chainID.\n */\nexport const addPermittedEthChainId = (\n caip25CaveatValue: Caip25CaveatValue,\n chainId: Hex,\n): Caip25CaveatValue => {\n const scopeString = `eip155:${hexToBigInt(chainId).toString(10)}`;\n if (\n Object.keys(caip25CaveatValue.requiredScopes).includes(scopeString) ||\n Object.keys(caip25CaveatValue.optionalScopes).includes(scopeString)\n ) {\n return caip25CaveatValue;\n }\n\n return {\n ...caip25CaveatValue,\n optionalScopes: {\n ...caip25CaveatValue.optionalScopes,\n [scopeString]: {\n accounts: [],\n },\n },\n };\n};\n\n/**\n * Filters the scopes object to only include:\n * - Scopes without references (e.g. \"wallet:\")\n * - EIP155 scopes for the given chainIDs\n * - Non EIP155 scopes (e.g. \"bip122:\" or any other non ethereum namespaces)\n *\n * @param scopesObject - The scopes object to filter.\n * @param chainIds - The chainIDs to filter EIP155 scopes by.\n * @returns The filtered scopes object.\n */\nconst filterEthScopesObjectByChainId = (\n scopesObject: InternalScopesObject,\n chainIds: Hex[],\n): InternalScopesObject => {\n const updatedScopesObject: InternalScopesObject = {};\n\n Object.entries(scopesObject).forEach(([key, scopeObject]) => {\n // Cast needed because index type is returned as `string` by `Object.entries`\n const scopeString = key as keyof typeof scopesObject;\n const { namespace, reference } = parseScopeString(scopeString);\n if (!reference) {\n updatedScopesObject[scopeString] = scopeObject;\n return;\n }\n if (namespace === KnownCaipNamespace.Eip155) {\n const chainId = toHex(reference);\n if (chainIds.includes(chainId)) {\n updatedScopesObject[scopeString] = scopeObject;\n }\n } else {\n updatedScopesObject[scopeString] = scopeObject;\n }\n });\n\n return updatedScopesObject;\n};\n\n/**\n * Sets the permitted Ethereum (EIP155 namespaced) chainIDs for the required and optional scopes.\n *\n * @param caip25CaveatValue - The CAIP-25 caveat value to set the permitted Ethereum chainIDs for.\n * @param chainIds - The Ethereum chainIDs to set as permitted.\n * @returns The updated CAIP-25 caveat value with the permitted Ethereum chainIDs.\n */\nexport const setPermittedEthChainIds = (\n caip25CaveatValue: Caip25CaveatValue,\n chainIds: Hex[],\n): Caip25CaveatValue => {\n let updatedCaveatValue: Caip25CaveatValue = {\n ...caip25CaveatValue,\n requiredScopes: filterEthScopesObjectByChainId(\n caip25CaveatValue.requiredScopes,\n chainIds,\n ),\n optionalScopes: filterEthScopesObjectByChainId(\n caip25CaveatValue.optionalScopes,\n chainIds,\n ),\n };\n\n chainIds.forEach((chainId) => {\n updatedCaveatValue = addPermittedEthChainId(updatedCaveatValue, chainId);\n });\n\n return updatedCaveatValue;\n};\n\n/**\n * Filters the scopes object to only include:\n * - Scopes without references (e.g. \"wallet:\")\n * - CAIP-2 ChainId scopes for the given chainIDs\n *\n * @param scopesObject - The scopes object to filter.\n * @param chainIds - The CAIP-2 chainIDs to filter for.\n * @returns The filtered scopes object.\n */\nconst filterChainScopesObjectByChainId = (\n scopesObject: InternalScopesObject,\n chainIds: CaipChainId[],\n): InternalScopesObject => {\n const updatedScopesObject: InternalScopesObject = {};\n\n Object.entries(scopesObject).forEach(([key, scopeObject]) => {\n // Cast needed because index type is returned as `string` by `Object.entries`\n const scopeString = key as keyof typeof scopesObject;\n // If its a wallet scope or a wallet:* scope we don't filter it\n if (isWalletScope(scopeString)) {\n updatedScopesObject[scopeString] = scopeObject;\n } else if (chainIds.includes(scopeString)) {\n updatedScopesObject[scopeString] = scopeObject;\n }\n });\n\n return updatedScopesObject;\n};\n\n/**\n * Adds a chainID to the optional scopes if it is not already present\n * in either the pre-existing required or optional scopes.\n *\n * @param caip25CaveatValue - The CAIP-25 caveat value to add the chainID to.\n * @param chainId - The chainID to add.\n * @returns The updated CAIP-25 caveat value with the added chainID.\n */\nexport const addPermittedChainId = (\n caip25CaveatValue: Caip25CaveatValue,\n chainId: CaipChainId,\n): Caip25CaveatValue => {\n if (\n Object.keys(caip25CaveatValue.requiredScopes).includes(chainId) ||\n Object.keys(caip25CaveatValue.optionalScopes).includes(chainId)\n ) {\n return caip25CaveatValue;\n }\n\n return {\n ...caip25CaveatValue,\n optionalScopes: {\n ...caip25CaveatValue.optionalScopes,\n [chainId]: {\n accounts: [],\n },\n },\n };\n};\n\n/**\n * Sets the permitted CAIP-2 chainIDs for the required and optional scopes.\n *\n * @param caip25CaveatValue - The CAIP-25 caveat value to set the permitted CAIP-2 chainIDs for.\n * @param chainIds - The CAIP-2 chainIDs to set as permitted.\n * @returns The updated CAIP-25 caveat value with the permitted CAIP-2 chainIDs.\n */\nexport const setPermittedChainIds = (\n caip25CaveatValue: Caip25CaveatValue,\n chainIds: CaipChainId[],\n): Caip25CaveatValue => {\n let updatedCaveatValue: Caip25CaveatValue = {\n ...caip25CaveatValue,\n requiredScopes: filterChainScopesObjectByChainId(\n caip25CaveatValue.requiredScopes,\n chainIds,\n ),\n optionalScopes: filterChainScopesObjectByChainId(\n caip25CaveatValue.optionalScopes,\n chainIds,\n ),\n };\n\n chainIds.forEach((chainId) => {\n updatedCaveatValue = addPermittedChainId(updatedCaveatValue, chainId);\n });\n\n return updatedCaveatValue;\n};\n"]}
1
+ {"version":3,"file":"caip-permission-adapter-permittedChains.cjs","sourceRoot":"","sources":["../../src/adapters/caip-permission-adapter-permittedChains.ts"],"names":[],"mappings":"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","sourcesContent":["import { toHex } from '@metamask/controller-utils';\nimport type { Hex } from '@metamask/utils';\nimport { hexToBigInt, KnownCaipNamespace } from '@metamask/utils';\n\nimport type { Caip25CaveatValue } from '../caip25Permission';\nimport { getUniqueArrayItems } from '../scope/transform';\nimport type { InternalScopesObject } from '../scope/types';\nimport { parseScopeString } from '../scope/types';\n\n/**\n * Gets the Ethereum (EIP155 namespaced) chainIDs from internal scopes.\n *\n * @param scopes - The internal scopes from which to get the Ethereum chainIDs.\n * @returns An array of Ethereum chainIDs.\n */\nconst getPermittedEthChainIdsFromScopes = (scopes: InternalScopesObject) => {\n const ethChainIds: Hex[] = [];\n\n Object.keys(scopes).forEach((scopeString) => {\n const { namespace, reference } = parseScopeString(scopeString);\n if (namespace === KnownCaipNamespace.Eip155 && reference) {\n ethChainIds.push(toHex(reference));\n }\n });\n\n return ethChainIds;\n};\n\n/**\n * Gets the Ethereum (EIP155 namespaced) chainIDs from the required and optional scopes.\n *\n * @param caip25CaveatValue - The CAIP-25 caveat value from which to get the Ethereum chainIDs.\n * @returns An array of Ethereum chainIDs.\n */\nexport const getPermittedEthChainIds = (\n caip25CaveatValue: Pick<\n Caip25CaveatValue,\n 'requiredScopes' | 'optionalScopes'\n >,\n) => {\n const { requiredScopes, optionalScopes } = caip25CaveatValue;\n\n const ethChainIds: Hex[] = [\n ...getPermittedEthChainIdsFromScopes(requiredScopes),\n ...getPermittedEthChainIdsFromScopes(optionalScopes),\n ];\n\n return getUniqueArrayItems(ethChainIds);\n};\n\n/**\n * Adds an Ethereum (EIP155 namespaced) chainID to the optional scopes if it is not already present\n * in either the pre-existing required or optional scopes.\n *\n * @param caip25CaveatValue - The CAIP-25 caveat value to add the Ethereum chainID to.\n * @param chainId - The Ethereum chainID to add.\n * @returns The updated CAIP-25 caveat value with the added Ethereum chainID.\n */\nexport const addPermittedEthChainId = (\n caip25CaveatValue: Caip25CaveatValue,\n chainId: Hex,\n): Caip25CaveatValue => {\n const scopeString = `eip155:${hexToBigInt(chainId).toString(10)}`;\n if (\n Object.keys(caip25CaveatValue.requiredScopes).includes(scopeString) ||\n Object.keys(caip25CaveatValue.optionalScopes).includes(scopeString)\n ) {\n return caip25CaveatValue;\n }\n\n return {\n ...caip25CaveatValue,\n optionalScopes: {\n ...caip25CaveatValue.optionalScopes,\n [scopeString]: {\n accounts: [],\n },\n },\n };\n};\n\n/**\n * Filters the scopes object to only include:\n * - Scopes without references (e.g. \"wallet:\")\n * - EIP155 scopes for the given chainIDs\n * - Non EIP155 scopes (e.g. \"bip122:\" or any other non ethereum namespaces)\n *\n * @param scopesObject - The scopes object to filter.\n * @param chainIds - The chainIDs to filter EIP155 scopes by.\n * @returns The filtered scopes object.\n */\nconst filterEthScopesObjectByChainId = (\n scopesObject: InternalScopesObject,\n chainIds: Hex[],\n): InternalScopesObject => {\n const updatedScopesObject: InternalScopesObject = {};\n\n Object.entries(scopesObject).forEach(([key, scopeObject]) => {\n // Cast needed because index type is returned as `string` by `Object.entries`\n const scopeString = key as keyof typeof scopesObject;\n const { namespace, reference } = parseScopeString(scopeString);\n if (!reference) {\n updatedScopesObject[scopeString] = scopeObject;\n return;\n }\n if (namespace === KnownCaipNamespace.Eip155) {\n const chainId = toHex(reference);\n if (chainIds.includes(chainId)) {\n updatedScopesObject[scopeString] = scopeObject;\n }\n } else {\n updatedScopesObject[scopeString] = scopeObject;\n }\n });\n\n return updatedScopesObject;\n};\n\n/**\n * Sets the permitted Ethereum (EIP155 namespaced) chainIDs for the required and optional scopes.\n *\n * @param caip25CaveatValue - The CAIP-25 caveat value to set the permitted Ethereum chainIDs for.\n * @param chainIds - The Ethereum chainIDs to set as permitted.\n * @returns The updated CAIP-25 caveat value with the permitted Ethereum chainIDs.\n */\nexport const setPermittedEthChainIds = (\n caip25CaveatValue: Caip25CaveatValue,\n chainIds: Hex[],\n): Caip25CaveatValue => {\n let updatedCaveatValue: Caip25CaveatValue = {\n ...caip25CaveatValue,\n requiredScopes: filterEthScopesObjectByChainId(\n caip25CaveatValue.requiredScopes,\n chainIds,\n ),\n optionalScopes: filterEthScopesObjectByChainId(\n caip25CaveatValue.optionalScopes,\n chainIds,\n ),\n };\n\n chainIds.forEach((chainId) => {\n updatedCaveatValue = addPermittedEthChainId(updatedCaveatValue, chainId);\n });\n\n return updatedCaveatValue;\n};\n"]}
@@ -1,4 +1,4 @@
1
- import type { Hex, CaipChainId } from "@metamask/utils";
1
+ import type { Hex } from "@metamask/utils";
2
2
  import type { Caip25CaveatValue } from "../caip25Permission.cjs";
3
3
  /**
4
4
  * Gets the Ethereum (EIP155 namespaced) chainIDs from the required and optional scopes.
@@ -24,21 +24,4 @@ export declare const addPermittedEthChainId: (caip25CaveatValue: Caip25CaveatVal
24
24
  * @returns The updated CAIP-25 caveat value with the permitted Ethereum chainIDs.
25
25
  */
26
26
  export declare const setPermittedEthChainIds: (caip25CaveatValue: Caip25CaveatValue, chainIds: Hex[]) => Caip25CaveatValue;
27
- /**
28
- * Adds a chainID to the optional scopes if it is not already present
29
- * in either the pre-existing required or optional scopes.
30
- *
31
- * @param caip25CaveatValue - The CAIP-25 caveat value to add the chainID to.
32
- * @param chainId - The chainID to add.
33
- * @returns The updated CAIP-25 caveat value with the added chainID.
34
- */
35
- export declare const addPermittedChainId: (caip25CaveatValue: Caip25CaveatValue, chainId: CaipChainId) => Caip25CaveatValue;
36
- /**
37
- * Sets the permitted CAIP-2 chainIDs for the required and optional scopes.
38
- *
39
- * @param caip25CaveatValue - The CAIP-25 caveat value to set the permitted CAIP-2 chainIDs for.
40
- * @param chainIds - The CAIP-2 chainIDs to set as permitted.
41
- * @returns The updated CAIP-25 caveat value with the permitted CAIP-2 chainIDs.
42
- */
43
- export declare const setPermittedChainIds: (caip25CaveatValue: Caip25CaveatValue, chainIds: CaipChainId[]) => Caip25CaveatValue;
44
27
  //# sourceMappingURL=caip-permission-adapter-permittedChains.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"caip-permission-adapter-permittedChains.d.cts","sourceRoot":"","sources":["../../src/adapters/caip-permission-adapter-permittedChains.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,wBAAwB;AAGxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,gCAA4B;AAwB7D;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,sBACf,KACjB,iBAAiB,EACjB,gBAAgB,GAAG,gBAAgB,CACpC,oBAUF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,sBACd,iBAAiB,WAC3B,GAAG,KACX,iBAkBF,CAAC;AAuCF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,sBACf,iBAAiB,YAC1B,GAAG,EAAE,KACd,iBAkBF,CAAC;AA+BF;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,sBACX,iBAAiB,WAC3B,WAAW,KACnB,iBAiBF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,sBACZ,iBAAiB,YAC1B,WAAW,EAAE,KACtB,iBAkBF,CAAC"}
1
+ {"version":3,"file":"caip-permission-adapter-permittedChains.d.cts","sourceRoot":"","sources":["../../src/adapters/caip-permission-adapter-permittedChains.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,gCAA4B;AAwB7D;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,sBACf,KACjB,iBAAiB,EACjB,gBAAgB,GAAG,gBAAgB,CACpC,oBAUF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,sBACd,iBAAiB,WAC3B,GAAG,KACX,iBAkBF,CAAC;AAuCF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,sBACf,iBAAiB,YAC1B,GAAG,EAAE,KACd,iBAkBF,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { Hex, CaipChainId } from "@metamask/utils";
1
+ import type { Hex } from "@metamask/utils";
2
2
  import type { Caip25CaveatValue } from "../caip25Permission.mjs";
3
3
  /**
4
4
  * Gets the Ethereum (EIP155 namespaced) chainIDs from the required and optional scopes.
@@ -24,21 +24,4 @@ export declare const addPermittedEthChainId: (caip25CaveatValue: Caip25CaveatVal
24
24
  * @returns The updated CAIP-25 caveat value with the permitted Ethereum chainIDs.
25
25
  */
26
26
  export declare const setPermittedEthChainIds: (caip25CaveatValue: Caip25CaveatValue, chainIds: Hex[]) => Caip25CaveatValue;
27
- /**
28
- * Adds a chainID to the optional scopes if it is not already present
29
- * in either the pre-existing required or optional scopes.
30
- *
31
- * @param caip25CaveatValue - The CAIP-25 caveat value to add the chainID to.
32
- * @param chainId - The chainID to add.
33
- * @returns The updated CAIP-25 caveat value with the added chainID.
34
- */
35
- export declare const addPermittedChainId: (caip25CaveatValue: Caip25CaveatValue, chainId: CaipChainId) => Caip25CaveatValue;
36
- /**
37
- * Sets the permitted CAIP-2 chainIDs for the required and optional scopes.
38
- *
39
- * @param caip25CaveatValue - The CAIP-25 caveat value to set the permitted CAIP-2 chainIDs for.
40
- * @param chainIds - The CAIP-2 chainIDs to set as permitted.
41
- * @returns The updated CAIP-25 caveat value with the permitted CAIP-2 chainIDs.
42
- */
43
- export declare const setPermittedChainIds: (caip25CaveatValue: Caip25CaveatValue, chainIds: CaipChainId[]) => Caip25CaveatValue;
44
27
  //# sourceMappingURL=caip-permission-adapter-permittedChains.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"caip-permission-adapter-permittedChains.d.mts","sourceRoot":"","sources":["../../src/adapters/caip-permission-adapter-permittedChains.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,wBAAwB;AAGxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,gCAA4B;AAwB7D;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,sBACf,KACjB,iBAAiB,EACjB,gBAAgB,GAAG,gBAAgB,CACpC,oBAUF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,sBACd,iBAAiB,WAC3B,GAAG,KACX,iBAkBF,CAAC;AAuCF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,sBACf,iBAAiB,YAC1B,GAAG,EAAE,KACd,iBAkBF,CAAC;AA+BF;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,sBACX,iBAAiB,WAC3B,WAAW,KACnB,iBAiBF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,sBACZ,iBAAiB,YAC1B,WAAW,EAAE,KACtB,iBAkBF,CAAC"}
1
+ {"version":3,"file":"caip-permission-adapter-permittedChains.d.mts","sourceRoot":"","sources":["../../src/adapters/caip-permission-adapter-permittedChains.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,gCAA4B;AAwB7D;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,sBACf,KACjB,iBAAiB,EACjB,gBAAgB,GAAG,gBAAgB,CACpC,oBAUF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,sBACd,iBAAiB,WAC3B,GAAG,KACX,iBAkBF,CAAC;AAuCF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,sBACf,iBAAiB,YAC1B,GAAG,EAAE,KACd,iBAkBF,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { toHex } from "@metamask/controller-utils";
2
2
  import { hexToBigInt, KnownCaipNamespace } from "@metamask/utils";
3
3
  import { getUniqueArrayItems } from "../scope/transform.mjs";
4
- import { isWalletScope, parseScopeString } from "../scope/types.mjs";
4
+ import { parseScopeString } from "../scope/types.mjs";
5
5
  /**
6
6
  * Gets the Ethereum (EIP155 namespaced) chainIDs from internal scopes.
7
7
  *
@@ -106,69 +106,4 @@ export const setPermittedEthChainIds = (caip25CaveatValue, chainIds) => {
106
106
  });
107
107
  return updatedCaveatValue;
108
108
  };
109
- /**
110
- * Filters the scopes object to only include:
111
- * - Scopes without references (e.g. "wallet:")
112
- * - CAIP-2 ChainId scopes for the given chainIDs
113
- *
114
- * @param scopesObject - The scopes object to filter.
115
- * @param chainIds - The CAIP-2 chainIDs to filter for.
116
- * @returns The filtered scopes object.
117
- */
118
- const filterChainScopesObjectByChainId = (scopesObject, chainIds) => {
119
- const updatedScopesObject = {};
120
- Object.entries(scopesObject).forEach(([key, scopeObject]) => {
121
- // Cast needed because index type is returned as `string` by `Object.entries`
122
- const scopeString = key;
123
- // If its a wallet scope or a wallet:* scope we don't filter it
124
- if (isWalletScope(scopeString)) {
125
- updatedScopesObject[scopeString] = scopeObject;
126
- }
127
- else if (chainIds.includes(scopeString)) {
128
- updatedScopesObject[scopeString] = scopeObject;
129
- }
130
- });
131
- return updatedScopesObject;
132
- };
133
- /**
134
- * Adds a chainID to the optional scopes if it is not already present
135
- * in either the pre-existing required or optional scopes.
136
- *
137
- * @param caip25CaveatValue - The CAIP-25 caveat value to add the chainID to.
138
- * @param chainId - The chainID to add.
139
- * @returns The updated CAIP-25 caveat value with the added chainID.
140
- */
141
- export const addPermittedChainId = (caip25CaveatValue, chainId) => {
142
- if (Object.keys(caip25CaveatValue.requiredScopes).includes(chainId) ||
143
- Object.keys(caip25CaveatValue.optionalScopes).includes(chainId)) {
144
- return caip25CaveatValue;
145
- }
146
- return {
147
- ...caip25CaveatValue,
148
- optionalScopes: {
149
- ...caip25CaveatValue.optionalScopes,
150
- [chainId]: {
151
- accounts: [],
152
- },
153
- },
154
- };
155
- };
156
- /**
157
- * Sets the permitted CAIP-2 chainIDs for the required and optional scopes.
158
- *
159
- * @param caip25CaveatValue - The CAIP-25 caveat value to set the permitted CAIP-2 chainIDs for.
160
- * @param chainIds - The CAIP-2 chainIDs to set as permitted.
161
- * @returns The updated CAIP-25 caveat value with the permitted CAIP-2 chainIDs.
162
- */
163
- export const setPermittedChainIds = (caip25CaveatValue, chainIds) => {
164
- let updatedCaveatValue = {
165
- ...caip25CaveatValue,
166
- requiredScopes: filterChainScopesObjectByChainId(caip25CaveatValue.requiredScopes, chainIds),
167
- optionalScopes: filterChainScopesObjectByChainId(caip25CaveatValue.optionalScopes, chainIds),
168
- };
169
- chainIds.forEach((chainId) => {
170
- updatedCaveatValue = addPermittedChainId(updatedCaveatValue, chainId);
171
- });
172
- return updatedCaveatValue;
173
- };
174
109
  //# sourceMappingURL=caip-permission-adapter-permittedChains.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"caip-permission-adapter-permittedChains.mjs","sourceRoot":"","sources":["../../src/adapters/caip-permission-adapter-permittedChains.ts"],"names":[],"mappings":"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","sourcesContent":["import { toHex } from '@metamask/controller-utils';\nimport type { Hex, CaipChainId } from '@metamask/utils';\nimport { hexToBigInt, KnownCaipNamespace } from '@metamask/utils';\n\nimport type { Caip25CaveatValue } from '../caip25Permission';\nimport { getUniqueArrayItems } from '../scope/transform';\nimport type { InternalScopesObject } from '../scope/types';\nimport { isWalletScope, parseScopeString } from '../scope/types';\n\n/**\n * Gets the Ethereum (EIP155 namespaced) chainIDs from internal scopes.\n *\n * @param scopes - The internal scopes from which to get the Ethereum chainIDs.\n * @returns An array of Ethereum chainIDs.\n */\nconst getPermittedEthChainIdsFromScopes = (scopes: InternalScopesObject) => {\n const ethChainIds: Hex[] = [];\n\n Object.keys(scopes).forEach((scopeString) => {\n const { namespace, reference } = parseScopeString(scopeString);\n if (namespace === KnownCaipNamespace.Eip155 && reference) {\n ethChainIds.push(toHex(reference));\n }\n });\n\n return ethChainIds;\n};\n\n/**\n * Gets the Ethereum (EIP155 namespaced) chainIDs from the required and optional scopes.\n *\n * @param caip25CaveatValue - The CAIP-25 caveat value from which to get the Ethereum chainIDs.\n * @returns An array of Ethereum chainIDs.\n */\nexport const getPermittedEthChainIds = (\n caip25CaveatValue: Pick<\n Caip25CaveatValue,\n 'requiredScopes' | 'optionalScopes'\n >,\n) => {\n const { requiredScopes, optionalScopes } = caip25CaveatValue;\n\n const ethChainIds: Hex[] = [\n ...getPermittedEthChainIdsFromScopes(requiredScopes),\n ...getPermittedEthChainIdsFromScopes(optionalScopes),\n ];\n\n return getUniqueArrayItems(ethChainIds);\n};\n\n/**\n * Adds an Ethereum (EIP155 namespaced) chainID to the optional scopes if it is not already present\n * in either the pre-existing required or optional scopes.\n *\n * @param caip25CaveatValue - The CAIP-25 caveat value to add the Ethereum chainID to.\n * @param chainId - The Ethereum chainID to add.\n * @returns The updated CAIP-25 caveat value with the added Ethereum chainID.\n */\nexport const addPermittedEthChainId = (\n caip25CaveatValue: Caip25CaveatValue,\n chainId: Hex,\n): Caip25CaveatValue => {\n const scopeString = `eip155:${hexToBigInt(chainId).toString(10)}`;\n if (\n Object.keys(caip25CaveatValue.requiredScopes).includes(scopeString) ||\n Object.keys(caip25CaveatValue.optionalScopes).includes(scopeString)\n ) {\n return caip25CaveatValue;\n }\n\n return {\n ...caip25CaveatValue,\n optionalScopes: {\n ...caip25CaveatValue.optionalScopes,\n [scopeString]: {\n accounts: [],\n },\n },\n };\n};\n\n/**\n * Filters the scopes object to only include:\n * - Scopes without references (e.g. \"wallet:\")\n * - EIP155 scopes for the given chainIDs\n * - Non EIP155 scopes (e.g. \"bip122:\" or any other non ethereum namespaces)\n *\n * @param scopesObject - The scopes object to filter.\n * @param chainIds - The chainIDs to filter EIP155 scopes by.\n * @returns The filtered scopes object.\n */\nconst filterEthScopesObjectByChainId = (\n scopesObject: InternalScopesObject,\n chainIds: Hex[],\n): InternalScopesObject => {\n const updatedScopesObject: InternalScopesObject = {};\n\n Object.entries(scopesObject).forEach(([key, scopeObject]) => {\n // Cast needed because index type is returned as `string` by `Object.entries`\n const scopeString = key as keyof typeof scopesObject;\n const { namespace, reference } = parseScopeString(scopeString);\n if (!reference) {\n updatedScopesObject[scopeString] = scopeObject;\n return;\n }\n if (namespace === KnownCaipNamespace.Eip155) {\n const chainId = toHex(reference);\n if (chainIds.includes(chainId)) {\n updatedScopesObject[scopeString] = scopeObject;\n }\n } else {\n updatedScopesObject[scopeString] = scopeObject;\n }\n });\n\n return updatedScopesObject;\n};\n\n/**\n * Sets the permitted Ethereum (EIP155 namespaced) chainIDs for the required and optional scopes.\n *\n * @param caip25CaveatValue - The CAIP-25 caveat value to set the permitted Ethereum chainIDs for.\n * @param chainIds - The Ethereum chainIDs to set as permitted.\n * @returns The updated CAIP-25 caveat value with the permitted Ethereum chainIDs.\n */\nexport const setPermittedEthChainIds = (\n caip25CaveatValue: Caip25CaveatValue,\n chainIds: Hex[],\n): Caip25CaveatValue => {\n let updatedCaveatValue: Caip25CaveatValue = {\n ...caip25CaveatValue,\n requiredScopes: filterEthScopesObjectByChainId(\n caip25CaveatValue.requiredScopes,\n chainIds,\n ),\n optionalScopes: filterEthScopesObjectByChainId(\n caip25CaveatValue.optionalScopes,\n chainIds,\n ),\n };\n\n chainIds.forEach((chainId) => {\n updatedCaveatValue = addPermittedEthChainId(updatedCaveatValue, chainId);\n });\n\n return updatedCaveatValue;\n};\n\n/**\n * Filters the scopes object to only include:\n * - Scopes without references (e.g. \"wallet:\")\n * - CAIP-2 ChainId scopes for the given chainIDs\n *\n * @param scopesObject - The scopes object to filter.\n * @param chainIds - The CAIP-2 chainIDs to filter for.\n * @returns The filtered scopes object.\n */\nconst filterChainScopesObjectByChainId = (\n scopesObject: InternalScopesObject,\n chainIds: CaipChainId[],\n): InternalScopesObject => {\n const updatedScopesObject: InternalScopesObject = {};\n\n Object.entries(scopesObject).forEach(([key, scopeObject]) => {\n // Cast needed because index type is returned as `string` by `Object.entries`\n const scopeString = key as keyof typeof scopesObject;\n // If its a wallet scope or a wallet:* scope we don't filter it\n if (isWalletScope(scopeString)) {\n updatedScopesObject[scopeString] = scopeObject;\n } else if (chainIds.includes(scopeString)) {\n updatedScopesObject[scopeString] = scopeObject;\n }\n });\n\n return updatedScopesObject;\n};\n\n/**\n * Adds a chainID to the optional scopes if it is not already present\n * in either the pre-existing required or optional scopes.\n *\n * @param caip25CaveatValue - The CAIP-25 caveat value to add the chainID to.\n * @param chainId - The chainID to add.\n * @returns The updated CAIP-25 caveat value with the added chainID.\n */\nexport const addPermittedChainId = (\n caip25CaveatValue: Caip25CaveatValue,\n chainId: CaipChainId,\n): Caip25CaveatValue => {\n if (\n Object.keys(caip25CaveatValue.requiredScopes).includes(chainId) ||\n Object.keys(caip25CaveatValue.optionalScopes).includes(chainId)\n ) {\n return caip25CaveatValue;\n }\n\n return {\n ...caip25CaveatValue,\n optionalScopes: {\n ...caip25CaveatValue.optionalScopes,\n [chainId]: {\n accounts: [],\n },\n },\n };\n};\n\n/**\n * Sets the permitted CAIP-2 chainIDs for the required and optional scopes.\n *\n * @param caip25CaveatValue - The CAIP-25 caveat value to set the permitted CAIP-2 chainIDs for.\n * @param chainIds - The CAIP-2 chainIDs to set as permitted.\n * @returns The updated CAIP-25 caveat value with the permitted CAIP-2 chainIDs.\n */\nexport const setPermittedChainIds = (\n caip25CaveatValue: Caip25CaveatValue,\n chainIds: CaipChainId[],\n): Caip25CaveatValue => {\n let updatedCaveatValue: Caip25CaveatValue = {\n ...caip25CaveatValue,\n requiredScopes: filterChainScopesObjectByChainId(\n caip25CaveatValue.requiredScopes,\n chainIds,\n ),\n optionalScopes: filterChainScopesObjectByChainId(\n caip25CaveatValue.optionalScopes,\n chainIds,\n ),\n };\n\n chainIds.forEach((chainId) => {\n updatedCaveatValue = addPermittedChainId(updatedCaveatValue, chainId);\n });\n\n return updatedCaveatValue;\n};\n"]}
1
+ {"version":3,"file":"caip-permission-adapter-permittedChains.mjs","sourceRoot":"","sources":["../../src/adapters/caip-permission-adapter-permittedChains.ts"],"names":[],"mappings":"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","sourcesContent":["import { toHex } from '@metamask/controller-utils';\nimport type { Hex } from '@metamask/utils';\nimport { hexToBigInt, KnownCaipNamespace } from '@metamask/utils';\n\nimport type { Caip25CaveatValue } from '../caip25Permission';\nimport { getUniqueArrayItems } from '../scope/transform';\nimport type { InternalScopesObject } from '../scope/types';\nimport { parseScopeString } from '../scope/types';\n\n/**\n * Gets the Ethereum (EIP155 namespaced) chainIDs from internal scopes.\n *\n * @param scopes - The internal scopes from which to get the Ethereum chainIDs.\n * @returns An array of Ethereum chainIDs.\n */\nconst getPermittedEthChainIdsFromScopes = (scopes: InternalScopesObject) => {\n const ethChainIds: Hex[] = [];\n\n Object.keys(scopes).forEach((scopeString) => {\n const { namespace, reference } = parseScopeString(scopeString);\n if (namespace === KnownCaipNamespace.Eip155 && reference) {\n ethChainIds.push(toHex(reference));\n }\n });\n\n return ethChainIds;\n};\n\n/**\n * Gets the Ethereum (EIP155 namespaced) chainIDs from the required and optional scopes.\n *\n * @param caip25CaveatValue - The CAIP-25 caveat value from which to get the Ethereum chainIDs.\n * @returns An array of Ethereum chainIDs.\n */\nexport const getPermittedEthChainIds = (\n caip25CaveatValue: Pick<\n Caip25CaveatValue,\n 'requiredScopes' | 'optionalScopes'\n >,\n) => {\n const { requiredScopes, optionalScopes } = caip25CaveatValue;\n\n const ethChainIds: Hex[] = [\n ...getPermittedEthChainIdsFromScopes(requiredScopes),\n ...getPermittedEthChainIdsFromScopes(optionalScopes),\n ];\n\n return getUniqueArrayItems(ethChainIds);\n};\n\n/**\n * Adds an Ethereum (EIP155 namespaced) chainID to the optional scopes if it is not already present\n * in either the pre-existing required or optional scopes.\n *\n * @param caip25CaveatValue - The CAIP-25 caveat value to add the Ethereum chainID to.\n * @param chainId - The Ethereum chainID to add.\n * @returns The updated CAIP-25 caveat value with the added Ethereum chainID.\n */\nexport const addPermittedEthChainId = (\n caip25CaveatValue: Caip25CaveatValue,\n chainId: Hex,\n): Caip25CaveatValue => {\n const scopeString = `eip155:${hexToBigInt(chainId).toString(10)}`;\n if (\n Object.keys(caip25CaveatValue.requiredScopes).includes(scopeString) ||\n Object.keys(caip25CaveatValue.optionalScopes).includes(scopeString)\n ) {\n return caip25CaveatValue;\n }\n\n return {\n ...caip25CaveatValue,\n optionalScopes: {\n ...caip25CaveatValue.optionalScopes,\n [scopeString]: {\n accounts: [],\n },\n },\n };\n};\n\n/**\n * Filters the scopes object to only include:\n * - Scopes without references (e.g. \"wallet:\")\n * - EIP155 scopes for the given chainIDs\n * - Non EIP155 scopes (e.g. \"bip122:\" or any other non ethereum namespaces)\n *\n * @param scopesObject - The scopes object to filter.\n * @param chainIds - The chainIDs to filter EIP155 scopes by.\n * @returns The filtered scopes object.\n */\nconst filterEthScopesObjectByChainId = (\n scopesObject: InternalScopesObject,\n chainIds: Hex[],\n): InternalScopesObject => {\n const updatedScopesObject: InternalScopesObject = {};\n\n Object.entries(scopesObject).forEach(([key, scopeObject]) => {\n // Cast needed because index type is returned as `string` by `Object.entries`\n const scopeString = key as keyof typeof scopesObject;\n const { namespace, reference } = parseScopeString(scopeString);\n if (!reference) {\n updatedScopesObject[scopeString] = scopeObject;\n return;\n }\n if (namespace === KnownCaipNamespace.Eip155) {\n const chainId = toHex(reference);\n if (chainIds.includes(chainId)) {\n updatedScopesObject[scopeString] = scopeObject;\n }\n } else {\n updatedScopesObject[scopeString] = scopeObject;\n }\n });\n\n return updatedScopesObject;\n};\n\n/**\n * Sets the permitted Ethereum (EIP155 namespaced) chainIDs for the required and optional scopes.\n *\n * @param caip25CaveatValue - The CAIP-25 caveat value to set the permitted Ethereum chainIDs for.\n * @param chainIds - The Ethereum chainIDs to set as permitted.\n * @returns The updated CAIP-25 caveat value with the permitted Ethereum chainIDs.\n */\nexport const setPermittedEthChainIds = (\n caip25CaveatValue: Caip25CaveatValue,\n chainIds: Hex[],\n): Caip25CaveatValue => {\n let updatedCaveatValue: Caip25CaveatValue = {\n ...caip25CaveatValue,\n requiredScopes: filterEthScopesObjectByChainId(\n caip25CaveatValue.requiredScopes,\n chainIds,\n ),\n optionalScopes: filterEthScopesObjectByChainId(\n caip25CaveatValue.optionalScopes,\n chainIds,\n ),\n };\n\n chainIds.forEach((chainId) => {\n updatedCaveatValue = addPermittedEthChainId(updatedCaveatValue, chainId);\n });\n\n return updatedCaveatValue;\n};\n"]}