@metamask-previews/transaction-controller 36.1.0-preview-367cb1da → 36.1.0-preview-cf09c0a

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 (479) hide show
  1. package/dist/TransactionController.cjs +2026 -0
  2. package/dist/TransactionController.cjs.map +1 -0
  3. package/dist/{types/TransactionController.d.ts → TransactionController.d.cts} +15 -15
  4. package/dist/TransactionController.d.cts.map +1 -0
  5. package/dist/TransactionController.d.mts +827 -0
  6. package/dist/TransactionController.d.mts.map +1 -0
  7. package/dist/TransactionController.mjs +2027 -44
  8. package/dist/TransactionController.mjs.map +1 -1
  9. package/dist/constants.cjs +170 -0
  10. package/dist/constants.cjs.map +1 -0
  11. package/dist/{types/constants.d.ts → constants.d.cts} +1 -1
  12. package/dist/constants.d.cts.map +1 -0
  13. package/dist/constants.d.mts +143 -0
  14. package/dist/constants.d.mts.map +1 -0
  15. package/dist/constants.mjs +165 -18
  16. package/dist/constants.mjs.map +1 -1
  17. package/dist/errors.cjs +30 -0
  18. package/dist/{chunk-HMOSP33F.js.map → errors.cjs.map} +1 -1
  19. package/dist/{types/errors.d.ts → errors.d.cts} +2 -2
  20. package/dist/errors.d.cts.map +1 -0
  21. package/dist/errors.d.mts +15 -0
  22. package/dist/errors.d.mts.map +1 -0
  23. package/dist/errors.mjs +22 -14
  24. package/dist/errors.mjs.map +1 -1
  25. package/dist/gas-flows/DefaultGasFeeFlow.cjs +87 -0
  26. package/dist/gas-flows/DefaultGasFeeFlow.cjs.map +1 -0
  27. package/dist/{types/gas-flows/DefaultGasFeeFlow.d.ts → gas-flows/DefaultGasFeeFlow.d.cts} +2 -2
  28. package/dist/gas-flows/DefaultGasFeeFlow.d.cts.map +1 -0
  29. package/dist/gas-flows/DefaultGasFeeFlow.d.mts +10 -0
  30. package/dist/gas-flows/DefaultGasFeeFlow.d.mts.map +1 -0
  31. package/dist/gas-flows/DefaultGasFeeFlow.mjs +81 -13
  32. package/dist/gas-flows/DefaultGasFeeFlow.mjs.map +1 -1
  33. package/dist/gas-flows/LineaGasFeeFlow.cjs +102 -0
  34. package/dist/gas-flows/LineaGasFeeFlow.cjs.map +1 -0
  35. package/dist/{types/gas-flows/LineaGasFeeFlow.d.ts → gas-flows/LineaGasFeeFlow.d.cts} +2 -2
  36. package/dist/gas-flows/LineaGasFeeFlow.d.cts.map +1 -0
  37. package/dist/gas-flows/LineaGasFeeFlow.d.mts +12 -0
  38. package/dist/gas-flows/LineaGasFeeFlow.d.mts.map +1 -0
  39. package/dist/gas-flows/LineaGasFeeFlow.mjs +96 -14
  40. package/dist/gas-flows/LineaGasFeeFlow.mjs.map +1 -1
  41. package/dist/gas-flows/OptimismLayer1GasFeeFlow.cjs +29 -0
  42. package/dist/gas-flows/OptimismLayer1GasFeeFlow.cjs.map +1 -0
  43. package/dist/{types/gas-flows/OptimismLayer1GasFeeFlow.d.ts → gas-flows/OptimismLayer1GasFeeFlow.d.cts} +3 -3
  44. package/dist/gas-flows/OptimismLayer1GasFeeFlow.d.cts.map +1 -0
  45. package/dist/gas-flows/OptimismLayer1GasFeeFlow.d.mts +10 -0
  46. package/dist/gas-flows/OptimismLayer1GasFeeFlow.d.mts.map +1 -0
  47. package/dist/gas-flows/OptimismLayer1GasFeeFlow.mjs +24 -10
  48. package/dist/gas-flows/OptimismLayer1GasFeeFlow.mjs.map +1 -1
  49. package/dist/gas-flows/OracleLayer1GasFeeFlow.cjs +92 -0
  50. package/dist/gas-flows/OracleLayer1GasFeeFlow.cjs.map +1 -0
  51. package/dist/{types/gas-flows/OracleLayer1GasFeeFlow.d.ts → gas-flows/OracleLayer1GasFeeFlow.d.cts} +3 -3
  52. package/dist/gas-flows/OracleLayer1GasFeeFlow.d.cts.map +1 -0
  53. package/dist/gas-flows/OracleLayer1GasFeeFlow.d.mts +12 -0
  54. package/dist/gas-flows/OracleLayer1GasFeeFlow.d.mts.map +1 -0
  55. package/dist/gas-flows/OracleLayer1GasFeeFlow.mjs +88 -7
  56. package/dist/gas-flows/OracleLayer1GasFeeFlow.mjs.map +1 -1
  57. package/dist/gas-flows/ScrollLayer1GasFeeFlow.cjs +21 -0
  58. package/dist/gas-flows/ScrollLayer1GasFeeFlow.cjs.map +1 -0
  59. package/dist/{types/gas-flows/ScrollLayer1GasFeeFlow.d.ts → gas-flows/ScrollLayer1GasFeeFlow.d.cts} +3 -3
  60. package/dist/gas-flows/ScrollLayer1GasFeeFlow.d.cts.map +1 -0
  61. package/dist/gas-flows/ScrollLayer1GasFeeFlow.d.mts +10 -0
  62. package/dist/gas-flows/ScrollLayer1GasFeeFlow.d.mts.map +1 -0
  63. package/dist/gas-flows/ScrollLayer1GasFeeFlow.mjs +16 -10
  64. package/dist/gas-flows/ScrollLayer1GasFeeFlow.mjs.map +1 -1
  65. package/dist/gas-flows/TestGasFeeFlow.cjs +73 -0
  66. package/dist/{chunk-FMRLPVFZ.mjs.map → gas-flows/TestGasFeeFlow.cjs.map} +1 -1
  67. package/dist/{types/gas-flows/TestGasFeeFlow.d.ts → gas-flows/TestGasFeeFlow.d.cts} +2 -2
  68. package/dist/gas-flows/TestGasFeeFlow.d.cts.map +1 -0
  69. package/dist/gas-flows/TestGasFeeFlow.d.mts +12 -0
  70. package/dist/gas-flows/TestGasFeeFlow.d.mts.map +1 -0
  71. package/dist/gas-flows/TestGasFeeFlow.mjs +67 -7
  72. package/dist/gas-flows/TestGasFeeFlow.mjs.map +1 -1
  73. package/dist/helpers/EtherscanRemoteTransactionSource.cjs +149 -0
  74. package/dist/helpers/EtherscanRemoteTransactionSource.cjs.map +1 -0
  75. package/dist/{types/helpers/EtherscanRemoteTransactionSource.d.ts → helpers/EtherscanRemoteTransactionSource.d.cts} +3 -3
  76. package/dist/helpers/EtherscanRemoteTransactionSource.d.cts.map +1 -0
  77. package/dist/helpers/EtherscanRemoteTransactionSource.d.mts +15 -0
  78. package/dist/helpers/EtherscanRemoteTransactionSource.d.mts.map +1 -0
  79. package/dist/helpers/EtherscanRemoteTransactionSource.mjs +147 -10
  80. package/dist/helpers/EtherscanRemoteTransactionSource.mjs.map +1 -1
  81. package/dist/helpers/GasFeePoller.cjs +185 -0
  82. package/dist/helpers/GasFeePoller.cjs.map +1 -0
  83. package/dist/{types/helpers/GasFeePoller.d.ts → helpers/GasFeePoller.d.cts} +7 -7
  84. package/dist/helpers/GasFeePoller.d.cts.map +1 -0
  85. package/dist/helpers/GasFeePoller.d.mts +35 -0
  86. package/dist/helpers/GasFeePoller.d.mts.map +1 -0
  87. package/dist/helpers/GasFeePoller.mjs +183 -10
  88. package/dist/helpers/GasFeePoller.mjs.map +1 -1
  89. package/dist/helpers/IncomingTransactionHelper.cjs +199 -0
  90. package/dist/helpers/IncomingTransactionHelper.cjs.map +1 -0
  91. package/dist/{types/helpers/IncomingTransactionHelper.d.ts → helpers/IncomingTransactionHelper.d.cts} +6 -6
  92. package/dist/helpers/IncomingTransactionHelper.d.cts.map +1 -0
  93. package/dist/helpers/IncomingTransactionHelper.d.mts +40 -0
  94. package/dist/helpers/IncomingTransactionHelper.d.mts.map +1 -0
  95. package/dist/helpers/IncomingTransactionHelper.mjs +190 -7
  96. package/dist/helpers/IncomingTransactionHelper.mjs.map +1 -1
  97. package/dist/helpers/MultichainTrackingHelper.cjs +284 -0
  98. package/dist/helpers/MultichainTrackingHelper.cjs.map +1 -0
  99. package/dist/{types/helpers/MultichainTrackingHelper.d.ts → helpers/MultichainTrackingHelper.d.cts} +8 -8
  100. package/dist/helpers/MultichainTrackingHelper.d.cts.map +1 -0
  101. package/dist/helpers/MultichainTrackingHelper.d.mts +76 -0
  102. package/dist/helpers/MultichainTrackingHelper.d.mts.map +1 -0
  103. package/dist/helpers/MultichainTrackingHelper.mjs +282 -11
  104. package/dist/helpers/MultichainTrackingHelper.mjs.map +1 -1
  105. package/dist/helpers/PendingTransactionTracker.cjs +328 -0
  106. package/dist/helpers/PendingTransactionTracker.cjs.map +1 -0
  107. package/dist/{types/helpers/PendingTransactionTracker.d.ts → helpers/PendingTransactionTracker.d.cts} +5 -5
  108. package/dist/helpers/PendingTransactionTracker.d.cts.map +1 -0
  109. package/dist/helpers/PendingTransactionTracker.d.mts +42 -0
  110. package/dist/helpers/PendingTransactionTracker.d.mts.map +1 -0
  111. package/dist/helpers/PendingTransactionTracker.mjs +320 -8
  112. package/dist/helpers/PendingTransactionTracker.mjs.map +1 -1
  113. package/dist/index.cjs +28 -0
  114. package/dist/index.cjs.map +1 -0
  115. package/dist/{types/index.d.ts → index.d.cts} +10 -10
  116. package/dist/index.d.cts.map +1 -0
  117. package/dist/index.d.mts +10 -0
  118. package/dist/index.d.mts.map +1 -0
  119. package/dist/index.mjs +6 -76
  120. package/dist/index.mjs.map +1 -1
  121. package/dist/logger.cjs +9 -0
  122. package/dist/logger.cjs.map +1 -0
  123. package/dist/{types/logger.d.ts → logger.d.cts} +2 -2
  124. package/dist/logger.d.cts.map +1 -0
  125. package/dist/logger.d.mts +6 -0
  126. package/dist/logger.d.mts.map +1 -0
  127. package/dist/logger.mjs +5 -11
  128. package/dist/logger.mjs.map +1 -1
  129. package/dist/types.cjs +308 -0
  130. package/dist/types.cjs.map +1 -0
  131. package/dist/{types/types.d.ts → types.d.cts} +7 -7
  132. package/dist/types.d.cts.map +1 -0
  133. package/dist/types.d.mts +999 -0
  134. package/dist/types.d.mts.map +1 -0
  135. package/dist/types.mjs +304 -23
  136. package/dist/types.mjs.map +1 -1
  137. package/dist/utils/etherscan.cjs +111 -0
  138. package/dist/utils/etherscan.cjs.map +1 -0
  139. package/dist/{types/utils/etherscan.d.ts → utils/etherscan.d.cts} +2 -2
  140. package/dist/utils/etherscan.d.cts.map +1 -0
  141. package/dist/utils/etherscan.d.mts +71 -0
  142. package/dist/utils/etherscan.d.mts.map +1 -0
  143. package/dist/utils/etherscan.mjs +104 -13
  144. package/dist/utils/etherscan.mjs.map +1 -1
  145. package/dist/utils/external-transactions.cjs +36 -0
  146. package/dist/utils/external-transactions.cjs.map +1 -0
  147. package/dist/{types/utils/external-transactions.d.ts → utils/external-transactions.d.cts} +2 -2
  148. package/dist/utils/external-transactions.d.cts.map +1 -0
  149. package/dist/utils/external-transactions.d.mts +10 -0
  150. package/dist/utils/external-transactions.d.mts.map +1 -0
  151. package/dist/utils/external-transactions.mjs +31 -8
  152. package/dist/utils/external-transactions.mjs.map +1 -1
  153. package/dist/utils/gas-fees.cjs +208 -0
  154. package/dist/utils/gas-fees.cjs.map +1 -0
  155. package/dist/{types/utils/gas-fees.d.ts → utils/gas-fees.d.cts} +5 -5
  156. package/dist/utils/gas-fees.d.cts.map +1 -0
  157. package/dist/utils/gas-fees.d.mts +26 -0
  158. package/dist/utils/gas-fees.d.mts.map +1 -0
  159. package/dist/utils/gas-fees.mjs +202 -15
  160. package/dist/utils/gas-fees.mjs.map +1 -1
  161. package/dist/utils/gas-flow.cjs +76 -0
  162. package/dist/utils/gas-flow.cjs.map +1 -0
  163. package/dist/{types/utils/gas-flow.d.ts → utils/gas-flow.d.cts} +5 -5
  164. package/dist/utils/gas-flow.d.cts.map +1 -0
  165. package/dist/utils/gas-flow.d.mts +26 -0
  166. package/dist/utils/gas-flow.d.mts.map +1 -0
  167. package/dist/utils/gas-flow.mjs +70 -10
  168. package/dist/utils/gas-flow.mjs.map +1 -1
  169. package/dist/utils/gas.cjs +112 -0
  170. package/dist/utils/gas.cjs.map +1 -0
  171. package/dist/{types/utils/gas.d.ts → utils/gas.d.cts} +4 -4
  172. package/dist/utils/gas.d.cts.map +1 -0
  173. package/dist/utils/gas.d.mts +28 -0
  174. package/dist/utils/gas.d.mts.map +1 -0
  175. package/dist/utils/gas.mjs +105 -19
  176. package/dist/utils/gas.mjs.map +1 -1
  177. package/dist/utils/history.cjs +164 -0
  178. package/dist/utils/history.cjs.map +1 -0
  179. package/dist/{types/utils/history.d.ts → utils/history.d.cts} +2 -2
  180. package/dist/utils/history.d.cts.map +1 -0
  181. package/dist/utils/history.d.mts +29 -0
  182. package/dist/utils/history.d.mts.map +1 -0
  183. package/dist/utils/history.mjs +163 -13
  184. package/dist/utils/history.mjs.map +1 -1
  185. package/dist/utils/layer1-gas-fee-flow.cjs +59 -0
  186. package/dist/utils/layer1-gas-fee-flow.cjs.map +1 -0
  187. package/dist/{types/utils/layer1-gas-fee-flow.d.ts → utils/layer1-gas-fee-flow.d.cts} +4 -4
  188. package/dist/utils/layer1-gas-fee-flow.d.cts.map +1 -0
  189. package/dist/utils/layer1-gas-fee-flow.d.mts +25 -0
  190. package/dist/utils/layer1-gas-fee-flow.d.mts.map +1 -0
  191. package/dist/utils/layer1-gas-fee-flow.mjs +53 -10
  192. package/dist/utils/layer1-gas-fee-flow.mjs.map +1 -1
  193. package/dist/utils/nonce.cjs +66 -0
  194. package/dist/utils/nonce.cjs.map +1 -0
  195. package/dist/{types/utils/nonce.d.ts → utils/nonce.d.cts} +3 -3
  196. package/dist/utils/nonce.d.cts.map +1 -0
  197. package/dist/utils/nonce.d.mts +21 -0
  198. package/dist/utils/nonce.d.mts.map +1 -0
  199. package/dist/utils/nonce.mjs +60 -10
  200. package/dist/utils/nonce.mjs.map +1 -1
  201. package/dist/utils/retry.cjs +89 -0
  202. package/dist/utils/retry.cjs.map +1 -0
  203. package/dist/{types/utils/retry.d.ts → utils/retry.d.cts} +3 -3
  204. package/dist/utils/retry.d.cts.map +1 -0
  205. package/dist/utils/retry.d.mts +11 -0
  206. package/dist/utils/retry.d.mts.map +1 -0
  207. package/dist/utils/retry.mjs +84 -7
  208. package/dist/utils/retry.mjs.map +1 -1
  209. package/dist/utils/simulation-api.cjs +72 -0
  210. package/dist/utils/simulation-api.cjs.map +1 -0
  211. package/dist/{types/utils/simulation-api.d.ts → utils/simulation-api.d.cts} +2 -2
  212. package/dist/utils/simulation-api.d.cts.map +1 -0
  213. package/dist/utils/simulation-api.d.mts +107 -0
  214. package/dist/utils/simulation-api.d.mts.map +1 -0
  215. package/dist/utils/simulation-api.mjs +67 -10
  216. package/dist/utils/simulation-api.mjs.map +1 -1
  217. package/dist/utils/simulation.cjs +443 -0
  218. package/dist/utils/simulation.cjs.map +1 -0
  219. package/dist/{types/utils/simulation.d.ts → utils/simulation.d.cts} +6 -6
  220. package/dist/utils/simulation.d.cts.map +1 -0
  221. package/dist/utils/simulation.d.mts +46 -0
  222. package/dist/utils/simulation.d.mts.map +1 -0
  223. package/dist/utils/simulation.mjs +436 -15
  224. package/dist/utils/simulation.mjs.map +1 -1
  225. package/dist/utils/swaps.cjs +309 -0
  226. package/dist/utils/swaps.cjs.map +1 -0
  227. package/dist/{types/utils/swaps.d.ts → utils/swaps.d.cts} +5 -5
  228. package/dist/utils/swaps.d.cts.map +1 -0
  229. package/dist/utils/swaps.d.mts +84 -0
  230. package/dist/utils/swaps.d.mts.map +1 -0
  231. package/dist/utils/swaps.mjs +303 -22
  232. package/dist/utils/swaps.mjs.map +1 -1
  233. package/dist/utils/transaction-type.cjs +115 -0
  234. package/dist/utils/transaction-type.cjs.map +1 -0
  235. package/dist/{types/utils/transaction-type.d.ts → utils/transaction-type.d.cts} +3 -3
  236. package/dist/utils/transaction-type.d.cts.map +1 -0
  237. package/dist/utils/transaction-type.d.mts +14 -0
  238. package/dist/utils/transaction-type.d.mts.map +1 -0
  239. package/dist/utils/transaction-type.mjs +110 -10
  240. package/dist/utils/transaction-type.mjs.map +1 -1
  241. package/dist/utils/utils.cjs +151 -0
  242. package/dist/utils/utils.cjs.map +1 -0
  243. package/dist/{types/utils/utils.d.ts → utils/utils.d.cts} +2 -2
  244. package/dist/utils/utils.d.cts.map +1 -0
  245. package/dist/utils/utils.d.mts +52 -0
  246. package/dist/utils/utils.d.mts.map +1 -0
  247. package/dist/utils/utils.mjs +139 -21
  248. package/dist/utils/utils.mjs.map +1 -1
  249. package/dist/utils/validation.cjs +267 -0
  250. package/dist/{chunk-DIPBZJ5G.js.map → utils/validation.cjs.map} +1 -1
  251. package/dist/{types/utils/validation.d.ts → utils/validation.d.cts} +2 -2
  252. package/dist/utils/validation.d.cts.map +1 -0
  253. package/dist/utils/validation.d.mts +20 -0
  254. package/dist/utils/validation.d.mts.map +1 -0
  255. package/dist/utils/validation.mjs +261 -11
  256. package/dist/utils/validation.mjs.map +1 -1
  257. package/package.json +12 -7
  258. package/dist/TransactionController.js +0 -46
  259. package/dist/TransactionController.js.map +0 -1
  260. package/dist/chunk-2XKEAKQG.js +0 -55
  261. package/dist/chunk-2XKEAKQG.js.map +0 -1
  262. package/dist/chunk-3AVRGHUO.mjs +0 -360
  263. package/dist/chunk-3AVRGHUO.mjs.map +0 -1
  264. package/dist/chunk-3ZV5YEUV.mjs +0 -239
  265. package/dist/chunk-3ZV5YEUV.mjs.map +0 -1
  266. package/dist/chunk-4SYKJQLR.js +0 -228
  267. package/dist/chunk-4SYKJQLR.js.map +0 -1
  268. package/dist/chunk-4V4XIPCI.mjs +0 -338
  269. package/dist/chunk-4V4XIPCI.mjs.map +0 -1
  270. package/dist/chunk-4ZOE2ACZ.js +0 -67
  271. package/dist/chunk-4ZOE2ACZ.js.map +0 -1
  272. package/dist/chunk-5G6OHAXI.mjs +0 -137
  273. package/dist/chunk-5G6OHAXI.mjs.map +0 -1
  274. package/dist/chunk-5QVDIVJH.js +0 -68
  275. package/dist/chunk-5QVDIVJH.js.map +0 -1
  276. package/dist/chunk-6DDVVUJC.mjs +0 -50
  277. package/dist/chunk-6DDVVUJC.mjs.map +0 -1
  278. package/dist/chunk-6DODV6OV.js +0 -390
  279. package/dist/chunk-6DODV6OV.js.map +0 -1
  280. package/dist/chunk-6JO6EU6Z.mjs +0 -67
  281. package/dist/chunk-6JO6EU6Z.mjs.map +0 -1
  282. package/dist/chunk-6OLJWLKK.js +0 -338
  283. package/dist/chunk-6OLJWLKK.js.map +0 -1
  284. package/dist/chunk-7LXE4KHV.js +0 -40
  285. package/dist/chunk-7LXE4KHV.js.map +0 -1
  286. package/dist/chunk-7M2R5AHC.mjs +0 -390
  287. package/dist/chunk-7M2R5AHC.mjs.map +0 -1
  288. package/dist/chunk-7NMV2NPM.js +0 -172
  289. package/dist/chunk-7NMV2NPM.js.map +0 -1
  290. package/dist/chunk-ASTXVFGJ.mjs +0 -92
  291. package/dist/chunk-ASTXVFGJ.mjs.map +0 -1
  292. package/dist/chunk-CKRPGICI.js +0 -2499
  293. package/dist/chunk-CKRPGICI.js.map +0 -1
  294. package/dist/chunk-DIPBZJ5G.js +0 -201
  295. package/dist/chunk-EGQCE3FK.mjs +0 -85
  296. package/dist/chunk-EGQCE3FK.mjs.map +0 -1
  297. package/dist/chunk-EHIRNR33.mjs +0 -228
  298. package/dist/chunk-EHIRNR33.mjs.map +0 -1
  299. package/dist/chunk-EKJXGERC.mjs +0 -172
  300. package/dist/chunk-EKJXGERC.mjs.map +0 -1
  301. package/dist/chunk-FG74Z3F5.mjs +0 -102
  302. package/dist/chunk-FG74Z3F5.mjs.map +0 -1
  303. package/dist/chunk-FMRLPVFZ.mjs +0 -66
  304. package/dist/chunk-FRKQ3Z2L.mjs +0 -40
  305. package/dist/chunk-FRKQ3Z2L.mjs.map +0 -1
  306. package/dist/chunk-H5MYUJHR.js +0 -92
  307. package/dist/chunk-H5MYUJHR.js.map +0 -1
  308. package/dist/chunk-HAW3IWCX.mjs +0 -201
  309. package/dist/chunk-HAW3IWCX.mjs.map +0 -1
  310. package/dist/chunk-HMOSP33F.js +0 -36
  311. package/dist/chunk-HQSNKCXI.mjs +0 -36
  312. package/dist/chunk-HQSNKCXI.mjs.map +0 -1
  313. package/dist/chunk-JIFPK37W.mjs +0 -257
  314. package/dist/chunk-JIFPK37W.mjs.map +0 -1
  315. package/dist/chunk-JOQK7A5G.mjs +0 -68
  316. package/dist/chunk-JOQK7A5G.mjs.map +0 -1
  317. package/dist/chunk-K4KOSAGM.mjs +0 -61
  318. package/dist/chunk-K4KOSAGM.mjs.map +0 -1
  319. package/dist/chunk-KG4UW4K4.mjs +0 -88
  320. package/dist/chunk-KG4UW4K4.mjs.map +0 -1
  321. package/dist/chunk-KT6UAKBB.js +0 -61
  322. package/dist/chunk-KT6UAKBB.js.map +0 -1
  323. package/dist/chunk-KTGMNUTQ.js +0 -106
  324. package/dist/chunk-KTGMNUTQ.js.map +0 -1
  325. package/dist/chunk-NNCUD3QF.js +0 -360
  326. package/dist/chunk-NNCUD3QF.js.map +0 -1
  327. package/dist/chunk-NOHEXQ7Y.mjs +0 -55
  328. package/dist/chunk-NOHEXQ7Y.mjs.map +0 -1
  329. package/dist/chunk-NYKRCWBG.js +0 -31
  330. package/dist/chunk-NYKRCWBG.js.map +0 -1
  331. package/dist/chunk-O6ZZVIFH.mjs +0 -176
  332. package/dist/chunk-O6ZZVIFH.mjs.map +0 -1
  333. package/dist/chunk-ORWR5LSG.js +0 -112
  334. package/dist/chunk-ORWR5LSG.js.map +0 -1
  335. package/dist/chunk-PRUNMTRD.js +0 -50
  336. package/dist/chunk-PRUNMTRD.js.map +0 -1
  337. package/dist/chunk-Q44JQKVP.mjs +0 -112
  338. package/dist/chunk-Q44JQKVP.mjs.map +0 -1
  339. package/dist/chunk-QKV7E5BO.js +0 -257
  340. package/dist/chunk-QKV7E5BO.js.map +0 -1
  341. package/dist/chunk-REFVF44I.mjs +0 -2499
  342. package/dist/chunk-REFVF44I.mjs.map +0 -1
  343. package/dist/chunk-RGWMNCTE.mjs +0 -121
  344. package/dist/chunk-RGWMNCTE.mjs.map +0 -1
  345. package/dist/chunk-RHDPOIS4.js +0 -239
  346. package/dist/chunk-RHDPOIS4.js.map +0 -1
  347. package/dist/chunk-S6VGOPUY.js +0 -14
  348. package/dist/chunk-S6VGOPUY.js.map +0 -1
  349. package/dist/chunk-SD6CWFDF.js +0 -88
  350. package/dist/chunk-SD6CWFDF.js.map +0 -1
  351. package/dist/chunk-SMC5Q6ZH.mjs +0 -120
  352. package/dist/chunk-SMC5Q6ZH.mjs.map +0 -1
  353. package/dist/chunk-TIE3CPF7.js +0 -120
  354. package/dist/chunk-TIE3CPF7.js.map +0 -1
  355. package/dist/chunk-TJMQEH57.js +0 -66
  356. package/dist/chunk-TJMQEH57.js.map +0 -1
  357. package/dist/chunk-UGN7PBON.js +0 -176
  358. package/dist/chunk-UGN7PBON.js.map +0 -1
  359. package/dist/chunk-UHSRHP55.mjs +0 -106
  360. package/dist/chunk-UHSRHP55.mjs.map +0 -1
  361. package/dist/chunk-UQQWZT6C.mjs +0 -14
  362. package/dist/chunk-UQQWZT6C.mjs.map +0 -1
  363. package/dist/chunk-V2OWJ7RY.mjs +0 -226
  364. package/dist/chunk-V2OWJ7RY.mjs.map +0 -1
  365. package/dist/chunk-V72C4MCR.js +0 -137
  366. package/dist/chunk-V72C4MCR.js.map +0 -1
  367. package/dist/chunk-VEVVBHP3.mjs +0 -31
  368. package/dist/chunk-VEVVBHP3.mjs.map +0 -1
  369. package/dist/chunk-WFRHYZIO.js +0 -226
  370. package/dist/chunk-WFRHYZIO.js.map +0 -1
  371. package/dist/chunk-WR5F34OW.js +0 -23
  372. package/dist/chunk-WR5F34OW.js.map +0 -1
  373. package/dist/chunk-XUI43LEZ.mjs +0 -30
  374. package/dist/chunk-XUI43LEZ.mjs.map +0 -1
  375. package/dist/chunk-XVYXRCRL.js +0 -85
  376. package/dist/chunk-XVYXRCRL.js.map +0 -1
  377. package/dist/chunk-YAFENU6Y.js +0 -121
  378. package/dist/chunk-YAFENU6Y.js.map +0 -1
  379. package/dist/chunk-YVCX6Z75.js +0 -102
  380. package/dist/chunk-YVCX6Z75.js.map +0 -1
  381. package/dist/chunk-Z4BLTVTB.js +0 -30
  382. package/dist/chunk-Z4BLTVTB.js.map +0 -1
  383. package/dist/chunk-Z4GV3YQQ.mjs +0 -23
  384. package/dist/chunk-Z4GV3YQQ.mjs.map +0 -1
  385. package/dist/constants.js +0 -20
  386. package/dist/constants.js.map +0 -1
  387. package/dist/errors.js +0 -15
  388. package/dist/errors.js.map +0 -1
  389. package/dist/gas-flows/DefaultGasFeeFlow.js +0 -15
  390. package/dist/gas-flows/DefaultGasFeeFlow.js.map +0 -1
  391. package/dist/gas-flows/LineaGasFeeFlow.js +0 -16
  392. package/dist/gas-flows/LineaGasFeeFlow.js.map +0 -1
  393. package/dist/gas-flows/OptimismLayer1GasFeeFlow.js +0 -11
  394. package/dist/gas-flows/OptimismLayer1GasFeeFlow.js.map +0 -1
  395. package/dist/gas-flows/OracleLayer1GasFeeFlow.js +0 -9
  396. package/dist/gas-flows/OracleLayer1GasFeeFlow.js.map +0 -1
  397. package/dist/gas-flows/ScrollLayer1GasFeeFlow.js +0 -11
  398. package/dist/gas-flows/ScrollLayer1GasFeeFlow.js.map +0 -1
  399. package/dist/gas-flows/TestGasFeeFlow.js +0 -9
  400. package/dist/gas-flows/TestGasFeeFlow.js.map +0 -1
  401. package/dist/helpers/EtherscanRemoteTransactionSource.js +0 -12
  402. package/dist/helpers/EtherscanRemoteTransactionSource.js.map +0 -1
  403. package/dist/helpers/GasFeePoller.js +0 -12
  404. package/dist/helpers/GasFeePoller.js.map +0 -1
  405. package/dist/helpers/IncomingTransactionHelper.js +0 -9
  406. package/dist/helpers/IncomingTransactionHelper.js.map +0 -1
  407. package/dist/helpers/MultichainTrackingHelper.js +0 -13
  408. package/dist/helpers/MultichainTrackingHelper.js.map +0 -1
  409. package/dist/helpers/PendingTransactionTracker.js +0 -10
  410. package/dist/helpers/PendingTransactionTracker.js.map +0 -1
  411. package/dist/index.js +0 -77
  412. package/dist/index.js.map +0 -1
  413. package/dist/logger.js +0 -12
  414. package/dist/logger.js.map +0 -1
  415. package/dist/tsconfig.build.tsbuildinfo +0 -1
  416. package/dist/types/TransactionController.d.ts.map +0 -1
  417. package/dist/types/constants.d.ts.map +0 -1
  418. package/dist/types/errors.d.ts.map +0 -1
  419. package/dist/types/gas-flows/DefaultGasFeeFlow.d.ts.map +0 -1
  420. package/dist/types/gas-flows/LineaGasFeeFlow.d.ts.map +0 -1
  421. package/dist/types/gas-flows/OptimismLayer1GasFeeFlow.d.ts.map +0 -1
  422. package/dist/types/gas-flows/OracleLayer1GasFeeFlow.d.ts.map +0 -1
  423. package/dist/types/gas-flows/ScrollLayer1GasFeeFlow.d.ts.map +0 -1
  424. package/dist/types/gas-flows/TestGasFeeFlow.d.ts.map +0 -1
  425. package/dist/types/helpers/EtherscanRemoteTransactionSource.d.ts.map +0 -1
  426. package/dist/types/helpers/GasFeePoller.d.ts.map +0 -1
  427. package/dist/types/helpers/IncomingTransactionHelper.d.ts.map +0 -1
  428. package/dist/types/helpers/MultichainTrackingHelper.d.ts.map +0 -1
  429. package/dist/types/helpers/PendingTransactionTracker.d.ts.map +0 -1
  430. package/dist/types/index.d.ts.map +0 -1
  431. package/dist/types/logger.d.ts.map +0 -1
  432. package/dist/types/types.d.ts.map +0 -1
  433. package/dist/types/utils/etherscan.d.ts.map +0 -1
  434. package/dist/types/utils/external-transactions.d.ts.map +0 -1
  435. package/dist/types/utils/gas-fees.d.ts.map +0 -1
  436. package/dist/types/utils/gas-flow.d.ts.map +0 -1
  437. package/dist/types/utils/gas.d.ts.map +0 -1
  438. package/dist/types/utils/history.d.ts.map +0 -1
  439. package/dist/types/utils/layer1-gas-fee-flow.d.ts.map +0 -1
  440. package/dist/types/utils/nonce.d.ts.map +0 -1
  441. package/dist/types/utils/retry.d.ts.map +0 -1
  442. package/dist/types/utils/simulation-api.d.ts.map +0 -1
  443. package/dist/types/utils/simulation.d.ts.map +0 -1
  444. package/dist/types/utils/swaps.d.ts.map +0 -1
  445. package/dist/types/utils/transaction-type.d.ts.map +0 -1
  446. package/dist/types/utils/utils.d.ts.map +0 -1
  447. package/dist/types/utils/validation.d.ts.map +0 -1
  448. package/dist/types.js +0 -24
  449. package/dist/types.js.map +0 -1
  450. package/dist/utils/etherscan.js +0 -14
  451. package/dist/utils/etherscan.js.map +0 -1
  452. package/dist/utils/external-transactions.js +0 -9
  453. package/dist/utils/external-transactions.js.map +0 -1
  454. package/dist/utils/gas-fees.js +0 -16
  455. package/dist/utils/gas-fees.js.map +0 -1
  456. package/dist/utils/gas-flow.js +0 -11
  457. package/dist/utils/gas-flow.js.map +0 -1
  458. package/dist/utils/gas.js +0 -20
  459. package/dist/utils/gas.js.map +0 -1
  460. package/dist/utils/history.js +0 -14
  461. package/dist/utils/history.js.map +0 -1
  462. package/dist/utils/layer1-gas-fee-flow.js +0 -11
  463. package/dist/utils/layer1-gas-fee-flow.js.map +0 -1
  464. package/dist/utils/nonce.js +0 -11
  465. package/dist/utils/nonce.js.map +0 -1
  466. package/dist/utils/retry.js +0 -8
  467. package/dist/utils/retry.js.map +0 -1
  468. package/dist/utils/simulation-api.js +0 -11
  469. package/dist/utils/simulation-api.js.map +0 -1
  470. package/dist/utils/simulation.js +0 -17
  471. package/dist/utils/simulation.js.map +0 -1
  472. package/dist/utils/swaps.js +0 -24
  473. package/dist/utils/swaps.js.map +0 -1
  474. package/dist/utils/transaction-type.js +0 -11
  475. package/dist/utils/transaction-type.js.map +0 -1
  476. package/dist/utils/utils.js +0 -23
  477. package/dist/utils/utils.js.map +0 -1
  478. package/dist/utils/validation.js +0 -12
  479. package/dist/utils/validation.js.map +0 -1
