@metamask/snaps-simulation 4.3.0 → 4.3.2

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 (162) hide show
  1. package/CHANGELOG.md +17 -1
  2. package/dist/controllers.cjs +3 -4
  3. package/dist/controllers.cjs.map +1 -1
  4. package/dist/controllers.mjs +1 -1
  5. package/dist/controllers.mjs.map +1 -1
  6. package/dist/files.cjs +4 -5
  7. package/dist/files.cjs.map +1 -1
  8. package/dist/helpers.cjs +1 -2
  9. package/dist/helpers.cjs.map +1 -1
  10. package/dist/interface.cjs +18 -19
  11. package/dist/interface.cjs.map +1 -1
  12. package/dist/interface.d.cts +2 -2
  13. package/dist/interface.d.cts.map +1 -1
  14. package/dist/interface.d.mts +2 -2
  15. package/dist/interface.d.mts.map +1 -1
  16. package/dist/interface.mjs +2 -2
  17. package/dist/interface.mjs.map +1 -1
  18. package/dist/logger.d.cts +0 -1
  19. package/dist/logger.d.cts.map +1 -1
  20. package/dist/logger.d.mts +0 -1
  21. package/dist/logger.d.mts.map +1 -1
  22. package/dist/methods/hooks/chain.cjs +1 -2
  23. package/dist/methods/hooks/chain.cjs.map +1 -1
  24. package/dist/methods/hooks/chain.d.cts +12 -1
  25. package/dist/methods/hooks/chain.d.cts.map +1 -1
  26. package/dist/methods/hooks/chain.d.mts +12 -1
  27. package/dist/methods/hooks/chain.d.mts.map +1 -1
  28. package/dist/methods/hooks/end-trace.cjs +1 -2
  29. package/dist/methods/hooks/end-trace.cjs.map +1 -1
  30. package/dist/methods/hooks/end-trace.d.cts +12 -1
  31. package/dist/methods/hooks/end-trace.d.cts.map +1 -1
  32. package/dist/methods/hooks/end-trace.d.mts +12 -1
  33. package/dist/methods/hooks/end-trace.d.mts.map +1 -1
  34. package/dist/methods/hooks/get-mnemonic.cjs +1 -2
  35. package/dist/methods/hooks/get-mnemonic.cjs.map +1 -1
  36. package/dist/methods/hooks/get-mnemonic.d.cts.map +1 -1
  37. package/dist/methods/hooks/get-mnemonic.d.mts.map +1 -1
  38. package/dist/methods/hooks/get-preferences.cjs +1 -2
  39. package/dist/methods/hooks/get-preferences.cjs.map +1 -1
  40. package/dist/methods/hooks/get-snap.cjs +1 -2
  41. package/dist/methods/hooks/get-snap.cjs.map +1 -1
  42. package/dist/methods/hooks/get-snap.d.cts.map +1 -1
  43. package/dist/methods/hooks/get-snap.d.mts.map +1 -1
  44. package/dist/methods/hooks/notifications.cjs +2 -3
  45. package/dist/methods/hooks/notifications.cjs.map +1 -1
  46. package/dist/methods/hooks/notifications.d.cts +26 -2
  47. package/dist/methods/hooks/notifications.d.cts.map +1 -1
  48. package/dist/methods/hooks/notifications.d.mts +26 -2
  49. package/dist/methods/hooks/notifications.d.mts.map +1 -1
  50. package/dist/methods/hooks/permitted/state.cjs +3 -4
  51. package/dist/methods/hooks/permitted/state.cjs.map +1 -1
  52. package/dist/methods/hooks/permitted/state.d.cts +31 -3
  53. package/dist/methods/hooks/permitted/state.d.cts.map +1 -1
  54. package/dist/methods/hooks/permitted/state.d.mts +31 -3
  55. package/dist/methods/hooks/permitted/state.d.mts.map +1 -1
  56. package/dist/methods/hooks/request-user-approval.cjs +1 -2
  57. package/dist/methods/hooks/request-user-approval.cjs.map +1 -1
  58. package/dist/methods/hooks/request-user-approval.d.cts +15 -1
  59. package/dist/methods/hooks/request-user-approval.d.cts.map +1 -1
  60. package/dist/methods/hooks/request-user-approval.d.mts +15 -1
  61. package/dist/methods/hooks/request-user-approval.d.mts.map +1 -1
  62. package/dist/methods/hooks/start-trace.cjs +1 -2
  63. package/dist/methods/hooks/start-trace.cjs.map +1 -1
  64. package/dist/methods/hooks/start-trace.d.cts +12 -1
  65. package/dist/methods/hooks/start-trace.d.cts.map +1 -1
  66. package/dist/methods/hooks/start-trace.d.mts +12 -1
  67. package/dist/methods/hooks/start-trace.d.mts.map +1 -1
  68. package/dist/methods/hooks/state.cjs +3 -4
  69. package/dist/methods/hooks/state.cjs.map +1 -1
  70. package/dist/methods/hooks/state.d.cts +37 -3
  71. package/dist/methods/hooks/state.d.cts.map +1 -1
  72. package/dist/methods/hooks/state.d.mts +37 -3
  73. package/dist/methods/hooks/state.d.mts.map +1 -1
  74. package/dist/methods/hooks/track-error.cjs +1 -2
  75. package/dist/methods/hooks/track-error.cjs.map +1 -1
  76. package/dist/methods/hooks/track-error.d.cts +11 -1
  77. package/dist/methods/hooks/track-error.d.cts.map +1 -1
  78. package/dist/methods/hooks/track-error.d.mts +11 -1
  79. package/dist/methods/hooks/track-error.d.mts.map +1 -1
  80. package/dist/methods/hooks/track-event.cjs +1 -2
  81. package/dist/methods/hooks/track-event.cjs.map +1 -1
  82. package/dist/methods/hooks/track-event.d.cts +12 -5
  83. package/dist/methods/hooks/track-event.d.cts.map +1 -1
  84. package/dist/methods/hooks/track-event.d.mts +12 -5
  85. package/dist/methods/hooks/track-event.d.mts.map +1 -1
  86. package/dist/methods/specifications.cjs +4 -5
  87. package/dist/methods/specifications.cjs.map +1 -1
  88. package/dist/middleware/engine.cjs +1 -2
  89. package/dist/middleware/engine.cjs.map +1 -1
  90. package/dist/middleware/internal-methods/accounts.cjs +1 -2
  91. package/dist/middleware/internal-methods/accounts.cjs.map +1 -1
  92. package/dist/middleware/internal-methods/chain-id.cjs +1 -2
  93. package/dist/middleware/internal-methods/chain-id.cjs.map +1 -1
  94. package/dist/middleware/internal-methods/middleware.cjs +1 -2
  95. package/dist/middleware/internal-methods/middleware.cjs.map +1 -1
  96. package/dist/middleware/internal-methods/net-version.cjs +1 -2
  97. package/dist/middleware/internal-methods/net-version.cjs.map +1 -1
  98. package/dist/middleware/internal-methods/switch-ethereum-chain.cjs +1 -2
  99. package/dist/middleware/internal-methods/switch-ethereum-chain.cjs.map +1 -1
  100. package/dist/middleware/mock.cjs +1 -2
  101. package/dist/middleware/mock.cjs.map +1 -1
  102. package/dist/middleware/multichain/create-session.cjs +1 -2
  103. package/dist/middleware/multichain/create-session.cjs.map +1 -1
  104. package/dist/middleware/multichain/create-session.d.cts +1 -1
  105. package/dist/middleware/multichain/create-session.d.mts +1 -1
  106. package/dist/middleware/multichain/get-session.cjs +1 -2
  107. package/dist/middleware/multichain/get-session.cjs.map +1 -1
  108. package/dist/middleware/multichain/invoke-method.cjs +1 -2
  109. package/dist/middleware/multichain/invoke-method.cjs.map +1 -1
  110. package/dist/middleware/multichain/middleware.cjs +1 -2
  111. package/dist/middleware/multichain/middleware.cjs.map +1 -1
  112. package/dist/middleware/multichain/revoke-session.cjs +1 -2
  113. package/dist/middleware/multichain/revoke-session.cjs.map +1 -1
  114. package/dist/middleware/multichain/utils.cjs +1 -2
  115. package/dist/middleware/multichain/utils.cjs.map +1 -1
  116. package/dist/middleware/provider.cjs +1 -2
  117. package/dist/middleware/provider.cjs.map +1 -1
  118. package/dist/options.cjs +1 -2
  119. package/dist/options.cjs.map +1 -1
  120. package/dist/options.d.cts +4 -4
  121. package/dist/options.d.mts +4 -4
  122. package/dist/request.cjs +3 -4
  123. package/dist/request.cjs.map +1 -1
  124. package/dist/simulation.cjs +9 -10
  125. package/dist/simulation.cjs.map +1 -1
  126. package/dist/simulation.d.cts.map +1 -1
  127. package/dist/simulation.d.mts.map +1 -1
  128. package/dist/simulation.mjs +4 -4
  129. package/dist/simulation.mjs.map +1 -1
  130. package/dist/store/chain.d.cts.map +1 -1
  131. package/dist/store/chain.d.mts.map +1 -1
  132. package/dist/store/mocks.d.cts.map +1 -1
  133. package/dist/store/mocks.d.mts.map +1 -1
  134. package/dist/store/notifications.d.cts.map +1 -1
  135. package/dist/store/notifications.d.mts.map +1 -1
  136. package/dist/store/state.cjs +2 -2
  137. package/dist/store/state.cjs.map +1 -1
  138. package/dist/store/state.d.cts +4 -7
  139. package/dist/store/state.d.cts.map +1 -1
  140. package/dist/store/state.d.mts +4 -7
  141. package/dist/store/state.d.mts.map +1 -1
  142. package/dist/store/store.cjs +1 -2
  143. package/dist/store/store.cjs.map +1 -1
  144. package/dist/store/store.d.cts +1 -1
  145. package/dist/store/store.d.mts +1 -1
  146. package/dist/store/trackables.d.cts +6 -6
  147. package/dist/store/trackables.d.cts.map +1 -1
  148. package/dist/store/trackables.d.mts +6 -6
  149. package/dist/store/trackables.d.mts.map +1 -1
  150. package/dist/store/ui.d.cts.map +1 -1
  151. package/dist/store/ui.d.mts.map +1 -1
  152. package/dist/structs.cjs +3 -3
  153. package/dist/structs.cjs.map +1 -1
  154. package/dist/structs.mjs +1 -1
  155. package/dist/structs.mjs.map +1 -1
  156. package/dist/utils/account.d.cts.map +1 -1
  157. package/dist/utils/account.d.mts.map +1 -1
  158. package/dist/utils/errors.cjs +1 -2
  159. package/dist/utils/errors.cjs.map +1 -1
  160. package/dist/validation.cjs +7 -8
  161. package/dist/validation.cjs.map +1 -1
  162. package/package.json +11 -11
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.invokeMethodHandler = void 0;
3
+ exports.invokeMethodHandler = invokeMethodHandler;
4
4
  const chain_agnostic_permission_1 = require("@metamask/chain-agnostic-permission");
5
5
  const rpc_errors_1 = require("@metamask/rpc-errors");
6
6
  const superstruct_1 = require("@metamask/superstruct");
@@ -32,5 +32,4 @@ async function invokeMethodHandler(request, hooks) {
32
32
  request.params = wrappedRequest.params;
33
33
  request.scope = scope;
34
34
  }
35
- exports.invokeMethodHandler = invokeMethodHandler;
36
35
  //# sourceMappingURL=invoke-method.cjs.map
@@ -1 +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"]}
1
+ {"version":3,"file":"invoke-method.cjs","sourceRoot":"","sources":["../../../src/middleware/multichain/invoke-method.ts"],"names":[],"mappings":";;AAqCA,kDAwBC;AA5DD,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","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"]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createMultichainMiddleware = void 0;
3
+ exports.createMultichainMiddleware = createMultichainMiddleware;
4
4
  const json_rpc_engine_1 = require("@metamask/json-rpc-engine");
5
5
  const rpc_errors_1 = require("@metamask/rpc-errors");
6
6
  const create_session_1 = require("./create-session.cjs");
@@ -45,5 +45,4 @@ function createMultichainMiddleware(isMultichain, hooks) {
45
45
  await next();
46
46
  });
47
47
  }
48
- exports.createMultichainMiddleware = createMultichainMiddleware;
49
48
  //# sourceMappingURL=middleware.cjs.map
@@ -1 +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"]}
1
+ {"version":3,"file":"middleware.cjs","sourceRoot":"","sources":["../../../src/middleware/multichain/middleware.ts"],"names":[],"mappings":";;AAmCA,gEAuCC;AAtED,+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","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"]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.revokeSessionHandler = void 0;
3
+ exports.revokeSessionHandler = revokeSessionHandler;
4
4
  const chain_agnostic_permission_1 = require("@metamask/chain-agnostic-permission");
