@metamask/snaps-rpc-methods 14.2.0 → 14.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/CHANGELOG.md +12 -1
  2. package/dist/endowments/assets.cjs +1 -1
  3. package/dist/endowments/assets.cjs.map +1 -1
  4. package/dist/endowments/assets.mjs +1 -1
  5. package/dist/endowments/assets.mjs.map +1 -1
  6. package/dist/endowments/cronjob.cjs +3 -8
  7. package/dist/endowments/cronjob.cjs.map +1 -1
  8. package/dist/endowments/cronjob.d.cts.map +1 -1
  9. package/dist/endowments/cronjob.d.mts.map +1 -1
  10. package/dist/endowments/cronjob.mjs +4 -9
  11. package/dist/endowments/cronjob.mjs.map +1 -1
  12. package/dist/endowments/home-page.cjs +6 -1
  13. package/dist/endowments/home-page.cjs.map +1 -1
  14. package/dist/endowments/home-page.d.cts +2 -1
  15. package/dist/endowments/home-page.d.cts.map +1 -1
  16. package/dist/endowments/home-page.d.mts +2 -1
  17. package/dist/endowments/home-page.d.mts.map +1 -1
  18. package/dist/endowments/home-page.mjs +6 -1
  19. package/dist/endowments/home-page.mjs.map +1 -1
  20. package/dist/endowments/index.d.cts +3 -0
  21. package/dist/endowments/index.d.cts.map +1 -1
  22. package/dist/endowments/index.d.mts +3 -0
  23. package/dist/endowments/index.d.mts.map +1 -1
  24. package/dist/endowments/keyring.cjs +2 -4
  25. package/dist/endowments/keyring.cjs.map +1 -1
  26. package/dist/endowments/keyring.d.cts +1 -1
  27. package/dist/endowments/keyring.d.cts.map +1 -1
  28. package/dist/endowments/keyring.d.mts +1 -1
  29. package/dist/endowments/keyring.d.mts.map +1 -1
  30. package/dist/endowments/keyring.mjs +2 -4
  31. package/dist/endowments/keyring.mjs.map +1 -1
  32. package/dist/endowments/lifecycle-hooks.cjs +6 -1
  33. package/dist/endowments/lifecycle-hooks.cjs.map +1 -1
  34. package/dist/endowments/lifecycle-hooks.d.cts +2 -1
  35. package/dist/endowments/lifecycle-hooks.d.cts.map +1 -1
  36. package/dist/endowments/lifecycle-hooks.d.mts +2 -1
  37. package/dist/endowments/lifecycle-hooks.d.mts.map +1 -1
  38. package/dist/endowments/lifecycle-hooks.mjs +6 -1
  39. package/dist/endowments/lifecycle-hooks.mjs.map +1 -1
  40. package/dist/endowments/rpc.cjs +2 -4
  41. package/dist/endowments/rpc.cjs.map +1 -1
  42. package/dist/endowments/rpc.d.cts +1 -1
  43. package/dist/endowments/rpc.d.cts.map +1 -1
  44. package/dist/endowments/rpc.d.mts +1 -1
  45. package/dist/endowments/rpc.d.mts.map +1 -1
  46. package/dist/endowments/rpc.mjs +2 -4
  47. package/dist/endowments/rpc.mjs.map +1 -1
  48. package/dist/endowments/settings-page.cjs +6 -1
  49. package/dist/endowments/settings-page.cjs.map +1 -1
  50. package/dist/endowments/settings-page.d.cts +2 -1
  51. package/dist/endowments/settings-page.d.cts.map +1 -1
  52. package/dist/endowments/settings-page.d.mts +2 -1
  53. package/dist/endowments/settings-page.d.mts.map +1 -1
  54. package/dist/endowments/settings-page.mjs +6 -1
  55. package/dist/endowments/settings-page.mjs.map +1 -1
  56. package/dist/endowments/signature-insight.cjs +6 -8
  57. package/dist/endowments/signature-insight.cjs.map +1 -1
  58. package/dist/endowments/signature-insight.d.cts.map +1 -1
  59. package/dist/endowments/signature-insight.d.mts.map +1 -1
  60. package/dist/endowments/signature-insight.mjs +6 -8
  61. package/dist/endowments/signature-insight.mjs.map +1 -1
  62. package/dist/endowments/transaction-insight.cjs +2 -7
  63. package/dist/endowments/transaction-insight.cjs.map +1 -1
  64. package/dist/endowments/transaction-insight.d.cts.map +1 -1
  65. package/dist/endowments/transaction-insight.d.mts.map +1 -1
  66. package/dist/endowments/transaction-insight.mjs +2 -7
  67. package/dist/endowments/transaction-insight.mjs.map +1 -1
  68. package/dist/middleware/index.cjs +3 -0
  69. package/dist/middleware/index.cjs.map +1 -1
  70. package/dist/middleware/index.d.cts +1 -0
  71. package/dist/middleware/index.d.cts.map +1 -1
  72. package/dist/middleware/index.d.mts +1 -0
  73. package/dist/middleware/index.d.mts.map +1 -1
  74. package/dist/middleware/index.mjs +1 -0
  75. package/dist/middleware/index.mjs.map +1 -1
  76. package/dist/middleware/wallet-snap-permission.cjs +32 -0
  77. package/dist/middleware/wallet-snap-permission.cjs.map +1 -0
  78. package/dist/middleware/wallet-snap-permission.d.cts +18 -0
  79. package/dist/middleware/wallet-snap-permission.d.cts.map +1 -0
  80. package/dist/middleware/wallet-snap-permission.d.mts +18 -0
  81. package/dist/middleware/wallet-snap-permission.d.mts.map +1 -0
  82. package/dist/middleware/wallet-snap-permission.mjs +28 -0
  83. package/dist/middleware/wallet-snap-permission.mjs.map +1 -0
  84. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"transaction-insight.mjs","sourceRoot":"","sources":["../../src/endowments/transaction-insight.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n PermissionSpecificationBuilder,\n EndowmentGetterParams,\n ValidPermissionSpecification,\n PermissionValidatorConstraint,\n PermissionConstraint,\n CaveatSpecificationConstraint,\n Caveat,\n} from '@metamask/permission-controller';\nimport { PermissionType, SubjectType } from '@metamask/permission-controller';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport { SnapCaveatType } from '@metamask/snaps-utils';\nimport type { Json, NonEmptyArray } from '@metamask/utils';\nimport { assert, hasProperty, isObject, isPlainObject } from '@metamask/utils';\n\nimport { createGenericPermissionValidator } from './caveats';\nimport { SnapEndowments } from './enum';\n\nconst permissionName = SnapEndowments.TransactionInsight;\n\ntype TransactionInsightEndowmentSpecification = ValidPermissionSpecification<{\n permissionType: PermissionType.Endowment;\n targetName: typeof permissionName;\n endowmentGetter: (_options?: EndowmentGetterParams) => null;\n allowedCaveats: Readonly<NonEmptyArray<string>> | null;\n validator: PermissionValidatorConstraint;\n}>;\n\n/**\n * `endowment:transaction-insight` returns nothing; it is intended to be used as a flag\n * by the extension to detect whether the snap has the capability to show information on the transaction confirmation screen.\n *\n * @param _builderOptions - Optional specification builder options.\n * @returns The specification for the transaction-insight endowment.\n */\nconst specificationBuilder: PermissionSpecificationBuilder<\n PermissionType.Endowment,\n any,\n TransactionInsightEndowmentSpecification\n> = (_builderOptions?: unknown) => {\n return {\n permissionType: PermissionType.Endowment,\n targetName: permissionName,\n allowedCaveats: [\n SnapCaveatType.TransactionOrigin,\n SnapCaveatType.MaxRequestTime,\n ],\n endowmentGetter: (_getterOptions?: EndowmentGetterParams) => null,\n validator: createGenericPermissionValidator([\n { type: SnapCaveatType.TransactionOrigin, optional: true },\n { type: SnapCaveatType.MaxRequestTime, optional: true },\n ]),\n subjectTypes: [SubjectType.Snap],\n };\n};\n\nexport const transactionInsightEndowmentBuilder = Object.freeze({\n targetName: permissionName,\n specificationBuilder,\n} as const);\n\n/**\n * Validates the type of the caveat value.\n *\n * @param caveat - The caveat to validate.\n * @throws If the caveat value is invalid.\n */\nfunction validateCaveat(caveat: Caveat<string, any>): void {\n if (!hasProperty(caveat, 'value') || !isPlainObject(caveat)) {\n throw rpcErrors.invalidParams({\n message: 'Expected a plain object.',\n });\n }\n\n const { value } = caveat;\n\n assert(\n typeof value === 'boolean',\n 'Expected caveat value to have type \"boolean\"',\n );\n}\n\n/**\n * Map a raw value from the `initialPermissions` to a caveat specification.\n * Note that this function does not do any validation, that's handled by the\n * PermissionsController when the permission is requested.\n *\n * @param value - The raw value from the `initialPermissions`.\n * @returns The caveat specification.\n */\nexport function getTransactionInsightCaveatMapper(\n value: Json,\n): Pick<PermissionConstraint, 'caveats'> {\n if (\n !value ||\n !isObject(value) ||\n (isObject(value) && Object.keys(value).length === 0)\n ) {\n return { caveats: null };\n }\n return {\n caveats: [\n {\n type: SnapCaveatType.TransactionOrigin,\n value:\n hasProperty(value, 'allowTransactionOrigin') &&\n (value.allowTransactionOrigin as boolean),\n },\n ],\n };\n}\n\n/**\n * Getter function to get the transaction origin caveat from a permission.\n *\n * This does basic validation of the caveat, but does not validate the type or\n * value of the namespaces object itself, as this is handled by the\n * `PermissionsController` when the permission is requested.\n *\n * @param permission - The permission to get the transaction origin caveat from.\n * @returns The transaction origin, or `null` if the permission does not have a\n * transaction origin caveat.\n */\nexport function getTransactionOriginCaveat(\n permission?: PermissionConstraint,\n): boolean | null {\n if (!permission?.caveats) {\n return null;\n }\n\n assert(permission.caveats.length === 1);\n assert(permission.caveats[0].type === SnapCaveatType.TransactionOrigin);\n\n const caveat = permission.caveats[0] as Caveat<string, boolean>;\n\n return caveat.value ?? null;\n}\n\nexport const transactionInsightCaveatSpecifications: Record<\n SnapCaveatType.TransactionOrigin,\n CaveatSpecificationConstraint\n> = {\n [SnapCaveatType.TransactionOrigin]: Object.freeze({\n type: SnapCaveatType.TransactionOrigin,\n validator: (caveat: Caveat<string, any>) => validateCaveat(caveat),\n }),\n};\n"]}
