@metamask/snaps-simulation 3.7.0 → 4.0.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 (202) hide show
  1. package/CHANGELOG.md +26 -1
  2. package/dist/constants.cjs +3 -7
  3. package/dist/constants.cjs.map +1 -1
  4. package/dist/constants.d.cts +0 -4
  5. package/dist/constants.d.cts.map +1 -1
  6. package/dist/constants.d.mts +0 -4
  7. package/dist/constants.d.mts.map +1 -1
  8. package/dist/constants.mjs +2 -6
  9. package/dist/constants.mjs.map +1 -1
  10. package/dist/controllers.cjs +16 -0
  11. package/dist/controllers.cjs.map +1 -1
  12. package/dist/controllers.d.cts.map +1 -1
  13. package/dist/controllers.d.mts.map +1 -1
  14. package/dist/controllers.mjs +16 -0
  15. package/dist/controllers.mjs.map +1 -1
  16. package/dist/methods/hooks/chain.cjs +29 -0
  17. package/dist/methods/hooks/chain.cjs.map +1 -0
  18. package/dist/methods/hooks/chain.d.cts +9 -0
  19. package/dist/methods/hooks/chain.d.cts.map +1 -0
  20. package/dist/methods/hooks/chain.d.mts +9 -0
  21. package/dist/methods/hooks/chain.d.mts.map +1 -0
  22. package/dist/methods/hooks/chain.mjs +25 -0
  23. package/dist/methods/hooks/chain.mjs.map +1 -0
  24. package/dist/methods/hooks/index.cjs +1 -0
  25. package/dist/methods/hooks/index.cjs.map +1 -1
  26. package/dist/methods/hooks/index.d.cts +1 -0
  27. package/dist/methods/hooks/index.d.cts.map +1 -1
  28. package/dist/methods/hooks/index.d.mts +1 -0
  29. package/dist/methods/hooks/index.d.mts.map +1 -1
  30. package/dist/methods/hooks/index.mjs +1 -0
  31. package/dist/methods/hooks/index.mjs.map +1 -1
  32. package/dist/methods/specifications.cjs +2 -0
  33. package/dist/methods/specifications.cjs.map +1 -1
  34. package/dist/methods/specifications.d.cts +7 -1
  35. package/dist/methods/specifications.d.cts.map +1 -1
  36. package/dist/methods/specifications.d.mts +7 -1
  37. package/dist/methods/specifications.d.mts.map +1 -1
  38. package/dist/methods/specifications.mjs +2 -0
  39. package/dist/methods/specifications.mjs.map +1 -1
  40. package/dist/middleware/engine.cjs +7 -9
  41. package/dist/middleware/engine.cjs.map +1 -1
  42. package/dist/middleware/engine.d.cts +6 -3
  43. package/dist/middleware/engine.d.cts.map +1 -1
  44. package/dist/middleware/engine.d.mts +6 -3
  45. package/dist/middleware/engine.d.mts.map +1 -1
  46. package/dist/middleware/engine.mjs +7 -9
  47. package/dist/middleware/engine.mjs.map +1 -1
  48. package/dist/middleware/internal-methods/chain-id.cjs +8 -6
  49. package/dist/middleware/internal-methods/chain-id.cjs.map +1 -1
  50. package/dist/middleware/internal-methods/chain-id.d.cts +6 -4
  51. package/dist/middleware/internal-methods/chain-id.d.cts.map +1 -1
  52. package/dist/middleware/internal-methods/chain-id.d.mts +6 -4
  53. package/dist/middleware/internal-methods/chain-id.d.mts.map +1 -1
  54. package/dist/middleware/internal-methods/chain-id.mjs +8 -6
  55. package/dist/middleware/internal-methods/chain-id.mjs.map +1 -1
  56. package/dist/middleware/internal-methods/middleware.cjs +0 -2
  57. package/dist/middleware/internal-methods/middleware.cjs.map +1 -1
  58. package/dist/middleware/internal-methods/middleware.d.cts +14 -1
  59. package/dist/middleware/internal-methods/middleware.d.cts.map +1 -1
  60. package/dist/middleware/internal-methods/middleware.d.mts +14 -1
  61. package/dist/middleware/internal-methods/middleware.d.mts.map +1 -1
  62. package/dist/middleware/internal-methods/middleware.mjs +0 -2
  63. package/dist/middleware/internal-methods/middleware.mjs.map +1 -1
  64. package/dist/middleware/internal-methods/net-version.cjs +8 -6
  65. package/dist/middleware/internal-methods/net-version.cjs.map +1 -1
  66. package/dist/middleware/internal-methods/net-version.d.cts +6 -4
  67. package/dist/middleware/internal-methods/net-version.d.cts.map +1 -1
  68. package/dist/middleware/internal-methods/net-version.d.mts +6 -4
  69. package/dist/middleware/internal-methods/net-version.d.mts.map +1 -1
  70. package/dist/middleware/internal-methods/net-version.mjs +8 -6
  71. package/dist/middleware/internal-methods/net-version.mjs.map +1 -1
  72. package/dist/middleware/internal-methods/switch-ethereum-chain.cjs +7 -3
  73. package/dist/middleware/internal-methods/switch-ethereum-chain.cjs.map +1 -1
  74. package/dist/middleware/internal-methods/switch-ethereum-chain.d.cts +7 -4
  75. package/dist/middleware/internal-methods/switch-ethereum-chain.d.cts.map +1 -1
  76. package/dist/middleware/internal-methods/switch-ethereum-chain.d.mts +7 -4
  77. package/dist/middleware/internal-methods/switch-ethereum-chain.d.mts.map +1 -1
  78. package/dist/middleware/internal-methods/switch-ethereum-chain.mjs +7 -3
  79. package/dist/middleware/internal-methods/switch-ethereum-chain.mjs.map +1 -1
  80. package/dist/middleware/multichain/create-session.cjs +55 -0
  81. package/dist/middleware/multichain/create-session.cjs.map +1 -0
  82. package/dist/middleware/multichain/create-session.d.cts +19 -0
  83. package/dist/middleware/multichain/create-session.d.cts.map +1 -0
  84. package/dist/middleware/multichain/create-session.d.mts +19 -0
  85. package/dist/middleware/multichain/create-session.d.mts.map +1 -0
  86. package/dist/middleware/multichain/create-session.mjs +51 -0
  87. package/dist/middleware/multichain/create-session.mjs.map +1 -0
  88. package/dist/middleware/multichain/get-session.cjs +20 -0
  89. package/dist/middleware/multichain/get-session.cjs.map +1 -0
  90. package/dist/middleware/multichain/get-session.d.cts +17 -0
  91. package/dist/middleware/multichain/get-session.d.cts.map +1 -0
  92. package/dist/middleware/multichain/get-session.d.mts +17 -0
  93. package/dist/middleware/multichain/get-session.d.mts.map +1 -0
  94. package/dist/middleware/multichain/get-session.mjs +16 -0
  95. package/dist/middleware/multichain/get-session.mjs.map +1 -0
  96. package/dist/middleware/multichain/index.cjs +22 -0
  97. package/dist/middleware/multichain/index.cjs.map +1 -0
  98. package/dist/middleware/multichain/index.d.cts +6 -0
  99. package/dist/middleware/multichain/index.d.cts.map +1 -0
  100. package/dist/middleware/multichain/index.d.mts +6 -0
  101. package/dist/middleware/multichain/index.d.mts.map +1 -0
  102. package/dist/middleware/multichain/index.mjs +6 -0
  103. package/dist/middleware/multichain/index.mjs.map +1 -0
  104. package/dist/middleware/multichain/invoke-method.cjs +36 -0
  105. package/dist/middleware/multichain/invoke-method.cjs.map +1 -0
  106. package/dist/middleware/multichain/invoke-method.d.cts +15 -0
  107. package/dist/middleware/multichain/invoke-method.d.cts.map +1 -0
  108. package/dist/middleware/multichain/invoke-method.d.mts +15 -0
  109. package/dist/middleware/multichain/invoke-method.d.mts.map +1 -0
  110. package/dist/middleware/multichain/invoke-method.mjs +32 -0
  111. package/dist/middleware/multichain/invoke-method.mjs.map +1 -0
  112. package/dist/middleware/multichain/middleware.cjs +49 -0
  113. package/dist/middleware/multichain/middleware.cjs.map +1 -0
  114. package/dist/middleware/multichain/middleware.d.cts +12 -0
  115. package/dist/middleware/multichain/middleware.d.cts.map +1 -0
  116. package/dist/middleware/multichain/middleware.d.mts +12 -0
  117. package/dist/middleware/multichain/middleware.d.mts.map +1 -0
  118. package/dist/middleware/multichain/middleware.mjs +45 -0
  119. package/dist/middleware/multichain/middleware.mjs.map +1 -0
  120. package/dist/middleware/multichain/revoke-session.cjs +17 -0
  121. package/dist/middleware/multichain/revoke-session.cjs.map +1 -0
  122. package/dist/middleware/multichain/revoke-session.d.cts +13 -0
  123. package/dist/middleware/multichain/revoke-session.d.cts.map +1 -0
  124. package/dist/middleware/multichain/revoke-session.d.mts +13 -0
  125. package/dist/middleware/multichain/revoke-session.d.mts.map +1 -0
  126. package/dist/middleware/multichain/revoke-session.mjs +13 -0
  127. package/dist/middleware/multichain/revoke-session.mjs.map +1 -0
  128. package/dist/middleware/multichain/utils.cjs +29 -0
  129. package/dist/middleware/multichain/utils.cjs.map +1 -0
  130. package/dist/middleware/multichain/utils.d.cts +14 -0
  131. package/dist/middleware/multichain/utils.d.cts.map +1 -0
  132. package/dist/middleware/multichain/utils.d.mts +14 -0
  133. package/dist/middleware/multichain/utils.d.mts.map +1 -0
  134. package/dist/middleware/multichain/utils.mjs +25 -0
  135. package/dist/middleware/multichain/utils.mjs.map +1 -0
  136. package/dist/middleware/provider.cjs +48 -0
  137. package/dist/middleware/provider.cjs.map +1 -0
  138. package/dist/middleware/provider.d.cts +11 -0
  139. package/dist/middleware/provider.d.cts.map +1 -0
  140. package/dist/middleware/provider.d.mts +11 -0
  141. package/dist/middleware/provider.d.mts.map +1 -0
  142. package/dist/middleware/provider.mjs +44 -0
  143. package/dist/middleware/provider.mjs.map +1 -0
  144. package/dist/simulation.cjs +79 -6
  145. package/dist/simulation.cjs.map +1 -1
  146. package/dist/simulation.d.cts +56 -4
  147. package/dist/simulation.d.cts.map +1 -1
  148. package/dist/simulation.d.mts +56 -4
  149. package/dist/simulation.d.mts.map +1 -1
  150. package/dist/simulation.mjs +78 -6
  151. package/dist/simulation.mjs.map +1 -1
  152. package/dist/store/chain.cjs +29 -0
  153. package/dist/store/chain.cjs.map +1 -0
  154. package/dist/store/chain.d.cts +18 -0
  155. package/dist/store/chain.d.cts.map +1 -0
  156. package/dist/store/chain.d.mts +18 -0
  157. package/dist/store/chain.d.mts.map +1 -0
  158. package/dist/store/chain.mjs +26 -0
  159. package/dist/store/chain.mjs.map +1 -0
  160. package/dist/store/index.cjs +1 -0
  161. package/dist/store/index.cjs.map +1 -1
  162. package/dist/store/index.d.cts +1 -0
  163. package/dist/store/index.d.cts.map +1 -1
  164. package/dist/store/index.d.mts +1 -0
  165. package/dist/store/index.d.mts.map +1 -1
  166. package/dist/store/index.mjs +1 -0
  167. package/dist/store/index.mjs.map +1 -1
  168. package/dist/store/notifications.d.cts +1 -0
  169. package/dist/store/notifications.d.cts.map +1 -1
  170. package/dist/store/notifications.d.mts +1 -0
  171. package/dist/store/notifications.d.mts.map +1 -1
  172. package/dist/store/state.d.cts +2 -0
  173. package/dist/store/state.d.cts.map +1 -1
  174. package/dist/store/state.d.mts +2 -0
  175. package/dist/store/state.d.mts.map +1 -1
  176. package/dist/store/store.cjs +2 -0
  177. package/dist/store/store.cjs.map +1 -1
  178. package/dist/store/store.d.cts +1 -0
  179. package/dist/store/store.d.cts.map +1 -1
  180. package/dist/store/store.d.mts +1 -0
  181. package/dist/store/store.d.mts.map +1 -1
  182. package/dist/store/store.mjs +2 -0
  183. package/dist/store/store.mjs.map +1 -1
  184. package/dist/store/trackables.d.cts +3 -0
  185. package/dist/store/trackables.d.cts.map +1 -1
  186. package/dist/store/trackables.d.mts +3 -0
  187. package/dist/store/trackables.d.mts.map +1 -1
  188. package/dist/store/ui.d.cts +1 -0
  189. package/dist/store/ui.d.cts.map +1 -1
  190. package/dist/store/ui.d.mts +1 -0
  191. package/dist/store/ui.d.mts.map +1 -1
  192. package/dist/structs.d.cts +51 -51
  193. package/dist/structs.d.mts +51 -51
  194. package/package.json +14 -12
  195. package/dist/middleware/internal-methods/provider-state.cjs +0 -28
  196. package/dist/middleware/internal-methods/provider-state.cjs.map +0 -1
  197. package/dist/middleware/internal-methods/provider-state.d.cts +0 -16
  198. package/dist/middleware/internal-methods/provider-state.d.cts.map +0 -1
  199. package/dist/middleware/internal-methods/provider-state.d.mts +0 -16
  200. package/dist/middleware/internal-methods/provider-state.d.mts.map +0 -1
  201. package/dist/middleware/internal-methods/provider-state.mjs +0 -24
  202. package/dist/middleware/internal-methods/provider-state.mjs.map +0 -1
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.invokeMethodHandler = void 0;
4
+ const chain_agnostic_permission_1 = require("@metamask/chain-agnostic-permission");
5
+ const rpc_errors_1 = require("@metamask/rpc-errors");
6
+ const superstruct_1 = require("@metamask/superstruct");
7
+ const utils_1 = require("@metamask/utils");
8
+ const utils_2 = require("./utils.cjs");
9
+ const InvokeMethodParamsStruct = (0, superstruct_1.object)({
10
+ scope: utils_1.CaipChainIdStruct,
11
+ // @ts-expect-error Unsure why this type doesn't work.
12
+ request: (0, superstruct_1.pick)(utils_1.JsonRpcRequestStruct, ['method', 'params']),
13
+ });
14
+ /**
15
+ * A handler that implements a simplified version of `wallet_invokeMethod`.
16
+ *
17
+ * @param request - Incoming JSON-RPC request.
18
+ * @param hooks - The method hooks.
19
+ * @returns Nothing.
20
+ */
21
+ async function invokeMethodHandler(request, hooks) {
22
+ if (!(0, superstruct_1.is)(request.params, InvokeMethodParamsStruct)) {
23
+ throw rpc_errors_1.rpcErrors.invalidParams({ data: { request } });
24
+ }
25
+ const { request: wrappedRequest, scope } = request.params;
26
+ const caveat = hooks.getCaveat(chain_agnostic_permission_1.Caip25EndowmentPermissionName, chain_agnostic_permission_1.Caip25CaveatType);
27
+ const sessionScopes = caveat ? (0, utils_2.getSessionScopes)(caveat.value) : {};
28
+ if (!sessionScopes[scope]?.methods.includes(wrappedRequest.method)) {
29
+ throw rpc_errors_1.providerErrors.unauthorized();
30
+ }
31
+ request.method = wrappedRequest.method;
32
+ request.params = wrappedRequest.params;
33
+ request.scope = scope;
34
+ }
35
+ exports.invokeMethodHandler = invokeMethodHandler;
36
+ //# sourceMappingURL=invoke-method.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoke-method.cjs","sourceRoot":"","sources":["../../../src/middleware/multichain/invoke-method.ts"],"names":[],"mappings":";;;AACA,mFAG6C;AAE7C,qDAAiE;AACjE,uDAAyD;AACzD,2CAIyB;AAGzB,uCAA2C;AAS3C,MAAM,wBAAwB,GAAG,IAAA,oBAAM,EAAC;IACtC,KAAK,EAAE,yBAAiB;IACxB,sDAAsD;IACtD,OAAO,EAAE,IAAA,kBAAI,EAAC,4BAAoB,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;CAC1D,CAAC,CAAC;AAEH;;;;;;GAMG;AACI,KAAK,UAAU,mBAAmB,CACvC,OAA6B,EAC7B,KAA+B;IAE/B,IAAI,CAAC,IAAA,gBAAE,EAAC,OAAO,CAAC,MAAM,EAAE,wBAAwB,CAAC,EAAE,CAAC;QAClD,MAAM,sBAAS,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAE1D,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAC5B,yDAA6B,EAC7B,4CAAgB,CACoB,CAAC;IAEvC,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,IAAA,wBAAgB,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEnE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,MAAM,2BAAc,CAAC,YAAY,EAAE,CAAC;IACtC,CAAC;IAED,OAAO,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;IACvC,OAAO,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;IACvC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;AACxB,CAAC;AAxBD,kDAwBC","sourcesContent":["import type { Caip25CaveatValue } from '@metamask/chain-agnostic-permission';\nimport {\n Caip25CaveatType,\n Caip25EndowmentPermissionName,\n} from '@metamask/chain-agnostic-permission';\nimport type { Caveat } from '@metamask/permission-controller';\nimport { providerErrors, rpcErrors } from '@metamask/rpc-errors';\nimport { is, object, pick } from '@metamask/superstruct';\nimport {\n CaipChainIdStruct,\n JsonRpcRequestStruct,\n type Json,\n} from '@metamask/utils';\n\nimport type { ScopedJsonRpcRequest } from './utils';\nimport { getSessionScopes } from './utils';\n\nexport type InvokeMethodHandlerHooks = {\n getCaveat: (\n permission: string,\n caveatType: string,\n ) => Caveat<string, Json> | undefined;\n};\n\nconst InvokeMethodParamsStruct = object({\n scope: CaipChainIdStruct,\n // @ts-expect-error Unsure why this type doesn't work.\n request: pick(JsonRpcRequestStruct, ['method', 'params']),\n});\n\n/**\n * A handler that implements a simplified version of `wallet_invokeMethod`.\n *\n * @param request - Incoming JSON-RPC request.\n * @param hooks - The method hooks.\n * @returns Nothing.\n */\nexport async function invokeMethodHandler(\n request: ScopedJsonRpcRequest,\n hooks: InvokeMethodHandlerHooks,\n) {\n if (!is(request.params, InvokeMethodParamsStruct)) {\n throw rpcErrors.invalidParams({ data: { request } });\n }\n\n const { request: wrappedRequest, scope } = request.params;\n\n const caveat = hooks.getCaveat(\n Caip25EndowmentPermissionName,\n Caip25CaveatType,\n ) as Caveat<string, Caip25CaveatValue>;\n\n const sessionScopes = caveat ? getSessionScopes(caveat.value) : {};\n\n if (!sessionScopes[scope]?.methods.includes(wrappedRequest.method)) {\n throw providerErrors.unauthorized();\n }\n\n request.method = wrappedRequest.method;\n request.params = wrappedRequest.params;\n request.scope = scope;\n}\n"]}
@@ -0,0 +1,15 @@
1
+ import type { Caveat } from "@metamask/permission-controller";
2
+ import { type Json } from "@metamask/utils";
3
+ import type { ScopedJsonRpcRequest } from "./utils.cjs";
4
+ export type InvokeMethodHandlerHooks = {
5
+ getCaveat: (permission: string, caveatType: string) => Caveat<string, Json> | undefined;
6
+ };
7
+ /**
8
+ * A handler that implements a simplified version of `wallet_invokeMethod`.
9
+ *
10
+ * @param request - Incoming JSON-RPC request.
11
+ * @param hooks - The method hooks.
12
+ * @returns Nothing.
13
+ */
14
+ export declare function invokeMethodHandler(request: ScopedJsonRpcRequest, hooks: InvokeMethodHandlerHooks): Promise<void>;
15
+ //# sourceMappingURL=invoke-method.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoke-method.d.cts","sourceRoot":"","sources":["../../../src/middleware/multichain/invoke-method.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,wCAAwC;AAG9D,OAAO,EAGL,KAAK,IAAI,EACV,wBAAwB;AAEzB,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAgB;AAGpD,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,EAAE,CACT,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,KACf,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC;CACvC,CAAC;AAQF;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,wBAAwB,iBAsBhC"}
@@ -0,0 +1,15 @@
1
+ import type { Caveat } from "@metamask/permission-controller";
2
+ import { type Json } from "@metamask/utils";
3
+ import type { ScopedJsonRpcRequest } from "./utils.mjs";
4
+ export type InvokeMethodHandlerHooks = {
5
+ getCaveat: (permission: string, caveatType: string) => Caveat<string, Json> | undefined;
6
+ };
7
+ /**
8
+ * A handler that implements a simplified version of `wallet_invokeMethod`.
9
+ *
10
+ * @param request - Incoming JSON-RPC request.
11
+ * @param hooks - The method hooks.
12
+ * @returns Nothing.
13
+ */
14
+ export declare function invokeMethodHandler(request: ScopedJsonRpcRequest, hooks: InvokeMethodHandlerHooks): Promise<void>;
15
+ //# sourceMappingURL=invoke-method.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoke-method.d.mts","sourceRoot":"","sources":["../../../src/middleware/multichain/invoke-method.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,wCAAwC;AAG9D,OAAO,EAGL,KAAK,IAAI,EACV,wBAAwB;AAEzB,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAgB;AAGpD,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,EAAE,CACT,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,KACf,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC;CACvC,CAAC;AAQF;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,wBAAwB,iBAsBhC"}
@@ -0,0 +1,32 @@
1
+ import { Caip25CaveatType, Caip25EndowmentPermissionName } from "@metamask/chain-agnostic-permission";
2
+ import { providerErrors, rpcErrors } from "@metamask/rpc-errors";
3
+ import { is, object, pick } from "@metamask/superstruct";
4
+ import { CaipChainIdStruct, JsonRpcRequestStruct } from "@metamask/utils";
5
+ import { getSessionScopes } from "./utils.mjs";
6
+ const InvokeMethodParamsStruct = object({
7
+ scope: CaipChainIdStruct,
8
+ // @ts-expect-error Unsure why this type doesn't work.
9
+ request: pick(JsonRpcRequestStruct, ['method', 'params']),
10
+ });
11
+ /**
12
+ * A handler that implements a simplified version of `wallet_invokeMethod`.
13
+ *
14
+ * @param request - Incoming JSON-RPC request.
15
+ * @param hooks - The method hooks.
16
+ * @returns Nothing.
17
+ */
18
+ export async function invokeMethodHandler(request, hooks) {
19
+ if (!is(request.params, InvokeMethodParamsStruct)) {
20
+ throw rpcErrors.invalidParams({ data: { request } });
21
+ }
22
+ const { request: wrappedRequest, scope } = request.params;
23
+ const caveat = hooks.getCaveat(Caip25EndowmentPermissionName, Caip25CaveatType);
24
+ const sessionScopes = caveat ? getSessionScopes(caveat.value) : {};
25
+ if (!sessionScopes[scope]?.methods.includes(wrappedRequest.method)) {
26
+ throw providerErrors.unauthorized();
27
+ }
28
+ request.method = wrappedRequest.method;
29
+ request.params = wrappedRequest.params;
30
+ request.scope = scope;
31
+ }
32
+ //# sourceMappingURL=invoke-method.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoke-method.mjs","sourceRoot":"","sources":["../../../src/middleware/multichain/invoke-method.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,6BAA6B,EAC9B,4CAA4C;AAE7C,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,6BAA6B;AACjE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,8BAA8B;AACzD,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EAErB,wBAAwB;AAGzB,OAAO,EAAE,gBAAgB,EAAE,oBAAgB;AAS3C,MAAM,wBAAwB,GAAG,MAAM,CAAC;IACtC,KAAK,EAAE,iBAAiB;IACxB,sDAAsD;IACtD,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;CAC1D,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAA6B,EAC7B,KAA+B;IAE/B,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,wBAAwB,CAAC,EAAE,CAAC;QAClD,MAAM,SAAS,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAE1D,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAC5B,6BAA6B,EAC7B,gBAAgB,CACoB,CAAC;IAEvC,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEnE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,MAAM,cAAc,CAAC,YAAY,EAAE,CAAC;IACtC,CAAC;IAED,OAAO,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;IACvC,OAAO,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;IACvC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;AACxB,CAAC","sourcesContent":["import type { Caip25CaveatValue } from '@metamask/chain-agnostic-permission';\nimport {\n Caip25CaveatType,\n Caip25EndowmentPermissionName,\n} from '@metamask/chain-agnostic-permission';\nimport type { Caveat } from '@metamask/permission-controller';\nimport { providerErrors, rpcErrors } from '@metamask/rpc-errors';\nimport { is, object, pick } from '@metamask/superstruct';\nimport {\n CaipChainIdStruct,\n JsonRpcRequestStruct,\n type Json,\n} from '@metamask/utils';\n\nimport type { ScopedJsonRpcRequest } from './utils';\nimport { getSessionScopes } from './utils';\n\nexport type InvokeMethodHandlerHooks = {\n getCaveat: (\n permission: string,\n caveatType: string,\n ) => Caveat<string, Json> | undefined;\n};\n\nconst InvokeMethodParamsStruct = object({\n scope: CaipChainIdStruct,\n // @ts-expect-error Unsure why this type doesn't work.\n request: pick(JsonRpcRequestStruct, ['method', 'params']),\n});\n\n/**\n * A handler that implements a simplified version of `wallet_invokeMethod`.\n *\n * @param request - Incoming JSON-RPC request.\n * @param hooks - The method hooks.\n * @returns Nothing.\n */\nexport async function invokeMethodHandler(\n request: ScopedJsonRpcRequest,\n hooks: InvokeMethodHandlerHooks,\n) {\n if (!is(request.params, InvokeMethodParamsStruct)) {\n throw rpcErrors.invalidParams({ data: { request } });\n }\n\n const { request: wrappedRequest, scope } = request.params;\n\n const caveat = hooks.getCaveat(\n Caip25EndowmentPermissionName,\n Caip25CaveatType,\n ) as Caveat<string, Caip25CaveatValue>;\n\n const sessionScopes = caveat ? getSessionScopes(caveat.value) : {};\n\n if (!sessionScopes[scope]?.methods.includes(wrappedRequest.method)) {\n throw providerErrors.unauthorized();\n }\n\n request.method = wrappedRequest.method;\n request.params = wrappedRequest.params;\n request.scope = scope;\n}\n"]}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMultichainMiddleware = void 0;
4
+ const json_rpc_engine_1 = require("@metamask/json-rpc-engine");
5
+ const rpc_errors_1 = require("@metamask/rpc-errors");
6
+ const create_session_1 = require("./create-session.cjs");
7
+ const get_session_1 = require("./get-session.cjs");
8
+ const invoke_method_1 = require("./invoke-method.cjs");
9
+ const revoke_session_1 = require("./revoke-session.cjs");
10
+ const multichainHandlers = {
11
+ /* eslint-disable @typescript-eslint/naming-convention */
12
+ wallet_createSession: create_session_1.createSessionHandler,
13
+ wallet_invokeMethod: invoke_method_1.invokeMethodHandler,
14
+ wallet_getSession: get_session_1.getSessionHandler,
15
+ wallet_revokeSession: revoke_session_1.revokeSessionHandler,
16
+ /* eslint-enable @typescript-eslint/naming-convention */
17
+ };
18
+ /**
19
+ * Create a middleware that handles requests to the multichain API.
20
+ *
21
+ * @param isMultichain - Whether the JSON-RPC pipeline has multichain enabled.
22
+ * @param hooks - Hooks required to execute the middleware RPC methods.
23
+ * @returns The middleware.
24
+ */
25
+ function createMultichainMiddleware(isMultichain, hooks) {
26
+ return (0, json_rpc_engine_1.createAsyncMiddleware)(async (request, response, next) => {
27
+ const handler = multichainHandlers[request.method];
28
+ const isMultichainRequest = handler !== undefined;
29
+ if (!isMultichain && isMultichainRequest) {
30
+ throw rpc_errors_1.rpcErrors.methodNotFound();
31
+ }
32
+ // If disabled, this middleware functions as a passthrough.
33
+ if (!isMultichain && !isMultichainRequest) {
34
+ await next();
35
+ return;
36
+ }
37
+ if (isMultichain && !isMultichainRequest) {
38
+ throw rpc_errors_1.rpcErrors.methodNotFound();
39
+ }
40
+ const result = await handler(request, hooks);
41
+ if (result) {
42
+ response.result = result;
43
+ return;
44
+ }
45
+ await next();
46
+ });
47
+ }
48
+ exports.createMultichainMiddleware = createMultichainMiddleware;
49
+ //# sourceMappingURL=middleware.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.cjs","sourceRoot":"","sources":["../../../src/middleware/multichain/middleware.ts"],"names":[],"mappings":";;;AAIA,+DAAkE;AAClE,qDAAiD;AAQjD,yDAAwD;AACxD,mDAAkD;AAClD,uDAAsD;AACtD,yDAAwD;AAGxD,MAAM,kBAAkB,GAAG;IACzB,yDAAyD;IACzD,oBAAoB,EAAE,qCAAoB;IAC1C,mBAAmB,EAAE,mCAAmB;IACxC,iBAAiB,EAAE,+BAAiB;IACpC,oBAAoB,EAAE,qCAAoB;IAC1C,wDAAwD;CACzD,CAAC;AAEF;;;;;;GAMG;AACH,SAAgB,0BAA0B,CACxC,YAAqB,EACrB,KAAgC;IAEhC,OAAO,IAAA,uCAAqB,EAC1B,KAAK,EACH,OAAuB,EACvB,QAAgC,EAChC,IAAoC,EACpC,EAAE;QACF,MAAM,OAAO,GACX,kBAAkB,CAAC,OAAO,CAAC,MAAyC,CAAC,CAAC;QAExE,MAAM,mBAAmB,GAAG,OAAO,KAAK,SAAS,CAAC;QAElD,IAAI,CAAC,YAAY,IAAI,mBAAmB,EAAE,CAAC;YACzC,MAAM,sBAAS,CAAC,cAAc,EAAE,CAAC;QACnC,CAAC;QAED,2DAA2D;QAC3D,IAAI,CAAC,YAAY,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC1C,MAAM,IAAI,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,IAAI,YAAY,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzC,MAAM,sBAAS,CAAC,cAAc,EAAE,CAAC;QACnC,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAE7C,IAAI,MAAM,EAAE,CAAC;YACX,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;YACzB,OAAO;QACT,CAAC;QAED,MAAM,IAAI,EAAE,CAAC;IACf,CAAC,CACF,CAAC;AACJ,CAAC;AAvCD,gEAuCC","sourcesContent":["import type {\n AsyncJsonRpcEngineNextCallback,\n JsonRpcMiddleware,\n} from '@metamask/json-rpc-engine';\nimport { createAsyncMiddleware } from '@metamask/json-rpc-engine';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport type {\n Json,\n JsonRpcParams,\n JsonRpcRequest,\n PendingJsonRpcResponse,\n} from '@metamask/utils';\n\nimport { createSessionHandler } from './create-session';\nimport { getSessionHandler } from './get-session';\nimport { invokeMethodHandler } from './invoke-method';\nimport { revokeSessionHandler } from './revoke-session';\nimport type { MultichainMiddlewareHooks } from '../../simulation';\n\nconst multichainHandlers = {\n /* eslint-disable @typescript-eslint/naming-convention */\n wallet_createSession: createSessionHandler,\n wallet_invokeMethod: invokeMethodHandler,\n wallet_getSession: getSessionHandler,\n wallet_revokeSession: revokeSessionHandler,\n /* eslint-enable @typescript-eslint/naming-convention */\n};\n\n/**\n * Create a middleware that handles requests to the multichain API.\n *\n * @param isMultichain - Whether the JSON-RPC pipeline has multichain enabled.\n * @param hooks - Hooks required to execute the middleware RPC methods.\n * @returns The middleware.\n */\nexport function createMultichainMiddleware(\n isMultichain: boolean,\n hooks: MultichainMiddlewareHooks,\n): JsonRpcMiddleware<JsonRpcParams, Json> {\n return createAsyncMiddleware(\n async (\n request: JsonRpcRequest,\n response: PendingJsonRpcResponse,\n next: AsyncJsonRpcEngineNextCallback,\n ) => {\n const handler =\n multichainHandlers[request.method as keyof typeof multichainHandlers];\n\n const isMultichainRequest = handler !== undefined;\n\n if (!isMultichain && isMultichainRequest) {\n throw rpcErrors.methodNotFound();\n }\n\n // If disabled, this middleware functions as a passthrough.\n if (!isMultichain && !isMultichainRequest) {\n await next();\n return;\n }\n\n if (isMultichain && !isMultichainRequest) {\n throw rpcErrors.methodNotFound();\n }\n\n const result = await handler(request, hooks);\n\n if (result) {\n response.result = result;\n return;\n }\n\n await next();\n },\n );\n}\n"]}
@@ -0,0 +1,12 @@
1
+ import type { JsonRpcMiddleware } from "@metamask/json-rpc-engine";
2
+ import type { Json, JsonRpcParams } from "@metamask/utils";
3
+ import type { MultichainMiddlewareHooks } from "../../simulation.cjs";
4
+ /**
5
+ * Create a middleware that handles requests to the multichain API.
6
+ *
7
+ * @param isMultichain - Whether the JSON-RPC pipeline has multichain enabled.
8
+ * @param hooks - Hooks required to execute the middleware RPC methods.
9
+ * @returns The middleware.
10
+ */
11
+ export declare function createMultichainMiddleware(isMultichain: boolean, hooks: MultichainMiddlewareHooks): JsonRpcMiddleware<JsonRpcParams, Json>;
12
+ //# sourceMappingURL=middleware.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.cts","sourceRoot":"","sources":["../../../src/middleware/multichain/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,iBAAiB,EAClB,kCAAkC;AAGnC,OAAO,KAAK,EACV,IAAI,EACJ,aAAa,EAGd,wBAAwB;AAMzB,OAAO,KAAK,EAAE,yBAAyB,EAAE,6BAAyB;AAWlE;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,OAAO,EACrB,KAAK,EAAE,yBAAyB,GAC/B,iBAAiB,CAAC,aAAa,EAAE,IAAI,CAAC,CAoCxC"}
@@ -0,0 +1,12 @@
1
+ import type { JsonRpcMiddleware } from "@metamask/json-rpc-engine";
2
+ import type { Json, JsonRpcParams } from "@metamask/utils";
3
+ import type { MultichainMiddlewareHooks } from "../../simulation.mjs";
4
+ /**
5
+ * Create a middleware that handles requests to the multichain API.
6
+ *
7
+ * @param isMultichain - Whether the JSON-RPC pipeline has multichain enabled.
8
+ * @param hooks - Hooks required to execute the middleware RPC methods.
9
+ * @returns The middleware.
10
+ */
11
+ export declare function createMultichainMiddleware(isMultichain: boolean, hooks: MultichainMiddlewareHooks): JsonRpcMiddleware<JsonRpcParams, Json>;
12
+ //# sourceMappingURL=middleware.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.mts","sourceRoot":"","sources":["../../../src/middleware/multichain/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,iBAAiB,EAClB,kCAAkC;AAGnC,OAAO,KAAK,EACV,IAAI,EACJ,aAAa,EAGd,wBAAwB;AAMzB,OAAO,KAAK,EAAE,yBAAyB,EAAE,6BAAyB;AAWlE;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,OAAO,EACrB,KAAK,EAAE,yBAAyB,GAC/B,iBAAiB,CAAC,aAAa,EAAE,IAAI,CAAC,CAoCxC"}
@@ -0,0 +1,45 @@
1
+ import { createAsyncMiddleware } from "@metamask/json-rpc-engine";
2
+ import { rpcErrors } from "@metamask/rpc-errors";
3
+ import { createSessionHandler } from "./create-session.mjs";
4
+ import { getSessionHandler } from "./get-session.mjs";
5
+ import { invokeMethodHandler } from "./invoke-method.mjs";
6
+ import { revokeSessionHandler } from "./revoke-session.mjs";
7
+ const multichainHandlers = {
8
+ /* eslint-disable @typescript-eslint/naming-convention */
9
+ wallet_createSession: createSessionHandler,
10
+ wallet_invokeMethod: invokeMethodHandler,
11
+ wallet_getSession: getSessionHandler,
12
+ wallet_revokeSession: revokeSessionHandler,
13
+ /* eslint-enable @typescript-eslint/naming-convention */
14
+ };
15
+ /**
16
+ * Create a middleware that handles requests to the multichain API.
17
+ *
18
+ * @param isMultichain - Whether the JSON-RPC pipeline has multichain enabled.
19
+ * @param hooks - Hooks required to execute the middleware RPC methods.
20
+ * @returns The middleware.
21
+ */
22
+ export function createMultichainMiddleware(isMultichain, hooks) {
23
+ return createAsyncMiddleware(async (request, response, next) => {
24
+ const handler = multichainHandlers[request.method];
25
+ const isMultichainRequest = handler !== undefined;
26
+ if (!isMultichain && isMultichainRequest) {
27
+ throw rpcErrors.methodNotFound();
28
+ }
29
+ // If disabled, this middleware functions as a passthrough.
30
+ if (!isMultichain && !isMultichainRequest) {
31
+ await next();
32
+ return;
33
+ }
34
+ if (isMultichain && !isMultichainRequest) {
35
+ throw rpcErrors.methodNotFound();
36
+ }
37
+ const result = await handler(request, hooks);
38
+ if (result) {
39
+ response.result = result;
40
+ return;
41
+ }
42
+ await next();
43
+ });
44
+ }
45
+ //# sourceMappingURL=middleware.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.mjs","sourceRoot":"","sources":["../../../src/middleware/multichain/middleware.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,kCAAkC;AAClE,OAAO,EAAE,SAAS,EAAE,6BAA6B;AAQjD,OAAO,EAAE,oBAAoB,EAAE,6BAAyB;AACxD,OAAO,EAAE,iBAAiB,EAAE,0BAAsB;AAClD,OAAO,EAAE,mBAAmB,EAAE,4BAAwB;AACtD,OAAO,EAAE,oBAAoB,EAAE,6BAAyB;AAGxD,MAAM,kBAAkB,GAAG;IACzB,yDAAyD;IACzD,oBAAoB,EAAE,oBAAoB;IAC1C,mBAAmB,EAAE,mBAAmB;IACxC,iBAAiB,EAAE,iBAAiB;IACpC,oBAAoB,EAAE,oBAAoB;IAC1C,wDAAwD;CACzD,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B,CACxC,YAAqB,EACrB,KAAgC;IAEhC,OAAO,qBAAqB,CAC1B,KAAK,EACH,OAAuB,EACvB,QAAgC,EAChC,IAAoC,EACpC,EAAE;QACF,MAAM,OAAO,GACX,kBAAkB,CAAC,OAAO,CAAC,MAAyC,CAAC,CAAC;QAExE,MAAM,mBAAmB,GAAG,OAAO,KAAK,SAAS,CAAC;QAElD,IAAI,CAAC,YAAY,IAAI,mBAAmB,EAAE,CAAC;YACzC,MAAM,SAAS,CAAC,cAAc,EAAE,CAAC;QACnC,CAAC;QAED,2DAA2D;QAC3D,IAAI,CAAC,YAAY,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC1C,MAAM,IAAI,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,IAAI,YAAY,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzC,MAAM,SAAS,CAAC,cAAc,EAAE,CAAC;QACnC,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAE7C,IAAI,MAAM,EAAE,CAAC;YACX,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;YACzB,OAAO;QACT,CAAC;QAED,MAAM,IAAI,EAAE,CAAC;IACf,CAAC,CACF,CAAC;AACJ,CAAC","sourcesContent":["import type {\n AsyncJsonRpcEngineNextCallback,\n JsonRpcMiddleware,\n} from '@metamask/json-rpc-engine';\nimport { createAsyncMiddleware } from '@metamask/json-rpc-engine';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport type {\n Json,\n JsonRpcParams,\n JsonRpcRequest,\n PendingJsonRpcResponse,\n} from '@metamask/utils';\n\nimport { createSessionHandler } from './create-session';\nimport { getSessionHandler } from './get-session';\nimport { invokeMethodHandler } from './invoke-method';\nimport { revokeSessionHandler } from './revoke-session';\nimport type { MultichainMiddlewareHooks } from '../../simulation';\n\nconst multichainHandlers = {\n /* eslint-disable @typescript-eslint/naming-convention */\n wallet_createSession: createSessionHandler,\n wallet_invokeMethod: invokeMethodHandler,\n wallet_getSession: getSessionHandler,\n wallet_revokeSession: revokeSessionHandler,\n /* eslint-enable @typescript-eslint/naming-convention */\n};\n\n/**\n * Create a middleware that handles requests to the multichain API.\n *\n * @param isMultichain - Whether the JSON-RPC pipeline has multichain enabled.\n * @param hooks - Hooks required to execute the middleware RPC methods.\n * @returns The middleware.\n */\nexport function createMultichainMiddleware(\n isMultichain: boolean,\n hooks: MultichainMiddlewareHooks,\n): JsonRpcMiddleware<JsonRpcParams, Json> {\n return createAsyncMiddleware(\n async (\n request: JsonRpcRequest,\n response: PendingJsonRpcResponse,\n next: AsyncJsonRpcEngineNextCallback,\n ) => {\n const handler =\n multichainHandlers[request.method as keyof typeof multichainHandlers];\n\n const isMultichainRequest = handler !== undefined;\n\n if (!isMultichain && isMultichainRequest) {\n throw rpcErrors.methodNotFound();\n }\n\n // If disabled, this middleware functions as a passthrough.\n if (!isMultichain && !isMultichainRequest) {\n await next();\n return;\n }\n\n if (isMultichain && !isMultichainRequest) {\n throw rpcErrors.methodNotFound();\n }\n\n const result = await handler(request, hooks);\n\n if (result) {\n response.result = result;\n return;\n }\n\n await next();\n },\n );\n}\n"]}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.revokeSessionHandler = void 0;
4
+ const chain_agnostic_permission_1 = require("@metamask/chain-agnostic-permission");
5
+ /**
6
+ * A handler that implements a simplified version of `wallet_revokeSession`.
7
+ *
8
+ * @param _request - Incoming JSON-RPC request. Unused for this handler.
9
+ * @param hooks - The method hooks.
10
+ * @returns The JSON-RPC response.
11
+ */
12
+ function revokeSessionHandler(_request, hooks) {
13
+ hooks.revokePermission(chain_agnostic_permission_1.Caip25EndowmentPermissionName);
14
+ return true;
15
+ }
16
+ exports.revokeSessionHandler = revokeSessionHandler;
17
+ //# sourceMappingURL=revoke-session.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revoke-session.cjs","sourceRoot":"","sources":["../../../src/middleware/multichain/revoke-session.ts"],"names":[],"mappings":";;;AAAA,mFAAoF;AAOpF;;;;;;GAMG;AACH,SAAgB,oBAAoB,CAClC,QAAwB,EACxB,KAAgC;IAEhC,KAAK,CAAC,gBAAgB,CAAC,yDAA6B,CAAC,CAAC;IACtD,OAAO,IAAI,CAAC;AACd,CAAC;AAND,oDAMC","sourcesContent":["import { Caip25EndowmentPermissionName } from '@metamask/chain-agnostic-permission';\nimport { type JsonRpcRequest } from '@metamask/utils';\n\nexport type RevokeSessionHandlerHooks = {\n revokePermission: (permissionName: string) => void;\n};\n\n/**\n * A handler that implements a simplified version of `wallet_revokeSession`.\n *\n * @param _request - Incoming JSON-RPC request. Unused for this handler.\n * @param hooks - The method hooks.\n * @returns The JSON-RPC response.\n */\nexport function revokeSessionHandler(\n _request: JsonRpcRequest,\n hooks: RevokeSessionHandlerHooks,\n) {\n hooks.revokePermission(Caip25EndowmentPermissionName);\n return true;\n}\n"]}
@@ -0,0 +1,13 @@
1
+ import { type JsonRpcRequest } from "@metamask/utils";
2
+ export type RevokeSessionHandlerHooks = {
3
+ revokePermission: (permissionName: string) => void;
4
+ };
5
+ /**
6
+ * A handler that implements a simplified version of `wallet_revokeSession`.
7
+ *
8
+ * @param _request - Incoming JSON-RPC request. Unused for this handler.
9
+ * @param hooks - The method hooks.
10
+ * @returns The JSON-RPC response.
11
+ */
12
+ export declare function revokeSessionHandler(_request: JsonRpcRequest, hooks: RevokeSessionHandlerHooks): boolean;
13
+ //# sourceMappingURL=revoke-session.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revoke-session.d.cts","sourceRoot":"","sources":["../../../src/middleware/multichain/revoke-session.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,cAAc,EAAE,wBAAwB;AAEtD,MAAM,MAAM,yBAAyB,GAAG;IACtC,gBAAgB,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;CACpD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,yBAAyB,WAIjC"}
@@ -0,0 +1,13 @@
1
+ import { type JsonRpcRequest } from "@metamask/utils";
2
+ export type RevokeSessionHandlerHooks = {
3
+ revokePermission: (permissionName: string) => void;
4
+ };
5
+ /**
6
+ * A handler that implements a simplified version of `wallet_revokeSession`.
7
+ *
8
+ * @param _request - Incoming JSON-RPC request. Unused for this handler.
9
+ * @param hooks - The method hooks.
10
+ * @returns The JSON-RPC response.
11
+ */
12
+ export declare function revokeSessionHandler(_request: JsonRpcRequest, hooks: RevokeSessionHandlerHooks): boolean;
13
+ //# sourceMappingURL=revoke-session.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revoke-session.d.mts","sourceRoot":"","sources":["../../../src/middleware/multichain/revoke-session.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,cAAc,EAAE,wBAAwB;AAEtD,MAAM,MAAM,yBAAyB,GAAG;IACtC,gBAAgB,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;CACpD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,yBAAyB,WAIjC"}
@@ -0,0 +1,13 @@
1
+ import { Caip25EndowmentPermissionName } from "@metamask/chain-agnostic-permission";
2
+ /**
3
+ * A handler that implements a simplified version of `wallet_revokeSession`.
4
+ *
5
+ * @param _request - Incoming JSON-RPC request. Unused for this handler.
6
+ * @param hooks - The method hooks.
7
+ * @returns The JSON-RPC response.
8
+ */
9
+ export function revokeSessionHandler(_request, hooks) {
10
+ hooks.revokePermission(Caip25EndowmentPermissionName);
11
+ return true;
12
+ }
13
+ //# sourceMappingURL=revoke-session.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revoke-session.mjs","sourceRoot":"","sources":["../../../src/middleware/multichain/revoke-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,4CAA4C;AAOpF;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAwB,EACxB,KAAgC;IAEhC,KAAK,CAAC,gBAAgB,CAAC,6BAA6B,CAAC,CAAC;IACtD,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import { Caip25EndowmentPermissionName } from '@metamask/chain-agnostic-permission';\nimport { type JsonRpcRequest } from '@metamask/utils';\n\nexport type RevokeSessionHandlerHooks = {\n revokePermission: (permissionName: string) => void;\n};\n\n/**\n * A handler that implements a simplified version of `wallet_revokeSession`.\n *\n * @param _request - Incoming JSON-RPC request. Unused for this handler.\n * @param hooks - The method hooks.\n * @returns The JSON-RPC response.\n */\nexport function revokeSessionHandler(\n _request: JsonRpcRequest,\n hooks: RevokeSessionHandlerHooks,\n) {\n hooks.revokePermission(Caip25EndowmentPermissionName);\n return true;\n}\n"]}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSessionScopes = void 0;
4
+ const chain_agnostic_permission_1 = require("@metamask/chain-agnostic-permission");
5
+ /**
6
+ * Get a session scopes value that can be used for simulation, by injecting non-EVM methods into the returned session scopes
7
+ * directly from the caveat.
8
+ *
9
+ * @param value The caveat value.
10
+ * @returns The session scopes.
11
+ */
12
+ function getSessionScopes(value) {
13
+ const mergedScopes = {
14
+ ...value.requiredScopes,
15
+ ...value.optionalScopes,
16
+ };
17
+ const nonEvmMethods = Object.keys(mergedScopes).reduce((accumulator, scope) => {
18
+ const castScope = scope;
19
+ if (!castScope.startsWith('eip155') && castScope !== 'wallet') {
20
+ accumulator[castScope] = mergedScopes[castScope].methods;
21
+ }
22
+ return accumulator;
23
+ }, {});
24
+ return (0, chain_agnostic_permission_1.getSessionScopes)(value, {
25
+ getNonEvmSupportedMethods: (scope) => nonEvmMethods[scope],
26
+ });
27
+ }
28
+ exports.getSessionScopes = getSessionScopes;
29
+ //# sourceMappingURL=utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.cjs","sourceRoot":"","sources":["../../../src/middleware/multichain/utils.ts"],"names":[],"mappings":";;;AAIA,mFAAiG;AAKjG;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAAC,KAAwB;IACvD,MAAM,YAAY,GAAG;QACnB,GAAG,KAAK,CAAC,cAAc;QACvB,GAAG,KAAK,CAAC,cAAc;KAC4C,CAAC;IAEtE,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAEpD,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE;QACvB,MAAM,SAAS,GAAG,KAA+B,CAAC;QAClD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC9D,WAAW,CAAC,SAAS,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC;QAC3D,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,IAAA,4CAAsB,EAAC,KAAK,EAAE;QACnC,yBAAyB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC;KAC3D,CAAC,CAAC;AACL,CAAC;AAnBD,4CAmBC","sourcesContent":["import type {\n Caip25CaveatValue,\n InternalScopeObject,\n} from '@metamask/chain-agnostic-permission';\nimport { getSessionScopes as getMergedSessionScopes } from '@metamask/chain-agnostic-permission';\nimport type { CaipChainId, JsonRpcRequest } from '@metamask/utils';\n\nexport type ScopedJsonRpcRequest = JsonRpcRequest & { scope?: CaipChainId };\n\n/**\n * Get a session scopes value that can be used for simulation, by injecting non-EVM methods into the returned session scopes\n * directly from the caveat.\n *\n * @param value The caveat value.\n * @returns The session scopes.\n */\nexport function getSessionScopes(value: Caip25CaveatValue) {\n const mergedScopes = {\n ...value.requiredScopes,\n ...value.optionalScopes,\n } as Record<CaipChainId, InternalScopeObject & { methods: string[] }>;\n\n const nonEvmMethods = Object.keys(mergedScopes).reduce<\n Record<CaipChainId, string[]>\n >((accumulator, scope) => {\n const castScope = scope as CaipChainId | 'wallet';\n if (!castScope.startsWith('eip155') && castScope !== 'wallet') {\n accumulator[castScope] = mergedScopes[castScope].methods;\n }\n return accumulator;\n }, {});\n\n return getMergedSessionScopes(value, {\n getNonEvmSupportedMethods: (scope) => nonEvmMethods[scope],\n });\n}\n"]}
@@ -0,0 +1,14 @@
1
+ import type { Caip25CaveatValue } from "@metamask/chain-agnostic-permission";
2
+ import type { CaipChainId, JsonRpcRequest } from "@metamask/utils";
3
+ export type ScopedJsonRpcRequest = JsonRpcRequest & {
4
+ scope?: CaipChainId;
5
+ };
6
+ /**
7
+ * Get a session scopes value that can be used for simulation, by injecting non-EVM methods into the returned session scopes
8
+ * directly from the caveat.
9
+ *
10
+ * @param value The caveat value.
11
+ * @returns The session scopes.
12
+ */
13
+ export declare function getSessionScopes(value: Caip25CaveatValue): import("@metamask/chain-agnostic-permission").NormalizedScopesObject;
14
+ //# sourceMappingURL=utils.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.cts","sourceRoot":"","sources":["../../../src/middleware/multichain/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EAElB,4CAA4C;AAE7C,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,wBAAwB;AAEnE,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG;IAAE,KAAK,CAAC,EAAE,WAAW,CAAA;CAAE,CAAC;AAE5E;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,wEAmBxD"}
@@ -0,0 +1,14 @@
1
+ import type { Caip25CaveatValue } from "@metamask/chain-agnostic-permission";
2
+ import type { CaipChainId, JsonRpcRequest } from "@metamask/utils";
3
+ export type ScopedJsonRpcRequest = JsonRpcRequest & {
4
+ scope?: CaipChainId;
5
+ };
6
+ /**
7
+ * Get a session scopes value that can be used for simulation, by injecting non-EVM methods into the returned session scopes
8
+ * directly from the caveat.
9
+ *
10
+ * @param value The caveat value.
11
+ * @returns The session scopes.
12
+ */
13
+ export declare function getSessionScopes(value: Caip25CaveatValue): import("@metamask/chain-agnostic-permission").NormalizedScopesObject;
14
+ //# sourceMappingURL=utils.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.mts","sourceRoot":"","sources":["../../../src/middleware/multichain/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EAElB,4CAA4C;AAE7C,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,wBAAwB;AAEnE,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG;IAAE,KAAK,CAAC,EAAE,WAAW,CAAA;CAAE,CAAC;AAE5E;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,wEAmBxD"}
@@ -0,0 +1,25 @@
1
+ import { getSessionScopes as getMergedSessionScopes } from "@metamask/chain-agnostic-permission";
2
+ /**
3
+ * Get a session scopes value that can be used for simulation, by injecting non-EVM methods into the returned session scopes
4
+ * directly from the caveat.
5
+ *
6
+ * @param value The caveat value.
7
+ * @returns The session scopes.
8
+ */
9
+ export function getSessionScopes(value) {
10
+ const mergedScopes = {
11
+ ...value.requiredScopes,
12
+ ...value.optionalScopes,
13
+ };
14
+ const nonEvmMethods = Object.keys(mergedScopes).reduce((accumulator, scope) => {
15
+ const castScope = scope;
16
+ if (!castScope.startsWith('eip155') && castScope !== 'wallet') {
17
+ accumulator[castScope] = mergedScopes[castScope].methods;
18
+ }
19
+ return accumulator;
20
+ }, {});
21
+ return getMergedSessionScopes(value, {
22
+ getNonEvmSupportedMethods: (scope) => nonEvmMethods[scope],
23
+ });
24
+ }
25
+ //# sourceMappingURL=utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.mjs","sourceRoot":"","sources":["../../../src/middleware/multichain/utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,IAAI,sBAAsB,EAAE,4CAA4C;AAKjG;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAwB;IACvD,MAAM,YAAY,GAAG;QACnB,GAAG,KAAK,CAAC,cAAc;QACvB,GAAG,KAAK,CAAC,cAAc;KAC4C,CAAC;IAEtE,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAEpD,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE;QACvB,MAAM,SAAS,GAAG,KAA+B,CAAC;QAClD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC9D,WAAW,CAAC,SAAS,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC;QAC3D,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,sBAAsB,CAAC,KAAK,EAAE;QACnC,yBAAyB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC;KAC3D,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type {\n Caip25CaveatValue,\n InternalScopeObject,\n} from '@metamask/chain-agnostic-permission';\nimport { getSessionScopes as getMergedSessionScopes } from '@metamask/chain-agnostic-permission';\nimport type { CaipChainId, JsonRpcRequest } from '@metamask/utils';\n\nexport type ScopedJsonRpcRequest = JsonRpcRequest & { scope?: CaipChainId };\n\n/**\n * Get a session scopes value that can be used for simulation, by injecting non-EVM methods into the returned session scopes\n * directly from the caveat.\n *\n * @param value The caveat value.\n * @returns The session scopes.\n */\nexport function getSessionScopes(value: Caip25CaveatValue) {\n const mergedScopes = {\n ...value.requiredScopes,\n ...value.optionalScopes,\n } as Record<CaipChainId, InternalScopeObject & { methods: string[] }>;\n\n const nonEvmMethods = Object.keys(mergedScopes).reduce<\n Record<CaipChainId, string[]>\n >((accumulator, scope) => {\n const castScope = scope as CaipChainId | 'wallet';\n if (!castScope.startsWith('eip155') && castScope !== 'wallet') {\n accumulator[castScope] = mergedScopes[castScope].methods;\n }\n return accumulator;\n }, {});\n\n return getMergedSessionScopes(value, {\n getNonEvmSupportedMethods: (scope) => nonEvmMethods[scope],\n });\n}\n"]}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createProviderMiddleware = void 0;
4
+ const json_rpc_engine_1 = require("@metamask/json-rpc-engine");
5
+ const rpc_errors_1 = require("@metamask/rpc-errors");
6
+ const utils_1 = require("@metamask/utils");
7
+ const ethers_1 = require("ethers");
8
+ const store_1 = require("../store/index.cjs");
9
+ /**
10
+ * Create a middleware that uses a JSON-RPC provider to respond to RPC requests.
11
+ *
12
+ * @param store - The Redux store.
13
+ * @returns A middleware that responds to JSON-RPC requests.
14
+ */
15
+ function createProviderMiddleware(store) {
16
+ return (0, json_rpc_engine_1.createAsyncMiddleware)(async (request, response, next) => {
17
+ const requestScope = request.scope && (0, utils_1.parseCaipChainId)(request.scope);
18
+ const isEvm = requestScope ? requestScope.namespace === 'eip155' : true;
19
+ if (!isEvm) {
20
+ await next();
21
+ /* istanbul ignore next */
22
+ return;
23
+ }
24
+ const chainId = requestScope
25
+ ? BigInt(requestScope.reference)
26
+ : (0, utils_1.hexToBigInt)((0, store_1.getChainId)(store.getState()));
27
+ try {
28
+ const provider = new ethers_1.InfuraProvider(chainId);
29
+ const result = await provider.send(request.method, request.params ?? []);
30
+ response.result = result;
31
+ }
32
+ catch (error) {
33
+ if ((0, utils_1.hasProperty)(error, 'info') && (0, utils_1.hasProperty)(error.info, 'error')) {
34
+ response.error = error.info.error;
35
+ return;
36
+ }
37
+ if ((0, utils_1.hasProperty)(error, 'error')) {
38
+ response.error = error.error;
39
+ return;
40
+ }
41
+ response.error = rpc_errors_1.rpcErrors.internal({
42
+ data: { cause: (0, rpc_errors_1.serializeCause)(error) },
43
+ });
44
+ }
45
+ });
46
+ }
47
+ exports.createProviderMiddleware = createProviderMiddleware;
48
+ //# sourceMappingURL=provider.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.cjs","sourceRoot":"","sources":["../../src/middleware/provider.ts"],"names":[],"mappings":";;;AACA,+DAAkE;AAClE,qDAAiE;AAEjE,2CAA6E;AAC7E,mCAAwC;AAIxC,8CAAsC;AAEtC;;;;;GAKG;AACH,SAAgB,wBAAwB,CACtC,KAAY;IAEZ,OAAO,IAAA,uCAAqB,EAC1B,KAAK,EAAE,OAA6B,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;QACtD,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,IAAI,IAAA,wBAAgB,EAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtE,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QAExE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,EAAE,CAAC;YACb,0BAA0B;YAC1B,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,YAAY;YAC1B,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC;YAChC,CAAC,CAAC,IAAA,mBAAW,EAAC,IAAA,kBAAU,EAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAE9C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,uBAAc,CAAC,OAAO,CAAC,CAAC;YAE7C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAChC,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,MAAM,IAAI,EAAE,CACrB,CAAC;YACF,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,IAAA,mBAAW,EAAC,KAAK,EAAE,MAAM,CAAC,IAAI,IAAA,mBAAW,EAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;gBACnE,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;gBAClC,OAAO;YACT,CAAC;YACD,IAAI,IAAA,mBAAW,EAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;gBAChC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC7B,OAAO;YACT,CAAC;YACD,QAAQ,CAAC,KAAK,GAAG,sBAAS,CAAC,QAAQ,CAAC;gBAClC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAA,2BAAc,EAAC,KAAK,CAAC,EAAE;aACvC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC;AAzCD,4DAyCC","sourcesContent":["import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine';\nimport { createAsyncMiddleware } from '@metamask/json-rpc-engine';\nimport { rpcErrors, serializeCause } from '@metamask/rpc-errors';\nimport type { Json, JsonRpcParams } from '@metamask/utils';\nimport { hasProperty, hexToBigInt, parseCaipChainId } from '@metamask/utils';\nimport { InfuraProvider } from 'ethers';\n\nimport type { ScopedJsonRpcRequest } from './multichain';\nimport type { Store } from '../store';\nimport { getChainId } from '../store';\n\n/**\n * Create a middleware that uses a JSON-RPC provider to respond to RPC requests.\n *\n * @param store - The Redux store.\n * @returns A middleware that responds to JSON-RPC requests.\n */\nexport function createProviderMiddleware(\n store: Store,\n): JsonRpcMiddleware<JsonRpcParams, Json> {\n return createAsyncMiddleware(\n async (request: ScopedJsonRpcRequest, response, next) => {\n const requestScope = request.scope && parseCaipChainId(request.scope);\n const isEvm = requestScope ? requestScope.namespace === 'eip155' : true;\n\n if (!isEvm) {\n await next();\n /* istanbul ignore next */\n return;\n }\n\n const chainId = requestScope\n ? BigInt(requestScope.reference)\n : hexToBigInt(getChainId(store.getState()));\n\n try {\n const provider = new InfuraProvider(chainId);\n\n const result = await provider.send(\n request.method,\n request.params ?? [],\n );\n response.result = result;\n } catch (error) {\n if (hasProperty(error, 'info') && hasProperty(error.info, 'error')) {\n response.error = error.info.error;\n return;\n }\n if (hasProperty(error, 'error')) {\n response.error = error.error;\n return;\n }\n response.error = rpcErrors.internal({\n data: { cause: serializeCause(error) },\n });\n }\n },\n );\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import type { JsonRpcMiddleware } from "@metamask/json-rpc-engine";
2
+ import type { Json, JsonRpcParams } from "@metamask/utils";
3
+ import type { Store } from "../store/index.cjs";
4
+ /**
5
+ * Create a middleware that uses a JSON-RPC provider to respond to RPC requests.
6
+ *
7
+ * @param store - The Redux store.
8
+ * @returns A middleware that responds to JSON-RPC requests.
9
+ */
10
+ export declare function createProviderMiddleware(store: Store): JsonRpcMiddleware<JsonRpcParams, Json>;
11
+ //# sourceMappingURL=provider.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.cts","sourceRoot":"","sources":["../../src/middleware/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kCAAkC;AAGnE,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,wBAAwB;AAK3D,OAAO,KAAK,EAAE,KAAK,EAAE,2BAAiB;AAGtC;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,KAAK,GACX,iBAAiB,CAAC,aAAa,EAAE,IAAI,CAAC,CAuCxC"}
@@ -0,0 +1,11 @@
1
+ import type { JsonRpcMiddleware } from "@metamask/json-rpc-engine";
2
+ import type { Json, JsonRpcParams } from "@metamask/utils";
3
+ import type { Store } from "../store/index.mjs";
4
+ /**
5
+ * Create a middleware that uses a JSON-RPC provider to respond to RPC requests.
6
+ *
7
+ * @param store - The Redux store.
8
+ * @returns A middleware that responds to JSON-RPC requests.
9
+ */
10
+ export declare function createProviderMiddleware(store: Store): JsonRpcMiddleware<JsonRpcParams, Json>;
11
+ //# sourceMappingURL=provider.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.mts","sourceRoot":"","sources":["../../src/middleware/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kCAAkC;AAGnE,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,wBAAwB;AAK3D,OAAO,KAAK,EAAE,KAAK,EAAE,2BAAiB;AAGtC;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,KAAK,GACX,iBAAiB,CAAC,aAAa,EAAE,IAAI,CAAC,CAuCxC"}
@@ -0,0 +1,44 @@
1
+ import { createAsyncMiddleware } from "@metamask/json-rpc-engine";
2
+ import { rpcErrors, serializeCause } from "@metamask/rpc-errors";
3
+ import { hasProperty, hexToBigInt, parseCaipChainId } from "@metamask/utils";
4
+ import { InfuraProvider } from "ethers";
5
+ import { getChainId } from "../store/index.mjs";
6
+ /**
7
+ * Create a middleware that uses a JSON-RPC provider to respond to RPC requests.
8
+ *
9
+ * @param store - The Redux store.
10
+ * @returns A middleware that responds to JSON-RPC requests.
11
+ */
12
+ export function createProviderMiddleware(store) {
13
+ return createAsyncMiddleware(async (request, response, next) => {
14
+ const requestScope = request.scope && parseCaipChainId(request.scope);
15
+ const isEvm = requestScope ? requestScope.namespace === 'eip155' : true;
16
+ if (!isEvm) {
17
+ await next();
18
+ /* istanbul ignore next */
19
+ return;
20
+ }
21
+ const chainId = requestScope
22
+ ? BigInt(requestScope.reference)
23
+ : hexToBigInt(getChainId(store.getState()));
24
+ try {
25
+ const provider = new InfuraProvider(chainId);
26
+ const result = await provider.send(request.method, request.params ?? []);
27
+ response.result = result;
28
+ }
29
+ catch (error) {
30
+ if (hasProperty(error, 'info') && hasProperty(error.info, 'error')) {
31
+ response.error = error.info.error;
32
+ return;
33
+ }
34
+ if (hasProperty(error, 'error')) {
35
+ response.error = error.error;
36
+ return;
37
+ }
38
+ response.error = rpcErrors.internal({
39
+ data: { cause: serializeCause(error) },
40
+ });
41
+ }
42
+ });
43
+ }
44
+ //# sourceMappingURL=provider.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.mjs","sourceRoot":"","sources":["../../src/middleware/provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,kCAAkC;AAClE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,6BAA6B;AAEjE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,wBAAwB;AAC7E,OAAO,EAAE,cAAc,EAAE,eAAe;AAIxC,OAAO,EAAE,UAAU,EAAE,2BAAiB;AAEtC;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CACtC,KAAY;IAEZ,OAAO,qBAAqB,CAC1B,KAAK,EAAE,OAA6B,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;QACtD,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,IAAI,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtE,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QAExE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,EAAE,CAAC;YACb,0BAA0B;YAC1B,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,YAAY;YAC1B,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC;YAChC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAE9C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;YAE7C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAChC,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,MAAM,IAAI,EAAE,CACrB,CAAC;YACF,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;gBACnE,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;gBAClC,OAAO;YACT,CAAC;YACD,IAAI,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;gBAChC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC7B,OAAO;YACT,CAAC;YACD,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC;gBAClC,IAAI,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE;aACvC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC","sourcesContent":["import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine';\nimport { createAsyncMiddleware } from '@metamask/json-rpc-engine';\nimport { rpcErrors, serializeCause } from '@metamask/rpc-errors';\nimport type { Json, JsonRpcParams } from '@metamask/utils';\nimport { hasProperty, hexToBigInt, parseCaipChainId } from '@metamask/utils';\nimport { InfuraProvider } from 'ethers';\n\nimport type { ScopedJsonRpcRequest } from './multichain';\nimport type { Store } from '../store';\nimport { getChainId } from '../store';\n\n/**\n * Create a middleware that uses a JSON-RPC provider to respond to RPC requests.\n *\n * @param store - The Redux store.\n * @returns A middleware that responds to JSON-RPC requests.\n */\nexport function createProviderMiddleware(\n store: Store,\n): JsonRpcMiddleware<JsonRpcParams, Json> {\n return createAsyncMiddleware(\n async (request: ScopedJsonRpcRequest, response, next) => {\n const requestScope = request.scope && parseCaipChainId(request.scope);\n const isEvm = requestScope ? requestScope.namespace === 'eip155' : true;\n\n if (!isEvm) {\n await next();\n /* istanbul ignore next */\n return;\n }\n\n const chainId = requestScope\n ? BigInt(requestScope.reference)\n : hexToBigInt(getChainId(store.getState()));\n\n try {\n const provider = new InfuraProvider(chainId);\n\n const result = await provider.send(\n request.method,\n request.params ?? [],\n );\n response.result = result;\n } catch (error) {\n if (hasProperty(error, 'info') && hasProperty(error.info, 'error')) {\n response.error = error.info.error;\n return;\n }\n if (hasProperty(error, 'error')) {\n response.error = error.error;\n return;\n }\n response.error = rpcErrors.internal({\n data: { cause: serializeCause(error) },\n });\n }\n },\n );\n}\n"]}