5
5
  /**
6
6
  * A handler that implements a simplified version of `wallet_revokeSession`.
@@ -13,5 +13,4 @@ function revokeSessionHandler(_request, hooks) {
13
13
  hooks.revokePermission(chain_agnostic_permission_1.Caip25EndowmentPermissionName);
14
14
  return true;
15
15
  }
16
- exports.revokeSessionHandler = revokeSessionHandler;
17
16
  //# sourceMappingURL=revoke-session.cjs.map
@@ -1 +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"]}
1
+ {"version":3,"file":"revoke-session.cjs","sourceRoot":"","sources":["../../../src/middleware/multichain/revoke-session.ts"],"names":[],"mappings":";;AAcA,oDAMC;AApBD,mFAAoF;AAOpF;;;;;;GAMG;AACH,SAAgB,oBAAoB,CAClC,QAAwB,EACxB,KAAgC;IAEhC,KAAK,CAAC,gBAAgB,CAAC,yDAA6B,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"]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getSessionScopes = void 0;
3
+ exports.getSessionScopes = getSessionScopes;
4
4
  const chain_agnostic_permission_1 = require("@metamask/chain-agnostic-permission");
5
5
  /**
6
6
  * Get a session scopes value that can be used for simulation, by injecting non-EVM methods into the returned session scopes
@@ -25,5 +25,4 @@ function getSessionScopes(value) {
25
25
  getNonEvmSupportedMethods: (scope) => nonEvmMethods[scope],
26
26
  });
27
27
  }
28
- exports.getSessionScopes = getSessionScopes;
29
28
  //# sourceMappingURL=utils.cjs.map
@@ -1 +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"]}
1
+ {"version":3,"file":"utils.cjs","sourceRoot":"","sources":["../../../src/middleware/multichain/utils.ts"],"names":[],"mappings":";;AAgBA,4CAmBC;AA/BD,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","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"]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createProviderMiddleware = void 0;
3
+ exports.createProviderMiddleware = createProviderMiddleware;
4
4
  const json_rpc_engine_1 = require("@metamask/json-rpc-engine");
5
5
  const rpc_errors_1 = require("@metamask/rpc-errors");
6
6
  const utils_1 = require("@metamask/utils");
@@ -44,5 +44,4 @@ function createProviderMiddleware(store) {
44
44
  }
45
45
  });
46
46
  }
47
- exports.createProviderMiddleware = createProviderMiddleware;
48
47
  //# sourceMappingURL=provider.cjs.map
@@ -1 +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"]}
1
+ {"version":3,"file":"provider.cjs","sourceRoot":"","sources":["../../src/middleware/provider.ts"],"names":[],"mappings":";;AAiBA,4DAyCC;AAzDD,+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","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"]}
package/dist/options.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getOptions = void 0;
3
+ exports.getOptions = getOptions;
4
4
  const superstruct_1 = require("@metamask/superstruct");
5
5
  const utils_1 = require("@metamask/utils");
6
6
  const constants_1 = require("./constants.cjs");
@@ -44,5 +44,4 @@ const SimulationOptionsStruct = (0, superstruct_1.object)({
44
44
  function getOptions(options) {
45
45
  return (0, superstruct_1.create)(options, SimulationOptionsStruct);
46
46
  }
47
- exports.getOptions = getOptions;
48
47
  //# sourceMappingURL=options.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"options.cjs","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Infer } from '@metamask/superstruct';\nimport {\n array,\n boolean,\n create,\n defaulted,\n nullable,\n object,\n optional,\n record,\n string,\n} from '@metamask/superstruct';\nimport {\n CaipAssetTypeStruct,\n CaipChainIdStruct,\n JsonStruct,\n} from '@metamask/utils';\n\nimport {\n DEFAULT_ACCOUNTS,\n DEFAULT_ASSETS,\n DEFAULT_CURRENCY,\n DEFAULT_LOCALE,\n DEFAULT_SRP,\n} from './constants';\n\nconst SimulationAccountStruct = object({\n address: string(),\n id: string(),\n scopes: array(CaipChainIdStruct),\n selected: defaulted(optional(boolean()), false),\n owned: defaulted(optional(boolean()), false),\n assets: defaulted(optional(array(CaipAssetTypeStruct)), []),\n});\n\nexport type SimulationAccount = Infer<typeof SimulationAccountStruct>;\n\nconst SimulationAssetStruct = object({\n name: string(),\n symbol: string(),\n});\n\nexport type SimulationAsset = Infer<typeof SimulationAssetStruct>;\n\nconst SimulationOptionsStruct = object({\n currency: defaulted(optional(string()), DEFAULT_CURRENCY),\n secretRecoveryPhrase: defaulted(optional(string()), DEFAULT_SRP),\n locale: defaulted(optional(string()), DEFAULT_LOCALE),\n state: defaulted(optional(nullable(record(string(), JsonStruct))), null),\n unencryptedState: defaulted(\n optional(nullable(record(string(), JsonStruct))),\n null,\n ),\n accounts: defaulted(\n optional(array(SimulationAccountStruct)),\n DEFAULT_ACCOUNTS,\n ),\n assets: defaulted(\n optional(record(CaipAssetTypeStruct, SimulationAssetStruct)),\n DEFAULT_ASSETS,\n ),\n hideBalances: defaulted(optional(boolean()), false),\n useSecurityAlerts: defaulted(optional(boolean()), true),\n simulateOnChainActions: defaulted(optional(boolean()), true),\n useTokenDetection: defaulted(optional(boolean()), true),\n batchCheckBalances: defaulted(optional(boolean()), true),\n displayNftMedia: defaulted(optional(boolean()), true),\n useNftDetection: defaulted(optional(boolean()), true),\n useExternalPricingData: defaulted(optional(boolean()), true),\n showTestnets: defaulted(optional(boolean()), true),\n});\n\n/**\n * Options for the simulation.\n *\n * @property currency - The currency to use. Defaults to `usd`.\n * @property secretRecoveryPhrase - The secret recovery phrase to use. This is\n * used to derive addresses and private keys. Defaults to a test recovery\n * phrase.\n * @property locale - The locale to use. Defaults to `en`.\n * @property state - The initial state of the Snap, if any. Defaults to `null`.\n * @property unencryptedState - The initial unencrypted state of the Snap, if\n * any. Defaults to `null`.\n * @property accounts - The accounts to use in the simulation, if any. Defaults\n * to an empty array.\n * @property assets - The assets to use in the simulation, if any. Defaults to\n * an empty object.\n * @property useSecurityAlerts - Whether to run transactions and signatures through security providers.\n * @property simulateOnChainActions - Whether to simulate transactions and signatures.\n * @property useTokenDetection - Whether to auto-detect tokens.\n * @property batchCheckBalances - Whether to fetch balances in an aggregated manner.\n * @property displayNftMedia - Whether to display NFT media.\n * @property useNftDetection - Whether to auto-detect NFTs.\n * @property useExternalPricingData - Whether to get token price data from an external source.\n * @property showTestnets - Whether to show testnets.\n */\nexport type SimulationUserOptions = Infer<typeof SimulationOptionsStruct>;\n\n/**\n * Options for the simulation, with defaults filled in.\n *\n * See {@link SimulationUserOptions} for documentation.\n */\nexport type SimulationOptions = Required<SimulationUserOptions>;\n\n/**\n * Get the options for the simulation.\n *\n * @param options - The user options. Any options not specified will be filled\n * in with default values.\n * @returns The simulation options.\n */\nexport function getOptions(options: SimulationUserOptions): SimulationOptions {\n return create(\n options,\n SimulationOptionsStruct,\n ) as Required<SimulationUserOptions>;\n}\n"]}
