@metamask/transaction-controller 68.0.0 → 68.1.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.
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getChainId = exports.getNetworkClientId = exports.rpcRequest = exports.getProvider = void 0;
4
+ const network_controller_1 = require("@metamask/network-controller");
4
5
  const logger_1 = require("../logger.cjs");
5
6
  const log = (0, logger_1.createModuleLogger)(logger_1.projectLogger, 'provider');
6
7
  /**
@@ -19,7 +20,7 @@ function getProvider({ messenger, chainId, networkClientId, }) {
19
20
  chainId,
20
21
  networkClientId,
21
22
  });
22
- return messenger.call('NetworkController:getNetworkClientById', resolvedId).provider;
23
+ return getNetworkClient(messenger, resolvedId).provider;
23
24
  }
24
25
  exports.getProvider = getProvider;
25
26
  /**
@@ -34,8 +35,23 @@ exports.getProvider = getProvider;
34
35
  * @returns The RPC response.
35
36
  */
36
37
  async function rpcRequest({ messenger, chainId, networkClientId, method, params, }) {
37
- const provider = getProvider({ messenger, chainId, networkClientId });
38
- const response = await provider.request({ method, params });
38
+ const resolvedNetworkClientId = getNetworkClientId({
39
+ messenger,
40
+ chainId,
41
+ networkClientId,
42
+ });
43
+ const networkClient = getNetworkClient(messenger, resolvedNetworkClientId);
44
+ const { provider } = networkClient;
45
+ let response;
46
+ try {
47
+ response = await provider.request({ method, params });
48
+ }
49
+ catch (error) {
50
+ throwWithRpcContext(error, {
51
+ method,
52
+ networkClient,
53
+ });
54
+ }
39
55
  log(method, { params, response });
40
56
  return response;
41
57
  }
@@ -71,4 +87,20 @@ function getChainId({ messenger, networkClientId, }) {
71
87
  return messenger.call('NetworkController:getNetworkClientById', networkClientId).configuration.chainId;
72
88
  }
73
89
  exports.getChainId = getChainId;
