@metamask/network-controller 22.1.1 → 22.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -1
- package/dist/NetworkController.cjs +61 -10
- package/dist/NetworkController.cjs.map +1 -1
- package/dist/NetworkController.d.cts +61 -5
- package/dist/NetworkController.d.cts.map +1 -1
- package/dist/NetworkController.d.mts +61 -5
- package/dist/NetworkController.d.mts.map +1 -1
- package/dist/NetworkController.mjs +61 -9
- package/dist/NetworkController.mjs.map +1 -1
- package/dist/create-network-client.cjs +1 -4
- package/dist/create-network-client.cjs.map +1 -1
- package/dist/create-network-client.d.cts.map +1 -1
- package/dist/create-network-client.d.mts.map +1 -1
- package/dist/create-network-client.mjs +1 -4
- package/dist/create-network-client.mjs.map +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +1 -0
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/rpc-service/abstract-rpc-service.cjs +3 -0
- package/dist/rpc-service/abstract-rpc-service.cjs.map +1 -0
- package/dist/rpc-service/abstract-rpc-service.d.cts +46 -0
- package/dist/rpc-service/abstract-rpc-service.d.cts.map +1 -0
- package/dist/rpc-service/abstract-rpc-service.d.mts +46 -0
- package/dist/rpc-service/abstract-rpc-service.d.mts.map +1 -0
- package/dist/rpc-service/abstract-rpc-service.mjs +2 -0
- package/dist/rpc-service/abstract-rpc-service.mjs.map +1 -0
- package/dist/rpc-service/rpc-service-chain.cjs +109 -0
- package/dist/rpc-service/rpc-service-chain.cjs.map +1 -0
- package/dist/rpc-service/rpc-service-chain.d.cts +116 -0
- package/dist/rpc-service/rpc-service-chain.d.cts.map +1 -0
- package/dist/rpc-service/rpc-service-chain.d.mts +116 -0
- package/dist/rpc-service/rpc-service-chain.d.mts.map +1 -0
- package/dist/rpc-service/rpc-service-chain.mjs +105 -0
- package/dist/rpc-service/rpc-service-chain.mjs.map +1 -0
- package/dist/rpc-service/rpc-service.cjs +279 -0
- package/dist/rpc-service/rpc-service.cjs.map +1 -0
- package/dist/rpc-service/rpc-service.d.cts +134 -0
- package/dist/rpc-service/rpc-service.d.cts.map +1 -0
- package/dist/rpc-service/rpc-service.d.mts +134 -0
- package/dist/rpc-service/rpc-service.d.mts.map +1 -0
- package/dist/rpc-service/rpc-service.mjs +278 -0
- package/dist/rpc-service/rpc-service.mjs.map +1 -0
- package/dist/rpc-service/shared.cjs +3 -0
- package/dist/rpc-service/shared.cjs.map +1 -0
- package/dist/rpc-service/shared.d.cts +12 -0
- package/dist/rpc-service/shared.d.cts.map +1 -0
- package/dist/rpc-service/shared.d.mts +12 -0
- package/dist/rpc-service/shared.d.mts.map +1 -0
- package/dist/rpc-service/shared.mjs +2 -0
- package/dist/rpc-service/shared.mjs.map +1 -0
- package/package.json +7 -7
|
@@ -29,9 +29,7 @@ function createNetworkClient(networkConfig) {
|
|
|
29
29
|
rpcUrl: networkConfig.rpcUrl,
|
|
30
30
|
});
|
|
31
31
|
const rpcProvider = (0, eth_json_rpc_provider_1.providerFromMiddleware)(rpcApiMiddleware);
|
|
32
|
-
const blockTrackerOpts =
|
|
33
|
-
// eslint-disable-next-line n/no-process-env
|
|
34
|
-
process.env.IN_TEST && networkConfig.type === 'custom'
|
|
32
|
+
const blockTrackerOpts = process.env.IN_TEST && networkConfig.type === 'custom'
|
|
35
33
|
? { pollingInterval: SECOND }
|
|
36
34
|
: {};
|
|
37
35
|
const blockTracker = new eth_block_tracker_1.PollingBlockTracker({
|
|
@@ -115,7 +113,6 @@ const createChainIdMiddleware = (chainId) => {
|
|
|
115
113
|
* @returns The collection of middleware that makes up the Infura client.
|
|
116
114
|
*/
|
|
117
115
|
function createCustomNetworkMiddleware({ blockTracker, chainId, rpcApiMiddleware, }) {
|
|
118
|
-
// eslint-disable-next-line n/no-process-env
|
|
119
116
|
const testMiddlewares = process.env.IN_TEST
|
|
120
117
|
? [createEstimateGasDelayTestMiddleware()]
|
|
121
118
|
: [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-network-client.cjs","sourceRoot":"","sources":["../src/create-network-client.ts"],"names":[],"mappings":";;;AACA,iEAAqD;AACrD,mEAAkE;AAClE,uEAAuE;AACvE,+EAQ2C;AAE3C,2EAGyC;AACzC,+DAKmC;AASnC,uCAA4C;AAE5C,MAAM,MAAM,GAAG,IAAI,CAAC;AAapB;;;;;GAKG;AACH,SAAgB,mBAAmB,CACjC,aAAyC;IAEzC,MAAM,gBAAgB,GACpB,aAAa,CAAC,IAAI,KAAK,yBAAiB,CAAC,MAAM;QAC7C,CAAC,CAAC,IAAA,4CAAsB,EAAC;YACrB,OAAO,EAAE,aAAa,CAAC,OAAO;YAC9B,SAAS,EAAE,aAAa,CAAC,eAAe;YACxC,WAAW,EAAE,CAAC;YACd,MAAM,EAAE,UAAU;SACnB,CAAC;QACJ,CAAC,CAAC,IAAA,+CAAqB,EAAC;YACpB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,aAAa,CAAC,MAAM;SAC7B,CAAC,CAAC;IAET,MAAM,WAAW,GAAG,IAAA,8CAAsB,EAAC,gBAAgB,CAAC,CAAC;IAE7D,MAAM,gBAAgB
|
|
1
|
+
{"version":3,"file":"create-network-client.cjs","sourceRoot":"","sources":["../src/create-network-client.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InfuraNetworkType } from '@metamask/controller-utils';\nimport { ChainId } from '@metamask/controller-utils';\nimport { PollingBlockTracker } from '@metamask/eth-block-tracker';\nimport { createInfuraMiddleware } from '@metamask/eth-json-rpc-infura';\nimport {\n createBlockCacheMiddleware,\n createBlockRefMiddleware,\n createBlockRefRewriteMiddleware,\n createBlockTrackerInspectorMiddleware,\n createInflightCacheMiddleware,\n createFetchMiddleware,\n createRetryOnEmptyMiddleware,\n} from '@metamask/eth-json-rpc-middleware';\nimport type { SafeEventEmitterProvider } from '@metamask/eth-json-rpc-provider';\nimport {\n providerFromEngine,\n providerFromMiddleware,\n} from '@metamask/eth-json-rpc-provider';\nimport {\n createAsyncMiddleware,\n createScaffoldMiddleware,\n JsonRpcEngine,\n mergeMiddleware,\n} from '@metamask/json-rpc-engine';\nimport type { JsonRpcMiddleware } from '@metamask/json-rpc-engine';\nimport type { Hex, Json, JsonRpcParams } from '@metamask/utils';\n\nimport type {\n BlockTracker,\n NetworkClientConfiguration,\n Provider,\n} from './types';\nimport { NetworkClientType } from './types';\n\nconst SECOND = 1000;\n\n/**\n * The pair of provider / block tracker that can be used to interface with the\n * network and respond to new activity.\n */\nexport type NetworkClient = {\n configuration: NetworkClientConfiguration;\n provider: Provider;\n blockTracker: BlockTracker;\n destroy: () => void;\n};\n\n/**\n * Create a JSON RPC network client for a specific network.\n *\n * @param networkConfig - The network configuration.\n * @returns The network client.\n */\nexport function createNetworkClient(\n networkConfig: NetworkClientConfiguration,\n): NetworkClient {\n const rpcApiMiddleware =\n networkConfig.type === NetworkClientType.Infura\n ? createInfuraMiddleware({\n network: networkConfig.network,\n projectId: networkConfig.infuraProjectId,\n maxAttempts: 5,\n source: 'metamask',\n })\n : createFetchMiddleware({\n btoa: global.btoa,\n fetch: global.fetch,\n rpcUrl: networkConfig.rpcUrl,\n });\n\n const rpcProvider = providerFromMiddleware(rpcApiMiddleware);\n\n const blockTrackerOpts =\n process.env.IN_TEST && networkConfig.type === 'custom'\n ? { pollingInterval: SECOND }\n : {};\n const blockTracker = new PollingBlockTracker({\n ...blockTrackerOpts,\n provider: rpcProvider,\n });\n\n const networkMiddleware =\n networkConfig.type === NetworkClientType.Infura\n ? createInfuraNetworkMiddleware({\n blockTracker,\n network: networkConfig.network,\n rpcProvider,\n rpcApiMiddleware,\n })\n : createCustomNetworkMiddleware({\n blockTracker,\n chainId: networkConfig.chainId,\n rpcApiMiddleware,\n });\n\n const engine = new JsonRpcEngine();\n\n engine.push(networkMiddleware);\n\n const provider = providerFromEngine(engine);\n\n const destroy = () => {\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n blockTracker.destroy();\n };\n\n return { configuration: networkConfig, provider, blockTracker, destroy };\n}\n\n/**\n * Create middleware for infura.\n *\n * @param args - The arguments.\n * @param args.blockTracker - The block tracker to use.\n * @param args.network - The Infura network to use.\n * @param args.rpcProvider - The RPC provider to use.\n * @param args.rpcApiMiddleware - Additional middleware.\n * @returns The collection of middleware that makes up the Infura client.\n */\nfunction createInfuraNetworkMiddleware({\n blockTracker,\n network,\n rpcProvider,\n rpcApiMiddleware,\n}: {\n blockTracker: PollingBlockTracker;\n network: InfuraNetworkType;\n rpcProvider: SafeEventEmitterProvider;\n rpcApiMiddleware: JsonRpcMiddleware<JsonRpcParams, Json>;\n}) {\n return mergeMiddleware([\n createNetworkAndChainIdMiddleware({ network }),\n createBlockCacheMiddleware({ blockTracker }),\n createInflightCacheMiddleware(),\n createBlockRefMiddleware({ blockTracker, provider: rpcProvider }),\n createRetryOnEmptyMiddleware({ blockTracker, provider: rpcProvider }),\n createBlockTrackerInspectorMiddleware({ blockTracker }),\n rpcApiMiddleware,\n ]);\n}\n\n/**\n * Creates static method middleware.\n *\n * @param args - The Arguments.\n * @param args.network - The Infura network to use.\n * @returns The middleware that implements the eth_chainId method.\n */\nfunction createNetworkAndChainIdMiddleware({\n network,\n}: {\n network: InfuraNetworkType;\n}) {\n return createScaffoldMiddleware({\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n eth_chainId: ChainId[network],\n });\n}\n\nconst createChainIdMiddleware = (\n chainId: Hex,\n): JsonRpcMiddleware<JsonRpcParams, Json> => {\n return (req, res, next, end) => {\n if (req.method === 'eth_chainId') {\n res.result = chainId;\n return end();\n }\n return next();\n };\n};\n\n/**\n * Creates custom middleware.\n *\n * @param args - The arguments.\n * @param args.blockTracker - The block tracker to use.\n * @param args.chainId - The chain id to use.\n * @param args.rpcApiMiddleware - Additional middleware.\n * @returns The collection of middleware that makes up the Infura client.\n */\nfunction createCustomNetworkMiddleware({\n blockTracker,\n chainId,\n rpcApiMiddleware,\n}: {\n blockTracker: PollingBlockTracker;\n chainId: Hex;\n rpcApiMiddleware: JsonRpcMiddleware<JsonRpcParams, Json>;\n}): JsonRpcMiddleware<JsonRpcParams, Json> {\n const testMiddlewares = process.env.IN_TEST\n ? [createEstimateGasDelayTestMiddleware()]\n : [];\n\n return mergeMiddleware([\n ...testMiddlewares,\n createChainIdMiddleware(chainId),\n createBlockRefRewriteMiddleware({ blockTracker }),\n createBlockCacheMiddleware({ blockTracker }),\n createInflightCacheMiddleware(),\n createBlockTrackerInspectorMiddleware({ blockTracker }),\n rpcApiMiddleware,\n ]);\n}\n\n/**\n * For use in tests only.\n * Adds a delay to `eth_estimateGas` calls.\n *\n * @returns The middleware for delaying gas estimation calls by 2 seconds when in test.\n */\nfunction createEstimateGasDelayTestMiddleware() {\n return createAsyncMiddleware(async (req, _, next) => {\n if (req.method === 'eth_estimateGas') {\n await new Promise((resolve) => setTimeout(resolve, SECOND * 2));\n }\n return next();\n });\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-network-client.d.cts","sourceRoot":"","sources":["../src/create-network-client.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EACV,YAAY,EACZ,0BAA0B,EAC1B,QAAQ,EACT,oBAAgB;AAKjB;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,aAAa,EAAE,0BAA0B,CAAC;IAC1C,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,0BAA0B,GACxC,aAAa,
|
|
1
|
+
{"version":3,"file":"create-network-client.d.cts","sourceRoot":"","sources":["../src/create-network-client.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EACV,YAAY,EACZ,0BAA0B,EAC1B,QAAQ,EACT,oBAAgB;AAKjB;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,aAAa,EAAE,0BAA0B,CAAC;IAC1C,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,0BAA0B,GACxC,aAAa,CAqDf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-network-client.d.mts","sourceRoot":"","sources":["../src/create-network-client.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EACV,YAAY,EACZ,0BAA0B,EAC1B,QAAQ,EACT,oBAAgB;AAKjB;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,aAAa,EAAE,0BAA0B,CAAC;IAC1C,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,0BAA0B,GACxC,aAAa,
|
|
1
|
+
{"version":3,"file":"create-network-client.d.mts","sourceRoot":"","sources":["../src/create-network-client.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EACV,YAAY,EACZ,0BAA0B,EAC1B,QAAQ,EACT,oBAAgB;AAKjB;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,aAAa,EAAE,0BAA0B,CAAC;IAC1C,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,0BAA0B,GACxC,aAAa,CAqDf"}
|
|
@@ -26,9 +26,7 @@ export function createNetworkClient(networkConfig) {
|
|
|
26
26
|
rpcUrl: networkConfig.rpcUrl,
|
|
27
27
|
});
|
|
28
28
|
const rpcProvider = providerFromMiddleware(rpcApiMiddleware);
|
|
29
|
-
const blockTrackerOpts =
|
|
30
|
-
// eslint-disable-next-line n/no-process-env
|
|
31
|
-
process.env.IN_TEST && networkConfig.type === 'custom'
|
|
29
|
+
const blockTrackerOpts = process.env.IN_TEST && networkConfig.type === 'custom'
|
|
32
30
|
? { pollingInterval: SECOND }
|
|
33
31
|
: {};
|
|
34
32
|
const blockTracker = new PollingBlockTracker({
|
|
@@ -111,7 +109,6 @@ const createChainIdMiddleware = (chainId) => {
|
|
|
111
109
|
* @returns The collection of middleware that makes up the Infura client.
|
|
112
110
|
*/
|
|
113
111
|
function createCustomNetworkMiddleware({ blockTracker, chainId, rpcApiMiddleware, }) {
|
|
114
|
-
// eslint-disable-next-line n/no-process-env
|
|
115
112
|
const testMiddlewares = process.env.IN_TEST
|
|
116
113
|
? [createEstimateGasDelayTestMiddleware()]
|
|
117
114
|
: [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-network-client.mjs","sourceRoot":"","sources":["../src/create-network-client.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InfuraNetworkType } from '@metamask/controller-utils';\nimport { ChainId } from '@metamask/controller-utils';\nimport { PollingBlockTracker } from '@metamask/eth-block-tracker';\nimport { createInfuraMiddleware } from '@metamask/eth-json-rpc-infura';\nimport {\n createBlockCacheMiddleware,\n createBlockRefMiddleware,\n createBlockRefRewriteMiddleware,\n createBlockTrackerInspectorMiddleware,\n createInflightCacheMiddleware,\n createFetchMiddleware,\n createRetryOnEmptyMiddleware,\n} from '@metamask/eth-json-rpc-middleware';\nimport type { SafeEventEmitterProvider } from '@metamask/eth-json-rpc-provider';\nimport {\n providerFromEngine,\n providerFromMiddleware,\n} from '@metamask/eth-json-rpc-provider';\nimport {\n createAsyncMiddleware,\n createScaffoldMiddleware,\n JsonRpcEngine,\n mergeMiddleware,\n} from '@metamask/json-rpc-engine';\nimport type { JsonRpcMiddleware } from '@metamask/json-rpc-engine';\nimport type { Hex, Json, JsonRpcParams } from '@metamask/utils';\n\nimport type {\n BlockTracker,\n NetworkClientConfiguration,\n Provider,\n} from './types';\nimport { NetworkClientType } from './types';\n\nconst SECOND = 1000;\n\n/**\n * The pair of provider / block tracker that can be used to interface with the\n * network and respond to new activity.\n */\nexport type NetworkClient = {\n configuration: NetworkClientConfiguration;\n provider: Provider;\n blockTracker: BlockTracker;\n destroy: () => void;\n};\n\n/**\n * Create a JSON RPC network client for a specific network.\n *\n * @param networkConfig - The network configuration.\n * @returns The network client.\n */\nexport function createNetworkClient(\n networkConfig: NetworkClientConfiguration,\n): NetworkClient {\n const rpcApiMiddleware =\n networkConfig.type === NetworkClientType.Infura\n ? createInfuraMiddleware({\n network: networkConfig.network,\n projectId: networkConfig.infuraProjectId,\n maxAttempts: 5,\n source: 'metamask',\n })\n : createFetchMiddleware({\n btoa: global.btoa,\n fetch: global.fetch,\n rpcUrl: networkConfig.rpcUrl,\n });\n\n const rpcProvider = providerFromMiddleware(rpcApiMiddleware);\n\n const blockTrackerOpts =\n // eslint-disable-next-line n/no-process-env\n process.env.IN_TEST && networkConfig.type === 'custom'\n ? { pollingInterval: SECOND }\n : {};\n const blockTracker = new PollingBlockTracker({\n ...blockTrackerOpts,\n provider: rpcProvider,\n });\n\n const networkMiddleware =\n networkConfig.type === NetworkClientType.Infura\n ? createInfuraNetworkMiddleware({\n blockTracker,\n network: networkConfig.network,\n rpcProvider,\n rpcApiMiddleware,\n })\n : createCustomNetworkMiddleware({\n blockTracker,\n chainId: networkConfig.chainId,\n rpcApiMiddleware,\n });\n\n const engine = new JsonRpcEngine();\n\n engine.push(networkMiddleware);\n\n const provider = providerFromEngine(engine);\n\n const destroy = () => {\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n blockTracker.destroy();\n };\n\n return { configuration: networkConfig, provider, blockTracker, destroy };\n}\n\n/**\n * Create middleware for infura.\n *\n * @param args - The arguments.\n * @param args.blockTracker - The block tracker to use.\n * @param args.network - The Infura network to use.\n * @param args.rpcProvider - The RPC provider to use.\n * @param args.rpcApiMiddleware - Additional middleware.\n * @returns The collection of middleware that makes up the Infura client.\n */\nfunction createInfuraNetworkMiddleware({\n blockTracker,\n network,\n rpcProvider,\n rpcApiMiddleware,\n}: {\n blockTracker: PollingBlockTracker;\n network: InfuraNetworkType;\n rpcProvider: SafeEventEmitterProvider;\n rpcApiMiddleware: JsonRpcMiddleware<JsonRpcParams, Json>;\n}) {\n return mergeMiddleware([\n createNetworkAndChainIdMiddleware({ network }),\n createBlockCacheMiddleware({ blockTracker }),\n createInflightCacheMiddleware(),\n createBlockRefMiddleware({ blockTracker, provider: rpcProvider }),\n createRetryOnEmptyMiddleware({ blockTracker, provider: rpcProvider }),\n createBlockTrackerInspectorMiddleware({ blockTracker }),\n rpcApiMiddleware,\n ]);\n}\n\n/**\n * Creates static method middleware.\n *\n * @param args - The Arguments.\n * @param args.network - The Infura network to use.\n * @returns The middleware that implements the eth_chainId method.\n */\nfunction createNetworkAndChainIdMiddleware({\n network,\n}: {\n network: InfuraNetworkType;\n}) {\n return createScaffoldMiddleware({\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n eth_chainId: ChainId[network],\n });\n}\n\nconst createChainIdMiddleware = (\n chainId: Hex,\n): JsonRpcMiddleware<JsonRpcParams, Json> => {\n return (req, res, next, end) => {\n if (req.method === 'eth_chainId') {\n res.result = chainId;\n return end();\n }\n return next();\n };\n};\n\n/**\n * Creates custom middleware.\n *\n * @param args - The arguments.\n * @param args.blockTracker - The block tracker to use.\n * @param args.chainId - The chain id to use.\n * @param args.rpcApiMiddleware - Additional middleware.\n * @returns The collection of middleware that makes up the Infura client.\n */\nfunction createCustomNetworkMiddleware({\n blockTracker,\n chainId,\n rpcApiMiddleware,\n}: {\n blockTracker: PollingBlockTracker;\n chainId: Hex;\n rpcApiMiddleware: JsonRpcMiddleware<JsonRpcParams, Json>;\n}): JsonRpcMiddleware<JsonRpcParams, Json> {\n // eslint-disable-next-line n/no-process-env\n const testMiddlewares = process.env.IN_TEST\n ? [createEstimateGasDelayTestMiddleware()]\n : [];\n\n return mergeMiddleware([\n ...testMiddlewares,\n createChainIdMiddleware(chainId),\n createBlockRefRewriteMiddleware({ blockTracker }),\n createBlockCacheMiddleware({ blockTracker }),\n createInflightCacheMiddleware(),\n createBlockTrackerInspectorMiddleware({ blockTracker }),\n rpcApiMiddleware,\n ]);\n}\n\n/**\n * For use in tests only.\n * Adds a delay to `eth_estimateGas` calls.\n *\n * @returns The middleware for delaying gas estimation calls by 2 seconds when in test.\n */\nfunction createEstimateGasDelayTestMiddleware() {\n return createAsyncMiddleware(async (req, _, next) => {\n if (req.method === 'eth_estimateGas') {\n await new Promise((resolve) => setTimeout(resolve, SECOND * 2));\n }\n return next();\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"create-network-client.mjs","sourceRoot":"","sources":["../src/create-network-client.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InfuraNetworkType } from '@metamask/controller-utils';\nimport { ChainId } from '@metamask/controller-utils';\nimport { PollingBlockTracker } from '@metamask/eth-block-tracker';\nimport { createInfuraMiddleware } from '@metamask/eth-json-rpc-infura';\nimport {\n createBlockCacheMiddleware,\n createBlockRefMiddleware,\n createBlockRefRewriteMiddleware,\n createBlockTrackerInspectorMiddleware,\n createInflightCacheMiddleware,\n createFetchMiddleware,\n createRetryOnEmptyMiddleware,\n} from '@metamask/eth-json-rpc-middleware';\nimport type { SafeEventEmitterProvider } from '@metamask/eth-json-rpc-provider';\nimport {\n providerFromEngine,\n providerFromMiddleware,\n} from '@metamask/eth-json-rpc-provider';\nimport {\n createAsyncMiddleware,\n createScaffoldMiddleware,\n JsonRpcEngine,\n mergeMiddleware,\n} from '@metamask/json-rpc-engine';\nimport type { JsonRpcMiddleware } from '@metamask/json-rpc-engine';\nimport type { Hex, Json, JsonRpcParams } from '@metamask/utils';\n\nimport type {\n BlockTracker,\n NetworkClientConfiguration,\n Provider,\n} from './types';\nimport { NetworkClientType } from './types';\n\nconst SECOND = 1000;\n\n/**\n * The pair of provider / block tracker that can be used to interface with the\n * network and respond to new activity.\n */\nexport type NetworkClient = {\n configuration: NetworkClientConfiguration;\n provider: Provider;\n blockTracker: BlockTracker;\n destroy: () => void;\n};\n\n/**\n * Create a JSON RPC network client for a specific network.\n *\n * @param networkConfig - The network configuration.\n * @returns The network client.\n */\nexport function createNetworkClient(\n networkConfig: NetworkClientConfiguration,\n): NetworkClient {\n const rpcApiMiddleware =\n networkConfig.type === NetworkClientType.Infura\n ? createInfuraMiddleware({\n network: networkConfig.network,\n projectId: networkConfig.infuraProjectId,\n maxAttempts: 5,\n source: 'metamask',\n })\n : createFetchMiddleware({\n btoa: global.btoa,\n fetch: global.fetch,\n rpcUrl: networkConfig.rpcUrl,\n });\n\n const rpcProvider = providerFromMiddleware(rpcApiMiddleware);\n\n const blockTrackerOpts =\n process.env.IN_TEST && networkConfig.type === 'custom'\n ? { pollingInterval: SECOND }\n : {};\n const blockTracker = new PollingBlockTracker({\n ...blockTrackerOpts,\n provider: rpcProvider,\n });\n\n const networkMiddleware =\n networkConfig.type === NetworkClientType.Infura\n ? createInfuraNetworkMiddleware({\n blockTracker,\n network: networkConfig.network,\n rpcProvider,\n rpcApiMiddleware,\n })\n : createCustomNetworkMiddleware({\n blockTracker,\n chainId: networkConfig.chainId,\n rpcApiMiddleware,\n });\n\n const engine = new JsonRpcEngine();\n\n engine.push(networkMiddleware);\n\n const provider = providerFromEngine(engine);\n\n const destroy = () => {\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n blockTracker.destroy();\n };\n\n return { configuration: networkConfig, provider, blockTracker, destroy };\n}\n\n/**\n * Create middleware for infura.\n *\n * @param args - The arguments.\n * @param args.blockTracker - The block tracker to use.\n * @param args.network - The Infura network to use.\n * @param args.rpcProvider - The RPC provider to use.\n * @param args.rpcApiMiddleware - Additional middleware.\n * @returns The collection of middleware that makes up the Infura client.\n */\nfunction createInfuraNetworkMiddleware({\n blockTracker,\n network,\n rpcProvider,\n rpcApiMiddleware,\n}: {\n blockTracker: PollingBlockTracker;\n network: InfuraNetworkType;\n rpcProvider: SafeEventEmitterProvider;\n rpcApiMiddleware: JsonRpcMiddleware<JsonRpcParams, Json>;\n}) {\n return mergeMiddleware([\n createNetworkAndChainIdMiddleware({ network }),\n createBlockCacheMiddleware({ blockTracker }),\n createInflightCacheMiddleware(),\n createBlockRefMiddleware({ blockTracker, provider: rpcProvider }),\n createRetryOnEmptyMiddleware({ blockTracker, provider: rpcProvider }),\n createBlockTrackerInspectorMiddleware({ blockTracker }),\n rpcApiMiddleware,\n ]);\n}\n\n/**\n * Creates static method middleware.\n *\n * @param args - The Arguments.\n * @param args.network - The Infura network to use.\n * @returns The middleware that implements the eth_chainId method.\n */\nfunction createNetworkAndChainIdMiddleware({\n network,\n}: {\n network: InfuraNetworkType;\n}) {\n return createScaffoldMiddleware({\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n eth_chainId: ChainId[network],\n });\n}\n\nconst createChainIdMiddleware = (\n chainId: Hex,\n): JsonRpcMiddleware<JsonRpcParams, Json> => {\n return (req, res, next, end) => {\n if (req.method === 'eth_chainId') {\n res.result = chainId;\n return end();\n }\n return next();\n };\n};\n\n/**\n * Creates custom middleware.\n *\n * @param args - The arguments.\n * @param args.blockTracker - The block tracker to use.\n * @param args.chainId - The chain id to use.\n * @param args.rpcApiMiddleware - Additional middleware.\n * @returns The collection of middleware that makes up the Infura client.\n */\nfunction createCustomNetworkMiddleware({\n blockTracker,\n chainId,\n rpcApiMiddleware,\n}: {\n blockTracker: PollingBlockTracker;\n chainId: Hex;\n rpcApiMiddleware: JsonRpcMiddleware<JsonRpcParams, Json>;\n}): JsonRpcMiddleware<JsonRpcParams, Json> {\n const testMiddlewares = process.env.IN_TEST\n ? [createEstimateGasDelayTestMiddleware()]\n : [];\n\n return mergeMiddleware([\n ...testMiddlewares,\n createChainIdMiddleware(chainId),\n createBlockRefRewriteMiddleware({ blockTracker }),\n createBlockCacheMiddleware({ blockTracker }),\n createInflightCacheMiddleware(),\n createBlockTrackerInspectorMiddleware({ blockTracker }),\n rpcApiMiddleware,\n ]);\n}\n\n/**\n * For use in tests only.\n * Adds a delay to `eth_estimateGas` calls.\n *\n * @returns The middleware for delaying gas estimation calls by 2 seconds when in test.\n */\nfunction createEstimateGasDelayTestMiddleware() {\n return createAsyncMiddleware(async (req, _, next) => {\n if (req.method === 'eth_estimateGas') {\n await new Promise((resolve) => setTimeout(resolve, SECOND * 2));\n }\n return next();\n });\n}\n"]}
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAsCA,6DAM6B;AAL3B,qIAAA,gCAAgC,OAAA;AAChC,oIAAA,+BAA+B,OAAA;AAC/B,gHAAA,WAAW,OAAA;AACX,sHAAA,iBAAiB,OAAA;AACjB,oHAAA,eAAe,OAAA;AAEjB,kDAA4B;AAO5B,qCAA4C;AAAnC,0GAAA,iBAAiB,OAAA","sourcesContent":["export type { AutoManagedNetworkClient } from './create-auto-managed-network-client';\nexport type {\n Block,\n NetworkMetadata,\n NetworkConfiguration,\n BuiltInNetworkClientId,\n CustomNetworkClientId,\n NetworkClientId,\n NetworksMetadata,\n NetworkState,\n BlockTrackerProxy,\n ProviderProxy,\n AddNetworkFields,\n UpdateNetworkFields,\n NetworkControllerStateChangeEvent,\n NetworkControllerNetworkWillChangeEvent,\n NetworkControllerNetworkDidChangeEvent,\n NetworkControllerInfuraIsBlockedEvent,\n NetworkControllerInfuraIsUnblockedEvent,\n NetworkControllerNetworkAddedEvent,\n NetworkControllerNetworkRemovedEvent,\n NetworkControllerEvents,\n NetworkControllerGetStateAction,\n NetworkControllerGetEthQueryAction,\n NetworkControllerGetNetworkClientByIdAction,\n NetworkControllerGetSelectedNetworkClientAction,\n NetworkControllerGetEIP1559CompatibilityAction,\n NetworkControllerFindNetworkClientIdByChainIdAction,\n NetworkControllerSetProviderTypeAction,\n NetworkControllerSetActiveNetworkAction,\n NetworkControllerAddNetworkAction,\n NetworkControllerRemoveNetworkAction,\n NetworkControllerUpdateNetworkAction,\n NetworkControllerGetNetworkConfigurationByNetworkClientId,\n NetworkControllerActions,\n NetworkControllerMessenger,\n NetworkControllerOptions,\n} from './NetworkController';\nexport {\n getDefaultNetworkControllerState,\n selectAvailableNetworkClientIds,\n knownKeysOf,\n NetworkController,\n RpcEndpointType,\n} from './NetworkController';\nexport * from './constants';\nexport type { BlockTracker, Provider } from './types';\nexport type {\n NetworkClientConfiguration,\n InfuraNetworkClientConfiguration,\n CustomNetworkClientConfiguration,\n} from './types';\nexport { NetworkClientType } from './types';\nexport type { NetworkClient } from './create-network-client';\n"]}
|
|
1
|
+
{"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAsCA,6DAM6B;AAL3B,qIAAA,gCAAgC,OAAA;AAChC,oIAAA,+BAA+B,OAAA;AAC/B,gHAAA,WAAW,OAAA;AACX,sHAAA,iBAAiB,OAAA;AACjB,oHAAA,eAAe,OAAA;AAEjB,kDAA4B;AAO5B,qCAA4C;AAAnC,0GAAA,iBAAiB,OAAA","sourcesContent":["export type { AutoManagedNetworkClient } from './create-auto-managed-network-client';\nexport type {\n Block,\n NetworkMetadata,\n NetworkConfiguration,\n BuiltInNetworkClientId,\n CustomNetworkClientId,\n NetworkClientId,\n NetworksMetadata,\n NetworkState,\n BlockTrackerProxy,\n ProviderProxy,\n AddNetworkFields,\n UpdateNetworkFields,\n NetworkControllerStateChangeEvent,\n NetworkControllerNetworkWillChangeEvent,\n NetworkControllerNetworkDidChangeEvent,\n NetworkControllerInfuraIsBlockedEvent,\n NetworkControllerInfuraIsUnblockedEvent,\n NetworkControllerNetworkAddedEvent,\n NetworkControllerNetworkRemovedEvent,\n NetworkControllerEvents,\n NetworkControllerGetStateAction,\n NetworkControllerGetEthQueryAction,\n NetworkControllerGetNetworkClientByIdAction,\n NetworkControllerGetSelectedNetworkClientAction,\n NetworkControllerGetEIP1559CompatibilityAction,\n NetworkControllerFindNetworkClientIdByChainIdAction,\n NetworkControllerSetProviderTypeAction,\n NetworkControllerSetActiveNetworkAction,\n NetworkControllerAddNetworkAction,\n NetworkControllerRemoveNetworkAction,\n NetworkControllerUpdateNetworkAction,\n NetworkControllerGetNetworkConfigurationByNetworkClientId,\n NetworkControllerActions,\n NetworkControllerMessenger,\n NetworkControllerOptions,\n} from './NetworkController';\nexport {\n getDefaultNetworkControllerState,\n selectAvailableNetworkClientIds,\n knownKeysOf,\n NetworkController,\n RpcEndpointType,\n} from './NetworkController';\nexport * from './constants';\nexport type { BlockTracker, Provider } from './types';\nexport type {\n NetworkClientConfiguration,\n InfuraNetworkClientConfiguration,\n CustomNetworkClientConfiguration,\n} from './types';\nexport { NetworkClientType } from './types';\nexport type { NetworkClient } from './create-network-client';\nexport type { AbstractRpcService } from './rpc-service/abstract-rpc-service';\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -6,4 +6,5 @@ export type { BlockTracker, Provider } from "./types.cjs";
|
|
|
6
6
|
export type { NetworkClientConfiguration, InfuraNetworkClientConfiguration, CustomNetworkClientConfiguration, } from "./types.cjs";
|
|
7
7
|
export { NetworkClientType } from "./types.cjs";
|
|
8
8
|
export type { NetworkClient } from "./create-network-client.cjs";
|
|
9
|
+
export type { AbstractRpcService } from "./rpc-service/abstract-rpc-service.cjs";
|
|
9
10
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,wBAAwB,EAAE,iDAA6C;AACrF,YAAY,EACV,KAAK,EACL,eAAe,EACf,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,iCAAiC,EACjC,uCAAuC,EACvC,sCAAsC,EACtC,qCAAqC,EACrC,uCAAuC,EACvC,kCAAkC,EAClC,oCAAoC,EACpC,uBAAuB,EACvB,+BAA+B,EAC/B,kCAAkC,EAClC,2CAA2C,EAC3C,+CAA+C,EAC/C,8CAA8C,EAC9C,mDAAmD,EACnD,sCAAsC,EACtC,uCAAuC,EACvC,iCAAiC,EACjC,oCAAoC,EACpC,oCAAoC,EACpC,yDAAyD,EACzD,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,GACzB,gCAA4B;AAC7B,OAAO,EACL,gCAAgC,EAChC,+BAA+B,EAC/B,WAAW,EACX,iBAAiB,EACjB,eAAe,GAChB,gCAA4B;AAC7B,gCAA4B;AAC5B,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,oBAAgB;AACtD,YAAY,EACV,0BAA0B,EAC1B,gCAAgC,EAChC,gCAAgC,GACjC,oBAAgB;AACjB,OAAO,EAAE,iBAAiB,EAAE,oBAAgB;AAC5C,YAAY,EAAE,aAAa,EAAE,oCAAgC"}
|
|
1
|
+
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,wBAAwB,EAAE,iDAA6C;AACrF,YAAY,EACV,KAAK,EACL,eAAe,EACf,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,iCAAiC,EACjC,uCAAuC,EACvC,sCAAsC,EACtC,qCAAqC,EACrC,uCAAuC,EACvC,kCAAkC,EAClC,oCAAoC,EACpC,uBAAuB,EACvB,+BAA+B,EAC/B,kCAAkC,EAClC,2CAA2C,EAC3C,+CAA+C,EAC/C,8CAA8C,EAC9C,mDAAmD,EACnD,sCAAsC,EACtC,uCAAuC,EACvC,iCAAiC,EACjC,oCAAoC,EACpC,oCAAoC,EACpC,yDAAyD,EACzD,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,GACzB,gCAA4B;AAC7B,OAAO,EACL,gCAAgC,EAChC,+BAA+B,EAC/B,WAAW,EACX,iBAAiB,EACjB,eAAe,GAChB,gCAA4B;AAC7B,gCAA4B;AAC5B,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,oBAAgB;AACtD,YAAY,EACV,0BAA0B,EAC1B,gCAAgC,EAChC,gCAAgC,GACjC,oBAAgB;AACjB,OAAO,EAAE,iBAAiB,EAAE,oBAAgB;AAC5C,YAAY,EAAE,aAAa,EAAE,oCAAgC;AAC7D,YAAY,EAAE,kBAAkB,EAAE,+CAA2C"}
|
package/dist/index.d.mts
CHANGED
|
@@ -6,4 +6,5 @@ export type { BlockTracker, Provider } from "./types.mjs";
|
|
|
6
6
|
export type { NetworkClientConfiguration, InfuraNetworkClientConfiguration, CustomNetworkClientConfiguration, } from "./types.mjs";
|
|
7
7
|
export { NetworkClientType } from "./types.mjs";
|
|
8
8
|
export type { NetworkClient } from "./create-network-client.mjs";
|
|
9
|
+
export type { AbstractRpcService } from "./rpc-service/abstract-rpc-service.mjs";
|
|
9
10
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,wBAAwB,EAAE,iDAA6C;AACrF,YAAY,EACV,KAAK,EACL,eAAe,EACf,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,iCAAiC,EACjC,uCAAuC,EACvC,sCAAsC,EACtC,qCAAqC,EACrC,uCAAuC,EACvC,kCAAkC,EAClC,oCAAoC,EACpC,uBAAuB,EACvB,+BAA+B,EAC/B,kCAAkC,EAClC,2CAA2C,EAC3C,+CAA+C,EAC/C,8CAA8C,EAC9C,mDAAmD,EACnD,sCAAsC,EACtC,uCAAuC,EACvC,iCAAiC,EACjC,oCAAoC,EACpC,oCAAoC,EACpC,yDAAyD,EACzD,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,GACzB,gCAA4B;AAC7B,OAAO,EACL,gCAAgC,EAChC,+BAA+B,EAC/B,WAAW,EACX,iBAAiB,EACjB,eAAe,GAChB,gCAA4B;AAC7B,gCAA4B;AAC5B,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,oBAAgB;AACtD,YAAY,EACV,0BAA0B,EAC1B,gCAAgC,EAChC,gCAAgC,GACjC,oBAAgB;AACjB,OAAO,EAAE,iBAAiB,EAAE,oBAAgB;AAC5C,YAAY,EAAE,aAAa,EAAE,oCAAgC"}
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,wBAAwB,EAAE,iDAA6C;AACrF,YAAY,EACV,KAAK,EACL,eAAe,EACf,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,iCAAiC,EACjC,uCAAuC,EACvC,sCAAsC,EACtC,qCAAqC,EACrC,uCAAuC,EACvC,kCAAkC,EAClC,oCAAoC,EACpC,uBAAuB,EACvB,+BAA+B,EAC/B,kCAAkC,EAClC,2CAA2C,EAC3C,+CAA+C,EAC/C,8CAA8C,EAC9C,mDAAmD,EACnD,sCAAsC,EACtC,uCAAuC,EACvC,iCAAiC,EACjC,oCAAoC,EACpC,oCAAoC,EACpC,yDAAyD,EACzD,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,GACzB,gCAA4B;AAC7B,OAAO,EACL,gCAAgC,EAChC,+BAA+B,EAC/B,WAAW,EACX,iBAAiB,EACjB,eAAe,GAChB,gCAA4B;AAC7B,gCAA4B;AAC5B,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,oBAAgB;AACtD,YAAY,EACV,0BAA0B,EAC1B,gCAAgC,EAChC,gCAAgC,GACjC,oBAAgB;AACjB,OAAO,EAAE,iBAAiB,EAAE,oBAAgB;AAC5C,YAAY,EAAE,aAAa,EAAE,oCAAgC;AAC7D,YAAY,EAAE,kBAAkB,EAAE,+CAA2C"}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAsCA,OAAO,EACL,gCAAgC,EAChC,+BAA+B,EAC/B,WAAW,EACX,iBAAiB,EACjB,eAAe,EAChB,gCAA4B;AAC7B,gCAA4B;AAO5B,OAAO,EAAE,iBAAiB,EAAE,oBAAgB","sourcesContent":["export type { AutoManagedNetworkClient } from './create-auto-managed-network-client';\nexport type {\n Block,\n NetworkMetadata,\n NetworkConfiguration,\n BuiltInNetworkClientId,\n CustomNetworkClientId,\n NetworkClientId,\n NetworksMetadata,\n NetworkState,\n BlockTrackerProxy,\n ProviderProxy,\n AddNetworkFields,\n UpdateNetworkFields,\n NetworkControllerStateChangeEvent,\n NetworkControllerNetworkWillChangeEvent,\n NetworkControllerNetworkDidChangeEvent,\n NetworkControllerInfuraIsBlockedEvent,\n NetworkControllerInfuraIsUnblockedEvent,\n NetworkControllerNetworkAddedEvent,\n NetworkControllerNetworkRemovedEvent,\n NetworkControllerEvents,\n NetworkControllerGetStateAction,\n NetworkControllerGetEthQueryAction,\n NetworkControllerGetNetworkClientByIdAction,\n NetworkControllerGetSelectedNetworkClientAction,\n NetworkControllerGetEIP1559CompatibilityAction,\n NetworkControllerFindNetworkClientIdByChainIdAction,\n NetworkControllerSetProviderTypeAction,\n NetworkControllerSetActiveNetworkAction,\n NetworkControllerAddNetworkAction,\n NetworkControllerRemoveNetworkAction,\n NetworkControllerUpdateNetworkAction,\n NetworkControllerGetNetworkConfigurationByNetworkClientId,\n NetworkControllerActions,\n NetworkControllerMessenger,\n NetworkControllerOptions,\n} from './NetworkController';\nexport {\n getDefaultNetworkControllerState,\n selectAvailableNetworkClientIds,\n knownKeysOf,\n NetworkController,\n RpcEndpointType,\n} from './NetworkController';\nexport * from './constants';\nexport type { BlockTracker, Provider } from './types';\nexport type {\n NetworkClientConfiguration,\n InfuraNetworkClientConfiguration,\n CustomNetworkClientConfiguration,\n} from './types';\nexport { NetworkClientType } from './types';\nexport type { NetworkClient } from './create-network-client';\n"]}
|
|
1
|
+
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAsCA,OAAO,EACL,gCAAgC,EAChC,+BAA+B,EAC/B,WAAW,EACX,iBAAiB,EACjB,eAAe,EAChB,gCAA4B;AAC7B,gCAA4B;AAO5B,OAAO,EAAE,iBAAiB,EAAE,oBAAgB","sourcesContent":["export type { AutoManagedNetworkClient } from './create-auto-managed-network-client';\nexport type {\n Block,\n NetworkMetadata,\n NetworkConfiguration,\n BuiltInNetworkClientId,\n CustomNetworkClientId,\n NetworkClientId,\n NetworksMetadata,\n NetworkState,\n BlockTrackerProxy,\n ProviderProxy,\n AddNetworkFields,\n UpdateNetworkFields,\n NetworkControllerStateChangeEvent,\n NetworkControllerNetworkWillChangeEvent,\n NetworkControllerNetworkDidChangeEvent,\n NetworkControllerInfuraIsBlockedEvent,\n NetworkControllerInfuraIsUnblockedEvent,\n NetworkControllerNetworkAddedEvent,\n NetworkControllerNetworkRemovedEvent,\n NetworkControllerEvents,\n NetworkControllerGetStateAction,\n NetworkControllerGetEthQueryAction,\n NetworkControllerGetNetworkClientByIdAction,\n NetworkControllerGetSelectedNetworkClientAction,\n NetworkControllerGetEIP1559CompatibilityAction,\n NetworkControllerFindNetworkClientIdByChainIdAction,\n NetworkControllerSetProviderTypeAction,\n NetworkControllerSetActiveNetworkAction,\n NetworkControllerAddNetworkAction,\n NetworkControllerRemoveNetworkAction,\n NetworkControllerUpdateNetworkAction,\n NetworkControllerGetNetworkConfigurationByNetworkClientId,\n NetworkControllerActions,\n NetworkControllerMessenger,\n NetworkControllerOptions,\n} from './NetworkController';\nexport {\n getDefaultNetworkControllerState,\n selectAvailableNetworkClientIds,\n knownKeysOf,\n NetworkController,\n RpcEndpointType,\n} from './NetworkController';\nexport * from './constants';\nexport type { BlockTracker, Provider } from './types';\nexport type {\n NetworkClientConfiguration,\n InfuraNetworkClientConfiguration,\n CustomNetworkClientConfiguration,\n} from './types';\nexport { NetworkClientType } from './types';\nexport type { NetworkClient } from './create-network-client';\nexport type { AbstractRpcService } from './rpc-service/abstract-rpc-service';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abstract-rpc-service.cjs","sourceRoot":"","sources":["../../src/rpc-service/abstract-rpc-service.ts"],"names":[],"mappings":"","sourcesContent":["import type { ServicePolicy } from '@metamask/controller-utils';\nimport type {\n Json,\n JsonRpcParams,\n JsonRpcRequest,\n JsonRpcResponse,\n} from '@metamask/utils';\n\nimport type { AddToCockatielEventData, FetchOptions } from './shared';\n\n/**\n * The interface for a service class responsible for making a request to an RPC\n * endpoint.\n */\nexport type AbstractRpcService = {\n /**\n * Listens for when the RPC service retries the request.\n *\n * @param listener - The callback to be called when the retry occurs.\n * @returns What {@link ServicePolicy.onRetry} returns.\n * @see {@link createServicePolicy}\n */\n onRetry(\n listener: AddToCockatielEventData<\n Parameters<ServicePolicy['onRetry']>[0],\n { endpointUrl: string }\n >,\n ): ReturnType<ServicePolicy['onRetry']>;\n\n /**\n * Listens for when the RPC service retries the request too many times in a\n * row.\n *\n * @param listener - The callback to be called when the circuit is broken.\n * @returns What {@link ServicePolicy.onBreak} returns.\n * @see {@link createServicePolicy}\n */\n onBreak(\n listener: AddToCockatielEventData<\n Parameters<ServicePolicy['onBreak']>[0],\n { endpointUrl: string }\n >,\n ): ReturnType<ServicePolicy['onBreak']>;\n\n /**\n * Listens for when the policy underlying this RPC service detects a slow\n * request.\n *\n * @param listener - The callback to be called when the request is slow.\n * @returns What {@link ServicePolicy.onDegraded} returns.\n * @see {@link createServicePolicy}\n */\n onDegraded(\n listener: AddToCockatielEventData<\n Parameters<ServicePolicy['onDegraded']>[0],\n { endpointUrl: string }\n >,\n ): ReturnType<ServicePolicy['onDegraded']>;\n\n /**\n * Makes a request to the RPC endpoint.\n */\n request<Params extends JsonRpcParams, Result extends Json>(\n jsonRpcRequest: JsonRpcRequest<Params>,\n fetchOptions?: FetchOptions,\n ): Promise<JsonRpcResponse<Result | null>>;\n};\n"]}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { ServicePolicy } from "@metamask/controller-utils";
|
|
2
|
+
import type { Json, JsonRpcParams, JsonRpcRequest, JsonRpcResponse } from "@metamask/utils";
|
|
3
|
+
import type { AddToCockatielEventData, FetchOptions } from "./shared.cjs";
|
|
4
|
+
/**
|
|
5
|
+
* The interface for a service class responsible for making a request to an RPC
|
|
6
|
+
* endpoint.
|
|
7
|
+
*/
|
|
8
|
+
export type AbstractRpcService = {
|
|
9
|
+
/**
|
|
10
|
+
* Listens for when the RPC service retries the request.
|
|
11
|
+
*
|
|
12
|
+
* @param listener - The callback to be called when the retry occurs.
|
|
13
|
+
* @returns What {@link ServicePolicy.onRetry} returns.
|
|
14
|
+
* @see {@link createServicePolicy}
|
|
15
|
+
*/
|
|
16
|
+
onRetry(listener: AddToCockatielEventData<Parameters<ServicePolicy['onRetry']>[0], {
|
|
17
|
+
endpointUrl: string;
|
|
18
|
+
}>): ReturnType<ServicePolicy['onRetry']>;
|
|
19
|
+
/**
|
|
20
|
+
* Listens for when the RPC service retries the request too many times in a
|
|
21
|
+
* row.
|
|
22
|
+
*
|
|
23
|
+
* @param listener - The callback to be called when the circuit is broken.
|
|
24
|
+
* @returns What {@link ServicePolicy.onBreak} returns.
|
|
25
|
+
* @see {@link createServicePolicy}
|
|
26
|
+
*/
|
|
27
|
+
onBreak(listener: AddToCockatielEventData<Parameters<ServicePolicy['onBreak']>[0], {
|
|
28
|
+
endpointUrl: string;
|
|
29
|
+
}>): ReturnType<ServicePolicy['onBreak']>;
|
|
30
|
+
/**
|
|
31
|
+
* Listens for when the policy underlying this RPC service detects a slow
|
|
32
|
+
* request.
|
|
33
|
+
*
|
|
34
|
+
* @param listener - The callback to be called when the request is slow.
|
|
35
|
+
* @returns What {@link ServicePolicy.onDegraded} returns.
|
|
36
|
+
* @see {@link createServicePolicy}
|
|
37
|
+
*/
|
|
38
|
+
onDegraded(listener: AddToCockatielEventData<Parameters<ServicePolicy['onDegraded']>[0], {
|
|
39
|
+
endpointUrl: string;
|
|
40
|
+
}>): ReturnType<ServicePolicy['onDegraded']>;
|
|
41
|
+
/**
|
|
42
|
+
* Makes a request to the RPC endpoint.
|
|
43
|
+
*/
|
|
44
|
+
request<Params extends JsonRpcParams, Result extends Json>(jsonRpcRequest: JsonRpcRequest<Params>, fetchOptions?: FetchOptions): Promise<JsonRpcResponse<Result | null>>;
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=abstract-rpc-service.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abstract-rpc-service.d.cts","sourceRoot":"","sources":["../../src/rpc-service/abstract-rpc-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,mCAAmC;AAChE,OAAO,KAAK,EACV,IAAI,EACJ,aAAa,EACb,cAAc,EACd,eAAe,EAChB,wBAAwB;AAEzB,OAAO,KAAK,EAAE,uBAAuB,EAAE,YAAY,EAAE,qBAAiB;AAEtE;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;;;;;OAMG;IACH,OAAO,CACL,QAAQ,EAAE,uBAAuB,CAC/B,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EACvC;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CACxB,GACA,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;IAExC;;;;;;;OAOG;IACH,OAAO,CACL,QAAQ,EAAE,uBAAuB,CAC/B,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EACvC;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CACxB,GACA,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;IAExC;;;;;;;OAOG;IACH,UAAU,CACR,QAAQ,EAAE,uBAAuB,CAC/B,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAC1C;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CACxB,GACA,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC;IAE3C;;OAEG;IACH,OAAO,CAAC,MAAM,SAAS,aAAa,EAAE,MAAM,SAAS,IAAI,EACvD,cAAc,EAAE,cAAc,CAAC,MAAM,CAAC,EACtC,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;CAC5C,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { ServicePolicy } from "@metamask/controller-utils";
|
|
2
|
+
import type { Json, JsonRpcParams, JsonRpcRequest, JsonRpcResponse } from "@metamask/utils";
|
|
3
|
+
import type { AddToCockatielEventData, FetchOptions } from "./shared.mjs";
|
|
4
|
+
/**
|
|
5
|
+
* The interface for a service class responsible for making a request to an RPC
|
|
6
|
+
* endpoint.
|
|
7
|
+
*/
|
|
8
|
+
export type AbstractRpcService = {
|
|
9
|
+
/**
|
|
10
|
+
* Listens for when the RPC service retries the request.
|
|
11
|
+
*
|
|
12
|
+
* @param listener - The callback to be called when the retry occurs.
|
|
13
|
+
* @returns What {@link ServicePolicy.onRetry} returns.
|
|
14
|
+
* @see {@link createServicePolicy}
|
|
15
|
+
*/
|
|
16
|
+
onRetry(listener: AddToCockatielEventData<Parameters<ServicePolicy['onRetry']>[0], {
|
|
17
|
+
endpointUrl: string;
|
|
18
|
+
}>): ReturnType<ServicePolicy['onRetry']>;
|
|
19
|
+
/**
|
|
20
|
+
* Listens for when the RPC service retries the request too many times in a
|
|
21
|
+
* row.
|
|
22
|
+
*
|
|
23
|
+
* @param listener - The callback to be called when the circuit is broken.
|
|
24
|
+
* @returns What {@link ServicePolicy.onBreak} returns.
|
|
25
|
+
* @see {@link createServicePolicy}
|
|
26
|
+
*/
|
|
27
|
+
onBreak(listener: AddToCockatielEventData<Parameters<ServicePolicy['onBreak']>[0], {
|
|
28
|
+
endpointUrl: string;
|
|
29
|
+
}>): ReturnType<ServicePolicy['onBreak']>;
|
|
30
|
+
/**
|
|
31
|
+
* Listens for when the policy underlying this RPC service detects a slow
|
|
32
|
+
* request.
|
|
33
|
+
*
|
|
34
|
+
* @param listener - The callback to be called when the request is slow.
|
|
35
|
+
* @returns What {@link ServicePolicy.onDegraded} returns.
|
|
36
|
+
* @see {@link createServicePolicy}
|
|
37
|
+
*/
|
|
38
|
+
onDegraded(listener: AddToCockatielEventData<Parameters<ServicePolicy['onDegraded']>[0], {
|
|
39
|
+
endpointUrl: string;
|
|
40
|
+
}>): ReturnType<ServicePolicy['onDegraded']>;
|
|
41
|
+
/**
|
|
42
|
+
* Makes a request to the RPC endpoint.
|
|
43
|
+
*/
|
|
44
|
+
request<Params extends JsonRpcParams, Result extends Json>(jsonRpcRequest: JsonRpcRequest<Params>, fetchOptions?: FetchOptions): Promise<JsonRpcResponse<Result | null>>;
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=abstract-rpc-service.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abstract-rpc-service.d.mts","sourceRoot":"","sources":["../../src/rpc-service/abstract-rpc-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,mCAAmC;AAChE,OAAO,KAAK,EACV,IAAI,EACJ,aAAa,EACb,cAAc,EACd,eAAe,EAChB,wBAAwB;AAEzB,OAAO,KAAK,EAAE,uBAAuB,EAAE,YAAY,EAAE,qBAAiB;AAEtE;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;;;;;OAMG;IACH,OAAO,CACL,QAAQ,EAAE,uBAAuB,CAC/B,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EACvC;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CACxB,GACA,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;IAExC;;;;;;;OAOG;IACH,OAAO,CACL,QAAQ,EAAE,uBAAuB,CAC/B,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EACvC;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CACxB,GACA,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;IAExC;;;;;;;OAOG;IACH,UAAU,CACR,QAAQ,EAAE,uBAAuB,CAC/B,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAC1C;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CACxB,GACA,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC;IAE3C;;OAEG;IACH,OAAO,CAAC,MAAM,SAAS,aAAa,EAAE,MAAM,SAAS,IAAI,EACvD,cAAc,EAAE,cAAc,CAAC,MAAM,CAAC,EACtC,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;CAC5C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abstract-rpc-service.mjs","sourceRoot":"","sources":["../../src/rpc-service/abstract-rpc-service.ts"],"names":[],"mappings":"","sourcesContent":["import type { ServicePolicy } from '@metamask/controller-utils';\nimport type {\n Json,\n JsonRpcParams,\n JsonRpcRequest,\n JsonRpcResponse,\n} from '@metamask/utils';\n\nimport type { AddToCockatielEventData, FetchOptions } from './shared';\n\n/**\n * The interface for a service class responsible for making a request to an RPC\n * endpoint.\n */\nexport type AbstractRpcService = {\n /**\n * Listens for when the RPC service retries the request.\n *\n * @param listener - The callback to be called when the retry occurs.\n * @returns What {@link ServicePolicy.onRetry} returns.\n * @see {@link createServicePolicy}\n */\n onRetry(\n listener: AddToCockatielEventData<\n Parameters<ServicePolicy['onRetry']>[0],\n { endpointUrl: string }\n >,\n ): ReturnType<ServicePolicy['onRetry']>;\n\n /**\n * Listens for when the RPC service retries the request too many times in a\n * row.\n *\n * @param listener - The callback to be called when the circuit is broken.\n * @returns What {@link ServicePolicy.onBreak} returns.\n * @see {@link createServicePolicy}\n */\n onBreak(\n listener: AddToCockatielEventData<\n Parameters<ServicePolicy['onBreak']>[0],\n { endpointUrl: string }\n >,\n ): ReturnType<ServicePolicy['onBreak']>;\n\n /**\n * Listens for when the policy underlying this RPC service detects a slow\n * request.\n *\n * @param listener - The callback to be called when the request is slow.\n * @returns What {@link ServicePolicy.onDegraded} returns.\n * @see {@link createServicePolicy}\n */\n onDegraded(\n listener: AddToCockatielEventData<\n Parameters<ServicePolicy['onDegraded']>[0],\n { endpointUrl: string }\n >,\n ): ReturnType<ServicePolicy['onDegraded']>;\n\n /**\n * Makes a request to the RPC endpoint.\n */\n request<Params extends JsonRpcParams, Result extends Json>(\n jsonRpcRequest: JsonRpcRequest<Params>,\n fetchOptions?: FetchOptions,\n ): Promise<JsonRpcResponse<Result | null>>;\n};\n"]}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
5
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
6
|
+
};
|
|
7
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
8
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
9
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
10
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
11
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
12
|
+
};
|
|
13
|
+
var _RpcServiceChain_instances, _RpcServiceChain_services, _RpcServiceChain_buildRpcServiceChain;
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.RpcServiceChain = void 0;
|
|
16
|
+
const rpc_service_1 = require("./rpc-service.cjs");
|
|
17
|
+
/**
|
|
18
|
+
* This class constructs a chain of RpcService objects which represent a
|
|
19
|
+
* particular network. The first object in the chain is intended to be the primary
|
|
20
|
+
* way of reaching the network and the remaining objects are used as failovers.
|
|
21
|
+
*/
|
|
22
|
+
class RpcServiceChain {
|
|
23
|
+
/**
|
|
24
|
+
* Constructs a new RpcServiceChain object.
|
|
25
|
+
*
|
|
26
|
+
* @param args - The arguments.
|
|
27
|
+
* @param args.fetch - A function that can be used to make an HTTP request.
|
|
28
|
+
* If your JavaScript environment supports `fetch` natively, you'll probably
|
|
29
|
+
* want to pass that; otherwise you can pass an equivalent (such as `fetch`
|
|
30
|
+
* via `node-fetch`).
|
|
31
|
+
* @param args.btoa - A function that can be used to convert a binary string
|
|
32
|
+
* into base-64. Used to encode authorization credentials.
|
|
33
|
+
* @param args.serviceConfigurations - The options for the RPC services that
|
|
34
|
+
* you want to construct. This class takes a set of configuration objects and
|
|
35
|
+
* not literal `RpcService`s to account for the possibility that we may want
|
|
36
|
+
* to send request headers to official Infura endpoints and not failovers.
|
|
37
|
+
*/
|
|
38
|
+
constructor({ fetch: givenFetch, btoa: givenBtoa, serviceConfigurations, }) {
|
|
39
|
+
_RpcServiceChain_instances.add(this);
|
|
40
|
+
_RpcServiceChain_services.set(this, void 0);
|
|
41
|
+
__classPrivateFieldSet(this, _RpcServiceChain_services, __classPrivateFieldGet(this, _RpcServiceChain_instances, "m", _RpcServiceChain_buildRpcServiceChain).call(this, {
|
|
42
|
+
serviceConfigurations,
|
|
43
|
+
fetch: givenFetch,
|
|
44
|
+
btoa: givenBtoa,
|
|
45
|
+
}), "f");
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Listens for when any of the RPC services retry a request.
|
|
49
|
+
*
|
|
50
|
+
* @param listener - The callback to be called when the retry occurs.
|
|
51
|
+
* @returns What {@link RpcService.onRetry} returns.
|
|
52
|
+
*/
|
|
53
|
+
onRetry(listener) {
|
|
54
|
+
const disposables = __classPrivateFieldGet(this, _RpcServiceChain_services, "f").map((service) => service.onRetry(listener));
|
|
55
|
+
return {
|
|
56
|
+
dispose() {
|
|
57
|
+
disposables.forEach((disposable) => disposable.dispose());
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Listens for when any of the RPC services retry the request too many times
|
|
63
|
+
* in a row.
|
|
64
|
+
*
|
|
65
|
+
* @param listener - The callback to be called when the retry occurs.
|
|
66
|
+
* @returns What {@link RpcService.onBreak} returns.
|
|
67
|
+
*/
|
|
68
|
+
onBreak(listener) {
|
|
69
|
+
const disposables = __classPrivateFieldGet(this, _RpcServiceChain_services, "f").map((service) => service.onBreak(listener));
|
|
70
|
+
return {
|
|
71
|
+
dispose() {
|
|
72
|
+
disposables.forEach((disposable) => disposable.dispose());
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Listens for when any of the RPC services send a slow request.
|
|
78
|
+
*
|
|
79
|
+
* @param listener - The callback to be called when the retry occurs.
|
|
80
|
+
* @returns What {@link RpcService.onRetry} returns.
|
|
81
|
+
*/
|
|
82
|
+
onDegraded(listener) {
|
|
83
|
+
const disposables = __classPrivateFieldGet(this, _RpcServiceChain_services, "f").map((service) => service.onDegraded(listener));
|
|
84
|
+
return {
|
|
85
|
+
dispose() {
|
|
86
|
+
disposables.forEach((disposable) => disposable.dispose());
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
async request(jsonRpcRequest, fetchOptions = {}) {
|
|
91
|
+
return __classPrivateFieldGet(this, _RpcServiceChain_services, "f")[0].request(jsonRpcRequest, fetchOptions);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.RpcServiceChain = RpcServiceChain;
|
|
95
|
+
_RpcServiceChain_services = new WeakMap(), _RpcServiceChain_instances = new WeakSet(), _RpcServiceChain_buildRpcServiceChain = function _RpcServiceChain_buildRpcServiceChain({ serviceConfigurations, fetch: givenFetch, btoa: givenBtoa, }) {
|
|
96
|
+
return [...serviceConfigurations]
|
|
97
|
+
.reverse()
|
|
98
|
+
.reduce((workingServices, serviceConfiguration, index) => {
|
|
99
|
+
const failoverService = index > 0 ? workingServices[0] : undefined;
|
|
100
|
+
const service = new rpc_service_1.RpcService({
|
|
101
|
+
fetch: givenFetch,
|
|
102
|
+
btoa: givenBtoa,
|
|
103
|
+
...serviceConfiguration,
|
|
104
|
+
failoverService,
|
|
105
|
+
});
|
|
106
|
+
return [service, ...workingServices];
|
|
107
|
+
}, []);
|
|
108
|
+
};
|
|
109
|
+
//# sourceMappingURL=rpc-service-chain.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc-service-chain.cjs","sourceRoot":"","sources":["../../src/rpc-service/rpc-service-chain.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAQA,mDAA2C;AAkB3C;;;;GAIG;AACH,MAAa,eAAe;IAG1B;;;;;;;;;;;;;;OAcG;IACH,YAAY,EACV,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,SAAS,EACf,qBAAqB,GAKtB;;QAzBQ,4CAAwB;QA0B/B,uBAAA,IAAI,6BAAa,uBAAA,IAAI,yEAAsB,MAA1B,IAAI,EAAuB;YAC1C,qBAAqB;YACrB,KAAK,EAAE,UAAU;YACjB,IAAI,EAAE,SAAS;SAChB,CAAC,MAAA,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,OAAO,CAAC,QAA8C;QACpD,MAAM,WAAW,GAAG,uBAAA,IAAI,iCAAU,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACjD,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAC1B,CAAC;QAEF,OAAO;YACL,OAAO;gBACL,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5D,CAAC;SACF,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,OAAO,CAAC,QAA8C;QACpD,MAAM,WAAW,GAAG,uBAAA,IAAI,iCAAU,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACjD,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAC1B,CAAC;QAEF,OAAO;YACL,OAAO;gBACL,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5D,CAAC;SACF,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAC,QAAiD;QAC1D,MAAM,WAAW,GAAG,uBAAA,IAAI,iCAAU,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACjD,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAC7B,CAAC;QAEF,OAAO;YACL,OAAO;gBACL,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5D,CAAC;SACF,CAAC;IACJ,CAAC;IAgDD,KAAK,CAAC,OAAO,CACX,cAAsC,EACtC,eAA6B,EAAE;QAE/B,OAAO,uBAAA,IAAI,iCAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;IACjE,CAAC;CAqCF;AAjLD,0CAiLC;8KAtBuB,EACpB,qBAAqB,EACrB,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,SAAS,GAKhB;IACC,OAAO,CAAC,GAAG,qBAAqB,CAAC;SAC9B,OAAO,EAAE;SACT,MAAM,CAAC,CAAC,eAA6B,EAAE,oBAAoB,EAAE,KAAK,EAAE,EAAE;QACrE,MAAM,eAAe,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACnE,MAAM,OAAO,GAAG,IAAI,wBAAU,CAAC;YAC7B,KAAK,EAAE,UAAU;YACjB,IAAI,EAAE,SAAS;YACf,GAAG,oBAAoB;YACvB,eAAe;SAChB,CAAC,CAAC;QACH,OAAO,CAAC,OAAO,EAAE,GAAG,eAAe,CAAC,CAAC;IACvC,CAAC,EAAE,EAAE,CAAC,CAAC;AACX,CAAC","sourcesContent":["import type {\n Json,\n JsonRpcParams,\n JsonRpcRequest,\n JsonRpcResponse,\n} from '@metamask/utils';\n\nimport type { AbstractRpcService } from './abstract-rpc-service';\nimport { RpcService } from './rpc-service';\nimport type { FetchOptions } from './shared';\n\n/**\n * The subset of options accepted by the RpcServiceChain constructor which\n * represent a single endpoint.\n */\ntype RpcServiceConfiguration = {\n /**\n * The URL of the endpoint.\n */\n endpointUrl: URL | string;\n /**\n * The options to pass to `fetch` when making the request to the endpoint.\n */\n fetchOptions?: FetchOptions;\n};\n\n/**\n * This class constructs a chain of RpcService objects which represent a\n * particular network. The first object in the chain is intended to be the primary\n * way of reaching the network and the remaining objects are used as failovers.\n */\nexport class RpcServiceChain implements AbstractRpcService {\n readonly #services: RpcService[];\n\n /**\n * Constructs a new RpcServiceChain object.\n *\n * @param args - The arguments.\n * @param args.fetch - A function that can be used to make an HTTP request.\n * If your JavaScript environment supports `fetch` natively, you'll probably\n * want to pass that; otherwise you can pass an equivalent (such as `fetch`\n * via `node-fetch`).\n * @param args.btoa - A function that can be used to convert a binary string\n * into base-64. Used to encode authorization credentials.\n * @param args.serviceConfigurations - The options for the RPC services that\n * you want to construct. This class takes a set of configuration objects and\n * not literal `RpcService`s to account for the possibility that we may want\n * to send request headers to official Infura endpoints and not failovers.\n */\n constructor({\n fetch: givenFetch,\n btoa: givenBtoa,\n serviceConfigurations,\n }: {\n fetch: typeof fetch;\n btoa: typeof btoa;\n serviceConfigurations: RpcServiceConfiguration[];\n }) {\n this.#services = this.#buildRpcServiceChain({\n serviceConfigurations,\n fetch: givenFetch,\n btoa: givenBtoa,\n });\n }\n\n /**\n * Listens for when any of the RPC services retry a request.\n *\n * @param listener - The callback to be called when the retry occurs.\n * @returns What {@link RpcService.onRetry} returns.\n */\n onRetry(listener: Parameters<RpcService['onRetry']>[0]) {\n const disposables = this.#services.map((service) =>\n service.onRetry(listener),\n );\n\n return {\n dispose() {\n disposables.forEach((disposable) => disposable.dispose());\n },\n };\n }\n\n /**\n * Listens for when any of the RPC services retry the request too many times\n * in a row.\n *\n * @param listener - The callback to be called when the retry occurs.\n * @returns What {@link RpcService.onBreak} returns.\n */\n onBreak(listener: Parameters<RpcService['onBreak']>[0]) {\n const disposables = this.#services.map((service) =>\n service.onBreak(listener),\n );\n\n return {\n dispose() {\n disposables.forEach((disposable) => disposable.dispose());\n },\n };\n }\n\n /**\n * Listens for when any of the RPC services send a slow request.\n *\n * @param listener - The callback to be called when the retry occurs.\n * @returns What {@link RpcService.onRetry} returns.\n */\n onDegraded(listener: Parameters<RpcService['onDegraded']>[0]) {\n const disposables = this.#services.map((service) =>\n service.onDegraded(listener),\n );\n\n return {\n dispose() {\n disposables.forEach((disposable) => disposable.dispose());\n },\n };\n }\n\n /**\n * Makes a request to the first RPC service in the chain. If this service is\n * down, then the request is forwarded to the next service in the chain, etc.\n *\n * This overload is specifically designed for `eth_getBlockByNumber`, which\n * can return a `result` of `null` despite an expected `Result` being\n * provided.\n *\n * @param jsonRpcRequest - The JSON-RPC request to send to the endpoint.\n * @param fetchOptions - An options bag for {@link fetch} which further\n * specifies the request.\n * @returns The decoded JSON-RPC response from the endpoint.\n * @throws A \"method not found\" error if the response status is 405.\n * @throws A rate limiting error if the response HTTP status is 429.\n * @throws A timeout error if the response HTTP status is 503 or 504.\n * @throws A generic error if the response HTTP status is not 2xx but also not\n * 405, 429, 503, or 504.\n */\n async request<Params extends JsonRpcParams, Result extends Json>(\n jsonRpcRequest: JsonRpcRequest<Params> & { method: 'eth_getBlockByNumber' },\n fetchOptions?: FetchOptions,\n ): Promise<JsonRpcResponse<Result> | JsonRpcResponse<null>>;\n\n /**\n * Makes a request to the first RPC service in the chain. If this service is\n * down, then the request is forwarded to the next service in the chain, etc.\n *\n * This overload is designed for all RPC methods except for\n * `eth_getBlockByNumber`, which are expected to return a `result` of the\n * expected `Result`.\n *\n * @param jsonRpcRequest - The JSON-RPC request to send to the endpoint.\n * @param fetchOptions - An options bag for {@link fetch} which further\n * specifies the request.\n * @returns The decoded JSON-RPC response from the endpoint.\n * @throws A \"method not found\" error if the response status is 405.\n * @throws A rate limiting error if the response HTTP status is 429.\n * @throws A timeout error if the response HTTP status is 503 or 504.\n * @throws A generic error if the response HTTP status is not 2xx but also not\n * 405, 429, 503, or 504.\n */\n async request<Params extends JsonRpcParams, Result extends Json>(\n jsonRpcRequest: JsonRpcRequest<Params>,\n fetchOptions?: FetchOptions,\n ): Promise<JsonRpcResponse<Result>>;\n\n async request<Params extends JsonRpcParams, Result extends Json>(\n jsonRpcRequest: JsonRpcRequest<Params>,\n fetchOptions: FetchOptions = {},\n ): Promise<JsonRpcResponse<Result | null>> {\n return this.#services[0].request(jsonRpcRequest, fetchOptions);\n }\n\n /**\n * Constructs the chain of RPC services. The second RPC service is\n * configured as the failover for the first, the third service is\n * configured as the failover for the second, etc.\n *\n * @param args - The arguments.\n * @param args.serviceConfigurations - The options for the RPC services that\n * you want to construct.\n * @param args.fetch - A function that can be used to make an HTTP request.\n * @param args.btoa - A function that can be used to convert a binary string\n * into base-64. Used to encode authorization credentials.\n * @returns The constructed chain of RPC services.\n */\n #buildRpcServiceChain({\n serviceConfigurations,\n fetch: givenFetch,\n btoa: givenBtoa,\n }: {\n serviceConfigurations: RpcServiceConfiguration[];\n fetch: typeof fetch;\n btoa: typeof btoa;\n }): RpcService[] {\n return [...serviceConfigurations]\n .reverse()\n .reduce((workingServices: RpcService[], serviceConfiguration, index) => {\n const failoverService = index > 0 ? workingServices[0] : undefined;\n const service = new RpcService({\n fetch: givenFetch,\n btoa: givenBtoa,\n ...serviceConfiguration,\n failoverService,\n });\n return [service, ...workingServices];\n }, []);\n }\n}\n"]}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import type { Json, JsonRpcParams, JsonRpcRequest, JsonRpcResponse } from "@metamask/utils";
|
|
2
|
+
import type { AbstractRpcService } from "./abstract-rpc-service.cjs";
|
|
3
|
+
import { RpcService } from "./rpc-service.cjs";
|
|
4
|
+
import type { FetchOptions } from "./shared.cjs";
|
|
5
|
+
/**
|
|
6
|
+
* The subset of options accepted by the RpcServiceChain constructor which
|
|
7
|
+
* represent a single endpoint.
|
|
8
|
+
*/
|
|
9
|
+
type RpcServiceConfiguration = {
|
|
10
|
+
/**
|
|
11
|
+
* The URL of the endpoint.
|
|
12
|
+
*/
|
|
13
|
+
endpointUrl: URL | string;
|
|
14
|
+
/**
|
|
15
|
+
* The options to pass to `fetch` when making the request to the endpoint.
|
|
16
|
+
*/
|
|
17
|
+
fetchOptions?: FetchOptions;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* This class constructs a chain of RpcService objects which represent a
|
|
21
|
+
* particular network. The first object in the chain is intended to be the primary
|
|
22
|
+
* way of reaching the network and the remaining objects are used as failovers.
|
|
23
|
+
*/
|
|
24
|
+
export declare class RpcServiceChain implements AbstractRpcService {
|
|
25
|
+
#private;
|
|
26
|
+
/**
|
|
27
|
+
* Constructs a new RpcServiceChain object.
|
|
28
|
+
*
|
|
29
|
+
* @param args - The arguments.
|
|
30
|
+
* @param args.fetch - A function that can be used to make an HTTP request.
|
|
31
|
+
* If your JavaScript environment supports `fetch` natively, you'll probably
|
|
32
|
+
* want to pass that; otherwise you can pass an equivalent (such as `fetch`
|
|
33
|
+
* via `node-fetch`).
|
|
34
|
+
* @param args.btoa - A function that can be used to convert a binary string
|
|
35
|
+
* into base-64. Used to encode authorization credentials.
|
|
36
|
+
* @param args.serviceConfigurations - The options for the RPC services that
|
|
37
|
+
* you want to construct. This class takes a set of configuration objects and
|
|
38
|
+
* not literal `RpcService`s to account for the possibility that we may want
|
|
39
|
+
* to send request headers to official Infura endpoints and not failovers.
|
|
40
|
+
*/
|
|
41
|
+
constructor({ fetch: givenFetch, btoa: givenBtoa, serviceConfigurations, }: {
|
|
42
|
+
fetch: typeof fetch;
|
|
43
|
+
btoa: typeof btoa;
|
|
44
|
+
serviceConfigurations: RpcServiceConfiguration[];
|
|
45
|
+
});
|
|
46
|
+
/**
|
|
47
|
+
* Listens for when any of the RPC services retry a request.
|
|
48
|
+
*
|
|
49
|
+
* @param listener - The callback to be called when the retry occurs.
|
|
50
|
+
* @returns What {@link RpcService.onRetry} returns.
|
|
51
|
+
*/
|
|
52
|
+
onRetry(listener: Parameters<RpcService['onRetry']>[0]): {
|
|
53
|
+
dispose(): void;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Listens for when any of the RPC services retry the request too many times
|
|
57
|
+
* in a row.
|
|
58
|
+
*
|
|
59
|
+
* @param listener - The callback to be called when the retry occurs.
|
|
60
|
+
* @returns What {@link RpcService.onBreak} returns.
|
|
61
|
+
*/
|
|
62
|
+
onBreak(listener: Parameters<RpcService['onBreak']>[0]): {
|
|
63
|
+
dispose(): void;
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Listens for when any of the RPC services send a slow request.
|
|
67
|
+
*
|
|
68
|
+
* @param listener - The callback to be called when the retry occurs.
|
|
69
|
+
* @returns What {@link RpcService.onRetry} returns.
|
|
70
|
+
*/
|
|
71
|
+
onDegraded(listener: Parameters<RpcService['onDegraded']>[0]): {
|
|
72
|
+
dispose(): void;
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Makes a request to the first RPC service in the chain. If this service is
|
|
76
|
+
* down, then the request is forwarded to the next service in the chain, etc.
|
|
77
|
+
*
|
|
78
|
+
* This overload is specifically designed for `eth_getBlockByNumber`, which
|
|
79
|
+
* can return a `result` of `null` despite an expected `Result` being
|
|
80
|
+
* provided.
|
|
81
|
+
*
|
|
82
|
+
* @param jsonRpcRequest - The JSON-RPC request to send to the endpoint.
|
|
83
|
+
* @param fetchOptions - An options bag for {@link fetch} which further
|
|
84
|
+
* specifies the request.
|
|
85
|
+
* @returns The decoded JSON-RPC response from the endpoint.
|
|
86
|
+
* @throws A "method not found" error if the response status is 405.
|
|
87
|
+
* @throws A rate limiting error if the response HTTP status is 429.
|
|
88
|
+
* @throws A timeout error if the response HTTP status is 503 or 504.
|
|
89
|
+
* @throws A generic error if the response HTTP status is not 2xx but also not
|
|
90
|
+
* 405, 429, 503, or 504.
|
|
91
|
+
*/
|
|
92
|
+
request<Params extends JsonRpcParams, Result extends Json>(jsonRpcRequest: JsonRpcRequest<Params> & {
|
|
93
|
+
method: 'eth_getBlockByNumber';
|
|
94
|
+
}, fetchOptions?: FetchOptions): Promise<JsonRpcResponse<Result> | JsonRpcResponse<null>>;
|
|
95
|
+
/**
|
|
96
|
+
* Makes a request to the first RPC service in the chain. If this service is
|
|
97
|
+
* down, then the request is forwarded to the next service in the chain, etc.
|
|
98
|
+
*
|
|
99
|
+
* This overload is designed for all RPC methods except for
|
|
100
|
+
* `eth_getBlockByNumber`, which are expected to return a `result` of the
|
|
101
|
+
* expected `Result`.
|
|
102
|
+
*
|
|
103
|
+
* @param jsonRpcRequest - The JSON-RPC request to send to the endpoint.
|
|
104
|
+
* @param fetchOptions - An options bag for {@link fetch} which further
|
|
105
|
+
* specifies the request.
|
|
106
|
+
* @returns The decoded JSON-RPC response from the endpoint.
|
|
107
|
+
* @throws A "method not found" error if the response status is 405.
|
|
108
|
+
* @throws A rate limiting error if the response HTTP status is 429.
|
|
109
|
+
* @throws A timeout error if the response HTTP status is 503 or 504.
|
|
110
|
+
* @throws A generic error if the response HTTP status is not 2xx but also not
|
|
111
|
+
* 405, 429, 503, or 504.
|
|
112
|
+
*/
|
|
113
|
+
request<Params extends JsonRpcParams, Result extends Json>(jsonRpcRequest: JsonRpcRequest<Params>, fetchOptions?: FetchOptions): Promise<JsonRpcResponse<Result>>;
|
|
114
|
+
}
|
|
115
|
+
export {};
|
|
116
|
+
//# sourceMappingURL=rpc-service-chain.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc-service-chain.d.cts","sourceRoot":"","sources":["../../src/rpc-service/rpc-service-chain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,IAAI,EACJ,aAAa,EACb,cAAc,EACd,eAAe,EAChB,wBAAwB;AAEzB,OAAO,KAAK,EAAE,kBAAkB,EAAE,mCAA+B;AACjE,OAAO,EAAE,UAAU,EAAE,0BAAsB;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAiB;AAE7C;;;GAGG;AACH,KAAK,uBAAuB,GAAG;IAC7B;;OAEG;IACH,WAAW,EAAE,GAAG,GAAG,MAAM,CAAC;IAC1B;;OAEG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B,CAAC;AAEF;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,kBAAkB;;IAGxD;;;;;;;;;;;;;;OAcG;gBACS,EACV,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,SAAS,EACf,qBAAqB,GACtB,EAAE;QACD,KAAK,EAAE,OAAO,KAAK,CAAC;QACpB,IAAI,EAAE,OAAO,IAAI,CAAC;QAClB,qBAAqB,EAAE,uBAAuB,EAAE,CAAC;KAClD;IAQD;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;;;IAYtD;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;;;IAYtD;;;;;OAKG;IACH,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;;;IAY5D;;;;;;;;;;;;;;;;;OAiBG;IACG,OAAO,CAAC,MAAM,SAAS,aAAa,EAAE,MAAM,SAAS,IAAI,EAC7D,cAAc,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG;QAAE,MAAM,EAAE,sBAAsB,CAAA;KAAE,EAC3E,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAE3D;;;;;;;;;;;;;;;;;OAiBG;IACG,OAAO,CAAC,MAAM,SAAS,aAAa,EAAE,MAAM,SAAS,IAAI,EAC7D,cAAc,EAAE,cAAc,CAAC,MAAM,CAAC,EACtC,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;CA4CpC"}
|