@metamask-previews/chain-agnostic-permission 0.4.0-preview-4f38c5b → 0.4.0-preview-514219da

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 (66) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/adapters/caip-permission-adapter-accounts.cjs +143 -26
  3. package/dist/adapters/caip-permission-adapter-accounts.cjs.map +1 -1
  4. package/dist/adapters/caip-permission-adapter-accounts.d.cts +46 -1
  5. package/dist/adapters/caip-permission-adapter-accounts.d.cts.map +1 -1
  6. package/dist/adapters/caip-permission-adapter-accounts.d.mts +46 -1
  7. package/dist/adapters/caip-permission-adapter-accounts.d.mts.map +1 -1
  8. package/dist/adapters/caip-permission-adapter-accounts.mjs +137 -24
  9. package/dist/adapters/caip-permission-adapter-accounts.mjs.map +1 -1
  10. package/dist/adapters/caip-permission-adapter-permittedChains.cjs +125 -31
  11. package/dist/adapters/caip-permission-adapter-permittedChains.cjs.map +1 -1
  12. package/dist/adapters/caip-permission-adapter-permittedChains.d.cts +45 -4
  13. package/dist/adapters/caip-permission-adapter-permittedChains.d.cts.map +1 -1
  14. package/dist/adapters/caip-permission-adapter-permittedChains.d.mts +45 -4
  15. package/dist/adapters/caip-permission-adapter-permittedChains.d.mts.map +1 -1
  16. package/dist/adapters/caip-permission-adapter-permittedChains.mjs +118 -28
  17. package/dist/adapters/caip-permission-adapter-permittedChains.mjs.map +1 -1
  18. package/dist/caip25Permission.cjs +14 -3
  19. package/dist/caip25Permission.cjs.map +1 -1
  20. package/dist/caip25Permission.d.cts +16 -0
  21. package/dist/caip25Permission.d.cts.map +1 -1
  22. package/dist/caip25Permission.d.mts +16 -0
  23. package/dist/caip25Permission.d.mts.map +1 -1
  24. package/dist/caip25Permission.mjs +14 -4
  25. package/dist/caip25Permission.mjs.map +1 -1
  26. package/dist/index.cjs +15 -8
  27. package/dist/index.cjs.map +1 -1
  28. package/dist/index.d.cts +6 -7
  29. package/dist/index.d.cts.map +1 -1
  30. package/dist/index.d.mts +6 -7
  31. package/dist/index.d.mts.map +1 -1
  32. package/dist/index.mjs +6 -7
  33. package/dist/index.mjs.map +1 -1
  34. package/dist/scope/authorization.cjs +16 -1
  35. package/dist/scope/authorization.cjs.map +1 -1
  36. package/dist/scope/authorization.d.cts +9 -1
  37. package/dist/scope/authorization.d.cts.map +1 -1
  38. package/dist/scope/authorization.d.mts +9 -1
  39. package/dist/scope/authorization.d.mts.map +1 -1
  40. package/dist/scope/authorization.mjs +14 -0
  41. package/dist/scope/authorization.mjs.map +1 -1
  42. package/dist/scope/constants.cjs +11 -1
  43. package/dist/scope/constants.cjs.map +1 -1
  44. package/dist/scope/constants.d.cts +7 -0
  45. package/dist/scope/constants.d.cts.map +1 -1
  46. package/dist/scope/constants.d.mts +7 -0
  47. package/dist/scope/constants.d.mts.map +1 -1
  48. package/dist/scope/constants.mjs +9 -0
  49. package/dist/scope/constants.mjs.map +1 -1
  50. package/dist/scope/filter.cjs +1 -29
  51. package/dist/scope/filter.cjs.map +1 -1
  52. package/dist/scope/filter.d.cts +2 -18
  53. package/dist/scope/filter.d.cts.map +1 -1
  54. package/dist/scope/filter.d.mts +2 -18
  55. package/dist/scope/filter.d.mts.map +1 -1
  56. package/dist/scope/filter.mjs +0 -26
  57. package/dist/scope/filter.mjs.map +1 -1
  58. package/dist/scope/validation.cjs +1 -12
  59. package/dist/scope/validation.cjs.map +1 -1
  60. package/dist/scope/validation.d.cts +0 -8
  61. package/dist/scope/validation.d.cts.map +1 -1
  62. package/dist/scope/validation.d.mts +0 -8
  63. package/dist/scope/validation.d.mts.map +1 -1
  64. package/dist/scope/validation.mjs +0 -10
  65. package/dist/scope/validation.mjs.map +1 -1
  66. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"caip-permission-adapter-accounts.mjs","sourceRoot":"","sources":["../../src/adapters/caip-permission-adapter-accounts.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EAGvB,kBAAkB,EAClB,kBAAkB,EACnB,wBAAwB;AAGzB,OAAO,EAAE,sBAAsB,EAAE,+BAA2B;AAC5D,OAAO,EAAE,mBAAmB,EAAE,+BAA2B;AAEzD,OAAO,EAAE,gBAAgB,EAAE,2BAAuB;AAElD;;;;;GAKG;AACH,MAAM,mBAAmB,GAAG,CAAC,WAAgC,EAAE,EAAE;IAC/D,MAAM,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAEpD,OAAO,CACL,SAAS,KAAK,kBAAkB,CAAC,MAAM;QACvC,sDAAsD;QACtD,wEAAwE;QACxE,WAAW,KAAK,sBAAsB,CAAC,MAAM,CAC9C,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,wBAAwB,GAAG,CAAC,MAA4B,EAAE,EAAE;IAChE,MAAM,WAAW,GAAU,EAAE,CAAC;IAE9B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE;QACnD,QAAQ,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC5B,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAEzD,IAAI,mBAAmB,CAAC,OAAO,CAAC,EAAE;gBAChC,2DAA2D;gBAC3D,kCAAkC;gBAClC,uBAAuB,CAAC,OAAO,CAAC,CAAC;gBACjC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAC3B;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,iBAGC,EACM,EAAE;IACT,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,iBAAiB,CAAC;IAE7D,MAAM,WAAW,GAAU;QACzB,GAAG,wBAAwB,CAAC,cAAc,CAAC;QAC3C,GAAG,wBAAwB,CAAC,cAAc,CAAC;KAC5C,CAAC;IAEF,OAAO,mBAAmB,CAAC,WAAW,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,6BAA6B,GAAG,CACpC,YAAkC,EAClC,QAAe,EACf,EAAE;IACF,MAAM,mBAAmB,GAAyB,EAAE,CAAC;IACrD,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,EAAE;QAC1D,6EAA6E;QAC7E,MAAM,WAAW,GAAG,GAAgC,CAAC;QACrD,MAAM,iBAAiB,GAAG,WAAW,KAAK,kBAAkB,CAAC,MAAM,CAAC;QACpE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAC/D,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC3D,mBAAmB,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC;YAC/C,OAAO;SACR;QAED,IAAI,YAAY,GAAoB,EAAE,CAAC;QACvC,IAAI,SAAS,IAAI,SAAS,EAAE;YAC1B,YAAY,GAAG,QAAQ,CAAC,GAAG,CACzB,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,SAAS,IAAI,SAAS,IAAI,OAAO,EAAE,CACpD,CAAC;SACH;QAED,mBAAmB,CAAC,WAAW,CAAC,GAAG;YACjC,GAAG,WAAW;YACd,QAAQ,EAAE,YAAY;SACvB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,mBAAmB,CAAC;AAC7B,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,iBAAoC,EACpC,QAAe,EACI,EAAE;IACrB,OAAO;QACL,GAAG,iBAAiB;QACpB,cAAc,EAAE,6BAA6B,CAC3C,iBAAiB,CAAC,cAAc,EAChC,QAAQ,CACT;QACD,cAAc,EAAE,6BAA6B,CAC3C,iBAAiB,CAAC,cAAc,EAChC,QAAQ,CACT;KACF,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,mCAAmC,GAAG,CAC1C,YAAkC,EAClC,QAAyB,EACzB,EAAE;IACF,MAAM,mBAAmB,GAAyB,EAAE,CAAC;IACrD,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,EAAE;QAC1D,6EAA6E;QAC7E,MAAM,WAAW,GAAG,GAAgC,CAAC;QACrD,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAE/D,IAAI,YAAY,GAAoB,EAAE,CAAC;QACvC,IAAI,SAAS,IAAI,SAAS,EAAE;YAC1B,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;gBAC/D,MAAM,EACJ,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,EACtC,OAAO,EAAE,cAAc,GACxB,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBAChC,4FAA4F;gBAC5F,wGAAwG;gBACxG,IAAI,SAAS,KAAK,gBAAgB,EAAE;oBAClC,GAAG,CAAC,IAAI,CAAC,GAAG,SAAS,IAAI,SAAS,IAAI,cAAc,EAAE,CAAC,CAAC;iBACzD;gBACD,OAAO,GAAG,CAAC;YACb,CAAC,EAAE,EAAE,CAAC,CAAC;SACR;QAED,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;QAE7D,mBAAmB,CAAC,WAAW,CAAC,GAAG;YACjC,GAAG,WAAW;YACd,QAAQ,EAAE,kBAAkB;SAC7B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,mBAAmB,CAAC;AAC7B,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,iBAAoC,EACpC,QAAyB,EACN,EAAE;IACrB,OAAO;QACL,GAAG,iBAAiB;QACpB,cAAc,EAAE,mCAAmC,CACjD,iBAAiB,CAAC,cAAc,EAChC,QAAQ,CACT;QACD,cAAc,EAAE,mCAAmC,CACjD,iBAAiB,CAAC,cAAc,EAChC,QAAQ,CACT;KACF,CAAC;AACJ,CAAC,CAAC","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\n/**\n * Sets the permitted accounts to scopes with matching namespaces in the given scopes object.\n *\n * @param scopesObject - The scopes object to set the permitted accounts for.\n * @param accounts - The permitted accounts to add to the appropriate scopes.\n * @returns The updated scopes object with the permitted accounts set.\n */\nconst setPermittedAccountsForScopesObject = (\n scopesObject: InternalScopesObject,\n accounts: CaipAccountId[],\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 { namespace, reference } = parseScopeString(scopeString);\n\n let caipAccounts: CaipAccountId[] = [];\n if (namespace && reference) {\n caipAccounts = accounts.reduce<CaipAccountId[]>((acc, account) => {\n const {\n chain: { namespace: accountNamespace },\n address: accountAddress,\n } = parseCaipAccountId(account);\n // If the account namespace is the same as the scope namespace, add the account to the scope\n // This will, for example, distribute all EIP155 accounts, regardless of reference, to all EIP155 scopes\n if (namespace === accountNamespace) {\n acc.push(`${namespace}:${reference}:${accountAddress}`);\n }\n return acc;\n }, []);\n }\n\n const uniqueCaipAccounts = getUniqueArrayItems(caipAccounts);\n\n updatedScopesObject[scopeString] = {\n ...scopeObject,\n accounts: uniqueCaipAccounts,\n };\n });\n\n return updatedScopesObject;\n};\n\n/**\n * Sets the permitted accounts to scopes with matching namespaces in the given CAIP-25 caveat value.\n *\n * @param caip25CaveatValue - The CAIP-25 caveat value to set the permitted accounts for.\n * @param accounts - The permitted accounts to add to the appropriate scopes.\n * @returns The updated CAIP-25 caveat value with the permitted accounts set.\n */\nexport const setPermittedAccounts = (\n caip25CaveatValue: Caip25CaveatValue,\n accounts: CaipAccountId[],\n): Caip25CaveatValue => {\n return {\n ...caip25CaveatValue,\n requiredScopes: setPermittedAccountsForScopesObject(\n caip25CaveatValue.requiredScopes,\n accounts,\n ),\n optionalScopes: setPermittedAccountsForScopesObject(\n caip25CaveatValue.optionalScopes,\n accounts,\n ),\n };\n};\n"]}