90
+ function getNetworkClient(messenger, networkClientId) {
91
+ return messenger.call('NetworkController:getNetworkClientById', networkClientId);
92
+ }
93
+ function throwWithRpcContext(error, { method, networkClient, }) {
94
+ const errorObject = error;
95
+ const message = errorObject.data?.message ?? errorObject.message;
96
+ const prefix = `RPC ${networkClient.configuration.chainId} ${getEndpointLabel(networkClient)} ${method}`;
97
+ const prefixedMessage = `${prefix}: ${message}`;
98
+ errorObject.message = prefixedMessage;
99
+ throw error;
100
+ }
101
+ function getEndpointLabel(networkClient) {
102
+ return networkClient.configuration.type === network_controller_1.NetworkClientType.Infura
103
+ ? 'Infura'
104
+ : 'Custom';
105
+ }
74
106
  //# sourceMappingURL=provider.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider.cjs","sourceRoot":"","sources":["../../src/utils/provider.ts"],"names":[],"mappings":";;;AAGA,0CAA8D;AAG9D,MAAM,GAAG,GAAG,IAAA,2BAAkB,EAAC,sBAAa,EAAE,UAAU,CAAC,CAAC;AAI1D;;;;;;;;;GASG;AACH,SAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,OAAO,EACP,eAAe,GAKhB;IACC,MAAM,UAAU,GAAG,kBAAkB,CAAC;QACpC,SAAS;QACT,OAAO;QACP,eAAe;KAChB,CAAC,CAAC;IACH,OACE,SAAS,CAAC,IAAI,CAAC,wCAAwC,EAAE,UAAU,CAGpE,CAAC,QAAQ,CAAC;AACb,CAAC;AAnBD,kCAmBC;AAED;;;;;;;;;;GAUG;AACI,KAAK,UAAU,UAAU,CAAC,EAC/B,SAAS,EACT,OAAO,EACP,eAAe,EACf,MAAM,EACN,MAAM,GAOP;IACC,MAAM,QAAQ,GAAG,WAAW,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;IAEtE,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAE5D,GAAG,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAElC,OAAO,QAAQ,CAAC;AAClB,CAAC;AApBD,gCAoBC;AAED;;;;;;;;GAQG;AACH,SAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,OAAO,EACP,eAAe,GAKhB;IACC,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC,IAAI,CACnB,gDAAgD,EAChD,OAAO,CACR,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;AACxE,CAAC;AArBD,gDAqBC;AAED;;;;;;;GAOG;AACH,SAAgB,UAAU,CAAC,EACzB,SAAS,EACT,eAAe,GAIhB;IACC,OACE,SAAS,CAAC,IAAI,CACZ,wCAAwC,EACxC,eAAe,CAIlB,CAAC,aAAa,CAAC,OAAO,CAAC;AAC1B,CAAC;AAfD,gCAeC","sourcesContent":["import type { NetworkClientId, Provider } from '@metamask/network-controller';\nimport type { Hex } from '@metamask/utils';\n\nimport { createModuleLogger, projectLogger } from '../logger';\nimport type { TransactionControllerMessenger } from '../TransactionController';\n\nconst log = createModuleLogger(projectLogger, 'provider');\n\ntype ProviderRequestParams = Parameters<Provider['request']>[0]['params'];\n\n/**\n * Get a provider for the specified chain or network client.\n * Resolves chainId to networkClientId if needed, then gets the provider.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.chainId - The chain ID to resolve to a network client.\n * @param request.networkClientId - The network client ID to use directly.\n * @returns The Provider instance.\n */\nexport function getProvider({\n messenger,\n chainId,\n networkClientId,\n}: {\n messenger: TransactionControllerMessenger;\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n}): Provider {\n const resolvedId = getNetworkClientId({\n messenger,\n chainId,\n networkClientId,\n });\n return (\n messenger.call('NetworkController:getNetworkClientById', resolvedId) as {\n provider: Provider;\n }\n ).provider;\n}\n\n/**\n * Send an RPC request to the network for the specified chain or network client.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.chainId - The chain ID to resolve to a network client.\n * @param request.networkClientId - The network client ID to use directly.\n * @param request.method - The JSON-RPC method name.\n * @param request.params - Optional parameters for the RPC call.\n * @returns The RPC response.\n */\nexport async function rpcRequest({\n messenger,\n chainId,\n networkClientId,\n method,\n params,\n}: {\n messenger: TransactionControllerMessenger;\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n method: string;\n params?: ProviderRequestParams;\n}): Promise<unknown> {\n const provider = getProvider({ messenger, chainId, networkClientId });\n\n const response = await provider.request({ method, params });\n\n log(method, { params, response });\n\n return response;\n}\n\n/**\n * Get the network client ID for the specified chain or network client.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.chainId - The chain ID to resolve to a network client.\n * @param request.networkClientId - The network client ID to use directly.\n * @returns The network client ID.\n */\nexport function getNetworkClientId({\n messenger,\n chainId,\n networkClientId,\n}: {\n messenger: TransactionControllerMessenger;\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n}): NetworkClientId {\n if (networkClientId) {\n return networkClientId;\n }\n\n if (chainId) {\n return messenger.call(\n 'NetworkController:findNetworkClientIdByChainId',\n chainId,\n );\n }\n\n throw new Error('Either chainId or networkClientId must be provided');\n}\n\n/**\n * Get the chain ID for the specified network client.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.networkClientId - The network client ID.\n * @returns The chain ID.\n */\nexport function getChainId({\n messenger,\n networkClientId,\n}: {\n messenger: TransactionControllerMessenger;\n networkClientId: NetworkClientId;\n}): Hex {\n return (\n messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n ) as {\n configuration: { chainId: Hex };\n }\n ).configuration.chainId;\n}\n"]}