@@ -1,390 +0,0 @@
1
- import {
2
- createModuleLogger,
3
- projectLogger
4
- } from "./chunk-UQQWZT6C.mjs";
5
- import {
6
- __privateAdd,
7
- __privateGet,
8
- __privateMethod,
9
- __privateSet
10
- } from "./chunk-XUI43LEZ.mjs";
11
-
12
- // src/helpers/PendingTransactionTracker.ts
13
- import { query } from "@metamask/controller-utils";
14
- import EventEmitter from "events";
15
- import { cloneDeep, merge } from "lodash";
16
- var DROPPED_BLOCK_COUNT = 3;
17
- var RECEIPT_STATUS_SUCCESS = "0x1";
18
- var RECEIPT_STATUS_FAILURE = "0x0";
19
- var MAX_RETRY_BLOCK_DISTANCE = 50;
20
- var KNOWN_TRANSACTION_ERRORS = [
21
- "replacement transaction underpriced",
22
- "known transaction",
23
- "gas price too low to replace",
24
- "transaction with the same hash was already imported",
25
- "gateway timeout",
26
- "nonce too low"
27
- ];
28
- var log = createModuleLogger(projectLogger, "pending-transactions");
29
- var _blockTracker, _droppedBlockCountByHash, _getChainId, _getEthQuery, _getTransactions, _isResubmitEnabled, _listener, _getGlobalLock, _publishTransaction, _running, _beforeCheckPendingTransaction, _beforePublish, _start, start_fn, _onLatestBlock, onLatestBlock_fn, _checkTransactions, checkTransactions_fn, _resubmitTransactions, resubmitTransactions_fn, _isKnownTransactionError, isKnownTransactionError_fn, _resubmitTransaction, resubmitTransaction_fn, _isResubmitDue, isResubmitDue_fn, _checkTransaction, checkTransaction_fn, _onTransactionConfirmed, onTransactionConfirmed_fn, _isTransactionDropped, isTransactionDropped_fn, _isNonceTaken, isNonceTaken_fn, _getPendingTransactions, getPendingTransactions_fn, _warnTransaction, warnTransaction_fn, _failTransaction, failTransaction_fn, _dropTransaction, dropTransaction_fn, _updateTransaction, updateTransaction_fn, _getTransactionReceipt, getTransactionReceipt_fn, _getBlockByHash, getBlockByHash_fn, _getNetworkTransactionCount, getNetworkTransactionCount_fn, _getCurrentChainTransactions, getCurrentChainTransactions_fn;
30
- var PendingTransactionTracker = class {
31
- constructor({
32
- blockTracker,
33
- getChainId,
34
- getEthQuery,
35
- getTransactions,
36
- isResubmitEnabled,
37
- getGlobalLock,
38
- publishTransaction,
39
- hooks
40
- }) {
41
- __privateAdd(this, _start);
42
- __privateAdd(this, _onLatestBlock);
43
- __privateAdd(this, _checkTransactions);
44
- __privateAdd(this, _resubmitTransactions);
45
- __privateAdd(this, _isKnownTransactionError);
46
- __privateAdd(this, _resubmitTransaction);
47
- __privateAdd(this, _isResubmitDue);
48
- __privateAdd(this, _checkTransaction);
49
- __privateAdd(this, _onTransactionConfirmed);
50
- __privateAdd(this, _isTransactionDropped);
51
- __privateAdd(this, _isNonceTaken);
52
- __privateAdd(this, _getPendingTransactions);
53
- __privateAdd(this, _warnTransaction);
54
- __privateAdd(this, _failTransaction);
55
- __privateAdd(this, _dropTransaction);
56
- __privateAdd(this, _updateTransaction);
57
- __privateAdd(this, _getTransactionReceipt);
58
- __privateAdd(this, _getBlockByHash);
59
- __privateAdd(this, _getNetworkTransactionCount);
60
- __privateAdd(this, _getCurrentChainTransactions);
61
- __privateAdd(this, _blockTracker, void 0);
62
- __privateAdd(this, _droppedBlockCountByHash, void 0);
63
- __privateAdd(this, _getChainId, void 0);
64
- __privateAdd(this, _getEthQuery, void 0);
65
- __privateAdd(this, _getTransactions, void 0);
66
- __privateAdd(this, _isResubmitEnabled, void 0);
67
- // TODO: Replace `any` with type
68
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
69
- __privateAdd(this, _listener, void 0);
70
- __privateAdd(this, _getGlobalLock, void 0);
71
- __privateAdd(this, _publishTransaction, void 0);
72
- __privateAdd(this, _running, void 0);
73
- __privateAdd(this, _beforeCheckPendingTransaction, void 0);
74
- __privateAdd(this, _beforePublish, void 0);
75
- this.startIfPendingTransactions = () => {
76
- const pendingTransactions = __privateMethod(this, _getPendingTransactions, getPendingTransactions_fn).call(this);
77
- if (pendingTransactions.length) {
78
- __privateMethod(this, _start, start_fn).call(this);
79
- } else {
80
- this.stop();
81
- }
82
- };
83
- this.hub = new EventEmitter();
84
- __privateSet(this, _blockTracker, blockTracker);
85
- __privateSet(this, _droppedBlockCountByHash, /* @__PURE__ */ new Map());
86
- __privateSet(this, _getChainId, getChainId);
87
- __privateSet(this, _getEthQuery, getEthQuery);
88
- __privateSet(this, _getTransactions, getTransactions);
89
- __privateSet(this, _isResubmitEnabled, isResubmitEnabled ?? (() => true));
90
- __privateSet(this, _listener, __privateMethod(this, _onLatestBlock, onLatestBlock_fn).bind(this));
91
- __privateSet(this, _getGlobalLock, getGlobalLock);
92
- __privateSet(this, _publishTransaction, publishTransaction);
93
- __privateSet(this, _running, false);
94
- __privateSet(this, _beforePublish, hooks?.beforePublish ?? (() => true));
95
- __privateSet(this, _beforeCheckPendingTransaction, hooks?.beforeCheckPendingTransaction ?? (() => true));
96
- }
97
- /**
98
- * Force checks the network if the given transaction is confirmed and updates it's status.
99
- *
100
- * @param txMeta - The transaction to check
101
- */
102
- async forceCheckTransaction(txMeta) {
103
- const releaseLock = await __privateGet(this, _getGlobalLock).call(this);
104
- try {
105
- await __privateMethod(this, _checkTransaction, checkTransaction_fn).call(this, txMeta);
106
- } catch (error) {
107
- log("Failed to check transaction", error);
108
- } finally {
109
- releaseLock();
110
- }
111
- }
112
- stop() {
113
- if (!__privateGet(this, _running)) {
114
- return;
115
- }
116
- __privateGet(this, _blockTracker).removeListener("latest", __privateGet(this, _listener));
117
- __privateSet(this, _running, false);
118
- log("Stopped polling");
119
- }
120
- };
121
- _blockTracker = new WeakMap();
122
- _droppedBlockCountByHash = new WeakMap();
123
- _getChainId = new WeakMap();
124
- _getEthQuery = new WeakMap();
125
- _getTransactions = new WeakMap();
126
- _isResubmitEnabled = new WeakMap();
127
- _listener = new WeakMap();
128
- _getGlobalLock = new WeakMap();
129
- _publishTransaction = new WeakMap();
130
- _running = new WeakMap();
131
- _beforeCheckPendingTransaction = new WeakMap();
132
- _beforePublish = new WeakMap();
133
- _start = new WeakSet();
134
- start_fn = function() {
135
- if (__privateGet(this, _running)) {
136
- return;
137
- }
138
- __privateGet(this, _blockTracker).on("latest", __privateGet(this, _listener));
139
- __privateSet(this, _running, true);
140
- log("Started polling");
141
- };
142
- _onLatestBlock = new WeakSet();
143
- onLatestBlock_fn = async function(latestBlockNumber) {
144
- const releaseLock = await __privateGet(this, _getGlobalLock).call(this);
145
- try {
146
- await __privateMethod(this, _checkTransactions, checkTransactions_fn).call(this);
147
- } catch (error) {
148
- log("Failed to check transactions", error);
149
- } finally {
150
- releaseLock();
151
- }
152
- try {
153
- await __privateMethod(this, _resubmitTransactions, resubmitTransactions_fn).call(this, latestBlockNumber);
154
- } catch (error) {
155
- log("Failed to resubmit transactions", error);
156
- }
157
- };
158
- _checkTransactions = new WeakSet();
159
- checkTransactions_fn = async function() {
160
- log("Checking transactions");
161
- const pendingTransactions = __privateMethod(this, _getPendingTransactions, getPendingTransactions_fn).call(this);
162
- if (!pendingTransactions.length) {
163
- log("No pending transactions to check");
164
- return;
165
- }
166
- log("Found pending transactions to check", {
167
- count: pendingTransactions.length,
168
- ids: pendingTransactions.map((tx) => tx.id)
169
- });
170
- await Promise.all(
171
- pendingTransactions.map((tx) => __privateMethod(this, _checkTransaction, checkTransaction_fn).call(this, tx))
172
- );
173
- };
174
- _resubmitTransactions = new WeakSet();
175
- resubmitTransactions_fn = async function(latestBlockNumber) {
176
- if (!__privateGet(this, _isResubmitEnabled).call(this) || !__privateGet(this, _running)) {
177
- return;
178
- }
179
- log("Resubmitting transactions");
180
- const pendingTransactions = __privateMethod(this, _getPendingTransactions, getPendingTransactions_fn).call(this);
181
- if (!pendingTransactions.length) {
182
- log("No pending transactions to resubmit");
183
- return;
184
- }
185
- log("Found pending transactions to resubmit", {
186
- count: pendingTransactions.length,
187
- ids: pendingTransactions.map((tx) => tx.id)
188
- });
189
- for (const txMeta of pendingTransactions) {
190
- try {
191
- await __privateMethod(this, _resubmitTransaction, resubmitTransaction_fn).call(this, txMeta, latestBlockNumber);
192
- } catch (error) {
193
- const errorMessage = error.value?.message?.toLowerCase() || error.message?.toLowerCase() || String(error);
194
- if (__privateMethod(this, _isKnownTransactionError, isKnownTransactionError_fn).call(this, errorMessage)) {
195
- log("Ignoring known transaction error", errorMessage);
196
- continue;
197
- }
198
- __privateMethod(this, _warnTransaction, warnTransaction_fn).call(this, txMeta, error.message, "There was an error when resubmitting this transaction.");
199
- }
200
- }
201
- };
202
- _isKnownTransactionError = new WeakSet();
203
- isKnownTransactionError_fn = function(errorMessage) {
204
- return KNOWN_TRANSACTION_ERRORS.some(
205
- (knownError) => errorMessage.includes(knownError)
206
- );
207
- };
208
- _resubmitTransaction = new WeakSet();
209
- resubmitTransaction_fn = async function(txMeta, latestBlockNumber) {
210
- if (!__privateMethod(this, _isResubmitDue, isResubmitDue_fn).call(this, txMeta, latestBlockNumber)) {
211
- return;
212
- }
213
- const { rawTx } = txMeta;
214
- if (!__privateGet(this, _beforePublish).call(this, txMeta)) {
215
- return;
216
- }
217
- const ethQuery = __privateGet(this, _getEthQuery).call(this, txMeta.networkClientId);
218
- await __privateGet(this, _publishTransaction).call(this, ethQuery, rawTx);
219
- const retryCount = (txMeta.retryCount ?? 0) + 1;
220
- __privateMethod(this, _updateTransaction, updateTransaction_fn).call(this, merge({}, txMeta, { retryCount }), "PendingTransactionTracker:transaction-retry - Retry count increased");
221
- };
222
- _isResubmitDue = new WeakSet();
223
- isResubmitDue_fn = function(txMeta, latestBlockNumber) {
224
- const txMetaWithFirstRetryBlockNumber = cloneDeep(txMeta);
225
- if (!txMetaWithFirstRetryBlockNumber.firstRetryBlockNumber) {
226
- txMetaWithFirstRetryBlockNumber.firstRetryBlockNumber = latestBlockNumber;
227
- __privateMethod(this, _updateTransaction, updateTransaction_fn).call(this, txMetaWithFirstRetryBlockNumber, "PendingTransactionTracker:#isResubmitDue - First retry block number set");
228
- }
229
- const { firstRetryBlockNumber } = txMetaWithFirstRetryBlockNumber;
230
- const blocksSinceFirstRetry = Number.parseInt(latestBlockNumber, 16) - Number.parseInt(firstRetryBlockNumber, 16);
231
- const retryCount = txMeta.retryCount || 0;
232
- const requiredBlocksSinceFirstRetry = Math.min(
233
- MAX_RETRY_BLOCK_DISTANCE,
234
- Math.pow(2, retryCount)
235
- );
236
- return blocksSinceFirstRetry >= requiredBlocksSinceFirstRetry;
237
- };
238
- _checkTransaction = new WeakSet();
239
- checkTransaction_fn = async function(txMeta) {
240
- const { hash, id } = txMeta;
241
- if (!hash && __privateGet(this, _beforeCheckPendingTransaction).call(this, txMeta)) {
242
- const error = new Error(
243
- "We had an error while submitting this transaction, please try again."
244
- );
245
- error.name = "NoTxHashError";
246
- __privateMethod(this, _failTransaction, failTransaction_fn).call(this, txMeta, error);
247
- return;
248
- }
249
- if (__privateMethod(this, _isNonceTaken, isNonceTaken_fn).call(this, txMeta)) {
250
- log("Nonce already taken", id);
251
- __privateMethod(this, _dropTransaction, dropTransaction_fn).call(this, txMeta);
252
- return;
253
- }
254
- try {
255
- const receipt = await __privateMethod(this, _getTransactionReceipt, getTransactionReceipt_fn).call(this, hash);
256
- const isSuccess = receipt?.status === RECEIPT_STATUS_SUCCESS;
257
- const isFailure = receipt?.status === RECEIPT_STATUS_FAILURE;
258
- if (isFailure) {
259
- log("Transaction receipt has failed status");
260
- __privateMethod(this, _failTransaction, failTransaction_fn).call(this, txMeta, new Error("Transaction dropped or replaced"));
261
- return;
262
- }
263
- const { blockNumber, blockHash } = receipt || {};
264
- if (isSuccess && blockNumber && blockHash) {
265
- await __privateMethod(this, _onTransactionConfirmed, onTransactionConfirmed_fn).call(this, txMeta, {
266
- ...receipt,
267
- blockNumber,
268
- blockHash
269
- });
270
- return;
271
- }
272
- } catch (error) {
273
- log("Failed to check transaction", id, error);
274
- __privateMethod(this, _warnTransaction, warnTransaction_fn).call(this, txMeta, error.message, "There was a problem loading this transaction.");
275
- return;
276
- }
277
- if (await __privateMethod(this, _isTransactionDropped, isTransactionDropped_fn).call(this, txMeta)) {
278
- __privateMethod(this, _dropTransaction, dropTransaction_fn).call(this, txMeta);
279
- }
280
- };
281
- _onTransactionConfirmed = new WeakSet();
282
- onTransactionConfirmed_fn = async function(txMeta, receipt) {
283
- const { id } = txMeta;
284
- const { blockHash } = receipt;
285
- log("Transaction confirmed", id);
286
- const { baseFeePerGas, timestamp: blockTimestamp } = await __privateMethod(this, _getBlockByHash, getBlockByHash_fn).call(this, blockHash, false);
287
- const updatedTxMeta = cloneDeep(txMeta);
288
- updatedTxMeta.baseFeePerGas = baseFeePerGas;
289
- updatedTxMeta.blockTimestamp = blockTimestamp;
290
- updatedTxMeta.status = "confirmed" /* confirmed */;
291
- updatedTxMeta.txParams = {
292
- ...updatedTxMeta.txParams,
293
- gasUsed: receipt.gasUsed
294
- };
295
- updatedTxMeta.txReceipt = receipt;
296
- updatedTxMeta.verifiedOnBlockchain = true;
297
- __privateMethod(this, _updateTransaction, updateTransaction_fn).call(this, updatedTxMeta, "PendingTransactionTracker:#onTransactionConfirmed - Transaction confirmed");
298
- this.hub.emit("transaction-confirmed", updatedTxMeta);
299
- };
300
- _isTransactionDropped = new WeakSet();
301
- isTransactionDropped_fn = async function(txMeta) {
302
- const {
303
- hash,
304
- id,
305
- txParams: { nonce, from }
306
- } = txMeta;
307
- if (!nonce || !hash) {
308
- return false;
309
- }
310
- const networkNextNonceHex = await __privateMethod(this, _getNetworkTransactionCount, getNetworkTransactionCount_fn).call(this, from);
311
- const networkNextNonceNumber = parseInt(networkNextNonceHex, 16);
312
- const nonceNumber = parseInt(nonce, 16);
313
- if (nonceNumber >= networkNextNonceNumber) {
314
- return false;
315
- }
316
- let droppedBlockCount = __privateGet(this, _droppedBlockCountByHash).get(hash);
317
- if (droppedBlockCount === void 0) {
318
- droppedBlockCount = 0;
319
- __privateGet(this, _droppedBlockCountByHash).set(hash, droppedBlockCount);
320
- }
321
- if (droppedBlockCount < DROPPED_BLOCK_COUNT) {
322
- log("Incrementing dropped block count", { id, droppedBlockCount });
323
- __privateGet(this, _droppedBlockCountByHash).set(hash, droppedBlockCount + 1);
324
- return false;
325
- }
326
- log("Hit dropped block count", id);
327
- __privateGet(this, _droppedBlockCountByHash).delete(hash);
328
- return true;
329
- };
330
- _isNonceTaken = new WeakSet();
331
- isNonceTaken_fn = function(txMeta) {
332
- const { id, txParams } = txMeta;
333
- return __privateMethod(this, _getCurrentChainTransactions, getCurrentChainTransactions_fn).call(this).some(
334
- (tx) => tx.id !== id && tx.txParams.from === txParams.from && tx.status === "confirmed" /* confirmed */ && tx.txParams.nonce === txParams.nonce && tx.type !== "incoming" /* incoming */
335
- );
336
- };
337
- _getPendingTransactions = new WeakSet();
338
- getPendingTransactions_fn = function() {
339
- return __privateMethod(this, _getCurrentChainTransactions, getCurrentChainTransactions_fn).call(this).filter(
340
- (tx) => tx.status === "submitted" /* submitted */ && !tx.verifiedOnBlockchain && !tx.isUserOperation
341
- );
342
- };
343
- _warnTransaction = new WeakSet();
344
- warnTransaction_fn = function(txMeta, error, message) {
345
- __privateMethod(this, _updateTransaction, updateTransaction_fn).call(this, {
346
- ...txMeta,
347
- warning: { error, message }
348
- }, "PendingTransactionTracker:#warnTransaction - Warning added");
349
- };
350
- _failTransaction = new WeakSet();
351
- failTransaction_fn = function(txMeta, error) {
352
- log("Transaction failed", txMeta.id, error);
353
- this.hub.emit("transaction-failed", txMeta, error);
354
- };
355
- _dropTransaction = new WeakSet();
356
- dropTransaction_fn = function(txMeta) {
357
- log("Transaction dropped", txMeta.id);
358
- this.hub.emit("transaction-dropped", txMeta);
359
- };
360
- _updateTransaction = new WeakSet();
361
- updateTransaction_fn = function(txMeta, note) {
362
- this.hub.emit("transaction-updated", txMeta, note);
363
- };
364
- _getTransactionReceipt = new WeakSet();
365
- getTransactionReceipt_fn = async function(txHash) {
366
- return await query(__privateGet(this, _getEthQuery).call(this), "getTransactionReceipt", [txHash]);
367
- };
368
- _getBlockByHash = new WeakSet();
369
- getBlockByHash_fn = async function(blockHash, includeTransactionDetails) {
370
- return await query(__privateGet(this, _getEthQuery).call(this), "getBlockByHash", [
371
- blockHash,
372
- includeTransactionDetails
373
- ]);
374
- };
375
- _getNetworkTransactionCount = new WeakSet();
376
- getNetworkTransactionCount_fn = async function(address) {
377
- return await query(__privateGet(this, _getEthQuery).call(this), "getTransactionCount", [address]);
378
- };
379
- _getCurrentChainTransactions = new WeakSet();
380
- getCurrentChainTransactions_fn = function() {
381
- const currentChainId = __privateGet(this, _getChainId).call(this);
382
- return __privateGet(this, _getTransactions).call(this).filter(
383
- (tx) => tx.chainId === currentChainId
384
- );
385
- };
386
-
387
- export {
388
- PendingTransactionTracker
389
- };
390
- //# sourceMappingURL=chunk-7M2R5AHC.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/helpers/PendingTransactionTracker.ts"],"sourcesContent":["import { query } from '@metamask/controller-utils';\nimport type EthQuery from '@metamask/eth-query';\nimport type {\n BlockTracker,\n NetworkClientId,\n} from '@metamask/network-controller';\nimport EventEmitter from 'events';\nimport { cloneDeep, merge } from 'lodash';\n\nimport { createModuleLogger, projectLogger } from '../logger';\nimport type { TransactionMeta, TransactionReceipt } from '../types';\nimport { TransactionStatus, TransactionType } from '../types';\n\n/**\n * We wait this many blocks before emitting a 'transaction-dropped' event\n * This is because we could be talking to a node that is out of sync\n */\nconst DROPPED_BLOCK_COUNT = 3;\n\nconst RECEIPT_STATUS_SUCCESS = '0x1';\nconst RECEIPT_STATUS_FAILURE = '0x0';\nconst MAX_RETRY_BLOCK_DISTANCE = 50;\n\nconst KNOWN_TRANSACTION_ERRORS = [\n 'replacement transaction underpriced',\n 'known transaction',\n 'gas price too low to replace',\n 'transaction with the same hash was already imported',\n 'gateway timeout',\n 'nonce too low',\n];\n\nconst log = createModuleLogger(projectLogger, 'pending-transactions');\n\ntype SuccessfulTransactionReceipt = TransactionReceipt & {\n blockNumber: string;\n blockHash: string;\n};\n\ntype Events = {\n 'transaction-confirmed': [txMeta: TransactionMeta];\n 'transaction-dropped': [txMeta: TransactionMeta];\n 'transaction-failed': [txMeta: TransactionMeta, error: Error];\n 'transaction-updated': [txMeta: TransactionMeta, note: string];\n};\n\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface PendingTransactionTrackerEventEmitter extends EventEmitter {\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 on<T extends keyof Events>(\n eventName: T,\n listener: (...args: Events[T]) => void,\n ): this;\n\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 emit<T extends keyof Events>(eventName: T, ...args: Events[T]): boolean;\n}\n\nexport class PendingTransactionTracker {\n hub: PendingTransactionTrackerEventEmitter;\n\n #blockTracker: BlockTracker;\n\n #droppedBlockCountByHash: Map<string, number>;\n\n #getChainId: () => string;\n\n #getEthQuery: (networkClientId?: NetworkClientId) => EthQuery;\n\n #getTransactions: () => TransactionMeta[];\n\n #isResubmitEnabled: () => boolean;\n\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n #listener: any;\n\n #getGlobalLock: () => Promise<() => void>;\n\n #publishTransaction: (ethQuery: EthQuery, rawTx: string) => Promise<string>;\n\n #running: boolean;\n\n #beforeCheckPendingTransaction: (transactionMeta: TransactionMeta) => boolean;\n\n #beforePublish: (transactionMeta: TransactionMeta) => boolean;\n\n constructor({\n blockTracker,\n getChainId,\n getEthQuery,\n getTransactions,\n isResubmitEnabled,\n getGlobalLock,\n publishTransaction,\n hooks,\n }: {\n blockTracker: BlockTracker;\n getChainId: () => string;\n getEthQuery: (networkClientId?: NetworkClientId) => EthQuery;\n getTransactions: () => TransactionMeta[];\n isResubmitEnabled?: () => boolean;\n getGlobalLock: () => Promise<() => void>;\n publishTransaction: (ethQuery: EthQuery, rawTx: string) => Promise<string>;\n hooks?: {\n beforeCheckPendingTransaction?: (\n transactionMeta: TransactionMeta,\n ) => boolean;\n beforePublish?: (transactionMeta: TransactionMeta) => boolean;\n };\n }) {\n this.hub = new EventEmitter() as PendingTransactionTrackerEventEmitter;\n\n this.#blockTracker = blockTracker;\n this.#droppedBlockCountByHash = new Map();\n this.#getChainId = getChainId;\n this.#getEthQuery = getEthQuery;\n this.#getTransactions = getTransactions;\n this.#isResubmitEnabled = isResubmitEnabled ?? (() => true);\n this.#listener = this.#onLatestBlock.bind(this);\n this.#getGlobalLock = getGlobalLock;\n this.#publishTransaction = publishTransaction;\n this.#running = false;\n this.#beforePublish = hooks?.beforePublish ?? (() => true);\n this.#beforeCheckPendingTransaction =\n hooks?.beforeCheckPendingTransaction ?? (() => true);\n }\n\n startIfPendingTransactions = () => {\n const pendingTransactions = this.#getPendingTransactions();\n\n if (pendingTransactions.length) {\n this.#start();\n } else {\n this.stop();\n }\n };\n\n /**\n * Force checks the network if the given transaction is confirmed and updates it's status.\n *\n * @param txMeta - The transaction to check\n */\n async forceCheckTransaction(txMeta: TransactionMeta) {\n const releaseLock = await this.#getGlobalLock();\n\n try {\n await this.#checkTransaction(txMeta);\n } catch (error) {\n /* istanbul ignore next */\n log('Failed to check transaction', error);\n } finally {\n releaseLock();\n }\n }\n\n #start() {\n if (this.#running) {\n return;\n }\n\n this.#blockTracker.on('latest', this.#listener);\n this.#running = true;\n\n log('Started polling');\n }\n\n stop() {\n if (!this.#running) {\n return;\n }\n\n this.#blockTracker.removeListener('latest', this.#listener);\n this.#running = false;\n\n log('Stopped polling');\n }\n\n async #onLatestBlock(latestBlockNumber: string) {\n const releaseLock = await this.#getGlobalLock();\n\n try {\n await this.#checkTransactions();\n } catch (error) {\n /* istanbul ignore next */\n log('Failed to check transactions', error);\n } finally {\n releaseLock();\n }\n\n try {\n await this.#resubmitTransactions(latestBlockNumber);\n } catch (error) {\n /* istanbul ignore next */\n log('Failed to resubmit transactions', error);\n }\n }\n\n async #checkTransactions() {\n log('Checking transactions');\n\n const pendingTransactions = this.#getPendingTransactions();\n\n if (!pendingTransactions.length) {\n log('No pending transactions to check');\n return;\n }\n\n log('Found pending transactions to check', {\n count: pendingTransactions.length,\n ids: pendingTransactions.map((tx) => tx.id),\n });\n\n await Promise.all(\n pendingTransactions.map((tx) => this.#checkTransaction(tx)),\n );\n }\n\n async #resubmitTransactions(latestBlockNumber: string) {\n if (!this.#isResubmitEnabled() || !this.#running) {\n return;\n }\n\n log('Resubmitting transactions');\n\n const pendingTransactions = this.#getPendingTransactions();\n\n if (!pendingTransactions.length) {\n log('No pending transactions to resubmit');\n return;\n }\n\n log('Found pending transactions to resubmit', {\n count: pendingTransactions.length,\n ids: pendingTransactions.map((tx) => tx.id),\n });\n\n for (const txMeta of pendingTransactions) {\n try {\n await this.#resubmitTransaction(txMeta, latestBlockNumber);\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n /* istanbul ignore next */\n const errorMessage =\n error.value?.message?.toLowerCase() ||\n error.message?.toLowerCase() ||\n String(error);\n\n if (this.#isKnownTransactionError(errorMessage)) {\n log('Ignoring known transaction error', errorMessage);\n continue;\n }\n\n this.#warnTransaction(\n txMeta,\n error.message,\n 'There was an error when resubmitting this transaction.',\n );\n }\n }\n }\n\n #isKnownTransactionError(errorMessage: string) {\n return KNOWN_TRANSACTION_ERRORS.some((knownError) =>\n errorMessage.includes(knownError),\n );\n }\n\n async #resubmitTransaction(\n txMeta: TransactionMeta,\n latestBlockNumber: string,\n ) {\n if (!this.#isResubmitDue(txMeta, latestBlockNumber)) {\n return;\n }\n\n const { rawTx } = txMeta;\n\n if (!this.#beforePublish(txMeta)) {\n return;\n }\n\n const ethQuery = this.#getEthQuery(txMeta.networkClientId);\n await this.#publishTransaction(ethQuery, rawTx as string);\n\n const retryCount = (txMeta.retryCount ?? 0) + 1;\n\n this.#updateTransaction(\n merge({}, txMeta, { retryCount }),\n 'PendingTransactionTracker:transaction-retry - Retry count increased',\n );\n }\n\n #isResubmitDue(txMeta: TransactionMeta, latestBlockNumber: string): boolean {\n const txMetaWithFirstRetryBlockNumber = cloneDeep(txMeta);\n\n if (!txMetaWithFirstRetryBlockNumber.firstRetryBlockNumber) {\n txMetaWithFirstRetryBlockNumber.firstRetryBlockNumber = latestBlockNumber;\n\n this.#updateTransaction(\n txMetaWithFirstRetryBlockNumber,\n 'PendingTransactionTracker:#isResubmitDue - First retry block number set',\n );\n }\n\n const { firstRetryBlockNumber } = txMetaWithFirstRetryBlockNumber;\n\n const blocksSinceFirstRetry =\n Number.parseInt(latestBlockNumber, 16) -\n Number.parseInt(firstRetryBlockNumber, 16);\n\n const retryCount = txMeta.retryCount || 0;\n\n // Exponential backoff to limit retries at publishing\n // Capped at ~15 minutes between retries\n const requiredBlocksSinceFirstRetry = Math.min(\n MAX_RETRY_BLOCK_DISTANCE,\n Math.pow(2, retryCount),\n );\n\n return blocksSinceFirstRetry >= requiredBlocksSinceFirstRetry;\n }\n\n async #checkTransaction(txMeta: TransactionMeta) {\n const { hash, id } = txMeta;\n\n if (!hash && this.#beforeCheckPendingTransaction(txMeta)) {\n const error = new Error(\n 'We had an error while submitting this transaction, please try again.',\n );\n\n error.name = 'NoTxHashError';\n\n this.#failTransaction(txMeta, error);\n\n return;\n }\n\n if (this.#isNonceTaken(txMeta)) {\n log('Nonce already taken', id);\n this.#dropTransaction(txMeta);\n return;\n }\n\n try {\n const receipt = await this.#getTransactionReceipt(hash);\n const isSuccess = receipt?.status === RECEIPT_STATUS_SUCCESS;\n const isFailure = receipt?.status === RECEIPT_STATUS_FAILURE;\n\n if (isFailure) {\n log('Transaction receipt has failed status');\n\n this.#failTransaction(\n txMeta,\n new Error('Transaction dropped or replaced'),\n );\n\n return;\n }\n\n const { blockNumber, blockHash } = receipt || {};\n\n if (isSuccess && blockNumber && blockHash) {\n await this.#onTransactionConfirmed(txMeta, {\n ...receipt,\n blockNumber,\n blockHash,\n });\n\n return;\n }\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n log('Failed to check transaction', id, error);\n\n this.#warnTransaction(\n txMeta,\n error.message,\n 'There was a problem loading this transaction.',\n );\n\n return;\n }\n\n if (await this.#isTransactionDropped(txMeta)) {\n this.#dropTransaction(txMeta);\n }\n }\n\n async #onTransactionConfirmed(\n txMeta: TransactionMeta,\n receipt: SuccessfulTransactionReceipt,\n ) {\n const { id } = txMeta;\n const { blockHash } = receipt;\n\n log('Transaction confirmed', id);\n\n const { baseFeePerGas, timestamp: blockTimestamp } =\n await this.#getBlockByHash(blockHash, false);\n\n const updatedTxMeta = cloneDeep(txMeta);\n updatedTxMeta.baseFeePerGas = baseFeePerGas;\n updatedTxMeta.blockTimestamp = blockTimestamp;\n updatedTxMeta.status = TransactionStatus.confirmed;\n updatedTxMeta.txParams = {\n ...updatedTxMeta.txParams,\n gasUsed: receipt.gasUsed,\n };\n updatedTxMeta.txReceipt = receipt;\n updatedTxMeta.verifiedOnBlockchain = true;\n\n this.#updateTransaction(\n updatedTxMeta,\n 'PendingTransactionTracker:#onTransactionConfirmed - Transaction confirmed',\n );\n\n this.hub.emit('transaction-confirmed', updatedTxMeta);\n }\n\n async #isTransactionDropped(txMeta: TransactionMeta) {\n const {\n hash,\n id,\n txParams: { nonce, from },\n } = txMeta;\n\n /* istanbul ignore next */\n if (!nonce || !hash) {\n return false;\n }\n\n const networkNextNonceHex = await this.#getNetworkTransactionCount(from);\n const networkNextNonceNumber = parseInt(networkNextNonceHex, 16);\n const nonceNumber = parseInt(nonce, 16);\n\n if (nonceNumber >= networkNextNonceNumber) {\n return false;\n }\n\n let droppedBlockCount = this.#droppedBlockCountByHash.get(hash);\n\n if (droppedBlockCount === undefined) {\n droppedBlockCount = 0;\n this.#droppedBlockCountByHash.set(hash, droppedBlockCount);\n }\n\n if (droppedBlockCount < DROPPED_BLOCK_COUNT) {\n log('Incrementing dropped block count', { id, droppedBlockCount });\n this.#droppedBlockCountByHash.set(hash, droppedBlockCount + 1);\n return false;\n }\n\n log('Hit dropped block count', id);\n\n this.#droppedBlockCountByHash.delete(hash);\n return true;\n }\n\n #isNonceTaken(txMeta: TransactionMeta): boolean {\n const { id, txParams } = txMeta;\n\n return this.#getCurrentChainTransactions().some(\n (tx) =>\n tx.id !== id &&\n tx.txParams.from === txParams.from &&\n tx.status === TransactionStatus.confirmed &&\n tx.txParams.nonce === txParams.nonce &&\n tx.type !== TransactionType.incoming,\n );\n }\n\n #getPendingTransactions(): TransactionMeta[] {\n return this.#getCurrentChainTransactions().filter(\n (tx) =>\n tx.status === TransactionStatus.submitted &&\n !tx.verifiedOnBlockchain &&\n !tx.isUserOperation,\n );\n }\n\n #warnTransaction(txMeta: TransactionMeta, error: string, message: string) {\n this.#updateTransaction(\n {\n ...txMeta,\n warning: { error, message },\n },\n 'PendingTransactionTracker:#warnTransaction - Warning added',\n );\n }\n\n #failTransaction(txMeta: TransactionMeta, error: Error) {\n log('Transaction failed', txMeta.id, error);\n this.hub.emit('transaction-failed', txMeta, error);\n }\n\n #dropTransaction(txMeta: TransactionMeta) {\n log('Transaction dropped', txMeta.id);\n this.hub.emit('transaction-dropped', txMeta);\n }\n\n #updateTransaction(txMeta: TransactionMeta, note: string) {\n this.hub.emit('transaction-updated', txMeta, note);\n }\n\n async #getTransactionReceipt(\n txHash?: string,\n ): Promise<TransactionReceipt | undefined> {\n return await query(this.#getEthQuery(), 'getTransactionReceipt', [txHash]);\n }\n\n async #getBlockByHash(\n blockHash: string,\n includeTransactionDetails: boolean,\n // TODO: Replace `any` with type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Promise<any> {\n return await query(this.#getEthQuery(), 'getBlockByHash', [\n blockHash,\n includeTransactionDetails,\n ]);\n }\n\n async #getNetworkTransactionCount(address: string): Promise<string> {\n return await query(this.#getEthQuery(), 'getTransactionCount', [address]);\n }\n\n #getCurrentChainTransactions(): TransactionMeta[] {\n const currentChainId = this.#getChainId();\n\n return this.#getTransactions().filter(\n (tx) => tx.chainId === currentChainId,\n );\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,172 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
-
3
-
4
- var _chunkXVYXRCRLjs = require('./chunk-XVYXRCRL.js');
5
-
6
-
7
- var _chunkUGN7PBONjs = require('./chunk-UGN7PBON.js');
8
-
9
-
10
- var _chunkS6VGOPUYjs = require('./chunk-S6VGOPUY.js');
11
-
12
-
13
-
14
-
15
-
16
- var _chunkZ4BLTVTBjs = require('./chunk-Z4BLTVTB.js');
17
-
18
- // src/helpers/EtherscanRemoteTransactionSource.ts
19
- var _controllerutils = require('@metamask/controller-utils');
20
- var _asyncmutex = require('async-mutex');
21
- var _bnjs = require('bn.js'); var _bnjs2 = _interopRequireDefault(_bnjs);
22
- var _uuid = require('uuid');
23
- var ETHERSCAN_RATE_LIMIT_INTERVAL = 5e3;
24
- var _includeTokenTransfers, _isTokenRequestPending, _mutex, _releaseLockAfterInterval, releaseLockAfterInterval_fn, _fetchNormalTransactions, _fetchTokenTransactions, _getResponseTransactions, getResponseTransactions_fn, _normalizeTransaction, normalizeTransaction_fn, _normalizeTokenTransaction, normalizeTokenTransaction_fn, _normalizeTransactionBase, normalizeTransactionBase_fn;
25
- var EtherscanRemoteTransactionSource = class {
26
- constructor({
27
- includeTokenTransfers
28
- } = {}) {
29
- _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _releaseLockAfterInterval);
30
- // TODO: Either fix this lint violation or explain why it's necessary to ignore.
31
- // eslint-disable-next-line @typescript-eslint/naming-convention
32
- _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _getResponseTransactions);
33
- _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _normalizeTransaction);
34
- _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _normalizeTokenTransaction);
35
- _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _normalizeTransactionBase);
36
- _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _includeTokenTransfers, void 0);
37
- _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _isTokenRequestPending, void 0);
38
- _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _mutex, new (0, _asyncmutex.Mutex)());
39
- _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _fetchNormalTransactions, async (request, etherscanRequest) => {
40
- const { currentChainId } = request;
41
- const etherscanTransactions = await _chunkXVYXRCRLjs.fetchEtherscanTransactions.call(void 0,
42
- etherscanRequest
43
- );
44
- return _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _getResponseTransactions, getResponseTransactions_fn).call(this, etherscanTransactions).map(
45
- (tx) => _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _normalizeTransaction, normalizeTransaction_fn).call(this, tx, currentChainId)
46
- );
47
- });
48
- _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _fetchTokenTransactions, async (request, etherscanRequest) => {
49
- const { currentChainId } = request;
50
- const etherscanTransactions = await _chunkXVYXRCRLjs.fetchEtherscanTokenTransactions.call(void 0,
51
- etherscanRequest
52
- );
53
- return _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _getResponseTransactions, getResponseTransactions_fn).call(this, etherscanTransactions).map(
54
- (tx) => _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _normalizeTokenTransaction, normalizeTokenTransaction_fn).call(this, tx, currentChainId)
55
- );
56
- });
57
- _chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _includeTokenTransfers, includeTokenTransfers ?? true);
58
- _chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _isTokenRequestPending, false);
59
- }
60
- isSupportedNetwork(chainId) {
61
- return Object.keys(_chunkUGN7PBONjs.ETHERSCAN_SUPPORTED_NETWORKS).includes(chainId);
62
- }
63
- getLastBlockVariations() {
64
- return [_chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _isTokenRequestPending) ? "token" : "normal"];
65
- }
66
- async fetchTransactions(request) {
67
- const releaseLock = await _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _mutex).acquire();
68
- const acquiredTime = Date.now();
69
- const etherscanRequest = {
70
- ...request,
71
- chainId: request.currentChainId
72
- };
73
- try {
74
- const transactions = _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _isTokenRequestPending) ? await _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _fetchTokenTransactions).call(this, request, etherscanRequest) : await _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _fetchNormalTransactions).call(this, request, etherscanRequest);
75
- if (_chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _includeTokenTransfers)) {
76
- _chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _isTokenRequestPending, !_chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _isTokenRequestPending));
77
- }
78
- return transactions;
79
- } finally {
80
- _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _releaseLockAfterInterval, releaseLockAfterInterval_fn).call(this, acquiredTime, releaseLock);
81
- }
82
- }
83
- };
84
- _includeTokenTransfers = new WeakMap();
85
- _isTokenRequestPending = new WeakMap();
86
- _mutex = new WeakMap();
87
- _releaseLockAfterInterval = new WeakSet();
88
- releaseLockAfterInterval_fn = function(acquireTime, releaseLock) {
89
- const elapsedTime = Date.now() - acquireTime;
90
- const remainingTime = Math.max(
91
- 0,
92
- ETHERSCAN_RATE_LIMIT_INTERVAL - elapsedTime
93
- );
94
- if (remainingTime > 0) {
95
- setTimeout(releaseLock, remainingTime);
96
- } else {
97
- releaseLock();
98
- }
99
- };
100
- _fetchNormalTransactions = new WeakMap();
101
- _fetchTokenTransactions = new WeakMap();
102
- _getResponseTransactions = new WeakSet();
103
- getResponseTransactions_fn = function(response) {
104
- let result = response.result;
105
- if (response.status === "0") {
106
- result = [];
107
- if (response.result.length) {
108
- _chunkS6VGOPUYjs.incomingTransactionsLogger.call(void 0, "Ignored Etherscan request error", {
109
- message: response.result,
110
- type: _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _isTokenRequestPending) ? "token" : "normal"
111
- });
112
- }
113
- }
114
- return result;
115
- };
116
- _normalizeTransaction = new WeakSet();
117
- normalizeTransaction_fn = function(txMeta, currentChainId) {
118
- const base = _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _normalizeTransactionBase, normalizeTransactionBase_fn).call(this, txMeta, currentChainId);
119
- return {
120
- ...base,
121
- txParams: {
122
- ...base.txParams,
123
- data: txMeta.input
124
- },
125
- ...txMeta.isError === "0" ? { status: "confirmed" /* confirmed */ } : {
126
- error: new Error("Transaction failed"),
127
- status: "failed" /* failed */
128
- }
129
- };
130
- };
131
- _normalizeTokenTransaction = new WeakSet();
132
- normalizeTokenTransaction_fn = function(txMeta, currentChainId) {
133
- const base = _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _normalizeTransactionBase, normalizeTransactionBase_fn).call(this, txMeta, currentChainId);
134
- return {
135
- ...base,
136
- isTransfer: true,
137
- transferInformation: {
138
- contractAddress: txMeta.contractAddress,
139
- decimals: Number(txMeta.tokenDecimal),
140
- symbol: txMeta.tokenSymbol
141
- }
142
- };
143
- };
144
- _normalizeTransactionBase = new WeakSet();
145
- normalizeTransactionBase_fn = function(txMeta, currentChainId) {
146
- const time = parseInt(txMeta.timeStamp, 10) * 1e3;
147
- return {
148
- blockNumber: txMeta.blockNumber,
149
- chainId: currentChainId,
150
- hash: txMeta.hash,
151
- id: _uuid.v1.call(void 0, { msecs: time }),
152
- status: "confirmed" /* confirmed */,
153
- time,
154
- txParams: {
155
- chainId: currentChainId,
156
- from: txMeta.from,
157
- gas: _controllerutils.BNToHex.call(void 0, new (0, _bnjs2.default)(txMeta.gas)),
158
- gasPrice: _controllerutils.BNToHex.call(void 0, new (0, _bnjs2.default)(txMeta.gasPrice)),
159
- gasUsed: _controllerutils.BNToHex.call(void 0, new (0, _bnjs2.default)(txMeta.gasUsed)),
160
- nonce: _controllerutils.BNToHex.call(void 0, new (0, _bnjs2.default)(txMeta.nonce)),
161
- to: txMeta.to,
162
- value: _controllerutils.BNToHex.call(void 0, new (0, _bnjs2.default)(txMeta.value))
163
- },
164
- type: "incoming" /* incoming */,
165
- verifiedOnBlockchain: false
166
- };
167
- };
168
-
169
-
170
-
171
- exports.EtherscanRemoteTransactionSource = EtherscanRemoteTransactionSource;
172
- //# sourceMappingURL=chunk-7NMV2NPM.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/helpers/EtherscanRemoteTransactionSource.ts"],"names":[],"mappings":"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","sourcesContent":["import { BNToHex } from '@metamask/controller-utils';\nimport type { Hex } from '@metamask/utils';\nimport { Mutex } from 'async-mutex';\nimport BN from 'bn.js';\nimport { v1 as random } from 'uuid';\n\nimport { ETHERSCAN_SUPPORTED_NETWORKS } from '../constants';\nimport { incomingTransactionsLogger as log } from '../logger';\nimport type {\n RemoteTransactionSource,\n RemoteTransactionSourceRequest,\n TransactionMeta,\n} from '../types';\nimport { TransactionStatus, TransactionType } from '../types';\nimport {\n fetchEtherscanTokenTransactions,\n fetchEtherscanTransactions,\n} from '../utils/etherscan';\nimport type {\n EtherscanTokenTransactionMeta,\n EtherscanTransactionMeta,\n EtherscanTransactionMetaBase,\n EtherscanTransactionRequest,\n EtherscanTransactionResponse,\n} from '../utils/etherscan';\n\nconst ETHERSCAN_RATE_LIMIT_INTERVAL = 5000;\n/**\n * A RemoteTransactionSource that fetches transaction data from Etherscan.\n */\nexport class EtherscanRemoteTransactionSource\n implements RemoteTransactionSource\n{\n #includeTokenTransfers: boolean;\n\n #isTokenRequestPending: boolean;\n\n #mutex = new Mutex();\n\n constructor({\n includeTokenTransfers,\n }: { includeTokenTransfers?: boolean } = {}) {\n this.#includeTokenTransfers = includeTokenTransfers ?? true;\n this.#isTokenRequestPending = false;\n }\n\n isSupportedNetwork(chainId: Hex): boolean {\n return Object.keys(ETHERSCAN_SUPPORTED_NETWORKS).includes(chainId);\n }\n\n getLastBlockVariations(): string[] {\n return [this.#isTokenRequestPending ? 'token' : 'normal'];\n }\n\n async fetchTransactions(\n request: RemoteTransactionSourceRequest,\n ): Promise<TransactionMeta[]> {\n const releaseLock = await this.#mutex.acquire();\n const acquiredTime = Date.now();\n\n const etherscanRequest: EtherscanTransactionRequest = {\n ...request,\n chainId: request.currentChainId,\n };\n\n try {\n const transactions = this.#isTokenRequestPending\n ? await this.#fetchTokenTransactions(request, etherscanRequest)\n : await this.#fetchNormalTransactions(request, etherscanRequest);\n\n if (this.#includeTokenTransfers) {\n this.#isTokenRequestPending = !this.#isTokenRequestPending;\n }\n\n return transactions;\n } finally {\n this.#releaseLockAfterInterval(acquiredTime, releaseLock);\n }\n }\n\n #releaseLockAfterInterval(acquireTime: number, releaseLock: () => void) {\n const elapsedTime = Date.now() - acquireTime;\n const remainingTime = Math.max(\n 0,\n ETHERSCAN_RATE_LIMIT_INTERVAL - elapsedTime,\n );\n // Wait for the remaining time if it hasn't been 5 seconds yet\n if (remainingTime > 0) {\n setTimeout(releaseLock, remainingTime);\n } else {\n releaseLock();\n }\n }\n\n #fetchNormalTransactions = async (\n request: RemoteTransactionSourceRequest,\n etherscanRequest: EtherscanTransactionRequest,\n ) => {\n const { currentChainId } = request;\n\n const etherscanTransactions = await fetchEtherscanTransactions(\n etherscanRequest,\n );\n\n return this.#getResponseTransactions(etherscanTransactions).map((tx) =>\n this.#normalizeTransaction(tx, currentChainId),\n );\n };\n\n #fetchTokenTransactions = async (\n request: RemoteTransactionSourceRequest,\n etherscanRequest: EtherscanTransactionRequest,\n ) => {\n const { currentChainId } = request;\n\n const etherscanTransactions = await fetchEtherscanTokenTransactions(\n etherscanRequest,\n );\n\n return this.#getResponseTransactions(etherscanTransactions).map((tx) =>\n this.#normalizeTokenTransaction(tx, currentChainId),\n );\n };\n\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 #getResponseTransactions<T extends EtherscanTransactionMetaBase>(\n response: EtherscanTransactionResponse<T>,\n ): T[] {\n let result = response.result as T[];\n\n if (response.status === '0') {\n result = [];\n\n if (response.result.length) {\n log('Ignored Etherscan request error', {\n message: response.result,\n type: this.#isTokenRequestPending ? 'token' : 'normal',\n });\n }\n }\n\n return result;\n }\n\n #normalizeTransaction(\n txMeta: EtherscanTransactionMeta,\n currentChainId: Hex,\n ): TransactionMeta {\n const base = this.#normalizeTransactionBase(txMeta, currentChainId);\n\n return {\n ...base,\n txParams: {\n ...base.txParams,\n data: txMeta.input,\n },\n ...(txMeta.isError === '0'\n ? { status: TransactionStatus.confirmed }\n : {\n error: new Error('Transaction failed'),\n status: TransactionStatus.failed,\n }),\n };\n }\n\n #normalizeTokenTransaction(\n txMeta: EtherscanTokenTransactionMeta,\n currentChainId: Hex,\n ): TransactionMeta {\n const base = this.#normalizeTransactionBase(txMeta, currentChainId);\n\n return {\n ...base,\n isTransfer: true,\n transferInformation: {\n contractAddress: txMeta.contractAddress,\n decimals: Number(txMeta.tokenDecimal),\n symbol: txMeta.tokenSymbol,\n },\n };\n }\n\n #normalizeTransactionBase(\n txMeta: EtherscanTransactionMetaBase,\n currentChainId: Hex,\n ): TransactionMeta {\n const time = parseInt(txMeta.timeStamp, 10) * 1000;\n\n return {\n blockNumber: txMeta.blockNumber,\n chainId: currentChainId,\n hash: txMeta.hash,\n id: random({ msecs: time }),\n status: TransactionStatus.confirmed,\n time,\n txParams: {\n chainId: currentChainId,\n from: txMeta.from,\n gas: BNToHex(new BN(txMeta.gas)),\n gasPrice: BNToHex(new BN(txMeta.gasPrice)),\n gasUsed: BNToHex(new BN(txMeta.gasUsed)),\n nonce: BNToHex(new BN(txMeta.nonce)),\n to: txMeta.to,\n value: BNToHex(new BN(txMeta.value)),\n },\n type: TransactionType.incoming,\n verifiedOnBlockchain: false,\n };\n }\n}\n"]}