@metamask/snaps-rpc-methods 16.0.0 → 17.1.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 (92) hide show
  1. package/CHANGELOG.md +22 -2
  2. package/dist/endowments/enum.cjs +1 -0
  3. package/dist/endowments/enum.cjs.map +1 -1
  4. package/dist/endowments/enum.d.cts +2 -1
  5. package/dist/endowments/enum.d.cts.map +1 -1
  6. package/dist/endowments/enum.d.mts +2 -1
  7. package/dist/endowments/enum.d.mts.map +1 -1
  8. package/dist/endowments/enum.mjs +1 -0
  9. package/dist/endowments/enum.mjs.map +1 -1
  10. package/dist/endowments/index.cjs +4 -0
  11. package/dist/endowments/index.cjs.map +1 -1
  12. package/dist/endowments/index.d.cts +12 -0
  13. package/dist/endowments/index.d.cts.map +1 -1
  14. package/dist/endowments/index.d.mts +12 -0
  15. package/dist/endowments/index.d.mts.map +1 -1
  16. package/dist/endowments/index.mjs +4 -0
  17. package/dist/endowments/index.mjs.map +1 -1
  18. package/dist/endowments/messenger.cjs +90 -0
  19. package/dist/endowments/messenger.cjs.map +1 -0
  20. package/dist/endowments/messenger.d.cts +40 -0
  21. package/dist/endowments/messenger.d.cts.map +1 -0
  22. package/dist/endowments/messenger.d.mts +40 -0
  23. package/dist/endowments/messenger.d.mts.map +1 -0
  24. package/dist/endowments/messenger.mjs +85 -0
  25. package/dist/endowments/messenger.mjs.map +1 -0
  26. package/dist/permitted/index.cjs.map +1 -1
  27. package/dist/permitted/index.d.cts +3 -2
  28. package/dist/permitted/index.d.cts.map +1 -1
  29. package/dist/permitted/index.d.mts +3 -2
  30. package/dist/permitted/index.d.mts.map +1 -1
  31. package/dist/permitted/index.mjs.map +1 -1
  32. package/dist/permitted/messengerCall.cjs +97 -0
  33. package/dist/permitted/messengerCall.cjs.map +1 -0
  34. package/dist/permitted/messengerCall.d.cts +54 -0
  35. package/dist/permitted/messengerCall.d.cts.map +1 -0
  36. package/dist/permitted/messengerCall.d.mts +54 -0
  37. package/dist/permitted/messengerCall.d.mts.map +1 -0
  38. package/dist/permitted/messengerCall.mjs +94 -0
  39. package/dist/permitted/messengerCall.mjs.map +1 -0
  40. package/dist/permitted/middleware.cjs +2 -0
  41. package/dist/permitted/middleware.cjs.map +1 -1
  42. package/dist/permitted/middleware.d.cts.map +1 -1
  43. package/dist/permitted/middleware.d.mts.map +1 -1
  44. package/dist/permitted/middleware.mjs +2 -0
  45. package/dist/permitted/middleware.mjs.map +1 -1
  46. package/dist/restricted/getBip32Entropy.cjs +1 -1
  47. package/dist/restricted/getBip32Entropy.cjs.map +1 -1
  48. package/dist/restricted/getBip32Entropy.d.cts +3 -3
  49. package/dist/restricted/getBip32Entropy.d.cts.map +1 -1
  50. package/dist/restricted/getBip32Entropy.d.mts +3 -3
  51. package/dist/restricted/getBip32Entropy.d.mts.map +1 -1
  52. package/dist/restricted/getBip32Entropy.mjs +1 -1
  53. package/dist/restricted/getBip32Entropy.mjs.map +1 -1
  54. package/dist/restricted/getBip32PublicKey.cjs +1 -1
  55. package/dist/restricted/getBip32PublicKey.cjs.map +1 -1
  56. package/dist/restricted/getBip32PublicKey.d.cts +3 -3
  57. package/dist/restricted/getBip32PublicKey.d.cts.map +1 -1
  58. package/dist/restricted/getBip32PublicKey.d.mts +3 -3
  59. package/dist/restricted/getBip32PublicKey.d.mts.map +1 -1
  60. package/dist/restricted/getBip32PublicKey.mjs +1 -1
  61. package/dist/restricted/getBip32PublicKey.mjs.map +1 -1
  62. package/dist/restricted/getBip44Entropy.cjs +1 -1
  63. package/dist/restricted/getBip44Entropy.cjs.map +1 -1
  64. package/dist/restricted/getBip44Entropy.d.cts +3 -3
  65. package/dist/restricted/getBip44Entropy.d.cts.map +1 -1
  66. package/dist/restricted/getBip44Entropy.d.mts +3 -3
  67. package/dist/restricted/getBip44Entropy.d.mts.map +1 -1
  68. package/dist/restricted/getBip44Entropy.mjs +1 -1
  69. package/dist/restricted/getBip44Entropy.mjs.map +1 -1
  70. package/dist/restricted/getEntropy.cjs +1 -1
  71. package/dist/restricted/getEntropy.cjs.map +1 -1
  72. package/dist/restricted/getEntropy.d.cts +3 -3
  73. package/dist/restricted/getEntropy.d.cts.map +1 -1
  74. package/dist/restricted/getEntropy.d.mts +3 -3
  75. package/dist/restricted/getEntropy.d.mts.map +1 -1
  76. package/dist/restricted/getEntropy.mjs +1 -1
  77. package/dist/restricted/getEntropy.mjs.map +1 -1
  78. package/dist/types.cjs.map +1 -1
  79. package/dist/types.d.cts +3 -3
  80. package/dist/types.d.cts.map +1 -1
  81. package/dist/types.d.mts +3 -3
  82. package/dist/types.d.mts.map +1 -1
  83. package/dist/types.mjs.map +1 -1
  84. package/dist/utils.cjs +5 -5
  85. package/dist/utils.cjs.map +1 -1
  86. package/dist/utils.d.cts +4 -4
  87. package/dist/utils.d.cts.map +1 -1
  88. package/dist/utils.d.mts +4 -4
  89. package/dist/utils.d.mts.map +1 -1
  90. package/dist/utils.mjs +5 -5
  91. package/dist/utils.mjs.map +1 -1
  92. package/package.json +7 -7
