@metamask-previews/eip1193-permission-middleware 0.1.0-preview-e9f8bc88 → 0.1.0-preview-39fa8d37

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.
@@ -1 +1 @@
1
- {"version":3,"file":"wallet-getPermissions.cjs","sourceRoot":"","sources":["../src/wallet-getPermissions.ts"],"names":[],"mappings":";;;AACA,mFAI6C;AAK7C,2EAKyC;AAOzC,uCAAyE;AAE5D,QAAA,qBAAqB,GAAG;IACnC,WAAW,EAAE,CAAC,mCAAW,CAAC,cAAc,CAAC;IACzC,cAAc,EAAE,4BAA4B;IAC5C,SAAS,EAAE;QACT,uBAAuB,EAAE,IAAI;QAC7B,WAAW,EAAE,IAAI;KAClB;CACF,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,KAAK,UAAU,4BAA4B,CACzC,IAA4B,EAC5B,GAAiC,EACjC,KAAqC,EACrC,GAA6B,EAC7B,EACE,uBAAuB,EACvB,WAAW,GASZ;IAED,MAAM,WAAW,GAAG,EAAE,GAAG,uBAAuB,EAAE,EAAE,CAAC;IACrD,MAAM,eAAe,GAAG,WAAW,CAAC,yDAA6B,CAAC,CAAC;IACnE,MAAM,iBAAiB,GAAG,eAAe,EAAE,OAAO,EAAE,IAAI,CACtD,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,4CAAgB,CACxC,EAAE,KAAsC,CAAC;IAC1C,OAAO,WAAW,CAAC,yDAA6B,CAAC,CAAC;IAElD,IAAI,iBAAiB,EAAE;QACrB,oEAAoE;QACpE,4DAA4D;QAC5D,MAAM,WAAW,GAAG,WAAW,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAEtD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,WAAW,CAAC,yBAAiB,CAAC,WAAW,CAAC,GAAG;gBAC3C,GAAG,eAAe;gBAClB,gBAAgB,EAAE,yBAAiB,CAAC,WAAW;gBAC/C,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,mBAAW,CAAC,wBAAwB;wBAC1C,KAAK,EAAE,WAAW;qBACnB;iBACF;aACF,CAAC;SACH;QAED,MAAM,WAAW,GAAG,IAAA,mDAAuB,EAAC,iBAAiB,CAAC,CAAC;QAE/D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,WAAW,CAAC,sBAAc,CAAC,eAAe,CAAC,GAAG;gBAC5C,GAAG,eAAe;gBAClB,gBAAgB,EAAE,sBAAc,CAAC,eAAe;gBAChD,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,mBAAW,CAAC,wBAAwB;wBAC1C,KAAK,EAAE,WAAW;qBACnB;iBACF;aACF,CAAC;SACH;KACF;IAED,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACxC,OAAO,GAAG,EAAE,CAAC;AACf,CAAC","sourcesContent":["import type { Caip25CaveatValue } from '@metamask/chain-agnostic-permission';\nimport {\n Caip25CaveatType,\n Caip25EndowmentPermissionName,\n getPermittedEthChainIds,\n} from '@metamask/chain-agnostic-permission';\nimport type {\n AsyncJsonRpcEngineNextCallback,\n JsonRpcEngineEndCallback,\n} from '@metamask/json-rpc-engine';\nimport {\n type CaveatSpecificationConstraint,\n MethodNames,\n type PermissionController,\n type PermissionSpecificationConstraint,\n} from '@metamask/permission-controller';\nimport type {\n Json,\n JsonRpcRequest,\n PendingJsonRpcResponse,\n} from '@metamask/utils';\n\nimport { CaveatTypes, EndowmentTypes, RestrictedMethods } from './types';\n\nexport const getPermissionsHandler = {\n methodNames: [MethodNames.GetPermissions],\n implementation: getPermissionsImplementation,\n hookNames: {\n getPermissionsForOrigin: true,\n getAccounts: true,\n },\n};\n\n/**\n * Get Permissions implementation to be used in JsonRpcEngine middleware, specifically for `wallet_getPermissions` RPC method.\n * It makes use of a CAIP-25 endowment permission returned by `getPermissionsForOrigin` hook, if it exists.\n *\n * @param _req - The JsonRpcEngine request - unused\n * @param res - The JsonRpcEngine result object\n * @param _next - JsonRpcEngine next() callback - unused\n * @param end - JsonRpcEngine end() callback\n * @param options - Method hooks passed to the method implementation\n * @param options.getPermissionsForOrigin - The specific method hook needed for this method implementation\n * @param options.getAccounts - A hook that returns the permitted eth accounts for the origin sorted by lastSelected.\n * @returns A promise that resolves to nothing\n */\nasync function getPermissionsImplementation(\n _req: JsonRpcRequest<Json[]>,\n res: PendingJsonRpcResponse<Json>,\n _next: AsyncJsonRpcEngineNextCallback,\n end: JsonRpcEngineEndCallback,\n {\n getPermissionsForOrigin,\n getAccounts,\n }: {\n getPermissionsForOrigin: () => ReturnType<\n PermissionController<\n PermissionSpecificationConstraint,\n CaveatSpecificationConstraint\n >['getPermissions']\n >;\n getAccounts: (options?: { ignoreLock?: boolean }) => string[];\n },\n) {\n const permissions = { ...getPermissionsForOrigin() };\n const caip25Endowment = permissions[Caip25EndowmentPermissionName];\n const caip25CaveatValue = caip25Endowment?.caveats?.find(\n ({ type }) => type === Caip25CaveatType,\n )?.value as Caip25CaveatValue | undefined;\n delete permissions[Caip25EndowmentPermissionName];\n\n if (caip25CaveatValue) {\n // We cannot derive ethAccounts directly from the CAIP-25 permission\n // because the accounts will not be in order of lastSelected\n const ethAccounts = getAccounts({ ignoreLock: true });\n\n if (ethAccounts.length > 0) {\n permissions[RestrictedMethods.EthAccounts] = {\n ...caip25Endowment,\n parentCapability: RestrictedMethods.EthAccounts,\n caveats: [\n {\n type: CaveatTypes.RestrictReturnedAccounts,\n value: ethAccounts,\n },\n ],\n };\n }\n\n const ethChainIds = getPermittedEthChainIds(caip25CaveatValue);\n\n if (ethChainIds.length > 0) {\n permissions[EndowmentTypes.PermittedChains] = {\n ...caip25Endowment,\n parentCapability: EndowmentTypes.PermittedChains,\n caveats: [\n {\n type: CaveatTypes.RestrictNetworkSwitching,\n value: ethChainIds,\n },\n ],\n };\n }\n }\n\n res.result = Object.values(permissions);\n return end();\n}\n"]}
1
+ {"version":3,"file":"wallet-getPermissions.cjs","sourceRoot":"","sources":["../src/wallet-getPermissions.ts"],"names":[],"mappings":";;;AACA,mFAI6C;AAK7C,2EAKyC;AAOzC,uCAAyE;AAE5D,QAAA,qBAAqB,GAAG;IACnC,WAAW,EAAE,CAAC,mCAAW,CAAC,cAAc,CAAC;IACzC,cAAc,EAAE,4BAA4B;IAC5C,SAAS,EAAE;QACT,uBAAuB,EAAE,IAAI;QAC7B,WAAW,EAAE,IAAI;KAClB;CACF,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,KAAK,UAAU,4BAA4B,CACzC,IAA4B,EAC5B,GAA2B,EAC3B,KAAqC,EACrC,GAA6B,EAC7B,EACE,uBAAuB,EACvB,WAAW,GASZ;IAED,MAAM,WAAW,GAAG,EAAE,GAAG,uBAAuB,EAAE,EAAE,CAAC;IACrD,MAAM,eAAe,GAAG,WAAW,CAAC,yDAA6B,CAAC,CAAC;IACnE,MAAM,iBAAiB,GAAG,eAAe,EAAE,OAAO,EAAE,IAAI,CACtD,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,4CAAgB,CACxC,EAAE,KAAsC,CAAC;IAC1C,OAAO,WAAW,CAAC,yDAA6B,CAAC,CAAC;IAElD,IAAI,iBAAiB,EAAE;QACrB,oEAAoE;QACpE,4DAA4D;QAC5D,MAAM,WAAW,GAAG,WAAW,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAEtD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,WAAW,CAAC,yBAAiB,CAAC,WAAW,CAAC,GAAG;gBAC3C,GAAG,eAAe;gBAClB,gBAAgB,EAAE,yBAAiB,CAAC,WAAW;gBAC/C,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,mBAAW,CAAC,wBAAwB;wBAC1C,KAAK,EAAE,WAAW;qBACnB;iBACF;aACF,CAAC;SACH;QAED,MAAM,WAAW,GAAG,IAAA,mDAAuB,EAAC,iBAAiB,CAAC,CAAC;QAE/D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,WAAW,CAAC,sBAAc,CAAC,eAAe,CAAC,GAAG;gBAC5C,GAAG,eAAe;gBAClB,gBAAgB,EAAE,sBAAc,CAAC,eAAe;gBAChD,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,mBAAW,CAAC,wBAAwB;wBAC1C,KAAK,EAAE,WAAW;qBACnB;iBACF;aACF,CAAC;SACH;KACF;IAED,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACxC,OAAO,GAAG,EAAE,CAAC;AACf,CAAC","sourcesContent":["import type { Caip25CaveatValue } from '@metamask/chain-agnostic-permission';\nimport {\n Caip25CaveatType,\n Caip25EndowmentPermissionName,\n getPermittedEthChainIds,\n} from '@metamask/chain-agnostic-permission';\nimport type {\n AsyncJsonRpcEngineNextCallback,\n JsonRpcEngineEndCallback,\n} from '@metamask/json-rpc-engine';\nimport {\n type CaveatSpecificationConstraint,\n MethodNames,\n type PermissionController,\n type PermissionSpecificationConstraint,\n} from '@metamask/permission-controller';\nimport type {\n Json,\n JsonRpcRequest,\n PendingJsonRpcResponse,\n} from '@metamask/utils';\n\nimport { CaveatTypes, EndowmentTypes, RestrictedMethods } from './types';\n\nexport const getPermissionsHandler = {\n methodNames: [MethodNames.GetPermissions],\n implementation: getPermissionsImplementation,\n hookNames: {\n getPermissionsForOrigin: true,\n getAccounts: true,\n },\n};\n\n/**\n * Get Permissions implementation to be used in JsonRpcEngine middleware, specifically for `wallet_getPermissions` RPC method.\n * It makes use of a CAIP-25 endowment permission returned by `getPermissionsForOrigin` hook, if it exists.\n *\n * @param _req - The JsonRpcEngine request - unused\n * @param res - The JsonRpcEngine result object\n * @param _next - JsonRpcEngine next() callback - unused\n * @param end - JsonRpcEngine end() callback\n * @param options - Method hooks passed to the method implementation\n * @param options.getPermissionsForOrigin - The specific method hook needed for this method implementation\n * @param options.getAccounts - A hook that returns the permitted eth accounts for the origin sorted by lastSelected.\n * @returns A promise that resolves to nothing\n */\nasync function getPermissionsImplementation(\n _req: JsonRpcRequest<Json[]>,\n res: PendingJsonRpcResponse,\n _next: AsyncJsonRpcEngineNextCallback,\n end: JsonRpcEngineEndCallback,\n {\n getPermissionsForOrigin,\n getAccounts,\n }: {\n getPermissionsForOrigin: () => ReturnType<\n PermissionController<\n PermissionSpecificationConstraint,\n CaveatSpecificationConstraint\n >['getPermissions']\n >;\n getAccounts: (options?: { ignoreLock?: boolean }) => string[];\n },\n) {\n const permissions = { ...getPermissionsForOrigin() };\n const caip25Endowment = permissions[Caip25EndowmentPermissionName];\n const caip25CaveatValue = caip25Endowment?.caveats?.find(\n ({ type }) => type === Caip25CaveatType,\n )?.value as Caip25CaveatValue | undefined;\n delete permissions[Caip25EndowmentPermissionName];\n\n if (caip25CaveatValue) {\n // We cannot derive ethAccounts directly from the CAIP-25 permission\n // because the accounts will not be in order of lastSelected\n const ethAccounts = getAccounts({ ignoreLock: true });\n\n if (ethAccounts.length > 0) {\n permissions[RestrictedMethods.EthAccounts] = {\n ...caip25Endowment,\n parentCapability: RestrictedMethods.EthAccounts,\n caveats: [\n {\n type: CaveatTypes.RestrictReturnedAccounts,\n value: ethAccounts,\n },\n ],\n };\n }\n\n const ethChainIds = getPermittedEthChainIds(caip25CaveatValue);\n\n if (ethChainIds.length > 0) {\n permissions[EndowmentTypes.PermittedChains] = {\n ...caip25Endowment,\n parentCapability: EndowmentTypes.PermittedChains,\n caveats: [\n {\n type: CaveatTypes.RestrictNetworkSwitching,\n value: ethChainIds,\n },\n ],\n };\n }\n }\n\n res.result = Object.values(permissions);\n return end();\n}\n"]}
@@ -22,7 +22,7 @@ export declare const getPermissionsHandler: {
22
22
  * @param options.getAccounts - A hook that returns the permitted eth accounts for the origin sorted by lastSelected.
23
23
  * @returns A promise that resolves to nothing
24
24
  */
25
- declare function getPermissionsImplementation(_req: JsonRpcRequest<Json[]>, res: PendingJsonRpcResponse<Json>, _next: AsyncJsonRpcEngineNextCallback, end: JsonRpcEngineEndCallback, { getPermissionsForOrigin, getAccounts, }: {
25
+ declare function getPermissionsImplementation(_req: JsonRpcRequest<Json[]>, res: PendingJsonRpcResponse, _next: AsyncJsonRpcEngineNextCallback, end: JsonRpcEngineEndCallback, { getPermissionsForOrigin, getAccounts, }: {
26
26
  getPermissionsForOrigin: () => ReturnType<PermissionController<PermissionSpecificationConstraint, CaveatSpecificationConstraint>['getPermissions']>;
27
27
  getAccounts: (options?: {
28
28
  ignoreLock?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"wallet-getPermissions.d.cts","sourceRoot":"","sources":["../src/wallet-getPermissions.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,8BAA8B,EAC9B,wBAAwB,EACzB,kCAAkC;AACnC,OAAO,EACL,KAAK,6BAA6B,EAClC,WAAW,EACX,KAAK,oBAAoB,EACzB,KAAK,iCAAiC,EACvC,wCAAwC;AACzC,OAAO,KAAK,EACV,IAAI,EACJ,cAAc,EACd,sBAAsB,EACvB,wBAAwB;AAIzB,eAAO,MAAM,qBAAqB;;;;;;;CAOjC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,iBAAe,4BAA4B,CACzC,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC,EAC5B,GAAG,EAAE,sBAAsB,CAAC,IAAI,CAAC,EACjC,KAAK,EAAE,8BAA8B,EACrC,GAAG,EAAE,wBAAwB,EAC7B,EACE,uBAAuB,EACvB,WAAW,GACZ,EAAE;IACD,uBAAuB,EAAE,MAAM,UAAU,CACvC,oBAAoB,CAClB,iCAAiC,EACjC,6BAA6B,CAC9B,CAAC,gBAAgB,CAAC,CACpB,CAAC;IACF,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,MAAM,EAAE,CAAC;CAC/D,iBA6CF"}
1
+ {"version":3,"file":"wallet-getPermissions.d.cts","sourceRoot":"","sources":["../src/wallet-getPermissions.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,8BAA8B,EAC9B,wBAAwB,EACzB,kCAAkC;AACnC,OAAO,EACL,KAAK,6BAA6B,EAClC,WAAW,EACX,KAAK,oBAAoB,EACzB,KAAK,iCAAiC,EACvC,wCAAwC;AACzC,OAAO,KAAK,EACV,IAAI,EACJ,cAAc,EACd,sBAAsB,EACvB,wBAAwB;AAIzB,eAAO,MAAM,qBAAqB;;;;;;;CAOjC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,iBAAe,4BAA4B,CACzC,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC,EAC5B,GAAG,EAAE,sBAAsB,EAC3B,KAAK,EAAE,8BAA8B,EACrC,GAAG,EAAE,wBAAwB,EAC7B,EACE,uBAAuB,EACvB,WAAW,GACZ,EAAE;IACD,uBAAuB,EAAE,MAAM,UAAU,CACvC,oBAAoB,CAClB,iCAAiC,EACjC,6BAA6B,CAC9B,CAAC,gBAAgB,CAAC,CACpB,CAAC;IACF,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,MAAM,EAAE,CAAC;CAC/D,iBA6CF"}
@@ -22,7 +22,7 @@ export declare const getPermissionsHandler: {
22
22
  * @param options.getAccounts - A hook that returns the permitted eth accounts for the origin sorted by lastSelected.
23
23
  * @returns A promise that resolves to nothing
24
24
  */
25
- declare function getPermissionsImplementation(_req: JsonRpcRequest<Json[]>, res: PendingJsonRpcResponse<Json>, _next: AsyncJsonRpcEngineNextCallback, end: JsonRpcEngineEndCallback, { getPermissionsForOrigin, getAccounts, }: {
25
+ declare function getPermissionsImplementation(_req: JsonRpcRequest<Json[]>, res: PendingJsonRpcResponse, _next: AsyncJsonRpcEngineNextCallback, end: JsonRpcEngineEndCallback, { getPermissionsForOrigin, getAccounts, }: {
26
26
  getPermissionsForOrigin: () => ReturnType<PermissionController<PermissionSpecificationConstraint, CaveatSpecificationConstraint>['getPermissions']>;
27
27
  getAccounts: (options?: {
28
28
  ignoreLock?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"wallet-getPermissions.d.mts","sourceRoot":"","sources":["../src/wallet-getPermissions.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,8BAA8B,EAC9B,wBAAwB,EACzB,kCAAkC;AACnC,OAAO,EACL,KAAK,6BAA6B,EAClC,WAAW,EACX,KAAK,oBAAoB,EACzB,KAAK,iCAAiC,EACvC,wCAAwC;AACzC,OAAO,KAAK,EACV,IAAI,EACJ,cAAc,EACd,sBAAsB,EACvB,wBAAwB;AAIzB,eAAO,MAAM,qBAAqB;;;;;;;CAOjC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,iBAAe,4BAA4B,CACzC,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC,EAC5B,GAAG,EAAE,sBAAsB,CAAC,IAAI,CAAC,EACjC,KAAK,EAAE,8BAA8B,EACrC,GAAG,EAAE,wBAAwB,EAC7B,EACE,uBAAuB,EACvB,WAAW,GACZ,EAAE;IACD,uBAAuB,EAAE,MAAM,UAAU,CACvC,oBAAoB,CAClB,iCAAiC,EACjC,6BAA6B,CAC9B,CAAC,gBAAgB,CAAC,CACpB,CAAC;IACF,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,MAAM,EAAE,CAAC;CAC/D,iBA6CF"}
1
+ {"version":3,"file":"wallet-getPermissions.d.mts","sourceRoot":"","sources":["../src/wallet-getPermissions.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,8BAA8B,EAC9B,wBAAwB,EACzB,kCAAkC;AACnC,OAAO,EACL,KAAK,6BAA6B,EAClC,WAAW,EACX,KAAK,oBAAoB,EACzB,KAAK,iCAAiC,EACvC,wCAAwC;AACzC,OAAO,KAAK,EACV,IAAI,EACJ,cAAc,EACd,sBAAsB,EACvB,wBAAwB;AAIzB,eAAO,MAAM,qBAAqB;;;;;;;CAOjC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,iBAAe,4BAA4B,CACzC,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC,EAC5B,GAAG,EAAE,sBAAsB,EAC3B,KAAK,EAAE,8BAA8B,EACrC,GAAG,EAAE,wBAAwB,EAC7B,EACE,uBAAuB,EACvB,WAAW,GACZ,EAAE;IACD,uBAAuB,EAAE,MAAM,UAAU,CACvC,oBAAoB,CAClB,iCAAiC,EACjC,6BAA6B,CAC9B,CAAC,gBAAgB,CAAC,CACpB,CAAC;IACF,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,MAAM,EAAE,CAAC;CAC/D,iBA6CF"}
@@ -1 +1 @@
1
- {"version":3,"file":"wallet-getPermissions.mjs","sourceRoot":"","sources":["../src/wallet-getPermissions.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,6BAA6B,EAC7B,uBAAuB,EACxB,4CAA4C;AAK7C,OAAO,EAEL,WAAW,EAGZ,wCAAwC;AAOzC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAgB;AAEzE,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,WAAW,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC;IACzC,cAAc,EAAE,4BAA4B;IAC5C,SAAS,EAAE;QACT,uBAAuB,EAAE,IAAI;QAC7B,WAAW,EAAE,IAAI;KAClB;CACF,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,KAAK,UAAU,4BAA4B,CACzC,IAA4B,EAC5B,GAAiC,EACjC,KAAqC,EACrC,GAA6B,EAC7B,EACE,uBAAuB,EACvB,WAAW,GASZ;IAED,MAAM,WAAW,GAAG,EAAE,GAAG,uBAAuB,EAAE,EAAE,CAAC;IACrD,MAAM,eAAe,GAAG,WAAW,CAAC,6BAA6B,CAAC,CAAC;IACnE,MAAM,iBAAiB,GAAG,eAAe,EAAE,OAAO,EAAE,IAAI,CACtD,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,gBAAgB,CACxC,EAAE,KAAsC,CAAC;IAC1C,OAAO,WAAW,CAAC,6BAA6B,CAAC,CAAC;IAElD,IAAI,iBAAiB,EAAE;QACrB,oEAAoE;QACpE,4DAA4D;QAC5D,MAAM,WAAW,GAAG,WAAW,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAEtD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,WAAW,CAAC,iBAAiB,CAAC,WAAW,CAAC,GAAG;gBAC3C,GAAG,eAAe;gBAClB,gBAAgB,EAAE,iBAAiB,CAAC,WAAW;gBAC/C,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,WAAW,CAAC,wBAAwB;wBAC1C,KAAK,EAAE,WAAW;qBACnB;iBACF;aACF,CAAC;SACH;QAED,MAAM,WAAW,GAAG,uBAAuB,CAAC,iBAAiB,CAAC,CAAC;QAE/D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,WAAW,CAAC,cAAc,CAAC,eAAe,CAAC,GAAG;gBAC5C,GAAG,eAAe;gBAClB,gBAAgB,EAAE,cAAc,CAAC,eAAe;gBAChD,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,WAAW,CAAC,wBAAwB;wBAC1C,KAAK,EAAE,WAAW;qBACnB;iBACF;aACF,CAAC;SACH;KACF;IAED,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACxC,OAAO,GAAG,EAAE,CAAC;AACf,CAAC","sourcesContent":["import type { Caip25CaveatValue } from '@metamask/chain-agnostic-permission';\nimport {\n Caip25CaveatType,\n Caip25EndowmentPermissionName,\n getPermittedEthChainIds,\n} from '@metamask/chain-agnostic-permission';\nimport type {\n AsyncJsonRpcEngineNextCallback,\n JsonRpcEngineEndCallback,\n} from '@metamask/json-rpc-engine';\nimport {\n type CaveatSpecificationConstraint,\n MethodNames,\n type PermissionController,\n type PermissionSpecificationConstraint,\n} from '@metamask/permission-controller';\nimport type {\n Json,\n JsonRpcRequest,\n PendingJsonRpcResponse,\n} from '@metamask/utils';\n\nimport { CaveatTypes, EndowmentTypes, RestrictedMethods } from './types';\n\nexport const getPermissionsHandler = {\n methodNames: [MethodNames.GetPermissions],\n implementation: getPermissionsImplementation,\n hookNames: {\n getPermissionsForOrigin: true,\n getAccounts: true,\n },\n};\n\n/**\n * Get Permissions implementation to be used in JsonRpcEngine middleware, specifically for `wallet_getPermissions` RPC method.\n * It makes use of a CAIP-25 endowment permission returned by `getPermissionsForOrigin` hook, if it exists.\n *\n * @param _req - The JsonRpcEngine request - unused\n * @param res - The JsonRpcEngine result object\n * @param _next - JsonRpcEngine next() callback - unused\n * @param end - JsonRpcEngine end() callback\n * @param options - Method hooks passed to the method implementation\n * @param options.getPermissionsForOrigin - The specific method hook needed for this method implementation\n * @param options.getAccounts - A hook that returns the permitted eth accounts for the origin sorted by lastSelected.\n * @returns A promise that resolves to nothing\n */\nasync function getPermissionsImplementation(\n _req: JsonRpcRequest<Json[]>,\n res: PendingJsonRpcResponse<Json>,\n _next: AsyncJsonRpcEngineNextCallback,\n end: JsonRpcEngineEndCallback,\n {\n getPermissionsForOrigin,\n getAccounts,\n }: {\n getPermissionsForOrigin: () => ReturnType<\n PermissionController<\n PermissionSpecificationConstraint,\n CaveatSpecificationConstraint\n >['getPermissions']\n >;\n getAccounts: (options?: { ignoreLock?: boolean }) => string[];\n },\n) {\n const permissions = { ...getPermissionsForOrigin() };\n const caip25Endowment = permissions[Caip25EndowmentPermissionName];\n const caip25CaveatValue = caip25Endowment?.caveats?.find(\n ({ type }) => type === Caip25CaveatType,\n )?.value as Caip25CaveatValue | undefined;\n delete permissions[Caip25EndowmentPermissionName];\n\n if (caip25CaveatValue) {\n // We cannot derive ethAccounts directly from the CAIP-25 permission\n // because the accounts will not be in order of lastSelected\n const ethAccounts = getAccounts({ ignoreLock: true });\n\n if (ethAccounts.length > 0) {\n permissions[RestrictedMethods.EthAccounts] = {\n ...caip25Endowment,\n parentCapability: RestrictedMethods.EthAccounts,\n caveats: [\n {\n type: CaveatTypes.RestrictReturnedAccounts,\n value: ethAccounts,\n },\n ],\n };\n }\n\n const ethChainIds = getPermittedEthChainIds(caip25CaveatValue);\n\n if (ethChainIds.length > 0) {\n permissions[EndowmentTypes.PermittedChains] = {\n ...caip25Endowment,\n parentCapability: EndowmentTypes.PermittedChains,\n caveats: [\n {\n type: CaveatTypes.RestrictNetworkSwitching,\n value: ethChainIds,\n },\n ],\n };\n }\n }\n\n res.result = Object.values(permissions);\n return end();\n}\n"]}
1
+ {"version":3,"file":"wallet-getPermissions.mjs","sourceRoot":"","sources":["../src/wallet-getPermissions.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,6BAA6B,EAC7B,uBAAuB,EACxB,4CAA4C;AAK7C,OAAO,EAEL,WAAW,EAGZ,wCAAwC;AAOzC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAgB;AAEzE,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,WAAW,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC;IACzC,cAAc,EAAE,4BAA4B;IAC5C,SAAS,EAAE;QACT,uBAAuB,EAAE,IAAI;QAC7B,WAAW,EAAE,IAAI;KAClB;CACF,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,KAAK,UAAU,4BAA4B,CACzC,IAA4B,EAC5B,GAA2B,EAC3B,KAAqC,EACrC,GAA6B,EAC7B,EACE,uBAAuB,EACvB,WAAW,GASZ;IAED,MAAM,WAAW,GAAG,EAAE,GAAG,uBAAuB,EAAE,EAAE,CAAC;IACrD,MAAM,eAAe,GAAG,WAAW,CAAC,6BAA6B,CAAC,CAAC;IACnE,MAAM,iBAAiB,GAAG,eAAe,EAAE,OAAO,EAAE,IAAI,CACtD,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,gBAAgB,CACxC,EAAE,KAAsC,CAAC;IAC1C,OAAO,WAAW,CAAC,6BAA6B,CAAC,CAAC;IAElD,IAAI,iBAAiB,EAAE;QACrB,oEAAoE;QACpE,4DAA4D;QAC5D,MAAM,WAAW,GAAG,WAAW,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAEtD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,WAAW,CAAC,iBAAiB,CAAC,WAAW,CAAC,GAAG;gBAC3C,GAAG,eAAe;gBAClB,gBAAgB,EAAE,iBAAiB,CAAC,WAAW;gBAC/C,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,WAAW,CAAC,wBAAwB;wBAC1C,KAAK,EAAE,WAAW;qBACnB;iBACF;aACF,CAAC;SACH;QAED,MAAM,WAAW,GAAG,uBAAuB,CAAC,iBAAiB,CAAC,CAAC;QAE/D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,WAAW,CAAC,cAAc,CAAC,eAAe,CAAC,GAAG;gBAC5C,GAAG,eAAe;gBAClB,gBAAgB,EAAE,cAAc,CAAC,eAAe;gBAChD,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,WAAW,CAAC,wBAAwB;wBAC1C,KAAK,EAAE,WAAW;qBACnB;iBACF;aACF,CAAC;SACH;KACF;IAED,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACxC,OAAO,GAAG,EAAE,CAAC;AACf,CAAC","sourcesContent":["import type { Caip25CaveatValue } from '@metamask/chain-agnostic-permission';\nimport {\n Caip25CaveatType,\n Caip25EndowmentPermissionName,\n getPermittedEthChainIds,\n} from '@metamask/chain-agnostic-permission';\nimport type {\n AsyncJsonRpcEngineNextCallback,\n JsonRpcEngineEndCallback,\n} from '@metamask/json-rpc-engine';\nimport {\n type CaveatSpecificationConstraint,\n MethodNames,\n type PermissionController,\n type PermissionSpecificationConstraint,\n} from '@metamask/permission-controller';\nimport type {\n Json,\n JsonRpcRequest,\n PendingJsonRpcResponse,\n} from '@metamask/utils';\n\nimport { CaveatTypes, EndowmentTypes, RestrictedMethods } from './types';\n\nexport const getPermissionsHandler = {\n methodNames: [MethodNames.GetPermissions],\n implementation: getPermissionsImplementation,\n hookNames: {\n getPermissionsForOrigin: true,\n getAccounts: true,\n },\n};\n\n/**\n * Get Permissions implementation to be used in JsonRpcEngine middleware, specifically for `wallet_getPermissions` RPC method.\n * It makes use of a CAIP-25 endowment permission returned by `getPermissionsForOrigin` hook, if it exists.\n *\n * @param _req - The JsonRpcEngine request - unused\n * @param res - The JsonRpcEngine result object\n * @param _next - JsonRpcEngine next() callback - unused\n * @param end - JsonRpcEngine end() callback\n * @param options - Method hooks passed to the method implementation\n * @param options.getPermissionsForOrigin - The specific method hook needed for this method implementation\n * @param options.getAccounts - A hook that returns the permitted eth accounts for the origin sorted by lastSelected.\n * @returns A promise that resolves to nothing\n */\nasync function getPermissionsImplementation(\n _req: JsonRpcRequest<Json[]>,\n res: PendingJsonRpcResponse,\n _next: AsyncJsonRpcEngineNextCallback,\n end: JsonRpcEngineEndCallback,\n {\n getPermissionsForOrigin,\n getAccounts,\n }: {\n getPermissionsForOrigin: () => ReturnType<\n PermissionController<\n PermissionSpecificationConstraint,\n CaveatSpecificationConstraint\n >['getPermissions']\n >;\n getAccounts: (options?: { ignoreLock?: boolean }) => string[];\n },\n) {\n const permissions = { ...getPermissionsForOrigin() };\n const caip25Endowment = permissions[Caip25EndowmentPermissionName];\n const caip25CaveatValue = caip25Endowment?.caveats?.find(\n ({ type }) => type === Caip25CaveatType,\n )?.value as Caip25CaveatValue | undefined;\n delete permissions[Caip25EndowmentPermissionName];\n\n if (caip25CaveatValue) {\n // We cannot derive ethAccounts directly from the CAIP-25 permission\n // because the accounts will not be in order of lastSelected\n const ethAccounts = getAccounts({ ignoreLock: true });\n\n if (ethAccounts.length > 0) {\n permissions[RestrictedMethods.EthAccounts] = {\n ...caip25Endowment,\n parentCapability: RestrictedMethods.EthAccounts,\n caveats: [\n {\n type: CaveatTypes.RestrictReturnedAccounts,\n value: ethAccounts,\n },\n ],\n };\n }\n\n const ethChainIds = getPermittedEthChainIds(caip25CaveatValue);\n\n if (ethChainIds.length > 0) {\n permissions[EndowmentTypes.PermittedChains] = {\n ...caip25Endowment,\n parentCapability: EndowmentTypes.PermittedChains,\n caveats: [\n {\n type: CaveatTypes.RestrictNetworkSwitching,\n value: ethChainIds,\n },\n ],\n };\n }\n }\n\n res.result = Object.values(permissions);\n return end();\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"wallet-requestPermissions.cjs","sourceRoot":"","sources":["../src/wallet-requestPermissions.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Caip25CaveatValue } from '@metamask/chain-agnostic-permission';\nimport {\n Caip25CaveatType,\n Caip25EndowmentPermissionName,\n getPermittedEthChainIds,\n} from '@metamask/chain-agnostic-permission';\nimport { isPlainObject } from '@metamask/controller-utils';\nimport type {\n AsyncJsonRpcEngineNextCallback,\n JsonRpcEngineEndCallback,\n} from '@metamask/json-rpc-engine';\nimport {\n type Caveat,\n type CaveatSpecificationConstraint,\n invalidParams,\n MethodNames,\n type PermissionController,\n type PermissionSpecificationConstraint,\n type RequestedPermissions,\n type ValidPermission,\n} from '@metamask/permission-controller';\nimport type {\n Json,\n JsonRpcRequest,\n PendingJsonRpcResponse,\n} from '@metamask/utils';\nimport { pick } from 'lodash';\n\nimport { CaveatTypes, EndowmentTypes, RestrictedMethods } from './types';\n\nexport const requestPermissionsHandler = {\n methodNames: [MethodNames.RequestPermissions],\n implementation: requestPermissionsImplementation,\n hookNames: {\n getAccounts: true,\n requestPermissionsForOrigin: true,\n getCaip25PermissionFromLegacyPermissionsForOrigin: true,\n },\n};\n\ntype AbstractPermissionController = PermissionController<\n PermissionSpecificationConstraint,\n CaveatSpecificationConstraint\n>;\n\ntype GrantedPermissions = Awaited<\n ReturnType<AbstractPermissionController['requestPermissions']>\n>[0];\n\n/**\n * Request Permissions implementation to be used in JsonRpcEngine middleware, specifically for `wallet_requestPermissions` RPC method.\n * The request object is expected to contain a CAIP-25 endowment permission.\n *\n * @param req - The JsonRpcEngine request\n * @param res - The JsonRpcEngine result object\n * @param _next - JsonRpcEngine next() callback - unused\n * @param end - JsonRpcEngine end() callback\n * @param options - Method hooks passed to the method implementation\n * @param options.getAccounts - A hook that returns the permitted eth accounts for the origin sorted by lastSelected.\n * @param options.getCaip25PermissionFromLegacyPermissionsForOrigin - A hook that returns a CAIP-25 permission from a legacy `eth_accounts` and `endowment:permitted-chains` permission.\n * @param options.requestPermissionsForOrigin - A hook that requests CAIP-25 permissions for the origin.\n * @returns Nothing.\n */\nasync function requestPermissionsImplementation(\n req: JsonRpcRequest<[RequestedPermissions]> & { origin: string },\n res: PendingJsonRpcResponse<Json>,\n _next: AsyncJsonRpcEngineNextCallback,\n end: JsonRpcEngineEndCallback,\n {\n getAccounts,\n requestPermissionsForOrigin,\n getCaip25PermissionFromLegacyPermissionsForOrigin,\n }: {\n getAccounts: () => string[];\n requestPermissionsForOrigin: (\n requestedPermissions: RequestedPermissions,\n ) => Promise<[GrantedPermissions]>;\n getCaip25PermissionFromLegacyPermissionsForOrigin: (\n requestedPermissions?: RequestedPermissions,\n ) => RequestedPermissions;\n },\n) {\n const { params } = req;\n\n if (!Array.isArray(params) || !isPlainObject(params[0])) {\n return end(invalidParams({ data: { request: req } }));\n }\n\n let [requestedPermissions] = params;\n delete requestedPermissions[Caip25EndowmentPermissionName];\n\n const caip25EquivalentPermissions: Partial<\n Pick<RequestedPermissions, 'eth_accounts' | 'endowment:permitted-chains'>\n > = pick(requestedPermissions, [\n RestrictedMethods.EthAccounts,\n EndowmentTypes.PermittedChains,\n ]);\n delete requestedPermissions[RestrictedMethods.EthAccounts];\n delete requestedPermissions[EndowmentTypes.PermittedChains];\n\n const hasCaip25EquivalentPermissions =\n Object.keys(caip25EquivalentPermissions).length > 0;\n\n if (hasCaip25EquivalentPermissions) {\n const caip25Permission = getCaip25PermissionFromLegacyPermissionsForOrigin(\n caip25EquivalentPermissions,\n );\n requestedPermissions = { ...requestedPermissions, ...caip25Permission };\n }\n\n let grantedPermissions: GrantedPermissions = {};\n\n const [frozenGrantedPermissions] =\n await requestPermissionsForOrigin(requestedPermissions);\n\n grantedPermissions = { ...frozenGrantedPermissions };\n\n if (hasCaip25EquivalentPermissions) {\n const caip25Endowment = grantedPermissions[Caip25EndowmentPermissionName];\n\n if (!caip25Endowment) {\n throw new Error(\n `could not find ${Caip25EndowmentPermissionName} permission.`,\n );\n }\n\n const caip25CaveatValue = caip25Endowment.caveats?.find(\n ({ type }) => type === Caip25CaveatType,\n )?.value as Caip25CaveatValue | undefined;\n if (!caip25CaveatValue) {\n throw new Error(\n `could not find ${Caip25CaveatType} in granted ${Caip25EndowmentPermissionName} permission.`,\n );\n }\n\n delete grantedPermissions[Caip25EndowmentPermissionName];\n // We cannot derive correct eth_accounts value directly from the CAIP-25 permission\n // because the accounts will not be in order of lastSelected\n const ethAccounts = getAccounts();\n\n grantedPermissions[RestrictedMethods.EthAccounts] = {\n ...caip25Endowment,\n parentCapability: RestrictedMethods.EthAccounts,\n caveats: [\n {\n type: CaveatTypes.RestrictReturnedAccounts,\n value: ethAccounts,\n },\n ],\n };\n\n const ethChainIds = getPermittedEthChainIds(caip25CaveatValue);\n\n if (ethChainIds.length > 0) {\n grantedPermissions[EndowmentTypes.PermittedChains] = {\n ...caip25Endowment,\n parentCapability: EndowmentTypes.PermittedChains,\n caveats: [\n {\n type: CaveatTypes.RestrictNetworkSwitching,\n value: ethChainIds,\n },\n ],\n };\n }\n }\n\n res.result = Object.values(grantedPermissions).filter(\n (\n permission: ValidPermission<string, Caveat<string, Json>> | undefined,\n ): permission is ValidPermission<string, Caveat<string, Json>> =>\n permission !== undefined,\n );\n return end();\n}\n"]}
1
+ {"version":3,"file":"wallet-requestPermissions.cjs","sourceRoot":"","sources":["../src/wallet-requestPermissions.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Caip25CaveatValue } from '@metamask/chain-agnostic-permission';\nimport {\n Caip25CaveatType,\n Caip25EndowmentPermissionName,\n getPermittedEthChainIds,\n} from '@metamask/chain-agnostic-permission';\nimport { isPlainObject } from '@metamask/controller-utils';\nimport type {\n AsyncJsonRpcEngineNextCallback,\n JsonRpcEngineEndCallback,\n} from '@metamask/json-rpc-engine';\nimport {\n type Caveat,\n type CaveatSpecificationConstraint,\n invalidParams,\n MethodNames,\n type PermissionController,\n type PermissionSpecificationConstraint,\n type RequestedPermissions,\n type ValidPermission,\n} from '@metamask/permission-controller';\nimport type {\n Json,\n JsonRpcRequest,\n PendingJsonRpcResponse,\n} from '@metamask/utils';\nimport { pick } from 'lodash';\n\nimport { CaveatTypes, EndowmentTypes, RestrictedMethods } from './types';\n\nexport const requestPermissionsHandler = {\n methodNames: [MethodNames.RequestPermissions],\n implementation: requestPermissionsImplementation,\n hookNames: {\n getAccounts: true,\n requestPermissionsForOrigin: true,\n getCaip25PermissionFromLegacyPermissionsForOrigin: true,\n },\n};\n\ntype AbstractPermissionController = PermissionController<\n PermissionSpecificationConstraint,\n CaveatSpecificationConstraint\n>;\n\ntype GrantedPermissions = Awaited<\n ReturnType<AbstractPermissionController['requestPermissions']>\n>[0];\n\n/**\n * Request Permissions implementation to be used in JsonRpcEngine middleware, specifically for `wallet_requestPermissions` RPC method.\n * The request object is expected to contain a CAIP-25 endowment permission.\n *\n * @param req - The JsonRpcEngine request\n * @param res - The JsonRpcEngine result object\n * @param _next - JsonRpcEngine next() callback - unused\n * @param end - JsonRpcEngine end() callback\n * @param options - Method hooks passed to the method implementation\n * @param options.getAccounts - A hook that returns the permitted eth accounts for the origin sorted by lastSelected.\n * @param options.getCaip25PermissionFromLegacyPermissionsForOrigin - A hook that returns a CAIP-25 permission from a legacy `eth_accounts` and `endowment:permitted-chains` permission.\n * @param options.requestPermissionsForOrigin - A hook that requests CAIP-25 permissions for the origin.\n * @returns Nothing.\n */\nasync function requestPermissionsImplementation(\n req: JsonRpcRequest<[RequestedPermissions]> & { origin: string },\n res: PendingJsonRpcResponse,\n _next: AsyncJsonRpcEngineNextCallback,\n end: JsonRpcEngineEndCallback,\n {\n getAccounts,\n requestPermissionsForOrigin,\n getCaip25PermissionFromLegacyPermissionsForOrigin,\n }: {\n getAccounts: () => string[];\n requestPermissionsForOrigin: (\n requestedPermissions: RequestedPermissions,\n ) => Promise<[GrantedPermissions]>;\n getCaip25PermissionFromLegacyPermissionsForOrigin: (\n requestedPermissions?: RequestedPermissions,\n ) => RequestedPermissions;\n },\n) {\n const { params } = req;\n\n if (!Array.isArray(params) || !isPlainObject(params[0])) {\n return end(invalidParams({ data: { request: req } }));\n }\n\n let [requestedPermissions] = params;\n delete requestedPermissions[Caip25EndowmentPermissionName];\n\n const caip25EquivalentPermissions: Partial<\n Pick<RequestedPermissions, 'eth_accounts' | 'endowment:permitted-chains'>\n > = pick(requestedPermissions, [\n RestrictedMethods.EthAccounts,\n EndowmentTypes.PermittedChains,\n ]);\n delete requestedPermissions[RestrictedMethods.EthAccounts];\n delete requestedPermissions[EndowmentTypes.PermittedChains];\n\n const hasCaip25EquivalentPermissions =\n Object.keys(caip25EquivalentPermissions).length > 0;\n\n if (hasCaip25EquivalentPermissions) {\n const caip25Permission = getCaip25PermissionFromLegacyPermissionsForOrigin(\n caip25EquivalentPermissions,\n );\n requestedPermissions = { ...requestedPermissions, ...caip25Permission };\n }\n\n let grantedPermissions: GrantedPermissions = {};\n\n const [frozenGrantedPermissions] =\n await requestPermissionsForOrigin(requestedPermissions);\n\n grantedPermissions = { ...frozenGrantedPermissions };\n\n if (hasCaip25EquivalentPermissions) {\n const caip25Endowment = grantedPermissions[Caip25EndowmentPermissionName];\n\n if (!caip25Endowment) {\n throw new Error(\n `could not find ${Caip25EndowmentPermissionName} permission.`,\n );\n }\n\n const caip25CaveatValue = caip25Endowment.caveats?.find(\n ({ type }) => type === Caip25CaveatType,\n )?.value as Caip25CaveatValue | undefined;\n if (!caip25CaveatValue) {\n throw new Error(\n `could not find ${Caip25CaveatType} in granted ${Caip25EndowmentPermissionName} permission.`,\n );\n }\n\n delete grantedPermissions[Caip25EndowmentPermissionName];\n // We cannot derive correct eth_accounts value directly from the CAIP-25 permission\n // because the accounts will not be in order of lastSelected\n const ethAccounts = getAccounts();\n\n grantedPermissions[RestrictedMethods.EthAccounts] = {\n ...caip25Endowment,\n parentCapability: RestrictedMethods.EthAccounts,\n caveats: [\n {\n type: CaveatTypes.RestrictReturnedAccounts,\n value: ethAccounts,\n },\n ],\n };\n\n const ethChainIds = getPermittedEthChainIds(caip25CaveatValue);\n\n if (ethChainIds.length > 0) {\n grantedPermissions[EndowmentTypes.PermittedChains] = {\n ...caip25Endowment,\n parentCapability: EndowmentTypes.PermittedChains,\n caveats: [\n {\n type: CaveatTypes.RestrictNetworkSwitching,\n value: ethChainIds,\n },\n ],\n };\n }\n }\n\n res.result = Object.values(grantedPermissions).filter(\n (\n permission: ValidPermission<string, Caveat<string, Json>> | undefined,\n ): permission is ValidPermission<string, Caveat<string, Json>> =>\n permission !== undefined,\n );\n return end();\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import type { AsyncJsonRpcEngineNextCallback, JsonRpcEngineEndCallback } from "@metamask/json-rpc-engine";
2
2
  import { type CaveatSpecificationConstraint, MethodNames, type PermissionController, type PermissionSpecificationConstraint, type RequestedPermissions } from "@metamask/permission-controller";
3
- import type { Json, JsonRpcRequest, PendingJsonRpcResponse } from "@metamask/utils";
3
+ import type { JsonRpcRequest, PendingJsonRpcResponse } from "@metamask/utils";
4
4
  export declare const requestPermissionsHandler: {
5
5
  methodNames: MethodNames[];
6
6
  implementation: typeof requestPermissionsImplementation;
@@ -28,7 +28,7 @@ type GrantedPermissions = Awaited<ReturnType<AbstractPermissionController['reque
28
28
  */
29
29
  declare function requestPermissionsImplementation(req: JsonRpcRequest<[RequestedPermissions]> & {
30
30
  origin: string;
31
- }, res: PendingJsonRpcResponse<Json>, _next: AsyncJsonRpcEngineNextCallback, end: JsonRpcEngineEndCallback, { getAccounts, requestPermissionsForOrigin, getCaip25PermissionFromLegacyPermissionsForOrigin, }: {
31
+ }, res: PendingJsonRpcResponse, _next: AsyncJsonRpcEngineNextCallback, end: JsonRpcEngineEndCallback, { getAccounts, requestPermissionsForOrigin, getCaip25PermissionFromLegacyPermissionsForOrigin, }: {
32
32
  getAccounts: () => string[];
33
33
  requestPermissionsForOrigin: (requestedPermissions: RequestedPermissions) => Promise<[GrantedPermissions]>;
34
34
  getCaip25PermissionFromLegacyPermissionsForOrigin: (requestedPermissions?: RequestedPermissions) => RequestedPermissions;
@@ -1 +1 @@
1
- {"version":3,"file":"wallet-requestPermissions.d.cts","sourceRoot":"","sources":["../src/wallet-requestPermissions.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,8BAA8B,EAC9B,wBAAwB,EACzB,kCAAkC;AACnC,OAAO,EAEL,KAAK,6BAA6B,EAElC,WAAW,EACX,KAAK,oBAAoB,EACzB,KAAK,iCAAiC,EACtC,KAAK,oBAAoB,EAE1B,wCAAwC;AACzC,OAAO,KAAK,EACV,IAAI,EACJ,cAAc,EACd,sBAAsB,EACvB,wBAAwB;AAKzB,eAAO,MAAM,yBAAyB;;;;;;;;CAQrC,CAAC;AAEF,KAAK,4BAA4B,GAAG,oBAAoB,CACtD,iCAAiC,EACjC,6BAA6B,CAC9B,CAAC;AAEF,KAAK,kBAAkB,GAAG,OAAO,CAC/B,UAAU,CAAC,4BAA4B,CAAC,oBAAoB,CAAC,CAAC,CAC/D,CAAC,CAAC,CAAC,CAAC;AAEL;;;;;;;;;;;;;GAaG;AACH,iBAAe,gCAAgC,CAC7C,GAAG,EAAE,cAAc,CAAC,CAAC,oBAAoB,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EAChE,GAAG,EAAE,sBAAsB,CAAC,IAAI,CAAC,EACjC,KAAK,EAAE,8BAA8B,EACrC,GAAG,EAAE,wBAAwB,EAC7B,EACE,WAAW,EACX,2BAA2B,EAC3B,iDAAiD,GAClD,EAAE;IACD,WAAW,EAAE,MAAM,MAAM,EAAE,CAAC;IAC5B,2BAA2B,EAAE,CAC3B,oBAAoB,EAAE,oBAAoB,KACvC,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACnC,iDAAiD,EAAE,CACjD,oBAAoB,CAAC,EAAE,oBAAoB,KACxC,oBAAoB,CAAC;CAC3B,iBA8FF"}
1
+ {"version":3,"file":"wallet-requestPermissions.d.cts","sourceRoot":"","sources":["../src/wallet-requestPermissions.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,8BAA8B,EAC9B,wBAAwB,EACzB,kCAAkC;AACnC,OAAO,EAEL,KAAK,6BAA6B,EAElC,WAAW,EACX,KAAK,oBAAoB,EACzB,KAAK,iCAAiC,EACtC,KAAK,oBAAoB,EAE1B,wCAAwC;AACzC,OAAO,KAAK,EAEV,cAAc,EACd,sBAAsB,EACvB,wBAAwB;AAKzB,eAAO,MAAM,yBAAyB;;;;;;;;CAQrC,CAAC;AAEF,KAAK,4BAA4B,GAAG,oBAAoB,CACtD,iCAAiC,EACjC,6BAA6B,CAC9B,CAAC;AAEF,KAAK,kBAAkB,GAAG,OAAO,CAC/B,UAAU,CAAC,4BAA4B,CAAC,oBAAoB,CAAC,CAAC,CAC/D,CAAC,CAAC,CAAC,CAAC;AAEL;;;;;;;;;;;;;GAaG;AACH,iBAAe,gCAAgC,CAC7C,GAAG,EAAE,cAAc,CAAC,CAAC,oBAAoB,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EAChE,GAAG,EAAE,sBAAsB,EAC3B,KAAK,EAAE,8BAA8B,EACrC,GAAG,EAAE,wBAAwB,EAC7B,EACE,WAAW,EACX,2BAA2B,EAC3B,iDAAiD,GAClD,EAAE;IACD,WAAW,EAAE,MAAM,MAAM,EAAE,CAAC;IAC5B,2BAA2B,EAAE,CAC3B,oBAAoB,EAAE,oBAAoB,KACvC,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACnC,iDAAiD,EAAE,CACjD,oBAAoB,CAAC,EAAE,oBAAoB,KACxC,oBAAoB,CAAC;CAC3B,iBA8FF"}
@@ -1,6 +1,6 @@
1
1
  import type { AsyncJsonRpcEngineNextCallback, JsonRpcEngineEndCallback } from "@metamask/json-rpc-engine";
2
2
  import { type CaveatSpecificationConstraint, MethodNames, type PermissionController, type PermissionSpecificationConstraint, type RequestedPermissions } from "@metamask/permission-controller";
3
- import type { Json, JsonRpcRequest, PendingJsonRpcResponse } from "@metamask/utils";
3
+ import type { JsonRpcRequest, PendingJsonRpcResponse } from "@metamask/utils";
4
4
  export declare const requestPermissionsHandler: {
5
5
  methodNames: MethodNames[];
6
6
  implementation: typeof requestPermissionsImplementation;
@@ -28,7 +28,7 @@ type GrantedPermissions = Awaited<ReturnType<AbstractPermissionController['reque
28
28
  */
29
29
  declare function requestPermissionsImplementation(req: JsonRpcRequest<[RequestedPermissions]> & {
30
30
  origin: string;
31
- }, res: PendingJsonRpcResponse<Json>, _next: AsyncJsonRpcEngineNextCallback, end: JsonRpcEngineEndCallback, { getAccounts, requestPermissionsForOrigin, getCaip25PermissionFromLegacyPermissionsForOrigin, }: {
31
+ }, res: PendingJsonRpcResponse, _next: AsyncJsonRpcEngineNextCallback, end: JsonRpcEngineEndCallback, { getAccounts, requestPermissionsForOrigin, getCaip25PermissionFromLegacyPermissionsForOrigin, }: {
32
32
  getAccounts: () => string[];
33
33
  requestPermissionsForOrigin: (requestedPermissions: RequestedPermissions) => Promise<[GrantedPermissions]>;
34
34
  getCaip25PermissionFromLegacyPermissionsForOrigin: (requestedPermissions?: RequestedPermissions) => RequestedPermissions;
@@ -1 +1 @@
1
- {"version":3,"file":"wallet-requestPermissions.d.mts","sourceRoot":"","sources":["../src/wallet-requestPermissions.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,8BAA8B,EAC9B,wBAAwB,EACzB,kCAAkC;AACnC,OAAO,EAEL,KAAK,6BAA6B,EAElC,WAAW,EACX,KAAK,oBAAoB,EACzB,KAAK,iCAAiC,EACtC,KAAK,oBAAoB,EAE1B,wCAAwC;AACzC,OAAO,KAAK,EACV,IAAI,EACJ,cAAc,EACd,sBAAsB,EACvB,wBAAwB;AAKzB,eAAO,MAAM,yBAAyB;;;;;;;;CAQrC,CAAC;AAEF,KAAK,4BAA4B,GAAG,oBAAoB,CACtD,iCAAiC,EACjC,6BAA6B,CAC9B,CAAC;AAEF,KAAK,kBAAkB,GAAG,OAAO,CAC/B,UAAU,CAAC,4BAA4B,CAAC,oBAAoB,CAAC,CAAC,CAC/D,CAAC,CAAC,CAAC,CAAC;AAEL;;;;;;;;;;;;;GAaG;AACH,iBAAe,gCAAgC,CAC7C,GAAG,EAAE,cAAc,CAAC,CAAC,oBAAoB,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EAChE,GAAG,EAAE,sBAAsB,CAAC,IAAI,CAAC,EACjC,KAAK,EAAE,8BAA8B,EACrC,GAAG,EAAE,wBAAwB,EAC7B,EACE,WAAW,EACX,2BAA2B,EAC3B,iDAAiD,GAClD,EAAE;IACD,WAAW,EAAE,MAAM,MAAM,EAAE,CAAC;IAC5B,2BAA2B,EAAE,CAC3B,oBAAoB,EAAE,oBAAoB,KACvC,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACnC,iDAAiD,EAAE,CACjD,oBAAoB,CAAC,EAAE,oBAAoB,KACxC,oBAAoB,CAAC;CAC3B,iBA8FF"}
1
+ {"version":3,"file":"wallet-requestPermissions.d.mts","sourceRoot":"","sources":["../src/wallet-requestPermissions.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,8BAA8B,EAC9B,wBAAwB,EACzB,kCAAkC;AACnC,OAAO,EAEL,KAAK,6BAA6B,EAElC,WAAW,EACX,KAAK,oBAAoB,EACzB,KAAK,iCAAiC,EACtC,KAAK,oBAAoB,EAE1B,wCAAwC;AACzC,OAAO,KAAK,EAEV,cAAc,EACd,sBAAsB,EACvB,wBAAwB;AAKzB,eAAO,MAAM,yBAAyB;;;;;;;;CAQrC,CAAC;AAEF,KAAK,4BAA4B,GAAG,oBAAoB,CACtD,iCAAiC,EACjC,6BAA6B,CAC9B,CAAC;AAEF,KAAK,kBAAkB,GAAG,OAAO,CAC/B,UAAU,CAAC,4BAA4B,CAAC,oBAAoB,CAAC,CAAC,CAC/D,CAAC,CAAC,CAAC,CAAC;AAEL;;;;;;;;;;;;;GAaG;AACH,iBAAe,gCAAgC,CAC7C,GAAG,EAAE,cAAc,CAAC,CAAC,oBAAoB,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EAChE,GAAG,EAAE,sBAAsB,EAC3B,KAAK,EAAE,8BAA8B,EACrC,GAAG,EAAE,wBAAwB,EAC7B,EACE,WAAW,EACX,2BAA2B,EAC3B,iDAAiD,GAClD,EAAE;IACD,WAAW,EAAE,MAAM,MAAM,EAAE,CAAC;IAC5B,2BAA2B,EAAE,CAC3B,oBAAoB,EAAE,oBAAoB,KACvC,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACnC,iDAAiD,EAAE,CACjD,oBAAoB,CAAC,EAAE,oBAAoB,KACxC,oBAAoB,CAAC;CAC3B,iBA8FF"}
@@ -1 +1 @@
1
- {"version":3,"file":"wallet-requestPermissions.mjs","sourceRoot":"","sources":["../src/wallet-requestPermissions.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Caip25CaveatValue } from '@metamask/chain-agnostic-permission';\nimport {\n Caip25CaveatType,\n Caip25EndowmentPermissionName,\n getPermittedEthChainIds,\n} from '@metamask/chain-agnostic-permission';\nimport { isPlainObject } from '@metamask/controller-utils';\nimport type {\n AsyncJsonRpcEngineNextCallback,\n JsonRpcEngineEndCallback,\n} from '@metamask/json-rpc-engine';\nimport {\n type Caveat,\n type CaveatSpecificationConstraint,\n invalidParams,\n MethodNames,\n type PermissionController,\n type PermissionSpecificationConstraint,\n type RequestedPermissions,\n type ValidPermission,\n} from '@metamask/permission-controller';\nimport type {\n Json,\n JsonRpcRequest,\n PendingJsonRpcResponse,\n} from '@metamask/utils';\nimport { pick } from 'lodash';\n\nimport { CaveatTypes, EndowmentTypes, RestrictedMethods } from './types';\n\nexport const requestPermissionsHandler = {\n methodNames: [MethodNames.RequestPermissions],\n implementation: requestPermissionsImplementation,\n hookNames: {\n getAccounts: true,\n requestPermissionsForOrigin: true,\n getCaip25PermissionFromLegacyPermissionsForOrigin: true,\n },\n};\n\ntype AbstractPermissionController = PermissionController<\n PermissionSpecificationConstraint,\n CaveatSpecificationConstraint\n>;\n\ntype GrantedPermissions = Awaited<\n ReturnType<AbstractPermissionController['requestPermissions']>\n>[0];\n\n/**\n * Request Permissions implementation to be used in JsonRpcEngine middleware, specifically for `wallet_requestPermissions` RPC method.\n * The request object is expected to contain a CAIP-25 endowment permission.\n *\n * @param req - The JsonRpcEngine request\n * @param res - The JsonRpcEngine result object\n * @param _next - JsonRpcEngine next() callback - unused\n * @param end - JsonRpcEngine end() callback\n * @param options - Method hooks passed to the method implementation\n * @param options.getAccounts - A hook that returns the permitted eth accounts for the origin sorted by lastSelected.\n * @param options.getCaip25PermissionFromLegacyPermissionsForOrigin - A hook that returns a CAIP-25 permission from a legacy `eth_accounts` and `endowment:permitted-chains` permission.\n * @param options.requestPermissionsForOrigin - A hook that requests CAIP-25 permissions for the origin.\n * @returns Nothing.\n */\nasync function requestPermissionsImplementation(\n req: JsonRpcRequest<[RequestedPermissions]> & { origin: string },\n res: PendingJsonRpcResponse<Json>,\n _next: AsyncJsonRpcEngineNextCallback,\n end: JsonRpcEngineEndCallback,\n {\n getAccounts,\n requestPermissionsForOrigin,\n getCaip25PermissionFromLegacyPermissionsForOrigin,\n }: {\n getAccounts: () => string[];\n requestPermissionsForOrigin: (\n requestedPermissions: RequestedPermissions,\n ) => Promise<[GrantedPermissions]>;\n getCaip25PermissionFromLegacyPermissionsForOrigin: (\n requestedPermissions?: RequestedPermissions,\n ) => RequestedPermissions;\n },\n) {\n const { params } = req;\n\n if (!Array.isArray(params) || !isPlainObject(params[0])) {\n return end(invalidParams({ data: { request: req } }));\n }\n\n let [requestedPermissions] = params;\n delete requestedPermissions[Caip25EndowmentPermissionName];\n\n const caip25EquivalentPermissions: Partial<\n Pick<RequestedPermissions, 'eth_accounts' | 'endowment:permitted-chains'>\n > = pick(requestedPermissions, [\n RestrictedMethods.EthAccounts,\n EndowmentTypes.PermittedChains,\n ]);\n delete requestedPermissions[RestrictedMethods.EthAccounts];\n delete requestedPermissions[EndowmentTypes.PermittedChains];\n\n const hasCaip25EquivalentPermissions =\n Object.keys(caip25EquivalentPermissions).length > 0;\n\n if (hasCaip25EquivalentPermissions) {\n const caip25Permission = getCaip25PermissionFromLegacyPermissionsForOrigin(\n caip25EquivalentPermissions,\n );\n requestedPermissions = { ...requestedPermissions, ...caip25Permission };\n }\n\n let grantedPermissions: GrantedPermissions = {};\n\n const [frozenGrantedPermissions] =\n await requestPermissionsForOrigin(requestedPermissions);\n\n grantedPermissions = { ...frozenGrantedPermissions };\n\n if (hasCaip25EquivalentPermissions) {\n const caip25Endowment = grantedPermissions[Caip25EndowmentPermissionName];\n\n if (!caip25Endowment) {\n throw new Error(\n `could not find ${Caip25EndowmentPermissionName} permission.`,\n );\n }\n\n const caip25CaveatValue = caip25Endowment.caveats?.find(\n ({ type }) => type === Caip25CaveatType,\n )?.value as Caip25CaveatValue | undefined;\n if (!caip25CaveatValue) {\n throw new Error(\n `could not find ${Caip25CaveatType} in granted ${Caip25EndowmentPermissionName} permission.`,\n );\n }\n\n delete grantedPermissions[Caip25EndowmentPermissionName];\n // We cannot derive correct eth_accounts value directly from the CAIP-25 permission\n // because the accounts will not be in order of lastSelected\n const ethAccounts = getAccounts();\n\n grantedPermissions[RestrictedMethods.EthAccounts] = {\n ...caip25Endowment,\n parentCapability: RestrictedMethods.EthAccounts,\n caveats: [\n {\n type: CaveatTypes.RestrictReturnedAccounts,\n value: ethAccounts,\n },\n ],\n };\n\n const ethChainIds = getPermittedEthChainIds(caip25CaveatValue);\n\n if (ethChainIds.length > 0) {\n grantedPermissions[EndowmentTypes.PermittedChains] = {\n ...caip25Endowment,\n parentCapability: EndowmentTypes.PermittedChains,\n caveats: [\n {\n type: CaveatTypes.RestrictNetworkSwitching,\n value: ethChainIds,\n },\n ],\n };\n }\n }\n\n res.result = Object.values(grantedPermissions).filter(\n (\n permission: ValidPermission<string, Caveat<string, Json>> | undefined,\n ): permission is ValidPermission<string, Caveat<string, Json>> =>\n permission !== undefined,\n );\n return end();\n}\n"]}
1
+ {"version":3,"file":"wallet-requestPermissions.mjs","sourceRoot":"","sources":["../src/wallet-requestPermissions.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Caip25CaveatValue } from '@metamask/chain-agnostic-permission';\nimport {\n Caip25CaveatType,\n Caip25EndowmentPermissionName,\n getPermittedEthChainIds,\n} from '@metamask/chain-agnostic-permission';\nimport { isPlainObject } from '@metamask/controller-utils';\nimport type {\n AsyncJsonRpcEngineNextCallback,\n JsonRpcEngineEndCallback,\n} from '@metamask/json-rpc-engine';\nimport {\n type Caveat,\n type CaveatSpecificationConstraint,\n invalidParams,\n MethodNames,\n type PermissionController,\n type PermissionSpecificationConstraint,\n type RequestedPermissions,\n type ValidPermission,\n} from '@metamask/permission-controller';\nimport type {\n Json,\n JsonRpcRequest,\n PendingJsonRpcResponse,\n} from '@metamask/utils';\nimport { pick } from 'lodash';\n\nimport { CaveatTypes, EndowmentTypes, RestrictedMethods } from './types';\n\nexport const requestPermissionsHandler = {\n methodNames: [MethodNames.RequestPermissions],\n implementation: requestPermissionsImplementation,\n hookNames: {\n getAccounts: true,\n requestPermissionsForOrigin: true,\n getCaip25PermissionFromLegacyPermissionsForOrigin: true,\n },\n};\n\ntype AbstractPermissionController = PermissionController<\n PermissionSpecificationConstraint,\n CaveatSpecificationConstraint\n>;\n\ntype GrantedPermissions = Awaited<\n ReturnType<AbstractPermissionController['requestPermissions']>\n>[0];\n\n/**\n * Request Permissions implementation to be used in JsonRpcEngine middleware, specifically for `wallet_requestPermissions` RPC method.\n * The request object is expected to contain a CAIP-25 endowment permission.\n *\n * @param req - The JsonRpcEngine request\n * @param res - The JsonRpcEngine result object\n * @param _next - JsonRpcEngine next() callback - unused\n * @param end - JsonRpcEngine end() callback\n * @param options - Method hooks passed to the method implementation\n * @param options.getAccounts - A hook that returns the permitted eth accounts for the origin sorted by lastSelected.\n * @param options.getCaip25PermissionFromLegacyPermissionsForOrigin - A hook that returns a CAIP-25 permission from a legacy `eth_accounts` and `endowment:permitted-chains` permission.\n * @param options.requestPermissionsForOrigin - A hook that requests CAIP-25 permissions for the origin.\n * @returns Nothing.\n */\nasync function requestPermissionsImplementation(\n req: JsonRpcRequest<[RequestedPermissions]> & { origin: string },\n res: PendingJsonRpcResponse,\n _next: AsyncJsonRpcEngineNextCallback,\n end: JsonRpcEngineEndCallback,\n {\n getAccounts,\n requestPermissionsForOrigin,\n getCaip25PermissionFromLegacyPermissionsForOrigin,\n }: {\n getAccounts: () => string[];\n requestPermissionsForOrigin: (\n requestedPermissions: RequestedPermissions,\n ) => Promise<[GrantedPermissions]>;\n getCaip25PermissionFromLegacyPermissionsForOrigin: (\n requestedPermissions?: RequestedPermissions,\n ) => RequestedPermissions;\n },\n) {\n const { params } = req;\n\n if (!Array.isArray(params) || !isPlainObject(params[0])) {\n return end(invalidParams({ data: { request: req } }));\n }\n\n let [requestedPermissions] = params;\n delete requestedPermissions[Caip25EndowmentPermissionName];\n\n const caip25EquivalentPermissions: Partial<\n Pick<RequestedPermissions, 'eth_accounts' | 'endowment:permitted-chains'>\n > = pick(requestedPermissions, [\n RestrictedMethods.EthAccounts,\n EndowmentTypes.PermittedChains,\n ]);\n delete requestedPermissions[RestrictedMethods.EthAccounts];\n delete requestedPermissions[EndowmentTypes.PermittedChains];\n\n const hasCaip25EquivalentPermissions =\n Object.keys(caip25EquivalentPermissions).length > 0;\n\n if (hasCaip25EquivalentPermissions) {\n const caip25Permission = getCaip25PermissionFromLegacyPermissionsForOrigin(\n caip25EquivalentPermissions,\n );\n requestedPermissions = { ...requestedPermissions, ...caip25Permission };\n }\n\n let grantedPermissions: GrantedPermissions = {};\n\n const [frozenGrantedPermissions] =\n await requestPermissionsForOrigin(requestedPermissions);\n\n grantedPermissions = { ...frozenGrantedPermissions };\n\n if (hasCaip25EquivalentPermissions) {\n const caip25Endowment = grantedPermissions[Caip25EndowmentPermissionName];\n\n if (!caip25Endowment) {\n throw new Error(\n `could not find ${Caip25EndowmentPermissionName} permission.`,\n );\n }\n\n const caip25CaveatValue = caip25Endowment.caveats?.find(\n ({ type }) => type === Caip25CaveatType,\n )?.value as Caip25CaveatValue | undefined;\n if (!caip25CaveatValue) {\n throw new Error(\n `could not find ${Caip25CaveatType} in granted ${Caip25EndowmentPermissionName} permission.`,\n );\n }\n\n delete grantedPermissions[Caip25EndowmentPermissionName];\n // We cannot derive correct eth_accounts value directly from the CAIP-25 permission\n // because the accounts will not be in order of lastSelected\n const ethAccounts = getAccounts();\n\n grantedPermissions[RestrictedMethods.EthAccounts] = {\n ...caip25Endowment,\n parentCapability: RestrictedMethods.EthAccounts,\n caveats: [\n {\n type: CaveatTypes.RestrictReturnedAccounts,\n value: ethAccounts,\n },\n ],\n };\n\n const ethChainIds = getPermittedEthChainIds(caip25CaveatValue);\n\n if (ethChainIds.length > 0) {\n grantedPermissions[EndowmentTypes.PermittedChains] = {\n ...caip25Endowment,\n parentCapability: EndowmentTypes.PermittedChains,\n caveats: [\n {\n type: CaveatTypes.RestrictNetworkSwitching,\n value: ethChainIds,\n },\n ],\n };\n }\n }\n\n res.result = Object.values(grantedPermissions).filter(\n (\n permission: ValidPermission<string, Caveat<string, Json>> | undefined,\n ): permission is ValidPermission<string, Caveat<string, Json>> =>\n permission !== undefined,\n );\n return end();\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"wallet-revokePermissions.cjs","sourceRoot":"","sources":["../src/wallet-revokePermissions.ts"],"names":[],"mappings":";;;AAAA,mFAAoF;AAKpF,2EAA6E;AAC7E,2CAKyB;AAEzB,uCAA4D;AAE/C,QAAA,wBAAwB,GAAG;IACtC,WAAW,EAAE,CAAC,mCAAW,CAAC,iBAAiB,CAAC;IAC5C,cAAc,EAAE,+BAA+B;IAC/C,SAAS,EAAE;QACT,0BAA0B,EAAE,IAAI;QAChC,YAAY,EAAE,IAAI;KACnB;CACF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,SAAS,+BAA+B,CACtC,GAA2B,EAC3B,GAAiC,EACjC,KAAqC,EACrC,GAA6B,EAC7B,EACE,0BAA0B,GAG3B;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAEvB,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAE1B,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,GAAG,CAAC,IAAA,qCAAa,EAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;KACvD;IAED,sDAAsD;IACtD,iCAAiC;IACjC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAC9C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,yDAA6B,CACjD,CAAC;IAEF,IAAI,CAAC,IAAA,uBAAe,EAAC,cAAc,CAAC,EAAE;QACpC,OAAO,GAAG,CAAC,IAAA,qCAAa,EAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;KACvD;IAED,MAAM,2BAA2B,GAAa;QAC5C,yBAAiB,CAAC,WAAW;QAC7B,sBAAc,CAAC,eAAe;KAC/B,CAAC;IACF,MAAM,sBAAsB,GAAG,cAAc,CAAC,MAAM,CAClD,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,2BAA2B,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC9D,CAAC;IAEF,MAAM,4BAA4B,GAChC,sBAAsB,CAAC,MAAM,KAAK,cAAc,CAAC,MAAM,CAAC;IAE1D,IAAI,4BAA4B,EAAE;QAChC,sBAAsB,CAAC,IAAI,CAAC,yDAA6B,CAAC,CAAC;KAC5D;IAED,0BAA0B,CAAC,sBAAsB,CAAC,CAAC;IAEnD,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;IAElB,OAAO,GAAG,EAAE,CAAC;AACf,CAAC","sourcesContent":["import { Caip25EndowmentPermissionName } from '@metamask/chain-agnostic-permission';\nimport type {\n AsyncJsonRpcEngineNextCallback,\n JsonRpcEngineEndCallback,\n} from '@metamask/json-rpc-engine';\nimport { invalidParams, MethodNames } from '@metamask/permission-controller';\nimport {\n isNonEmptyArray,\n type Json,\n type JsonRpcRequest,\n type PendingJsonRpcResponse,\n} from '@metamask/utils';\n\nimport { EndowmentTypes, RestrictedMethods } from './types';\n\nexport const revokePermissionsHandler = {\n methodNames: [MethodNames.RevokePermissions],\n implementation: revokePermissionsImplementation,\n hookNames: {\n revokePermissionsForOrigin: true,\n updateCaveat: true,\n },\n};\n\n/**\n * Revoke Permissions implementation to be used in JsonRpcEngine middleware.\n *\n * @param req - The JsonRpcEngine request\n * @param res - The JsonRpcEngine result object\n * @param _next - JsonRpcEngine next() callback - unused\n * @param end - JsonRpcEngine end() callback\n * @param options - Method hooks passed to the method implementation\n * @param options.revokePermissionsForOrigin - A hook that revokes given permission keys for an origin\n * @returns Nothing.\n */\nfunction revokePermissionsImplementation(\n req: JsonRpcRequest<Json[]>,\n res: PendingJsonRpcResponse<Json>,\n _next: AsyncJsonRpcEngineNextCallback,\n end: JsonRpcEngineEndCallback,\n {\n revokePermissionsForOrigin,\n }: {\n revokePermissionsForOrigin: (permissionKeys: string[]) => void;\n },\n) {\n const { params } = req;\n\n const param = params?.[0];\n\n if (!param) {\n return end(invalidParams({ data: { request: req } }));\n }\n\n // For now, this API revokes the entire permission key\n // even if caveats are specified.\n const permissionKeys = Object.keys(param).filter(\n (name) => name !== Caip25EndowmentPermissionName,\n );\n\n if (!isNonEmptyArray(permissionKeys)) {\n return end(invalidParams({ data: { request: req } }));\n }\n\n const caip25EquivalentPermissions: string[] = [\n RestrictedMethods.EthAccounts,\n EndowmentTypes.PermittedChains,\n ];\n const relevantPermissionKeys = permissionKeys.filter(\n (name: string) => !caip25EquivalentPermissions.includes(name),\n );\n\n const shouldRevokeLegacyPermission =\n relevantPermissionKeys.length !== permissionKeys.length;\n\n if (shouldRevokeLegacyPermission) {\n relevantPermissionKeys.push(Caip25EndowmentPermissionName);\n }\n\n revokePermissionsForOrigin(relevantPermissionKeys);\n\n res.result = null;\n\n return end();\n}\n"]}
1
+ {"version":3,"file":"wallet-revokePermissions.cjs","sourceRoot":"","sources":["../src/wallet-revokePermissions.ts"],"names":[],"mappings":";;;AAAA,mFAAoF;AAKpF,2EAA6E;AAC7E,2CAKyB;AAEzB,uCAA4D;AAE/C,QAAA,wBAAwB,GAAG;IACtC,WAAW,EAAE,CAAC,mCAAW,CAAC,iBAAiB,CAAC;IAC5C,cAAc,EAAE,+BAA+B;IAC/C,SAAS,EAAE;QACT,0BAA0B,EAAE,IAAI;QAChC,YAAY,EAAE,IAAI;KACnB;CACF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,SAAS,+BAA+B,CACtC,GAA2B,EAC3B,GAA2B,EAC3B,KAAqC,EACrC,GAA6B,EAC7B,EACE,0BAA0B,GAG3B;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAEvB,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAE1B,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,GAAG,CAAC,IAAA,qCAAa,EAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;KACvD;IAED,sDAAsD;IACtD,iCAAiC;IACjC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAC9C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,yDAA6B,CACjD,CAAC;IAEF,IAAI,CAAC,IAAA,uBAAe,EAAC,cAAc,CAAC,EAAE;QACpC,OAAO,GAAG,CAAC,IAAA,qCAAa,EAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;KACvD;IAED,MAAM,2BAA2B,GAAa;QAC5C,yBAAiB,CAAC,WAAW;QAC7B,sBAAc,CAAC,eAAe;KAC/B,CAAC;IACF,MAAM,sBAAsB,GAAG,cAAc,CAAC,MAAM,CAClD,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,2BAA2B,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC9D,CAAC;IAEF,MAAM,4BAA4B,GAChC,sBAAsB,CAAC,MAAM,KAAK,cAAc,CAAC,MAAM,CAAC;IAE1D,IAAI,4BAA4B,EAAE;QAChC,sBAAsB,CAAC,IAAI,CAAC,yDAA6B,CAAC,CAAC;KAC5D;IAED,0BAA0B,CAAC,sBAAsB,CAAC,CAAC;IAEnD,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;IAElB,OAAO,GAAG,EAAE,CAAC;AACf,CAAC","sourcesContent":["import { Caip25EndowmentPermissionName } from '@metamask/chain-agnostic-permission';\nimport type {\n AsyncJsonRpcEngineNextCallback,\n JsonRpcEngineEndCallback,\n} from '@metamask/json-rpc-engine';\nimport { invalidParams, MethodNames } from '@metamask/permission-controller';\nimport {\n isNonEmptyArray,\n type Json,\n type JsonRpcRequest,\n type PendingJsonRpcResponse,\n} from '@metamask/utils';\n\nimport { EndowmentTypes, RestrictedMethods } from './types';\n\nexport const revokePermissionsHandler = {\n methodNames: [MethodNames.RevokePermissions],\n implementation: revokePermissionsImplementation,\n hookNames: {\n revokePermissionsForOrigin: true,\n updateCaveat: true,\n },\n};\n\n/**\n * Revoke Permissions implementation to be used in JsonRpcEngine middleware.\n *\n * @param req - The JsonRpcEngine request\n * @param res - The JsonRpcEngine result object\n * @param _next - JsonRpcEngine next() callback - unused\n * @param end - JsonRpcEngine end() callback\n * @param options - Method hooks passed to the method implementation\n * @param options.revokePermissionsForOrigin - A hook that revokes given permission keys for an origin\n * @returns Nothing.\n */\nfunction revokePermissionsImplementation(\n req: JsonRpcRequest<Json[]>,\n res: PendingJsonRpcResponse,\n _next: AsyncJsonRpcEngineNextCallback,\n end: JsonRpcEngineEndCallback,\n {\n revokePermissionsForOrigin,\n }: {\n revokePermissionsForOrigin: (permissionKeys: string[]) => void;\n },\n) {\n const { params } = req;\n\n const param = params?.[0];\n\n if (!param) {\n return end(invalidParams({ data: { request: req } }));\n }\n\n // For now, this API revokes the entire permission key\n // even if caveats are specified.\n const permissionKeys = Object.keys(param).filter(\n (name) => name !== Caip25EndowmentPermissionName,\n );\n\n if (!isNonEmptyArray(permissionKeys)) {\n return end(invalidParams({ data: { request: req } }));\n }\n\n const caip25EquivalentPermissions: string[] = [\n RestrictedMethods.EthAccounts,\n EndowmentTypes.PermittedChains,\n ];\n const relevantPermissionKeys = permissionKeys.filter(\n (name: string) => !caip25EquivalentPermissions.includes(name),\n );\n\n const shouldRevokeLegacyPermission =\n relevantPermissionKeys.length !== permissionKeys.length;\n\n if (shouldRevokeLegacyPermission) {\n relevantPermissionKeys.push(Caip25EndowmentPermissionName);\n }\n\n revokePermissionsForOrigin(relevantPermissionKeys);\n\n res.result = null;\n\n return end();\n}\n"]}
@@ -20,7 +20,7 @@ export declare const revokePermissionsHandler: {
20
20
  * @param options.revokePermissionsForOrigin - A hook that revokes given permission keys for an origin
21
21
  * @returns Nothing.
22
22
  */
23
- declare function revokePermissionsImplementation(req: JsonRpcRequest<Json[]>, res: PendingJsonRpcResponse<Json>, _next: AsyncJsonRpcEngineNextCallback, end: JsonRpcEngineEndCallback, { revokePermissionsForOrigin, }: {
23
+ declare function revokePermissionsImplementation(req: JsonRpcRequest<Json[]>, res: PendingJsonRpcResponse, _next: AsyncJsonRpcEngineNextCallback, end: JsonRpcEngineEndCallback, { revokePermissionsForOrigin, }: {
24
24
  revokePermissionsForOrigin: (permissionKeys: string[]) => void;
25
25
  }): void;
26
26
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"wallet-revokePermissions.d.cts","sourceRoot":"","sources":["../src/wallet-revokePermissions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,8BAA8B,EAC9B,wBAAwB,EACzB,kCAAkC;AACnC,OAAO,EAAiB,WAAW,EAAE,wCAAwC;AAC7E,OAAO,EAEL,KAAK,IAAI,EACT,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC5B,wBAAwB;AAIzB,eAAO,MAAM,wBAAwB;;;;;;;CAOpC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,iBAAS,+BAA+B,CACtC,GAAG,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC,EAC3B,GAAG,EAAE,sBAAsB,CAAC,IAAI,CAAC,EACjC,KAAK,EAAE,8BAA8B,EACrC,GAAG,EAAE,wBAAwB,EAC7B,EACE,0BAA0B,GAC3B,EAAE;IACD,0BAA0B,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CAChE,QAwCF"}
1
+ {"version":3,"file":"wallet-revokePermissions.d.cts","sourceRoot":"","sources":["../src/wallet-revokePermissions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,8BAA8B,EAC9B,wBAAwB,EACzB,kCAAkC;AACnC,OAAO,EAAiB,WAAW,EAAE,wCAAwC;AAC7E,OAAO,EAEL,KAAK,IAAI,EACT,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC5B,wBAAwB;AAIzB,eAAO,MAAM,wBAAwB;;;;;;;CAOpC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,iBAAS,+BAA+B,CACtC,GAAG,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC,EAC3B,GAAG,EAAE,sBAAsB,EAC3B,KAAK,EAAE,8BAA8B,EACrC,GAAG,EAAE,wBAAwB,EAC7B,EACE,0BAA0B,GAC3B,EAAE;IACD,0BAA0B,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CAChE,QAwCF"}
@@ -20,7 +20,7 @@ export declare const revokePermissionsHandler: {
20
20
  * @param options.revokePermissionsForOrigin - A hook that revokes given permission keys for an origin
21
21
  * @returns Nothing.
22
22
  */
23
- declare function revokePermissionsImplementation(req: JsonRpcRequest<Json[]>, res: PendingJsonRpcResponse<Json>, _next: AsyncJsonRpcEngineNextCallback, end: JsonRpcEngineEndCallback, { revokePermissionsForOrigin, }: {
23
+ declare function revokePermissionsImplementation(req: JsonRpcRequest<Json[]>, res: PendingJsonRpcResponse, _next: AsyncJsonRpcEngineNextCallback, end: JsonRpcEngineEndCallback, { revokePermissionsForOrigin, }: {
24
24
  revokePermissionsForOrigin: (permissionKeys: string[]) => void;
25
25
  }): void;
26
26
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"wallet-revokePermissions.d.mts","sourceRoot":"","sources":["../src/wallet-revokePermissions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,8BAA8B,EAC9B,wBAAwB,EACzB,kCAAkC;AACnC,OAAO,EAAiB,WAAW,EAAE,wCAAwC;AAC7E,OAAO,EAEL,KAAK,IAAI,EACT,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC5B,wBAAwB;AAIzB,eAAO,MAAM,wBAAwB;;;;;;;CAOpC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,iBAAS,+BAA+B,CACtC,GAAG,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC,EAC3B,GAAG,EAAE,sBAAsB,CAAC,IAAI,CAAC,EACjC,KAAK,EAAE,8BAA8B,EACrC,GAAG,EAAE,wBAAwB,EAC7B,EACE,0BAA0B,GAC3B,EAAE;IACD,0BAA0B,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CAChE,QAwCF"}
1
+ {"version":3,"file":"wallet-revokePermissions.d.mts","sourceRoot":"","sources":["../src/wallet-revokePermissions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,8BAA8B,EAC9B,wBAAwB,EACzB,kCAAkC;AACnC,OAAO,EAAiB,WAAW,EAAE,wCAAwC;AAC7E,OAAO,EAEL,KAAK,IAAI,EACT,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC5B,wBAAwB;AAIzB,eAAO,MAAM,wBAAwB;;;;;;;CAOpC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,iBAAS,+BAA+B,CACtC,GAAG,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC,EAC3B,GAAG,EAAE,sBAAsB,EAC3B,KAAK,EAAE,8BAA8B,EACrC,GAAG,EAAE,wBAAwB,EAC7B,EACE,0BAA0B,GAC3B,EAAE;IACD,0BAA0B,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CAChE,QAwCF"}
@@ -1 +1 @@
1
- {"version":3,"file":"wallet-revokePermissions.mjs","sourceRoot":"","sources":["../src/wallet-revokePermissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,4CAA4C;AAKpF,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,wCAAwC;AAC7E,OAAO,EACL,eAAe,EAIhB,wBAAwB;AAEzB,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAgB;AAE5D,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,WAAW,EAAE,CAAC,WAAW,CAAC,iBAAiB,CAAC;IAC5C,cAAc,EAAE,+BAA+B;IAC/C,SAAS,EAAE;QACT,0BAA0B,EAAE,IAAI;QAChC,YAAY,EAAE,IAAI;KACnB;CACF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,SAAS,+BAA+B,CACtC,GAA2B,EAC3B,GAAiC,EACjC,KAAqC,EACrC,GAA6B,EAC7B,EACE,0BAA0B,GAG3B;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAEvB,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAE1B,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,GAAG,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;KACvD;IAED,sDAAsD;IACtD,iCAAiC;IACjC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAC9C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,6BAA6B,CACjD,CAAC;IAEF,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,EAAE;QACpC,OAAO,GAAG,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;KACvD;IAED,MAAM,2BAA2B,GAAa;QAC5C,iBAAiB,CAAC,WAAW;QAC7B,cAAc,CAAC,eAAe;KAC/B,CAAC;IACF,MAAM,sBAAsB,GAAG,cAAc,CAAC,MAAM,CAClD,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,2BAA2B,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC9D,CAAC;IAEF,MAAM,4BAA4B,GAChC,sBAAsB,CAAC,MAAM,KAAK,cAAc,CAAC,MAAM,CAAC;IAE1D,IAAI,4BAA4B,EAAE;QAChC,sBAAsB,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;KAC5D;IAED,0BAA0B,CAAC,sBAAsB,CAAC,CAAC;IAEnD,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;IAElB,OAAO,GAAG,EAAE,CAAC;AACf,CAAC","sourcesContent":["import { Caip25EndowmentPermissionName } from '@metamask/chain-agnostic-permission';\nimport type {\n AsyncJsonRpcEngineNextCallback,\n JsonRpcEngineEndCallback,\n} from '@metamask/json-rpc-engine';\nimport { invalidParams, MethodNames } from '@metamask/permission-controller';\nimport {\n isNonEmptyArray,\n type Json,\n type JsonRpcRequest,\n type PendingJsonRpcResponse,\n} from '@metamask/utils';\n\nimport { EndowmentTypes, RestrictedMethods } from './types';\n\nexport const revokePermissionsHandler = {\n methodNames: [MethodNames.RevokePermissions],\n implementation: revokePermissionsImplementation,\n hookNames: {\n revokePermissionsForOrigin: true,\n updateCaveat: true,\n },\n};\n\n/**\n * Revoke Permissions implementation to be used in JsonRpcEngine middleware.\n *\n * @param req - The JsonRpcEngine request\n * @param res - The JsonRpcEngine result object\n * @param _next - JsonRpcEngine next() callback - unused\n * @param end - JsonRpcEngine end() callback\n * @param options - Method hooks passed to the method implementation\n * @param options.revokePermissionsForOrigin - A hook that revokes given permission keys for an origin\n * @returns Nothing.\n */\nfunction revokePermissionsImplementation(\n req: JsonRpcRequest<Json[]>,\n res: PendingJsonRpcResponse<Json>,\n _next: AsyncJsonRpcEngineNextCallback,\n end: JsonRpcEngineEndCallback,\n {\n revokePermissionsForOrigin,\n }: {\n revokePermissionsForOrigin: (permissionKeys: string[]) => void;\n },\n) {\n const { params } = req;\n\n const param = params?.[0];\n\n if (!param) {\n return end(invalidParams({ data: { request: req } }));\n }\n\n // For now, this API revokes the entire permission key\n // even if caveats are specified.\n const permissionKeys = Object.keys(param).filter(\n (name) => name !== Caip25EndowmentPermissionName,\n );\n\n if (!isNonEmptyArray(permissionKeys)) {\n return end(invalidParams({ data: { request: req } }));\n }\n\n const caip25EquivalentPermissions: string[] = [\n RestrictedMethods.EthAccounts,\n EndowmentTypes.PermittedChains,\n ];\n const relevantPermissionKeys = permissionKeys.filter(\n (name: string) => !caip25EquivalentPermissions.includes(name),\n );\n\n const shouldRevokeLegacyPermission =\n relevantPermissionKeys.length !== permissionKeys.length;\n\n if (shouldRevokeLegacyPermission) {\n relevantPermissionKeys.push(Caip25EndowmentPermissionName);\n }\n\n revokePermissionsForOrigin(relevantPermissionKeys);\n\n res.result = null;\n\n return end();\n}\n"]}
1
+ {"version":3,"file":"wallet-revokePermissions.mjs","sourceRoot":"","sources":["../src/wallet-revokePermissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,4CAA4C;AAKpF,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,wCAAwC;AAC7E,OAAO,EACL,eAAe,EAIhB,wBAAwB;AAEzB,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAgB;AAE5D,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,WAAW,EAAE,CAAC,WAAW,CAAC,iBAAiB,CAAC;IAC5C,cAAc,EAAE,+BAA+B;IAC/C,SAAS,EAAE;QACT,0BAA0B,EAAE,IAAI;QAChC,YAAY,EAAE,IAAI;KACnB;CACF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,SAAS,+BAA+B,CACtC,GAA2B,EAC3B,GAA2B,EAC3B,KAAqC,EACrC,GAA6B,EAC7B,EACE,0BAA0B,GAG3B;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAEvB,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAE1B,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,GAAG,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;KACvD;IAED,sDAAsD;IACtD,iCAAiC;IACjC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAC9C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,6BAA6B,CACjD,CAAC;IAEF,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,EAAE;QACpC,OAAO,GAAG,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;KACvD;IAED,MAAM,2BAA2B,GAAa;QAC5C,iBAAiB,CAAC,WAAW;QAC7B,cAAc,CAAC,eAAe;KAC/B,CAAC;IACF,MAAM,sBAAsB,GAAG,cAAc,CAAC,MAAM,CAClD,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,2BAA2B,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC9D,CAAC;IAEF,MAAM,4BAA4B,GAChC,sBAAsB,CAAC,MAAM,KAAK,cAAc,CAAC,MAAM,CAAC;IAE1D,IAAI,4BAA4B,EAAE;QAChC,sBAAsB,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;KAC5D;IAED,0BAA0B,CAAC,sBAAsB,CAAC,CAAC;IAEnD,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;IAElB,OAAO,GAAG,EAAE,CAAC;AACf,CAAC","sourcesContent":["import { Caip25EndowmentPermissionName } from '@metamask/chain-agnostic-permission';\nimport type {\n AsyncJsonRpcEngineNextCallback,\n JsonRpcEngineEndCallback,\n} from '@metamask/json-rpc-engine';\nimport { invalidParams, MethodNames } from '@metamask/permission-controller';\nimport {\n isNonEmptyArray,\n type Json,\n type JsonRpcRequest,\n type PendingJsonRpcResponse,\n} from '@metamask/utils';\n\nimport { EndowmentTypes, RestrictedMethods } from './types';\n\nexport const revokePermissionsHandler = {\n methodNames: [MethodNames.RevokePermissions],\n implementation: revokePermissionsImplementation,\n hookNames: {\n revokePermissionsForOrigin: true,\n updateCaveat: true,\n },\n};\n\n/**\n * Revoke Permissions implementation to be used in JsonRpcEngine middleware.\n *\n * @param req - The JsonRpcEngine request\n * @param res - The JsonRpcEngine result object\n * @param _next - JsonRpcEngine next() callback - unused\n * @param end - JsonRpcEngine end() callback\n * @param options - Method hooks passed to the method implementation\n * @param options.revokePermissionsForOrigin - A hook that revokes given permission keys for an origin\n * @returns Nothing.\n */\nfunction revokePermissionsImplementation(\n req: JsonRpcRequest<Json[]>,\n res: PendingJsonRpcResponse,\n _next: AsyncJsonRpcEngineNextCallback,\n end: JsonRpcEngineEndCallback,\n {\n revokePermissionsForOrigin,\n }: {\n revokePermissionsForOrigin: (permissionKeys: string[]) => void;\n },\n) {\n const { params } = req;\n\n const param = params?.[0];\n\n if (!param) {\n return end(invalidParams({ data: { request: req } }));\n }\n\n // For now, this API revokes the entire permission key\n // even if caveats are specified.\n const permissionKeys = Object.keys(param).filter(\n (name) => name !== Caip25EndowmentPermissionName,\n );\n\n if (!isNonEmptyArray(permissionKeys)) {\n return end(invalidParams({ data: { request: req } }));\n }\n\n const caip25EquivalentPermissions: string[] = [\n RestrictedMethods.EthAccounts,\n EndowmentTypes.PermittedChains,\n ];\n const relevantPermissionKeys = permissionKeys.filter(\n (name: string) => !caip25EquivalentPermissions.includes(name),\n );\n\n const shouldRevokeLegacyPermission =\n relevantPermissionKeys.length !== permissionKeys.length;\n\n if (shouldRevokeLegacyPermission) {\n relevantPermissionKeys.push(Caip25EndowmentPermissionName);\n }\n\n revokePermissionsForOrigin(relevantPermissionKeys);\n\n res.result = null;\n\n return end();\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask-previews/eip1193-permission-middleware",
3
- "version": "0.1.0-preview-e9f8bc88",
3
+ "version": "0.1.0-preview-39fa8d37",
4
4
  "description": "Implements the JSON-RPC methods for managing permissions as referenced in EIP-2255 and MIP-2 and inspired by MIP-5, but supporting chain-agnostic permission caveats in alignment with @metamask/multichain-api-middleware",
5
5
  "keywords": [
6
6
  "MetaMask",