1
+ {"version":3,"file":"transaction-insight.mjs","sourceRoot":"","sources":["../../src/endowments/transaction-insight.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,wCAAwC;AAC9E,OAAO,EAAE,SAAS,EAAE,6BAA6B;AACjD,OAAO,EAAE,cAAc,EAAE,8BAA8B;AAEvD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,wBAAwB;AAE/E,OAAO,EAAE,gCAAgC,EAAE,4BAAkB;AAC7D,OAAO,EAAE,cAAc,EAAE,mBAAe;AAExC,MAAM,cAAc,GAAG,cAAc,CAAC,kBAAkB,CAAC;AAUzD;;;;;;GAMG;AACH,MAAM,oBAAoB,GAItB,CAAC,eAAyB,EAAE,EAAE;IAChC,OAAO;QACL,cAAc,EAAE,cAAc,CAAC,SAAS;QACxC,UAAU,EAAE,cAAc;QAC1B,cAAc,EAAE;YACd,cAAc,CAAC,iBAAiB;YAChC,cAAc,CAAC,cAAc;SAC9B;QACD,eAAe,EAAE,CAAC,cAAsC,EAAE,EAAE,CAAC,IAAI;QACjE,SAAS,EAAE,gCAAgC,CAAC;YAC1C,EAAE,IAAI,EAAE,cAAc,CAAC,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC1D,EAAE,IAAI,EAAE,cAAc,CAAC,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE;SACxD,CAAC;QACF,YAAY,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC;KACjC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kCAAkC,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9D,UAAU,EAAE,cAAc;IAC1B,oBAAoB;CACZ,CAAC,CAAC;AAEZ;;;;;GAKG;AACH,SAAS,cAAc,CAAC,MAA2B;IACjD,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5D,MAAM,SAAS,CAAC,aAAa,CAAC;YAC5B,OAAO,EAAE,0BAA0B;SACpC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IAEzB,MAAM,CACJ,OAAO,KAAK,KAAK,SAAS,EAC1B,8CAA8C,CAC/C,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iCAAiC,CAC/C,KAAW;IAEX,IACE,CAAC,KAAK;QACN,CAAC,QAAQ,CAAC,KAAK,CAAC;QAChB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EACpD,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IACD,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,cAAc,CAAC,iBAAiB;gBACtC,KAAK,EACH,WAAW,CAAC,KAAK,EAAE,wBAAwB,CAAC;oBAC3C,KAAK,CAAC,sBAAkC;aAC5C;SACF;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,0BAA0B,CACxC,UAAiC;IAEjC,MAAM,MAAM,GAAG,UAAU,EAAE,OAAO,EAAE,IAAI,CACtC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,cAAc,CAAC,iBAAiB,CAC9B,CAAC;IAEzC,OAAO,MAAM,EAAE,KAAK,IAAI,IAAI,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,MAAM,sCAAsC,GAG/C;IACF,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;QAChD,IAAI,EAAE,cAAc,CAAC,iBAAiB;QACtC,SAAS,EAAE,CAAC,MAA2B,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC;KACnE,CAAC;CACH,CAAC","sourcesContent":["import type {\n PermissionSpecificationBuilder,\n EndowmentGetterParams,\n ValidPermissionSpecification,\n PermissionValidatorConstraint,\n PermissionConstraint,\n CaveatSpecificationConstraint,\n Caveat,\n} from '@metamask/permission-controller';\nimport { PermissionType, SubjectType } from '@metamask/permission-controller';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport { SnapCaveatType } from '@metamask/snaps-utils';\nimport type { Json, NonEmptyArray } from '@metamask/utils';\nimport { assert, hasProperty, isObject, isPlainObject } from '@metamask/utils';\n\nimport { createGenericPermissionValidator } from './caveats';\nimport { SnapEndowments } from './enum';\n\nconst permissionName = SnapEndowments.TransactionInsight;\n\ntype TransactionInsightEndowmentSpecification = ValidPermissionSpecification<{\n permissionType: PermissionType.Endowment;\n targetName: typeof permissionName;\n endowmentGetter: (_options?: EndowmentGetterParams) => null;\n allowedCaveats: Readonly<NonEmptyArray<string>> | null;\n validator: PermissionValidatorConstraint;\n}>;\n\n/**\n * `endowment:transaction-insight` returns nothing; it is intended to be used as a flag\n * by the extension to detect whether the snap has the capability to show information on the transaction confirmation screen.\n *\n * @param _builderOptions - Optional specification builder options.\n * @returns The specification for the transaction-insight endowment.\n */\nconst specificationBuilder: PermissionSpecificationBuilder<\n PermissionType.Endowment,\n any,\n TransactionInsightEndowmentSpecification\n> = (_builderOptions?: unknown) => {\n return {\n permissionType: PermissionType.Endowment,\n targetName: permissionName,\n allowedCaveats: [\n SnapCaveatType.TransactionOrigin,\n SnapCaveatType.MaxRequestTime,\n ],\n endowmentGetter: (_getterOptions?: EndowmentGetterParams) => null,\n validator: createGenericPermissionValidator([\n { type: SnapCaveatType.TransactionOrigin, optional: true },\n { type: SnapCaveatType.MaxRequestTime, optional: true },\n ]),\n subjectTypes: [SubjectType.Snap],\n };\n};\n\nexport const transactionInsightEndowmentBuilder = Object.freeze({\n targetName: permissionName,\n specificationBuilder,\n} as const);\n\n/**\n * Validates the type of the caveat value.\n *\n * @param caveat - The caveat to validate.\n * @throws If the caveat value is invalid.\n */\nfunction validateCaveat(caveat: Caveat<string, any>): void {\n if (!hasProperty(caveat, 'value') || !isPlainObject(caveat)) {\n throw rpcErrors.invalidParams({\n message: 'Expected a plain object.',\n });\n }\n\n const { value } = caveat;\n\n assert(\n typeof value === 'boolean',\n 'Expected caveat value to have type \"boolean\"',\n );\n}\n\n/**\n * Map a raw value from the `initialPermissions` to a caveat specification.\n * Note that this function does not do any validation, that's handled by the\n * PermissionsController when the permission is requested.\n *\n * @param value - The raw value from the `initialPermissions`.\n * @returns The caveat specification.\n */\nexport function getTransactionInsightCaveatMapper(\n value: Json,\n): Pick<PermissionConstraint, 'caveats'> {\n if (\n !value ||\n !isObject(value) ||\n (isObject(value) && Object.keys(value).length === 0)\n ) {\n return { caveats: null };\n }\n return {\n caveats: [\n {\n type: SnapCaveatType.TransactionOrigin,\n value:\n hasProperty(value, 'allowTransactionOrigin') &&\n (value.allowTransactionOrigin as boolean),\n },\n ],\n };\n}\n\n/**\n * Getter function to get the transaction origin caveat from a permission.\n *\n * This does basic validation of the caveat, but does not validate the type or\n * value of the namespaces object itself, as this is handled by the\n * `PermissionsController` when the permission is requested.\n *\n * @param permission - The permission to get the transaction origin caveat from.\n * @returns The transaction origin, or `null` if the permission does not have a\n * transaction origin caveat.\n */\nexport function getTransactionOriginCaveat(\n permission?: PermissionConstraint,\n): boolean | null {\n const caveat = permission?.caveats?.find(\n (permCaveat) => permCaveat.type === SnapCaveatType.TransactionOrigin,\n ) as Caveat<string, boolean> | undefined;\n\n return caveat?.value ?? null;\n}\n\nexport const transactionInsightCaveatSpecifications: Record<\n SnapCaveatType.TransactionOrigin,\n CaveatSpecificationConstraint\n> = {\n [SnapCaveatType.TransactionOrigin]: Object.freeze({\n type: SnapCaveatType.TransactionOrigin,\n validator: (caveat: Caveat<string, any>) => validateCaveat(caveat),\n }),\n};\n"]}
@@ -14,5 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.createWalletSnapPermissionMiddleware = void 0;
17
18
  __exportStar(require("./preinstalled-snaps.cjs"), exports);
19
+ var wallet_snap_permission_1 = require("./wallet-snap-permission.cjs");
20
+ Object.defineProperty(exports, "createWalletSnapPermissionMiddleware", { enumerable: true, get: function () { return wallet_snap_permission_1.createWalletSnapPermissionMiddleware; } });
18
21
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2DAAqC","sourcesContent":["export * from './preinstalled-snaps';\n"]}
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,2DAAqC;AACrC,uEAAgF;AAAvE,8IAAA,oCAAoC,OAAA","sourcesContent":["export * from './preinstalled-snaps';\nexport { createWalletSnapPermissionMiddleware } from './wallet-snap-permission';\n"]}
@@ -1,2 +1,3 @@
1
1
  export * from "./preinstalled-snaps.cjs";
2
+ export { createWalletSnapPermissionMiddleware } from "./wallet-snap-permission.cjs";
2
3
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,yCAAqC"}
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,yCAAqC;AACrC,OAAO,EAAE,oCAAoC,EAAE,qCAAiC"}
@@ -1,2 +1,3 @@
1
1
  export * from "./preinstalled-snaps.mjs";
2
+ export { createWalletSnapPermissionMiddleware } from "./wallet-snap-permission.mjs";
2
3
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,yCAAqC"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,yCAAqC;AACrC,OAAO,EAAE,oCAAoC,EAAE,qCAAiC"}
@@ -1,2 +1,3 @@
1
1
  export * from "./preinstalled-snaps.mjs";