1
+ {"version":3,"file":"provider.cjs","sourceRoot":"","sources":["../../src/utils/provider.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n NetworkClient,\n NetworkClientId,\n Provider,\n} from '@metamask/network-controller';\nimport { NetworkClientType } from '@metamask/network-controller';\nimport type { Hex } from '@metamask/utils';\n\nimport { createModuleLogger, projectLogger } from '../logger';\nimport type { TransactionControllerMessenger } from '../TransactionController';\n\nconst log = createModuleLogger(projectLogger, 'provider');\n\ntype ProviderRequestParams = Parameters<Provider['request']>[0]['params'];\n\n/**\n * Get a provider for the specified chain or network client.\n * Resolves chainId to networkClientId if needed, then gets the provider.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.chainId - The chain ID to resolve to a network client.\n * @param request.networkClientId - The network client ID to use directly.\n * @returns The Provider instance.\n */\nexport function getProvider({\n messenger,\n chainId,\n networkClientId,\n}: {\n messenger: TransactionControllerMessenger;\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n}): Provider {\n const resolvedId = getNetworkClientId({\n messenger,\n chainId,\n networkClientId,\n });\n\n return getNetworkClient(messenger, resolvedId).provider;\n}\n\n/**\n * Send an RPC request to the network for the specified chain or network client.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.chainId - The chain ID to resolve to a network client.\n * @param request.networkClientId - The network client ID to use directly.\n * @param request.method - The JSON-RPC method name.\n * @param request.params - Optional parameters for the RPC call.\n * @returns The RPC response.\n */\nexport async function rpcRequest({\n messenger,\n chainId,\n networkClientId,\n method,\n params,\n}: {\n messenger: TransactionControllerMessenger;\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n method: string;\n params?: ProviderRequestParams;\n}): Promise<unknown> {\n const resolvedNetworkClientId = getNetworkClientId({\n messenger,\n chainId,\n networkClientId,\n });\n\n const networkClient = getNetworkClient(messenger, resolvedNetworkClientId);\n const { provider } = networkClient;\n\n let response: unknown;\n try {\n response = await provider.request({ method, params });\n } catch (error) {\n throwWithRpcContext(error, {\n method,\n networkClient,\n });\n }\n\n log(method, { params, response });\n\n return response;\n}\n\n/**\n * Get the network client ID for the specified chain or network client.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.chainId - The chain ID to resolve to a network client.\n * @param request.networkClientId - The network client ID to use directly.\n * @returns The network client ID.\n */\nexport function getNetworkClientId({\n messenger,\n chainId,\n networkClientId,\n}: {\n messenger: TransactionControllerMessenger;\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n}): NetworkClientId {\n if (networkClientId) {\n return networkClientId;\n }\n\n if (chainId) {\n return messenger.call(\n 'NetworkController:findNetworkClientIdByChainId',\n chainId,\n );\n }\n\n throw new Error('Either chainId or networkClientId must be provided');\n}\n\n/**\n * Get the chain ID for the specified network client.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.networkClientId - The network client ID.\n * @returns The chain ID.\n */\nexport function getChainId({\n messenger,\n networkClientId,\n}: {\n messenger: TransactionControllerMessenger;\n networkClientId: NetworkClientId;\n}): Hex {\n return (\n messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n ) as {\n configuration: { chainId: Hex };\n }\n ).configuration.chainId;\n}\n\nfunction getNetworkClient(\n messenger: TransactionControllerMessenger,\n networkClientId: NetworkClientId,\n): NetworkClient {\n return messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n ) as NetworkClient;\n}\n\nfunction throwWithRpcContext(\n error: unknown,\n {\n method,\n networkClient,\n }: {\n method: string;\n networkClient: NetworkClient;\n },\n): never {\n const errorObject = error as {\n data?: { message?: string };\n message?: string;\n };\n const message = errorObject.data?.message ?? errorObject.message;\n const prefix = `RPC ${networkClient.configuration.chainId} ${getEndpointLabel(\n networkClient,\n )} ${method}`;\n const prefixedMessage = `${prefix}: ${message}`;\n\n errorObject.message = prefixedMessage;\n throw error;\n}\n\nfunction getEndpointLabel(networkClient: NetworkClient): 'Infura' | 'Custom' {\n return networkClient.configuration.type === NetworkClientType.Infura\n ? 'Infura'\n : 'Custom';\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.cts","sourceRoot":"","sources":["../../src/utils/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,qCAAqC;AAC9E,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAiC;AAI/E,KAAK,qBAAqB,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAE1E;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,OAAO,EACP,eAAe,GAChB,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,QAAQ,CAWX;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAAC,EAC/B,SAAS,EACT,OAAO,EACP,eAAe,EACf,MAAM,EACN,MAAM,GACP,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,qBAAqB,CAAC;CAChC,GAAG,OAAO,CAAC,OAAO,CAAC,CAQnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,OAAO,EACP,eAAe,GAChB,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,eAAe,CAalB;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,eAAe,GAChB,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,eAAe,EAAE,eAAe,CAAC;CAClC,GAAG,GAAG,CASN"}
1
+ {"version":3,"file":"provider.d.cts","sourceRoot":"","sources":["../../src/utils/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,eAAe,EACf,QAAQ,EACT,qCAAqC;AAEtC,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAiC;AAI/E,KAAK,qBAAqB,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAE1E;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,OAAO,EACP,eAAe,GAChB,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,QAAQ,CAQX;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAAC,EAC/B,SAAS,EACT,OAAO,EACP,eAAe,EACf,MAAM,EACN,MAAM,GACP,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,qBAAqB,CAAC;CAChC,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,OAAO,EACP,eAAe,GAChB,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,eAAe,CAalB;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,eAAe,GAChB,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,eAAe,EAAE,eAAe,CAAC;CAClC,GAAG,GAAG,CASN"}
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.mts","sourceRoot":"","sources":["../../src/utils/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,qCAAqC;AAC9E,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAiC;AAI/E,KAAK,qBAAqB,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAE1E;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,OAAO,EACP,eAAe,GAChB,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,QAAQ,CAWX;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAAC,EAC/B,SAAS,EACT,OAAO,EACP,eAAe,EACf,MAAM,EACN,MAAM,GACP,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,qBAAqB,CAAC;CAChC,GAAG,OAAO,CAAC,OAAO,CAAC,CAQnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,OAAO,EACP,eAAe,GAChB,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,eAAe,CAalB;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,eAAe,GAChB,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,eAAe,EAAE,eAAe,CAAC;CAClC,GAAG,GAAG,CASN"}
1
+ {"version":3,"file":"provider.d.mts","sourceRoot":"","sources":["../../src/utils/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,eAAe,EACf,QAAQ,EACT,qCAAqC;AAEtC,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAiC;AAI/E,KAAK,qBAAqB,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAE1E;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,OAAO,EACP,eAAe,GAChB,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,QAAQ,CAQX;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAAC,EAC/B,SAAS,EACT,OAAO,EACP,eAAe,EACf,MAAM,EACN,MAAM,GACP,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,qBAAqB,CAAC;CAChC,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,OAAO,EACP,eAAe,GAChB,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,eAAe,CAalB;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,eAAe,GAChB,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,eAAe,EAAE,eAAe,CAAC;CAClC,GAAG,GAAG,CASN"}
@@ -1,3 +1,4 @@
1
+ import { NetworkClientType } from "@metamask/network-controller";
1
2
  import { createModuleLogger, projectLogger } from "../logger.mjs";
2
3
  const log = createModuleLogger(projectLogger, 'provider');
3
4
  /**
@@ -16,7 +17,7 @@ export function getProvider({ messenger, chainId, networkClientId, }) {
16
17
  chainId,
17
18
  networkClientId,
18
19
  });
19
- return messenger.call('NetworkController:getNetworkClientById', resolvedId).provider;
20
+ return getNetworkClient(messenger, resolvedId).provider;
20
21
  }
21
22
  /**
22
23
  * Send an RPC request to the network for the specified chain or network client.
@@ -30,8 +31,23 @@ export function getProvider({ messenger, chainId, networkClientId, }) {
30
31
  * @returns The RPC response.
31
32
  */
32
33
  export async function rpcRequest({ messenger, chainId, networkClientId, method, params, }) {
33
- const provider = getProvider({ messenger, chainId, networkClientId });
34
- const response = await provider.request({ method, params });
34
+ const resolvedNetworkClientId = getNetworkClientId({
35
+ messenger,
36
+ chainId,
37
+ networkClientId,
38
+ });
39
+ const networkClient = getNetworkClient(messenger, resolvedNetworkClientId);
40
+ const { provider } = networkClient;
41
+ let response;
42
+ try {
43
+ response = await provider.request({ method, params });
44
+ }
45
+ catch (error) {
46
+ throwWithRpcContext(error, {
47
+ method,
48
+ networkClient,
49
+ });
50
+ }
35
51
  log(method, { params, response });
36
52
  return response;
37
53
  }
@@ -64,4 +80,20 @@ export function getNetworkClientId({ messenger, chainId, networkClientId, }) {
64
80
  export function getChainId({ messenger, networkClientId, }) {
65
81
  return messenger.call('NetworkController:getNetworkClientById', networkClientId).configuration.chainId;
66
82
  }
83
+ function getNetworkClient(messenger, networkClientId) {
84
+ return messenger.call('NetworkController:getNetworkClientById', networkClientId);
85
+ }
86
+ function throwWithRpcContext(error, { method, networkClient, }) {
87
+ const errorObject = error;
88
+ const message = errorObject.data?.message ?? errorObject.message;
89
+ const prefix = `RPC ${networkClient.configuration.chainId} ${getEndpointLabel(networkClient)} ${method}`;
90
+ const prefixedMessage = `${prefix}: ${message}`;
91
+ errorObject.message = prefixedMessage;
92
+ throw error;
93
+ }
94
+ function getEndpointLabel(networkClient) {
95
+ return networkClient.configuration.type === NetworkClientType.Infura
96
+ ? 'Infura'
97
+ : 'Custom';
98
+ }
67
99
  //# sourceMappingURL=provider.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider.mjs","sourceRoot":"","sources":["../../src/utils/provider.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,sBAAkB;AAG9D,MAAM,GAAG,GAAG,kBAAkB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;AAI1D;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,SAAS,EACT,OAAO,EACP,eAAe,GAKhB;IACC,MAAM,UAAU,GAAG,kBAAkB,CAAC;QACpC,SAAS;QACT,OAAO;QACP,eAAe;KAChB,CAAC,CAAC;IACH,OACE,SAAS,CAAC,IAAI,CAAC,wCAAwC,EAAE,UAAU,CAGpE,CAAC,QAAQ,CAAC;AACb,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAC/B,SAAS,EACT,OAAO,EACP,eAAe,EACf,MAAM,EACN,MAAM,GAOP;IACC,MAAM,QAAQ,GAAG,WAAW,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;IAEtE,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAE5D,GAAG,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAElC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,EACjC,SAAS,EACT,OAAO,EACP,eAAe,GAKhB;IACC,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC,IAAI,CACnB,gDAAgD,EAChD,OAAO,CACR,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,SAAS,EACT,eAAe,GAIhB;IACC,OACE,SAAS,CAAC,IAAI,CACZ,wCAAwC,EACxC,eAAe,CAIlB,CAAC,aAAa,CAAC,OAAO,CAAC;AAC1B,CAAC","sourcesContent":["import type { NetworkClientId, Provider } from '@metamask/network-controller';\nimport type { Hex } from '@metamask/utils';\n\nimport { createModuleLogger, projectLogger } from '../logger';\nimport type { TransactionControllerMessenger } from '../TransactionController';\n\nconst log = createModuleLogger(projectLogger, 'provider');\n\ntype ProviderRequestParams = Parameters<Provider['request']>[0]['params'];\n\n/**\n * Get a provider for the specified chain or network client.\n * Resolves chainId to networkClientId if needed, then gets the provider.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.chainId - The chain ID to resolve to a network client.\n * @param request.networkClientId - The network client ID to use directly.\n * @returns The Provider instance.\n */\nexport function getProvider({\n messenger,\n chainId,\n networkClientId,\n}: {\n messenger: TransactionControllerMessenger;\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n}): Provider {\n const resolvedId = getNetworkClientId({\n messenger,\n chainId,\n networkClientId,\n });\n return (\n messenger.call('NetworkController:getNetworkClientById', resolvedId) as {\n provider: Provider;\n }\n ).provider;\n}\n\n/**\n * Send an RPC request to the network for the specified chain or network client.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.chainId - The chain ID to resolve to a network client.\n * @param request.networkClientId - The network client ID to use directly.\n * @param request.method - The JSON-RPC method name.\n * @param request.params - Optional parameters for the RPC call.\n * @returns The RPC response.\n */\nexport async function rpcRequest({\n messenger,\n chainId,\n networkClientId,\n method,\n params,\n}: {\n messenger: TransactionControllerMessenger;\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n method: string;\n params?: ProviderRequestParams;\n}): Promise<unknown> {\n const provider = getProvider({ messenger, chainId, networkClientId });\n\n const response = await provider.request({ method, params });\n\n log(method, { params, response });\n\n return response;\n}\n\n/**\n * Get the network client ID for the specified chain or network client.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.chainId - The chain ID to resolve to a network client.\n * @param request.networkClientId - The network client ID to use directly.\n * @returns The network client ID.\n */\nexport function getNetworkClientId({\n messenger,\n chainId,\n networkClientId,\n}: {\n messenger: TransactionControllerMessenger;\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n}): NetworkClientId {\n if (networkClientId) {\n return networkClientId;\n }\n\n if (chainId) {\n return messenger.call(\n 'NetworkController:findNetworkClientIdByChainId',\n chainId,\n );\n }\n\n throw new Error('Either chainId or networkClientId must be provided');\n}\n\n/**\n * Get the chain ID for the specified network client.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.networkClientId - The network client ID.\n * @returns The chain ID.\n */\nexport function getChainId({\n messenger,\n networkClientId,\n}: {\n messenger: TransactionControllerMessenger;\n networkClientId: NetworkClientId;\n}): Hex {\n return (\n messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n ) as {\n configuration: { chainId: Hex };\n }\n ).configuration.chainId;\n}\n"]}
1
+ {"version":3,"file":"provider.mjs","sourceRoot":"","sources":["../../src/utils/provider.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n NetworkClient,\n NetworkClientId,\n Provider,\n} from '@metamask/network-controller';\nimport { NetworkClientType } from '@metamask/network-controller';\nimport type { Hex } from '@metamask/utils';\n\nimport { createModuleLogger, projectLogger } from '../logger';\nimport type { TransactionControllerMessenger } from '../TransactionController';\n\nconst log = createModuleLogger(projectLogger, 'provider');\n\ntype ProviderRequestParams = Parameters<Provider['request']>[0]['params'];\n\n/**\n * Get a provider for the specified chain or network client.\n * Resolves chainId to networkClientId if needed, then gets the provider.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.chainId - The chain ID to resolve to a network client.\n * @param request.networkClientId - The network client ID to use directly.\n * @returns The Provider instance.\n */\nexport function getProvider({\n messenger,\n chainId,\n networkClientId,\n}: {\n messenger: TransactionControllerMessenger;\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n}): Provider {\n const resolvedId = getNetworkClientId({\n messenger,\n chainId,\n networkClientId,\n });\n\n return getNetworkClient(messenger, resolvedId).provider;\n}\n\n/**\n * Send an RPC request to the network for the specified chain or network client.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.chainId - The chain ID to resolve to a network client.\n * @param request.networkClientId - The network client ID to use directly.\n * @param request.method - The JSON-RPC method name.\n * @param request.params - Optional parameters for the RPC call.\n * @returns The RPC response.\n */\nexport async function rpcRequest({\n messenger,\n chainId,\n networkClientId,\n method,\n params,\n}: {\n messenger: TransactionControllerMessenger;\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n method: string;\n params?: ProviderRequestParams;\n}): Promise<unknown> {\n const resolvedNetworkClientId = getNetworkClientId({\n messenger,\n chainId,\n networkClientId,\n });\n\n const networkClient = getNetworkClient(messenger, resolvedNetworkClientId);\n const { provider } = networkClient;\n\n let response: unknown;\n try {\n response = await provider.request({ method, params });\n } catch (error) {\n throwWithRpcContext(error, {\n method,\n networkClient,\n });\n }\n\n log(method, { params, response });\n\n return response;\n}\n\n/**\n * Get the network client ID for the specified chain or network client.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.chainId - The chain ID to resolve to a network client.\n * @param request.networkClientId - The network client ID to use directly.\n * @returns The network client ID.\n */\nexport function getNetworkClientId({\n messenger,\n chainId,\n networkClientId,\n}: {\n messenger: TransactionControllerMessenger;\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n}): NetworkClientId {\n if (networkClientId) {\n return networkClientId;\n }\n\n if (chainId) {\n return messenger.call(\n 'NetworkController:findNetworkClientIdByChainId',\n chainId,\n );\n }\n\n throw new Error('Either chainId or networkClientId must be provided');\n}\n\n/**\n * Get the chain ID for the specified network client.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.networkClientId - The network client ID.\n * @returns The chain ID.\n */\nexport function getChainId({\n messenger,\n networkClientId,\n}: {\n messenger: TransactionControllerMessenger;\n networkClientId: NetworkClientId;\n}): Hex {\n return (\n messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n ) as {\n configuration: { chainId: Hex };\n }\n ).configuration.chainId;\n}\n\nfunction getNetworkClient(\n messenger: TransactionControllerMessenger,\n networkClientId: NetworkClientId,\n): NetworkClient {\n return messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n ) as NetworkClient;\n}\n\nfunction throwWithRpcContext(\n error: unknown,\n {\n method,\n networkClient,\n }: {\n method: string;\n networkClient: NetworkClient;\n },\n): never {\n const errorObject = error as {\n data?: { message?: string };\n message?: string;\n };\n const message = errorObject.data?.message ?? errorObject.message;\n const prefix = `RPC ${networkClient.configuration.chainId} ${getEndpointLabel(\n networkClient,\n )} ${method}`;\n const prefixedMessage = `${prefix}: ${message}`;\n\n errorObject.message = prefixedMessage;\n throw error;\n}\n\nfunction getEndpointLabel(networkClient: NetworkClient): 'Infura' | 'Custom' {\n return networkClient.configuration.type === NetworkClientType.Infura\n ? 'Infura'\n : 'Custom';\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask/transaction-controller",
3
- "version": "68.0.0",
3
+ "version": "68.1.0",
4
4
  "description": "Stores transactions alongside their periodically updated statuses and manages interactions such as approval and cancellation",
5
5
  "keywords": [
6
6
  "Ethereum",