@@ -0,0 +1,85 @@
1
+ import { PermissionType, SubjectType } from "@metamask/permission-controller";
2
+ import { rpcErrors } from "@metamask/rpc-errors";
3
+ import { MessengerScopesStruct, SnapCaveatType } from "@metamask/snaps-utils";
4
+ import { assertStruct, hasProperty, isObject } from "@metamask/utils";
5
+ import { createGenericPermissionValidator } from "./caveats/index.mjs";
6
+ import { SnapEndowments } from "./enum.mjs";
7
+ const permissionName = SnapEndowments.Messenger;
8
+ /**
9
+ * `endowment:messenger` returns nothing; it is intended to be used as a
10
+ * flag by the Snaps Platform to detect whether a Snap has the capability to
11
+ * use the messenger API.
12
+ *
13
+ * @param _builderOptions - Optional specification builder options.
14
+ * @returns The specification for the messenger endowment.
15
+ */
16
+ const specificationBuilder = (_builderOptions) => {
17
+ return {
18
+ permissionType: PermissionType.Endowment,
19
+ targetName: permissionName,
20
+ allowedCaveats: [SnapCaveatType.MessengerScopes],
21
+ endowmentGetter: (_getterOptions) => null,
22
+ validator: createGenericPermissionValidator([
23
+ { type: SnapCaveatType.MessengerScopes },
24
+ ]),
25
+ subjectTypes: [SubjectType.Snap],
26
+ };
27
+ };
28
+ export const messengerEndowmentBuilder = Object.freeze({
29
+ targetName: permissionName,
30
+ specificationBuilder,
31
+ });
32
+ /**
33
+ * Map a raw value from the `initialPermissions` to a caveat specification.
34
+ * Note that this function does not do any validation, that's handled by the
35
+ * PermissionsController when the permission is requested.
36
+ *
37
+ * @param value - The raw value from the `initialPermissions`.
38
+ * @returns The caveat specification.
39
+ */
40
+ export function getMessengerCaveatMapper(value) {
41
+ if (!value || !isObject(value) || Object.keys(value).length === 0) {
42
+ return { caveats: null };
43
+ }
44
+ return {
45
+ caveats: [
46
+ {
47
+ type: SnapCaveatType.MessengerScopes,
48
+ value,
49
+ },
50
+ ],
51
+ };
52
+ }
53
+ /**
54
+ * Getter function to get the {@link MessengerActions} caveat value from a
55
+ * permission.
56
+ *
57
+ * @param permission - The permission to get the caveat value from.
58
+ * @returns The caveat value.
59
+ */
60
+ export function getMessengerCaveatActions(permission) {
61
+ const caveat = permission?.caveats?.find((permCaveat) => permCaveat.type === SnapCaveatType.MessengerScopes);
62
+ return caveat?.value.actions ? caveat.value.actions : null;
63
+ }
64
+ /**
65
+ * Validates the type of the caveat value.
66
+ *
67
+ * @param caveat - The caveat to validate.
68
+ * @throws If the caveat value is invalid.
69
+ */
70
+ function validateCaveat(caveat) {
71
+ if (!hasProperty(caveat, 'value') || !isObject(caveat)) {
72
+ throw rpcErrors.invalidParams({
73
+ message: 'Expected an object.',
74
+ });
75
+ }
76
+ const { value } = caveat;
77
+ assertStruct(value, MessengerScopesStruct, 'Invalid messenger scopes specified', rpcErrors.invalidParams);
78
+ }
79
+ export const messengerCaveatSpecifications = {
80
+ [SnapCaveatType.MessengerScopes]: Object.freeze({
81
+ type: SnapCaveatType.MessengerScopes,
82
+ validator: (caveat) => validateCaveat(caveat),
83
+ }),
84
+ };
85
+ //# sourceMappingURL=messenger.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messenger.mjs","sourceRoot":"","sources":["../../src/endowments/messenger.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,wCAAwC;AAC9E,OAAO,EAAE,SAAS,EAAE,6BAA6B;AAEjD,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,8BAA8B;AAG9E,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,wBAAwB;AAEtE,OAAO,EAAE,gCAAgC,EAAE,4BAAkB;AAC7D,OAAO,EAAE,cAAc,EAAE,mBAAe;AAExC,MAAM,cAAc,GAAG,cAAc,CAAC,SAAS,CAAC;AAWhD;;;;;;;GAOG;AACH,MAAM,oBAAoB,GAItB,CAAC,eAAyB,EAAE,EAAE;IAChC,OAAO;QACL,cAAc,EAAE,cAAc,CAAC,SAAS;QACxC,UAAU,EAAE,cAAc;QAC1B,cAAc,EAAE,CAAC,cAAc,CAAC,eAAe,CAAC;QAChD,eAAe,EAAE,CAAC,cAAsC,EAAE,EAAE,CAAC,IAAI;QACjE,SAAS,EAAE,gCAAgC,CAAC;YAC1C,EAAE,IAAI,EAAE,cAAc,CAAC,eAAe,EAAE;SACzC,CAAC;QACF,YAAY,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC;KACjC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC,MAAM,CAAC;IACrD,UAAU,EAAE,cAAc;IAC1B,oBAAoB;CACZ,CAAC,CAAC;AAEZ;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CACtC,KAAW;IAEX,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,cAAc,CAAC,eAAe;gBACpC,KAAK;aACN;SACF;KACF,CAAC;AACJ,CAAC;AAID;;;;;;GAMG;AACH,MAAM,UAAU,yBAAyB,CACvC,UAAiC;IAEjC,MAAM,MAAM,GAAG,UAAU,EAAE,OAAO,EAAE,IAAI,CACtC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,cAAc,CAAC,eAAe,CACL,CAAC;IAEhE,OAAO,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CAAC,MAA2B;IACjD,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACvD,MAAM,SAAS,CAAC,aAAa,CAAC;YAC5B,OAAO,EAAE,qBAAqB;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IACzB,YAAY,CACV,KAAK,EACL,qBAAqB,EACrB,oCAAoC,EACpC,SAAS,CAAC,aAAa,CACxB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,6BAA6B,GAGtC;IACF,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;QAC9C,IAAI,EAAE,cAAc,CAAC,eAAe;QACpC,SAAS,EAAE,CAAC,MAA2B,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC;KACnE,CAAC;CACH,CAAC","sourcesContent":["import type {\n Caveat,\n CaveatSpecificationConstraint,\n EndowmentGetterParams,\n PermissionConstraint,\n PermissionSpecificationBuilder,\n PermissionValidatorConstraint,\n ValidPermissionSpecification,\n} from '@metamask/permission-controller';\nimport { PermissionType, SubjectType } from '@metamask/permission-controller';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport type { MessengerActionsStruct } from '@metamask/snaps-utils';\nimport { MessengerScopesStruct, SnapCaveatType } from '@metamask/snaps-utils';\nimport type { Infer } from '@metamask/superstruct';\nimport type { Json, NonEmptyArray } from '@metamask/utils';\nimport { assertStruct, hasProperty, isObject } from '@metamask/utils';\n\nimport { createGenericPermissionValidator } from './caveats';\nimport { SnapEndowments } from './enum';\n\nconst permissionName = SnapEndowments.Messenger;\n\ntype MessengerEndowmentSpecification = ValidPermissionSpecification<{\n permissionType: PermissionType.Endowment;\n targetName: typeof permissionName;\n endowmentGetter: (_options?: EndowmentGetterParams) => null;\n allowedCaveats: Readonly<NonEmptyArray<string>> | null;\n validator: PermissionValidatorConstraint;\n subjectTypes: readonly SubjectType[];\n}>;\n\n/**\n * `endowment:messenger` returns nothing; it is intended to be used as a\n * flag by the Snaps Platform to detect whether a Snap has the capability to\n * use the messenger API.\n *\n * @param _builderOptions - Optional specification builder options.\n * @returns The specification for the messenger endowment.\n */\nconst specificationBuilder: PermissionSpecificationBuilder<\n PermissionType.Endowment,\n any,\n MessengerEndowmentSpecification\n> = (_builderOptions?: unknown) => {\n return {\n permissionType: PermissionType.Endowment,\n targetName: permissionName,\n allowedCaveats: [SnapCaveatType.MessengerScopes],\n endowmentGetter: (_getterOptions?: EndowmentGetterParams) => null,\n validator: createGenericPermissionValidator([\n { type: SnapCaveatType.MessengerScopes },\n ]),\n subjectTypes: [SubjectType.Snap],\n };\n};\n\nexport const messengerEndowmentBuilder = Object.freeze({\n targetName: permissionName,\n specificationBuilder,\n} as const);\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 getMessengerCaveatMapper(\n value: Json,\n): Pick<PermissionConstraint, 'caveats'> {\n if (!value || !isObject(value) || Object.keys(value).length === 0) {\n return { caveats: null };\n }\n\n return {\n caveats: [\n {\n type: SnapCaveatType.MessengerScopes,\n value,\n },\n ],\n };\n}\n\nexport type MessengerActions = Infer<typeof MessengerActionsStruct>;\n\n/**\n * Getter function to get the {@link MessengerActions} caveat value from a\n * permission.\n *\n * @param permission - The permission to get the caveat value from.\n * @returns The caveat value.\n */\nexport function getMessengerCaveatActions(\n permission?: PermissionConstraint,\n): MessengerActions | null {\n const caveat = permission?.caveats?.find(\n (permCaveat) => permCaveat.type === SnapCaveatType.MessengerScopes,\n ) as Caveat<string, { actions?: MessengerActions }> | undefined;\n\n return caveat?.value.actions ? caveat.value.actions : null;\n}\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') || !isObject(caveat)) {\n throw rpcErrors.invalidParams({\n message: 'Expected an object.',\n });\n }\n\n const { value } = caveat;\n assertStruct(\n value,\n MessengerScopesStruct,\n 'Invalid messenger scopes specified',\n rpcErrors.invalidParams,\n );\n}\n\nexport const messengerCaveatSpecifications: Record<\n SnapCaveatType.MessengerScopes,\n CaveatSpecificationConstraint\n> = {\n [SnapCaveatType.MessengerScopes]: Object.freeze({\n type: SnapCaveatType.MessengerScopes,\n validator: (caveat: Caveat<string, any>) => validateCaveat(caveat),\n }),\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../src/permitted/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAqFA,mDAA6B","sourcesContent":["import type { CancelBackgroundEventMethodActions } from './cancelBackgroundEvent';\nimport type { ClearStateMethodActions } from './clearState';\nimport type { CloseWebSocketMethodActions } from './closeWebSocket';\nimport type { CreateInterfaceMethodActions } from './createInterface';\nimport type { EndTraceMethodActions, EndTraceMethodHooks } from './endTrace';\nimport type { GetAllSnapsMethodActions } from './getAllSnaps';\nimport type { GetBackgroundEventsMethodActions } from './getBackgroundEvents';\nimport type {\n GetClientStatusMethodActions,\n GetClientStatusMethodHooks,\n} from './getClientStatus';\nimport type { GetFileMethodActions } from './getFile';\nimport type { GetInterfaceContextMethodActions } from './getInterfaceContext';\nimport type { GetInterfaceStateMethodActions } from './getInterfaceState';\nimport type { GetSnapsMethodActions } from './getSnaps';\nimport type { GetStateMethodActions, GetStateMethodHooks } from './getState';\nimport type { GetWebSocketsMethodActions } from './getWebSockets';\nimport type {\n InvokeKeyringMethodActions,\n InvokeKeyringMethodHooks,\n} from './invokeKeyring';\nimport type { InvokeSnapSugarMethodActions } from './invokeSnapSugar';\nimport type {\n ListEntropySourcesMethodActions,\n ListEntropySourcesMethodHooks,\n} from './listEntropySources';\nimport type { OpenWebSocketMethodActions } from './openWebSocket';\nimport type { RequestSnapsMethodActions } from './requestSnaps';\nimport type { ResolveInterfaceMethodActions } from './resolveInterface';\nimport type { ScheduleBackgroundEventMethodActions } from './scheduleBackgroundEvent';\nimport type { SendWebSocketMessageMethodActions } from './sendWebSocketMessage';\nimport type { SetStateMethodActions, SetStateMethodHooks } from './setState';\nimport type {\n StartTraceMethodActions,\n StartTraceMethodHooks,\n} from './startTrace';\nimport type {\n TrackErrorMethodActions,\n TrackErrorMethodHooks,\n} from './trackError';\nimport type {\n TrackEventMethodActions,\n TrackEventMethodHooks,\n} from './trackEvent';\nimport type { UpdateInterfaceMethodActions } from './updateInterface';\n\nexport type PermittedRpcMethodActions =\n | CancelBackgroundEventMethodActions\n | ClearStateMethodActions\n | CloseWebSocketMethodActions\n | CreateInterfaceMethodActions\n | EndTraceMethodActions\n | GetAllSnapsMethodActions\n | GetBackgroundEventsMethodActions\n | GetClientStatusMethodActions\n | GetFileMethodActions\n | GetInterfaceContextMethodActions\n | GetInterfaceStateMethodActions\n | GetSnapsMethodActions\n | GetStateMethodActions\n | GetWebSocketsMethodActions\n | InvokeKeyringMethodActions\n | InvokeSnapSugarMethodActions\n | ListEntropySourcesMethodActions\n | OpenWebSocketMethodActions\n | RequestSnapsMethodActions\n | ResolveInterfaceMethodActions\n | ScheduleBackgroundEventMethodActions\n | SendWebSocketMessageMethodActions\n | SetStateMethodActions\n | StartTraceMethodActions\n | TrackErrorMethodActions\n | TrackEventMethodActions\n | UpdateInterfaceMethodActions;\n\nexport type PermittedRpcMethodHooks = GetClientStatusMethodHooks &\n GetStateMethodHooks &\n ListEntropySourcesMethodHooks &\n SetStateMethodHooks &\n TrackEventMethodHooks &\n TrackErrorMethodHooks &\n StartTraceMethodHooks &\n EndTraceMethodHooks &\n InvokeKeyringMethodHooks;\n\nexport * from './middleware';\n"]}
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../src/permitted/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AA2FA,mDAA6B","sourcesContent":["import type { CancelBackgroundEventMethodActions } from './cancelBackgroundEvent';\nimport type { ClearStateMethodActions } from './clearState';\nimport type { CloseWebSocketMethodActions } from './closeWebSocket';\nimport type { CreateInterfaceMethodActions } from './createInterface';\nimport type { EndTraceMethodActions, EndTraceMethodHooks } from './endTrace';\nimport type { GetAllSnapsMethodActions } from './getAllSnaps';\nimport type { GetBackgroundEventsMethodActions } from './getBackgroundEvents';\nimport type {\n GetClientStatusMethodActions,\n GetClientStatusMethodHooks,\n} from './getClientStatus';\nimport type { GetFileMethodActions } from './getFile';\nimport type { GetInterfaceContextMethodActions } from './getInterfaceContext';\nimport type { GetInterfaceStateMethodActions } from './getInterfaceState';\nimport type { GetSnapsMethodActions } from './getSnaps';\nimport type { GetStateMethodActions, GetStateMethodHooks } from './getState';\nimport type { GetWebSocketsMethodActions } from './getWebSockets';\nimport type {\n InvokeKeyringMethodActions,\n InvokeKeyringMethodHooks,\n} from './invokeKeyring';\nimport type { InvokeSnapSugarMethodActions } from './invokeSnapSugar';\nimport type {\n ListEntropySourcesMethodActions,\n ListEntropySourcesMethodHooks,\n} from './listEntropySources';\nimport type {\n MessengerCallMethodActions,\n MessengerCallMethodHooks,\n} from './messengerCall';\nimport type { OpenWebSocketMethodActions } from './openWebSocket';\nimport type { RequestSnapsMethodActions } from './requestSnaps';\nimport type { ResolveInterfaceMethodActions } from './resolveInterface';\nimport type { ScheduleBackgroundEventMethodActions } from './scheduleBackgroundEvent';\nimport type { SendWebSocketMessageMethodActions } from './sendWebSocketMessage';\nimport type { SetStateMethodActions, SetStateMethodHooks } from './setState';\nimport type {\n StartTraceMethodActions,\n StartTraceMethodHooks,\n} from './startTrace';\nimport type {\n TrackErrorMethodActions,\n TrackErrorMethodHooks,\n} from './trackError';\nimport type {\n TrackEventMethodActions,\n TrackEventMethodHooks,\n} from './trackEvent';\nimport type { UpdateInterfaceMethodActions } from './updateInterface';\n\nexport type PermittedRpcMethodActions =\n | CancelBackgroundEventMethodActions\n | ClearStateMethodActions\n | CloseWebSocketMethodActions\n | CreateInterfaceMethodActions\n | EndTraceMethodActions\n | GetAllSnapsMethodActions\n | GetBackgroundEventsMethodActions\n | GetClientStatusMethodActions\n | GetFileMethodActions\n | GetInterfaceContextMethodActions\n | GetInterfaceStateMethodActions\n | GetSnapsMethodActions\n | GetStateMethodActions\n | GetWebSocketsMethodActions\n | InvokeKeyringMethodActions\n | InvokeSnapSugarMethodActions\n | ListEntropySourcesMethodActions\n | OpenWebSocketMethodActions\n | RequestSnapsMethodActions\n | ResolveInterfaceMethodActions\n | ScheduleBackgroundEventMethodActions\n | SendWebSocketMessageMethodActions\n | SetStateMethodActions\n | StartTraceMethodActions\n | TrackErrorMethodActions\n | TrackEventMethodActions\n | UpdateInterfaceMethodActions\n | MessengerCallMethodActions;\n\nexport type PermittedRpcMethodHooks = GetClientStatusMethodHooks &\n GetStateMethodHooks &\n ListEntropySourcesMethodHooks &\n SetStateMethodHooks &\n TrackEventMethodHooks &\n TrackErrorMethodHooks &\n StartTraceMethodHooks &\n EndTraceMethodHooks &\n InvokeKeyringMethodHooks &\n MessengerCallMethodHooks;\n\nexport * from './middleware';\n"]}
@@ -15,6 +15,7 @@ import type { GetWebSocketsMethodActions } from "./getWebSockets.cjs";
15
15
  import type { InvokeKeyringMethodActions, InvokeKeyringMethodHooks } from "./invokeKeyring.cjs";
16
16
  import type { InvokeSnapSugarMethodActions } from "./invokeSnapSugar.cjs";
17
17
  import type { ListEntropySourcesMethodActions, ListEntropySourcesMethodHooks } from "./listEntropySources.cjs";
18
+ import type { MessengerCallMethodActions, MessengerCallMethodHooks } from "./messengerCall.cjs";
18
19
  import type { OpenWebSocketMethodActions } from "./openWebSocket.cjs";
19
20
  import type { RequestSnapsMethodActions } from "./requestSnaps.cjs";
20
21
  import type { ResolveInterfaceMethodActions } from "./resolveInterface.cjs";
@@ -25,7 +26,7 @@ import type { StartTraceMethodActions, StartTraceMethodHooks } from "./startTrac
25
26
  import type { TrackErrorMethodActions, TrackErrorMethodHooks } from "./trackError.cjs";
26
27
  import type { TrackEventMethodActions, TrackEventMethodHooks } from "./trackEvent.cjs";
27
28
  import type { UpdateInterfaceMethodActions } from "./updateInterface.cjs";