2
+ export { createWalletSnapPermissionMiddleware } from "./wallet-snap-permission.mjs";
2
3
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,yCAAqC","sourcesContent":["export * from './preinstalled-snaps';\n"]}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,yCAAqC;AACrC,OAAO,EAAE,oCAAoC,EAAE,qCAAiC","sourcesContent":["export * from './preinstalled-snaps';\nexport { createWalletSnapPermissionMiddleware } from './wallet-snap-permission';\n"]}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createWalletSnapPermissionMiddleware = void 0;
4
+ const rpc_errors_1 = require("@metamask/rpc-errors");
5
+ const restricted_1 = require("../restricted/index.cjs");
6
+ /**
7
+ * Create a middleware that validates `wallet_requestPermissions` calls that
8
+ * include the `wallet_snap` permission.
9
+ *
10
+ * This prevents requesting the `wallet_snap` permission in the same call as
11
+ * other permissions, which could lead to a confusing user experience where
12
+ * multiple permission screens are shown at once, or the other permissions are
13
+ * not displayed properly because the `wallet_snap` permission screen takes
14
+ * precedence.
15
+ *
16
+ * @returns The middleware.
17
+ */
18
+ function createWalletSnapPermissionMiddleware() {
19
+ return async ({ request, next }) => {
20
+ if (request.method === 'wallet_requestPermissions') {
21
+ const requestedPermissions = request.params?.[0];
22
+ const requestedPermissionsKeys = Object.keys(requestedPermissions ?? {});
23
+ if (requestedPermissionsKeys.length > 1 &&
24
+ requestedPermissionsKeys.includes(restricted_1.WALLET_SNAP_PERMISSION_KEY)) {
25
+ throw rpc_errors_1.rpcErrors.invalidParams('Permission request for `wallet_snap` cannot include other permissions. Please separate your permission requests into multiple calls to `wallet_requestPermissions`.');
26
+ }
27
+ }
28
+ return await next();
29
+ };
30
+ }
31
+ exports.createWalletSnapPermissionMiddleware = createWalletSnapPermissionMiddleware;
32
+ //# sourceMappingURL=wallet-snap-permission.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-snap-permission.cjs","sourceRoot":"","sources":["../../src/middleware/wallet-snap-permission.ts"],"names":[],"mappings":";;;AAIA,qDAAiD;AAGjD,wDAA2D;AAI3D;;;;;;;;;;;GAWG;AACH,SAAgB,oCAAoC;IAGlD,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;QACjC,IAAI,OAAO,CAAC,MAAM,KAAK,2BAA2B,EAAE,CAAC;YACnD,MAAM,oBAAoB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,wBAAwB,GAAG,MAAM,CAAC,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;YAEzE,IACE,wBAAwB,CAAC,MAAM,GAAG,CAAC;gBACnC,wBAAwB,CAAC,QAAQ,CAAC,uCAA0B,CAAC,EAC7D,CAAC;gBACD,MAAM,sBAAS,CAAC,aAAa,CAC3B,qKAAqK,CACtK,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,MAAM,IAAI,EAAE,CAAC;IACtB,CAAC,CAAC;AACJ,CAAC;AApBD,oFAoBC","sourcesContent":["import type {\n JsonRpcCall,\n JsonRpcMiddleware,\n} from '@metamask/json-rpc-engine/v2';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport type { Json } from '@metamask/utils';\n\nimport { WALLET_SNAP_PERMISSION_KEY } from '../restricted';\n\ntype RequestParams = [Record<string, Json>];\n\n/**\n * Create a middleware that validates `wallet_requestPermissions` calls that\n * include the `wallet_snap` permission.\n *\n * This prevents requesting the `wallet_snap` permission in the same call as\n * other permissions, which could lead to a confusing user experience where\n * multiple permission screens are shown at once, or the other permissions are\n * not displayed properly because the `wallet_snap` permission screen takes\n * precedence.\n *\n * @returns The middleware.\n */\nexport function createWalletSnapPermissionMiddleware(): JsonRpcMiddleware<\n JsonRpcCall<RequestParams>\n> {\n return async ({ request, next }) => {\n if (request.method === 'wallet_requestPermissions') {\n const requestedPermissions = request.params?.[0];\n const requestedPermissionsKeys = Object.keys(requestedPermissions ?? {});\n\n if (\n requestedPermissionsKeys.length > 1 &&\n requestedPermissionsKeys.includes(WALLET_SNAP_PERMISSION_KEY)\n ) {\n throw rpcErrors.invalidParams(\n 'Permission request for `wallet_snap` cannot include other permissions. Please separate your permission requests into multiple calls to `wallet_requestPermissions`.',\n );\n }\n }\n\n return await next();\n };\n}\n"]}
@@ -0,0 +1,18 @@
1
+ import type { JsonRpcCall, JsonRpcMiddleware } from "@metamask/json-rpc-engine/v2";
2
+ import type { Json } from "@metamask/utils";
3
+ type RequestParams = [Record<string, Json>];
4
+ /**
5
+ * Create a middleware that validates `wallet_requestPermissions` calls that
6
+ * include the `wallet_snap` permission.
7
+ *
8
+ * This prevents requesting the `wallet_snap` permission in the same call as
9
+ * other permissions, which could lead to a confusing user experience where
10
+ * multiple permission screens are shown at once, or the other permissions are
11
+ * not displayed properly because the `wallet_snap` permission screen takes
12
+ * precedence.
13
+ *
14
+ * @returns The middleware.
15
+ */
16
+ export declare function createWalletSnapPermissionMiddleware(): JsonRpcMiddleware<JsonRpcCall<RequestParams>>;
17
+ export {};
18
+ //# sourceMappingURL=wallet-snap-permission.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-snap-permission.d.cts","sourceRoot":"","sources":["../../src/middleware/wallet-snap-permission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EAClB,qCAAqC;AAEtC,OAAO,KAAK,EAAE,IAAI,EAAE,wBAAwB;AAI5C,KAAK,aAAa,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AAE5C;;;;;;;;;;;GAWG;AACH,wBAAgB,oCAAoC,IAAI,iBAAiB,CACvE,WAAW,CAAC,aAAa,CAAC,CAC3B,CAkBA"}
@@ -0,0 +1,18 @@
1
+ import type { JsonRpcCall, JsonRpcMiddleware } from "@metamask/json-rpc-engine/v2";
2
+ import type { Json } from "@metamask/utils";
3
+ type RequestParams = [Record<string, Json>];
4
+ /**
5
+ * Create a middleware that validates `wallet_requestPermissions` calls that
6
+ * include the `wallet_snap` permission.
7
+ *
8
+ * This prevents requesting the `wallet_snap` permission in the same call as
9
+ * other permissions, which could lead to a confusing user experience where
10
+ * multiple permission screens are shown at once, or the other permissions are
11
+ * not displayed properly because the `wallet_snap` permission screen takes
12
+ * precedence.
13
+ *
14
+ * @returns The middleware.
15
+ */
16
+ export declare function createWalletSnapPermissionMiddleware(): JsonRpcMiddleware<JsonRpcCall<RequestParams>>;
17
+ export {};
18
+ //# sourceMappingURL=wallet-snap-permission.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-snap-permission.d.mts","sourceRoot":"","sources":["../../src/middleware/wallet-snap-permission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EAClB,qCAAqC;AAEtC,OAAO,KAAK,EAAE,IAAI,EAAE,wBAAwB;AAI5C,KAAK,aAAa,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AAE5C;;;;;;;;;;;GAWG;AACH,wBAAgB,oCAAoC,IAAI,iBAAiB,CACvE,WAAW,CAAC,aAAa,CAAC,CAC3B,CAkBA"}
@@ -0,0 +1,28 @@
1
+ import { rpcErrors } from "@metamask/rpc-errors";
2
+ import { WALLET_SNAP_PERMISSION_KEY } from "../restricted/index.mjs";
3
+ /**
4
+ * Create a middleware that validates `wallet_requestPermissions` calls that
5
+ * include the `wallet_snap` permission.
6
+ *
7
+ * This prevents requesting the `wallet_snap` permission in the same call as
8
+ * other permissions, which could lead to a confusing user experience where
9
+ * multiple permission screens are shown at once, or the other permissions are
10
+ * not displayed properly because the `wallet_snap` permission screen takes
11
+ * precedence.
12
+ *
13
+ * @returns The middleware.
14
+ */
15
+ export function createWalletSnapPermissionMiddleware() {
16
+ return async ({ request, next }) => {
17
+ if (request.method === 'wallet_requestPermissions') {
18
+ const requestedPermissions = request.params?.[0];
19
+ const requestedPermissionsKeys = Object.keys(requestedPermissions ?? {});
20
+ if (requestedPermissionsKeys.length > 1 &&
21
+ requestedPermissionsKeys.includes(WALLET_SNAP_PERMISSION_KEY)) {
22
+ throw rpcErrors.invalidParams('Permission request for `wallet_snap` cannot include other permissions. Please separate your permission requests into multiple calls to `wallet_requestPermissions`.');
23
+ }
24
+ }
25
+ return await next();
26
+ };
27
+ }
28
+ //# sourceMappingURL=wallet-snap-permission.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-snap-permission.mjs","sourceRoot":"","sources":["../../src/middleware/wallet-snap-permission.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,6BAA6B;AAGjD,OAAO,EAAE,0BAA0B,EAAE,gCAAsB;AAI3D;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oCAAoC;IAGlD,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;QACjC,IAAI,OAAO,CAAC,MAAM,KAAK,2BAA2B,EAAE,CAAC;YACnD,MAAM,oBAAoB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,wBAAwB,GAAG,MAAM,CAAC,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;YAEzE,IACE,wBAAwB,CAAC,MAAM,GAAG,CAAC;gBACnC,wBAAwB,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAC7D,CAAC;gBACD,MAAM,SAAS,CAAC,aAAa,CAC3B,qKAAqK,CACtK,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,MAAM,IAAI,EAAE,CAAC;IACtB,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import type {\n JsonRpcCall,\n JsonRpcMiddleware,\n} from '@metamask/json-rpc-engine/v2';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport type { Json } from '@metamask/utils';\n\nimport { WALLET_SNAP_PERMISSION_KEY } from '../restricted';\n\ntype RequestParams = [Record<string, Json>];\n\n/**\n * Create a middleware that validates `wallet_requestPermissions` calls that\n * include the `wallet_snap` permission.\n *\n * This prevents requesting the `wallet_snap` permission in the same call as\n * other permissions, which could lead to a confusing user experience where\n * multiple permission screens are shown at once, or the other permissions are\n * not displayed properly because the `wallet_snap` permission screen takes\n * precedence.\n *\n * @returns The middleware.\n */\nexport function createWalletSnapPermissionMiddleware(): JsonRpcMiddleware<\n JsonRpcCall<RequestParams>\n> {\n return async ({ request, next }) => {\n if (request.method === 'wallet_requestPermissions') {\n const requestedPermissions = request.params?.[0];\n const requestedPermissionsKeys = Object.keys(requestedPermissions ?? {});\n\n if (\n requestedPermissionsKeys.length > 1 &&\n requestedPermissionsKeys.includes(WALLET_SNAP_PERMISSION_KEY)\n ) {\n throw rpcErrors.invalidParams(\n 'Permission request for `wallet_snap` cannot include other permissions. Please separate your permission requests into multiple calls to `wallet_requestPermissions`.',\n );\n }\n }\n\n return await next();\n };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask/snaps-rpc-methods",
3
- "version": "14.2.0",
3
+ "version": "14.3.0",
4
4
  "description": "MetaMask Snaps JSON-RPC method implementations",
5
5
  "keywords": [
6
6
  "MetaMask",
@@ -59,7 +59,7 @@
59
59
  "@metamask/permission-controller": "^12.2.0",
60
60
  "@metamask/rpc-errors": "^7.0.3",
61
61
  "@metamask/snaps-sdk": "^10.4.0",
62
- "@metamask/snaps-utils": "^12.0.0",
62
+ "@metamask/snaps-utils": "^12.1.0",
63
63
  "@metamask/superstruct": "^3.2.1",
64
64
  "@metamask/utils": "^11.9.0",
65
65
  "@noble/hashes": "^1.7.1",