1
+ {"version":3,"file":"caip-permission-adapter-accounts.mjs","sourceRoot":"","sources":["../../src/adapters/caip-permission-adapter-accounts.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,EAMvB,kBAAkB,EAClB,kBAAkB,EACnB,wBAAwB;AAGzB,OAAO,EAAE,sBAAsB,EAAE,+BAA2B;AAC5D,OAAO,EAAE,mBAAmB,EAAE,+BAA2B;AAEzD,OAAO,EAAE,gBAAgB,EAAE,2BAAuB;AAElD;;;;;;GAMG;AAEH;;;;;;GAMG;AACH,MAAM,mBAAmB,GAAG,CAAC,WAAgC,EAAE,EAAE;IAC/D,MAAM,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAEpD,OAAO,CACL,SAAS,KAAK,kBAAkB,CAAC,MAAM;QACvC,sDAAsD;QACtD,wEAAwE;QACxE,WAAW,KAAK,sBAAsB,CAAC,MAAM,CAC9C,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,wBAAwB,GAAG,CAAC,MAA4B,EAAE,EAAE;IAChE,MAAM,WAAW,GAAU,EAAE,CAAC;IAE9B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE;QACnD,QAAQ,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC5B,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAEzD,IAAI,mBAAmB,CAAC,OAAO,CAAC,EAAE;gBAChC,2DAA2D;gBAC3D,kCAAkC;gBAClC,uBAAuB,CAAC,OAAO,CAAC,CAAC;gBACjC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAC3B;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,iBAGC,EACM,EAAE;IACT,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,iBAAiB,CAAC;IAE7D,MAAM,WAAW,GAAU;QACzB,GAAG,wBAAwB,CAAC,cAAc,CAAC;QAC3C,GAAG,wBAAwB,CAAC,cAAc,CAAC;KAC5C,CAAC;IAEF,OAAO,mBAAmB,CAAC,WAAW,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,6BAA6B,GAAG,CACpC,YAAkC,EAClC,QAAe,EACf,EAAE;IACF,MAAM,mBAAmB,GAAyB,EAAE,CAAC;IACrD,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,EAAE;QAC1D,6EAA6E;QAC7E,MAAM,WAAW,GAAG,GAAgC,CAAC;QACrD,MAAM,iBAAiB,GAAG,WAAW,KAAK,kBAAkB,CAAC,MAAM,CAAC;QACpE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAC/D,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC3D,mBAAmB,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC;YAC/C,OAAO;SACR;QAED,IAAI,YAAY,GAAoB,EAAE,CAAC;QACvC,IAAI,SAAS,IAAI,SAAS,EAAE;YAC1B,YAAY,GAAG,QAAQ,CAAC,GAAG,CACzB,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,SAAS,IAAI,SAAS,IAAI,OAAO,EAAE,CACpD,CAAC;SACH;QAED,mBAAmB,CAAC,WAAW,CAAC,GAAG;YACjC,GAAG,WAAW;YACd,QAAQ,EAAE,YAAY;SACvB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,mBAAmB,CAAC;AAC7B,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,iBAAoC,EACpC,QAAe,EACI,EAAE;IACrB,OAAO;QACL,GAAG,iBAAiB;QACpB,cAAc,EAAE,6BAA6B,CAC3C,iBAAiB,CAAC,cAAc,EAChC,QAAQ,CACT;QACD,cAAc,EAAE,6BAA6B,CAC3C,iBAAiB,CAAC,cAAc,EAChC,QAAQ,CACT;KACF,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;GAMG;AAEH;;;;GAIG;AAEH;;;;;;;GAOG;AACH,MAAM,UAAU,kCAAkC,CAChD,aAAqC;IAErC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAiB,CAAC;IAE7C,KAAK,MAAM,WAAW,IAAI,aAAa,EAAE;QACvC,KAAK,MAAM,EAAE,QAAQ,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;YACrD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;gBAC9B,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;aAC1B;SACF;KACF;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sCAAsC,CACpD,iBAAoC;IAEpC,OAAO,kCAAkC,CAAC;QACxC,iBAAiB,CAAC,cAAc;QAChC,iBAAiB,CAAC,cAAc;KACjC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AAEH;;;;;;;;GAQG;AACH,MAAM,qCAAqC,GAAG,CAC5C,YAAkC,EAClC,QAAyB,EACzB,EAAE;IACF,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAuB,CAAC;IAE3D,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;QAC9B,MAAM,EACJ,KAAK,EAAE,EAAE,SAAS,EAAE,EACpB,OAAO,GACR,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAEhC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YACvC,mBAAmB,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;SAC/C;QAED,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;KAClD;IAED,MAAM,mBAAmB,GAAyB,EAAE,CAAC;IAErD,KAAK,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;QACrE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC,WAAqB,CAAC,CAAC;QAEzE,IAAI,YAAY,GAAoB,EAAE,CAAC;QAEvC,IAAI,SAAS,IAAI,SAAS,IAAI,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YAChE,MAAM,UAAU,GAAG,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACtD,IAAI,UAAU,EAAE;gBACd,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CACvC,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,SAAS,IAAI,SAAS,IAAI,OAAO,EAAmB,CACrE,CAAC;aACH;SACF;QAED,mBAAmB,CAAC,WAAwC,CAAC,GAAG;YAC9D,GAAG,WAAW;YACd,QAAQ,EAAE,mBAAmB,CAAC,YAAY,CAAC;SAC5C,CAAC;KACH;IAED,OAAO,mBAAmB,CAAC;AAC7B,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,0CAA0C,GAAG,CACxD,iBAAoC,EACpC,QAAyB,EACN,EAAE;IACrB,OAAO;QACL,GAAG,iBAAiB;QACpB,cAAc,EAAE,qCAAqC,CACnD,iBAAiB,CAAC,cAAc,EAChC,QAAQ,CACT;QACD,cAAc,EAAE,qCAAqC,CACnD,iBAAiB,CAAC,cAAc,EAChC,QAAQ,CACT;KACF,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,SAAS,8CAA8C,CACrD,OAA2B,EAC3B,mBAGG,EACH,iBAAkC;IAElC,IAAI,CAAC,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;QACxE,OAAO,KAAK,CAAC;KACd;IAED,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;QACxC,MAAM,sBAAsB,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAE3D,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE;YAC3D,IACE,SAAS,KAAK,sBAAsB,CAAC,KAAK,CAAC,SAAS;gBACpD,OAAO,KAAK,sBAAsB,CAAC,OAAO,EAC1C;gBACA,OAAO,KAAK,CAAC;aACd;YAED,OAAO,CACL,SAAS,KAAK,GAAG;gBACjB,SAAS,KAAK,sBAAsB,CAAC,KAAK,CAAC,SAAS,CACrD,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sCAAsC,CACpD,eAAgC,EAChC,iBAAkC;IAElC,MAAM,0BAA0B,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACtE,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,OAAO,8CAA8C,CACnD,eAAe,CAAC,OAAO,EACvB,0BAA0B,EAC1B,iBAAiB,CAClB,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oCAAoC,CAClD,SAAwB,EACxB,iBAAkC;IAElC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAEzD,OAAO,8CAA8C,CACnD,OAAO,EACP,CAAC,KAAK,CAAC,EACP,iBAAiB,CAClB,CAAC;AACJ,CAAC","sourcesContent":["import type { InternalAccount } from '@metamask/keyring-internal-api';\nimport {\n assertIsStrictHexString,\n type CaipAccountAddress,\n type CaipAccountId,\n type CaipNamespace,\n type CaipReference,\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 *\n *\n * EVM SPECIFIC GETTERS AND SETTERS\n *\n *\n */\n\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\n/*\n *\n *\n * GENERALIZED GETTERS AND SETTERS\n *\n *\n */\n\n/**\n *\n * Getters\n *\n */\n\n/**\n * Gets all accounts from an array of scopes objects\n * This extracts all account IDs from both required and optional scopes\n * and returns a unique set.\n *\n * @param scopesObjects - The scopes objects to extract accounts from\n * @returns Array of unique account IDs\n */\nexport function getCaipAccountIdsFromScopesObjects(\n scopesObjects: InternalScopesObject[],\n): CaipAccountId[] {\n const allAccounts = new Set<CaipAccountId>();\n\n for (const scopeObject of scopesObjects) {\n for (const { accounts } of Object.values(scopeObject)) {\n for (const account of accounts) {\n allAccounts.add(account);\n }\n }\n }\n\n return Array.from(allAccounts);\n}\n\n/**\n * Gets all permitted accounts from a CAIP-25 caveat\n * This extracts all account IDs from both required and optional scopes\n * and returns a unique set.\n *\n * @param caip25CaveatValue - The CAIP-25 caveat value to extract accounts from\n * @returns Array of unique account IDs\n */\nexport function getCaipAccountIdsFromCaip25CaveatValue(\n caip25CaveatValue: Caip25CaveatValue,\n): CaipAccountId[] {\n return getCaipAccountIdsFromScopesObjects([\n caip25CaveatValue.requiredScopes,\n caip25CaveatValue.optionalScopes,\n ]);\n}\n\n/**\n *\n * Setters\n *\n */\n\n/**\n * Sets the CAIP account IDs to scopes with matching namespaces in the given scopes object.\n * This function should not be used with Smart Contract Accounts (SCA) because\n * it adds the same account ID to all the scopes that have the same namespace.\n *\n * @param scopesObject - The scopes object to set the CAIP account IDs for.\n * @param accounts - The CAIP account IDs to add to the appropriate scopes.\n * @returns The updated scopes object with the CAIP account IDs set.\n */\nconst setNonSCACaipAccountIdsInScopesObject = (\n scopesObject: InternalScopesObject,\n accounts: CaipAccountId[],\n) => {\n const accountsByNamespace = new Map<string, Set<string>>();\n\n for (const account of accounts) {\n const {\n chain: { namespace },\n address,\n } = parseCaipAccountId(account);\n\n if (!accountsByNamespace.has(namespace)) {\n accountsByNamespace.set(namespace, new Set());\n }\n\n accountsByNamespace.get(namespace)?.add(address);\n }\n\n const updatedScopesObject: InternalScopesObject = {};\n\n for (const [scopeString, scopeObject] of Object.entries(scopesObject)) {\n const { namespace, reference } = parseScopeString(scopeString as string);\n\n let caipAccounts: CaipAccountId[] = [];\n\n if (namespace && reference && accountsByNamespace.has(namespace)) {\n const addressSet = accountsByNamespace.get(namespace);\n if (addressSet) {\n caipAccounts = Array.from(addressSet).map(\n (address) => `${namespace}:${reference}:${address}` as CaipAccountId,\n );\n }\n }\n\n updatedScopesObject[scopeString as keyof typeof scopesObject] = {\n ...scopeObject,\n accounts: getUniqueArrayItems(caipAccounts),\n };\n }\n\n return updatedScopesObject;\n};\n\n/**\n * Sets the permitted accounts to scopes with matching namespaces in the given CAIP-25 caveat value.\n * This function should not be used with Smart Contract Accounts (SCA) because\n * it adds the same account ID to all scopes that have the same namespace as the account.\n *\n * @param caip25CaveatValue - The CAIP-25 caveat value to set the permitted accounts for.\n * @param accounts - The permitted accounts to add to the appropriate scopes.\n * @returns The updated CAIP-25 caveat value with the permitted accounts set.\n */\nexport const setNonSCACaipAccountIdsInCaip25CaveatValue = (\n caip25CaveatValue: Caip25CaveatValue,\n accounts: CaipAccountId[],\n): Caip25CaveatValue => {\n return {\n ...caip25CaveatValue,\n requiredScopes: setNonSCACaipAccountIdsInScopesObject(\n caip25CaveatValue.requiredScopes,\n accounts,\n ),\n optionalScopes: setNonSCACaipAccountIdsInScopesObject(\n caip25CaveatValue.optionalScopes,\n accounts,\n ),\n };\n};\n\n/**\n * Checks if an address and list of parsed scopes are connected to any of\n * the permitted accounts based on scope matching\n *\n * @param address - The CAIP account address to check against permitted accounts\n * @param parsedAccountScopes - The list of parsed CAIP chain ID to check against permitted accounts\n * @param permittedAccounts - Array of CAIP account IDs that are permitted\n * @returns True if the address and any account scope is connected to any permitted account\n */\nfunction isAddressWithParsedScopesInPermittedAccountIds(\n address: CaipAccountAddress,\n parsedAccountScopes: {\n namespace?: CaipNamespace;\n reference?: CaipReference;\n }[],\n permittedAccounts: CaipAccountId[],\n) {\n if (!address || !parsedAccountScopes.length || !permittedAccounts.length) {\n return false;\n }\n\n return permittedAccounts.some((account) => {\n const parsedPermittedAccount = parseCaipAccountId(account);\n\n return parsedAccountScopes.some(({ namespace, reference }) => {\n if (\n namespace !== parsedPermittedAccount.chain.namespace ||\n address !== parsedPermittedAccount.address\n ) {\n return false;\n }\n\n return (\n reference === '0' ||\n reference === parsedPermittedAccount.chain.reference\n );\n });\n });\n}\n\n/**\n * Checks if an internal account is connected to any of the permitted accounts\n * based on scope matching\n *\n * @param internalAccount - The internal account to check against permitted accounts\n * @param permittedAccounts - Array of CAIP account IDs that are permitted\n * @returns True if the account is connected to any permitted account\n */\nexport function isInternalAccountInPermittedAccountIds(\n internalAccount: InternalAccount,\n permittedAccounts: CaipAccountId[],\n): boolean {\n const parsedInteralAccountScopes = internalAccount.scopes.map((scope) => {\n return parseScopeString(scope);\n });\n\n return isAddressWithParsedScopesInPermittedAccountIds(\n internalAccount.address,\n parsedInteralAccountScopes,\n permittedAccounts,\n );\n}\n\n/**\n * Checks if an CAIP account ID is connected to any of the permitted accounts\n * based on scope matching\n *\n * @param accountId - The CAIP account ID to check against permitted accounts\n * @param permittedAccounts - Array of CAIP account IDs that are permitted\n * @returns True if the account is connected to any permitted account\n */\nexport function isCaipAccountIdInPermittedAccountIds(\n accountId: CaipAccountId,\n permittedAccounts: CaipAccountId[],\n): boolean {\n const { address, chain } = parseCaipAccountId(accountId);\n\n return isAddressWithParsedScopesInPermittedAccountIds(\n address,\n [chain],\n permittedAccounts,\n );\n}\n"]}
@@ -1,10 +1,18 @@
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.overwriteCaipChainIdsInCaip25CaveatValue = exports.addCaipChainIdInCaip25CaveatValue = exports.getAllScopesFromPermission = exports.getAllNonWalletNamespacesFromCaip25CaveatValue = exports.getAllScopesFromCaip25CaveatValue = exports.getAllScopesFromScopesObjects = 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
+ const caip25Permission_1 = require("../caip25Permission.cjs");
6
7
  const transform_1 = require("../scope/transform.cjs");
7
8
  const types_1 = require("../scope/types.cjs");
9
+ /*
10
+ *
11
+ *
12
+ * EVM SPECIFIC GETTERS AND SETTERS
13
+ *
14
+ *
15
+ */
8
16
  /**
9
17
  * Gets the Ethereum (EIP155 namespaced) chainIDs from internal scopes.
10
18
  *
@@ -112,26 +120,96 @@ const setPermittedEthChainIds = (caip25CaveatValue, chainIds) => {
112
120
  return updatedCaveatValue;
113
121
  };
114
122
  exports.setPermittedEthChainIds = setPermittedEthChainIds;
123
+ /*
124
+ *
125
+ *
126
+ * GENERALIZED GETTERS AND SETTERS
127
+ *
128
+ *
129
+ */
130
+ /*
131
+ *
132
+ * GETTERS
133
+ *
134
+ */
115
135
  /**
116
- * Filters the scopes object to only include:
117
- * - Scopes without references (e.g. "wallet:")
118
- * - CAIP-2 ChainId scopes for the given chainIDs
136
+ * Gets all scopes from a CAIP-25 caveat value
119
137
  *
120
- * @param scopesObject - The scopes object to filter.
121
- * @param chainIds - The CAIP-2 chainIDs to filter for.
122
- * @returns The filtered scopes object.
138
+ * @param scopesObjects - The scopes objects to get the scopes from.
139
+ * @returns An array of InternalScopeStrings.
123
140
  */
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 ((0, types_1.isWalletScope)(scopeString) || chainIds.includes(scopeString)) {
130
- updatedScopesObject[scopeString] = scopeObject;
141
+ function getAllScopesFromScopesObjects(scopesObjects) {
142
+ const scopeSet = new Set();
143
+ for (const scopeObject of scopesObjects) {
144
+ for (const key of Object.keys(scopeObject)) {
145
+ scopeSet.add(key);
131
146
  }
132
- });
133
- return updatedScopesObject;
134
- };
147
+ }
148
+ return Array.from(scopeSet);
149
+ }
150
+ exports.getAllScopesFromScopesObjects = getAllScopesFromScopesObjects;
151
+ /**
152
+ * Gets all scopes (chain IDs) from a CAIP-25 caveat
153
+ * This extracts all scopes from both required and optional scopes
154
+ * and returns a unique set.
155
+ *
156
+ * @param caip25CaveatValue - The CAIP-25 caveat value to extract scopes from
157
+ * @returns Array of unique scope strings (chain IDs)
158
+ */
159
+ function getAllScopesFromCaip25CaveatValue(caip25CaveatValue) {
160
+ return getAllScopesFromScopesObjects([
161
+ caip25CaveatValue.requiredScopes,
162
+ caip25CaveatValue.optionalScopes,
163
+ ]);
164
+ }
165
+ exports.getAllScopesFromCaip25CaveatValue = getAllScopesFromCaip25CaveatValue;
166
+ /**
167
+ * Gets all non-wallet namespaces from a CAIP-25 caveat value
168
+ * This extracts all namespaces from both required and optional scopes
169
+ * and returns a unique set.
170
+ *
171
+ * @param caip25CaveatValue - The CAIP-25 caveat value to extract namespaces from
172
+ * @returns Array of unique namespace strings
173
+ */
174
+ function getAllNonWalletNamespacesFromCaip25CaveatValue(caip25CaveatValue) {
175
+ const allScopes = getAllScopesFromCaip25CaveatValue(caip25CaveatValue);
176
+ const namespaceSet = new Set();
177
+ for (const scope of allScopes) {
178
+ const { namespace, reference } = (0, types_1.parseScopeString)(scope);
179
+ if (namespace === utils_1.KnownCaipNamespace.Wallet) {
180
+ if (reference) {
181
+ namespaceSet.add(reference);
182
+ }
183
+ }
184
+ else if (namespace) {
185
+ namespaceSet.add(namespace);
186
+ }
187
+ }
188
+ return Array.from(namespaceSet);
189
+ }
190
+ exports.getAllNonWalletNamespacesFromCaip25CaveatValue = getAllNonWalletNamespacesFromCaip25CaveatValue;
191
+ /**
192
+ * Gets all scopes (chain IDs) from a CAIP-25 permission
193
+ * This extracts all scopes from both required and optional scopes
194
+ * and returns a unique set.
195
+ *
196
+ * @param caip25Permission - The CAIP-25 permission object
197
+ * @param caip25Permission.caveats - The caveats of the CAIP-25 permission
198
+ * @returns Array of unique scope strings (chain IDs)
199
+ */
200
+ function getAllScopesFromPermission(caip25Permission) {
201
+ const caip25Caveat = caip25Permission.caveats.find((caveat) => caveat.type === caip25Permission_1.Caip25CaveatType);
202
+ if (!caip25Caveat) {
203
+ return [];
204
+ }
205
+ return getAllScopesFromCaip25CaveatValue(caip25Caveat.value);
206
+ }
207
+ exports.getAllScopesFromPermission = getAllScopesFromPermission;
208
+ /*
209
+ *
210
+ * SETTERS
211
+ *
212
+ */
135
213
  /**
136
214
  * Adds a chainID to the optional scopes if it is not already present
137
215
  * in either the pre-existing required or optional scopes.
@@ -140,9 +218,9 @@ const filterChainScopesObjectByChainId = (scopesObject, chainIds) => {
140
218
  * @param chainId - The chainID to add.
141
219
  * @returns The updated CAIP-25 caveat value with the added chainID.
142
220
  */