28
- export type PermittedRpcMethodActions = CancelBackgroundEventMethodActions | ClearStateMethodActions | CloseWebSocketMethodActions | CreateInterfaceMethodActions | EndTraceMethodActions | GetAllSnapsMethodActions | GetBackgroundEventsMethodActions | GetClientStatusMethodActions | GetFileMethodActions | GetInterfaceContextMethodActions | GetInterfaceStateMethodActions | GetSnapsMethodActions | GetStateMethodActions | GetWebSocketsMethodActions | InvokeKeyringMethodActions | InvokeSnapSugarMethodActions | ListEntropySourcesMethodActions | OpenWebSocketMethodActions | RequestSnapsMethodActions | ResolveInterfaceMethodActions | ScheduleBackgroundEventMethodActions | SendWebSocketMessageMethodActions | SetStateMethodActions | StartTraceMethodActions | TrackErrorMethodActions | TrackEventMethodActions | UpdateInterfaceMethodActions;
29
- export type PermittedRpcMethodHooks = GetClientStatusMethodHooks & GetStateMethodHooks & ListEntropySourcesMethodHooks & SetStateMethodHooks & TrackEventMethodHooks & TrackErrorMethodHooks & StartTraceMethodHooks & EndTraceMethodHooks & InvokeKeyringMethodHooks;
29
+ export type PermittedRpcMethodActions = CancelBackgroundEventMethodActions | ClearStateMethodActions | CloseWebSocketMethodActions | CreateInterfaceMethodActions | EndTraceMethodActions | GetAllSnapsMethodActions | GetBackgroundEventsMethodActions | GetClientStatusMethodActions | GetFileMethodActions | GetInterfaceContextMethodActions | GetInterfaceStateMethodActions | GetSnapsMethodActions | GetStateMethodActions | GetWebSocketsMethodActions | InvokeKeyringMethodActions | InvokeSnapSugarMethodActions | ListEntropySourcesMethodActions | OpenWebSocketMethodActions | RequestSnapsMethodActions | ResolveInterfaceMethodActions | ScheduleBackgroundEventMethodActions | SendWebSocketMessageMethodActions | SetStateMethodActions | StartTraceMethodActions | TrackErrorMethodActions | TrackEventMethodActions | UpdateInterfaceMethodActions | MessengerCallMethodActions;
30
+ export type PermittedRpcMethodHooks = GetClientStatusMethodHooks & GetStateMethodHooks & ListEntropySourcesMethodHooks & SetStateMethodHooks & TrackEventMethodHooks & TrackErrorMethodHooks & StartTraceMethodHooks & EndTraceMethodHooks & InvokeKeyringMethodHooks & MessengerCallMethodHooks;
30
31
  export * from "./middleware.cjs";
31
32
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/permitted/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kCAAkC,EAAE,oCAAgC;AAClF,OAAO,KAAK,EAAE,uBAAuB,EAAE,yBAAqB;AAC5D,OAAO,KAAK,EAAE,2BAA2B,EAAE,6BAAyB;AACpE,OAAO,KAAK,EAAE,4BAA4B,EAAE,8BAA0B;AACtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,uBAAmB;AAC7E,OAAO,KAAK,EAAE,wBAAwB,EAAE,0BAAsB;AAC9D,OAAO,KAAK,EAAE,gCAAgC,EAAE,kCAA8B;AAC9E,OAAO,KAAK,EACV,4BAA4B,EAC5B,0BAA0B,EAC3B,8BAA0B;AAC3B,OAAO,KAAK,EAAE,oBAAoB,EAAE,sBAAkB;AACtD,OAAO,KAAK,EAAE,gCAAgC,EAAE,kCAA8B;AAC9E,OAAO,KAAK,EAAE,8BAA8B,EAAE,gCAA4B;AAC1E,OAAO,KAAK,EAAE,qBAAqB,EAAE,uBAAmB;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,uBAAmB;AAC7E,OAAO,KAAK,EAAE,0BAA0B,EAAE,4BAAwB;AAClE,OAAO,KAAK,EACV,0BAA0B,EAC1B,wBAAwB,EACzB,4BAAwB;AACzB,OAAO,KAAK,EAAE,4BAA4B,EAAE,8BAA0B;AACtE,OAAO,KAAK,EACV,+BAA+B,EAC/B,6BAA6B,EAC9B,iCAA6B;AAC9B,OAAO,KAAK,EAAE,0BAA0B,EAAE,4BAAwB;AAClE,OAAO,KAAK,EAAE,yBAAyB,EAAE,2BAAuB;AAChE,OAAO,KAAK,EAAE,6BAA6B,EAAE,+BAA2B;AACxE,OAAO,KAAK,EAAE,oCAAoC,EAAE,sCAAkC;AACtF,OAAO,KAAK,EAAE,iCAAiC,EAAE,mCAA+B;AAChF,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,uBAAmB;AAC7E,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACtB,yBAAqB;AACtB,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACtB,yBAAqB;AACtB,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACtB,yBAAqB;AACtB,OAAO,KAAK,EAAE,4BAA4B,EAAE,8BAA0B;AAEtE,MAAM,MAAM,yBAAyB,GACjC,kCAAkC,GAClC,uBAAuB,GACvB,2BAA2B,GAC3B,4BAA4B,GAC5B,qBAAqB,GACrB,wBAAwB,GACxB,gCAAgC,GAChC,4BAA4B,GAC5B,oBAAoB,GACpB,gCAAgC,GAChC,8BAA8B,GAC9B,qBAAqB,GACrB,qBAAqB,GACrB,0BAA0B,GAC1B,0BAA0B,GAC1B,4BAA4B,GAC5B,+BAA+B,GAC/B,0BAA0B,GAC1B,yBAAyB,GACzB,6BAA6B,GAC7B,oCAAoC,GACpC,iCAAiC,GACjC,qBAAqB,GACrB,uBAAuB,GACvB,uBAAuB,GACvB,uBAAuB,GACvB,4BAA4B,CAAC;AAEjC,MAAM,MAAM,uBAAuB,GAAG,0BAA0B,GAC9D,mBAAmB,GACnB,6BAA6B,GAC7B,mBAAmB,GACnB,qBAAqB,GACrB,qBAAqB,GACrB,qBAAqB,GACrB,mBAAmB,GACnB,wBAAwB,CAAC;AAE3B,iCAA6B"}
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/permitted/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kCAAkC,EAAE,oCAAgC;AAClF,OAAO,KAAK,EAAE,uBAAuB,EAAE,yBAAqB;AAC5D,OAAO,KAAK,EAAE,2BAA2B,EAAE,6BAAyB;AACpE,OAAO,KAAK,EAAE,4BAA4B,EAAE,8BAA0B;AACtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,uBAAmB;AAC7E,OAAO,KAAK,EAAE,wBAAwB,EAAE,0BAAsB;AAC9D,OAAO,KAAK,EAAE,gCAAgC,EAAE,kCAA8B;AAC9E,OAAO,KAAK,EACV,4BAA4B,EAC5B,0BAA0B,EAC3B,8BAA0B;AAC3B,OAAO,KAAK,EAAE,oBAAoB,EAAE,sBAAkB;AACtD,OAAO,KAAK,EAAE,gCAAgC,EAAE,kCAA8B;AAC9E,OAAO,KAAK,EAAE,8BAA8B,EAAE,gCAA4B;AAC1E,OAAO,KAAK,EAAE,qBAAqB,EAAE,uBAAmB;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,uBAAmB;AAC7E,OAAO,KAAK,EAAE,0BAA0B,EAAE,4BAAwB;AAClE,OAAO,KAAK,EACV,0BAA0B,EAC1B,wBAAwB,EACzB,4BAAwB;AACzB,OAAO,KAAK,EAAE,4BAA4B,EAAE,8BAA0B;AACtE,OAAO,KAAK,EACV,+BAA+B,EAC/B,6BAA6B,EAC9B,iCAA6B;AAC9B,OAAO,KAAK,EACV,0BAA0B,EAC1B,wBAAwB,EACzB,4BAAwB;AACzB,OAAO,KAAK,EAAE,0BAA0B,EAAE,4BAAwB;AAClE,OAAO,KAAK,EAAE,yBAAyB,EAAE,2BAAuB;AAChE,OAAO,KAAK,EAAE,6BAA6B,EAAE,+BAA2B;AACxE,OAAO,KAAK,EAAE,oCAAoC,EAAE,sCAAkC;AACtF,OAAO,KAAK,EAAE,iCAAiC,EAAE,mCAA+B;AAChF,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,uBAAmB;AAC7E,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACtB,yBAAqB;AACtB,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACtB,yBAAqB;AACtB,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACtB,yBAAqB;AACtB,OAAO,KAAK,EAAE,4BAA4B,EAAE,8BAA0B;AAEtE,MAAM,MAAM,yBAAyB,GACjC,kCAAkC,GAClC,uBAAuB,GACvB,2BAA2B,GAC3B,4BAA4B,GAC5B,qBAAqB,GACrB,wBAAwB,GACxB,gCAAgC,GAChC,4BAA4B,GAC5B,oBAAoB,GACpB,gCAAgC,GAChC,8BAA8B,GAC9B,qBAAqB,GACrB,qBAAqB,GACrB,0BAA0B,GAC1B,0BAA0B,GAC1B,4BAA4B,GAC5B,+BAA+B,GAC/B,0BAA0B,GAC1B,yBAAyB,GACzB,6BAA6B,GAC7B,oCAAoC,GACpC,iCAAiC,GACjC,qBAAqB,GACrB,uBAAuB,GACvB,uBAAuB,GACvB,uBAAuB,GACvB,4BAA4B,GAC5B,0BAA0B,CAAC;AAE/B,MAAM,MAAM,uBAAuB,GAAG,0BAA0B,GAC9D,mBAAmB,GACnB,6BAA6B,GAC7B,mBAAmB,GACnB,qBAAqB,GACrB,qBAAqB,GACrB,qBAAqB,GACrB,mBAAmB,GACnB,wBAAwB,GACxB,wBAAwB,CAAC;AAE3B,iCAA6B"}
@@ -15,6 +15,7 @@ import type { GetWebSocketsMethodActions } from "./getWebSockets.mjs";
15
15
  import type { InvokeKeyringMethodActions, InvokeKeyringMethodHooks } from "./invokeKeyring.mjs";
16
16
  import type { InvokeSnapSugarMethodActions } from "./invokeSnapSugar.mjs";
17
17
  import type { ListEntropySourcesMethodActions, ListEntropySourcesMethodHooks } from "./listEntropySources.mjs";
18
+ import type { MessengerCallMethodActions, MessengerCallMethodHooks } from "./messengerCall.mjs";
18
19
  import type { OpenWebSocketMethodActions } from "./openWebSocket.mjs";
19
20
  import type { RequestSnapsMethodActions } from "./requestSnaps.mjs";
20
21
  import type { ResolveInterfaceMethodActions } from "./resolveInterface.mjs";
@@ -25,7 +26,7 @@ import type { StartTraceMethodActions, StartTraceMethodHooks } from "./startTrac
25
26
  import type { TrackErrorMethodActions, TrackErrorMethodHooks } from "./trackError.mjs";
26
27
  import type { TrackEventMethodActions, TrackEventMethodHooks } from "./trackEvent.mjs";
27
28
  import type { UpdateInterfaceMethodActions } from "./updateInterface.mjs";
28
- export type PermittedRpcMethodActions = CancelBackgroundEventMethodActions | ClearStateMethodActions | CloseWebSocketMethodActions | CreateInterfaceMethodActions | EndTraceMethodActions | GetAllSnapsMethodActions | GetBackgroundEventsMethodActions | GetClientStatusMethodActions | GetFileMethodActions | GetInterfaceContextMethodActions | GetInterfaceStateMethodActions | GetSnapsMethodActions | GetStateMethodActions | GetWebSocketsMethodActions | InvokeKeyringMethodActions | InvokeSnapSugarMethodActions | ListEntropySourcesMethodActions | OpenWebSocketMethodActions | RequestSnapsMethodActions | ResolveInterfaceMethodActions | ScheduleBackgroundEventMethodActions | SendWebSocketMessageMethodActions | SetStateMethodActions | StartTraceMethodActions | TrackErrorMethodActions | TrackEventMethodActions | UpdateInterfaceMethodActions;
29
- export type PermittedRpcMethodHooks = GetClientStatusMethodHooks & GetStateMethodHooks & ListEntropySourcesMethodHooks & SetStateMethodHooks & TrackEventMethodHooks & TrackErrorMethodHooks & StartTraceMethodHooks & EndTraceMethodHooks & InvokeKeyringMethodHooks;
29
+ export type PermittedRpcMethodActions = CancelBackgroundEventMethodActions | ClearStateMethodActions | CloseWebSocketMethodActions | CreateInterfaceMethodActions | EndTraceMethodActions | GetAllSnapsMethodActions | GetBackgroundEventsMethodActions | GetClientStatusMethodActions | GetFileMethodActions | GetInterfaceContextMethodActions | GetInterfaceStateMethodActions | GetSnapsMethodActions | GetStateMethodActions | GetWebSocketsMethodActions | InvokeKeyringMethodActions | InvokeSnapSugarMethodActions | ListEntropySourcesMethodActions | OpenWebSocketMethodActions | RequestSnapsMethodActions | ResolveInterfaceMethodActions | ScheduleBackgroundEventMethodActions | SendWebSocketMessageMethodActions | SetStateMethodActions | StartTraceMethodActions | TrackErrorMethodActions | TrackEventMethodActions | UpdateInterfaceMethodActions | MessengerCallMethodActions;
30
+ export type PermittedRpcMethodHooks = GetClientStatusMethodHooks & GetStateMethodHooks & ListEntropySourcesMethodHooks & SetStateMethodHooks & TrackEventMethodHooks & TrackErrorMethodHooks & StartTraceMethodHooks & EndTraceMethodHooks & InvokeKeyringMethodHooks & MessengerCallMethodHooks;
30
31
  export * from "./middleware.mjs";
