{"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"]}