143
- const addPermittedChainId = (caip25CaveatValue, chainId) => {
144
- if (Object.keys(caip25CaveatValue.requiredScopes).includes(chainId) ||
145
- Object.keys(caip25CaveatValue.optionalScopes).includes(chainId)) {
221
+ const addCaipChainIdInCaip25CaveatValue = (caip25CaveatValue, chainId) => {
222
+ if (caip25CaveatValue.requiredScopes[chainId] ||
223
+ caip25CaveatValue.optionalScopes[chainId]) {
146
224
  return caip25CaveatValue;
147
225
  }
148
226
  return {
@@ -155,7 +233,7 @@ const addPermittedChainId = (caip25CaveatValue, chainId) => {
155
233
  },
156
234
  };
157
235
  };
158
- exports.addPermittedChainId = addPermittedChainId;
236
+ exports.addCaipChainIdInCaip25CaveatValue = addCaipChainIdInCaip25CaveatValue;
159
237
  /**
160
238
  * Sets the permitted CAIP-2 chainIDs for the required and optional scopes.
161
239
  *
@@ -163,16 +241,32 @@ exports.addPermittedChainId = addPermittedChainId;
163
241
  * @param chainIds - The CAIP-2 chainIDs to set as permitted.
164
242
  * @returns The updated CAIP-25 caveat value with the permitted CAIP-2 chainIDs.
165
243
  */
166
- const setPermittedChainIds = (caip25CaveatValue, chainIds) => {
167
- let updatedCaveatValue = {
168
- ...caip25CaveatValue,
169
- requiredScopes: filterChainScopesObjectByChainId(caip25CaveatValue.requiredScopes, chainIds),
170
- optionalScopes: filterChainScopesObjectByChainId(caip25CaveatValue.optionalScopes, chainIds),
244
+ const overwriteCaipChainIdsInCaip25CaveatValue = (caip25CaveatValue, chainIds) => {
245
+ const chainIdSet = new Set(chainIds);
246
+ const result = {
247
+ requiredScopes: {},
248
+ optionalScopes: {},
249
+ sessionProperties: caip25CaveatValue.sessionProperties,
250
+ isMultichainOrigin: caip25CaveatValue.isMultichainOrigin,
171
251
  };
172
- chainIds.forEach((chainId) => {
173
- updatedCaveatValue = (0, exports.addPermittedChainId)(updatedCaveatValue, chainId);
174
- });
175
- return updatedCaveatValue;
252
+ for (const [key, value] of Object.entries(caip25CaveatValue.requiredScopes)) {
253
+ const scopeString = key;
254
+ if ((0, types_1.isWalletScope)(scopeString) || chainIdSet.has(scopeString)) {
255
+ result.requiredScopes[scopeString] = value;
256
+ }
257
+ }
258
+ for (const [key, value] of Object.entries(caip25CaveatValue.optionalScopes)) {
259
+ const scopeString = key;
260
+ if ((0, types_1.isWalletScope)(scopeString) || chainIdSet.has(scopeString)) {
261
+ result.optionalScopes[scopeString] = value;
262
+ }
263
+ }
264
+ for (const chainId of chainIds) {
265
+ if (!result.requiredScopes[chainId] && !result.optionalScopes[chainId]) {
266
+ result.optionalScopes[chainId] = { accounts: [] };
267
+ }
268
+ }
269
+ return result;
176
270
  };
177
- exports.setPermittedChainIds = setPermittedChainIds;
271
+ exports.overwriteCaipChainIdsInCaip25CaveatValue = overwriteCaipChainIdsInCaip25CaveatValue;
178
272
  //# 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 (isWalletScope(scopeString) || 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, CaipChainId, CaipNamespace } from '@metamask/utils';\nimport { hexToBigInt, KnownCaipNamespace } from '@metamask/utils';\n\nimport { Caip25CaveatType, type Caip25CaveatValue } from '../caip25Permission';\nimport { getUniqueArrayItems } from '../scope/transform';\nimport type { InternalScopesObject, InternalScopeString } from '../scope/types';\nimport { isWalletScope, parseScopeString } from '../scope/types';\n\n/*\n *\n *\n * EVM SPECIFIC GETTERS AND SETTERS\n *\n *\n */\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 *\n *\n * GENERALIZED GETTERS AND SETTERS\n *\n *\n */\n\n/*\n *\n * GETTERS\n *\n */\n\n/**\n * Gets all scopes from a CAIP-25 caveat value\n *\n * @param scopesObjects - The scopes objects to get the scopes from.\n * @returns An array of InternalScopeStrings.\n */\nexport function getAllScopesFromScopesObjects(\n scopesObjects: InternalScopesObject[],\n): InternalScopeString[] {\n const scopeSet = new Set<InternalScopeString>();\n\n for (const scopeObject of scopesObjects) {\n for (const key of Object.keys(scopeObject)) {\n scopeSet.add(key as InternalScopeString);\n }\n }\n\n return Array.from(scopeSet);\n}\n\n/**\n * Gets all scopes (chain IDs) from a CAIP-25 caveat\n * This extracts all scopes from both required and optional scopes\n * and returns a unique set.\n *\n * @param caip25CaveatValue - The CAIP-25 caveat value to extract scopes from\n * @returns Array of unique scope strings (chain IDs)\n */\nexport function getAllScopesFromCaip25CaveatValue(\n caip25CaveatValue: Caip25CaveatValue,\n): CaipChainId[] {\n return getAllScopesFromScopesObjects([\n caip25CaveatValue.requiredScopes,\n caip25CaveatValue.optionalScopes,\n ]) as CaipChainId[];\n}\n\n/**\n * Gets all non-wallet namespaces from a CAIP-25 caveat value\n * This extracts all namespaces from both required and optional scopes\n * and returns a unique set.\n *\n * @param caip25CaveatValue - The CAIP-25 caveat value to extract namespaces from\n * @returns Array of unique namespace strings\n */\nexport function getAllNonWalletNamespacesFromCaip25CaveatValue(\n caip25CaveatValue: Caip25CaveatValue,\n): CaipNamespace[] {\n const allScopes = getAllScopesFromCaip25CaveatValue(caip25CaveatValue);\n const namespaceSet = new Set<CaipNamespace>();\n\n for (const scope of allScopes) {\n const { namespace, reference } = parseScopeString(scope);\n if (namespace === KnownCaipNamespace.Wallet) {\n if (reference) {\n namespaceSet.add(reference);\n }\n } else if (namespace) {\n namespaceSet.add(namespace);\n }\n }\n\n return Array.from(namespaceSet);\n}\n\n/**\n * Gets all scopes (chain IDs) from a CAIP-25 permission\n * This extracts all scopes from both required and optional scopes\n * and returns a unique set.\n *\n * @param caip25Permission - The CAIP-25 permission object\n * @param caip25Permission.caveats - The caveats of the CAIP-25 permission\n * @returns Array of unique scope strings (chain IDs)\n */\nexport function getAllScopesFromPermission(caip25Permission: {\n caveats: {\n type: string;\n value: Caip25CaveatValue;\n }[];\n}): CaipChainId[] {\n const caip25Caveat = caip25Permission.caveats.find(\n (caveat) => caveat.type === Caip25CaveatType,\n );\n if (!caip25Caveat) {\n return [];\n }\n\n return getAllScopesFromCaip25CaveatValue(caip25Caveat.value);\n}\n\n/*\n *\n * SETTERS\n *\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 addCaipChainIdInCaip25CaveatValue = (\n caip25CaveatValue: Caip25CaveatValue,\n chainId: CaipChainId,\n): Caip25CaveatValue => {\n if (\n caip25CaveatValue.requiredScopes[chainId] ||\n caip25CaveatValue.optionalScopes[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 overwriteCaipChainIdsInCaip25CaveatValue = (\n caip25CaveatValue: Caip25CaveatValue,\n chainIds: CaipChainId[],\n): Caip25CaveatValue => {\n const chainIdSet = new Set(chainIds);\n const result: Caip25CaveatValue = {\n requiredScopes: {},\n optionalScopes: {},\n sessionProperties: caip25CaveatValue.sessionProperties,\n isMultichainOrigin: caip25CaveatValue.isMultichainOrigin,\n };\n\n for (const [key, value] of Object.entries(caip25CaveatValue.requiredScopes)) {\n const scopeString = key as keyof typeof caip25CaveatValue.requiredScopes;\n if (isWalletScope(scopeString) || chainIdSet.has(scopeString)) {\n result.requiredScopes[scopeString] = value;\n }\n }\n\n for (const [key, value] of Object.entries(caip25CaveatValue.optionalScopes)) {\n const scopeString = key as keyof typeof caip25CaveatValue.optionalScopes;\n if (isWalletScope(scopeString) || chainIdSet.has(scopeString)) {\n result.optionalScopes[scopeString] = value;\n }\n }\n\n for (const chainId of chainIds) {\n if (!result.requiredScopes[chainId] && !result.optionalScopes[chainId]) {\n result.optionalScopes[chainId] = { accounts: [] };\n }\n }\n\n return result;\n};\n"]}
@@ -1,5 +1,6 @@
1
- import type { Hex, CaipChainId } from "@metamask/utils";
2
- import type { Caip25CaveatValue } from "../caip25Permission.cjs";
1
+ import type { Hex, CaipChainId, CaipNamespace } from "@metamask/utils";
2
+ import { type Caip25CaveatValue } from "../caip25Permission.cjs";
3
+ import type { InternalScopesObject, InternalScopeString } from "../scope/types.cjs";
3
4
  /**
4
5
  * Gets the Ethereum (EIP155 namespaced) chainIDs from the required and optional scopes.
5
6
  *
@@ -24,6 +25,46 @@ export declare const addPermittedEthChainId: (caip25CaveatValue: Caip25CaveatVal
24
25
  * @returns The updated CAIP-25 caveat value with the permitted Ethereum chainIDs.
25
26
  */
26
27
  export declare const setPermittedEthChainIds: (caip25CaveatValue: Caip25CaveatValue, chainIds: Hex[]) => Caip25CaveatValue;
28
+ /**
29
+ * Gets all scopes from a CAIP-25 caveat value
30
+ *
31
+ * @param scopesObjects - The scopes objects to get the scopes from.
32
+ * @returns An array of InternalScopeStrings.
33
+ */
34
+ export declare function getAllScopesFromScopesObjects(scopesObjects: InternalScopesObject[]): InternalScopeString[];
35
+ /**
36
+ * Gets all scopes (chain IDs) from a CAIP-25 caveat
37
+ * This extracts all scopes from both required and optional scopes
38
+ * and returns a unique set.
39
+ *
40
+ * @param caip25CaveatValue - The CAIP-25 caveat value to extract scopes from
41
+ * @returns Array of unique scope strings (chain IDs)
42
+ */
43
+ export declare function getAllScopesFromCaip25CaveatValue(caip25CaveatValue: Caip25CaveatValue): CaipChainId[];
44
+ /**
45
+ * Gets all non-wallet namespaces from a CAIP-25 caveat value
46
+ * This extracts all namespaces from both required and optional scopes
47
+ * and returns a unique set.
48
+ *
49
+ * @param caip25CaveatValue - The CAIP-25 caveat value to extract namespaces from
50
+ * @returns Array of unique namespace strings
51
+ */
52
+ export declare function getAllNonWalletNamespacesFromCaip25CaveatValue(caip25CaveatValue: Caip25CaveatValue): CaipNamespace[];
53
+ /**
54
+ * Gets all scopes (chain IDs) from a CAIP-25 permission
55
+ * This extracts all scopes from both required and optional scopes
56
+ * and returns a unique set.
57
+ *
58
+ * @param caip25Permission - The CAIP-25 permission object
59
+ * @param caip25Permission.caveats - The caveats of the CAIP-25 permission
60
+ * @returns Array of unique scope strings (chain IDs)
61
+ */
62
+ export declare function getAllScopesFromPermission(caip25Permission: {
63
+ caveats: {
64
+ type: string;
65
+ value: Caip25CaveatValue;
66
+ }[];
67
+ }): CaipChainId[];
27
68
  /**
28
69
  * Adds a chainID to the optional scopes if it is not already present
29
70
  * in either the pre-existing required or optional scopes.
@@ -32,7 +73,7 @@ export declare const setPermittedEthChainIds: (caip25CaveatValue: Caip25CaveatVa
32
73
  * @param chainId - The chainID to add.
33
74
  * @returns The updated CAIP-25 caveat value with the added chainID.
34
75
  */
35
- export declare const addPermittedChainId: (caip25CaveatValue: Caip25CaveatValue, chainId: CaipChainId) => Caip25CaveatValue;
76
+ export declare const addCaipChainIdInCaip25CaveatValue: (caip25CaveatValue: Caip25CaveatValue, chainId: CaipChainId) => Caip25CaveatValue;
36
77
  /**
37
78
  * Sets the permitted CAIP-2 chainIDs for the required and optional scopes.
38
79
  *
@@ -40,5 +81,5 @@ export declare const addPermittedChainId: (caip25CaveatValue: Caip25CaveatValue,
40
81
  * @param chainIds - The CAIP-2 chainIDs to set as permitted.
41
82
  * @returns The updated CAIP-25 caveat value with the permitted CAIP-2 chainIDs.
42
83
  */
43
- export declare const setPermittedChainIds: (caip25CaveatValue: Caip25CaveatValue, chainIds: CaipChainId[]) => Caip25CaveatValue;
84
+ export declare const overwriteCaipChainIdsInCaip25CaveatValue: (caip25CaveatValue: Caip25CaveatValue, chainIds: CaipChainId[]) => Caip25CaveatValue;
44
85
  //# 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;AA4BF;;;;;;;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,WAAW,EAAE,aAAa,EAAE,wBAAwB;AAGvE,OAAO,EAAoB,KAAK,iBAAiB,EAAE,gCAA4B;AAE/E,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,2BAAuB;AA8BhF;;;;;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;AAgBF;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,aAAa,EAAE,oBAAoB,EAAE,GACpC,mBAAmB,EAAE,CAUvB;AAED;;;;;;;GAOG;AACH,wBAAgB,iCAAiC,CAC/C,iBAAiB,EAAE,iBAAiB,GACnC,WAAW,EAAE,CAKf;AAED;;;;;;;GAOG;AACH,wBAAgB,8CAA8C,CAC5D,iBAAiB,EAAE,iBAAiB,GACnC,aAAa,EAAE,CAgBjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,gBAAgB,EAAE;IAC3D,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,iBAAiB,CAAC;KAC1B,EAAE,CAAC;CACL,GAAG,WAAW,EAAE,CAShB;AAQD;;;;;;;GAOG;AACH,eAAO,MAAM,iCAAiC,sBACzB,iBAAiB,WAC3B,WAAW,KACnB,iBAiBF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,wCAAwC,sBAChC,iBAAiB,YAC1B,WAAW,EAAE,KACtB,iBA8BF,CAAC"}
@@ -1,5 +1,6 @@
1
- import type { Hex, CaipChainId } from "@metamask/utils";
2
- import type { Caip25CaveatValue } from "../caip25Permission.mjs";
1
+ import type { Hex, CaipChainId, CaipNamespace } from "@metamask/utils";
2
+ import { type Caip25CaveatValue } from "../caip25Permission.mjs";
3
+ import type { InternalScopesObject, InternalScopeString } from "../scope/types.mjs";
3
4
  /**
4
5
  * Gets the Ethereum (EIP155 namespaced) chainIDs from the required and optional scopes.
5
6
  *
@@ -24,6 +25,46 @@ export declare const addPermittedEthChainId: (caip25CaveatValue: Caip25CaveatVal
24
25
  * @returns The updated CAIP-25 caveat value with the permitted Ethereum chainIDs.
25
26
  */
26
27
  export declare const setPermittedEthChainIds: (caip25CaveatValue: Caip25CaveatValue, chainIds: Hex[]) => Caip25CaveatValue;
28
+ /**
29
+ * Gets all scopes from a CAIP-25 caveat value
30
+ *
31
+ * @param scopesObjects - The scopes objects to get the scopes from.
32
+ * @returns An array of InternalScopeStrings.
33
+ */
34
+ export declare function getAllScopesFromScopesObjects(scopesObjects: InternalScopesObject[]): InternalScopeString[];
35
+ /**
36
+ * Gets all scopes (chain IDs) from a CAIP-25 caveat
37
+ * This extracts all scopes from both required and optional scopes
38
+ * and returns a unique set.
39
+ *
40
+ * @param caip25CaveatValue - The CAIP-25 caveat value to extract scopes from
41
+ * @returns Array of unique scope strings (chain IDs)
42
+ */
43
+ export declare function getAllScopesFromCaip25CaveatValue(caip25CaveatValue: Caip25CaveatValue): CaipChainId[];
44
+ /**
45
+ * Gets all non-wallet namespaces from a CAIP-25 caveat value
46
+ * This extracts all namespaces from both required and optional scopes
47
+ * and returns a unique set.
48
+ *
49
+ * @param caip25CaveatValue - The CAIP-25 caveat value to extract namespaces from
50
+ * @returns Array of unique namespace strings
51
+ */
52
+ export declare function getAllNonWalletNamespacesFromCaip25CaveatValue(caip25CaveatValue: Caip25CaveatValue): CaipNamespace[];
53
+ /**
54
+ * Gets all scopes (chain IDs) from a CAIP-25 permission
55
+ * This extracts all scopes from both required and optional scopes
56
+ * and returns a unique set.
57
+ *
58
+ * @param caip25Permission - The CAIP-25 permission object
59
+ * @param caip25Permission.caveats - The caveats of the CAIP-25 permission
60
+ * @returns Array of unique scope strings (chain IDs)
61
+ */
62
+ export declare function getAllScopesFromPermission(caip25Permission: {
63
+ caveats: {
64
+ type: string;
65
+ value: Caip25CaveatValue;
66
+ }[];
67
+ }): CaipChainId[];
27
68
  /**
28
69
  * Adds a chainID to the optional scopes if it is not already present
29
70
  * in either the pre-existing required or optional scopes.
@@ -32,7 +73,7 @@ export declare const setPermittedEthChainIds: (caip25CaveatValue: Caip25CaveatVa
32
73
  * @param chainId - The chainID to add.
33
74
  * @returns The updated CAIP-25 caveat value with the added chainID.
34
75
  */
35
- export declare const addPermittedChainId: (caip25CaveatValue: Caip25CaveatValue, chainId: CaipChainId) => Caip25CaveatValue;
76
+ export declare const addCaipChainIdInCaip25CaveatValue: (caip25CaveatValue: Caip25CaveatValue, chainId: CaipChainId) => Caip25CaveatValue;
36
77
  /**
37
78
  * Sets the permitted CAIP-2 chainIDs for the required and optional scopes.
38
79
  *
@@ -40,5 +81,5 @@ export declare const addPermittedChainId: (caip25CaveatValue: Caip25CaveatValue,
40
81
  * @param chainIds - The CAIP-2 chainIDs to set as permitted.
41
82
  * @returns The updated CAIP-25 caveat value with the permitted CAIP-2 chainIDs.
42
83
  */
43
- export declare const setPermittedChainIds: (caip25CaveatValue: Caip25CaveatValue, chainIds: CaipChainId[]) => Caip25CaveatValue;
84
+ export declare const overwriteCaipChainIdsInCaip25CaveatValue: (caip25CaveatValue: Caip25CaveatValue, chainIds: CaipChainId[]) => Caip25CaveatValue;
44
85
  //# 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;AA4BF;;;;;;;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,WAAW,EAAE,aAAa,EAAE,wBAAwB;AAGvE,OAAO,EAAoB,KAAK,iBAAiB,EAAE,gCAA4B;AAE/E,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,2BAAuB;AA8BhF;;;;;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;AAgBF;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,aAAa,EAAE,oBAAoB,EAAE,GACpC,mBAAmB,EAAE,CAUvB;AAED;;;;;;;GAOG;AACH,wBAAgB,iCAAiC,CAC/C,iBAAiB,EAAE,iBAAiB,GACnC,WAAW,EAAE,CAKf;AAED;;;;;;;GAOG;AACH,wBAAgB,8CAA8C,CAC5D,iBAAiB,EAAE,iBAAiB,GACnC,aAAa,EAAE,CAgBjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,gBAAgB,EAAE;IAC3D,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,iBAAiB,CAAC;KAC1B,EAAE,CAAC;CACL,GAAG,WAAW,EAAE,CAShB;AAQD;;;;;;;GAOG;AACH,eAAO,MAAM,iCAAiC,sBACzB,iBAAiB,WAC3B,WAAW,KACnB,iBAiBF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,wCAAwC,sBAChC,iBAAiB,YAC1B,WAAW,EAAE,KACtB,iBA8BF,CAAC"}