31
32
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/permitted/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kCAAkC,EAAE,oCAAgC;AAClF,OAAO,KAAK,EAAE,uBAAuB,EAAE,yBAAqB;AAC5D,OAAO,KAAK,EAAE,2BAA2B,EAAE,6BAAyB;AACpE,OAAO,KAAK,EAAE,4BAA4B,EAAE,8BAA0B;AACtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,uBAAmB;AAC7E,OAAO,KAAK,EAAE,wBAAwB,EAAE,0BAAsB;AAC9D,OAAO,KAAK,EAAE,gCAAgC,EAAE,kCAA8B;AAC9E,OAAO,KAAK,EACV,4BAA4B,EAC5B,0BAA0B,EAC3B,8BAA0B;AAC3B,OAAO,KAAK,EAAE,oBAAoB,EAAE,sBAAkB;AACtD,OAAO,KAAK,EAAE,gCAAgC,EAAE,kCAA8B;AAC9E,OAAO,KAAK,EAAE,8BAA8B,EAAE,gCAA4B;AAC1E,OAAO,KAAK,EAAE,qBAAqB,EAAE,uBAAmB;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,uBAAmB;AAC7E,OAAO,KAAK,EAAE,0BAA0B,EAAE,4BAAwB;AAClE,OAAO,KAAK,EACV,0BAA0B,EAC1B,wBAAwB,EACzB,4BAAwB;AACzB,OAAO,KAAK,EAAE,4BAA4B,EAAE,8BAA0B;AACtE,OAAO,KAAK,EACV,+BAA+B,EAC/B,6BAA6B,EAC9B,iCAA6B;AAC9B,OAAO,KAAK,EAAE,0BAA0B,EAAE,4BAAwB;AAClE,OAAO,KAAK,EAAE,yBAAyB,EAAE,2BAAuB;AAChE,OAAO,KAAK,EAAE,6BAA6B,EAAE,+BAA2B;AACxE,OAAO,KAAK,EAAE,oCAAoC,EAAE,sCAAkC;AACtF,OAAO,KAAK,EAAE,iCAAiC,EAAE,mCAA+B;AAChF,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,uBAAmB;AAC7E,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACtB,yBAAqB;AACtB,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACtB,yBAAqB;AACtB,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACtB,yBAAqB;AACtB,OAAO,KAAK,EAAE,4BAA4B,EAAE,8BAA0B;AAEtE,MAAM,MAAM,yBAAyB,GACjC,kCAAkC,GAClC,uBAAuB,GACvB,2BAA2B,GAC3B,4BAA4B,GAC5B,qBAAqB,GACrB,wBAAwB,GACxB,gCAAgC,GAChC,4BAA4B,GAC5B,oBAAoB,GACpB,gCAAgC,GAChC,8BAA8B,GAC9B,qBAAqB,GACrB,qBAAqB,GACrB,0BAA0B,GAC1B,0BAA0B,GAC1B,4BAA4B,GAC5B,+BAA+B,GAC/B,0BAA0B,GAC1B,yBAAyB,GACzB,6BAA6B,GAC7B,oCAAoC,GACpC,iCAAiC,GACjC,qBAAqB,GACrB,uBAAuB,GACvB,uBAAuB,GACvB,uBAAuB,GACvB,4BAA4B,CAAC;AAEjC,MAAM,MAAM,uBAAuB,GAAG,0BAA0B,GAC9D,mBAAmB,GACnB,6BAA6B,GAC7B,mBAAmB,GACnB,qBAAqB,GACrB,qBAAqB,GACrB,qBAAqB,GACrB,mBAAmB,GACnB,wBAAwB,CAAC;AAE3B,iCAA6B"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/permitted/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kCAAkC,EAAE,oCAAgC;AAClF,OAAO,KAAK,EAAE,uBAAuB,EAAE,yBAAqB;AAC5D,OAAO,KAAK,EAAE,2BAA2B,EAAE,6BAAyB;AACpE,OAAO,KAAK,EAAE,4BAA4B,EAAE,8BAA0B;AACtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,uBAAmB;AAC7E,OAAO,KAAK,EAAE,wBAAwB,EAAE,0BAAsB;AAC9D,OAAO,KAAK,EAAE,gCAAgC,EAAE,kCAA8B;AAC9E,OAAO,KAAK,EACV,4BAA4B,EAC5B,0BAA0B,EAC3B,8BAA0B;AAC3B,OAAO,KAAK,EAAE,oBAAoB,EAAE,sBAAkB;AACtD,OAAO,KAAK,EAAE,gCAAgC,EAAE,kCAA8B;AAC9E,OAAO,KAAK,EAAE,8BAA8B,EAAE,gCAA4B;AAC1E,OAAO,KAAK,EAAE,qBAAqB,EAAE,uBAAmB;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,uBAAmB;AAC7E,OAAO,KAAK,EAAE,0BAA0B,EAAE,4BAAwB;AAClE,OAAO,KAAK,EACV,0BAA0B,EAC1B,wBAAwB,EACzB,4BAAwB;AACzB,OAAO,KAAK,EAAE,4BAA4B,EAAE,8BAA0B;AACtE,OAAO,KAAK,EACV,+BAA+B,EAC/B,6BAA6B,EAC9B,iCAA6B;AAC9B,OAAO,KAAK,EACV,0BAA0B,EAC1B,wBAAwB,EACzB,4BAAwB;AACzB,OAAO,KAAK,EAAE,0BAA0B,EAAE,4BAAwB;AAClE,OAAO,KAAK,EAAE,yBAAyB,EAAE,2BAAuB;AAChE,OAAO,KAAK,EAAE,6BAA6B,EAAE,+BAA2B;AACxE,OAAO,KAAK,EAAE,oCAAoC,EAAE,sCAAkC;AACtF,OAAO,KAAK,EAAE,iCAAiC,EAAE,mCAA+B;AAChF,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,uBAAmB;AAC7E,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACtB,yBAAqB;AACtB,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACtB,yBAAqB;AACtB,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACtB,yBAAqB;AACtB,OAAO,KAAK,EAAE,4BAA4B,EAAE,8BAA0B;AAEtE,MAAM,MAAM,yBAAyB,GACjC,kCAAkC,GAClC,uBAAuB,GACvB,2BAA2B,GAC3B,4BAA4B,GAC5B,qBAAqB,GACrB,wBAAwB,GACxB,gCAAgC,GAChC,4BAA4B,GAC5B,oBAAoB,GACpB,gCAAgC,GAChC,8BAA8B,GAC9B,qBAAqB,GACrB,qBAAqB,GACrB,0BAA0B,GAC1B,0BAA0B,GAC1B,4BAA4B,GAC5B,+BAA+B,GAC/B,0BAA0B,GAC1B,yBAAyB,GACzB,6BAA6B,GAC7B,oCAAoC,GACpC,iCAAiC,GACjC,qBAAqB,GACrB,uBAAuB,GACvB,uBAAuB,GACvB,uBAAuB,GACvB,4BAA4B,GAC5B,0BAA0B,CAAC;AAE/B,MAAM,MAAM,uBAAuB,GAAG,0BAA0B,GAC9D,mBAAmB,GACnB,6BAA6B,GAC7B,mBAAmB,GACnB,qBAAqB,GACrB,qBAAqB,GACrB,qBAAqB,GACrB,mBAAmB,GACnB,wBAAwB,GACxB,wBAAwB,CAAC;AAE3B,iCAA6B"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/permitted/index.ts"],"names":[],"mappings":"AAqFA,iCAA6B","sourcesContent":["import type { CancelBackgroundEventMethodActions } from './cancelBackgroundEvent';\nimport type { ClearStateMethodActions } from './clearState';\nimport type { CloseWebSocketMethodActions } from './closeWebSocket';\nimport type { CreateInterfaceMethodActions } from './createInterface';\nimport type { EndTraceMethodActions, EndTraceMethodHooks } from './endTrace';\nimport type { GetAllSnapsMethodActions } from './getAllSnaps';\nimport type { GetBackgroundEventsMethodActions } from './getBackgroundEvents';\nimport type {\n GetClientStatusMethodActions,\n GetClientStatusMethodHooks,\n} from './getClientStatus';\nimport type { GetFileMethodActions } from './getFile';\nimport type { GetInterfaceContextMethodActions } from './getInterfaceContext';\nimport type { GetInterfaceStateMethodActions } from './getInterfaceState';\nimport type { GetSnapsMethodActions } from './getSnaps';\nimport type { GetStateMethodActions, GetStateMethodHooks } from './getState';\nimport type { GetWebSocketsMethodActions } from './getWebSockets';\nimport type {\n InvokeKeyringMethodActions,\n InvokeKeyringMethodHooks,\n} from './invokeKeyring';\nimport type { InvokeSnapSugarMethodActions } from './invokeSnapSugar';\nimport type {\n ListEntropySourcesMethodActions,\n ListEntropySourcesMethodHooks,\n} from './listEntropySources';\nimport type { OpenWebSocketMethodActions } from './openWebSocket';\nimport type { RequestSnapsMethodActions } from './requestSnaps';\nimport type { ResolveInterfaceMethodActions } from './resolveInterface';\nimport type { ScheduleBackgroundEventMethodActions } from './scheduleBackgroundEvent';\nimport type { SendWebSocketMessageMethodActions } from './sendWebSocketMessage';\nimport type { SetStateMethodActions, SetStateMethodHooks } from './setState';\nimport type {\n StartTraceMethodActions,\n StartTraceMethodHooks,\n} from './startTrace';\nimport type {\n TrackErrorMethodActions,\n TrackErrorMethodHooks,\n} from './trackError';\nimport type {\n TrackEventMethodActions,\n TrackEventMethodHooks,\n} from './trackEvent';\nimport type { UpdateInterfaceMethodActions } from './updateInterface';\n\nexport type PermittedRpcMethodActions =\n | CancelBackgroundEventMethodActions\n | ClearStateMethodActions\n | CloseWebSocketMethodActions\n | CreateInterfaceMethodActions\n | EndTraceMethodActions\n | GetAllSnapsMethodActions\n | GetBackgroundEventsMethodActions\n | GetClientStatusMethodActions\n | GetFileMethodActions\n | GetInterfaceContextMethodActions\n | GetInterfaceStateMethodActions\n | GetSnapsMethodActions\n | GetStateMethodActions\n | GetWebSocketsMethodActions\n | InvokeKeyringMethodActions\n | InvokeSnapSugarMethodActions\n | ListEntropySourcesMethodActions\n | OpenWebSocketMethodActions\n | RequestSnapsMethodActions\n | ResolveInterfaceMethodActions\n | ScheduleBackgroundEventMethodActions\n | SendWebSocketMessageMethodActions\n | SetStateMethodActions\n | StartTraceMethodActions\n | TrackErrorMethodActions\n | TrackEventMethodActions\n | UpdateInterfaceMethodActions;\n\nexport type PermittedRpcMethodHooks = GetClientStatusMethodHooks &\n GetStateMethodHooks &\n ListEntropySourcesMethodHooks &\n SetStateMethodHooks &\n TrackEventMethodHooks &\n TrackErrorMethodHooks &\n StartTraceMethodHooks &\n EndTraceMethodHooks &\n InvokeKeyringMethodHooks;\n\nexport * from './middleware';\n"]}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/permitted/index.ts"],"names":[],"mappings":"AA2FA,iCAA6B","sourcesContent":["import type { CancelBackgroundEventMethodActions } from './cancelBackgroundEvent';\nimport type { ClearStateMethodActions } from './clearState';\nimport type { CloseWebSocketMethodActions } from './closeWebSocket';\nimport type { CreateInterfaceMethodActions } from './createInterface';\nimport type { EndTraceMethodActions, EndTraceMethodHooks } from './endTrace';\nimport type { GetAllSnapsMethodActions } from './getAllSnaps';\nimport type { GetBackgroundEventsMethodActions } from './getBackgroundEvents';\nimport type {\n GetClientStatusMethodActions,\n GetClientStatusMethodHooks,\n} from './getClientStatus';\nimport type { GetFileMethodActions } from './getFile';\nimport type { GetInterfaceContextMethodActions } from './getInterfaceContext';\nimport type { GetInterfaceStateMethodActions } from './getInterfaceState';\nimport type { GetSnapsMethodActions } from './getSnaps';\nimport type { GetStateMethodActions, GetStateMethodHooks } from './getState';\nimport type { GetWebSocketsMethodActions } from './getWebSockets';\nimport type {\n InvokeKeyringMethodActions,\n InvokeKeyringMethodHooks,\n} from './invokeKeyring';\nimport type { InvokeSnapSugarMethodActions } from './invokeSnapSugar';\nimport type {\n ListEntropySourcesMethodActions,\n ListEntropySourcesMethodHooks,\n} from './listEntropySources';\nimport type {\n MessengerCallMethodActions,\n MessengerCallMethodHooks,\n} from './messengerCall';\nimport type { OpenWebSocketMethodActions } from './openWebSocket';\nimport type { RequestSnapsMethodActions } from './requestSnaps';\nimport type { ResolveInterfaceMethodActions } from './resolveInterface';\nimport type { ScheduleBackgroundEventMethodActions } from './scheduleBackgroundEvent';\nimport type { SendWebSocketMessageMethodActions } from './sendWebSocketMessage';\nimport type { SetStateMethodActions, SetStateMethodHooks } from './setState';\nimport type {\n StartTraceMethodActions,\n StartTraceMethodHooks,\n} from './startTrace';\nimport type {\n TrackErrorMethodActions,\n TrackErrorMethodHooks,\n} from './trackError';\nimport type {\n TrackEventMethodActions,\n TrackEventMethodHooks,\n} from './trackEvent';\nimport type { UpdateInterfaceMethodActions } from './updateInterface';\n\nexport type PermittedRpcMethodActions =\n | CancelBackgroundEventMethodActions\n | ClearStateMethodActions\n | CloseWebSocketMethodActions\n | CreateInterfaceMethodActions\n | EndTraceMethodActions\n | GetAllSnapsMethodActions\n | GetBackgroundEventsMethodActions\n | GetClientStatusMethodActions\n | GetFileMethodActions\n | GetInterfaceContextMethodActions\n | GetInterfaceStateMethodActions\n | GetSnapsMethodActions\n | GetStateMethodActions\n | GetWebSocketsMethodActions\n | InvokeKeyringMethodActions\n | InvokeSnapSugarMethodActions\n | ListEntropySourcesMethodActions\n | OpenWebSocketMethodActions\n | RequestSnapsMethodActions\n | ResolveInterfaceMethodActions\n | ScheduleBackgroundEventMethodActions\n | SendWebSocketMessageMethodActions\n | SetStateMethodActions\n | StartTraceMethodActions\n | TrackErrorMethodActions\n | TrackEventMethodActions\n | UpdateInterfaceMethodActions\n | MessengerCallMethodActions;\n\nexport type PermittedRpcMethodHooks = GetClientStatusMethodHooks &\n GetStateMethodHooks &\n ListEntropySourcesMethodHooks &\n SetStateMethodHooks &\n TrackEventMethodHooks &\n TrackErrorMethodHooks &\n StartTraceMethodHooks &\n EndTraceMethodHooks &\n InvokeKeyringMethodHooks &\n MessengerCallMethodHooks;\n\nexport * from './middleware';\n"]}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.messengerCallHandler = void 0;
4
+ const rpc_errors_1 = require("@metamask/rpc-errors");
5
+ const superstruct_1 = require("@metamask/superstruct");
6
+ const utils_1 = require("@metamask/utils");
7
+ const endowments_1 = require("../endowments/index.cjs");
8
+ const messenger_1 = require("../endowments/messenger.cjs");
9
+ const hookNames = {
10
+ getMessenger: true,
11
+ };
12
+ const BLOCKED_MESSENGER_CLIENTS = [
13
+ 'ApprovalController',
14
+ 'KeyringController',
15
+ 'PermissionController',
16
+ 'SnapController',
17
+ 'WebSocketService',
18
+ 'CronjobController',
19
+ 'SnapInsightsController',
20
+ 'SnapInterfaceController',
21
+ 'MultichainRoutingService',
22
+ 'ExecutionService',
23
+ 'SnapRegistryController',
24
+ ];
25
+ const MessengerCallParametersStruct = (0, superstruct_1.object)({
26
+ action: (0, utils_1.definePattern)('MessengerAction', /^.+:.+$/u),
27
+ params: (0, superstruct_1.array)(utils_1.JsonStruct),
28
+ });
29
+ /**
30
+ * Handler for the `snap_messengerCall` method.
31
+ *
32
+ * @internal
33
+ */
34
+ exports.messengerCallHandler = {
35
+ implementation: getMessengerCallImplementation,
36
+ hookNames,
37
+ actionNames: ['SnapController:getSnap', 'PermissionController:getPermission'],
38
+ };
39
+ /**
40
+ * The `snap_messengerCall` method implementation. This method is used to dispatch
41
+ * an action via the messenger. It is only available to preinstalled Snaps.
42
+ *
43
+ * @param request - The JSON-RPC request object.
44
+ * @param response - The JSON-RPC response object.
45
+ * @param _next - The `json-rpc-engine` "next" callback. Not used by this
46
+ * function.
47
+ * @param end - The `json-rpc-engine` "end" callback.
48
+ * @param hooks - The RPC method hooks.
49
+ * @param hooks.getMessenger - The hook function to create a custom messenger for the Snap.
50
+ * @param messenger - The messenger used to call controller actions.
51
+ * @returns Nothing.
52
+ */
53
+ async function getMessengerCallImplementation(request, response, _next, end, { getMessenger }, messenger) {
54
+ const snap = messenger.call('SnapController:getSnap', request.origin);
55
+ const permission = messenger.call('PermissionController:getPermission', request.origin, endowments_1.SnapEndowments.Messenger);
56
+ if (!snap?.preinstalled || !permission) {
57
+ return end(rpc_errors_1.rpcErrors.methodNotFound());
58
+ }
59
+ const actions = (0, messenger_1.getMessengerCaveatActions)(permission);
60
+ const snapMessenger = getMessenger({ actions });
61
+ const { params } = request;
62
+ try {
63
+ const { action, params: actionParams } = getValidatedParams(params);
64
+ if (BLOCKED_MESSENGER_CLIENTS.some((namespace) => action.startsWith(namespace))) {
65
+ return end(rpc_errors_1.rpcErrors.invalidParams({
66
+ message: `Access to the following messenger clients are disallowed in Snaps: ${BLOCKED_MESSENGER_CLIENTS.join(', ')}.`,
67
+ }));
68
+ }
69
+ response.result = await snapMessenger.call(action, ...actionParams);
70
+ }
71
+ catch (error) {
72
+ return end(error);
73
+ }
74
+ return end();
75
+ }
76
+ /**
77
+ * Validate the parameters for the `snap_messengerCall` method.
78
+ *
79
+ * @param params - Parameters to validate.
80
+ * @returns Validated parameters.
81
+ * @throws Throws RPC error if validation fails.
82
+ */
83
+ function getValidatedParams(params) {
84
+ try {
85
+ return (0, superstruct_1.create)(params, MessengerCallParametersStruct);
86
+ }
87
+ catch (error) {
88
+ if (error instanceof superstruct_1.StructError) {
89
+ throw rpc_errors_1.rpcErrors.invalidParams({
90
+ message: `Invalid params: ${error.message}.`,
91
+ });
92
+ }
93
+ /* istanbul ignore next */
94
+ throw rpc_errors_1.rpcErrors.internal();
95
+ }
96
+ }
97
+ //# sourceMappingURL=messengerCall.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messengerCall.cjs","sourceRoot":"","sources":["../../src/permitted/messengerCall.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n JsonRpcEngineEndCallback,\n MethodHandler,\n} from '@metamask/json-rpc-engine';\nimport type { Messenger, NamespacedName } from '@metamask/messenger';\nimport type { PermissionControllerGetPermissionAction } from '@metamask/permission-controller';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport type {\n MessengerCallParams,\n MessengerCallResult,\n} from '@metamask/snaps-sdk';\nimport type { InferMatching } from '@metamask/snaps-utils';\nimport { create, object, StructError, array } from '@metamask/superstruct';\nimport type { Json, PendingJsonRpcResponse } from '@metamask/utils';\nimport { definePattern, JsonStruct } from '@metamask/utils';\n\nimport { SnapEndowments } from '../endowments';\nimport { getMessengerCaveatActions } from '../endowments/messenger';\nimport type {\n JsonRpcRequestWithOrigin,\n SnapControllerGetSnapAction,\n} from '../types';\nimport type { MethodHooksObject } from '../utils';\n\nconst hookNames: MethodHooksObject<MessengerCallMethodHooks> = {\n getMessenger: true,\n};\n\ntype GenericMessengerAction = {\n type: NamespacedName;\n handler: (...args: Json[]) => Promise<Json>;\n};\n\nexport type MessengerCallMethodHooks = {\n getMessenger: (args: {\n actions?: string[] | null;\n events?: string[] | null;\n }) => Messenger<string, GenericMessengerAction>;\n};\n\nexport type MessengerCallMethodActions =\n | SnapControllerGetSnapAction\n | PermissionControllerGetPermissionAction;\n\nconst BLOCKED_MESSENGER_CLIENTS = [\n 'ApprovalController',\n 'KeyringController',\n 'PermissionController',\n 'SnapController',\n 'WebSocketService',\n 'CronjobController',\n 'SnapInsightsController',\n 'SnapInterfaceController',\n 'MultichainRoutingService',\n 'ExecutionService',\n 'SnapRegistryController',\n];\n\nconst MessengerCallParametersStruct = object({\n action: definePattern<`${string}:${string}`>('MessengerAction', /^.+:.+$/u),\n params: array(JsonStruct),\n});\n\nexport type MessengerCallParameters = InferMatching<\n typeof MessengerCallParametersStruct,\n MessengerCallParams\n>;\n\n/**\n * Handler for the `snap_messengerCall` method.\n *\n * @internal\n */\nexport const messengerCallHandler = {\n implementation: getMessengerCallImplementation,\n hookNames,\n actionNames: ['SnapController:getSnap', 'PermissionController:getPermission'],\n} satisfies MethodHandler<\n MessengerCallMethodHooks,\n MessengerCallMethodActions,\n MessengerCallParameters,\n MessengerCallResult,\n { origin: string }\n>;\n\n/**\n * The `snap_messengerCall` method implementation. This method is used to dispatch\n * an action via the messenger. It is only available to preinstalled Snaps.\n *\n * @param request - The JSON-RPC request object.\n * @param response - The JSON-RPC response object.\n * @param _next - The `json-rpc-engine` \"next\" callback. Not used by this\n * function.\n * @param end - The `json-rpc-engine` \"end\" callback.\n * @param hooks - The RPC method hooks.\n * @param hooks.getMessenger - The hook function to create a custom messenger for the Snap.\n * @param messenger - The messenger used to call controller actions.\n * @returns Nothing.\n */\nasync function getMessengerCallImplementation(\n request: JsonRpcRequestWithOrigin<MessengerCallParams>,\n response: PendingJsonRpcResponse,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n { getMessenger }: MessengerCallMethodHooks,\n messenger: Messenger<string, MessengerCallMethodActions>,\n): Promise<void> {\n const snap = messenger.call('SnapController:getSnap', request.origin);\n const permission = messenger.call(\n 'PermissionController:getPermission',\n request.origin,\n SnapEndowments.Messenger,\n );\n\n if (!snap?.preinstalled || !permission) {\n return end(rpcErrors.methodNotFound());\n }\n\n const actions = getMessengerCaveatActions(permission);\n\n const snapMessenger = getMessenger({ actions });\n\n const { params } = request;\n\n try {\n const { action, params: actionParams } = getValidatedParams(params);\n\n if (\n BLOCKED_MESSENGER_CLIENTS.some((namespace) =>\n action.startsWith(namespace),\n )\n ) {\n return end(\n rpcErrors.invalidParams({\n message: `Access to the following messenger clients are disallowed in Snaps: ${BLOCKED_MESSENGER_CLIENTS.join(', ')}.`,\n }),\n );\n }\n\n response.result = await snapMessenger.call(action, ...actionParams);\n } catch (error) {\n return end(error);\n }\n\n return end();\n}\n\n/**\n * Validate the parameters for the `snap_messengerCall` method.\n *\n * @param params - Parameters to validate.\n * @returns Validated parameters.\n * @throws Throws RPC error if validation fails.\n */\nfunction getValidatedParams(params: unknown): MessengerCallParameters {\n try {\n return create(params, MessengerCallParametersStruct);\n } catch (error) {\n if (error instanceof StructError) {\n throw rpcErrors.invalidParams({\n message: `Invalid params: ${error.message}.`,\n });\n }\n\n /* istanbul ignore next */\n throw rpcErrors.internal();\n }\n}\n"]}
@@ -0,0 +1,54 @@
1
+ import type { JsonRpcEngineEndCallback } from "@metamask/json-rpc-engine";
2
+ import type { Messenger, NamespacedName } from "@metamask/messenger";
3
+ import type { PermissionControllerGetPermissionAction } from "@metamask/permission-controller";
4
+ import type { MessengerCallParams } from "@metamask/snaps-sdk";
5
+ import type { InferMatching } from "@metamask/snaps-utils";
6
+ import type { Json, PendingJsonRpcResponse } from "@metamask/utils";
7
+ import type { JsonRpcRequestWithOrigin, SnapControllerGetSnapAction } from "../types.cjs";
8
+ import type { MethodHooksObject } from "../utils.cjs";
9
+ type GenericMessengerAction = {
10
+ type: NamespacedName;
11
+ handler: (...args: Json[]) => Promise<Json>;
12
+ };
13
+ export type MessengerCallMethodHooks = {
14
+ getMessenger: (args: {
15
+ actions?: string[] | null;
16
+ events?: string[] | null;
17
+ }) => Messenger<string, GenericMessengerAction>;
18
+ };
19
+ export type MessengerCallMethodActions = SnapControllerGetSnapAction | PermissionControllerGetPermissionAction;
20
+ declare const MessengerCallParametersStruct: import("@metamask/superstruct").Struct<{
21
+ params: Json[];
22
+ action: `${string}:${string}`;
23
+ }, {
24
+ action: import("@metamask/superstruct").Struct<`${string}:${string}`, null>;
25
+ params: import("@metamask/superstruct").Struct<Json[], import("@metamask/superstruct").Struct<Json, unknown>>;
26
+ }>;
27
+ export type MessengerCallParameters = InferMatching<typeof MessengerCallParametersStruct, MessengerCallParams>;
28
+ /**
29
+ * Handler for the `snap_messengerCall` method.
30
+ *
31
+ * @internal
32
+ */
33
+ export declare const messengerCallHandler: {
34
+ implementation: typeof getMessengerCallImplementation;
35
+ hookNames: MethodHooksObject<MessengerCallMethodHooks>;
36
+ actionNames: ("SnapController:getSnap" | "PermissionController:getPermission")[];
37
+ };
38
+ /**
39
+ * The `snap_messengerCall` method implementation. This method is used to dispatch
40
+ * an action via the messenger. It is only available to preinstalled Snaps.
41
+ *
42
+ * @param request - The JSON-RPC request object.
43
+ * @param response - The JSON-RPC response object.
44
+ * @param _next - The `json-rpc-engine` "next" callback. Not used by this
45
+ * function.
46
+ * @param end - The `json-rpc-engine` "end" callback.
47
+ * @param hooks - The RPC method hooks.
48
+ * @param hooks.getMessenger - The hook function to create a custom messenger for the Snap.
49
+ * @param messenger - The messenger used to call controller actions.
50
+ * @returns Nothing.
51
+ */
52
+ declare function getMessengerCallImplementation(request: JsonRpcRequestWithOrigin<MessengerCallParams>, response: PendingJsonRpcResponse, _next: unknown, end: JsonRpcEngineEndCallback, { getMessenger }: MessengerCallMethodHooks, messenger: Messenger<string, MessengerCallMethodActions>): Promise<void>;
53
+ export {};
54
+ //# sourceMappingURL=messengerCall.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messengerCall.d.cts","sourceRoot":"","sources":["../../src/permitted/messengerCall.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EAEzB,kCAAkC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,4BAA4B;AACrE,OAAO,KAAK,EAAE,uCAAuC,EAAE,wCAAwC;AAE/F,OAAO,KAAK,EACV,mBAAmB,EAEpB,4BAA4B;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAE,8BAA8B;AAE3D,OAAO,KAAK,EAAE,IAAI,EAAE,sBAAsB,EAAE,wBAAwB;AAKpE,OAAO,KAAK,EACV,wBAAwB,EACxB,2BAA2B,EAC5B,qBAAiB;AAClB,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAiB;AAMlD,KAAK,sBAAsB,GAAG;IAC5B,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,YAAY,EAAE,CAAC,IAAI,EAAE;QACnB,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAC1B,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;KAC1B,KAAK,SAAS,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAClC,2BAA2B,GAC3B,uCAAuC,CAAC;AAgB5C,QAAA,MAAM,6BAA6B;;;;;;EAGjC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,aAAa,CACjD,OAAO,6BAA6B,EACpC,mBAAmB,CACpB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB;;;;CAUhC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,iBAAe,8BAA8B,CAC3C,OAAO,EAAE,wBAAwB,CAAC,mBAAmB,CAAC,EACtD,QAAQ,EAAE,sBAAsB,EAChC,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,wBAAwB,EAC7B,EAAE,YAAY,EAAE,EAAE,wBAAwB,EAC1C,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,0BAA0B,CAAC,GACvD,OAAO,CAAC,IAAI,CAAC,CAuCf"}
@@ -0,0 +1,54 @@
1
+ import type { JsonRpcEngineEndCallback } from "@metamask/json-rpc-engine";
2
+ import type { Messenger, NamespacedName } from "@metamask/messenger";
3
+ import type { PermissionControllerGetPermissionAction } from "@metamask/permission-controller";
4
+ import type { MessengerCallParams } from "@metamask/snaps-sdk";
5
+ import type { InferMatching } from "@metamask/snaps-utils";
6
+ import type { Json, PendingJsonRpcResponse } from "@metamask/utils";
7
+ import type { JsonRpcRequestWithOrigin, SnapControllerGetSnapAction } from "../types.mjs";
8
+ import type { MethodHooksObject } from "../utils.mjs";
9
+ type GenericMessengerAction = {
10
+ type: NamespacedName;
11
+ handler: (...args: Json[]) => Promise<Json>;
12
+ };
13
+ export type MessengerCallMethodHooks = {
14
+ getMessenger: (args: {
15
+ actions?: string[] | null;
16
+ events?: string[] | null;
17
+ }) => Messenger<string, GenericMessengerAction>;
18
+ };
19
+ export type MessengerCallMethodActions = SnapControllerGetSnapAction | PermissionControllerGetPermissionAction;
20
+ declare const MessengerCallParametersStruct: import("@metamask/superstruct").Struct<{
21
+ params: Json[];
22
+ action: `${string}:${string}`;
23
+ }, {
24
+ action: import("@metamask/superstruct").Struct<`${string}:${string}`, null>;
25
+ params: import("@metamask/superstruct").Struct<Json[], import("@metamask/superstruct").Struct<Json, unknown>>;
26
+ }>;
27
+ export type MessengerCallParameters = InferMatching<typeof MessengerCallParametersStruct, MessengerCallParams>;
28
+ /**
29
+ * Handler for the `snap_messengerCall` method.
30
+ *
31
+ * @internal
32
+ */
33
+ export declare const messengerCallHandler: {
34
+ implementation: typeof getMessengerCallImplementation;
35
+ hookNames: MethodHooksObject<MessengerCallMethodHooks>;
36
+ actionNames: ("SnapController:getSnap" | "PermissionController:getPermission")[];
37
+ };
38
+ /**
39
+ * The `snap_messengerCall` method implementation. This method is used to dispatch
40
+ * an action via the messenger. It is only available to preinstalled Snaps.
41
+ *
42
+ * @param request - The JSON-RPC request object.
43
+ * @param response - The JSON-RPC response object.
44
+ * @param _next - The `json-rpc-engine` "next" callback. Not used by this
45
+ * function.
46
+ * @param end - The `json-rpc-engine` "end" callback.
47
+ * @param hooks - The RPC method hooks.
48
+ * @param hooks.getMessenger - The hook function to create a custom messenger for the Snap.
49
+ * @param messenger - The messenger used to call controller actions.
50
+ * @returns Nothing.
51
+ */
52
+ declare function getMessengerCallImplementation(request: JsonRpcRequestWithOrigin<MessengerCallParams>, response: PendingJsonRpcResponse, _next: unknown, end: JsonRpcEngineEndCallback, { getMessenger }: MessengerCallMethodHooks, messenger: Messenger<string, MessengerCallMethodActions>): Promise<void>;
53
+ export {};
54
+ //# sourceMappingURL=messengerCall.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messengerCall.d.mts","sourceRoot":"","sources":["../../src/permitted/messengerCall.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EAEzB,kCAAkC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,4BAA4B;AACrE,OAAO,KAAK,EAAE,uCAAuC,EAAE,wCAAwC;AAE/F,OAAO,KAAK,EACV,mBAAmB,EAEpB,4BAA4B;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAE,8BAA8B;AAE3D,OAAO,KAAK,EAAE,IAAI,EAAE,sBAAsB,EAAE,wBAAwB;AAKpE,OAAO,KAAK,EACV,wBAAwB,EACxB,2BAA2B,EAC5B,qBAAiB;AAClB,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAiB;AAMlD,KAAK,sBAAsB,GAAG;IAC5B,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,YAAY,EAAE,CAAC,IAAI,EAAE;QACnB,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAC1B,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;KAC1B,KAAK,SAAS,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAClC,2BAA2B,GAC3B,uCAAuC,CAAC;AAgB5C,QAAA,MAAM,6BAA6B;;;;;;EAGjC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,aAAa,CACjD,OAAO,6BAA6B,EACpC,mBAAmB,CACpB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB;;;;CAUhC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,iBAAe,8BAA8B,CAC3C,OAAO,EAAE,wBAAwB,CAAC,mBAAmB,CAAC,EACtD,QAAQ,EAAE,sBAAsB,EAChC,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,wBAAwB,EAC7B,EAAE,YAAY,EAAE,EAAE,wBAAwB,EAC1C,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,0BAA0B,CAAC,GACvD,OAAO,CAAC,IAAI,CAAC,CAuCf"}
@@ -0,0 +1,94 @@
1
+ import { rpcErrors } from "@metamask/rpc-errors";
2
+ import { create, object, StructError, array } from "@metamask/superstruct";
3
+ import { definePattern, JsonStruct } from "@metamask/utils";
4
+ import { SnapEndowments } from "../endowments/index.mjs";
5
+ import { getMessengerCaveatActions } from "../endowments/messenger.mjs";
6
+ const hookNames = {
7
+ getMessenger: true,
8
+ };
9
+ const BLOCKED_MESSENGER_CLIENTS = [
10
+ 'ApprovalController',
11
+ 'KeyringController',
12
+ 'PermissionController',
13
+ 'SnapController',
14
+ 'WebSocketService',
15
+ 'CronjobController',
16
+ 'SnapInsightsController',
17
+ 'SnapInterfaceController',
18
+ 'MultichainRoutingService',
19
+ 'ExecutionService',
20
+ 'SnapRegistryController',
21
+ ];
22
+ const MessengerCallParametersStruct = object({
23
+ action: definePattern('MessengerAction', /^.+:.+$/u),
24
+ params: array(JsonStruct),
25
+ });
26
+ /**
27
+ * Handler for the `snap_messengerCall` method.
28
+ *
29
+ * @internal
30
+ */
31
+ export const messengerCallHandler = {
32
+ implementation: getMessengerCallImplementation,
33
+ hookNames,
34
+ actionNames: ['SnapController:getSnap', 'PermissionController:getPermission'],
35
+ };
36
+ /**
37
+ * The `snap_messengerCall` method implementation. This method is used to dispatch
38
+ * an action via the messenger. It is only available to preinstalled Snaps.
39
+ *
40
+ * @param request - The JSON-RPC request object.
41
+ * @param response - The JSON-RPC response object.
42
+ * @param _next - The `json-rpc-engine` "next" callback. Not used by this
43
+ * function.
44
+ * @param end - The `json-rpc-engine` "end" callback.
45
+ * @param hooks - The RPC method hooks.
46
+ * @param hooks.getMessenger - The hook function to create a custom messenger for the Snap.
47
+ * @param messenger - The messenger used to call controller actions.
48
+ * @returns Nothing.
49
+ */
50
+ async function getMessengerCallImplementation(request, response, _next, end, { getMessenger }, messenger) {
51
+ const snap = messenger.call('SnapController:getSnap', request.origin);
52
+ const permission = messenger.call('PermissionController:getPermission', request.origin, SnapEndowments.Messenger);
53
+ if (!snap?.preinstalled || !permission) {
54
+ return end(rpcErrors.methodNotFound());
55
+ }
56
+ const actions = getMessengerCaveatActions(permission);
57
+ const snapMessenger = getMessenger({ actions });
58
+ const { params } = request;
59
+ try {
60
+ const { action, params: actionParams } = getValidatedParams(params);
61
+ if (BLOCKED_MESSENGER_CLIENTS.some((namespace) => action.startsWith(namespace))) {
62
+ return end(rpcErrors.invalidParams({
63
+ message: `Access to the following messenger clients are disallowed in Snaps: ${BLOCKED_MESSENGER_CLIENTS.join(', ')}.`,
64
+ }));
65
+ }
66
+ response.result = await snapMessenger.call(action, ...actionParams);
67
+ }
68
+ catch (error) {
69
+ return end(error);
70
+ }
71
+ return end();
72
+ }
73
+ /**
74
+ * Validate the parameters for the `snap_messengerCall` method.
75
+ *
76
+ * @param params - Parameters to validate.
77
+ * @returns Validated parameters.
78
+ * @throws Throws RPC error if validation fails.
79
+ */
80
+ function getValidatedParams(params) {
81
+ try {
82
+ return create(params, MessengerCallParametersStruct);
83
+ }
84
+ catch (error) {
85
+ if (error instanceof StructError) {
86
+ throw rpcErrors.invalidParams({
87
+ message: `Invalid params: ${error.message}.`,
88
+ });
89
+ }
90
+ /* istanbul ignore next */
91
+ throw rpcErrors.internal();
92
+ }
93
+ }
94
+ //# sourceMappingURL=messengerCall.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messengerCall.mjs","sourceRoot":"","sources":["../../src/permitted/messengerCall.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n JsonRpcEngineEndCallback,\n MethodHandler,\n} from '@metamask/json-rpc-engine';\nimport type { Messenger, NamespacedName } from '@metamask/messenger';\nimport type { PermissionControllerGetPermissionAction } from '@metamask/permission-controller';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport type {\n MessengerCallParams,\n MessengerCallResult,\n} from '@metamask/snaps-sdk';\nimport type { InferMatching } from '@metamask/snaps-utils';\nimport { create, object, StructError, array } from '@metamask/superstruct';\nimport type { Json, PendingJsonRpcResponse } from '@metamask/utils';\nimport { definePattern, JsonStruct } from '@metamask/utils';\n\nimport { SnapEndowments } from '../endowments';\nimport { getMessengerCaveatActions } from '../endowments/messenger';\nimport type {\n JsonRpcRequestWithOrigin,\n SnapControllerGetSnapAction,\n} from '../types';\nimport type { MethodHooksObject } from '../utils';\n\nconst hookNames: MethodHooksObject<MessengerCallMethodHooks> = {\n getMessenger: true,\n};\n\ntype GenericMessengerAction = {\n type: NamespacedName;\n handler: (...args: Json[]) => Promise<Json>;\n};\n\nexport type MessengerCallMethodHooks = {\n getMessenger: (args: {\n actions?: string[] | null;\n events?: string[] | null;\n }) => Messenger<string, GenericMessengerAction>;\n};\n\nexport type MessengerCallMethodActions =\n | SnapControllerGetSnapAction\n | PermissionControllerGetPermissionAction;\n\nconst BLOCKED_MESSENGER_CLIENTS = [\n 'ApprovalController',\n 'KeyringController',\n 'PermissionController',\n 'SnapController',\n 'WebSocketService',\n 'CronjobController',\n 'SnapInsightsController',\n 'SnapInterfaceController',\n 'MultichainRoutingService',\n 'ExecutionService',\n 'SnapRegistryController',\n];\n\nconst MessengerCallParametersStruct = object({\n action: definePattern<`${string}:${string}`>('MessengerAction', /^.+:.+$/u),\n params: array(JsonStruct),\n});\n\nexport type MessengerCallParameters = InferMatching<\n typeof MessengerCallParametersStruct,\n MessengerCallParams\n>;\n\n/**\n * Handler for the `snap_messengerCall` method.\n *\n * @internal\n */\nexport const messengerCallHandler = {\n implementation: getMessengerCallImplementation,\n hookNames,\n actionNames: ['SnapController:getSnap', 'PermissionController:getPermission'],\n} satisfies MethodHandler<\n MessengerCallMethodHooks,\n MessengerCallMethodActions,\n MessengerCallParameters,\n MessengerCallResult,\n { origin: string }\n>;\n\n/**\n * The `snap_messengerCall` method implementation. This method is used to dispatch\n * an action via the messenger. It is only available to preinstalled Snaps.\n *\n * @param request - The JSON-RPC request object.\n * @param response - The JSON-RPC response object.\n * @param _next - The `json-rpc-engine` \"next\" callback. Not used by this\n * function.\n * @param end - The `json-rpc-engine` \"end\" callback.\n * @param hooks - The RPC method hooks.\n * @param hooks.getMessenger - The hook function to create a custom messenger for the Snap.\n * @param messenger - The messenger used to call controller actions.\n * @returns Nothing.\n */\nasync function getMessengerCallImplementation(\n request: JsonRpcRequestWithOrigin<MessengerCallParams>,\n response: PendingJsonRpcResponse,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n { getMessenger }: MessengerCallMethodHooks,\n messenger: Messenger<string, MessengerCallMethodActions>,\n): Promise<void> {\n const snap = messenger.call('SnapController:getSnap', request.origin);\n const permission = messenger.call(\n 'PermissionController:getPermission',\n request.origin,\n SnapEndowments.Messenger,\n );\n\n if (!snap?.preinstalled || !permission) {\n return end(rpcErrors.methodNotFound());\n }\n\n const actions = getMessengerCaveatActions(permission);\n\n const snapMessenger = getMessenger({ actions });\n\n const { params } = request;\n\n try {\n const { action, params: actionParams } = getValidatedParams(params);\n\n if (\n BLOCKED_MESSENGER_CLIENTS.some((namespace) =>\n action.startsWith(namespace),\n )\n ) {\n return end(\n rpcErrors.invalidParams({\n message: `Access to the following messenger clients are disallowed in Snaps: ${BLOCKED_MESSENGER_CLIENTS.join(', ')}.`,\n }),\n );\n }\n\n response.result = await snapMessenger.call(action, ...actionParams);\n } catch (error) {\n return end(error);\n }\n\n return end();\n}\n\n/**\n * Validate the parameters for the `snap_messengerCall` method.\n *\n * @param params - Parameters to validate.\n * @returns Validated parameters.\n * @throws Throws RPC error if validation fails.\n */\nfunction getValidatedParams(params: unknown): MessengerCallParameters {\n try {\n return create(params, MessengerCallParametersStruct);\n } catch (error) {\n if (error instanceof StructError) {\n throw rpcErrors.invalidParams({\n message: `Invalid params: ${error.message}.`,\n });\n }\n\n /* istanbul ignore next */\n throw rpcErrors.internal();\n }\n}\n"]}
@@ -21,6 +21,7 @@ const getWebSockets_1 = require("./getWebSockets.cjs");
21
21
  const invokeKeyring_1 = require("./invokeKeyring.cjs");