1
+ {"version":3,"file":"options.cjs","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Infer } from '@metamask/superstruct';\nimport {\n array,\n boolean,\n create,\n defaulted,\n nullable,\n object,\n optional,\n record,\n string,\n} from '@metamask/superstruct';\nimport {\n CaipAssetTypeStruct,\n CaipChainIdStruct,\n JsonStruct,\n} from '@metamask/utils';\n\nimport {\n DEFAULT_ACCOUNTS,\n DEFAULT_ASSETS,\n DEFAULT_CURRENCY,\n DEFAULT_LOCALE,\n DEFAULT_SRP,\n} from './constants';\n\nconst SimulationAccountStruct = object({\n address: string(),\n id: string(),\n scopes: array(CaipChainIdStruct),\n selected: defaulted(optional(boolean()), false),\n owned: defaulted(optional(boolean()), false),\n assets: defaulted(optional(array(CaipAssetTypeStruct)), []),\n});\n\nexport type SimulationAccount = Infer<typeof SimulationAccountStruct>;\n\nconst SimulationAssetStruct = object({\n name: string(),\n symbol: string(),\n});\n\nexport type SimulationAsset = Infer<typeof SimulationAssetStruct>;\n\nconst SimulationOptionsStruct = object({\n currency: defaulted(optional(string()), DEFAULT_CURRENCY),\n secretRecoveryPhrase: defaulted(optional(string()), DEFAULT_SRP),\n locale: defaulted(optional(string()), DEFAULT_LOCALE),\n state: defaulted(optional(nullable(record(string(), JsonStruct))), null),\n unencryptedState: defaulted(\n optional(nullable(record(string(), JsonStruct))),\n null,\n ),\n accounts: defaulted(\n optional(array(SimulationAccountStruct)),\n DEFAULT_ACCOUNTS,\n ),\n assets: defaulted(\n optional(record(CaipAssetTypeStruct, SimulationAssetStruct)),\n DEFAULT_ASSETS,\n ),\n hideBalances: defaulted(optional(boolean()), false),\n useSecurityAlerts: defaulted(optional(boolean()), true),\n simulateOnChainActions: defaulted(optional(boolean()), true),\n useTokenDetection: defaulted(optional(boolean()), true),\n batchCheckBalances: defaulted(optional(boolean()), true),\n displayNftMedia: defaulted(optional(boolean()), true),\n useNftDetection: defaulted(optional(boolean()), true),\n useExternalPricingData: defaulted(optional(boolean()), true),\n showTestnets: defaulted(optional(boolean()), true),\n});\n\n/**\n * Options for the simulation.\n *\n * @property currency - The currency to use. Defaults to `usd`.\n * @property secretRecoveryPhrase - The secret recovery phrase to use. This is\n * used to derive addresses and private keys. Defaults to a test recovery\n * phrase.\n * @property locale - The locale to use. Defaults to `en`.\n * @property state - The initial state of the Snap, if any. Defaults to `null`.\n * @property unencryptedState - The initial unencrypted state of the Snap, if\n * any. Defaults to `null`.\n * @property accounts - The accounts to use in the simulation, if any. Defaults\n * to an empty array.\n * @property assets - The assets to use in the simulation, if any. Defaults to\n * an empty object.\n * @property useSecurityAlerts - Whether to run transactions and signatures through security providers.\n * @property simulateOnChainActions - Whether to simulate transactions and signatures.\n * @property useTokenDetection - Whether to auto-detect tokens.\n * @property batchCheckBalances - Whether to fetch balances in an aggregated manner.\n * @property displayNftMedia - Whether to display NFT media.\n * @property useNftDetection - Whether to auto-detect NFTs.\n * @property useExternalPricingData - Whether to get token price data from an external source.\n * @property showTestnets - Whether to show testnets.\n */\nexport type SimulationUserOptions = Infer<typeof SimulationOptionsStruct>;\n\n/**\n * Options for the simulation, with defaults filled in.\n *\n * See {@link SimulationUserOptions} for documentation.\n */\nexport type SimulationOptions = Required<SimulationUserOptions>;\n\n/**\n * Get the options for the simulation.\n *\n * @param options - The user options. Any options not specified will be filled\n * in with default values.\n * @returns The simulation options.\n */\nexport function getOptions(options: SimulationUserOptions): SimulationOptions {\n return create(\n options,\n SimulationOptionsStruct,\n ) as Required<SimulationUserOptions>;\n}\n"]}
@@ -31,8 +31,8 @@ declare const SimulationOptionsStruct: import("@metamask/superstruct").Struct<{
31
31
  currency?: string | undefined;
32
32
  secretRecoveryPhrase?: string | undefined;
33
33
  locale?: string | undefined;
34
- state?: Record<string, import("@metamask/utils").Json> | null | undefined;
35
- unencryptedState?: Record<string, import("@metamask/utils").Json> | null | undefined;
34
+ state?: Record<string, import("@metamask/utils", { with: { "resolution-mode": "import" } }).Json> | null | undefined;
35
+ unencryptedState?: Record<string, import("@metamask/utils", { with: { "resolution-mode": "import" } }).Json> | null | undefined;
36
36
  accounts?: {
37
37
  address: string;
38
38
  id: string;
@@ -54,8 +54,8 @@ declare const SimulationOptionsStruct: import("@metamask/superstruct").Struct<{
54
54
  currency: import("@metamask/superstruct").Struct<string | undefined, null>;
55
55
  secretRecoveryPhrase: import("@metamask/superstruct").Struct<string | undefined, null>;
56
56
  locale: import("@metamask/superstruct").Struct<string | undefined, null>;
57
- state: import("@metamask/superstruct").Struct<Record<string, import("@metamask/utils").Json> | null | undefined, null>;
58
- unencryptedState: import("@metamask/superstruct").Struct<Record<string, import("@metamask/utils").Json> | null | undefined, null>;
57
+ state: import("@metamask/superstruct").Struct<Record<string, import("@metamask/utils", { with: { "resolution-mode": "import" } }).Json> | null | undefined, null>;
58
+ unencryptedState: import("@metamask/superstruct").Struct<Record<string, import("@metamask/utils", { with: { "resolution-mode": "import" } }).Json> | null | undefined, null>;
59
59
  accounts: import("@metamask/superstruct").Struct<{
60
60
  address: string;
61
61
  id: string;
@@ -31,8 +31,8 @@ declare const SimulationOptionsStruct: import("@metamask/superstruct").Struct<{
31
31
  currency?: string | undefined;
32
32
  secretRecoveryPhrase?: string | undefined;
33
33
  locale?: string | undefined;
34
- state?: Record<string, import("@metamask/utils").Json> | null | undefined;
35
- unencryptedState?: Record<string, import("@metamask/utils").Json> | null | undefined;
34
+ state?: Record<string, import("@metamask/utils", { with: { "resolution-mode": "import" } }).Json> | null | undefined;
35
+ unencryptedState?: Record<string, import("@metamask/utils", { with: { "resolution-mode": "import" } }).Json> | null | undefined;
36
36
  accounts?: {
37
37
  address: string;
38
38
  id: string;
@@ -54,8 +54,8 @@ declare const SimulationOptionsStruct: import("@metamask/superstruct").Struct<{
54
54
  currency: import("@metamask/superstruct").Struct<string | undefined, null>;
55
55
  secretRecoveryPhrase: import("@metamask/superstruct").Struct<string | undefined, null>;
56
56
  locale: import("@metamask/superstruct").Struct<string | undefined, null>;
57
- state: import("@metamask/superstruct").Struct<Record<string, import("@metamask/utils").Json> | null | undefined, null>;
58
- unencryptedState: import("@metamask/superstruct").Struct<Record<string, import("@metamask/utils").Json> | null | undefined, null>;
57
+ state: import("@metamask/superstruct").Struct<Record<string, import("@metamask/utils", { with: { "resolution-mode": "import" } }).Json> | null | undefined, null>;
58
+ unencryptedState: import("@metamask/superstruct").Struct<Record<string, import("@metamask/utils", { with: { "resolution-mode": "import" } }).Json> | null | undefined, null>;
59
59
  accounts: import("@metamask/superstruct").Struct<{
60
60
  address: string;
61
61
  id: string;
package/dist/request.cjs CHANGED
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getInterfaceApi = exports.getInterfaceFromResult = exports.handleRequest = void 0;
3
+ exports.handleRequest = handleRequest;
4
+ exports.getInterfaceFromResult = getInterfaceFromResult;
5
+ exports.getInterfaceApi = getInterfaceApi;
4
6
  const snaps_sdk_1 = require("@metamask/snaps-sdk");
5
7
  const snaps_utils_1 = require("@metamask/snaps-utils");
6
8
  const superstruct_1 = require("@metamask/superstruct");
@@ -115,7 +117,6 @@ function handleRequest({ snapId, store, executionService, handler, controllerMes
115
117
  };
116
118
  return promise;
117
119
  }
118
- exports.handleRequest = handleRequest;
119
120
  /**
120
121
  * Get the interface ID from the result if it's available or create a new interface if the result contains static components.
121
122
  *
@@ -135,7 +136,6 @@ async function getInterfaceFromResult(result, snapId, controllerMessenger) {
135
136
  }
136
137
  return undefined;
137
138
  }
138
- exports.getInterfaceFromResult = getInterfaceFromResult;
139
139
  /**
140
140
  * Get the response content from the `SnapInterfaceController` and include the
141
141
  * interaction methods.
@@ -172,5 +172,4 @@ async function getInterfaceApi(result, snapId, controllerMessenger, options, con
172
172
  }
173
173
  return undefined;
174
174
  }
175
- exports.getInterfaceApi = getInterfaceApi;
176
175
  //# sourceMappingURL=request.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"request.cjs","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":";;;AACA,mDAK6B;AAE7B,uDAAoD;AACpD,uDAA2C;AAC3C,2CAKyB;AACzB,8CAA0C;AAG1C,+CAAgE;AAGhE,6CAOiB;AACjB,2CAA+C;AAkB/C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,SAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,KAAK,EACL,gBAAgB,EAChB,OAAO,EACP,mBAAmB,EACnB,iBAAiB,EACjB,OAAO,EACP,OAAO,EAAE,EAAE,EAAE,GAAG,IAAA,gBAAM,GAAE,EAAE,MAAM,GAAG,qBAAqB,EAAE,GAAG,OAAO,EAAE,GACjD;IACrB,MAAM,iBAAiB,GAAG,GAAG,EAAE;QAC7B,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,gBAAgB;SAC7B,gBAAgB,CAAC,MAAM,EAAE;QACxB,MAAM;QACN,OAAO;QACP,OAAO,EAAE;YACP,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,CAAC;YACL,GAAG,OAAO;SACX;KACF,CAAC;SACD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QACrB,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC/B,MAAM,aAAa,GAAG,IAAA,wBAAgB,EAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAA,iBAAS,EAAC,KAAK,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,IAAA,iBAAS,EAAC,KAAK,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,IAAA,iBAAS,EAAC,KAAK,CAAC,CAAC;QAChC,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;QAE9C,KAAK,CAAC,QAAQ,CAAC,IAAA,0BAAkB,GAAE,CAAC,CAAC;QACrC,KAAK,CAAC,QAAQ,CAAC,IAAA,uBAAe,GAAE,CAAC,CAAC;QAElC,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,MAAM,eAAe,CAC1C,MAAM,EACN,MAAM,EACN,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,CACZ,CAAC;YAEF,OAAO;gBACL,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC;gBACd,QAAQ,EAAE;oBACR,MAAM,EAAE,IAAA,mBAAW,EAAC,MAAM,CAAC;iBAC5B;gBACD,aAAa;gBACb,OAAO,EAAE;oBACP,MAAM;oBACN,MAAM;oBACN,MAAM;iBACP;gBACD,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5D,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,cAAc,CAAC,GAAG,IAAA,yBAAW,EAAC,KAAK,CAAC,CAAC;YAC5C,OAAO;gBACL,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC;gBACd,QAAQ,EAAE;oBACR,KAAK,EAAE,cAAc,CAAC,SAAS,EAAE;iBAClC;gBACD,aAAa,EAAE,EAAE;gBACjB,OAAO,EAAE;oBACP,MAAM,EAAE,EAAE;oBACV,MAAM,EAAE,EAAE;oBACV,MAAM,EAAE,EAAE;iBACX;gBACD,YAAY,EAAE,iBAAiB;aAChC,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACf,MAAM,CAAC,cAAc,CAAC,GAAG,IAAA,yBAAW,EAAC,KAAK,CAAC,CAAC;QAE5C,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC;YACd,QAAQ,EAAE;gBACR,KAAK,EAAE,cAAc,CAAC,SAAS,EAAE;aAClC;YACD,aAAa,EAAE,EAAE;YACjB,OAAO,EAAE;gBACP,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,EAAE;aACX;YACD,YAAY,EAAE,iBAAiB;SAChC,CAAC;IACJ,CAAC,CAA2B,CAAC;IAE/B,OAAO,CAAC,YAAY,GAAG,KAAK,IAAI,EAAE;QAChC,MAAM,WAAW,GAAG,OAAO,CACzB,wBAAY,EACZ,OAAO,EACP,MAAM,EACN,mBAAmB,EACnB,iBAAiB,CAClB,CAAC,SAAS,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;QAE1D,mEAAmE;QACnE,0EAA0E;QAC1E,IACE,IAAA,gBAAE,EAAC,MAAM,EAAE,4BAAkB,CAAC;YAC9B,IAAA,mBAAW,EAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,EACrC,CAAC;YACD,MAAM,IAAI,KAAK,CACb,qHACG,MAAM,CAAC,QAAQ,CAAC,KAAsB,CAAC,OAC1C,EAAE,CACH,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,WAAW,CAAC;IAC3B,CAAC,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC;AAzHD,sCAyHC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,sBAAsB,CAC1C,MAAe,EACf,MAAc,EACd,mBAA4C;IAE5C,IAAI,IAAA,qBAAa,EAAC,MAAM,CAAC,IAAI,IAAA,mBAAW,EAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;QACvD,OAAO,MAAM,CAAC,EAAY,CAAC;IAC7B,CAAC;IAED,IAAI,IAAA,qBAAa,EAAC,MAAM,CAAC,IAAI,IAAA,mBAAW,EAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC;QAC5D,IAAA,cAAM,EACJ,IAAA,gBAAE,EAAC,MAAM,CAAC,OAAO,EAAE,oCAAwB,CAAC,EAC5C,yCAAyC,CAC1C,CAAC;QAEF,MAAM,EAAE,GAAG,mBAAmB,CAAC,IAAI,CACjC,yCAAyC,EACzC,MAAM,EACN,MAAM,CAAC,OAA6B,CACrC,CAAC;QAEF,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAzBD,wDAyBC;AAED;;;;;;;;;;GAUG;AACI,KAAK,UAAU,eAAe,CACnC,MAAe,EACf,MAAc,EACd,mBAA4C,EAC5C,OAA0B,EAC1B,SAAkB;IAElB,MAAM,WAAW,GAAG,MAAM,sBAAsB,CAC9C,MAAM,EACN,MAAM,EACN,mBAAmB,CACpB,CAAC;IAEF,MAAM,EAAE,GAAG,WAAW,IAAI,SAAS,CAAC;IAEpC,IAAI,EAAE,EAAE,CAAC;QACP,IAAI,CAAC;YACH,mBAAmB,CAAC,IAAI,CACtB,+CAA+C,EAC/C,MAAM,EACN,EAAE,CACH,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,yEAAyE;YACzE,QAAQ;QACV,CAAC;QAED,OAAO,GAAG,EAAE;YACV,MAAM,EAAE,OAAO,EAAE,GAAG,mBAAmB,CAAC,IAAI,CAC1C,sCAAsC,EACtC,MAAM,EACN,EAAE,CACH,CAAC;YAEF,MAAM,OAAO,GAAG,IAAA,+BAAmB,EACjC,MAAM,EACN,mBAAmB,EACnB,OAAO,EACP;gBACE,EAAE;gBACF,OAAO;aACR,CACF,CAAC;YAEF,OAAO;gBACL,OAAO;gBACP,GAAG,OAAO;aACX,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AApDD,0CAoDC","sourcesContent":["import type { ExecutionService } from '@metamask/snaps-controllers';\nimport {\n type ComponentOrElement,\n ComponentOrElementStruct,\n type JsonRpcError,\n type SnapId,\n} from '@metamask/snaps-sdk';\nimport type { HandlerType } from '@metamask/snaps-utils';\nimport { unwrapError } from '@metamask/snaps-utils';\nimport { is } from '@metamask/superstruct';\nimport {\n assert,\n getSafeJson,\n hasProperty,\n isPlainObject,\n} from '@metamask/utils';\nimport { nanoid } from '@reduxjs/toolkit';\n\nimport type { RootControllerMessenger } from './controllers';\nimport { getInterface, getInterfaceActions } from './interface';\nimport type { SimulationOptions } from './options';\nimport type { RunSagaFunction, Store } from './store';\nimport {\n getTraces,\n getErrors,\n clearNotifications,\n getNotifications,\n getEvents,\n clearTrackables,\n} from './store';\nimport { SnapResponseStruct } from './structs';\nimport type {\n RequestOptions,\n SnapHandlerInterface,\n SnapRequest,\n} from './types';\n\nexport type HandleRequestOptions = {\n snapId: SnapId;\n store: Store;\n executionService: ExecutionService;\n handler: HandlerType;\n controllerMessenger: RootControllerMessenger;\n simulationOptions: SimulationOptions;\n runSaga: RunSagaFunction;\n request: RequestOptions;\n};\n\n/**\n * Send a JSON-RPC request to the Snap, and wrap the response in a\n * {@link SnapResponse} object.\n *\n * @param options - The request options.\n * @param options.snapId - The ID of the Snap to send the request to.\n * @param options.store - The Redux store.\n * @param options.executionService - The execution service to use to send the\n * request.\n * @param options.handler - The handler to use to send the request.\n * @param options.controllerMessenger - The controller messenger used to call actions.\n * @param options.simulationOptions - The simulation options.\n * @param options.runSaga - A function to run a saga outside the usual Redux\n * flow.\n * @param options.request - The request to send.\n * @param options.request.id - The ID of the request. If not provided, a random\n * ID will be generated.\n * @param options.request.origin - The origin of the request. Defaults to\n * `https://metamask.io`.\n * @returns The response, wrapped in a {@link SnapResponse} object.\n */\nexport function handleRequest({\n snapId,\n store,\n executionService,\n handler,\n controllerMessenger,\n simulationOptions,\n runSaga,\n request: { id = nanoid(), origin = 'https://metamask.io', ...options },\n}: HandleRequestOptions): SnapRequest {\n const getInterfaceError = () => {\n throw new Error(\n 'Unable to get the interface from the Snap: The request to the Snap failed.',\n );\n };\n\n const promise = executionService\n .handleRpcRequest(snapId, {\n origin,\n handler,\n request: {\n jsonrpc: '2.0',\n id: 1,\n ...options,\n },\n })\n .then(async (result) => {\n const state = store.getState();\n const notifications = getNotifications(state);\n const errors = getErrors(state);\n const events = getEvents(state);\n const traces = getTraces(state);\n const interfaceId = notifications[0]?.content;\n\n store.dispatch(clearNotifications());\n store.dispatch(clearTrackables());\n\n try {\n const getInterfaceFn = await getInterfaceApi(\n result,\n snapId,\n controllerMessenger,\n simulationOptions,\n interfaceId,\n );\n\n return {\n id: String(id),\n response: {\n result: getSafeJson(result),\n },\n notifications,\n tracked: {\n errors,\n events,\n traces,\n },\n ...(getInterfaceFn ? { getInterface: getInterfaceFn } : {}),\n };\n } catch (error) {\n const [unwrappedError] = unwrapError(error);\n return {\n id: String(id),\n response: {\n error: unwrappedError.serialize(),\n },\n notifications: [],\n tracked: {\n errors: [],\n events: [],\n traces: [],\n },\n getInterface: getInterfaceError,\n };\n }\n })\n .catch((error) => {\n const [unwrappedError] = unwrapError(error);\n\n return {\n id: String(id),\n response: {\n error: unwrappedError.serialize(),\n },\n notifications: [],\n tracked: {\n errors: [],\n events: [],\n traces: [],\n },\n getInterface: getInterfaceError,\n };\n }) as unknown as SnapRequest;\n\n promise.getInterface = async () => {\n const sagaPromise = runSaga(\n getInterface,\n runSaga,\n snapId,\n controllerMessenger,\n simulationOptions,\n ).toPromise();\n const result = await Promise.race([promise, sagaPromise]);\n\n // If the request promise has resolved to an error, we should throw\n // instead of waiting for an interface that likely will never be displayed\n if (\n is(result, SnapResponseStruct) &&\n hasProperty(result.response, 'error')\n ) {\n throw new Error(\n `Unable to get the interface from the Snap: The returned interface may be invalid. The error message received was: ${\n (result.response.error as JsonRpcError).message\n }`,\n );\n }\n\n return await sagaPromise;\n };\n\n return promise;\n}\n\n/**\n * Get the interface ID from the result if it's available or create a new interface if the result contains static components.\n *\n * @param result - The handler result object.\n * @param snapId - The Snap ID.\n * @param controllerMessenger - The controller messenger.\n * @returns The interface ID or undefined if the result doesn't include content.\n */\nexport async function getInterfaceFromResult(\n result: unknown,\n snapId: SnapId,\n controllerMessenger: RootControllerMessenger,\n) {\n if (isPlainObject(result) && hasProperty(result, 'id')) {\n return result.id as string;\n }\n\n if (isPlainObject(result) && hasProperty(result, 'content')) {\n assert(\n is(result.content, ComponentOrElementStruct),\n 'The Snap returned an invalid interface.',\n );\n\n const id = controllerMessenger.call(\n 'SnapInterfaceController:createInterface',\n snapId,\n result.content as ComponentOrElement,\n );\n\n return id;\n }\n\n return undefined;\n}\n\n/**\n * Get the response content from the `SnapInterfaceController` and include the\n * interaction methods.\n *\n * @param result - The handler result object.\n * @param snapId - The Snap ID.\n * @param controllerMessenger - The controller messenger.\n * @param options - The simulation options.\n * @param contentId - The id of the interface if it exists outside of the result.\n * @returns The content components if any.\n */\nexport async function getInterfaceApi(\n result: unknown,\n snapId: SnapId,\n controllerMessenger: RootControllerMessenger,\n options: SimulationOptions,\n contentId?: string,\n): Promise<(() => SnapHandlerInterface) | undefined> {\n const interfaceId = await getInterfaceFromResult(\n result,\n snapId,\n controllerMessenger,\n );\n\n const id = interfaceId ?? contentId;\n\n if (id) {\n try {\n controllerMessenger.call(\n 'SnapInterfaceController:setInterfaceDisplayed',\n snapId,\n id,\n );\n } catch {\n // The call will fail for invalid interfaces, but we can just ignore that\n // here.\n }\n\n return () => {\n const { content } = controllerMessenger.call(\n 'SnapInterfaceController:getInterface',\n snapId,\n id,\n );\n\n const actions = getInterfaceActions(\n snapId,\n controllerMessenger,\n options,\n {\n id,\n content,\n },\n );\n\n return {\n content,\n ...actions,\n };\n };\n }\n\n return undefined;\n}\n"]}
1
+ {"version":3,"file":"request.cjs","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExecutionService } from '@metamask/snaps-controllers';\nimport {\n type ComponentOrElement,\n ComponentOrElementStruct,\n type JsonRpcError,\n type SnapId,\n} from '@metamask/snaps-sdk';\nimport type { HandlerType } from '@metamask/snaps-utils';\nimport { unwrapError } from '@metamask/snaps-utils';\nimport { is } from '@metamask/superstruct';\nimport {\n assert,\n getSafeJson,\n hasProperty,\n isPlainObject,\n} from '@metamask/utils';\nimport { nanoid } from '@reduxjs/toolkit';\n\nimport type { RootControllerMessenger } from './controllers';\nimport { getInterface, getInterfaceActions } from './interface';\nimport type { SimulationOptions } from './options';\nimport type { RunSagaFunction, Store } from './store';\nimport {\n getTraces,\n getErrors,\n clearNotifications,\n getNotifications,\n getEvents,\n clearTrackables,\n} from './store';\nimport { SnapResponseStruct } from './structs';\nimport type {\n RequestOptions,\n SnapHandlerInterface,\n SnapRequest,\n} from './types';\n\nexport type HandleRequestOptions = {\n snapId: SnapId;\n store: Store;\n executionService: ExecutionService;\n handler: HandlerType;\n controllerMessenger: RootControllerMessenger;\n simulationOptions: SimulationOptions;\n runSaga: RunSagaFunction;\n request: RequestOptions;\n};\n\n/**\n * Send a JSON-RPC request to the Snap, and wrap the response in a\n * {@link SnapResponse} object.\n *\n * @param options - The request options.\n * @param options.snapId - The ID of the Snap to send the request to.\n * @param options.store - The Redux store.\n * @param options.executionService - The execution service to use to send the\n * request.\n * @param options.handler - The handler to use to send the request.\n * @param options.controllerMessenger - The controller messenger used to call actions.\n * @param options.simulationOptions - The simulation options.\n * @param options.runSaga - A function to run a saga outside the usual Redux\n * flow.\n * @param options.request - The request to send.\n * @param options.request.id - The ID of the request. If not provided, a random\n * ID will be generated.\n * @param options.request.origin - The origin of the request. Defaults to\n * `https://metamask.io`.\n * @returns The response, wrapped in a {@link SnapResponse} object.\n */\nexport function handleRequest({\n snapId,\n store,\n executionService,\n handler,\n controllerMessenger,\n simulationOptions,\n runSaga,\n request: { id = nanoid(), origin = 'https://metamask.io', ...options },\n}: HandleRequestOptions): SnapRequest {\n const getInterfaceError = () => {\n throw new Error(\n 'Unable to get the interface from the Snap: The request to the Snap failed.',\n );\n };\n\n const promise = executionService\n .handleRpcRequest(snapId, {\n origin,\n handler,\n request: {\n jsonrpc: '2.0',\n id: 1,\n ...options,\n },\n })\n .then(async (result) => {\n const state = store.getState();\n const notifications = getNotifications(state);\n const errors = getErrors(state);\n const events = getEvents(state);\n const traces = getTraces(state);\n const interfaceId = notifications[0]?.content;\n\n store.dispatch(clearNotifications());\n store.dispatch(clearTrackables());\n\n try {\n const getInterfaceFn = await getInterfaceApi(\n result,\n snapId,\n controllerMessenger,\n simulationOptions,\n interfaceId,\n );\n\n return {\n id: String(id),\n response: {\n result: getSafeJson(result),\n },\n notifications,\n tracked: {\n errors,\n events,\n traces,\n },\n ...(getInterfaceFn ? { getInterface: getInterfaceFn } : {}),\n };\n } catch (error) {\n const [unwrappedError] = unwrapError(error);\n return {\n id: String(id),\n response: {\n error: unwrappedError.serialize(),\n },\n notifications: [],\n tracked: {\n errors: [],\n events: [],\n traces: [],\n },\n getInterface: getInterfaceError,\n };\n }\n })\n .catch((error) => {\n const [unwrappedError] = unwrapError(error);\n\n return {\n id: String(id),\n response: {\n error: unwrappedError.serialize(),\n },\n notifications: [],\n tracked: {\n errors: [],\n events: [],\n traces: [],\n },\n getInterface: getInterfaceError,\n };\n }) as unknown as SnapRequest;\n\n promise.getInterface = async () => {\n const sagaPromise = runSaga(\n getInterface,\n runSaga,\n snapId,\n controllerMessenger,\n simulationOptions,\n ).toPromise();\n const result = await Promise.race([promise, sagaPromise]);\n\n // If the request promise has resolved to an error, we should throw\n // instead of waiting for an interface that likely will never be displayed\n if (\n is(result, SnapResponseStruct) &&\n hasProperty(result.response, 'error')\n ) {\n throw new Error(\n `Unable to get the interface from the Snap: The returned interface may be invalid. The error message received was: ${\n (result.response.error as JsonRpcError).message\n }`,\n );\n }\n\n return await sagaPromise;\n };\n\n return promise;\n}\n\n/**\n * Get the interface ID from the result if it's available or create a new interface if the result contains static components.\n *\n * @param result - The handler result object.\n * @param snapId - The Snap ID.\n * @param controllerMessenger - The controller messenger.\n * @returns The interface ID or undefined if the result doesn't include content.\n */\nexport async function getInterfaceFromResult(\n result: unknown,\n snapId: SnapId,\n controllerMessenger: RootControllerMessenger,\n) {\n if (isPlainObject(result) && hasProperty(result, 'id')) {\n return result.id as string;\n }\n\n if (isPlainObject(result) && hasProperty(result, 'content')) {\n assert(\n is(result.content, ComponentOrElementStruct),\n 'The Snap returned an invalid interface.',\n );\n\n const id = controllerMessenger.call(\n 'SnapInterfaceController:createInterface',\n snapId,\n result.content as ComponentOrElement,\n );\n\n return id;\n }\n\n return undefined;\n}\n\n/**\n * Get the response content from the `SnapInterfaceController` and include the\n * interaction methods.\n *\n * @param result - The handler result object.\n * @param snapId - The Snap ID.\n * @param controllerMessenger - The controller messenger.\n * @param options - The simulation options.\n * @param contentId - The id of the interface if it exists outside of the result.\n * @returns The content components if any.\n */\nexport async function getInterfaceApi(\n result: unknown,\n snapId: SnapId,\n controllerMessenger: RootControllerMessenger,\n options: SimulationOptions,\n contentId?: string,\n): Promise<(() => SnapHandlerInterface) | undefined> {\n const interfaceId = await getInterfaceFromResult(\n result,\n snapId,\n controllerMessenger,\n );\n\n const id = interfaceId ?? contentId;\n\n if (id) {\n try {\n controllerMessenger.call(\n 'SnapInterfaceController:setInterfaceDisplayed',\n snapId,\n id,\n );\n } catch {\n // The call will fail for invalid interfaces, but we can just ignore that\n // here.\n }\n\n return () => {\n const { content } = controllerMessenger.call(\n 'SnapInterfaceController:getInterface',\n snapId,\n id,\n );\n\n const actions = getInterfaceActions(\n snapId,\n controllerMessenger,\n options,\n {\n id,\n content,\n },\n );\n\n return {\n content,\n ...actions,\n };\n };\n }\n\n return undefined;\n}\n"]}
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.registerActions = exports.getMultichainHooks = exports.getPermittedHooks = exports.getRestrictedHooks = exports.installSnap = void 0;
3
+ exports.installSnap = installSnap;
4
+ exports.getRestrictedHooks = getRestrictedHooks;
5
+ exports.getPermittedHooks = getPermittedHooks;
6
+ exports.getMultichainHooks = getMultichainHooks;
7
+ exports.registerActions = registerActions;
4
8
  const json_rpc_middleware_stream_1 = require("@metamask/json-rpc-middleware-stream");
5
9
  const key_tree_1 = require("@metamask/key-tree");
6
10
  const messenger_1 = require("@metamask/messenger");
@@ -137,7 +141,6 @@ async function installSnap(snapId, { executionService, executionServiceOptions,
137
141
  ...helpers,
138
142
  };
139
143
  }
140
- exports.installSnap = installSnap;
141
144
  /**
142
145
  * Get the hooks for the simulation.
143
146
  *
@@ -156,7 +159,6 @@ function getRestrictedHooks(options, store, runSaga) {
156
159
  getSimulationState: store.getState.bind(store),
157
160
  };
158
161
  }
159
- exports.getRestrictedHooks = getRestrictedHooks;
160
162
  /**
161
163
  * Get the permitted hooks for the simulation.
162
164
  *
@@ -189,7 +191,6 @@ function getPermittedHooks(snapId, controllerMessenger, runSaga) {
189
191
  },
190
192
  };
191
193
  }
192
- exports.getPermittedHooks = getPermittedHooks;
193
194
  /**
194
195
  * Get the hooks for the multichain middleware simulation.
195
196
  *
@@ -235,7 +236,6 @@ function getMultichainHooks(snapId, options, controllerMessenger) {
235
236
  },
236
237
  };
237
238
  }
238
- exports.getMultichainHooks = getMultichainHooks;
239
239
  /**
240
240
  * Get the mock mnemonic for a given source ID.
241
241
  *
@@ -277,12 +277,12 @@ function registerActions(controllerMessenger, runSaga, options, snapId, auxiliar
277
277
  // @ts-expect-error - These are partial accounts with only the necessary
278
278
  // data used by the interface controller.
279
279
  options.accounts.map((account) => (0, account_1.addSnapMetadataToAccount)(account, snapId)));
280
- controllerMessenger.registerActionHandler('MultichainAssetsController:getState', () => ({
280
+ controllerMessenger.registerActionHandler('AssetsController:getState', () => ({
281
281
  // @ts-expect-error - These are partial assets with only the
282
282
  // necessary data used by the interface controller.
283
- assetsMetadata: options.assets,
284
- accountsAssets: options.accounts.reduce((acc, account) => {
285
- acc[account.id] = account.assets ?? [];
283
+ assetsInfo: options.assets,
284
+ assetsBalance: options.accounts.reduce((acc, account) => {
285
+ acc[account.id] = Object.fromEntries((account.assets ?? []).map((asset) => [asset, {}]));
286
286
  return acc;
287
287
  }, {}),
288
288
  }));
@@ -370,5 +370,4 @@ function registerActions(controllerMessenger, runSaga, options, snapId, auxiliar
370
370
  });
371
371
  });
372
372
  }
373
- exports.registerActions = registerActions;
374
373
  //# sourceMappingURL=simulation.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"simulation.cjs","sourceRoot":"","sources":["../src/simulation.ts"],"names":[],"mappings":"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","sourcesContent":["import { createEngineStream } from '@metamask/json-rpc-middleware-stream';\nimport type { CryptographicFunctions } from '@metamask/key-tree';\nimport { mnemonicToSeed } from '@metamask/key-tree';\nimport type {\n ActionConstraint,\n EventConstraint,\n MockAnyNamespace,\n NamespacedName,\n} from '@metamask/messenger';\nimport { MOCK_ANY_NAMESPACE, Messenger } from '@metamask/messenger';\nimport {\n PermissionDoesNotExistError,\n type Caveat,\n type RequestedPermissions,\n} from '@metamask/permission-controller';\nimport type { ExecutionService } from '@metamask/snaps-controllers';\nimport {\n detectSnapLocation,\n fetchSnap,\n NodeThreadExecutionService,\n setupMultiplex,\n} from '@metamask/snaps-controllers/node';\nimport { DIALOG_APPROVAL_TYPES } from '@metamask/snaps-rpc-methods';\nimport type {\n TrackEventParams,\n SnapId,\n TraceRequest,\n EndTraceRequest,\n TraceContext,\n} from '@metamask/snaps-sdk';\nimport type { Snap, VirtualFile } from '@metamask/snaps-utils';\nimport { logError } from '@metamask/snaps-utils';\nimport { assertExhaustive, hasProperty } from '@metamask/utils';\nimport type { CaipAssetType, Hex, Json } from '@metamask/utils';\nimport type { Duplex } from 'readable-stream';\nimport { pipeline } from 'readable-stream';\nimport type { SagaIterator } from 'redux-saga';\nimport { select } from 'redux-saga/effects';\n\nimport type { RootControllerMessenger } from './controllers';\nimport { getControllers, registerSnap } from './controllers';\nimport { getSnapFile } from './files';\nimport type { SnapHelpers } from './helpers';\nimport { getHelpers } from './helpers';\nimport { resolveWithSaga } from './interface';\nimport { asyncResolve, getEndowments } from './methods';\nimport {\n getGetMnemonicImplementation,\n getGetSnapImplementation,\n getTrackEventImplementation,\n getTrackErrorImplementation,\n getEndTraceImplementation,\n getStartTraceImplementation,\n getSetCurrentChainImplementation,\n getClearSnapStateMethodImplementation,\n getGetSnapStateMethodImplementation,\n getUpdateSnapStateMethodImplementation,\n getRequestUserApprovalImplementation,\n getShowInAppNotificationImplementation,\n getShowNativeNotificationImplementation,\n} from './methods/hooks';\nimport { createJsonRpcEngine } from './middleware';\nimport type {\n SimulationAccount,\n SimulationOptions,\n SimulationUserOptions,\n} from './options';\nimport { getOptions } from './options';\nimport type {\n ApplicationState,\n Interface,\n RunSagaFunction,\n Store,\n} from './store';\nimport { createStore, getCurrentInterface } from './store';\nimport { addSnapMetadataToAccount } from './utils/account';\n\n/**\n * Options for the execution service, without the options that are shared\n * between all execution services.\n *\n * @template Service - The type of the execution service, i.e., the class that\n * creates the execution service.\n */\nexport type ExecutionServiceOptions<\n Service extends new (...args: any[]) => any,\n> = Omit<\n ConstructorParameters<Service>[0],\n keyof ConstructorParameters<typeof ExecutionService>[0]\n>;\n\n/**\n * The options for running a Snap in a simulated environment.\n *\n * @property executionService - The execution service to use.\n * @property executionServiceOptions - The options to use when creating the\n * execution service, if any. This should only include options specific to the\n * provided execution service.\n * @property options - The simulation options.\n * @template Service - The type of the execution service.\n */\nexport type InstallSnapOptions<\n Service extends new (...args: any[]) => InstanceType<typeof ExecutionService>,\n> =\n ExecutionServiceOptions<Service> extends Record<string, never>\n ? {\n executionService: Service;\n executionServiceOptions?: ExecutionServiceOptions<Service>;\n options?: SimulationUserOptions;\n }\n : {\n executionService: Service;\n executionServiceOptions: ExecutionServiceOptions<Service>;\n options?: SimulationUserOptions;\n };\n\nexport type InstalledSnap = {\n snapId: SnapId;\n store: Store;\n executionService: InstanceType<typeof ExecutionService>;\n controllerMessenger: Messenger<\n NamespacedName,\n ActionConstraint,\n EventConstraint\n >;\n runSaga: RunSagaFunction;\n};\n\nexport type RestrictedMiddlewareHooks = {\n /**\n * A hook that returns the user's secret recovery phrase.\n *\n * @returns The user's secret recovery phrase.\n */\n getMnemonic: () => Promise<Uint8Array>;\n\n /**\n * A hook that returns whether the client is locked or not.\n *\n * @returns A boolean flag signaling whether the client is locked.\n */\n getIsLocked: () => boolean;\n\n /**\n * Get the cryptographic functions to use for the client. This may return an\n * empty object to fall back to the default cryptographic functions.\n *\n * @returns The cryptographic functions to use for the client.\n */\n getClientCryptography: () => CryptographicFunctions;\n\n /**\n * A hook that returns metadata about a given Snap.\n *\n * @param snapId - The ID of a Snap.\n * @returns The metadata for the given Snap.\n */\n getSnap: (snapId: string) => Snap;\n\n /**\n * A hook that sets the current chain ID.\n *\n * @param chainId - The chain ID.\n */\n setCurrentChain: (chainId: Hex) => null;\n\n /**\n * A hook that gets the current simulation state.\n *\n * @returns The simulation state.\n */\n getSimulationState: () => ApplicationState;\n};\n\nexport type PermittedMiddlewareHooks = {\n /**\n * A hook that returns a promise that resolves once the extension is unlocked.\n *\n * @param shouldShowUnlockRequest - Whether to show the unlock request.\n * @returns A promise that resolves once the extension is unlocked.\n */\n getUnlockPromise: (shouldShowUnlockRequest: boolean) => Promise<void>;\n\n /**\n * A hook that returns whether the client is active or not.\n *\n * @returns A boolean flag signaling whether the client is opened.\n */\n getIsActive: () => boolean;\n\n /**\n * A hook that returns the client version.\n *\n * @returns A string that corresponds to the client version.\n */\n getVersion: () => string;\n\n /**\n * A hook that tracks an error.\n *\n * @param error - The error object containing error details and properties.\n */\n trackError(error: Error): void;\n\n /**\n * A hook that tracks an event.\n *\n * @param event - The event object containing event details and properties.\n */\n trackEvent(event: TrackEventParams['event']): void;\n\n /**\n * A hook that starts a performance trace.\n *\n * @param request - The trace request object containing trace details.\n */\n startTrace(request: TraceRequest): TraceContext;\n\n /**\n * A hook that ends a performance trace.\n *\n * @param request - The trace request object containing trace details.\n * @returns The trace data.\n */\n endTrace(request: EndTraceRequest): void;\n\n /**\n * A hook that returns the allowed keyring methods.\n *\n * @returns The keyring methods.\n */\n getAllowedKeyringMethods(): string[];\n\n /**\n * A hook that returns a specialized messenger for the Snap.\n *\n * @returns The messenger.\n */\n getMessenger(args: {\n actions?: string[];\n events?: string[];\n }): Messenger<string>;\n};\n\nexport type MultichainMiddlewareHooks = {\n /**\n * A hook that returns the simulated accounts.\n *\n * @returns The simulated accounts.\n */\n getAccounts: () => SimulationAccount[];\n\n /**\n * A hook that retrieves a caveat for a given permission.\n *\n * @param permission - The permission name.\n * @param caveatType - The caveat type.\n * @returns The caveat, if it exists.\n */\n getCaveat: (\n permission: string,\n caveatType: string,\n ) => Caveat<string, Json> | undefined;\n\n /**\n * A hook that grants permissions to the origin.\n *\n * @param permissions - The permissions.\n */\n grantPermissions: (permissions: RequestedPermissions) => void;\n\n /**\n * A hook that revokes a permission for the origin.\n *\n * @param permission - The permission name.\n */\n revokePermission: (permission: string) => void;\n};\n\n/**\n * Install a Snap in a simulated environment. This will fetch the Snap files,\n * create a Redux store, set up the controllers and JSON-RPC stack, register the\n * Snap, and run the Snap code in the execution service.\n *\n * @param snapId - The ID of the Snap to install.\n * @param options - The options to use when installing the Snap.\n * @param options.executionService - The execution service to use.\n * @param options.executionServiceOptions - The options to use when creating the\n * execution service, if any. This should only include options specific to the\n * provided execution service.\n * @param options.options - The simulation options.\n * @returns The installed Snap object.\n * @template Service - The type of the execution service.\n */\nexport async function installSnap<\n Service extends new (...args: any[]) => InstanceType<typeof ExecutionService>,\n>(\n snapId: SnapId,\n {\n executionService,\n executionServiceOptions,\n options: rawOptions = {},\n }: Partial<InstallSnapOptions<Service>> = {},\n): Promise<InstalledSnap & SnapHelpers> {\n const options = getOptions(rawOptions);\n\n // Fetch Snap files.\n const location = detectSnapLocation(snapId, {\n allowLocal: true,\n });\n\n const snapFiles = await fetchSnap(snapId, location);\n\n // Create Redux store.\n const { store, runSaga } = createStore(options);\n\n const controllerMessenger = new Messenger<MockAnyNamespace, any, any>({\n namespace: MOCK_ANY_NAMESPACE,\n });\n\n registerActions(\n controllerMessenger,\n runSaga,\n options,\n snapId,\n snapFiles.auxiliaryFiles,\n );\n\n // Set up controllers and JSON-RPC stack.\n const restrictedHooks = getRestrictedHooks(options, store, runSaga);\n\n const permittedHooks = getPermittedHooks(\n snapId,\n controllerMessenger,\n runSaga,\n );\n\n const multichainHooks = getMultichainHooks(\n snapId,\n options,\n controllerMessenger,\n );\n\n const { subjectMetadataController, permissionController } = getControllers({\n controllerMessenger,\n hooks: restrictedHooks,\n runSaga,\n options,\n });\n\n const engine = createJsonRpcEngine({\n snapId,\n messenger: controllerMessenger,\n store,\n restrictedHooks,\n permittedHooks,\n multichainHooks,\n isMultichain: false,\n });\n\n const multichainEngine = createJsonRpcEngine({\n snapId,\n messenger: controllerMessenger,\n store,\n restrictedHooks,\n permittedHooks,\n multichainHooks,\n isMultichain: true,\n });\n\n // Create execution service.\n const ActualService = executionService ?? NodeThreadExecutionService;\n const service = new ActualService({\n ...executionServiceOptions,\n messenger: new Messenger({\n namespace: 'ExecutionService',\n parent: controllerMessenger,\n }),\n setupSnapProvider: (_snapId: string, rpcStream: Duplex) => {\n const mux = setupMultiplex(rpcStream, 'snapStream');\n const stream = mux.createStream('metamask-provider');\n const providerStream = createEngineStream({ engine });\n\n // Error function is difficult to test, so we ignore it.\n /* istanbul ignore next 2 */\n pipeline(stream, providerStream, stream, (error) => {\n if (error && !error.message?.match('Premature close')) {\n logError(`Provider stream failure.`, error);\n }\n });\n\n const multichainStream = mux.createStream('metamask-multichain-provider');\n const multichainProviderStream = createEngineStream({\n engine: multichainEngine,\n });\n\n /* istanbul ignore next 2 */\n pipeline(\n multichainStream,\n multichainProviderStream,\n multichainStream,\n (error) => {\n if (error && !error.message?.match('Premature close')) {\n logError(`Provider stream failure.`, error);\n }\n },\n );\n },\n });\n\n // Register the Snap. This sets up the Snap's permissions and subject\n // metadata.\n await registerSnap(snapId, snapFiles.manifest.result, {\n permissionController,\n subjectMetadataController,\n });\n\n // Run the Snap code in the execution service.\n await service.executeSnap({\n snapId,\n sourceCode: snapFiles.sourceCode.toString('utf8'),\n endowments: await getEndowments(permissionController, snapId),\n });\n\n const helpers = getHelpers({\n snapId,\n store,\n controllerMessenger,\n runSaga,\n executionService: service,\n options,\n });\n\n return {\n snapId,\n store,\n executionService: service,\n controllerMessenger,\n runSaga,\n ...helpers,\n };\n}\n\n/**\n * Get the hooks for the simulation.\n *\n * @param options - The simulation options.\n * @param store - The Redux store.\n * @param runSaga - The run saga function.\n * @returns The hooks for the simulation.\n */\nexport function getRestrictedHooks(\n options: SimulationOptions,\n store: Store,\n runSaga: RunSagaFunction,\n): RestrictedMiddlewareHooks {\n return {\n getMnemonic: getGetMnemonicImplementation(options.secretRecoveryPhrase),\n getIsLocked: () => false,\n getClientCryptography: () => ({}),\n getSnap: getGetSnapImplementation(true),\n setCurrentChain: getSetCurrentChainImplementation(runSaga),\n getSimulationState: store.getState.bind(store),\n };\n}\n\n/**\n * Get the permitted hooks for the simulation.\n *\n * @param snapId - The Snap ID.\n * @param controllerMessenger - The controller messenger.\n * @param runSaga - The run saga function.\n * @returns The permitted hooks for the simulation.\n */\nexport function getPermittedHooks(\n snapId: string,\n controllerMessenger: RootControllerMessenger,\n runSaga: RunSagaFunction,\n): PermittedMiddlewareHooks {\n return {\n getUnlockPromise: asyncResolve(),\n getIsActive: () => true,\n getVersion: () => '13.6.0-flask.0',\n\n getAllowedKeyringMethods: () => [],\n\n trackError: getTrackErrorImplementation(runSaga),\n trackEvent: getTrackEventImplementation(runSaga),\n startTrace: getStartTraceImplementation(runSaga),\n endTrace: getEndTraceImplementation(runSaga),\n\n getMessenger: ({ actions, events }) => {\n const messenger = new Messenger({\n namespace: `${snapId}-messenger`,\n parent: controllerMessenger,\n });\n\n controllerMessenger.delegate({\n actions: actions as never[],\n events: events as never[],\n messenger,\n });\n\n return messenger;\n },\n };\n}\n\n/**\n * Get the hooks for the multichain middleware simulation.\n *\n * @param snapId - The Snap ID.\n * @param options - The simulation options.\n * @param controllerMessenger - The controller messenger.\n * @returns The hooks for the middleware.\n */\nexport function getMultichainHooks(\n snapId: SnapId,\n options: SimulationOptions,\n controllerMessenger: RootControllerMessenger,\n): MultichainMiddlewareHooks {\n return {\n getAccounts: () => options.accounts,\n getCaveat: (permission: string, caveatType: string) => {\n try {\n return controllerMessenger.call(\n 'PermissionController:getCaveat',\n snapId,\n permission,\n caveatType,\n );\n } catch (error) {\n if (error instanceof PermissionDoesNotExistError) {\n return undefined;\n }\n /* istanbul ignore next */\n throw error;\n }\n },\n grantPermissions: (approvedPermissions: RequestedPermissions) => {\n controllerMessenger.call('PermissionController:grantPermissions', {\n subject: { origin: snapId },\n approvedPermissions,\n });\n },\n revokePermission: (permission: string) => {\n try {\n controllerMessenger.call('PermissionController:revokePermissions', {\n [snapId]: [permission],\n });\n } catch (error) {\n if (error instanceof PermissionDoesNotExistError) {\n return;\n }\n /* istanbul ignore next */\n throw error;\n }\n },\n };\n}\n\n/**\n * Get the mock mnemonic for a given source ID.\n *\n * @param options - The simulation options.\n * @returns The mnemonic.\n */\n/**\n * Register mocked action handlers.\n *\n * @param controllerMessenger - The controller messenger.\n * @param runSaga - The run saga function.\n * @param options - The simulation options.\n * @param snapId - The ID of the Snap.\n * @param auxiliaryFiles - Auxiliary files from the fetched Snap.\n */\nexport function registerActions(\n controllerMessenger: RootControllerMessenger,\n runSaga: RunSagaFunction,\n options: SimulationOptions,\n snapId: SnapId,\n auxiliaryFiles: VirtualFile[],\n) {\n controllerMessenger.registerActionHandler(\n 'PhishingController:testOrigin',\n () => ({ result: false, type: 'all' }),\n );\n\n controllerMessenger.registerActionHandler(\n 'AccountsController:getAccountByAddress',\n // @ts-expect-error - This is a partial account with only the necessary\n // data used by the interface controller.\n (address) => {\n const matchingAccount = options.accounts.find(\n (account) => address === account.address,\n );\n\n if (!matchingAccount) {\n return undefined;\n }\n\n return addSnapMetadataToAccount(matchingAccount, snapId);\n },\n );\n\n controllerMessenger.registerActionHandler(\n 'AccountsController:getSelectedMultichainAccount',\n // @ts-expect-error - This is a partial account with only the necessary\n // data used by the interface controller.\n () => {\n const selectedAccount = options.accounts.find(\n (account) => account.selected,\n );\n\n if (!selectedAccount) {\n return undefined;\n }\n\n return addSnapMetadataToAccount(selectedAccount, snapId);\n },\n );\n\n controllerMessenger.registerActionHandler(\n 'AccountsController:listMultichainAccounts',\n\n () =>\n // @ts-expect-error - These are partial accounts with only the necessary\n // data used by the interface controller.\n options.accounts.map((account) =>\n addSnapMetadataToAccount(account, snapId),\n ),\n );\n\n controllerMessenger.registerActionHandler(\n 'MultichainAssetsController:getState',\n () => ({\n // @ts-expect-error - These are partial assets with only the\n // necessary data used by the interface controller.\n assetsMetadata: options.assets,\n accountsAssets: options.accounts.reduce<Record<string, CaipAssetType[]>>(\n (acc, account) => {\n acc[account.id] = account.assets ?? [];\n return acc;\n },\n {},\n ),\n }),\n );\n\n controllerMessenger.registerActionHandler(\n 'ApprovalController:hasRequest',\n (opts) => {\n /**\n * Get the current interface from the store.\n *\n * @yields Selects the current interface from the store.\n * @returns The current interface.\n */\n function* getCurrentInterfaceSaga(): SagaIterator {\n const currentInterface: Interface = yield select(getCurrentInterface);\n return currentInterface;\n }\n\n const currentInterface: Interface | undefined = runSaga(\n getCurrentInterfaceSaga,\n ).result();\n return (\n currentInterface?.type === DIALOG_APPROVAL_TYPES.default &&\n currentInterface?.id === opts?.id\n );\n },\n );\n\n controllerMessenger.registerActionHandler(\n 'ApprovalController:acceptRequest',\n async (_id: string, value: unknown) => {\n await runSaga(resolveWithSaga, value).toPromise();\n\n return { value };\n },\n );\n\n controllerMessenger.registerActionHandler(\n 'ApprovalController:addRequest',\n // @ts-expect-error Types of property 'requestData' are incompatible.\n getRequestUserApprovalImplementation(runSaga),\n );\n\n controllerMessenger.registerActionHandler(\n 'SnapController:getSnap',\n getGetSnapImplementation(true),\n );\n\n controllerMessenger.registerActionHandler(\n 'SnapController:getSnapState',\n getGetSnapStateMethodImplementation(runSaga),\n );\n\n controllerMessenger.registerActionHandler(\n 'SnapController:updateSnapState',\n getUpdateSnapStateMethodImplementation(runSaga),\n );\n\n controllerMessenger.registerActionHandler(\n 'SnapController:clearSnapState',\n getClearSnapStateMethodImplementation(runSaga),\n );\n\n controllerMessenger.registerActionHandler(\n 'SnapController:getSnapFile',\n async (_snapId, path, encoding) =>\n getSnapFile(auxiliaryFiles, path, encoding),\n );\n\n const showNativeNotification =\n getShowNativeNotificationImplementation(runSaga);\n const showInAppNotification = getShowInAppNotificationImplementation(runSaga);\n\n controllerMessenger.registerActionHandler(\n // @ts-expect-error - `RateLimitController` is not part of the simulation messenger types.\n 'RateLimitController:call',\n async (\n _origin: string,\n type: 'showNativeNotification' | 'showInAppNotification',\n ...args: unknown[]\n ) => {\n switch (type) {\n case 'showNativeNotification':\n return await showNativeNotification(args[0] as string, {\n type: 'native',\n message: args[1] as string,\n });\n case 'showInAppNotification':\n return await showInAppNotification(\n args[0] as string,\n args[1] as Parameters<typeof showInAppNotification>[1],\n );\n /* istanbul ignore next */\n default:\n return assertExhaustive(type);\n }\n },\n );\n\n const getMnemonic = getGetMnemonicImplementation(\n options.secretRecoveryPhrase,\n );\n\n controllerMessenger.registerActionHandler(\n // @ts-expect-error - `KeyringController` is not part of the simulation messenger types.\n 'KeyringController:getState',\n () => ({\n isUnlocked: true,\n keyrings: [\n {\n type: 'HD Key Tree',\n metadata: {\n id: 'default',\n name: 'Default Secret Recovery Phrase',\n },\n },\n {\n type: 'HD Key Tree',\n metadata: {\n id: 'alternative',\n name: 'Alternative Secret Recovery Phrase',\n },\n },\n ],\n }),\n );\n\n controllerMessenger.registerActionHandler(\n // @ts-expect-error - `KeyringController` is not part of the simulation messenger types.\n 'KeyringController:withKeyringV2Unsafe',\n async (\n selector: { type: string; index?: number } | { id: string },\n operation: (args: {\n keyring: { type: string; mnemonic: Uint8Array; seed: Uint8Array };\n }) => Promise<unknown>,\n ) => {\n const source = hasProperty(selector, 'id')\n ? (selector.id as string)\n : undefined;\n\n const mnemonic = await getMnemonic(source);\n const seed = await mnemonicToSeed(mnemonic);\n\n return await operation({\n keyring: {\n type: 'hd',\n mnemonic,\n seed,\n },\n });\n },\n );\n}\n"]}
1
+ {"version":3,"file":"simulation.cjs","sourceRoot":"","sources":["../src/simulation.ts"],"names":[],"mappings":";;AAsSA,kCAmJC;AAUD,gDAaC;AAUD,8CAgCC;AAUD,gDA2CC;AAiBD,0CA8NC;AA9xBD,qFAA0E;AAE1E,iDAAoD;AAOpD,mDAAoE;AACpE,2EAIyC;AAEzC,2DAK0C;AAC1C,mEAAoE;AASpE,uDAAiD;AACjD,2CAAgE;AAGhE,qDAA2C;AAE3C,gDAA4C;AAG5C,mDAA6D;AAC7D,uCAAsC;AAEtC,2CAAuC;AACvC,+CAA8C;AAC9C,iDAAwD;AACxD,qDAcyB;AACzB,uDAAmD;AAMnD,2CAAuC;AAOvC,6CAA2D;AAC3D,iDAA2D;AA4M3D;;;;;;;;;;;;;;GAcG;AACI,KAAK,UAAU,WAAW,CAG/B,MAAc,EACd,EACE,gBAAgB,EAChB,uBAAuB,EACvB,OAAO,EAAE,UAAU,GAAG,EAAE,MACgB,EAAE;IAE5C,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC,UAAU,CAAC,CAAC;IAEvC,oBAAoB;IACpB,MAAM,QAAQ,GAAG,IAAA,yBAAkB,EAAC,MAAM,EAAE;QAC1C,UAAU,EAAE,IAAI;KACjB,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,MAAM,IAAA,gBAAS,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAEpD,sBAAsB;IACtB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAA,mBAAW,EAAC,OAAO,CAAC,CAAC;IAEhD,MAAM,mBAAmB,GAAG,IAAI,qBAAS,CAA6B;QACpE,SAAS,EAAE,8BAAkB;KAC9B,CAAC,CAAC;IAEH,eAAe,CACb,mBAAmB,EACnB,OAAO,EACP,OAAO,EACP,MAAM,EACN,SAAS,CAAC,cAAc,CACzB,CAAC;IAEF,yCAAyC;IACzC,MAAM,eAAe,GAAG,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAEpE,MAAM,cAAc,GAAG,iBAAiB,CACtC,MAAM,EACN,mBAAmB,EACnB,OAAO,CACR,CAAC;IAEF,MAAM,eAAe,GAAG,kBAAkB,CACxC,MAAM,EACN,OAAO,EACP,mBAAmB,CACpB,CAAC;IAEF,MAAM,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,GAAG,IAAA,4BAAc,EAAC;QACzE,mBAAmB;QACnB,KAAK,EAAE,eAAe;QACtB,OAAO;QACP,OAAO;KACR,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAA,gCAAmB,EAAC;QACjC,MAAM;QACN,SAAS,EAAE,mBAAmB;QAC9B,KAAK;QACL,eAAe;QACf,cAAc;QACd,eAAe;QACf,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,IAAA,gCAAmB,EAAC;QAC3C,MAAM;QACN,SAAS,EAAE,mBAAmB;QAC9B,KAAK;QACL,eAAe;QACf,cAAc;QACd,eAAe;QACf,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;IAEH,4BAA4B;IAC5B,MAAM,aAAa,GAAG,gBAAgB,IAAI,iCAA0B,CAAC;IACrE,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC;QAChC,GAAG,uBAAuB;QAC1B,SAAS,EAAE,IAAI,qBAAS,CAAC;YACvB,SAAS,EAAE,kBAAkB;YAC7B,MAAM,EAAE,mBAAmB;SAC5B,CAAC;QACF,iBAAiB,EAAE,CAAC,OAAe,EAAE,SAAiB,EAAE,EAAE;YACxD,MAAM,GAAG,GAAG,IAAA,qBAAc,EAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YACpD,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;YACrD,MAAM,cAAc,GAAG,IAAA,+CAAkB,EAAC,EAAE,MAAM,EAAE,CAAC,CAAC;YAEtD,wDAAwD;YACxD,4BAA4B;YAC5B,IAAA,0BAAQ,EAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjD,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC;oBACtD,IAAA,sBAAQ,EAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,gBAAgB,GAAG,GAAG,CAAC,YAAY,CAAC,8BAA8B,CAAC,CAAC;YAC1E,MAAM,wBAAwB,GAAG,IAAA,+CAAkB,EAAC;gBAClD,MAAM,EAAE,gBAAgB;aACzB,CAAC,CAAC;YAEH,4BAA4B;YAC5B,IAAA,0BAAQ,EACN,gBAAgB,EAChB,wBAAwB,EACxB,gBAAgB,EAChB,CAAC,KAAK,EAAE,EAAE;gBACR,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC;oBACtD,IAAA,sBAAQ,EAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC,CACF,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,qEAAqE;IACrE,YAAY;IACZ,MAAM,IAAA,0BAAY,EAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE;QACpD,oBAAoB;QACpB,yBAAyB;KAC1B,CAAC,CAAC;IAEH,8CAA8C;IAC9C,MAAM,OAAO,CAAC,WAAW,CAAC;QACxB,MAAM;QACN,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;QACjD,UAAU,EAAE,MAAM,IAAA,uBAAa,EAAC,oBAAoB,EAAE,MAAM,CAAC;KAC9D,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAA,oBAAU,EAAC;QACzB,MAAM;QACN,KAAK;QACL,mBAAmB;QACnB,OAAO;QACP,gBAAgB,EAAE,OAAO;QACzB,OAAO;KACR,CAAC,CAAC;IAEH,OAAO;QACL,MAAM;QACN,KAAK;QACL,gBAAgB,EAAE,OAAO;QACzB,mBAAmB;QACnB,OAAO;QACP,GAAG,OAAO;KACX,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,kBAAkB,CAChC,OAA0B,EAC1B,KAAY,EACZ,OAAwB;IAExB,OAAO;QACL,WAAW,EAAE,IAAA,oCAA4B,EAAC,OAAO,CAAC,oBAAoB,CAAC;QACvE,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK;QACxB,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,IAAA,gCAAwB,EAAC,IAAI,CAAC;QACvC,eAAe,EAAE,IAAA,wCAAgC,EAAC,OAAO,CAAC;QAC1D,kBAAkB,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;KAC/C,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,iBAAiB,CAC/B,MAAc,EACd,mBAA4C,EAC5C,OAAwB;IAExB,OAAO;QACL,gBAAgB,EAAE,IAAA,sBAAY,GAAE;QAChC,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI;QACvB,UAAU,EAAE,GAAG,EAAE,CAAC,gBAAgB;QAElC,wBAAwB,EAAE,GAAG,EAAE,CAAC,EAAE;QAElC,UAAU,EAAE,IAAA,mCAA2B,EAAC,OAAO,CAAC;QAChD,UAAU,EAAE,IAAA,mCAA2B,EAAC,OAAO,CAAC;QAChD,UAAU,EAAE,IAAA,mCAA2B,EAAC,OAAO,CAAC;QAChD,QAAQ,EAAE,IAAA,iCAAyB,EAAC,OAAO,CAAC;QAE5C,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;YACpC,MAAM,SAAS,GAAG,IAAI,qBAAS,CAAC;gBAC9B,SAAS,EAAE,GAAG,MAAM,YAAY;gBAChC,MAAM,EAAE,mBAAmB;aAC5B,CAAC,CAAC;YAEH,mBAAmB,CAAC,QAAQ,CAAC;gBAC3B,OAAO,EAAE,OAAkB;gBAC3B,MAAM,EAAE,MAAiB;gBACzB,SAAS;aACV,CAAC,CAAC;YAEH,OAAO,SAAS,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,kBAAkB,CAChC,MAAc,EACd,OAA0B,EAC1B,mBAA4C;IAE5C,OAAO;QACL,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ;QACnC,SAAS,EAAE,CAAC,UAAkB,EAAE,UAAkB,EAAE,EAAE;YACpD,IAAI,CAAC;gBACH,OAAO,mBAAmB,CAAC,IAAI,CAC7B,gCAAgC,EAChC,MAAM,EACN,UAAU,EACV,UAAU,CACX,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,mDAA2B,EAAE,CAAC;oBACjD,OAAO,SAAS,CAAC;gBACnB,CAAC;gBACD,0BAA0B;gBAC1B,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QACD,gBAAgB,EAAE,CAAC,mBAAyC,EAAE,EAAE;YAC9D,mBAAmB,CAAC,IAAI,CAAC,uCAAuC,EAAE;gBAChE,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;gBAC3B,mBAAmB;aACpB,CAAC,CAAC;QACL,CAAC;QACD,gBAAgB,EAAE,CAAC,UAAkB,EAAE,EAAE;YACvC,IAAI,CAAC;gBACH,mBAAmB,CAAC,IAAI,CAAC,wCAAwC,EAAE;oBACjE,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC;iBACvB,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,mDAA2B,EAAE,CAAC;oBACjD,OAAO;gBACT,CAAC;gBACD,0BAA0B;gBAC1B,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH;;;;;;;;GAQG;AACH,SAAgB,eAAe,CAC7B,mBAA4C,EAC5C,OAAwB,EACxB,OAA0B,EAC1B,MAAc,EACd,cAA6B;IAE7B,mBAAmB,CAAC,qBAAqB,CACvC,+BAA+B,EAC/B,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CACvC,CAAC;IAEF,mBAAmB,CAAC,qBAAqB,CACvC,wCAAwC;IACxC,uEAAuE;IACvE,yCAAyC;IACzC,CAAC,OAAO,EAAE,EAAE;QACV,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAC3C,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CACzC,CAAC;QAEF,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,IAAA,kCAAwB,EAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC,CACF,CAAC;IAEF,mBAAmB,CAAC,qBAAqB,CACvC,iDAAiD;IACjD,uEAAuE;IACvE,yCAAyC;IACzC,GAAG,EAAE;QACH,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAC3C,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAC9B,CAAC;QAEF,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,IAAA,kCAAwB,EAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC,CACF,CAAC;IAEF,mBAAmB,CAAC,qBAAqB,CACvC,2CAA2C,EAE3C,GAAG,EAAE;IACH,wEAAwE;IACxE,yCAAyC;IACzC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAC/B,IAAA,kCAAwB,EAAC,OAAO,EAAE,MAAM,CAAC,CAC1C,CACJ,CAAC;IAEF,mBAAmB,CAAC,qBAAqB,CACvC,2BAA2B,EAC3B,GAAG,EAAE,CAAC,CAAC;QACL,4DAA4D;QAC5D,mDAAmD;QACnD,UAAU,EAAE,OAAO,CAAC,MAAM;QAC1B,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAEpC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;YACjB,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,WAAW,CAClC,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CACnD,CAAC;YACF,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAE,CAAC;KACP,CAAC,CACH,CAAC;IAEF,mBAAmB,CAAC,qBAAqB,CACvC,+BAA+B,EAC/B,CAAC,IAAI,EAAE,EAAE;QACP;;;;;WAKG;QACH,QAAQ,CAAC,CAAC,uBAAuB;YAC/B,MAAM,gBAAgB,GAAc,MAAM,IAAA,gBAAM,EAAC,2BAAmB,CAAC,CAAC;YACtE,OAAO,gBAAgB,CAAC;QAC1B,CAAC;QAED,MAAM,gBAAgB,GAA0B,OAAO,CACrD,uBAAuB,CACxB,CAAC,MAAM,EAAE,CAAC;QACX,OAAO,CACL,gBAAgB,EAAE,IAAI,KAAK,yCAAqB,CAAC,OAAO;YACxD,gBAAgB,EAAE,EAAE,KAAK,IAAI,EAAE,EAAE,CAClC,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,mBAAmB,CAAC,qBAAqB,CACvC,kCAAkC,EAClC,KAAK,EAAE,GAAW,EAAE,KAAc,EAAE,EAAE;QACpC,MAAM,OAAO,CAAC,2BAAe,EAAE,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC;QAElD,OAAO,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC,CACF,CAAC;IAEF,mBAAmB,CAAC,qBAAqB,CACvC,+BAA+B;IAC/B,qEAAqE;IACrE,IAAA,4CAAoC,EAAC,OAAO,CAAC,CAC9C,CAAC;IAEF,mBAAmB,CAAC,qBAAqB,CACvC,wBAAwB,EACxB,IAAA,gCAAwB,EAAC,IAAI,CAAC,CAC/B,CAAC;IAEF,mBAAmB,CAAC,qBAAqB,CACvC,6BAA6B,EAC7B,IAAA,2CAAmC,EAAC,OAAO,CAAC,CAC7C,CAAC;IAEF,mBAAmB,CAAC,qBAAqB,CACvC,gCAAgC,EAChC,IAAA,8CAAsC,EAAC,OAAO,CAAC,CAChD,CAAC;IAEF,mBAAmB,CAAC,qBAAqB,CACvC,+BAA+B,EAC/B,IAAA,6CAAqC,EAAC,OAAO,CAAC,CAC/C,CAAC;IAEF,mBAAmB,CAAC,qBAAqB,CACvC,4BAA4B,EAC5B,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAChC,IAAA,mBAAW,EAAC,cAAc,EAAE,IAAI,EAAE,QAAQ,CAAC,CAC9C,CAAC;IAEF,MAAM,sBAAsB,GAC1B,IAAA,+CAAuC,EAAC,OAAO,CAAC,CAAC;IACnD,MAAM,qBAAqB,GAAG,IAAA,8CAAsC,EAAC,OAAO,CAAC,CAAC;IAE9E,mBAAmB,CAAC,qBAAqB;IACvC,0FAA0F;IAC1F,0BAA0B,EAC1B,KAAK,EACH,OAAe,EACf,IAAwD,EACxD,GAAG,IAAe,EAClB,EAAE;QACF,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,wBAAwB;gBAC3B,OAAO,MAAM,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAW,EAAE;oBACrD,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,IAAI,CAAC,CAAC,CAAW;iBAC3B,CAAC,CAAC;YACL,KAAK,uBAAuB;gBAC1B,OAAO,MAAM,qBAAqB,CAChC,IAAI,CAAC,CAAC,CAAW,EACjB,IAAI,CAAC,CAAC,CAAgD,CACvD,CAAC;YACJ,0BAA0B;YAC1B;gBACE,OAAO,IAAA,wBAAgB,EAAC,IAAI,CAAC,CAAC;QAClC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,WAAW,GAAG,IAAA,oCAA4B,EAC9C,OAAO,CAAC,oBAAoB,CAC7B,CAAC;IAEF,mBAAmB,CAAC,qBAAqB;IACvC,wFAAwF;IACxF,4BAA4B,EAC5B,GAAG,EAAE,CAAC,CAAC;QACL,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,aAAa;gBACnB,QAAQ,EAAE;oBACR,EAAE,EAAE,SAAS;oBACb,IAAI,EAAE,gCAAgC;iBACvC;aACF;YACD;gBACE,IAAI,EAAE,aAAa;gBACnB,QAAQ,EAAE;oBACR,EAAE,EAAE,aAAa;oBACjB,IAAI,EAAE,oCAAoC;iBAC3C;aACF;SACF;KACF,CAAC,CACH,CAAC;IAEF,mBAAmB,CAAC,qBAAqB;IACvC,wFAAwF;IACxF,uCAAuC,EACvC,KAAK,EACH,QAA2D,EAC3D,SAEsB,EACtB,EAAE;QACF,MAAM,MAAM,GAAG,IAAA,mBAAW,EAAC,QAAQ,EAAE,IAAI,CAAC;YACxC,CAAC,CAAE,QAAQ,CAAC,EAAa;YACzB,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM,IAAA,yBAAc,EAAC,QAAQ,CAAC,CAAC;QAE5C,OAAO,MAAM,SAAS,CAAC;YACrB,OAAO,EAAE;gBACP,IAAI,EAAE,IAAI;gBACV,QAAQ;gBACR,IAAI;aACL;SACF,CAAC,CAAC;IACL,CAAC,CACF,CAAC;AACJ,CAAC","sourcesContent":["import { createEngineStream } from '@metamask/json-rpc-middleware-stream';\nimport type { CryptographicFunctions } from '@metamask/key-tree';\nimport { mnemonicToSeed } from '@metamask/key-tree';\nimport type {\n ActionConstraint,\n EventConstraint,\n MockAnyNamespace,\n NamespacedName,\n} from '@metamask/messenger';\nimport { MOCK_ANY_NAMESPACE, Messenger } from '@metamask/messenger';\nimport {\n PermissionDoesNotExistError,\n type Caveat,\n type RequestedPermissions,\n} from '@metamask/permission-controller';\nimport type { ExecutionService } from '@metamask/snaps-controllers';\nimport {\n detectSnapLocation,\n fetchSnap,\n NodeThreadExecutionService,\n setupMultiplex,\n} from '@metamask/snaps-controllers/node';\nimport { DIALOG_APPROVAL_TYPES } from '@metamask/snaps-rpc-methods';\nimport type {\n TrackEventParams,\n SnapId,\n TraceRequest,\n EndTraceRequest,\n TraceContext,\n} from '@metamask/snaps-sdk';\nimport type { Snap, VirtualFile } from '@metamask/snaps-utils';\nimport { logError } from '@metamask/snaps-utils';\nimport { assertExhaustive, hasProperty } from '@metamask/utils';\nimport type { CaipAssetType, Hex, Json } from '@metamask/utils';\nimport type { Duplex } from 'readable-stream';\nimport { pipeline } from 'readable-stream';\nimport type { SagaIterator } from 'redux-saga';\nimport { select } from 'redux-saga/effects';\n\nimport type { RootControllerMessenger } from './controllers';\nimport { getControllers, registerSnap } from './controllers';\nimport { getSnapFile } from './files';\nimport type { SnapHelpers } from './helpers';\nimport { getHelpers } from './helpers';\nimport { resolveWithSaga } from './interface';\nimport { asyncResolve, getEndowments } from './methods';\nimport {\n getGetMnemonicImplementation,\n getGetSnapImplementation,\n getTrackEventImplementation,\n getTrackErrorImplementation,\n getEndTraceImplementation,\n getStartTraceImplementation,\n getSetCurrentChainImplementation,\n getClearSnapStateMethodImplementation,\n getGetSnapStateMethodImplementation,\n getUpdateSnapStateMethodImplementation,\n getRequestUserApprovalImplementation,\n getShowInAppNotificationImplementation,\n getShowNativeNotificationImplementation,\n} from './methods/hooks';\nimport { createJsonRpcEngine } from './middleware';\nimport type {\n SimulationAccount,\n SimulationOptions,\n SimulationUserOptions,\n} from './options';\nimport { getOptions } from './options';\nimport type {\n ApplicationState,\n Interface,\n RunSagaFunction,\n Store,\n} from './store';\nimport { createStore, getCurrentInterface } from './store';\nimport { addSnapMetadataToAccount } from './utils/account';\n\n/**\n * Options for the execution service, without the options that are shared\n * between all execution services.\n *\n * @template Service - The type of the execution service, i.e., the class that\n * creates the execution service.\n */\nexport type ExecutionServiceOptions<\n Service extends new (...args: any[]) => any,\n> = Omit<\n ConstructorParameters<Service>[0],\n keyof ConstructorParameters<typeof ExecutionService>[0]\n>;\n\n/**\n * The options for running a Snap in a simulated environment.\n *\n * @property executionService - The execution service to use.\n * @property executionServiceOptions - The options to use when creating the\n * execution service, if any. This should only include options specific to the\n * provided execution service.\n * @property options - The simulation options.\n * @template Service - The type of the execution service.\n */\nexport type InstallSnapOptions<\n Service extends new (...args: any[]) => InstanceType<typeof ExecutionService>,\n> =\n ExecutionServiceOptions<Service> extends Record<string, never>\n ? {\n executionService: Service;\n executionServiceOptions?: ExecutionServiceOptions<Service>;\n options?: SimulationUserOptions;\n }\n : {\n executionService: Service;\n executionServiceOptions: ExecutionServiceOptions<Service>;\n options?: SimulationUserOptions;\n };\n\nexport type InstalledSnap = {\n snapId: SnapId;\n store: Store;\n executionService: InstanceType<typeof ExecutionService>;\n controllerMessenger: Messenger<\n NamespacedName,\n ActionConstraint,\n EventConstraint\n >;\n runSaga: RunSagaFunction;\n};\n\nexport type RestrictedMiddlewareHooks = {\n /**\n * A hook that returns the user's secret recovery phrase.\n *\n * @returns The user's secret recovery phrase.\n */\n getMnemonic: () => Promise<Uint8Array>;\n\n /**\n * A hook that returns whether the client is locked or not.\n *\n * @returns A boolean flag signaling whether the client is locked.\n */\n getIsLocked: () => boolean;\n\n /**\n * Get the cryptographic functions to use for the client. This may return an\n * empty object to fall back to the default cryptographic functions.\n *\n * @returns The cryptographic functions to use for the client.\n */\n getClientCryptography: () => CryptographicFunctions;\n\n /**\n * A hook that returns metadata about a given Snap.\n *\n * @param snapId - The ID of a Snap.\n * @returns The metadata for the given Snap.\n */\n getSnap: (snapId: string) => Snap;\n\n /**\n * A hook that sets the current chain ID.\n *\n * @param chainId - The chain ID.\n */\n setCurrentChain: (chainId: Hex) => null;\n\n /**\n * A hook that gets the current simulation state.\n *\n * @returns The simulation state.\n */\n getSimulationState: () => ApplicationState;\n};\n\nexport type PermittedMiddlewareHooks = {\n /**\n * A hook that returns a promise that resolves once the extension is unlocked.\n *\n * @param shouldShowUnlockRequest - Whether to show the unlock request.\n * @returns A promise that resolves once the extension is unlocked.\n */\n getUnlockPromise: (shouldShowUnlockRequest: boolean) => Promise<void>;\n\n /**\n * A hook that returns whether the client is active or not.\n *\n * @returns A boolean flag signaling whether the client is opened.\n */\n getIsActive: () => boolean;\n\n /**\n * A hook that returns the client version.\n *\n * @returns A string that corresponds to the client version.\n */\n getVersion: () => string;\n\n /**\n * A hook that tracks an error.\n *\n * @param error - The error object containing error details and properties.\n */\n trackError(error: Error): void;\n\n /**\n * A hook that tracks an event.\n *\n * @param event - The event object containing event details and properties.\n */\n trackEvent(event: TrackEventParams['event']): void;\n\n /**\n * A hook that starts a performance trace.\n *\n * @param request - The trace request object containing trace details.\n */\n startTrace(request: TraceRequest): TraceContext;\n\n /**\n * A hook that ends a performance trace.\n *\n * @param request - The trace request object containing trace details.\n * @returns The trace data.\n */\n endTrace(request: EndTraceRequest): void;\n\n /**\n * A hook that returns the allowed keyring methods.\n *\n * @returns The keyring methods.\n */\n getAllowedKeyringMethods(): string[];\n\n /**\n * A hook that returns a specialized messenger for the Snap.\n *\n * @returns The messenger.\n */\n getMessenger(args: {\n actions?: string[];\n events?: string[];\n }): Messenger<string>;\n};\n\nexport type MultichainMiddlewareHooks = {\n /**\n * A hook that returns the simulated accounts.\n *\n * @returns The simulated accounts.\n */\n getAccounts: () => SimulationAccount[];\n\n /**\n * A hook that retrieves a caveat for a given permission.\n *\n * @param permission - The permission name.\n * @param caveatType - The caveat type.\n * @returns The caveat, if it exists.\n */\n getCaveat: (\n permission: string,\n caveatType: string,\n ) => Caveat<string, Json> | undefined;\n\n /**\n * A hook that grants permissions to the origin.\n *\n * @param permissions - The permissions.\n */\n grantPermissions: (permissions: RequestedPermissions) => void;\n\n /**\n * A hook that revokes a permission for the origin.\n *\n * @param permission - The permission name.\n */\n revokePermission: (permission: string) => void;\n};\n\n/**\n * Install a Snap in a simulated environment. This will fetch the Snap files,\n * create a Redux store, set up the controllers and JSON-RPC stack, register the\n * Snap, and run the Snap code in the execution service.\n *\n * @param snapId - The ID of the Snap to install.\n * @param options - The options to use when installing the Snap.\n * @param options.executionService - The execution service to use.\n * @param options.executionServiceOptions - The options to use when creating the\n * execution service, if any. This should only include options specific to the\n * provided execution service.\n * @param options.options - The simulation options.\n * @returns The installed Snap object.\n * @template Service - The type of the execution service.\n */\nexport async function installSnap<\n Service extends new (...args: any[]) => InstanceType<typeof ExecutionService>,\n>(\n snapId: SnapId,\n {\n executionService,\n executionServiceOptions,\n options: rawOptions = {},\n }: Partial<InstallSnapOptions<Service>> = {},\n): Promise<InstalledSnap & SnapHelpers> {\n const options = getOptions(rawOptions);\n\n // Fetch Snap files.\n const location = detectSnapLocation(snapId, {\n allowLocal: true,\n });\n\n const snapFiles = await fetchSnap(snapId, location);\n\n // Create Redux store.\n const { store, runSaga } = createStore(options);\n\n const controllerMessenger = new Messenger<MockAnyNamespace, any, any>({\n namespace: MOCK_ANY_NAMESPACE,\n });\n\n registerActions(\n controllerMessenger,\n runSaga,\n options,\n snapId,\n snapFiles.auxiliaryFiles,\n );\n\n // Set up controllers and JSON-RPC stack.\n const restrictedHooks = getRestrictedHooks(options, store, runSaga);\n\n const permittedHooks = getPermittedHooks(\n snapId,\n controllerMessenger,\n runSaga,\n );\n\n const multichainHooks = getMultichainHooks(\n snapId,\n options,\n controllerMessenger,\n );\n\n const { subjectMetadataController, permissionController } = getControllers({\n controllerMessenger,\n hooks: restrictedHooks,\n runSaga,\n options,\n });\n\n const engine = createJsonRpcEngine({\n snapId,\n messenger: controllerMessenger,\n store,\n restrictedHooks,\n permittedHooks,\n multichainHooks,\n isMultichain: false,\n });\n\n const multichainEngine = createJsonRpcEngine({\n snapId,\n messenger: controllerMessenger,\n store,\n restrictedHooks,\n permittedHooks,\n multichainHooks,\n isMultichain: true,\n });\n\n // Create execution service.\n const ActualService = executionService ?? NodeThreadExecutionService;\n const service = new ActualService({\n ...executionServiceOptions,\n messenger: new Messenger({\n namespace: 'ExecutionService',\n parent: controllerMessenger,\n }),\n setupSnapProvider: (_snapId: string, rpcStream: Duplex) => {\n const mux = setupMultiplex(rpcStream, 'snapStream');\n const stream = mux.createStream('metamask-provider');\n const providerStream = createEngineStream({ engine });\n\n // Error function is difficult to test, so we ignore it.\n /* istanbul ignore next 2 */\n pipeline(stream, providerStream, stream, (error) => {\n if (error && !error.message?.match('Premature close')) {\n logError(`Provider stream failure.`, error);\n }\n });\n\n const multichainStream = mux.createStream('metamask-multichain-provider');\n const multichainProviderStream = createEngineStream({\n engine: multichainEngine,\n });\n\n /* istanbul ignore next 2 */\n pipeline(\n multichainStream,\n multichainProviderStream,\n multichainStream,\n (error) => {\n if (error && !error.message?.match('Premature close')) {\n logError(`Provider stream failure.`, error);\n }\n },\n );\n },\n });\n\n // Register the Snap. This sets up the Snap's permissions and subject\n // metadata.\n await registerSnap(snapId, snapFiles.manifest.result, {\n permissionController,\n subjectMetadataController,\n });\n\n // Run the Snap code in the execution service.\n await service.executeSnap({\n snapId,\n sourceCode: snapFiles.sourceCode.toString('utf8'),\n endowments: await getEndowments(permissionController, snapId),\n });\n\n const helpers = getHelpers({\n snapId,\n store,\n controllerMessenger,\n runSaga,\n executionService: service,\n options,\n });\n\n return {\n snapId,\n store,\n executionService: service,\n controllerMessenger,\n runSaga,\n ...helpers,\n };\n}\n\n/**\n * Get the hooks for the simulation.\n *\n * @param options - The simulation options.\n * @param store - The Redux store.\n * @param runSaga - The run saga function.\n * @returns The hooks for the simulation.\n */\nexport function getRestrictedHooks(\n options: SimulationOptions,\n store: Store,\n runSaga: RunSagaFunction,\n): RestrictedMiddlewareHooks {\n return {\n getMnemonic: getGetMnemonicImplementation(options.secretRecoveryPhrase),\n getIsLocked: () => false,\n getClientCryptography: () => ({}),\n getSnap: getGetSnapImplementation(true),\n setCurrentChain: getSetCurrentChainImplementation(runSaga),\n getSimulationState: store.getState.bind(store),\n };\n}\n\n/**\n * Get the permitted hooks for the simulation.\n *\n * @param snapId - The Snap ID.\n * @param controllerMessenger - The controller messenger.\n * @param runSaga - The run saga function.\n * @returns The permitted hooks for the simulation.\n */\nexport function getPermittedHooks(\n snapId: string,\n controllerMessenger: RootControllerMessenger,\n runSaga: RunSagaFunction,\n): PermittedMiddlewareHooks {\n return {\n getUnlockPromise: asyncResolve(),\n getIsActive: () => true,\n getVersion: () => '13.6.0-flask.0',\n\n getAllowedKeyringMethods: () => [],\n\n trackError: getTrackErrorImplementation(runSaga),\n trackEvent: getTrackEventImplementation(runSaga),\n startTrace: getStartTraceImplementation(runSaga),\n endTrace: getEndTraceImplementation(runSaga),\n\n getMessenger: ({ actions, events }) => {\n const messenger = new Messenger({\n namespace: `${snapId}-messenger`,\n parent: controllerMessenger,\n });\n\n controllerMessenger.delegate({\n actions: actions as never[],\n events: events as never[],\n messenger,\n });\n\n return messenger;\n },\n };\n}\n\n/**\n * Get the hooks for the multichain middleware simulation.\n *\n * @param snapId - The Snap ID.\n * @param options - The simulation options.\n * @param controllerMessenger - The controller messenger.\n * @returns The hooks for the middleware.\n */\nexport function getMultichainHooks(\n snapId: SnapId,\n options: SimulationOptions,\n controllerMessenger: RootControllerMessenger,\n): MultichainMiddlewareHooks {\n return {\n getAccounts: () => options.accounts,\n getCaveat: (permission: string, caveatType: string) => {\n try {\n return controllerMessenger.call(\n 'PermissionController:getCaveat',\n snapId,\n permission,\n caveatType,\n );\n } catch (error) {\n if (error instanceof PermissionDoesNotExistError) {\n return undefined;\n }\n /* istanbul ignore next */\n throw error;\n }\n },\n grantPermissions: (approvedPermissions: RequestedPermissions) => {\n controllerMessenger.call('PermissionController:grantPermissions', {\n subject: { origin: snapId },\n approvedPermissions,\n });\n },\n revokePermission: (permission: string) => {\n try {\n controllerMessenger.call('PermissionController:revokePermissions', {\n [snapId]: [permission],\n });\n } catch (error) {\n if (error instanceof PermissionDoesNotExistError) {\n return;\n }\n /* istanbul ignore next */\n throw error;\n }\n },\n };\n}\n\n/**\n * Get the mock mnemonic for a given source ID.\n *\n * @param options - The simulation options.\n * @returns The mnemonic.\n */\n/**\n * Register mocked action handlers.\n *\n * @param controllerMessenger - The controller messenger.\n * @param runSaga - The run saga function.\n * @param options - The simulation options.\n * @param snapId - The ID of the Snap.\n * @param auxiliaryFiles - Auxiliary files from the fetched Snap.\n */\nexport function registerActions(\n controllerMessenger: RootControllerMessenger,\n runSaga: RunSagaFunction,\n options: SimulationOptions,\n snapId: SnapId,\n auxiliaryFiles: VirtualFile[],\n) {\n controllerMessenger.registerActionHandler(\n 'PhishingController:testOrigin',\n () => ({ result: false, type: 'all' }),\n );\n\n controllerMessenger.registerActionHandler(\n 'AccountsController:getAccountByAddress',\n // @ts-expect-error - This is a partial account with only the necessary\n // data used by the interface controller.\n (address) => {\n const matchingAccount = options.accounts.find(\n (account) => address === account.address,\n );\n\n if (!matchingAccount) {\n return undefined;\n }\n\n return addSnapMetadataToAccount(matchingAccount, snapId);\n },\n );\n\n controllerMessenger.registerActionHandler(\n 'AccountsController:getSelectedMultichainAccount',\n // @ts-expect-error - This is a partial account with only the necessary\n // data used by the interface controller.\n () => {\n const selectedAccount = options.accounts.find(\n (account) => account.selected,\n );\n\n if (!selectedAccount) {\n return undefined;\n }\n\n return addSnapMetadataToAccount(selectedAccount, snapId);\n },\n );\n\n controllerMessenger.registerActionHandler(\n 'AccountsController:listMultichainAccounts',\n\n () =>\n // @ts-expect-error - These are partial accounts with only the necessary\n // data used by the interface controller.\n options.accounts.map((account) =>\n addSnapMetadataToAccount(account, snapId),\n ),\n );\n\n controllerMessenger.registerActionHandler(\n 'AssetsController:getState',\n () => ({\n // @ts-expect-error - These are partial assets with only the\n // necessary data used by the interface controller.\n assetsInfo: options.assets,\n assetsBalance: options.accounts.reduce<\n Record<string, Record<CaipAssetType, Json>>\n >((acc, account) => {\n acc[account.id] = Object.fromEntries(\n (account.assets ?? []).map((asset) => [asset, {}]),\n );\n return acc;\n }, {}),\n }),\n );\n\n controllerMessenger.registerActionHandler(\n 'ApprovalController:hasRequest',\n (opts) => {\n /**\n * Get the current interface from the store.\n *\n * @yields Selects the current interface from the store.\n * @returns The current interface.\n */\n function* getCurrentInterfaceSaga(): SagaIterator {\n const currentInterface: Interface = yield select(getCurrentInterface);\n return currentInterface;\n }\n\n const currentInterface: Interface | undefined = runSaga(\n getCurrentInterfaceSaga,\n ).result();\n return (\n currentInterface?.type === DIALOG_APPROVAL_TYPES.default &&\n currentInterface?.id === opts?.id\n );\n },\n );\n\n controllerMessenger.registerActionHandler(\n 'ApprovalController:acceptRequest',\n async (_id: string, value: unknown) => {\n await runSaga(resolveWithSaga, value).toPromise();\n\n return { value };\n },\n );\n\n controllerMessenger.registerActionHandler(\n 'ApprovalController:addRequest',\n // @ts-expect-error Types of property 'requestData' are incompatible.\n getRequestUserApprovalImplementation(runSaga),\n );\n\n controllerMessenger.registerActionHandler(\n 'SnapController:getSnap',\n getGetSnapImplementation(true),\n );\n\n controllerMessenger.registerActionHandler(\n 'SnapController:getSnapState',\n getGetSnapStateMethodImplementation(runSaga),\n );\n\n controllerMessenger.registerActionHandler(\n 'SnapController:updateSnapState',\n getUpdateSnapStateMethodImplementation(runSaga),\n );\n\n controllerMessenger.registerActionHandler(\n 'SnapController:clearSnapState',\n getClearSnapStateMethodImplementation(runSaga),\n );\n\n controllerMessenger.registerActionHandler(\n 'SnapController:getSnapFile',\n async (_snapId, path, encoding) =>\n getSnapFile(auxiliaryFiles, path, encoding),\n );\n\n const showNativeNotification =\n getShowNativeNotificationImplementation(runSaga);\n const showInAppNotification = getShowInAppNotificationImplementation(runSaga);\n\n controllerMessenger.registerActionHandler(\n // @ts-expect-error - `RateLimitController` is not part of the simulation messenger types.\n 'RateLimitController:call',\n async (\n _origin: string,\n type: 'showNativeNotification' | 'showInAppNotification',\n ...args: unknown[]\n ) => {\n switch (type) {\n case 'showNativeNotification':\n return await showNativeNotification(args[0] as string, {\n type: 'native',\n message: args[1] as string,\n });\n case 'showInAppNotification':\n return await showInAppNotification(\n args[0] as string,\n args[1] as Parameters<typeof showInAppNotification>[1],\n );\n /* istanbul ignore next */\n default:\n return assertExhaustive(type);\n }\n },\n );\n\n const getMnemonic = getGetMnemonicImplementation(\n options.secretRecoveryPhrase,\n );\n\n controllerMessenger.registerActionHandler(\n // @ts-expect-error - `KeyringController` is not part of the simulation messenger types.\n 'KeyringController:getState',\n () => ({\n isUnlocked: true,\n keyrings: [\n {\n type: 'HD Key Tree',\n metadata: {\n id: 'default',\n name: 'Default Secret Recovery Phrase',\n },\n },\n {\n type: 'HD Key Tree',\n metadata: {\n id: 'alternative',\n name: 'Alternative Secret Recovery Phrase',\n },\n },\n ],\n }),\n );\n\n controllerMessenger.registerActionHandler(\n // @ts-expect-error - `KeyringController` is not part of the simulation messenger types.\n 'KeyringController:withKeyringV2Unsafe',\n async (\n selector: { type: string; index?: number } | { id: string },\n operation: (args: {\n keyring: { type: string; mnemonic: Uint8Array; seed: Uint8Array };\n }) => Promise<unknown>,\n ) => {\n const source = hasProperty(selector, 'id')\n ? (selector.id as string)\n : undefined;\n\n const mnemonic = await getMnemonic(source);\n const seed = await mnemonicToSeed(mnemonic);\n\n return await operation({\n keyring: {\n type: 'hd',\n mnemonic,\n seed,\n },\n });\n },\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"simulation.d.cts","sourceRoot":"","sources":["../src/simulation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"simulation.d.cts","sourceRoot":"","sources":["../src/simulation.ts"],"names":[],"mappings":"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"}