@metamask/transaction-controller 24.0.0 → 25.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (288) hide show
  1. package/CHANGELOG.md +129 -1
  2. package/dist/TransactionController.js +39 -1816
  3. package/dist/TransactionController.js.map +1 -1
  4. package/dist/TransactionController.mjs +40 -0
  5. package/dist/TransactionController.mjs.map +1 -0
  6. package/dist/chunk-2YXA3K67.mjs +62 -0
  7. package/dist/chunk-2YXA3K67.mjs.map +1 -0
  8. package/dist/chunk-3D3SA6PY.mjs +211 -0
  9. package/dist/chunk-3D3SA6PY.mjs.map +1 -0
  10. package/dist/chunk-4S25HUCL.js +46 -0
  11. package/dist/chunk-4S25HUCL.js.map +1 -0
  12. package/dist/chunk-5OQ373JS.js +211 -0
  13. package/dist/chunk-5OQ373JS.js.map +1 -0
  14. package/dist/chunk-5XBULBP2.js +399 -0
  15. package/dist/chunk-5XBULBP2.js.map +1 -0
  16. package/dist/chunk-72OTU5ZW.mjs +2332 -0
  17. package/dist/chunk-72OTU5ZW.mjs.map +1 -0
  18. package/dist/chunk-7LXE4KHV.js +40 -0
  19. package/dist/chunk-7LXE4KHV.js.map +1 -0
  20. package/dist/chunk-7XPI7KU5.mjs +46 -0
  21. package/dist/chunk-7XPI7KU5.mjs.map +1 -0
  22. package/dist/chunk-BILEZLAT.js +182 -0
  23. package/dist/chunk-BILEZLAT.js.map +1 -0
  24. package/dist/chunk-CQBXHAYR.js +121 -0
  25. package/dist/chunk-CQBXHAYR.js.map +1 -0
  26. package/dist/chunk-CXXGL43K.js +85 -0
  27. package/dist/chunk-CXXGL43K.js.map +1 -0
  28. package/dist/chunk-DTDTOMTB.js +238 -0
  29. package/dist/chunk-DTDTOMTB.js.map +1 -0
  30. package/dist/chunk-DTONMSFW.mjs +208 -0
  31. package/dist/chunk-DTONMSFW.mjs.map +1 -0
  32. package/dist/chunk-EEMJC7S7.mjs +182 -0
  33. package/dist/chunk-EEMJC7S7.mjs.map +1 -0
  34. package/dist/chunk-F3CMU2DM.js +170 -0
  35. package/dist/chunk-F3CMU2DM.js.map +1 -0
  36. package/dist/chunk-FRKQ3Z2L.mjs +40 -0
  37. package/dist/chunk-FRKQ3Z2L.mjs.map +1 -0
  38. package/dist/chunk-HS277C77.js +75 -0
  39. package/dist/chunk-HS277C77.js.map +1 -0
  40. package/dist/chunk-ITDY6AIZ.js +127 -0
  41. package/dist/chunk-ITDY6AIZ.js.map +1 -0
  42. package/dist/chunk-IZI7FQIN.mjs +170 -0
  43. package/dist/chunk-IZI7FQIN.mjs.map +1 -0
  44. package/dist/chunk-J56A7UCK.mjs +123 -0
  45. package/dist/chunk-J56A7UCK.mjs.map +1 -0
  46. package/dist/chunk-JRBREX22.mjs +75 -0
  47. package/dist/chunk-JRBREX22.mjs.map +1 -0
  48. package/dist/chunk-JRQHIBG5.mjs +399 -0
  49. package/dist/chunk-JRQHIBG5.mjs.map +1 -0
  50. package/dist/chunk-K26EBMGI.mjs +121 -0
  51. package/dist/chunk-K26EBMGI.mjs.map +1 -0
  52. package/dist/chunk-KFL2GGZC.mjs +48 -0
  53. package/dist/chunk-KFL2GGZC.mjs.map +1 -0
  54. package/dist/chunk-NHRBO3LU.mjs +50 -0
  55. package/dist/chunk-NHRBO3LU.mjs.map +1 -0
  56. package/dist/chunk-NM4LTWRU.mjs +76 -0
  57. package/dist/chunk-NM4LTWRU.mjs.map +1 -0
  58. package/dist/chunk-NM6OYEPP.mjs +182 -0
  59. package/dist/chunk-NM6OYEPP.mjs.map +1 -0
  60. package/dist/chunk-NRWEI43Q.js +320 -0
  61. package/dist/chunk-NRWEI43Q.js.map +1 -0
  62. package/dist/chunk-O7H2MC7R.js +62 -0
  63. package/dist/chunk-O7H2MC7R.js.map +1 -0
  64. package/dist/chunk-OF6NSLXF.mjs +90 -0
  65. package/dist/chunk-OF6NSLXF.mjs.map +1 -0
  66. package/dist/chunk-QDIYZX5V.js +2332 -0
  67. package/dist/chunk-QDIYZX5V.js.map +1 -0
  68. package/dist/chunk-QP75SWIQ.js +53 -0
  69. package/dist/chunk-QP75SWIQ.js.map +1 -0
  70. package/dist/chunk-QPNEFZB3.js +208 -0
  71. package/dist/chunk-QPNEFZB3.js.map +1 -0
  72. package/dist/chunk-QSBIXUMB.mjs +242 -0
  73. package/dist/chunk-QSBIXUMB.mjs.map +1 -0
  74. package/dist/chunk-R7NJVDWN.js +48 -0
  75. package/dist/chunk-R7NJVDWN.js.map +1 -0
  76. package/dist/chunk-RQKICZYP.js +137 -0
  77. package/dist/chunk-RQKICZYP.js.map +1 -0
  78. package/dist/chunk-S6VGOPUY.js +14 -0
  79. package/dist/chunk-S6VGOPUY.js.map +1 -0
  80. package/dist/chunk-TXVH44HM.js +90 -0
  81. package/dist/chunk-TXVH44HM.js.map +1 -0
  82. package/dist/chunk-UGFBA4GV.js +123 -0
  83. package/dist/chunk-UGFBA4GV.js.map +1 -0
  84. package/dist/chunk-UQQWZT6C.mjs +14 -0
  85. package/dist/chunk-UQQWZT6C.mjs.map +1 -0
  86. package/dist/chunk-VEREDMI2.mjs +85 -0
  87. package/dist/chunk-VEREDMI2.mjs.map +1 -0
  88. package/dist/chunk-VH47Q6TS.js +182 -0
  89. package/dist/chunk-VH47Q6TS.js.map +1 -0
  90. package/dist/chunk-W3GAOR7Y.js +76 -0
  91. package/dist/chunk-W3GAOR7Y.js.map +1 -0
  92. package/dist/chunk-WXQZIUNW.js +242 -0
  93. package/dist/chunk-WXQZIUNW.js.map +1 -0
  94. package/dist/chunk-XGRAHX6T.mjs +53 -0
  95. package/dist/chunk-XGRAHX6T.mjs.map +1 -0
  96. package/dist/chunk-XKNFL657.mjs +137 -0
  97. package/dist/chunk-XKNFL657.mjs.map +1 -0
  98. package/dist/chunk-XUI43LEZ.mjs +30 -0
  99. package/dist/chunk-XUI43LEZ.mjs.map +1 -0
  100. package/dist/chunk-Y7ENNK7L.mjs +238 -0
  101. package/dist/chunk-Y7ENNK7L.mjs.map +1 -0
  102. package/dist/chunk-Z3HHSD5I.mjs +127 -0
  103. package/dist/chunk-Z3HHSD5I.mjs.map +1 -0
  104. package/dist/chunk-Z4BLTVTB.js +30 -0
  105. package/dist/chunk-Z4BLTVTB.js.map +1 -0
  106. package/dist/chunk-ZNZEJDOE.js +50 -0
  107. package/dist/chunk-ZNZEJDOE.js.map +1 -0
  108. package/dist/chunk-ZQFMTLZJ.mjs +320 -0
  109. package/dist/chunk-ZQFMTLZJ.mjs.map +1 -0
  110. package/dist/constants.js +15 -110
  111. package/dist/constants.js.map +1 -1
  112. package/dist/constants.mjs +16 -0
  113. package/dist/constants.mjs.map +1 -0
  114. package/dist/gas-flows/DefaultGasFeeFlow.js +14 -77
  115. package/dist/gas-flows/DefaultGasFeeFlow.js.map +1 -1
  116. package/dist/gas-flows/DefaultGasFeeFlow.mjs +15 -0
  117. package/dist/gas-flows/DefaultGasFeeFlow.mjs.map +1 -0
  118. package/dist/gas-flows/LineaGasFeeFlow.js +15 -110
  119. package/dist/gas-flows/LineaGasFeeFlow.js.map +1 -1
  120. package/dist/gas-flows/LineaGasFeeFlow.mjs +16 -0
  121. package/dist/gas-flows/LineaGasFeeFlow.mjs.map +1 -0
  122. package/dist/helpers/EtherscanRemoteTransactionSource.js +11 -145
  123. package/dist/helpers/EtherscanRemoteTransactionSource.js.map +1 -1
  124. package/dist/helpers/EtherscanRemoteTransactionSource.mjs +12 -0
  125. package/dist/helpers/EtherscanRemoteTransactionSource.mjs.map +1 -0
  126. package/dist/helpers/GasFeePoller.js +11 -143
  127. package/dist/helpers/GasFeePoller.js.map +1 -1
  128. package/dist/helpers/GasFeePoller.mjs +12 -0
  129. package/dist/helpers/GasFeePoller.mjs.map +1 -0
  130. package/dist/helpers/IncomingTransactionHelper.js +8 -205
  131. package/dist/helpers/IncomingTransactionHelper.js.map +1 -1
  132. package/dist/helpers/IncomingTransactionHelper.mjs +9 -0
  133. package/dist/helpers/IncomingTransactionHelper.mjs.map +1 -0
  134. package/dist/helpers/MultichainTrackingHelper.js +12 -291
  135. package/dist/helpers/MultichainTrackingHelper.js.map +1 -1
  136. package/dist/helpers/MultichainTrackingHelper.mjs +13 -0
  137. package/dist/helpers/MultichainTrackingHelper.mjs.map +1 -0
  138. package/dist/helpers/PendingTransactionTracker.js +9 -360
  139. package/dist/helpers/PendingTransactionTracker.js.map +1 -1
  140. package/dist/helpers/PendingTransactionTracker.mjs +10 -0
  141. package/dist/helpers/PendingTransactionTracker.mjs.map +1 -0
  142. package/dist/index.js +57 -26
  143. package/dist/index.js.map +1 -1
  144. package/dist/index.mjs +58 -0
  145. package/dist/index.mjs.map +1 -0
  146. package/dist/logger.js +11 -8
  147. package/dist/logger.js.map +1 -1
  148. package/dist/logger.mjs +12 -0
  149. package/dist/logger.mjs.map +1 -0
  150. package/dist/tsconfig.build.tsbuildinfo +1 -0
  151. package/dist/{TransactionController.d.ts → types/TransactionController.d.ts} +236 -46
  152. package/dist/types/TransactionController.d.ts.map +1 -0
  153. package/dist/{constants.d.ts → types/constants.d.ts} +10 -0
  154. package/dist/types/constants.d.ts.map +1 -0
  155. package/dist/types/gas-flows/DefaultGasFeeFlow.d.ts.map +1 -0
  156. package/dist/types/gas-flows/LineaGasFeeFlow.d.ts.map +1 -0
  157. package/dist/types/helpers/EtherscanRemoteTransactionSource.d.ts.map +1 -0
  158. package/dist/{helpers → types/helpers}/GasFeePoller.d.ts +5 -3
  159. package/dist/types/helpers/GasFeePoller.d.ts.map +1 -0
  160. package/dist/types/helpers/IncomingTransactionHelper.d.ts.map +1 -0
  161. package/dist/types/helpers/MultichainTrackingHelper.d.ts.map +1 -0
  162. package/dist/types/helpers/PendingTransactionTracker.d.ts.map +1 -0
  163. package/dist/types/index.d.ts +9 -0
  164. package/dist/types/index.d.ts.map +1 -0
  165. package/dist/types/logger.d.ts.map +1 -0
  166. package/dist/{types.d.ts → types/types.d.ts} +94 -65
  167. package/dist/types/types.d.ts.map +1 -0
  168. package/dist/types/utils/etherscan.d.ts.map +1 -0
  169. package/dist/types/utils/external-transactions.d.ts.map +1 -0
  170. package/dist/types/utils/gas-fees.d.ts.map +1 -0
  171. package/dist/types/utils/gas-flow.d.ts.map +1 -0
  172. package/dist/types/utils/gas.d.ts.map +1 -0
  173. package/dist/types/utils/history.d.ts +20 -0
  174. package/dist/types/utils/history.d.ts.map +1 -0
  175. package/dist/types/utils/layer1-gas-fee-flow.d.ts +16 -0
  176. package/dist/types/utils/layer1-gas-fee-flow.d.ts.map +1 -0
  177. package/dist/types/utils/nonce.d.ts.map +1 -0
  178. package/dist/types/utils/simulation-api.d.ts +99 -0
  179. package/dist/types/utils/simulation-api.d.ts.map +1 -0
  180. package/dist/types/utils/simulation.d.ts +21 -0
  181. package/dist/types/utils/simulation.d.ts.map +1 -0
  182. package/dist/{utils → types/utils}/swaps.d.ts +8 -5
  183. package/dist/types/utils/swaps.d.ts.map +1 -0
  184. package/dist/types/utils/transaction-type.d.ts.map +1 -0
  185. package/dist/types/utils/utils.d.ts.map +1 -0
  186. package/dist/types/utils/validation.d.ts.map +1 -0
  187. package/dist/types.js +19 -170
  188. package/dist/types.js.map +1 -1
  189. package/dist/types.mjs +20 -0
  190. package/dist/types.mjs.map +1 -0
  191. package/dist/utils/etherscan.js +13 -118
  192. package/dist/utils/etherscan.js.map +1 -1
  193. package/dist/utils/etherscan.mjs +14 -0
  194. package/dist/utils/etherscan.mjs.map +1 -0
  195. package/dist/utils/external-transactions.js +8 -35
  196. package/dist/utils/external-transactions.js.map +1 -1
  197. package/dist/utils/external-transactions.mjs +9 -0
  198. package/dist/utils/external-transactions.mjs.map +1 -0
  199. package/dist/utils/gas-fees.js +15 -200
  200. package/dist/utils/gas-fees.js.map +1 -1
  201. package/dist/utils/gas-fees.mjs +16 -0
  202. package/dist/utils/gas-fees.mjs.map +1 -0
  203. package/dist/utils/gas-flow.js +10 -52
  204. package/dist/utils/gas-flow.js.map +1 -1
  205. package/dist/utils/gas-flow.mjs +11 -0
  206. package/dist/utils/gas-flow.mjs.map +1 -0
  207. package/dist/utils/gas.js +19 -133
  208. package/dist/utils/gas.js.map +1 -1
  209. package/dist/utils/gas.mjs +20 -0
  210. package/dist/utils/gas.mjs.map +1 -0
  211. package/dist/utils/history.js +9 -83
  212. package/dist/utils/history.js.map +1 -1
  213. package/dist/utils/history.mjs +10 -0
  214. package/dist/utils/history.mjs.map +1 -0
  215. package/dist/utils/layer1-gas-fee-flow.js +9 -0
  216. package/dist/utils/layer1-gas-fee-flow.js.map +1 -0
  217. package/dist/utils/layer1-gas-fee-flow.mjs +9 -0
  218. package/dist/utils/layer1-gas-fee-flow.mjs.map +1 -0
  219. package/dist/utils/nonce.js +10 -76
  220. package/dist/utils/nonce.js.map +1 -1
  221. package/dist/utils/nonce.mjs +11 -0
  222. package/dist/utils/nonce.mjs.map +1 -0
  223. package/dist/utils/simulation-api.js +10 -0
  224. package/dist/utils/simulation-api.js.map +1 -0
  225. package/dist/utils/simulation-api.mjs +10 -0
  226. package/dist/utils/simulation-api.mjs.map +1 -0
  227. package/dist/utils/simulation.js +12 -0
  228. package/dist/utils/simulation.js.map +1 -0
  229. package/dist/utils/simulation.mjs +12 -0
  230. package/dist/utils/simulation.mjs.map +1 -0
  231. package/dist/utils/swaps.js +23 -256
  232. package/dist/utils/swaps.js.map +1 -1
  233. package/dist/utils/swaps.mjs +24 -0
  234. package/dist/utils/swaps.mjs.map +1 -0
  235. package/dist/utils/transaction-type.js +10 -120
  236. package/dist/utils/transaction-type.js.map +1 -1
  237. package/dist/utils/transaction-type.mjs +11 -0
  238. package/dist/utils/transaction-type.mjs.map +1 -0
  239. package/dist/utils/utils.js +32 -160
  240. package/dist/utils/utils.js.map +1 -1
  241. package/dist/utils/utils.mjs +33 -0
  242. package/dist/utils/utils.mjs.map +1 -0
  243. package/dist/utils/validation.js +11 -258
  244. package/dist/utils/validation.js.map +1 -1
  245. package/dist/utils/validation.mjs +12 -0
  246. package/dist/utils/validation.mjs.map +1 -0
  247. package/package.json +22 -10
  248. package/dist/TransactionController.d.ts.map +0 -1
  249. package/dist/constants.d.ts.map +0 -1
  250. package/dist/gas-flows/DefaultGasFeeFlow.d.ts.map +0 -1
  251. package/dist/gas-flows/LineaGasFeeFlow.d.ts.map +0 -1
  252. package/dist/helpers/EtherscanRemoteTransactionSource.d.ts.map +0 -1
  253. package/dist/helpers/GasFeePoller.d.ts.map +0 -1
  254. package/dist/helpers/IncomingTransactionHelper.d.ts.map +0 -1
  255. package/dist/helpers/MultichainTrackingHelper.d.ts.map +0 -1
  256. package/dist/helpers/PendingTransactionTracker.d.ts.map +0 -1
  257. package/dist/index.d.ts +0 -7
  258. package/dist/index.d.ts.map +0 -1
  259. package/dist/logger.d.ts.map +0 -1
  260. package/dist/types.d.ts.map +0 -1
  261. package/dist/utils/etherscan.d.ts.map +0 -1
  262. package/dist/utils/external-transactions.d.ts.map +0 -1
  263. package/dist/utils/gas-fees.d.ts.map +0 -1
  264. package/dist/utils/gas-flow.d.ts.map +0 -1
  265. package/dist/utils/gas.d.ts.map +0 -1
  266. package/dist/utils/history.d.ts +0 -15
  267. package/dist/utils/history.d.ts.map +0 -1
  268. package/dist/utils/nonce.d.ts.map +0 -1
  269. package/dist/utils/swaps.d.ts.map +0 -1
  270. package/dist/utils/transaction-type.d.ts.map +0 -1
  271. package/dist/utils/utils.d.ts.map +0 -1
  272. package/dist/utils/validation.d.ts.map +0 -1
  273. /package/dist/{gas-flows → types/gas-flows}/DefaultGasFeeFlow.d.ts +0 -0
  274. /package/dist/{gas-flows → types/gas-flows}/LineaGasFeeFlow.d.ts +0 -0
  275. /package/dist/{helpers → types/helpers}/EtherscanRemoteTransactionSource.d.ts +0 -0
  276. /package/dist/{helpers → types/helpers}/IncomingTransactionHelper.d.ts +0 -0
  277. /package/dist/{helpers → types/helpers}/MultichainTrackingHelper.d.ts +0 -0
  278. /package/dist/{helpers → types/helpers}/PendingTransactionTracker.d.ts +0 -0
  279. /package/dist/{logger.d.ts → types/logger.d.ts} +0 -0
  280. /package/dist/{utils → types/utils}/etherscan.d.ts +0 -0
  281. /package/dist/{utils → types/utils}/external-transactions.d.ts +0 -0
  282. /package/dist/{utils → types/utils}/gas-fees.d.ts +0 -0
  283. /package/dist/{utils → types/utils}/gas-flow.d.ts +0 -0
  284. /package/dist/{utils → types/utils}/gas.d.ts +0 -0
  285. /package/dist/{utils → types/utils}/nonce.d.ts +0 -0
  286. /package/dist/{utils → types/utils}/transaction-type.d.ts +0 -0
  287. /package/dist/{utils → types/utils}/utils.d.ts +0 -0
  288. /package/dist/{utils → types/utils}/validation.d.ts +0 -0