22
22
  const invokeSnapSugar_1 = require("./invokeSnapSugar.cjs");
23
23
  const listEntropySources_1 = require("./listEntropySources.cjs");
24
+ const messengerCall_1 = require("./messengerCall.cjs");
24
25
  const openWebSocket_1 = require("./openWebSocket.cjs");
25
26
  const requestSnaps_1 = require("./requestSnaps.cjs");
26
27
  const resolveInterface_1 = require("./resolveInterface.cjs");
@@ -60,6 +61,7 @@ const methodHandlers = {
60
61
  snap_getWebSockets: getWebSockets_1.getWebSocketsHandler,
61
62
  snap_startTrace: startTrace_1.startTraceHandler,
62
63
  snap_endTrace: endTrace_1.endTraceHandler,
64
+ snap_messengerCall: messengerCall_1.messengerCallHandler,
63
65
  };
64
66
  /* eslint-enable @typescript-eslint/naming-convention */
65
67
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.cjs","sourceRoot":"","sources":["../../src/permitted/middleware.ts"],"names":[],"mappings":";;;AAAA,+DAGmC;AAEnC,qDAAiD;AACjD,uDAAiD;AAIjD,uEAAuE;AACvE,iDAAiD;AACjD,yDAAyD;AACzD,2DAA2D;AAC3D,6CAA6C;AAC7C,mDAAmD;AACnD,mEAAmE;AACnE,2DAA2D;AAC3D,2CAA2C;AAC3C,mEAAmE;AACnE,+DAA+D;AAC/D,6CAA6C;AAC7C,6CAA6C;AAC7C,uDAAuD;AACvD,uDAAuD;AACvD,2DAA2D;AAC3D,iEAAiE;AACjE,uDAAuD;AACvD,qDAAqD;AACrD,6DAA6D;AAC7D,2EAA2E;AAC3E,qEAAqE;AACrE,6CAA6C;AAC7C,iDAAiD;AACjD,iDAAiD;AACjD,iDAAiD;AACjD,2DAA2D;AAE3D,yDAAyD;AACzD,MAAM,cAAc,GAAG;IACrB,kBAAkB,EAAE,gCAAkB;IACtC,eAAe,EAAE,0BAAe;IAChC,mBAAmB,EAAE,kCAAmB;IACxC,iBAAiB,EAAE,wCAAsB;IACzC,oBAAoB,EAAE,oCAAoB;IAC1C,eAAe,EAAE,8BAAiB;IAClC,oBAAoB,EAAE,wCAAsB;IAC5C,YAAY,EAAE,wBAAc;IAC5B,aAAa,EAAE,0BAAe;IAC9B,oBAAoB,EAAE,wCAAsB;IAC5C,oBAAoB,EAAE,wCAAsB;IAC5C,sBAAsB,EAAE,4CAAwB;IAChD,wBAAwB,EAAE,gDAA0B;IACpD,uBAAuB,EAAE,8CAAyB;IAClD,qBAAqB,EAAE,0CAAuB;IAC9C,4BAA4B,EAAE,wDAA8B;IAC5D,0BAA0B,EAAE,oDAA4B;IACxD,wBAAwB,EAAE,gDAA0B;IACpD,aAAa,EAAE,0BAAe;IAC9B,eAAe,EAAE,8BAAiB;IAClC,eAAe,EAAE,8BAAiB;IAClC,kBAAkB,EAAE,oCAAoB;IACxC,mBAAmB,EAAE,sCAAqB;IAC1C,yBAAyB,EAAE,kDAA2B;IACtD,kBAAkB,EAAE,oCAAoB;IACxC,eAAe,EAAE,8BAAiB;IAClC,aAAa,EAAE,0BAAe;CAC/B,CAAC;AACF,wDAAwD;AAExD;;;;;;;GAOG;AACH,SAAgB,2BAA2B,CACzC,MAAe,EACf,KAA8B,EAC9B,SAAuD;IAEvD,MAAM,gBAAgB,GAAG,IAAA,wCAAsB,EAAC;QAC9C,QAAQ,EAAE,cAAc;QACxB,KAAK;QACL,SAAS;QACT,OAAO,EAAE,sBAAQ;KAClB,CAAC,CAAC;IAEH,iEAAiE;IACjE,kEAAkE;IAClE,OAAO,KAAK,UAAU,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG;QACjE,IAAI,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACzE,OAAO,GAAG,CAAC,sBAAS,CAAC,cAAc,EAAE,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IACxD,CAAC,CAAC;AACJ,CAAC;AArBD,kEAqBC","sourcesContent":["import {\n createMethodMiddleware,\n type JsonRpcMiddleware,\n} from '@metamask/json-rpc-engine';\nimport type { Messenger } from '@metamask/messenger';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport { logError } from '@metamask/snaps-utils';\nimport type { Json, JsonRpcParams } from '@metamask/utils';\n\nimport type { PermittedRpcMethodActions, PermittedRpcMethodHooks } from '.';\nimport { cancelBackgroundEventHandler } from './cancelBackgroundEvent';\nimport { clearStateHandler } from './clearState';\nimport { closeWebSocketHandler } from './closeWebSocket';\nimport { createInterfaceHandler } from './createInterface';\nimport { endTraceHandler } from './endTrace';\nimport { getAllSnapsHandler } from './getAllSnaps';\nimport { getBackgroundEventsHandler } from './getBackgroundEvents';\nimport { getClientStatusHandler } from './getClientStatus';\nimport { getFileHandler } from './getFile';\nimport { getInterfaceContextHandler } from './getInterfaceContext';\nimport { getInterfaceStateHandler } from './getInterfaceState';\nimport { getSnapsHandler } from './getSnaps';\nimport { getStateHandler } from './getState';\nimport { getWebSocketsHandler } from './getWebSockets';\nimport { invokeKeyringHandler } from './invokeKeyring';\nimport { invokeSnapSugarHandler } from './invokeSnapSugar';\nimport { listEntropySourcesHandler } from './listEntropySources';\nimport { openWebSocketHandler } from './openWebSocket';\nimport { requestSnapsHandler } from './requestSnaps';\nimport { resolveInterfaceHandler } from './resolveInterface';\nimport { scheduleBackgroundEventHandler } from './scheduleBackgroundEvent';\nimport { sendWebSocketMessageHandler } from './sendWebSocketMessage';\nimport { setStateHandler } from './setState';\nimport { startTraceHandler } from './startTrace';\nimport { trackErrorHandler } from './trackError';\nimport { trackEventHandler } from './trackEvent';\nimport { updateInterfaceHandler } from './updateInterface';\n\n/* eslint-disable @typescript-eslint/naming-convention */\nconst methodHandlers = {\n wallet_getAllSnaps: getAllSnapsHandler,\n wallet_getSnaps: getSnapsHandler,\n wallet_requestSnaps: requestSnapsHandler,\n wallet_invokeSnap: invokeSnapSugarHandler,\n wallet_invokeKeyring: invokeKeyringHandler,\n snap_clearState: clearStateHandler,\n snap_getClientStatus: getClientStatusHandler,\n snap_getFile: getFileHandler,\n snap_getState: getStateHandler,\n snap_createInterface: createInterfaceHandler,\n snap_updateInterface: updateInterfaceHandler,\n snap_getInterfaceState: getInterfaceStateHandler,\n snap_getInterfaceContext: getInterfaceContextHandler,\n snap_listEntropySources: listEntropySourcesHandler,\n snap_resolveInterface: resolveInterfaceHandler,\n snap_scheduleBackgroundEvent: scheduleBackgroundEventHandler,\n snap_cancelBackgroundEvent: cancelBackgroundEventHandler,\n snap_getBackgroundEvents: getBackgroundEventsHandler,\n snap_setState: setStateHandler,\n snap_trackError: trackErrorHandler,\n snap_trackEvent: trackEventHandler,\n snap_openWebSocket: openWebSocketHandler,\n snap_closeWebSocket: closeWebSocketHandler,\n snap_sendWebSocketMessage: sendWebSocketMessageHandler,\n snap_getWebSockets: getWebSocketsHandler,\n snap_startTrace: startTraceHandler,\n snap_endTrace: endTraceHandler,\n};\n/* eslint-enable @typescript-eslint/naming-convention */\n\n/**\n * Creates a middleware that handles permitted snap RPC methods.\n *\n * @param isSnap - A flag that should indicate whether the requesting origin is a snap or not.\n * @param hooks - An object containing the hooks made available to the permitted RPC methods.\n * @param messenger - The messenger.\n * @returns The middleware.\n */\nexport function createSnapsMethodMiddleware(\n isSnap: boolean,\n hooks: PermittedRpcMethodHooks,\n messenger: Messenger<string, PermittedRpcMethodActions>,\n): JsonRpcMiddleware<JsonRpcParams, Json> {\n const nestedMiddleware = createMethodMiddleware({\n handlers: methodHandlers,\n hooks,\n messenger,\n onError: logError,\n });\n\n // This is not actually a misused promise, the type is just wrong\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n return async function methodMiddleware(request, response, next, end) {\n if (String.prototype.startsWith.call(request.method, 'snap_') && !isSnap) {\n return end(rpcErrors.methodNotFound());\n }\n\n return nestedMiddleware(request, response, next, end);\n };\n}\n"]}
1
+ {"version":3,"file":"middleware.cjs","sourceRoot":"","sources":["../../src/permitted/middleware.ts"],"names":[],"mappings":";;;AAAA,+DAGmC;AAEnC,qDAAiD;AACjD,uDAAiD;AAIjD,uEAAuE;AACvE,iDAAiD;AACjD,yDAAyD;AACzD,2DAA2D;AAC3D,6CAA6C;AAC7C,mDAAmD;AACnD,mEAAmE;AACnE,2DAA2D;AAC3D,2CAA2C;AAC3C,mEAAmE;AACnE,+DAA+D;AAC/D,6CAA6C;AAC7C,6CAA6C;AAC7C,uDAAuD;AACvD,uDAAuD;AACvD,2DAA2D;AAC3D,iEAAiE;AACjE,uDAAuD;AACvD,uDAAuD;AACvD,qDAAqD;AACrD,6DAA6D;AAC7D,2EAA2E;AAC3E,qEAAqE;AACrE,6CAA6C;AAC7C,iDAAiD;AACjD,iDAAiD;AACjD,iDAAiD;AACjD,2DAA2D;AAE3D,yDAAyD;AACzD,MAAM,cAAc,GAAG;IACrB,kBAAkB,EAAE,gCAAkB;IACtC,eAAe,EAAE,0BAAe;IAChC,mBAAmB,EAAE,kCAAmB;IACxC,iBAAiB,EAAE,wCAAsB;IACzC,oBAAoB,EAAE,oCAAoB;IAC1C,eAAe,EAAE,8BAAiB;IAClC,oBAAoB,EAAE,wCAAsB;IAC5C,YAAY,EAAE,wBAAc;IAC5B,aAAa,EAAE,0BAAe;IAC9B,oBAAoB,EAAE,wCAAsB;IAC5C,oBAAoB,EAAE,wCAAsB;IAC5C,sBAAsB,EAAE,4CAAwB;IAChD,wBAAwB,EAAE,gDAA0B;IACpD,uBAAuB,EAAE,8CAAyB;IAClD,qBAAqB,EAAE,0CAAuB;IAC9C,4BAA4B,EAAE,wDAA8B;IAC5D,0BAA0B,EAAE,oDAA4B;IACxD,wBAAwB,EAAE,gDAA0B;IACpD,aAAa,EAAE,0BAAe;IAC9B,eAAe,EAAE,8BAAiB;IAClC,eAAe,EAAE,8BAAiB;IAClC,kBAAkB,EAAE,oCAAoB;IACxC,mBAAmB,EAAE,sCAAqB;IAC1C,yBAAyB,EAAE,kDAA2B;IACtD,kBAAkB,EAAE,oCAAoB;IACxC,eAAe,EAAE,8BAAiB;IAClC,aAAa,EAAE,0BAAe;IAC9B,kBAAkB,EAAE,oCAAoB;CACzC,CAAC;AACF,wDAAwD;AAExD;;;;;;;GAOG;AACH,SAAgB,2BAA2B,CACzC,MAAe,EACf,KAA8B,EAC9B,SAAuD;IAEvD,MAAM,gBAAgB,GAAG,IAAA,wCAAsB,EAAC;QAC9C,QAAQ,EAAE,cAAc;QACxB,KAAK;QACL,SAAS;QACT,OAAO,EAAE,sBAAQ;KAClB,CAAC,CAAC;IAEH,iEAAiE;IACjE,kEAAkE;IAClE,OAAO,KAAK,UAAU,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG;QACjE,IAAI,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACzE,OAAO,GAAG,CAAC,sBAAS,CAAC,cAAc,EAAE,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IACxD,CAAC,CAAC;AACJ,CAAC;AArBD,kEAqBC","sourcesContent":["import {\n createMethodMiddleware,\n type JsonRpcMiddleware,\n} from '@metamask/json-rpc-engine';\nimport type { Messenger } from '@metamask/messenger';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport { logError } from '@metamask/snaps-utils';\nimport type { Json, JsonRpcParams } from '@metamask/utils';\n\nimport type { PermittedRpcMethodActions, PermittedRpcMethodHooks } from '.';\nimport { cancelBackgroundEventHandler } from './cancelBackgroundEvent';\nimport { clearStateHandler } from './clearState';\nimport { closeWebSocketHandler } from './closeWebSocket';\nimport { createInterfaceHandler } from './createInterface';\nimport { endTraceHandler } from './endTrace';\nimport { getAllSnapsHandler } from './getAllSnaps';\nimport { getBackgroundEventsHandler } from './getBackgroundEvents';\nimport { getClientStatusHandler } from './getClientStatus';\nimport { getFileHandler } from './getFile';\nimport { getInterfaceContextHandler } from './getInterfaceContext';\nimport { getInterfaceStateHandler } from './getInterfaceState';\nimport { getSnapsHandler } from './getSnaps';\nimport { getStateHandler } from './getState';\nimport { getWebSocketsHandler } from './getWebSockets';\nimport { invokeKeyringHandler } from './invokeKeyring';\nimport { invokeSnapSugarHandler } from './invokeSnapSugar';\nimport { listEntropySourcesHandler } from './listEntropySources';\nimport { messengerCallHandler } from './messengerCall';\nimport { openWebSocketHandler } from './openWebSocket';\nimport { requestSnapsHandler } from './requestSnaps';\nimport { resolveInterfaceHandler } from './resolveInterface';\nimport { scheduleBackgroundEventHandler } from './scheduleBackgroundEvent';\nimport { sendWebSocketMessageHandler } from './sendWebSocketMessage';\nimport { setStateHandler } from './setState';\nimport { startTraceHandler } from './startTrace';\nimport { trackErrorHandler } from './trackError';\nimport { trackEventHandler } from './trackEvent';\nimport { updateInterfaceHandler } from './updateInterface';\n\n/* eslint-disable @typescript-eslint/naming-convention */\nconst methodHandlers = {\n wallet_getAllSnaps: getAllSnapsHandler,\n wallet_getSnaps: getSnapsHandler,\n wallet_requestSnaps: requestSnapsHandler,\n wallet_invokeSnap: invokeSnapSugarHandler,\n wallet_invokeKeyring: invokeKeyringHandler,\n snap_clearState: clearStateHandler,\n snap_getClientStatus: getClientStatusHandler,\n snap_getFile: getFileHandler,\n snap_getState: getStateHandler,\n snap_createInterface: createInterfaceHandler,\n snap_updateInterface: updateInterfaceHandler,\n snap_getInterfaceState: getInterfaceStateHandler,\n snap_getInterfaceContext: getInterfaceContextHandler,\n snap_listEntropySources: listEntropySourcesHandler,\n snap_resolveInterface: resolveInterfaceHandler,\n snap_scheduleBackgroundEvent: scheduleBackgroundEventHandler,\n snap_cancelBackgroundEvent: cancelBackgroundEventHandler,\n snap_getBackgroundEvents: getBackgroundEventsHandler,\n snap_setState: setStateHandler,\n snap_trackError: trackErrorHandler,\n snap_trackEvent: trackEventHandler,\n snap_openWebSocket: openWebSocketHandler,\n snap_closeWebSocket: closeWebSocketHandler,\n snap_sendWebSocketMessage: sendWebSocketMessageHandler,\n snap_getWebSockets: getWebSocketsHandler,\n snap_startTrace: startTraceHandler,\n snap_endTrace: endTraceHandler,\n snap_messengerCall: messengerCallHandler,\n};\n/* eslint-enable @typescript-eslint/naming-convention */\n\n/**\n * Creates a middleware that handles permitted snap RPC methods.\n *\n * @param isSnap - A flag that should indicate whether the requesting origin is a snap or not.\n * @param hooks - An object containing the hooks made available to the permitted RPC methods.\n * @param messenger - The messenger.\n * @returns The middleware.\n */\nexport function createSnapsMethodMiddleware(\n isSnap: boolean,\n hooks: PermittedRpcMethodHooks,\n messenger: Messenger<string, PermittedRpcMethodActions>,\n): JsonRpcMiddleware<JsonRpcParams, Json> {\n const nestedMiddleware = createMethodMiddleware({\n handlers: methodHandlers,\n hooks,\n messenger,\n onError: logError,\n });\n\n // This is not actually a misused promise, the type is just wrong\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n return async function methodMiddleware(request, response, next, end) {\n if (String.prototype.startsWith.call(request.method, 'snap_') && !isSnap) {\n return end(rpcErrors.methodNotFound());\n }\n\n return nestedMiddleware(request, response, next, end);\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.d.cts","sourceRoot":"","sources":["../../src/permitted/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EACvB,kCAAkC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AAGrD,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,wBAAwB;AAE3D,OAAO,KAAK,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,oBAAU;AA6D5E;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,uBAAuB,EAC9B,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,yBAAyB,CAAC,GACtD,iBAAiB,CAAC,aAAa,EAAE,IAAI,CAAC,CAiBxC"}
1
+ {"version":3,"file":"middleware.d.cts","sourceRoot":"","sources":["../../src/permitted/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EACvB,kCAAkC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AAGrD,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,wBAAwB;AAE3D,OAAO,KAAK,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,oBAAU;AA+D5E;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,uBAAuB,EAC9B,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,yBAAyB,CAAC,GACtD,iBAAiB,CAAC,aAAa,EAAE,IAAI,CAAC,CAiBxC"}