{"version":3,"file":"engine.cjs","sourceRoot":"","sources":["../../src/middleware/engine.ts"],"names":[],"mappings":";;;AAAA,+DAGmC;AACnC,2EAA6E;AAC7E,mEAA0E;AAG1E,mEAAqE;AACrE,qCAA8C;AAC9C,uDAA0D;AAC1D,6CAAsD;AAoBtD;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,SAAS,EACT,KAAK,EACL,eAAe,EACf,cAAc,EACd,eAAe,EACf,YAAY,GACe;IAC3B,MAAM,MAAM,GAAG,IAAI,+BAAa,EAAE,CAAC;IAEnC,MAAM,CAAC,IAAI,CAAC,IAAA,wCAAsB,EAAC,MAAM,CAAC,CAAC,CAAC;IAE5C,MAAM,CAAC,IAAI,CAAC,IAAA,uCAA0B,EAAC,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC;IAEvE,MAAM,CAAC,IAAI,CAAC,IAAA,2BAAoB,EAAC,KAAK,CAAC,CAAC,CAAC;IAEzC,qEAAqE;IACrE,uEAAuE;IACvE,MAAM,CAAC,IAAI,CAAC,IAAA,kDAA+B,EAAC,eAAe,CAAC,CAAC,CAAC;IAE9D,wCAAwC;IACxC,MAAM,CAAC,IAAI,CAAC,IAAA,+CAA2B,EAAC,IAAI,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC;IAE1E,MAAM,CAAC,IAAI,CAAC,IAAA,kDAA0B,EAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACvE,MAAM,CAAC,IAAI,CAAC,IAAA,mCAAwB,EAAC,KAAK,CAAC,CAAC,CAAC;IAE7C,OAAO,MAAM,CAAC;AAChB,CAAC;AA5BD,kDA4BC","sourcesContent":["import {\n  JsonRpcEngine,\n  createOriginMiddleware,\n} from '@metamask/json-rpc-engine';\nimport { createPermissionMiddleware } from '@metamask/permission-controller';\nimport { createSnapsMethodMiddleware } from '@metamask/snaps-rpc-methods';\nimport type { SnapId } from '@metamask/snaps-sdk';\n\nimport { createInternalMethodsMiddleware } from './internal-methods';\nimport { createMockMiddleware } from './mock';\nimport { createMultichainMiddleware } from './multichain';\nimport { createProviderMiddleware } from './provider';\nimport type { RootControllerMessenger } from '../controllers';\nimport type {\n  MultichainMiddlewareHooks,\n  PermittedMiddlewareHooks,\n  RestrictedMiddlewareHooks,\n} from '../simulation';\nimport type { Store } from '../store';\n\nexport type CreateJsonRpcEngineOptions = {\n  snapId: SnapId;\n  messenger: RootControllerMessenger;\n  store: Store;\n  restrictedHooks: RestrictedMiddlewareHooks;\n  permittedHooks: PermittedMiddlewareHooks;\n  multichainHooks: MultichainMiddlewareHooks;\n  endpoint?: string;\n  isMultichain: boolean;\n};\n\n/**\n * Create a JSON-RPC engine for use in a simulated environment. This engine\n * should be used to handle all JSON-RPC requests. It is set up to handle\n * requests that would normally be handled internally by the MetaMask client, as\n * well as Snap-specific requests.\n *\n * @param options - The options to use when creating the engine.\n * @param options.snapId - The Snap ID.\n * @param options.messenger - The messenger.\n * @param options.store - The Redux store to use.\n * @param options.restrictedHooks - Any hooks used by the middleware handlers.\n * @param options.permittedHooks - Any hooks used by the middleware handlers.\n * @param options.multichainHooks - Hooks used by the multichain middleware.\n * @param options.isMultichain - Whether the engine is used for multichain.\n * @returns A JSON-RPC engine.\n */\nexport function createJsonRpcEngine({\n  snapId,\n  messenger,\n  store,\n  restrictedHooks,\n  permittedHooks,\n  multichainHooks,\n  isMultichain,\n}: CreateJsonRpcEngineOptions) {\n  const engine = new JsonRpcEngine();\n\n  engine.push(createOriginMiddleware(snapId));\n\n  engine.push(createMultichainMiddleware(isMultichain, multichainHooks));\n\n  engine.push(createMockMiddleware(store));\n\n  // The hooks here do not match the hooks used by the clients, so this\n  // middleware should not be used outside of the simulation environment.\n  engine.push(createInternalMethodsMiddleware(restrictedHooks));\n\n  // @ts-expect-error Hooks type mismatch.\n  engine.push(createSnapsMethodMiddleware(true, permittedHooks, messenger));\n\n  engine.push(createPermissionMiddleware({ messenger, origin: snapId }));\n  engine.push(createProviderMiddleware(store));\n\n  return engine;\n}\n"]}