@@ -1,78 +1,15 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
12
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
13
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
14
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
15
- };
16
- var _DefaultGasFeeFlow_instances, _DefaultGasFeeFlow_getEstimateLevel, _DefaultGasFeeFlow_getFeeMarketLevel, _DefaultGasFeeFlow_getLegacyLevel;
17
- Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.DefaultGasFeeFlow = void 0;
19
- const gas_fee_controller_1 = require("@metamask/gas-fee-controller");
20
- const utils_1 = require("@metamask/utils");
21
- const logger_1 = require("../logger");
22
- const types_1 = require("../types");
23
- const gas_fees_1 = require("../utils/gas-fees");
24
- const log = (0, utils_1.createModuleLogger)(logger_1.projectLogger, 'default-gas-fee-flow');
25
- /**
26
- * The standard implementation of a gas fee flow that obtains gas fee estimates using only the GasFeeController.
27
- */
28
- class DefaultGasFeeFlow {
29
- constructor() {
30
- _DefaultGasFeeFlow_instances.add(this);
31
- }
32
- matchesTransaction(_transactionMeta) {
33
- return true;
34
- }
35
- getGasFees(request) {
36
- return __awaiter(this, void 0, void 0, function* () {
37
- const { getGasFeeControllerEstimates, transactionMeta } = request;
38
- const { networkClientId } = transactionMeta;
39
- const { gasEstimateType, gasFeeEstimates } = yield getGasFeeControllerEstimates({ networkClientId });
40
- if (gasEstimateType === gas_fee_controller_1.GAS_ESTIMATE_TYPES.FEE_MARKET) {
41
- log('Using fee market estimates', gasFeeEstimates);
42
- }
43
- else if (gasEstimateType === gas_fee_controller_1.GAS_ESTIMATE_TYPES.LEGACY) {
44
- log('Using legacy estimates', gasFeeEstimates);
45
- }
46
- else {
47
- throw new Error(`'No gas fee estimates available`);
48
- }
49
- const estimates = Object.values(types_1.GasFeeEstimateLevel).reduce((result, level) => (Object.assign(Object.assign({}, result), { [level]: __classPrivateFieldGet(this, _DefaultGasFeeFlow_instances, "m", _DefaultGasFeeFlow_getEstimateLevel).call(this, {
50
- gasEstimateType,
51
- gasFeeEstimates,
52
- level,
53
- }) })), {});
54
- return { estimates };
55
- });
56
- }
57
- }
58
- exports.DefaultGasFeeFlow = DefaultGasFeeFlow;
59
- _DefaultGasFeeFlow_instances = new WeakSet(), _DefaultGasFeeFlow_getEstimateLevel = function _DefaultGasFeeFlow_getEstimateLevel({ gasEstimateType, gasFeeEstimates, level, }) {
60
- if (gasEstimateType === gas_fee_controller_1.GAS_ESTIMATE_TYPES.FEE_MARKET) {
61
- return __classPrivateFieldGet(this, _DefaultGasFeeFlow_instances, "m", _DefaultGasFeeFlow_getFeeMarketLevel).call(this, gasFeeEstimates, level);
62
- }
63
- return __classPrivateFieldGet(this, _DefaultGasFeeFlow_instances, "m", _DefaultGasFeeFlow_getLegacyLevel).call(this, gasFeeEstimates, level);
64
- }, _DefaultGasFeeFlow_getFeeMarketLevel = function _DefaultGasFeeFlow_getFeeMarketLevel(gasFeeEstimates, level) {
65
- const maxFeePerGas = (0, gas_fees_1.gweiDecimalToWeiHex)(gasFeeEstimates[level].suggestedMaxFeePerGas);
66
- const maxPriorityFeePerGas = (0, gas_fees_1.gweiDecimalToWeiHex)(gasFeeEstimates[level].suggestedMaxPriorityFeePerGas);
67
- return {
68
- maxFeePerGas,
69
- maxPriorityFeePerGas,
70
- };
71
- }, _DefaultGasFeeFlow_getLegacyLevel = function _DefaultGasFeeFlow_getLegacyLevel(gasFeeEstimates, level) {
72
- const gasPrice = (0, gas_fees_1.gweiDecimalToWeiHex)(gasFeeEstimates[level]);
73
- return {
74
- maxFeePerGas: gasPrice,
75
- maxPriorityFeePerGas: gasPrice,
76
- };
77
- };
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkTXVH44HMjs = require('../chunk-TXVH44HM.js');
4
+ require('../chunk-QPNEFZB3.js');
5
+ require('../chunk-5OQ373JS.js');
6
+ require('../chunk-UGFBA4GV.js');
7
+ require('../chunk-O7H2MC7R.js');
8
+ require('../chunk-ITDY6AIZ.js');
9
+ require('../chunk-S6VGOPUY.js');
10
+ require('../chunk-W3GAOR7Y.js');
11
+ require('../chunk-Z4BLTVTB.js');
12
+
13
+
14
+ exports.DefaultGasFeeFlow = _chunkTXVH44HMjs.DefaultGasFeeFlow;
78
15
  //# sourceMappingURL=DefaultGasFeeFlow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultGasFeeFlow.js","sourceRoot":"","sources":["../../src/gas-flows/DefaultGasFeeFlow.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAIA,qEAAkE;AAClE,2CAAqD;AAErD,sCAA0C;AAS1C,oCAA+C;AAC/C,gDAAwD;AAExD,MAAM,GAAG,GAAG,IAAA,0BAAkB,EAAC,sBAAa,EAAE,sBAAsB,CAAC,CAAC;AActE;;GAEG;AACH,MAAa,iBAAiB;IAA9B;;IA8EA,CAAC;IA7EC,kBAAkB,CAAC,gBAAiC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAEK,UAAU,CAAC,OAA0B;;YACzC,MAAM,EAAE,4BAA4B,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;YAClE,MAAM,EAAE,eAAe,EAAE,GAAG,eAAe,CAAC;YAE5C,MAAM,EAAE,eAAe,EAAE,eAAe,EAAE,GACxC,MAAM,4BAA4B,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC;YAE1D,IAAI,eAAe,KAAK,uCAAkB,CAAC,UAAU,EAAE;gBACrD,GAAG,CAAC,4BAA4B,EAAE,eAAe,CAAC,CAAC;aACpD;iBAAM,IAAI,eAAe,KAAK,uCAAkB,CAAC,MAAM,EAAE;gBACxD,GAAG,CAAC,wBAAwB,EAAE,eAAe,CAAC,CAAC;aAChD;iBAAM;gBACL,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;aACpD;YAED,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,2BAAmB,CAAC,CAAC,MAAM,CACzD,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,iCACd,MAAM,KACT,CAAC,KAAK,CAAC,EAAE,uBAAA,IAAI,yEAAkB,MAAtB,IAAI,EAAmB;oBAC9B,eAAe;oBACf,eAAe;oBACf,KAAK;iBAC8D,CAAC,IACtE,EACF,EAAqB,CACtB,CAAC;YAEF,OAAO,EAAE,SAAS,EAAE,CAAC;QACvB,CAAC;KAAA;CA6CF;AA9ED,8CA8EC;iIA3CmB,EAChB,eAAe,EACf,eAAe,EACf,KAAK,GAG0B;IAC/B,IAAI,eAAe,KAAK,uCAAkB,CAAC,UAAU,EAAE;QACrD,OAAO,uBAAA,IAAI,0EAAmB,MAAvB,IAAI,EAAoB,eAAe,EAAE,KAAK,CAAC,CAAC;KACxD;IAED,OAAO,uBAAA,IAAI,uEAAgB,MAApB,IAAI,EAAiB,eAAe,EAAE,KAAK,CAAC,CAAC;AACtD,CAAC,uFAGC,eAA0C,EAC1C,KAA0B;IAE1B,MAAM,YAAY,GAAG,IAAA,8BAAmB,EACtC,eAAe,CAAC,KAAK,CAAC,CAAC,qBAAqB,CAC7C,CAAC;IAEF,MAAM,oBAAoB,GAAG,IAAA,8BAAmB,EAC9C,eAAe,CAAC,KAAK,CAAC,CAAC,6BAA6B,CACrD,CAAC;IAEF,OAAO;QACL,YAAY;QACZ,oBAAoB;KACrB,CAAC;AACJ,CAAC,iFAGC,eAAuC,EACvC,KAA0B;IAE1B,MAAM,QAAQ,GAAG,IAAA,8BAAmB,EAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;IAE7D,OAAO;QACL,YAAY,EAAE,QAAQ;QACtB,oBAAoB,EAAE,QAAQ;KAC/B,CAAC;AACJ,CAAC","sourcesContent":["import type {\n LegacyGasPriceEstimate,\n GasFeeEstimates as FeeMarketGasPriceEstimate,\n} from '@metamask/gas-fee-controller';\nimport { GAS_ESTIMATE_TYPES } from '@metamask/gas-fee-controller';\nimport { createModuleLogger } from '@metamask/utils';\n\nimport { projectLogger } from '../logger';\nimport type {\n GasFeeEstimates,\n GasFeeEstimatesForLevel,\n GasFeeFlow,\n GasFeeFlowRequest,\n GasFeeFlowResponse,\n TransactionMeta,\n} from '../types';\nimport { GasFeeEstimateLevel } from '../types';\nimport { gweiDecimalToWeiHex } from '../utils/gas-fees';\n\nconst log = createModuleLogger(projectLogger, 'default-gas-fee-flow');\n\ntype FeeMarketGetEstimateLevelRequest = {\n gasEstimateType: 'fee-market';\n gasFeeEstimates: FeeMarketGasPriceEstimate;\n level: GasFeeEstimateLevel;\n};\n\ntype LegacyGetEstimateLevelRequest = {\n gasEstimateType: 'legacy';\n gasFeeEstimates: LegacyGasPriceEstimate;\n level: GasFeeEstimateLevel;\n};\n\n/**\n * The standard implementation of a gas fee flow that obtains gas fee estimates using only the GasFeeController.\n */\nexport class DefaultGasFeeFlow implements GasFeeFlow {\n matchesTransaction(_transactionMeta: TransactionMeta): boolean {\n return true;\n }\n\n async getGasFees(request: GasFeeFlowRequest): Promise<GasFeeFlowResponse> {\n const { getGasFeeControllerEstimates, transactionMeta } = request;\n const { networkClientId } = transactionMeta;\n\n const { gasEstimateType, gasFeeEstimates } =\n await getGasFeeControllerEstimates({ networkClientId });\n\n if (gasEstimateType === GAS_ESTIMATE_TYPES.FEE_MARKET) {\n log('Using fee market estimates', gasFeeEstimates);\n } else if (gasEstimateType === GAS_ESTIMATE_TYPES.LEGACY) {\n log('Using legacy estimates', gasFeeEstimates);\n } else {\n throw new Error(`'No gas fee estimates available`);\n }\n\n const estimates = Object.values(GasFeeEstimateLevel).reduce(\n (result, level) => ({\n ...result,\n [level]: this.#getEstimateLevel({\n gasEstimateType,\n gasFeeEstimates,\n level,\n } as FeeMarketGetEstimateLevelRequest | LegacyGetEstimateLevelRequest),\n }),\n {} as GasFeeEstimates,\n );\n\n return { estimates };\n }\n\n #getEstimateLevel({\n gasEstimateType,\n gasFeeEstimates,\n level,\n }:\n | FeeMarketGetEstimateLevelRequest\n | LegacyGetEstimateLevelRequest): GasFeeEstimatesForLevel {\n if (gasEstimateType === GAS_ESTIMATE_TYPES.FEE_MARKET) {\n return this.#getFeeMarketLevel(gasFeeEstimates, level);\n }\n\n return this.#getLegacyLevel(gasFeeEstimates, level);\n }\n\n #getFeeMarketLevel(\n gasFeeEstimates: FeeMarketGasPriceEstimate,\n level: GasFeeEstimateLevel,\n ): GasFeeEstimatesForLevel {\n const maxFeePerGas = gweiDecimalToWeiHex(\n gasFeeEstimates[level].suggestedMaxFeePerGas,\n );\n\n const maxPriorityFeePerGas = gweiDecimalToWeiHex(\n gasFeeEstimates[level].suggestedMaxPriorityFeePerGas,\n );\n\n return {\n maxFeePerGas,\n maxPriorityFeePerGas,\n };\n }\n\n #getLegacyLevel(\n gasFeeEstimates: LegacyGasPriceEstimate,\n level: GasFeeEstimateLevel,\n ): GasFeeEstimatesForLevel {\n const gasPrice = gweiDecimalToWeiHex(gasFeeEstimates[level]);\n\n return {\n maxFeePerGas: gasPrice,\n maxPriorityFeePerGas: gasPrice,\n };\n }\n}\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import {
