@metamask-previews/transaction-controller 63.1.0-preview-a0caca0c0 → 63.2.0-preview-17c76be24

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.
Files changed (174) hide show
  1. package/CHANGELOG.md +6 -4
  2. package/dist/TransactionController-method-action-types.cjs +1 -1
  3. package/dist/TransactionController-method-action-types.cjs.map +1 -1
  4. package/dist/TransactionController-method-action-types.d.cts +1 -1
  5. package/dist/TransactionController-method-action-types.d.mts +1 -1
  6. package/dist/TransactionController-method-action-types.mjs +1 -1
  7. package/dist/TransactionController-method-action-types.mjs.map +1 -1
  8. package/dist/TransactionController.cjs +101 -73
  9. package/dist/TransactionController.cjs.map +1 -1
  10. package/dist/TransactionController.d.cts.map +1 -1
  11. package/dist/TransactionController.d.mts.map +1 -1
  12. package/dist/TransactionController.mjs +106 -74
  13. package/dist/TransactionController.mjs.map +1 -1
  14. package/dist/gas-flows/LineaGasFeeFlow.cjs +11 -22
  15. package/dist/gas-flows/LineaGasFeeFlow.cjs.map +1 -1
  16. package/dist/gas-flows/LineaGasFeeFlow.d.cts.map +1 -1
  17. package/dist/gas-flows/LineaGasFeeFlow.d.mts.map +1 -1
  18. package/dist/gas-flows/LineaGasFeeFlow.mjs +12 -23
  19. package/dist/gas-flows/LineaGasFeeFlow.mjs.map +1 -1
  20. package/dist/helpers/AccountsApiRemoteTransactionSource.cjs +2 -2
  21. package/dist/helpers/AccountsApiRemoteTransactionSource.cjs.map +1 -1
  22. package/dist/helpers/AccountsApiRemoteTransactionSource.d.cts.map +1 -1
  23. package/dist/helpers/AccountsApiRemoteTransactionSource.d.mts.map +1 -1
  24. package/dist/helpers/AccountsApiRemoteTransactionSource.mjs +1 -1
  25. package/dist/helpers/AccountsApiRemoteTransactionSource.mjs.map +1 -1
  26. package/dist/helpers/GasFeePoller.cjs +19 -5
  27. package/dist/helpers/GasFeePoller.cjs.map +1 -1
  28. package/dist/helpers/GasFeePoller.d.cts +6 -1
  29. package/dist/helpers/GasFeePoller.d.cts.map +1 -1
  30. package/dist/helpers/GasFeePoller.d.mts +6 -1
  31. package/dist/helpers/GasFeePoller.d.mts.map +1 -1
  32. package/dist/helpers/GasFeePoller.mjs +26 -5
  33. package/dist/helpers/GasFeePoller.mjs.map +1 -1
  34. package/dist/helpers/IncomingTransactionHelper.cjs +11 -2
  35. package/dist/helpers/IncomingTransactionHelper.cjs.map +1 -1
  36. package/dist/helpers/IncomingTransactionHelper.d.cts.map +1 -1
  37. package/dist/helpers/IncomingTransactionHelper.d.mts.map +1 -1
  38. package/dist/helpers/IncomingTransactionHelper.mjs +11 -2
  39. package/dist/helpers/IncomingTransactionHelper.mjs.map +1 -1
  40. package/dist/helpers/MethodDataHelper.cjs +6 -10
  41. package/dist/helpers/MethodDataHelper.cjs.map +1 -1
  42. package/dist/helpers/MethodDataHelper.d.cts +4 -4
  43. package/dist/helpers/MethodDataHelper.d.cts.map +1 -1
  44. package/dist/helpers/MethodDataHelper.d.mts +4 -4
  45. package/dist/helpers/MethodDataHelper.d.mts.map +1 -1
  46. package/dist/helpers/MethodDataHelper.mjs +6 -10
  47. package/dist/helpers/MethodDataHelper.mjs.map +1 -1
  48. package/dist/helpers/MultichainTrackingHelper.cjs +2 -0
  49. package/dist/helpers/MultichainTrackingHelper.cjs.map +1 -1
  50. package/dist/helpers/MultichainTrackingHelper.d.cts +2 -0
  51. package/dist/helpers/MultichainTrackingHelper.d.cts.map +1 -1
  52. package/dist/helpers/MultichainTrackingHelper.d.mts +2 -0
  53. package/dist/helpers/MultichainTrackingHelper.d.mts.map +1 -1
  54. package/dist/helpers/MultichainTrackingHelper.mjs +2 -0
  55. package/dist/helpers/MultichainTrackingHelper.mjs.map +1 -1
  56. package/dist/helpers/PendingTransactionTracker.cjs +24 -38
  57. package/dist/helpers/PendingTransactionTracker.cjs.map +1 -1
  58. package/dist/helpers/PendingTransactionTracker.d.cts +7 -3
  59. package/dist/helpers/PendingTransactionTracker.d.cts.map +1 -1
  60. package/dist/helpers/PendingTransactionTracker.d.mts +7 -3
  61. package/dist/helpers/PendingTransactionTracker.d.mts.map +1 -1
  62. package/dist/helpers/PendingTransactionTracker.mjs +24 -38
  63. package/dist/helpers/PendingTransactionTracker.mjs.map +1 -1
  64. package/dist/hooks/SequentialPublishBatchHook.cjs +6 -4
  65. package/dist/hooks/SequentialPublishBatchHook.cjs.map +1 -1
  66. package/dist/hooks/SequentialPublishBatchHook.d.cts +4 -2
  67. package/dist/hooks/SequentialPublishBatchHook.d.cts.map +1 -1
  68. package/dist/hooks/SequentialPublishBatchHook.d.mts +4 -2
  69. package/dist/hooks/SequentialPublishBatchHook.d.mts.map +1 -1
  70. package/dist/hooks/SequentialPublishBatchHook.mjs +6 -4
  71. package/dist/hooks/SequentialPublishBatchHook.mjs.map +1 -1
  72. package/dist/index.cjs +3 -1
  73. package/dist/index.cjs.map +1 -1
  74. package/dist/index.d.cts +1 -0
  75. package/dist/index.d.cts.map +1 -1
  76. package/dist/index.d.mts +1 -0
  77. package/dist/index.d.mts.map +1 -1
  78. package/dist/index.mjs +1 -0
  79. package/dist/index.mjs.map +1 -1
  80. package/dist/types.cjs.map +1 -1
  81. package/dist/types.d.cts +3 -0
  82. package/dist/types.d.cts.map +1 -1
  83. package/dist/types.d.mts +3 -0
  84. package/dist/types.d.mts.map +1 -1
  85. package/dist/types.mjs.map +1 -1
  86. package/dist/utils/balance-changes.cjs +2 -2
  87. package/dist/utils/balance-changes.cjs.map +1 -1
  88. package/dist/utils/balance-changes.d.cts +2 -4
  89. package/dist/utils/balance-changes.d.cts.map +1 -1
  90. package/dist/utils/balance-changes.d.mts +2 -4
  91. package/dist/utils/balance-changes.d.mts.map +1 -1
  92. package/dist/utils/balance-changes.mjs +2 -2
  93. package/dist/utils/balance-changes.mjs.map +1 -1
  94. package/dist/utils/balance.cjs +10 -14
  95. package/dist/utils/balance.cjs.map +1 -1
  96. package/dist/utils/balance.d.cts +5 -8
  97. package/dist/utils/balance.d.cts.map +1 -1
  98. package/dist/utils/balance.d.mts +5 -8
  99. package/dist/utils/balance.d.mts.map +1 -1
  100. package/dist/utils/balance.mjs +10 -14
  101. package/dist/utils/balance.mjs.map +1 -1
  102. package/dist/utils/batch.cjs +16 -15
  103. package/dist/utils/batch.cjs.map +1 -1
  104. package/dist/utils/batch.d.cts +5 -1
  105. package/dist/utils/batch.d.cts.map +1 -1
  106. package/dist/utils/batch.d.mts +5 -1
  107. package/dist/utils/batch.d.mts.map +1 -1
  108. package/dist/utils/batch.mjs +17 -16
  109. package/dist/utils/batch.mjs.map +1 -1
  110. package/dist/utils/eip7702.cjs +6 -13
  111. package/dist/utils/eip7702.cjs.map +1 -1
  112. package/dist/utils/eip7702.d.cts +5 -6
  113. package/dist/utils/eip7702.d.cts.map +1 -1
  114. package/dist/utils/eip7702.d.mts +5 -6
  115. package/dist/utils/eip7702.d.mts.map +1 -1
  116. package/dist/utils/eip7702.mjs +7 -14
  117. package/dist/utils/eip7702.mjs.map +1 -1
  118. package/dist/utils/gas-fee-tokens.cjs +3 -4
  119. package/dist/utils/gas-fee-tokens.cjs.map +1 -1
  120. package/dist/utils/gas-fee-tokens.d.cts +4 -6
  121. package/dist/utils/gas-fee-tokens.d.cts.map +1 -1
  122. package/dist/utils/gas-fee-tokens.d.mts +4 -6
  123. package/dist/utils/gas-fee-tokens.d.mts.map +1 -1
  124. package/dist/utils/gas-fee-tokens.mjs +3 -4
  125. package/dist/utils/gas-fee-tokens.mjs.map +1 -1
  126. package/dist/utils/gas-fees.cjs +6 -8
  127. package/dist/utils/gas-fees.cjs.map +1 -1
  128. package/dist/utils/gas-fees.d.cts +2 -0
  129. package/dist/utils/gas-fees.d.cts.map +1 -1
  130. package/dist/utils/gas-fees.d.mts +2 -0
  131. package/dist/utils/gas-fees.d.mts.map +1 -1
  132. package/dist/utils/gas-fees.mjs +7 -9
  133. package/dist/utils/gas-fees.mjs.map +1 -1
  134. package/dist/utils/gas.cjs +34 -60
  135. package/dist/utils/gas.cjs.map +1 -1
  136. package/dist/utils/gas.d.cts +11 -6
  137. package/dist/utils/gas.d.cts.map +1 -1
  138. package/dist/utils/gas.d.mts +11 -6
  139. package/dist/utils/gas.d.mts.map +1 -1
  140. package/dist/utils/gas.mjs +35 -61
  141. package/dist/utils/gas.mjs.map +1 -1
  142. package/dist/utils/layer1-gas-fee-flow.cjs +3 -7
  143. package/dist/utils/layer1-gas-fee-flow.cjs.map +1 -1
  144. package/dist/utils/layer1-gas-fee-flow.d.cts +5 -2
  145. package/dist/utils/layer1-gas-fee-flow.d.cts.map +1 -1
  146. package/dist/utils/layer1-gas-fee-flow.d.mts +5 -2
  147. package/dist/utils/layer1-gas-fee-flow.d.mts.map +1 -1
  148. package/dist/utils/layer1-gas-fee-flow.mjs +3 -7
  149. package/dist/utils/layer1-gas-fee-flow.mjs.map +1 -1
  150. package/dist/utils/swaps.cjs +7 -11
  151. package/dist/utils/swaps.cjs.map +1 -1
  152. package/dist/utils/swaps.d.cts +4 -6
  153. package/dist/utils/swaps.d.cts.map +1 -1
  154. package/dist/utils/swaps.d.mts +4 -6
  155. package/dist/utils/swaps.d.mts.map +1 -1
  156. package/dist/utils/swaps.mjs +7 -11
  157. package/dist/utils/swaps.mjs.map +1 -1
  158. package/dist/utils/transaction-type.cjs +8 -17
  159. package/dist/utils/transaction-type.cjs.map +1 -1
  160. package/dist/utils/transaction-type.d.cts +3 -9
  161. package/dist/utils/transaction-type.d.cts.map +1 -1
  162. package/dist/utils/transaction-type.d.mts +3 -9
  163. package/dist/utils/transaction-type.d.mts.map +1 -1
  164. package/dist/utils/transaction-type.mjs +8 -17
  165. package/dist/utils/transaction-type.mjs.map +1 -1
  166. package/package.json +2 -2
  167. package/dist/utils/provider.cjs +0 -74
  168. package/dist/utils/provider.cjs.map +0 -1
  169. package/dist/utils/provider.d.cts +0 -65
  170. package/dist/utils/provider.d.cts.map +0 -1
  171. package/dist/utils/provider.d.mts +0 -65
  172. package/dist/utils/provider.d.mts.map +0 -1
  173. package/dist/utils/provider.mjs +0 -67
  174. package/dist/utils/provider.mjs.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import { Interface } from "@ethersproject/abi";
