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