2
+ DefaultGasFeeFlow
3
+ } from "../chunk-OF6NSLXF.mjs";
4
+ import "../chunk-DTONMSFW.mjs";
5
+ import "../chunk-3D3SA6PY.mjs";
6
+ import "../chunk-J56A7UCK.mjs";
7
+ import "../chunk-2YXA3K67.mjs";
8
+ import "../chunk-Z3HHSD5I.mjs";
9
+ import "../chunk-UQQWZT6C.mjs";
10
+ import "../chunk-NM4LTWRU.mjs";
11
+ import "../chunk-XUI43LEZ.mjs";
12
+ export {
13
+ DefaultGasFeeFlow
14
+ };
15
+ //# sourceMappingURL=DefaultGasFeeFlow.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,111 +1,16 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
12
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
13
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
14
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
15
- };
16
- var _LineaGasFeeFlow_instances, _LineaGasFeeFlow_getLineaGasFees, _LineaGasFeeFlow_getLineaResponse, _LineaGasFeeFlow_getValuesFromMultipliers, _LineaGasFeeFlow_getMaxFees, _LineaGasFeeFlow_feesToString;
17
- Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.LineaGasFeeFlow = void 0;
19
- const controller_utils_1 = require("@metamask/controller-utils");
20
- const utils_1 = require("@metamask/utils");
21
- const logger_1 = require("../logger");
22
- const types_1 = require("../types");
23
- const DefaultGasFeeFlow_1 = require("./DefaultGasFeeFlow");
24
- const log = (0, utils_1.createModuleLogger)(logger_1.projectLogger, 'linea-gas-fee-flow');
25
- const LINEA_CHAIN_IDS = [
26
- controller_utils_1.ChainId['linea-mainnet'],
27
- controller_utils_1.ChainId['linea-goerli'],
28
- ];
29
- const BASE_FEE_MULTIPLIERS = {
30
- low: 1,
31
- medium: 1.35,
32
- high: 1.7,
33
- };
34
- const PRIORITY_FEE_MULTIPLIERS = {
35
- low: 1,
36
- medium: 1.05,
37
- high: 1.1,
38
- };
39
- /**
40
- * Implementation of a gas fee flow specific to Linea networks that obtains gas fee estimates using:
41
- * - The `linea_estimateGas` RPC method to obtain the base fee and lowest priority fee.
42
- * - Static multipliers to increase the base and priority fees.
43
- */
44
- class LineaGasFeeFlow {
45
- constructor() {
46
- _LineaGasFeeFlow_instances.add(this);
47
- }
48
- matchesTransaction(transactionMeta) {
49
- return LINEA_CHAIN_IDS.includes(transactionMeta.chainId);
50
- }
51
- getGasFees(request) {
52
- return __awaiter(this, void 0, void 0, function* () {
53
- try {
54
- return yield __classPrivateFieldGet(this, _LineaGasFeeFlow_instances, "m", _LineaGasFeeFlow_getLineaGasFees).call(this, request);
55
- }
56
- catch (error) {
57
- log('Using default flow as fallback due to error', error);
58
- return new DefaultGasFeeFlow_1.DefaultGasFeeFlow().getGasFees(request);
59
- }
60
- });
61
- }
62
- }
63
- exports.LineaGasFeeFlow = LineaGasFeeFlow;
64
- _LineaGasFeeFlow_instances = new WeakSet(), _LineaGasFeeFlow_getLineaGasFees = function _LineaGasFeeFlow_getLineaGasFees(request) {
65
- return __awaiter(this, void 0, void 0, function* () {
66
- const { ethQuery, transactionMeta } = request;
67
- const lineaResponse = yield __classPrivateFieldGet(this, _LineaGasFeeFlow_instances, "m", _LineaGasFeeFlow_getLineaResponse).call(this, transactionMeta, ethQuery);
68
- log('Received Linea response', lineaResponse);
69
- const baseFees = __classPrivateFieldGet(this, _LineaGasFeeFlow_instances, "m", _LineaGasFeeFlow_getValuesFromMultipliers).call(this, lineaResponse.baseFeePerGas, BASE_FEE_MULTIPLIERS);
70
- log('Generated base fees', __classPrivateFieldGet(this, _LineaGasFeeFlow_instances, "m", _LineaGasFeeFlow_feesToString).call(this, baseFees));
71
- const priorityFees = __classPrivateFieldGet(this, _LineaGasFeeFlow_instances, "m", _LineaGasFeeFlow_getValuesFromMultipliers).call(this, lineaResponse.priorityFeePerGas, PRIORITY_FEE_MULTIPLIERS);
72
- log('Generated priority fees', __classPrivateFieldGet(this, _LineaGasFeeFlow_instances, "m", _LineaGasFeeFlow_feesToString).call(this, priorityFees));
73
- const maxFees = __classPrivateFieldGet(this, _LineaGasFeeFlow_instances, "m", _LineaGasFeeFlow_getMaxFees).call(this, baseFees, priorityFees);
74
- log('Generated max fees', __classPrivateFieldGet(this, _LineaGasFeeFlow_instances, "m", _LineaGasFeeFlow_feesToString).call(this, maxFees));
75
- const estimates = Object.values(types_1.GasFeeEstimateLevel).reduce((result, level) => (Object.assign(Object.assign({}, result), { [level]: {
76
- maxFeePerGas: (0, controller_utils_1.toHex)(maxFees[level]),
77
- maxPriorityFeePerGas: (0, controller_utils_1.toHex)(priorityFees[level]),
78
- } })), {});
79
- return { estimates };
80
- });
81
- }, _LineaGasFeeFlow_getLineaResponse = function _LineaGasFeeFlow_getLineaResponse(transactionMeta, ethQuery) {
82
- return (0, controller_utils_1.query)(ethQuery, 'linea_estimateGas', [
83
- {
84
- from: transactionMeta.txParams.from,
85
- to: transactionMeta.txParams.to,
86
- value: transactionMeta.txParams.value,
87
- input: transactionMeta.txParams.data,
88
- // Required in request but no impact on response.
89
- gasPrice: '0x100000000',
90
- },
91
- ]);
92
- }, _LineaGasFeeFlow_getValuesFromMultipliers = function _LineaGasFeeFlow_getValuesFromMultipliers(value, multipliers) {
93
- const base = (0, controller_utils_1.hexToBN)(value);
94
- const low = base.muln(multipliers.low);
95
- const medium = base.muln(multipliers.medium);
96
- const high = base.muln(multipliers.high);
97
- return {
98
- low,
99
- medium,
100
- high,
101
- };
102
- }, _LineaGasFeeFlow_getMaxFees = function _LineaGasFeeFlow_getMaxFees(baseFees, priorityFees) {
103
- return {
104
- low: baseFees.low.add(priorityFees.low),
105
- medium: baseFees.medium.add(priorityFees.medium),
106
- high: baseFees.high.add(priorityFees.high),
107
- };
108
- }, _LineaGasFeeFlow_feesToString = function _LineaGasFeeFlow_feesToString(fees) {
109
- return Object.values(types_1.GasFeeEstimateLevel).map((level) => fees[level].toString(10));
110
- };
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkCQBXHAYRjs = require('../chunk-CQBXHAYR.js');
4
+ require('../chunk-TXVH44HM.js');
5
+ require('../chunk-QPNEFZB3.js');
6
+ require('../chunk-5OQ373JS.js');
7
+ require('../chunk-UGFBA4GV.js');
8
+ require('../chunk-O7H2MC7R.js');
9
+ require('../chunk-ITDY6AIZ.js');
10
+ require('../chunk-S6VGOPUY.js');
11
+ require('../chunk-W3GAOR7Y.js');
12
+ require('../chunk-Z4BLTVTB.js');
13
+
14
+
15
+ exports.LineaGasFeeFlow = _chunkCQBXHAYRjs.LineaGasFeeFlow;
111
16
  //# sourceMappingURL=LineaGasFeeFlow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LineaGasFeeFlow.js","sourceRoot":"","sources":["../../src/gas-flows/LineaGasFeeFlow.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChainId, hexToBN, query, toHex } from '@metamask/controller-utils';\nimport type EthQuery from '@metamask/eth-query';\nimport { createModuleLogger, type Hex } from '@metamask/utils';\nimport type BN from 'bn.js';\n\nimport { projectLogger } from '../logger';\nimport type {\n GasFeeEstimates,\n GasFeeFlow,\n GasFeeFlowRequest,\n GasFeeFlowResponse,\n TransactionMeta,\n} from '../types';\nimport { GasFeeEstimateLevel } from '../types';\nimport { DefaultGasFeeFlow } from './DefaultGasFeeFlow';\n\ntype LineaEstimateGasResponse = {\n baseFeePerGas: Hex;\n priorityFeePerGas: Hex;\n};\n\ntype FeesByLevel = {\n [key in GasFeeEstimateLevel]: BN;\n};\n\nconst log = createModuleLogger(projectLogger, 'linea-gas-fee-flow');\n\nconst LINEA_CHAIN_IDS: Hex[] = [\n ChainId['linea-mainnet'],\n ChainId['linea-goerli'],\n];\n\nconst BASE_FEE_MULTIPLIERS = {\n low: 1,\n medium: 1.35,\n high: 1.7,\n};\n\nconst PRIORITY_FEE_MULTIPLIERS = {\n low: 1,\n medium: 1.05,\n high: 1.1,\n};\n\n/**\n * Implementation of a gas fee flow specific to Linea networks that obtains gas fee estimates using:\n * - The `linea_estimateGas` RPC method to obtain the base fee and lowest priority fee.\n * - Static multipliers to increase the base and priority fees.\n */\nexport class LineaGasFeeFlow implements GasFeeFlow {\n matchesTransaction(transactionMeta: TransactionMeta): boolean {\n return LINEA_CHAIN_IDS.includes(transactionMeta.chainId);\n }\n\n async getGasFees(request: GasFeeFlowRequest): Promise<GasFeeFlowResponse> {\n try {\n return await this.#getLineaGasFees(request);\n } catch (error) {\n log('Using default flow as fallback due to error', error);\n return new DefaultGasFeeFlow().getGasFees(request);\n }\n }\n\n async #getLineaGasFees(\n request: GasFeeFlowRequest,\n ): Promise<GasFeeFlowResponse> {\n const { ethQuery, transactionMeta } = request;\n\n const lineaResponse = await this.#getLineaResponse(\n transactionMeta,\n ethQuery,\n );\n\n log('Received Linea response', lineaResponse);\n\n const baseFees = this.#getValuesFromMultipliers(\n lineaResponse.baseFeePerGas,\n BASE_FEE_MULTIPLIERS,\n );\n\n log('Generated base fees', this.#feesToString(baseFees));\n\n const priorityFees = this.#getValuesFromMultipliers(\n lineaResponse.priorityFeePerGas,\n PRIORITY_FEE_MULTIPLIERS,\n );\n\n log('Generated priority fees', this.#feesToString(priorityFees));\n\n const maxFees = this.#getMaxFees(baseFees, priorityFees);\n\n log('Generated max fees', this.#feesToString(maxFees));\n\n const estimates = Object.values(GasFeeEstimateLevel).reduce(\n (result, level) => ({\n ...result,\n [level]: {\n maxFeePerGas: toHex(maxFees[level]),\n maxPriorityFeePerGas: toHex(priorityFees[level]),\n },\n }),\n {} as GasFeeEstimates,\n );\n\n return { estimates };\n }\n\n #getLineaResponse(\n transactionMeta: TransactionMeta,\n ethQuery: EthQuery,\n ): Promise<LineaEstimateGasResponse> {\n return query(ethQuery, 'linea_estimateGas', [\n {\n from: transactionMeta.txParams.from,\n to: transactionMeta.txParams.to,\n value: transactionMeta.txParams.value,\n input: transactionMeta.txParams.data,\n // Required in request but no impact on response.\n gasPrice: '0x100000000',\n },\n ]);\n }\n\n #getValuesFromMultipliers(\n value: Hex,\n multipliers: { low: number; medium: number; high: number },\n ): FeesByLevel {\n const base = hexToBN(value);\n const low = base.muln(multipliers.low);\n const medium = base.muln(multipliers.medium);\n const high = base.muln(multipliers.high);\n\n return {\n low,\n medium,\n high,\n };\n }\n\n #getMaxFees(\n baseFees: Record<GasFeeEstimateLevel, BN>,\n priorityFees: Record<GasFeeEstimateLevel, BN>,\n ): FeesByLevel {\n return {\n low: baseFees.low.add(priorityFees.low),\n medium: baseFees.medium.add(priorityFees.medium),\n high: baseFees.high.add(priorityFees.high),\n };\n }\n\n #feesToString(fees: FeesByLevel) {\n return Object.values(GasFeeEstimateLevel).map((level) =>\n fees[level].toString(10),\n );\n }\n}\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import {