2
+ import { query } from "@metamask/controller-utils";
2
3
  import { abiERC721, abiERC20, abiERC1155, abiFiatTokenV2 } from "@metamask/metamask-eth-abis";
3
4
  import { DELEGATION_PREFIX } from "./eip7702.mjs";
4
- import { rpcRequest } from "./provider.mjs";
5
5
  import { TransactionType } from "../types.mjs";
6
6
  export const ESTIMATE_GAS_ERROR = 'eth_estimateGas rpc method error';
7
7
  const ERC20Interface = new Interface(abiERC20);
@@ -14,21 +14,18 @@ const USDCInterface = new Interface(abiFiatTokenV2);
14
14
  * represent specific events that we specify manually at transaction creation.
15
15
  *
16
16
  * @param txParams - Parameters for the transaction.
17
- * @param options - Optional messenger and network client ID to query the network.
18
- * @param options.messenger - The TransactionController messenger.
19
- * @param options.networkClientId - The network client ID to use.
17
+ * @param ethQuery - EthQuery instance.
20
18
  * @returns A object with the transaction type and the contract code response in Hex.
21
19
  */
22
- export async function determineTransactionType(txParams, options) {
20
+ export async function determineTransactionType(txParams, ethQuery) {
23
21
  const { data, to } = txParams;
24
22
  if (data && !to) {
25
23
  return { type: TransactionType.deployContract, getCodeResponse: undefined };
26
24
  }
27
25
  let getCodeResponse;
28
26
  let isContractAddress = Boolean(data?.length);
29
- if (options) {
30
- const { messenger, networkClientId } = options;
31
- const response = await readAddressAsContract(messenger, networkClientId, to);
27
+ if (ethQuery) {
28
+ const response = await readAddressAsContract(ethQuery, to);
32
29
  getCodeResponse = response.contractCode;
33
30
  isContractAddress = response.isContractAddress;
34
31
  }
@@ -107,20 +104,14 @@ function getMethodName(data) {
107
104
  /**
108
105
  * Reads an Ethereum address and determines if it is a contract address.
109
106
  *
110
- * @param messenger - The TransactionController messenger.
111
- * @param networkClientId - The network client ID to use.
107
+ * @param ethQuery - The Ethereum query object used to interact with the Ethereum blockchain.
112
108
  * @param address - The Ethereum address.
113
109
  * @returns An object containing the contract code and a boolean indicating if it is a contract address.
114
110
  */
115
- async function readAddressAsContract(messenger, networkClientId, address) {
111
+ async function readAddressAsContract(ethQuery, address) {
116
112
  let contractCode;
117
113
  try {
118
- contractCode = (await rpcRequest({
119
- messenger,
120
- networkClientId,
121
- method: 'eth_getCode',
122
- params: [address, 'latest'],
123
- }));
114
+ contractCode = await query(ethQuery, 'getCode', [address]);
124
115
  // Not used
125
116
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
126
117
  }
@@ -1 +1 @@
1
- {"version":3,"file":"transaction-type.mjs","sourceRoot":"","sources":["../../src/utils/transaction-type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,2BAA2B;AAE/C,OAAO,EACL,SAAS,EACT,QAAQ,EACR,UAAU,EACV,cAAc,EACf,oCAAoC;AAGrC,OAAO,EAAE,iBAAiB,EAAE,sBAAkB;AAC9C,OAAO,EAAE,UAAU,EAAE,uBAAmB;AAGxC,OAAO,EAAE,eAAe,EAAE,qBAAiB;AAE3C,MAAM,CAAC,MAAM,kBAAkB,GAAG,kCAAkC,CAAC;AAErE,MAAM,cAAc,GAAG,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC/C,MAAM,eAAe,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC;AACjD,MAAM,gBAAgB,GAAG,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC;AACnD,MAAM,aAAa,GAAG,IAAI,SAAS,CAAC,cAAc,CAAC,CAAC;AAEpD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,QAA2B,EAC3B,OAGC;IAED,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC;IAE9B,IAAI,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;QAChB,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,cAAc,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC;IAC9E,CAAC;IAED,IAAI,eAAe,CAAC;IACpB,IAAI,iBAAiB,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAE9C,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;QAC/C,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAC1C,SAAS,EACT,eAAe,EACf,EAAE,CACH,CAAC;QAEF,eAAe,GAAG,QAAQ,CAAC,YAAY,CAAC;QACxC,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB,CAAC;IACjD,CAAC;IAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,UAAU,EAAE,eAAe,EAAE,CAAC;IAC/D,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAErD,MAAM,yBAAyB,GAAG;QAChC,IAAI,EAAE,eAAe,CAAC,mBAAmB;QACzC,eAAe;KAChB,CAAC;IAEF,IAAI,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC;QACtB,OAAO,yBAAyB,CAAC;IACnC,CAAC;IAED,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAEjC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,yBAAyB,CAAC;IACnC,CAAC;IAED,MAAM,eAAe,GAAG;QACtB,eAAe,CAAC,kBAAkB;QAClC,eAAe,CAAC,4BAA4B;QAC5C,eAAe,CAAC,mBAAmB;QACnC,eAAe,CAAC,uBAAuB;QACvC,eAAe,CAAC,2BAA2B;QAC3C,eAAe,CAAC,4BAA4B;KAC7C,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAExE,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC;IACpD,CAAC;IAED,OAAO,yBAAyB,CAAC;AACnC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAY,EACZ,OAEC;IAED,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAErD,KAAK,MAAM,KAAK,IAAI;QAClB,cAAc;QACd,eAAe;QACf,gBAAgB;QAChB,aAAa;KACd,EAAE,CAAC;QACF,IAAI,CAAC;YACH,IAAI,OAAO,EAAE,aAAa,EAAE,CAAC;gBAC3B,OAAO,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;YAC3C,CAAC;YACD,OAAO,KAAK,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CAAC,IAAa;IAClC,OAAO,qBAAqB,CAAC,IAAc,EAAE;QAC3C,aAAa,EAAE,IAAI;KACpB,CAAuB,CAAC;AAC3B,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,qBAAqB,CAClC,SAAyC,EACzC,eAAgC,EAChC,OAAgB;IAKhB,IAAI,YAAY,CAAC;IACjB,IAAI,CAAC;QACH,YAAY,GAAG,CAAC,MAAM,UAAU,CAAC;YAC/B,SAAS;YACT,eAAe;YACf,MAAM,EAAE,aAAa;YACrB,MAAM,EAAE,CAAC,OAAiB,EAAE,QAAQ,CAAC;SACtC,CAAC,CAAW,CAAC;QACd,WAAW;QACX,6DAA6D;IAC/D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,MAAM,iBAAiB,GAAG,YAAY;QACpC,CAAC,CAAC,YAAY,KAAK,IAAI;YACrB,YAAY,KAAK,KAAK;YACtB,CAAC,YAAY,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAC7C,CAAC,CAAC,KAAK,CAAC;IACV,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAC7C,CAAC","sourcesContent":["import { Interface } from '@ethersproject/abi';\nimport type { TransactionDescription } from '@ethersproject/abi';\nimport {\n abiERC721,\n abiERC20,\n abiERC1155,\n abiFiatTokenV2,\n} from '@metamask/metamask-eth-abis';\nimport type { NetworkClientId } from '@metamask/network-controller';\n\nimport { DELEGATION_PREFIX } from './eip7702';\nimport { rpcRequest } from './provider';\nimport type { TransactionControllerMessenger } from '../TransactionController';\nimport type { InferTransactionTypeResult, TransactionParams } from '../types';\nimport { TransactionType } from '../types';\n\nexport const ESTIMATE_GAS_ERROR = 'eth_estimateGas rpc method error';\n\nconst ERC20Interface = new Interface(abiERC20);\nconst ERC721Interface = new Interface(abiERC721);\nconst ERC1155Interface = new Interface(abiERC1155);\nconst USDCInterface = new Interface(abiFiatTokenV2);\n\n/**\n * Determines the type of the transaction by analyzing the txParams.\n * It will never return TRANSACTION_TYPE_CANCEL or TRANSACTION_TYPE_RETRY as these\n * represent specific events that we specify manually at transaction creation.\n *\n * @param txParams - Parameters for the transaction.\n * @param options - Optional messenger and network client ID to query the network.\n * @param options.messenger - The TransactionController messenger.\n * @param options.networkClientId - The network client ID to use.\n * @returns A object with the transaction type and the contract code response in Hex.\n */\nexport async function determineTransactionType(\n txParams: TransactionParams,\n options?: {\n messenger: TransactionControllerMessenger;\n networkClientId: NetworkClientId;\n },\n): Promise<InferTransactionTypeResult> {\n const { data, to } = txParams;\n\n if (data && !to) {\n return { type: TransactionType.deployContract, getCodeResponse: undefined };\n }\n\n let getCodeResponse;\n let isContractAddress = Boolean(data?.length);\n\n if (options) {\n const { messenger, networkClientId } = options;\n const response = await readAddressAsContract(\n messenger,\n networkClientId,\n to,\n );\n\n getCodeResponse = response.contractCode;\n isContractAddress = response.isContractAddress;\n }\n\n if (!isContractAddress) {\n return { type: TransactionType.simpleSend, getCodeResponse };\n }\n\n const hasValue = Number(txParams.value ?? '0') !== 0;\n\n const contractInteractionResult = {\n type: TransactionType.contractInteraction,\n getCodeResponse,\n };\n\n if (!data || hasValue) {\n return contractInteractionResult;\n }\n\n const name = getMethodName(data);\n\n if (!name) {\n return contractInteractionResult;\n }\n\n const tokenMethodName = [\n TransactionType.tokenMethodApprove,\n TransactionType.tokenMethodSetApprovalForAll,\n TransactionType.tokenMethodTransfer,\n TransactionType.tokenMethodTransferFrom,\n TransactionType.tokenMethodSafeTransferFrom,\n TransactionType.tokenMethodIncreaseAllowance,\n ].find((methodName) => methodName.toLowerCase() === name.toLowerCase());\n\n if (tokenMethodName) {\n return { type: tokenMethodName, getCodeResponse };\n }\n\n return contractInteractionResult;\n}\n\n/**\n * Parses transaction data using ABIs for three different token standards: ERC20, ERC721, ERC1155 and USDC.\n * The data will decode correctly if the transaction is an interaction with a contract that matches one of these\n * contract standards\n *\n * @param data - Encoded transaction data.\n * @param options - Options bag.\n * @param options.getMethodName - Whether to get the method name.\n * @returns A representation of an ethereum contract call.\n */\nexport function decodeTransactionData(\n data: string,\n options?: {\n getMethodName?: boolean;\n },\n): undefined | TransactionDescription | string {\n if (!data || data.length < 10) {\n return undefined;\n }\n\n const fourByte = data.substring(0, 10).toLowerCase();\n\n for (const iface of [\n ERC20Interface,\n ERC721Interface,\n ERC1155Interface,\n USDCInterface,\n ]) {\n try {\n if (options?.getMethodName) {\n return iface.getFunction(fourByte)?.name;\n }\n return iface.parseTransaction({ data });\n } catch {\n // Intentionally empty\n }\n }\n\n return undefined;\n}\n\n/**\n * Attempts to get the method name from the given transaction data.\n *\n * @param data - Encoded transaction data.\n * @returns The method name.\n */\nfunction getMethodName(data?: string): string | undefined {\n return decodeTransactionData(data as string, {\n getMethodName: true,\n }) as string | undefined;\n}\n\n/**\n * Reads an Ethereum address and determines if it is a contract address.\n *\n * @param messenger - The TransactionController messenger.\n * @param networkClientId - The network client ID to use.\n * @param address - The Ethereum address.\n * @returns An object containing the contract code and a boolean indicating if it is a contract address.\n */\nasync function readAddressAsContract(\n messenger: TransactionControllerMessenger,\n networkClientId: NetworkClientId,\n address?: string,\n): Promise<{\n contractCode: string | null;\n isContractAddress: boolean;\n}> {\n let contractCode;\n try {\n contractCode = (await rpcRequest({\n messenger,\n networkClientId,\n method: 'eth_getCode',\n params: [address as string, 'latest'],\n })) as string;\n // Not used\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n contractCode = null;\n }\n\n const isContractAddress = contractCode\n ? contractCode !== '0x' &&\n contractCode !== '0x0' &&\n !contractCode.startsWith(DELEGATION_PREFIX)\n : false;\n return { contractCode, isContractAddress };\n}\n"]}
1
+ {"version":3,"file":"transaction-type.mjs","sourceRoot":"","sources":["../../src/utils/transaction-type.ts"],"names":[],"mappings":"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","sourcesContent":["import { Interface } from '@ethersproject/abi';\nimport type { TransactionDescription } from '@ethersproject/abi';\nimport { query } from '@metamask/controller-utils';\nimport type EthQuery from '@metamask/eth-query';\nimport {\n abiERC721,\n abiERC20,\n abiERC1155,\n abiFiatTokenV2,\n} from '@metamask/metamask-eth-abis';\n\nimport { DELEGATION_PREFIX } from './eip7702';\nimport type { InferTransactionTypeResult, TransactionParams } from '../types';\nimport { TransactionType } from '../types';\n\nexport const ESTIMATE_GAS_ERROR = 'eth_estimateGas rpc method error';\n\nconst ERC20Interface = new Interface(abiERC20);\nconst ERC721Interface = new Interface(abiERC721);\nconst ERC1155Interface = new Interface(abiERC1155);\nconst USDCInterface = new Interface(abiFiatTokenV2);\n\n/**\n * Determines the type of the transaction by analyzing the txParams.\n * It will never return TRANSACTION_TYPE_CANCEL or TRANSACTION_TYPE_RETRY as these\n * represent specific events that we specify manually at transaction creation.\n *\n * @param txParams - Parameters for the transaction.\n * @param ethQuery - EthQuery instance.\n * @returns A object with the transaction type and the contract code response in Hex.\n */\nexport async function determineTransactionType(\n txParams: TransactionParams,\n ethQuery?: EthQuery,\n): Promise<InferTransactionTypeResult> {\n const { data, to } = txParams;\n\n if (data && !to) {\n return { type: TransactionType.deployContract, getCodeResponse: undefined };\n }\n\n let getCodeResponse;\n let isContractAddress = Boolean(data?.length);\n\n if (ethQuery) {\n const response = await readAddressAsContract(ethQuery, to);\n\n getCodeResponse = response.contractCode;\n isContractAddress = response.isContractAddress;\n }\n\n if (!isContractAddress) {\n return { type: TransactionType.simpleSend, getCodeResponse };\n }\n\n const hasValue = Number(txParams.value ?? '0') !== 0;\n\n const contractInteractionResult = {\n type: TransactionType.contractInteraction,\n getCodeResponse,\n };\n\n if (!data || hasValue) {\n return contractInteractionResult;\n }\n\n const name = getMethodName(data);\n\n if (!name) {\n return contractInteractionResult;\n }\n\n const tokenMethodName = [\n TransactionType.tokenMethodApprove,\n TransactionType.tokenMethodSetApprovalForAll,\n TransactionType.tokenMethodTransfer,\n TransactionType.tokenMethodTransferFrom,\n TransactionType.tokenMethodSafeTransferFrom,\n TransactionType.tokenMethodIncreaseAllowance,\n ].find((methodName) => methodName.toLowerCase() === name.toLowerCase());\n\n if (tokenMethodName) {\n return { type: tokenMethodName, getCodeResponse };\n }\n\n return contractInteractionResult;\n}\n\n/**\n * Parses transaction data using ABIs for three different token standards: ERC20, ERC721, ERC1155 and USDC.\n * The data will decode correctly if the transaction is an interaction with a contract that matches one of these\n * contract standards\n *\n * @param data - Encoded transaction data.\n * @param options - Options bag.\n * @param options.getMethodName - Whether to get the method name.\n * @returns A representation of an ethereum contract call.\n */\nexport function decodeTransactionData(\n data: string,\n options?: {\n getMethodName?: boolean;\n },\n): undefined | TransactionDescription | string {\n if (!data || data.length < 10) {\n return undefined;\n }\n\n const fourByte = data.substring(0, 10).toLowerCase();\n\n for (const iface of [\n ERC20Interface,\n ERC721Interface,\n ERC1155Interface,\n USDCInterface,\n ]) {\n try {\n if (options?.getMethodName) {\n return iface.getFunction(fourByte)?.name;\n }\n return iface.parseTransaction({ data });\n } catch {\n // Intentionally empty\n }\n }\n\n return undefined;\n}\n\n/**\n * Attempts to get the method name from the given transaction data.\n *\n * @param data - Encoded transaction data.\n * @returns The method name.\n */\nfunction getMethodName(data?: string): string | undefined {\n return decodeTransactionData(data as string, {\n getMethodName: true,\n }) as string | undefined;\n}\n\n/**\n * Reads an Ethereum address and determines if it is a contract address.\n *\n * @param ethQuery - The Ethereum query object used to interact with the Ethereum blockchain.\n * @param address - The Ethereum address.\n * @returns An object containing the contract code and a boolean indicating if it is a contract address.\n */\nasync function readAddressAsContract(\n ethQuery: EthQuery,\n address?: string,\n): Promise<{\n contractCode: string | null;\n isContractAddress: boolean;\n}> {\n let contractCode;\n try {\n contractCode = await query(ethQuery, 'getCode', [address]);\n // Not used\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n contractCode = null;\n }\n\n const isContractAddress = contractCode\n ? contractCode !== '0x' &&\n contractCode !== '0x0' &&\n !contractCode.startsWith(DELEGATION_PREFIX)\n : false;\n return { contractCode, isContractAddress };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask-previews/transaction-controller",
3
- "version": "63.1.0-preview-a0caca0c0",
3
+ "version": "63.2.0-preview-17c76be24",
4
4
  "description": "Stores transactions alongside their periodically updated statuses and manages interactions such as approval and cancellation",
5
5
  "keywords": [
6
6
  "MetaMask",
@@ -60,6 +60,7 @@
60
60
  "@metamask/base-controller": "^9.0.0",
61
61
  "@metamask/controller-utils": "^11.19.0",
62
62
  "@metamask/core-backend": "^6.2.0",
63
+ "@metamask/eth-query": "^4.0.0",
63
64
  "@metamask/gas-fee-controller": "^26.1.0",
64
65
  "@metamask/messenger": "^0.3.0",
65
66
  "@metamask/metamask-eth-abis": "^3.1.1",
@@ -79,7 +80,6 @@
79
80
  "devDependencies": {
80
81
  "@babel/runtime": "^7.23.9",
81
82
  "@metamask/auto-changelog": "^3.4.4",
82
- "@metamask/connectivity-controller": "^0.1.0",
83
83
  "@metamask/eth-block-tracker": "^15.0.0",
84
84
  "@metamask/eth-json-rpc-provider": "^6.0.0",
85
85
  "@metamask/ethjs-provider-http": "^0.3.0",
@@ -1,74 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getChainId = exports.getNetworkClientId = exports.rpcRequest = exports.getProvider = void 0;
4
- const logger_1 = require("../logger.cjs");
5
- const log = (0, logger_1.createModuleLogger)(logger_1.projectLogger, 'provider');
6
- /**
7
- * Get a provider for the specified chain or network client.
8
- * Resolves chainId to networkClientId if needed, then gets the provider.
9
- *
10
- * @param request - The request object.
11
- * @param request.messenger - The TransactionController messenger.
12
- * @param request.chainId - The chain ID to resolve to a network client.
13
- * @param request.networkClientId - The network client ID to use directly.
14
- * @returns The Provider instance.
15
- */
16
- function getProvider({ messenger, chainId, networkClientId, }) {
17
- const resolvedId = getNetworkClientId({
18
- messenger,
19
- chainId,
20
- networkClientId,
21
- });
22
- return messenger.call('NetworkController:getNetworkClientById', resolvedId).provider;
23
- }
24
- exports.getProvider = getProvider;
25
- /**
26
- * Send an RPC request to the network for the specified chain or network client.
27
- *
28
- * @param request - The request object.
29
- * @param request.messenger - The TransactionController messenger.
30
- * @param request.chainId - The chain ID to resolve to a network client.
31
- * @param request.networkClientId - The network client ID to use directly.
32
- * @param request.method - The JSON-RPC method name.
33
- * @param request.params - Optional parameters for the RPC call.
34
- * @returns The RPC response.
35
- */
36
- async function rpcRequest({ messenger, chainId, networkClientId, method, params, }) {
37
- const provider = getProvider({ messenger, chainId, networkClientId });
38
- const response = await provider.request({ method, params });
39
- log(method, { params, response });
40
- return response;
41
- }
42
- exports.rpcRequest = rpcRequest;
43
- /**
44
- * Get the network client ID for the specified chain or network client.
45
- *
46
- * @param request - The request object.
47
- * @param request.messenger - The TransactionController messenger.
48
- * @param request.chainId - The chain ID to resolve to a network client.
49
- * @param request.networkClientId - The network client ID to use directly.
50
- * @returns The network client ID.
51
- */
52
- function getNetworkClientId({ messenger, chainId, networkClientId, }) {
53
- if (networkClientId) {
54
- return networkClientId;
55
- }
56
- if (chainId) {
57
- return messenger.call('NetworkController:findNetworkClientIdByChainId', chainId);
58
- }
59
- throw new Error('Either chainId or networkClientId must be provided');
60
- }
61
- exports.getNetworkClientId = getNetworkClientId;
62
- /**
63
- * Get the chain ID for the specified network client.
64
- *
65
- * @param request - The request object.
66
- * @param request.messenger - The TransactionController messenger.
67
- * @param request.networkClientId - The network client ID.
68
- * @returns The chain ID.
69
- */
70
- function getChainId({ messenger, networkClientId, }) {
71
- return messenger.call('NetworkController:getNetworkClientById', networkClientId).configuration.chainId;
72
- }
73
- exports.getChainId = getChainId;
74
- //# sourceMappingURL=provider.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.cjs","sourceRoot":"","sources":["../../src/utils/provider.ts"],"names":[],"mappings":";;;AAIA,0CAA8D;AAE9D,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 type { TransactionControllerMessenger } from '../TransactionController';\nimport { createModuleLogger, projectLogger } from '../logger';\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,65 +0,0 @@
1
- import type { NetworkClientId, Provider } from "@metamask/network-controller";
2
- import type { Hex } from "@metamask/utils";
3
- import type { TransactionControllerMessenger } from "../TransactionController.cjs";
4
- type ProviderRequestParams = Parameters<Provider['request']>[0]['params'];
5
- /**
6
- * Get a provider for the specified chain or network client.
7
- * Resolves chainId to networkClientId if needed, then gets the provider.
8
- *
9
- * @param request - The request object.
10
- * @param request.messenger - The TransactionController messenger.
11
- * @param request.chainId - The chain ID to resolve to a network client.
12
- * @param request.networkClientId - The network client ID to use directly.
13
- * @returns The Provider instance.
14
- */
15
- export declare function getProvider({ messenger, chainId, networkClientId, }: {
16
- messenger: TransactionControllerMessenger;
17
- chainId?: Hex;
18
- networkClientId?: NetworkClientId;
19
- }): Provider;
20
- /**
21
- * Send an RPC request to the network for the specified chain or network client.
22
- *
23
- * @param request - The request object.
24
- * @param request.messenger - The TransactionController messenger.
25
- * @param request.chainId - The chain ID to resolve to a network client.
26
- * @param request.networkClientId - The network client ID to use directly.
27
- * @param request.method - The JSON-RPC method name.
28
- * @param request.params - Optional parameters for the RPC call.
29
- * @returns The RPC response.
30
- */
31
- export declare function rpcRequest({ messenger, chainId, networkClientId, method, params, }: {
32
- messenger: TransactionControllerMessenger;
33
- chainId?: Hex;
34
- networkClientId?: NetworkClientId;
35
- method: string;
36
- params?: ProviderRequestParams;
37
- }): Promise<unknown>;
38
- /**
39
- * Get the network client ID for the specified chain or network client.
40
- *
41
- * @param request - The request object.
42
- * @param request.messenger - The TransactionController messenger.
43
- * @param request.chainId - The chain ID to resolve to a network client.
44
- * @param request.networkClientId - The network client ID to use directly.
45
- * @returns The network client ID.
46
- */
47
- export declare function getNetworkClientId({ messenger, chainId, networkClientId, }: {
48
- messenger: TransactionControllerMessenger;
49
- chainId?: Hex;
50
- networkClientId?: NetworkClientId;
51
- }): NetworkClientId;
52
- /**
53
- * Get the chain ID for the specified network client.
54
- *
55
- * @param request - The request object.
56
- * @param request.messenger - The TransactionController messenger.
57
- * @param request.networkClientId - The network client ID.
58
- * @returns The chain ID.
59
- */
60
- export declare function getChainId({ messenger, networkClientId, }: {
61
- messenger: TransactionControllerMessenger;
62
- networkClientId: NetworkClientId;
63
- }): Hex;
64
- export {};
65
- //# sourceMappingURL=provider.d.cts.map
@@ -1 +0,0 @@
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;AAE3C,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAiC;AAK/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,65 +0,0 @@
1
- import type { NetworkClientId, Provider } from "@metamask/network-controller";
2
- import type { Hex } from "@metamask/utils";
3
- import type { TransactionControllerMessenger } from "../TransactionController.mjs";
4
- type ProviderRequestParams = Parameters<Provider['request']>[0]['params'];
5
- /**
6
- * Get a provider for the specified chain or network client.
7
- * Resolves chainId to networkClientId if needed, then gets the provider.
8
- *
9
- * @param request - The request object.
10
- * @param request.messenger - The TransactionController messenger.
11
- * @param request.chainId - The chain ID to resolve to a network client.
12
- * @param request.networkClientId - The network client ID to use directly.
13
- * @returns The Provider instance.
14
- */
15
- export declare function getProvider({ messenger, chainId, networkClientId, }: {
16
- messenger: TransactionControllerMessenger;
17
- chainId?: Hex;
18
- networkClientId?: NetworkClientId;
19
- }): Provider;
20
- /**
21
- * Send an RPC request to the network for the specified chain or network client.
22
- *
23
- * @param request - The request object.
24
- * @param request.messenger - The TransactionController messenger.
25
- * @param request.chainId - The chain ID to resolve to a network client.
26
- * @param request.networkClientId - The network client ID to use directly.
27
- * @param request.method - The JSON-RPC method name.
28
- * @param request.params - Optional parameters for the RPC call.
29
- * @returns The RPC response.
30
- */
31
- export declare function rpcRequest({ messenger, chainId, networkClientId, method, params, }: {
32
- messenger: TransactionControllerMessenger;
33
- chainId?: Hex;
34
- networkClientId?: NetworkClientId;
35
- method: string;
36
- params?: ProviderRequestParams;
37
- }): Promise<unknown>;
38
- /**
39
- * Get the network client ID for the specified chain or network client.
40
- *
41
- * @param request - The request object.
42
- * @param request.messenger - The TransactionController messenger.
43
- * @param request.chainId - The chain ID to resolve to a network client.
44
- * @param request.networkClientId - The network client ID to use directly.
45
- * @returns The network client ID.
46
- */
47
- export declare function getNetworkClientId({ messenger, chainId, networkClientId, }: {
48
- messenger: TransactionControllerMessenger;
49
- chainId?: Hex;
50
- networkClientId?: NetworkClientId;
51
- }): NetworkClientId;
52
- /**
53
- * Get the chain ID for the specified network client.
54
- *
55
- * @param request - The request object.
56
- * @param request.messenger - The TransactionController messenger.
57
- * @param request.networkClientId - The network client ID.
58
- * @returns The chain ID.
59
- */
60
- export declare function getChainId({ messenger, networkClientId, }: {
61
- messenger: TransactionControllerMessenger;
62
- networkClientId: NetworkClientId;
63
- }): Hex;
64
- export {};
65
- //# sourceMappingURL=provider.d.mts.map
@@ -1 +0,0 @@
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;AAE3C,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAiC;AAK/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,67 +0,0 @@
1
- import { createModuleLogger, projectLogger } from "../logger.mjs";
2
- const log = createModuleLogger(projectLogger, 'provider');
3
- /**
4
- * Get a provider for the specified chain or network client.
5
- * Resolves chainId to networkClientId if needed, then gets the provider.
6
- *
7
- * @param request - The request object.
8
- * @param request.messenger - The TransactionController messenger.
9
- * @param request.chainId - The chain ID to resolve to a network client.
10
- * @param request.networkClientId - The network client ID to use directly.
11
- * @returns The Provider instance.
12
- */
13
- export function getProvider({ messenger, chainId, networkClientId, }) {
14
- const resolvedId = getNetworkClientId({
15
- messenger,
16
- chainId,
17
- networkClientId,
18
- });
19
- return messenger.call('NetworkController:getNetworkClientById', resolvedId).provider;
20
- }
21
- /**
22
- * Send an RPC request to the network for the specified chain or network client.
23
- *
24
- * @param request - The request object.
25
- * @param request.messenger - The TransactionController messenger.
26
- * @param request.chainId - The chain ID to resolve to a network client.
27
- * @param request.networkClientId - The network client ID to use directly.
28
- * @param request.method - The JSON-RPC method name.
29
- * @param request.params - Optional parameters for the RPC call.
30
- * @returns The RPC response.
31
- */
32
- export async function rpcRequest({ messenger, chainId, networkClientId, method, params, }) {
33
- const provider = getProvider({ messenger, chainId, networkClientId });
34
- const response = await provider.request({ method, params });
35
- log(method, { params, response });
36
- return response;
37
- }
38
- /**
39
- * Get the network client ID for the specified chain or network client.
40
- *
41
- * @param request - The request object.
42
- * @param request.messenger - The TransactionController messenger.
43
- * @param request.chainId - The chain ID to resolve to a network client.
44
- * @param request.networkClientId - The network client ID to use directly.
45
- * @returns The network client ID.
46
- */
47
- export function getNetworkClientId({ messenger, chainId, networkClientId, }) {
48
- if (networkClientId) {
49
- return networkClientId;
50
- }
51
- if (chainId) {
52
- return messenger.call('NetworkController:findNetworkClientIdByChainId', chainId);
53
- }
54
- throw new Error('Either chainId or networkClientId must be provided');
55
- }
56
- /**
57
- * Get the chain ID for the specified network client.
58
- *
59
- * @param request - The request object.
60
- * @param request.messenger - The TransactionController messenger.
61
- * @param request.networkClientId - The network client ID.
62
- * @returns The chain ID.
63
- */
64
- export function getChainId({ messenger, networkClientId, }) {
65
- return messenger.call('NetworkController:getNetworkClientById', networkClientId).configuration.chainId;
66
- }
67
- //# sourceMappingURL=provider.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.mjs","sourceRoot":"","sources":["../../src/utils/provider.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,sBAAkB;AAE9D,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 type { TransactionControllerMessenger } from '../TransactionController';\nimport { createModuleLogger, projectLogger } from '../logger';\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"]}