2
+ LineaGasFeeFlow
3
+ } from "../chunk-K26EBMGI.mjs";
4
+ import "../chunk-OF6NSLXF.mjs";
5
+ import "../chunk-DTONMSFW.mjs";
6
+ import "../chunk-3D3SA6PY.mjs";
7
+ import "../chunk-J56A7UCK.mjs";
8
+ import "../chunk-2YXA3K67.mjs";
9
+ import "../chunk-Z3HHSD5I.mjs";
10
+ import "../chunk-UQQWZT6C.mjs";
11
+ import "../chunk-NM4LTWRU.mjs";
12
+ import "../chunk-XUI43LEZ.mjs";
13
+ export {
14
+ LineaGasFeeFlow
15
+ };
16
+ //# sourceMappingURL=LineaGasFeeFlow.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,146 +1,12 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
12
- if (kind === "m") throw new TypeError("Private method is not writable");
13
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
14
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
15
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
16
- };
17
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
18
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
19
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
20
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
21
- };
22
- var __importDefault = (this && this.__importDefault) || function (mod) {
23
- return (mod && mod.__esModule) ? mod : { "default": mod };
24
- };
25
- var _EtherscanRemoteTransactionSource_instances, _EtherscanRemoteTransactionSource_includeTokenTransfers, _EtherscanRemoteTransactionSource_isTokenRequestPending, _EtherscanRemoteTransactionSource_mutex, _EtherscanRemoteTransactionSource_releaseLockAfterInterval, _EtherscanRemoteTransactionSource_fetchNormalTransactions, _EtherscanRemoteTransactionSource_fetchTokenTransactions, _EtherscanRemoteTransactionSource_getResponseTransactions, _EtherscanRemoteTransactionSource_normalizeTransaction, _EtherscanRemoteTransactionSource_normalizeTokenTransaction, _EtherscanRemoteTransactionSource_normalizeTransactionBase;
26
- Object.defineProperty(exports, "__esModule", { value: true });
27
- exports.EtherscanRemoteTransactionSource = void 0;
28
- const controller_utils_1 = require("@metamask/controller-utils");
29
- const async_mutex_1 = require("async-mutex");
30
- const bn_js_1 = __importDefault(require("bn.js"));
31
- const uuid_1 = require("uuid");
32
- const constants_1 = require("../constants");
33
- const logger_1 = require("../logger");
34
- const types_1 = require("../types");
35
- const etherscan_1 = require("../utils/etherscan");
36
- const ETHERSCAN_RATE_LIMIT_INTERVAL = 5000;
37
- /**
38
- * A RemoteTransactionSource that fetches transaction data from Etherscan.
39
- */
40
- class EtherscanRemoteTransactionSource {
41
- constructor({ includeTokenTransfers, } = {}) {
42
- _EtherscanRemoteTransactionSource_instances.add(this);
43
- _EtherscanRemoteTransactionSource_includeTokenTransfers.set(this, void 0);
44
- _EtherscanRemoteTransactionSource_isTokenRequestPending.set(this, void 0);
45
- _EtherscanRemoteTransactionSource_mutex.set(this, new async_mutex_1.Mutex());
46
- _EtherscanRemoteTransactionSource_fetchNormalTransactions.set(this, (request, etherscanRequest) => __awaiter(this, void 0, void 0, function* () {
47
- const { currentChainId } = request;
48
- const etherscanTransactions = yield (0, etherscan_1.fetchEtherscanTransactions)(etherscanRequest);
49
- return __classPrivateFieldGet(this, _EtherscanRemoteTransactionSource_instances, "m", _EtherscanRemoteTransactionSource_getResponseTransactions).call(this, etherscanTransactions).map((tx) => __classPrivateFieldGet(this, _EtherscanRemoteTransactionSource_instances, "m", _EtherscanRemoteTransactionSource_normalizeTransaction).call(this, tx, currentChainId));
50
- }));
51
- _EtherscanRemoteTransactionSource_fetchTokenTransactions.set(this, (request, etherscanRequest) => __awaiter(this, void 0, void 0, function* () {
52
- const { currentChainId } = request;
53
- const etherscanTransactions = yield (0, etherscan_1.fetchEtherscanTokenTransactions)(etherscanRequest);
54
- return __classPrivateFieldGet(this, _EtherscanRemoteTransactionSource_instances, "m", _EtherscanRemoteTransactionSource_getResponseTransactions).call(this, etherscanTransactions).map((tx) => __classPrivateFieldGet(this, _EtherscanRemoteTransactionSource_instances, "m", _EtherscanRemoteTransactionSource_normalizeTokenTransaction).call(this, tx, currentChainId));
55
- }));
56
- __classPrivateFieldSet(this, _EtherscanRemoteTransactionSource_includeTokenTransfers, includeTokenTransfers !== null && includeTokenTransfers !== void 0 ? includeTokenTransfers : true, "f");
57
- __classPrivateFieldSet(this, _EtherscanRemoteTransactionSource_isTokenRequestPending, false, "f");
58
- }
59
- isSupportedNetwork(chainId) {
60
- return Object.keys(constants_1.ETHERSCAN_SUPPORTED_NETWORKS).includes(chainId);
61
- }
62
- getLastBlockVariations() {
63
- return [__classPrivateFieldGet(this, _EtherscanRemoteTransactionSource_isTokenRequestPending, "f") ? 'token' : 'normal'];
64
- }
65
- fetchTransactions(request) {
66
- return __awaiter(this, void 0, void 0, function* () {
67
- const releaseLock = yield __classPrivateFieldGet(this, _EtherscanRemoteTransactionSource_mutex, "f").acquire();
68
- const acquiredTime = Date.now();
69
- const etherscanRequest = Object.assign(Object.assign({}, request), { chainId: request.currentChainId });
70
- try {
71
- const transactions = __classPrivateFieldGet(this, _EtherscanRemoteTransactionSource_isTokenRequestPending, "f")
72
- ? yield __classPrivateFieldGet(this, _EtherscanRemoteTransactionSource_fetchTokenTransactions, "f").call(this, request, etherscanRequest)
73
- : yield __classPrivateFieldGet(this, _EtherscanRemoteTransactionSource_fetchNormalTransactions, "f").call(this, request, etherscanRequest);
74
- if (__classPrivateFieldGet(this, _EtherscanRemoteTransactionSource_includeTokenTransfers, "f")) {
75
- __classPrivateFieldSet(this, _EtherscanRemoteTransactionSource_isTokenRequestPending, !__classPrivateFieldGet(this, _EtherscanRemoteTransactionSource_isTokenRequestPending, "f"), "f");
76
- }
77
- return transactions;
78
- }
79
- finally {
80
- __classPrivateFieldGet(this, _EtherscanRemoteTransactionSource_instances, "m", _EtherscanRemoteTransactionSource_releaseLockAfterInterval).call(this, acquiredTime, releaseLock);
81
- }
82
- });
83
- }
84
- }
85
- exports.EtherscanRemoteTransactionSource = EtherscanRemoteTransactionSource;
86
- _EtherscanRemoteTransactionSource_includeTokenTransfers = new WeakMap(), _EtherscanRemoteTransactionSource_isTokenRequestPending = new WeakMap(), _EtherscanRemoteTransactionSource_mutex = new WeakMap(), _EtherscanRemoteTransactionSource_fetchNormalTransactions = new WeakMap(), _EtherscanRemoteTransactionSource_fetchTokenTransactions = new WeakMap(), _EtherscanRemoteTransactionSource_instances = new WeakSet(), _EtherscanRemoteTransactionSource_releaseLockAfterInterval = function _EtherscanRemoteTransactionSource_releaseLockAfterInterval(acquireTime, releaseLock) {
87
- const elapsedTime = Date.now() - acquireTime;
88
- const remainingTime = Math.max(0, ETHERSCAN_RATE_LIMIT_INTERVAL - elapsedTime);
89
- // Wait for the remaining time if it hasn't been 5 seconds yet
90
- if (remainingTime > 0) {
91
- setTimeout(releaseLock, remainingTime);
92
- }
93
- else {
94
- releaseLock();
95
- }
96
- }, _EtherscanRemoteTransactionSource_getResponseTransactions = function _EtherscanRemoteTransactionSource_getResponseTransactions(response) {
97
- let result = response.result;
98
- if (response.status === '0') {
99
- result = [];
100
- if (response.result.length) {
101
- (0, logger_1.incomingTransactionsLogger)('Ignored Etherscan request error', {
102
- message: response.result,
103
- type: __classPrivateFieldGet(this, _EtherscanRemoteTransactionSource_isTokenRequestPending, "f") ? 'token' : 'normal',
104
- });
105
- }
106
- }
107
- return result;
108
- }, _EtherscanRemoteTransactionSource_normalizeTransaction = function _EtherscanRemoteTransactionSource_normalizeTransaction(txMeta, currentChainId) {
109
- const base = __classPrivateFieldGet(this, _EtherscanRemoteTransactionSource_instances, "m", _EtherscanRemoteTransactionSource_normalizeTransactionBase).call(this, txMeta, currentChainId);
110
- return Object.assign(Object.assign(Object.assign({}, base), { txParams: Object.assign(Object.assign({}, base.txParams), { data: txMeta.input }) }), (txMeta.isError === '0'
111
- ? { status: types_1.TransactionStatus.confirmed }
112
- : {
113
- error: new Error('Transaction failed'),
114
- status: types_1.TransactionStatus.failed,
115
- }));
116
- }, _EtherscanRemoteTransactionSource_normalizeTokenTransaction = function _EtherscanRemoteTransactionSource_normalizeTokenTransaction(txMeta, currentChainId) {
117
- const base = __classPrivateFieldGet(this, _EtherscanRemoteTransactionSource_instances, "m", _EtherscanRemoteTransactionSource_normalizeTransactionBase).call(this, txMeta, currentChainId);
118
- return Object.assign(Object.assign({}, base), { isTransfer: true, transferInformation: {
119
- contractAddress: txMeta.contractAddress,
120
- decimals: Number(txMeta.tokenDecimal),
121
- symbol: txMeta.tokenSymbol,
122
- } });
123
- }, _EtherscanRemoteTransactionSource_normalizeTransactionBase = function _EtherscanRemoteTransactionSource_normalizeTransactionBase(txMeta, currentChainId) {
124
- const time = parseInt(txMeta.timeStamp, 10) * 1000;
125
- return {
126
- blockNumber: txMeta.blockNumber,
127
- chainId: currentChainId,
128
- hash: txMeta.hash,
129
- id: (0, uuid_1.v1)({ msecs: time }),
130
- status: types_1.TransactionStatus.confirmed,
131
- time,
132
- txParams: {
133
- chainId: currentChainId,
134
- from: txMeta.from,
135
- gas: (0, controller_utils_1.BNToHex)(new bn_js_1.default(txMeta.gas)),
136
- gasPrice: (0, controller_utils_1.BNToHex)(new bn_js_1.default(txMeta.gasPrice)),
137
- gasUsed: (0, controller_utils_1.BNToHex)(new bn_js_1.default(txMeta.gasUsed)),
138
- nonce: (0, controller_utils_1.BNToHex)(new bn_js_1.default(txMeta.nonce)),
139
- to: txMeta.to,
140
- value: (0, controller_utils_1.BNToHex)(new bn_js_1.default(txMeta.value)),
141
- },
142
- type: types_1.TransactionType.incoming,
143
- verifiedOnBlockchain: false,
144
- };
145
- };
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkF3CMU2DMjs = require('../chunk-F3CMU2DM.js');
4
+ require('../chunk-CXXGL43K.js');
5
+ require('../chunk-ITDY6AIZ.js');
6
+ require('../chunk-S6VGOPUY.js');
7
+ require('../chunk-W3GAOR7Y.js');
8
+ require('../chunk-Z4BLTVTB.js');
9
+
10
+
11
+ exports.EtherscanRemoteTransactionSource = _chunkF3CMU2DMjs.EtherscanRemoteTransactionSource;
146
12
  //# sourceMappingURL=EtherscanRemoteTransactionSource.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EtherscanRemoteTransactionSource.js","sourceRoot":"","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 #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"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import {
2
+ EtherscanRemoteTransactionSource
3
+ } from "../chunk-IZI7FQIN.mjs";
4
+ import "../chunk-VEREDMI2.mjs";
5
+ import "../chunk-Z3HHSD5I.mjs";
6
+ import "../chunk-UQQWZT6C.mjs";
7
+ import "../chunk-NM4LTWRU.mjs";
8
+ import "../chunk-XUI43LEZ.mjs";
9
+ export {
10
+ EtherscanRemoteTransactionSource
11
+ };
12
+ //# sourceMappingURL=EtherscanRemoteTransactionSource.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}