@metamask-previews/transaction-controller 69.2.1-preview-064aea96d → 69.2.1-preview-ec4680201

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 (229) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/TransactionController-method-action-types.cjs.map +1 -1
  3. package/dist/TransactionController-method-action-types.d.cts.map +1 -1
  4. package/dist/TransactionController-method-action-types.d.mts.map +1 -1
  5. package/dist/TransactionController-method-action-types.mjs.map +1 -1
  6. package/dist/TransactionController.cjs +205 -205
  7. package/dist/TransactionController.cjs.map +1 -1
  8. package/dist/TransactionController.d.cts.map +1 -1
  9. package/dist/TransactionController.d.mts.map +1 -1
  10. package/dist/TransactionController.mjs +1 -1
  11. package/dist/TransactionController.mjs.map +1 -1
  12. package/dist/api/accounts-api.cjs +5 -5
  13. package/dist/api/accounts-api.cjs.map +1 -1
  14. package/dist/api/accounts-api.mjs.map +1 -1
  15. package/dist/api/simulation-api.cjs +8 -8
  16. package/dist/api/simulation-api.cjs.map +1 -1
  17. package/dist/api/simulation-api.d.cts.map +1 -1
  18. package/dist/api/simulation-api.d.mts.map +1 -1
  19. package/dist/api/simulation-api.mjs.map +1 -1
  20. package/dist/errors.cjs +4 -4
  21. package/dist/errors.cjs.map +1 -1
  22. package/dist/errors.mjs.map +1 -1
  23. package/dist/gas-flows/DefaultGasFeeFlow.cjs +13 -13
  24. package/dist/gas-flows/DefaultGasFeeFlow.cjs.map +1 -1
  25. package/dist/gas-flows/DefaultGasFeeFlow.d.cts.map +1 -1
  26. package/dist/gas-flows/DefaultGasFeeFlow.d.mts.map +1 -1
  27. package/dist/gas-flows/DefaultGasFeeFlow.mjs.map +1 -1
  28. package/dist/gas-flows/LineaGasFeeFlow.cjs +10 -10
  29. package/dist/gas-flows/LineaGasFeeFlow.cjs.map +1 -1
  30. package/dist/gas-flows/LineaGasFeeFlow.d.cts.map +1 -1
  31. package/dist/gas-flows/LineaGasFeeFlow.d.mts.map +1 -1
  32. package/dist/gas-flows/LineaGasFeeFlow.mjs.map +1 -1
  33. package/dist/gas-flows/MantleLayer1GasFeeFlow.cjs +8 -8
  34. package/dist/gas-flows/MantleLayer1GasFeeFlow.cjs.map +1 -1
  35. package/dist/gas-flows/MantleLayer1GasFeeFlow.d.cts.map +1 -1
  36. package/dist/gas-flows/MantleLayer1GasFeeFlow.d.mts.map +1 -1
  37. package/dist/gas-flows/MantleLayer1GasFeeFlow.mjs.map +1 -1
  38. package/dist/gas-flows/OptimismLayer1GasFeeFlow.cjs +10 -10
  39. package/dist/gas-flows/OptimismLayer1GasFeeFlow.cjs.map +1 -1
  40. package/dist/gas-flows/OptimismLayer1GasFeeFlow.d.cts.map +1 -1
  41. package/dist/gas-flows/OptimismLayer1GasFeeFlow.d.mts.map +1 -1
  42. package/dist/gas-flows/OptimismLayer1GasFeeFlow.mjs.map +1 -1
  43. package/dist/gas-flows/OracleLayer1GasFeeFlow.cjs +10 -10
  44. package/dist/gas-flows/OracleLayer1GasFeeFlow.cjs.map +1 -1
  45. package/dist/gas-flows/OracleLayer1GasFeeFlow.d.cts.map +1 -1
  46. package/dist/gas-flows/OracleLayer1GasFeeFlow.d.mts.map +1 -1
  47. package/dist/gas-flows/OracleLayer1GasFeeFlow.mjs.map +1 -1
  48. package/dist/gas-flows/RandomisedEstimationsGasFeeFlow.cjs +13 -13
  49. package/dist/gas-flows/RandomisedEstimationsGasFeeFlow.cjs.map +1 -1
  50. package/dist/gas-flows/RandomisedEstimationsGasFeeFlow.d.cts.map +1 -1
  51. package/dist/gas-flows/RandomisedEstimationsGasFeeFlow.d.mts.map +1 -1
  52. package/dist/gas-flows/RandomisedEstimationsGasFeeFlow.mjs.map +1 -1
  53. package/dist/gas-flows/ScrollLayer1GasFeeFlow.cjs +4 -4
  54. package/dist/gas-flows/ScrollLayer1GasFeeFlow.cjs.map +1 -1
  55. package/dist/gas-flows/ScrollLayer1GasFeeFlow.d.cts.map +1 -1
  56. package/dist/gas-flows/ScrollLayer1GasFeeFlow.d.mts.map +1 -1
  57. package/dist/gas-flows/ScrollLayer1GasFeeFlow.mjs.map +1 -1
  58. package/dist/gas-flows/TestGasFeeFlow.cjs +2 -2
  59. package/dist/gas-flows/TestGasFeeFlow.cjs.map +1 -1
  60. package/dist/gas-flows/TestGasFeeFlow.d.cts.map +1 -1
  61. package/dist/gas-flows/TestGasFeeFlow.d.mts.map +1 -1
  62. package/dist/gas-flows/TestGasFeeFlow.mjs.map +1 -1
  63. package/dist/helpers/GasFeePoller.cjs +22 -22
  64. package/dist/helpers/GasFeePoller.cjs.map +1 -1
  65. package/dist/helpers/GasFeePoller.d.cts +2 -2
  66. package/dist/helpers/GasFeePoller.d.cts.map +1 -1
  67. package/dist/helpers/GasFeePoller.d.mts +2 -2
  68. package/dist/helpers/GasFeePoller.d.mts.map +1 -1
  69. package/dist/helpers/GasFeePoller.mjs.map +1 -1
  70. package/dist/helpers/MethodDataHelper.cjs +4 -4
  71. package/dist/helpers/MethodDataHelper.cjs.map +1 -1
  72. package/dist/helpers/MethodDataHelper.d.cts +2 -2
  73. package/dist/helpers/MethodDataHelper.d.cts.map +1 -1
  74. package/dist/helpers/MethodDataHelper.d.mts +2 -2
  75. package/dist/helpers/MethodDataHelper.d.mts.map +1 -1
  76. package/dist/helpers/MethodDataHelper.mjs.map +1 -1
  77. package/dist/helpers/MultichainTrackingHelper.cjs +2 -2
  78. package/dist/helpers/MultichainTrackingHelper.cjs.map +1 -1
  79. package/dist/helpers/MultichainTrackingHelper.d.cts.map +1 -1
  80. package/dist/helpers/MultichainTrackingHelper.d.mts.map +1 -1
  81. package/dist/helpers/MultichainTrackingHelper.mjs.map +1 -1
  82. package/dist/helpers/PendingTransactionTracker.cjs +22 -22
  83. package/dist/helpers/PendingTransactionTracker.cjs.map +1 -1
  84. package/dist/helpers/PendingTransactionTracker.d.cts +2 -2
  85. package/dist/helpers/PendingTransactionTracker.d.cts.map +1 -1
  86. package/dist/helpers/PendingTransactionTracker.d.mts +2 -2
  87. package/dist/helpers/PendingTransactionTracker.d.mts.map +1 -1
  88. package/dist/helpers/PendingTransactionTracker.mjs.map +1 -1
  89. package/dist/helpers/ResimulateHelper.cjs +6 -6
  90. package/dist/helpers/ResimulateHelper.cjs.map +1 -1
  91. package/dist/helpers/ResimulateHelper.d.cts.map +1 -1
  92. package/dist/helpers/ResimulateHelper.d.mts.map +1 -1
  93. package/dist/helpers/ResimulateHelper.mjs.map +1 -1
  94. package/dist/helpers/TransactionPoller.cjs +4 -4
  95. package/dist/helpers/TransactionPoller.cjs.map +1 -1
  96. package/dist/helpers/TransactionPoller.d.cts.map +1 -1
  97. package/dist/helpers/TransactionPoller.d.mts.map +1 -1
  98. package/dist/helpers/TransactionPoller.mjs.map +1 -1
  99. package/dist/hooks/CollectPublishHook.cjs +2 -2
  100. package/dist/hooks/CollectPublishHook.cjs.map +1 -1
  101. package/dist/hooks/CollectPublishHook.d.cts.map +1 -1
  102. package/dist/hooks/CollectPublishHook.d.mts.map +1 -1
  103. package/dist/hooks/CollectPublishHook.mjs.map +1 -1
  104. package/dist/hooks/ExtraTransactionsPublishHook.cjs +2 -2
  105. package/dist/hooks/ExtraTransactionsPublishHook.cjs.map +1 -1
  106. package/dist/hooks/ExtraTransactionsPublishHook.d.cts.map +1 -1
  107. package/dist/hooks/ExtraTransactionsPublishHook.d.mts.map +1 -1
  108. package/dist/hooks/ExtraTransactionsPublishHook.mjs.map +1 -1
  109. package/dist/hooks/SequentialPublishBatchHook.cjs +2 -2
  110. package/dist/hooks/SequentialPublishBatchHook.cjs.map +1 -1
  111. package/dist/hooks/SequentialPublishBatchHook.d.cts.map +1 -1
  112. package/dist/hooks/SequentialPublishBatchHook.d.mts.map +1 -1
  113. package/dist/hooks/SequentialPublishBatchHook.mjs.map +1 -1
  114. package/dist/index.cjs +33 -33
  115. package/dist/index.cjs.map +1 -1
  116. package/dist/index.d.cts.map +1 -1
  117. package/dist/index.d.mts.map +1 -1
  118. package/dist/index.mjs.map +1 -1
  119. package/dist/types.cjs.map +1 -1
  120. package/dist/types.d.cts.map +1 -1
  121. package/dist/types.d.mts.map +1 -1
  122. package/dist/types.mjs.map +1 -1
  123. package/dist/utils/balance-changes.cjs +31 -31
  124. package/dist/utils/balance-changes.cjs.map +1 -1
  125. package/dist/utils/balance-changes.d.cts.map +1 -1
  126. package/dist/utils/balance-changes.d.mts.map +1 -1
  127. package/dist/utils/balance-changes.mjs.map +1 -1
  128. package/dist/utils/balance.cjs +2 -2
  129. package/dist/utils/balance.cjs.map +1 -1
  130. package/dist/utils/balance.d.cts.map +1 -1
  131. package/dist/utils/balance.d.mts.map +1 -1
  132. package/dist/utils/balance.mjs.map +1 -1
  133. package/dist/utils/batch.cjs +45 -45
  134. package/dist/utils/batch.cjs.map +1 -1
  135. package/dist/utils/batch.d.cts +1 -1
  136. package/dist/utils/batch.d.cts.map +1 -1
  137. package/dist/utils/batch.d.mts +1 -1
  138. package/dist/utils/batch.d.mts.map +1 -1
  139. package/dist/utils/batch.mjs +1 -1
  140. package/dist/utils/batch.mjs.map +1 -1
  141. package/dist/utils/eip7702.cjs +9 -9
  142. package/dist/utils/eip7702.cjs.map +1 -1
  143. package/dist/utils/eip7702.d.cts.map +1 -1
  144. package/dist/utils/eip7702.d.mts.map +1 -1
  145. package/dist/utils/eip7702.mjs.map +1 -1
  146. package/dist/utils/external-transactions.cjs +2 -2
  147. package/dist/utils/external-transactions.cjs.map +1 -1
  148. package/dist/utils/external-transactions.d.cts.map +1 -1
  149. package/dist/utils/external-transactions.d.mts.map +1 -1
  150. package/dist/utils/external-transactions.mjs.map +1 -1
  151. package/dist/utils/feature-flags.cjs +5 -5
  152. package/dist/utils/feature-flags.cjs.map +1 -1
  153. package/dist/utils/feature-flags.d.cts.map +1 -1
  154. package/dist/utils/feature-flags.d.mts.map +1 -1
  155. package/dist/utils/feature-flags.mjs.map +1 -1
  156. package/dist/utils/first-time-interaction.cjs +14 -14
  157. package/dist/utils/first-time-interaction.cjs.map +1 -1
  158. package/dist/utils/first-time-interaction.d.cts.map +1 -1
  159. package/dist/utils/first-time-interaction.d.mts.map +1 -1
  160. package/dist/utils/first-time-interaction.mjs.map +1 -1
  161. package/dist/utils/gas-fee-tokens.cjs +13 -13
  162. package/dist/utils/gas-fee-tokens.cjs.map +1 -1
  163. package/dist/utils/gas-fee-tokens.d.cts.map +1 -1
  164. package/dist/utils/gas-fee-tokens.d.mts.map +1 -1
  165. package/dist/utils/gas-fee-tokens.mjs.map +1 -1
  166. package/dist/utils/gas-fees.cjs +19 -19
  167. package/dist/utils/gas-fees.cjs.map +1 -1
  168. package/dist/utils/gas-fees.d.cts.map +1 -1
  169. package/dist/utils/gas-fees.d.mts.map +1 -1
  170. package/dist/utils/gas-fees.mjs.map +1 -1
  171. package/dist/utils/gas-flow.cjs +6 -6
  172. package/dist/utils/gas-flow.cjs.map +1 -1
  173. package/dist/utils/gas-flow.d.cts.map +1 -1
  174. package/dist/utils/gas-flow.d.mts.map +1 -1
  175. package/dist/utils/gas-flow.mjs.map +1 -1
  176. package/dist/utils/gas.cjs +27 -27
  177. package/dist/utils/gas.cjs.map +1 -1
  178. package/dist/utils/gas.d.cts.map +1 -1
  179. package/dist/utils/gas.d.mts.map +1 -1
  180. package/dist/utils/gas.mjs.map +1 -1
  181. package/dist/utils/layer1-gas-fee-flow.cjs +2 -2
  182. package/dist/utils/layer1-gas-fee-flow.cjs.map +1 -1
  183. package/dist/utils/layer1-gas-fee-flow.d.cts.map +1 -1
  184. package/dist/utils/layer1-gas-fee-flow.d.mts.map +1 -1
  185. package/dist/utils/layer1-gas-fee-flow.mjs.map +1 -1
  186. package/dist/utils/nonce.cjs +2 -2
  187. package/dist/utils/nonce.cjs.map +1 -1
  188. package/dist/utils/nonce.d.cts.map +1 -1
  189. package/dist/utils/nonce.d.mts.map +1 -1
  190. package/dist/utils/nonce.mjs.map +1 -1
  191. package/dist/utils/prepare.cjs.map +1 -1
  192. package/dist/utils/prepare.d.cts.map +1 -1
  193. package/dist/utils/prepare.d.mts.map +1 -1
  194. package/dist/utils/prepare.mjs.map +1 -1
  195. package/dist/utils/provider.cjs +2 -2
  196. package/dist/utils/provider.cjs.map +1 -1
  197. package/dist/utils/provider.d.cts.map +1 -1
  198. package/dist/utils/provider.d.mts.map +1 -1
  199. package/dist/utils/provider.mjs.map +1 -1
  200. package/dist/utils/retry.cjs.map +1 -1
  201. package/dist/utils/retry.d.cts.map +1 -1
  202. package/dist/utils/retry.d.mts.map +1 -1
  203. package/dist/utils/retry.mjs.map +1 -1
  204. package/dist/utils/revert-reason.cjs +4 -4
  205. package/dist/utils/revert-reason.cjs.map +1 -1
  206. package/dist/utils/revert-reason.d.cts.map +1 -1
  207. package/dist/utils/revert-reason.d.mts.map +1 -1
  208. package/dist/utils/revert-reason.mjs.map +1 -1
  209. package/dist/utils/swaps.cjs +28 -28
  210. package/dist/utils/swaps.cjs.map +1 -1
  211. package/dist/utils/swaps.d.cts.map +1 -1
  212. package/dist/utils/swaps.d.mts.map +1 -1
  213. package/dist/utils/swaps.mjs.map +1 -1
  214. package/dist/utils/transaction-type.cjs +14 -14
  215. package/dist/utils/transaction-type.cjs.map +1 -1
  216. package/dist/utils/transaction-type.d.cts.map +1 -1
  217. package/dist/utils/transaction-type.d.mts.map +1 -1
  218. package/dist/utils/transaction-type.mjs.map +1 -1
  219. package/dist/utils/utils.cjs +8 -8
  220. package/dist/utils/utils.cjs.map +1 -1
  221. package/dist/utils/utils.d.cts.map +1 -1
  222. package/dist/utils/utils.d.mts.map +1 -1
  223. package/dist/utils/utils.mjs.map +1 -1
  224. package/dist/utils/validation.cjs +11 -11
  225. package/dist/utils/validation.cjs.map +1 -1
  226. package/dist/utils/validation.d.cts.map +1 -1
  227. package/dist/utils/validation.d.mts.map +1 -1
  228. package/dist/utils/validation.mjs.map +1 -1
  229. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"layer1-gas-fee-flow.cjs","sourceRoot":"","sources":["../../src/utils/layer1-gas-fee-flow.ts"],"names":[],"mappings":";;;AAAA,2CAAqD;AAGrD,0CAA0C;AAI1C,MAAM,GAAG,GAAG,IAAA,0BAAkB,EAAC,sBAAa,EAAE,sBAAsB,CAAC,CAAC;AAQtE;;;;;;;GAOG;AACI,KAAK,UAAU,6BAA6B,CACjD,OAAkC;IAElC,MAAM,YAAY,GAAG,MAAM,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAE/D,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IAED,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IAEpC,eAAe,CAAC,YAAY,GAAG,YAAY,CAAC;IAE5C,GAAG,CAAC,yBAAyB,EAAE,YAAY,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC;AACnE,CAAC;AAdD,sEAcC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,mBAAmB,CAChC,eAAgC,EAChC,iBAAqC,EACrC,SAAyC;IAEzC,KAAK,MAAM,gBAAgB,IAAI,iBAAiB,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,kBAAkB,CAAC;YACxD,eAAe;YACf,SAAS;SACV,CAAC,CAAC;QAEH,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,gBAAgB,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,0BAA0B,CAAC,EAC/C,iBAAiB,EACjB,SAAS,EACT,eAAe,GACW;IAC1B,MAAM,gBAAgB,GAAG,MAAM,mBAAmB,CAChD,eAAe,EACf,iBAAiB,EACjB,SAAS,CACV,CAAC;IAEF,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,GAAG,CACD,4BAA4B,EAC5B,gBAAgB,CAAC,WAAW,CAAC,IAAI,EACjC,eAAe,CAAC,EAAE,CACnB,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC;YACxD,SAAS;YACT,eAAe;SAChB,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,+BAA+B,EAAE,eAAe,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAChE,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AA/BD,gEA+BC","sourcesContent":["import { createModuleLogger } from '@metamask/utils';\nimport type { Hex } from '@metamask/utils';\n\nimport { projectLogger } from '../logger';\nimport type { TransactionControllerMessenger } from '../TransactionController';\nimport type { Layer1GasFeeFlow, TransactionMeta } from '../types';\n\nconst log = createModuleLogger(projectLogger, 'layer-1-gas-fee-flow');\n\nexport type UpdateLayer1GasFeeRequest = {\n layer1GasFeeFlows: Layer1GasFeeFlow[];\n messenger: TransactionControllerMessenger;\n transactionMeta: TransactionMeta;\n};\n\n/**\n * Updates the given transactionMeta with the layer 1 gas fee.\n *\n * @param request - The request to use when getting the layer 1 gas fee.\n * @param request.transactionMeta - The transaction to get the layer 1 gas fee for.\n * @param request.layer1GasFeeFlows - The layer 1 gas fee flows to search.\n * @param request.messenger - The messenger instance.\n */\nexport async function updateTransactionLayer1GasFee(\n request: UpdateLayer1GasFeeRequest,\n): Promise<void> {\n const layer1GasFee = await getTransactionLayer1GasFee(request);\n\n if (!layer1GasFee) {\n return;\n }\n\n const { transactionMeta } = request;\n\n transactionMeta.layer1GasFee = layer1GasFee;\n\n log('Updated layer 1 gas fee', layer1GasFee, transactionMeta.id);\n}\n\n/**\n * Get the layer 1 gas fee flow for a transaction.\n *\n * @param transactionMeta - The transaction to get the layer 1 gas fee flow for.\n * @param layer1GasFeeFlows - The layer 1 gas fee flows to search.\n * @param messenger - The messenger instance.\n * @returns The layer 1 gas fee flow for the transaction, or undefined if none match.\n */\nasync function getLayer1GasFeeFlow(\n transactionMeta: TransactionMeta,\n layer1GasFeeFlows: Layer1GasFeeFlow[],\n messenger: TransactionControllerMessenger,\n): Promise<Layer1GasFeeFlow | undefined> {\n for (const layer1GasFeeFlow of layer1GasFeeFlows) {\n const matches = await layer1GasFeeFlow.matchesTransaction({\n transactionMeta,\n messenger,\n });\n\n if (matches) {\n return layer1GasFeeFlow;\n }\n }\n\n return undefined;\n}\n\n/**\n * Get the layer 1 gas fee for a transaction.\n *\n * @param request - The request to use when getting the layer 1 gas fee.\n * @param request.layer1GasFeeFlows - The layer 1 gas fee flows to search.\n * @param request.transactionMeta - The transaction to get the layer 1 gas fee for.\n * @param request.messenger - The messenger instance.\n * @returns The layer 1 gas fee.\n */\nexport async function getTransactionLayer1GasFee({\n layer1GasFeeFlows,\n messenger,\n transactionMeta,\n}: UpdateLayer1GasFeeRequest): Promise<Hex | undefined> {\n const layer1GasFeeFlow = await getLayer1GasFeeFlow(\n transactionMeta,\n layer1GasFeeFlows,\n messenger,\n );\n\n if (!layer1GasFeeFlow) {\n return undefined;\n }\n\n log(\n 'Found layer 1 gas fee flow',\n layer1GasFeeFlow.constructor.name,\n transactionMeta.id,\n );\n\n try {\n const { layer1Fee } = await layer1GasFeeFlow.getLayer1Fee({\n messenger,\n transactionMeta,\n });\n return layer1Fee;\n } catch (error) {\n log('Failed to get layer 1 gas fee', transactionMeta.id, error);\n return undefined;\n }\n}\n"]}
1
+ {"version":3,"file":"layer1-gas-fee-flow.cjs","sourceRoot":"","sources":["../../src/utils/layer1-gas-fee-flow.ts"],"names":[],"mappings":";;;AAAA,2CAAqD;AAGrD,6CAA6C;AAI7C,MAAM,GAAG,GAAG,IAAA,0BAAkB,EAAC,yBAAa,EAAE,sBAAsB,CAAC,CAAC;AAQtE;;;;;;;GAOG;AACI,KAAK,UAAU,6BAA6B,CACjD,OAAkC;IAElC,MAAM,YAAY,GAAG,MAAM,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAE/D,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IAED,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IAEpC,eAAe,CAAC,YAAY,GAAG,YAAY,CAAC;IAE5C,GAAG,CAAC,yBAAyB,EAAE,YAAY,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC;AACnE,CAAC;AAdD,sEAcC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,mBAAmB,CAChC,eAAgC,EAChC,iBAAqC,EACrC,SAAyC;IAEzC,KAAK,MAAM,gBAAgB,IAAI,iBAAiB,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,kBAAkB,CAAC;YACxD,eAAe;YACf,SAAS;SACV,CAAC,CAAC;QAEH,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,gBAAgB,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,0BAA0B,CAAC,EAC/C,iBAAiB,EACjB,SAAS,EACT,eAAe,GACW;IAC1B,MAAM,gBAAgB,GAAG,MAAM,mBAAmB,CAChD,eAAe,EACf,iBAAiB,EACjB,SAAS,CACV,CAAC;IAEF,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,GAAG,CACD,4BAA4B,EAC5B,gBAAgB,CAAC,WAAW,CAAC,IAAI,EACjC,eAAe,CAAC,EAAE,CACnB,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC;YACxD,SAAS;YACT,eAAe;SAChB,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,+BAA+B,EAAE,eAAe,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAChE,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AA/BD,gEA+BC","sourcesContent":["import { createModuleLogger } from '@metamask/utils';\nimport type { Hex } from '@metamask/utils';\n\nimport { projectLogger } from '../logger.js';\nimport type { TransactionControllerMessenger } from '../TransactionController.js';\nimport type { Layer1GasFeeFlow, TransactionMeta } from '../types.js';\n\nconst log = createModuleLogger(projectLogger, 'layer-1-gas-fee-flow');\n\nexport type UpdateLayer1GasFeeRequest = {\n layer1GasFeeFlows: Layer1GasFeeFlow[];\n messenger: TransactionControllerMessenger;\n transactionMeta: TransactionMeta;\n};\n\n/**\n * Updates the given transactionMeta with the layer 1 gas fee.\n *\n * @param request - The request to use when getting the layer 1 gas fee.\n * @param request.transactionMeta - The transaction to get the layer 1 gas fee for.\n * @param request.layer1GasFeeFlows - The layer 1 gas fee flows to search.\n * @param request.messenger - The messenger instance.\n */\nexport async function updateTransactionLayer1GasFee(\n request: UpdateLayer1GasFeeRequest,\n): Promise<void> {\n const layer1GasFee = await getTransactionLayer1GasFee(request);\n\n if (!layer1GasFee) {\n return;\n }\n\n const { transactionMeta } = request;\n\n transactionMeta.layer1GasFee = layer1GasFee;\n\n log('Updated layer 1 gas fee', layer1GasFee, transactionMeta.id);\n}\n\n/**\n * Get the layer 1 gas fee flow for a transaction.\n *\n * @param transactionMeta - The transaction to get the layer 1 gas fee flow for.\n * @param layer1GasFeeFlows - The layer 1 gas fee flows to search.\n * @param messenger - The messenger instance.\n * @returns The layer 1 gas fee flow for the transaction, or undefined if none match.\n */\nasync function getLayer1GasFeeFlow(\n transactionMeta: TransactionMeta,\n layer1GasFeeFlows: Layer1GasFeeFlow[],\n messenger: TransactionControllerMessenger,\n): Promise<Layer1GasFeeFlow | undefined> {\n for (const layer1GasFeeFlow of layer1GasFeeFlows) {\n const matches = await layer1GasFeeFlow.matchesTransaction({\n transactionMeta,\n messenger,\n });\n\n if (matches) {\n return layer1GasFeeFlow;\n }\n }\n\n return undefined;\n}\n\n/**\n * Get the layer 1 gas fee for a transaction.\n *\n * @param request - The request to use when getting the layer 1 gas fee.\n * @param request.layer1GasFeeFlows - The layer 1 gas fee flows to search.\n * @param request.transactionMeta - The transaction to get the layer 1 gas fee for.\n * @param request.messenger - The messenger instance.\n * @returns The layer 1 gas fee.\n */\nexport async function getTransactionLayer1GasFee({\n layer1GasFeeFlows,\n messenger,\n transactionMeta,\n}: UpdateLayer1GasFeeRequest): Promise<Hex | undefined> {\n const layer1GasFeeFlow = await getLayer1GasFeeFlow(\n transactionMeta,\n layer1GasFeeFlows,\n messenger,\n );\n\n if (!layer1GasFeeFlow) {\n return undefined;\n }\n\n log(\n 'Found layer 1 gas fee flow',\n layer1GasFeeFlow.constructor.name,\n transactionMeta.id,\n );\n\n try {\n const { layer1Fee } = await layer1GasFeeFlow.getLayer1Fee({\n messenger,\n transactionMeta,\n });\n return layer1Fee;\n } catch (error) {\n log('Failed to get layer 1 gas fee', transactionMeta.id, error);\n return undefined;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"layer1-gas-fee-flow.d.cts","sourceRoot":"","sources":["../../src/utils/layer1-gas-fee-flow.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAiC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,qBAAiB;AAIlE,MAAM,MAAM,yBAAyB,GAAG;IACtC,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,SAAS,EAAE,8BAA8B,CAAC;IAC1C,eAAe,EAAE,eAAe,CAAC;CAClC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,IAAI,CAAC,CAYf;AA6BD;;;;;;;;GAQG;AACH,wBAAsB,0BAA0B,CAAC,EAC/C,iBAAiB,EACjB,SAAS,EACT,eAAe,GAChB,EAAE,yBAAyB,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC,CA2BtD"}
1
+ {"version":3,"file":"layer1-gas-fee-flow.d.cts","sourceRoot":"","sources":["../../src/utils/layer1-gas-fee-flow.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAoC;AAClF,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,qBAAoB;AAIrE,MAAM,MAAM,yBAAyB,GAAG;IACtC,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,SAAS,EAAE,8BAA8B,CAAC;IAC1C,eAAe,EAAE,eAAe,CAAC;CAClC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,IAAI,CAAC,CAYf;AA6BD;;;;;;;;GAQG;AACH,wBAAsB,0BAA0B,CAAC,EAC/C,iBAAiB,EACjB,SAAS,EACT,eAAe,GAChB,EAAE,yBAAyB,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC,CA2BtD"}
@@ -1 +1 @@
1
- {"version":3,"file":"layer1-gas-fee-flow.d.mts","sourceRoot":"","sources":["../../src/utils/layer1-gas-fee-flow.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAiC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,qBAAiB;AAIlE,MAAM,MAAM,yBAAyB,GAAG;IACtC,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,SAAS,EAAE,8BAA8B,CAAC;IAC1C,eAAe,EAAE,eAAe,CAAC;CAClC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,IAAI,CAAC,CAYf;AA6BD;;;;;;;;GAQG;AACH,wBAAsB,0BAA0B,CAAC,EAC/C,iBAAiB,EACjB,SAAS,EACT,eAAe,GAChB,EAAE,yBAAyB,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC,CA2BtD"}
1
+ {"version":3,"file":"layer1-gas-fee-flow.d.mts","sourceRoot":"","sources":["../../src/utils/layer1-gas-fee-flow.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAoC;AAClF,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,qBAAoB;AAIrE,MAAM,MAAM,yBAAyB,GAAG;IACtC,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,SAAS,EAAE,8BAA8B,CAAC;IAC1C,eAAe,EAAE,eAAe,CAAC;CAClC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,IAAI,CAAC,CAYf;AA6BD;;;;;;;;GAQG;AACH,wBAAsB,0BAA0B,CAAC,EAC/C,iBAAiB,EACjB,SAAS,EACT,eAAe,GAChB,EAAE,yBAAyB,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC,CA2BtD"}
@@ -1 +1 @@
1
- {"version":3,"file":"layer1-gas-fee-flow.mjs","sourceRoot":"","sources":["../../src/utils/layer1-gas-fee-flow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,wBAAwB;AAGrD,OAAO,EAAE,aAAa,EAAE,sBAAkB;AAI1C,MAAM,GAAG,GAAG,kBAAkB,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC;AAQtE;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,OAAkC;IAElC,MAAM,YAAY,GAAG,MAAM,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAE/D,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IAED,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IAEpC,eAAe,CAAC,YAAY,GAAG,YAAY,CAAC;IAE5C,GAAG,CAAC,yBAAyB,EAAE,YAAY,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC;AACnE,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,mBAAmB,CAChC,eAAgC,EAChC,iBAAqC,EACrC,SAAyC;IAEzC,KAAK,MAAM,gBAAgB,IAAI,iBAAiB,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,kBAAkB,CAAC;YACxD,eAAe;YACf,SAAS;SACV,CAAC,CAAC;QAEH,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,gBAAgB,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,EAC/C,iBAAiB,EACjB,SAAS,EACT,eAAe,GACW;IAC1B,MAAM,gBAAgB,GAAG,MAAM,mBAAmB,CAChD,eAAe,EACf,iBAAiB,EACjB,SAAS,CACV,CAAC;IAEF,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,GAAG,CACD,4BAA4B,EAC5B,gBAAgB,CAAC,WAAW,CAAC,IAAI,EACjC,eAAe,CAAC,EAAE,CACnB,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC;YACxD,SAAS;YACT,eAAe;SAChB,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,+BAA+B,EAAE,eAAe,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAChE,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC","sourcesContent":["import { createModuleLogger } from '@metamask/utils';\nimport type { Hex } from '@metamask/utils';\n\nimport { projectLogger } from '../logger';\nimport type { TransactionControllerMessenger } from '../TransactionController';\nimport type { Layer1GasFeeFlow, TransactionMeta } from '../types';\n\nconst log = createModuleLogger(projectLogger, 'layer-1-gas-fee-flow');\n\nexport type UpdateLayer1GasFeeRequest = {\n layer1GasFeeFlows: Layer1GasFeeFlow[];\n messenger: TransactionControllerMessenger;\n transactionMeta: TransactionMeta;\n};\n\n/**\n * Updates the given transactionMeta with the layer 1 gas fee.\n *\n * @param request - The request to use when getting the layer 1 gas fee.\n * @param request.transactionMeta - The transaction to get the layer 1 gas fee for.\n * @param request.layer1GasFeeFlows - The layer 1 gas fee flows to search.\n * @param request.messenger - The messenger instance.\n */\nexport async function updateTransactionLayer1GasFee(\n request: UpdateLayer1GasFeeRequest,\n): Promise<void> {\n const layer1GasFee = await getTransactionLayer1GasFee(request);\n\n if (!layer1GasFee) {\n return;\n }\n\n const { transactionMeta } = request;\n\n transactionMeta.layer1GasFee = layer1GasFee;\n\n log('Updated layer 1 gas fee', layer1GasFee, transactionMeta.id);\n}\n\n/**\n * Get the layer 1 gas fee flow for a transaction.\n *\n * @param transactionMeta - The transaction to get the layer 1 gas fee flow for.\n * @param layer1GasFeeFlows - The layer 1 gas fee flows to search.\n * @param messenger - The messenger instance.\n * @returns The layer 1 gas fee flow for the transaction, or undefined if none match.\n */\nasync function getLayer1GasFeeFlow(\n transactionMeta: TransactionMeta,\n layer1GasFeeFlows: Layer1GasFeeFlow[],\n messenger: TransactionControllerMessenger,\n): Promise<Layer1GasFeeFlow | undefined> {\n for (const layer1GasFeeFlow of layer1GasFeeFlows) {\n const matches = await layer1GasFeeFlow.matchesTransaction({\n transactionMeta,\n messenger,\n });\n\n if (matches) {\n return layer1GasFeeFlow;\n }\n }\n\n return undefined;\n}\n\n/**\n * Get the layer 1 gas fee for a transaction.\n *\n * @param request - The request to use when getting the layer 1 gas fee.\n * @param request.layer1GasFeeFlows - The layer 1 gas fee flows to search.\n * @param request.transactionMeta - The transaction to get the layer 1 gas fee for.\n * @param request.messenger - The messenger instance.\n * @returns The layer 1 gas fee.\n */\nexport async function getTransactionLayer1GasFee({\n layer1GasFeeFlows,\n messenger,\n transactionMeta,\n}: UpdateLayer1GasFeeRequest): Promise<Hex | undefined> {\n const layer1GasFeeFlow = await getLayer1GasFeeFlow(\n transactionMeta,\n layer1GasFeeFlows,\n messenger,\n );\n\n if (!layer1GasFeeFlow) {\n return undefined;\n }\n\n log(\n 'Found layer 1 gas fee flow',\n layer1GasFeeFlow.constructor.name,\n transactionMeta.id,\n );\n\n try {\n const { layer1Fee } = await layer1GasFeeFlow.getLayer1Fee({\n messenger,\n transactionMeta,\n });\n return layer1Fee;\n } catch (error) {\n log('Failed to get layer 1 gas fee', transactionMeta.id, error);\n return undefined;\n }\n}\n"]}
1
+ {"version":3,"file":"layer1-gas-fee-flow.mjs","sourceRoot":"","sources":["../../src/utils/layer1-gas-fee-flow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,wBAAwB;AAGrD,OAAO,EAAE,aAAa,EAAE,sBAAqB;AAI7C,MAAM,GAAG,GAAG,kBAAkB,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC;AAQtE;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,OAAkC;IAElC,MAAM,YAAY,GAAG,MAAM,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAE/D,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IAED,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IAEpC,eAAe,CAAC,YAAY,GAAG,YAAY,CAAC;IAE5C,GAAG,CAAC,yBAAyB,EAAE,YAAY,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC;AACnE,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,mBAAmB,CAChC,eAAgC,EAChC,iBAAqC,EACrC,SAAyC;IAEzC,KAAK,MAAM,gBAAgB,IAAI,iBAAiB,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,kBAAkB,CAAC;YACxD,eAAe;YACf,SAAS;SACV,CAAC,CAAC;QAEH,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,gBAAgB,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,EAC/C,iBAAiB,EACjB,SAAS,EACT,eAAe,GACW;IAC1B,MAAM,gBAAgB,GAAG,MAAM,mBAAmB,CAChD,eAAe,EACf,iBAAiB,EACjB,SAAS,CACV,CAAC;IAEF,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,GAAG,CACD,4BAA4B,EAC5B,gBAAgB,CAAC,WAAW,CAAC,IAAI,EACjC,eAAe,CAAC,EAAE,CACnB,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC;YACxD,SAAS;YACT,eAAe;SAChB,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,+BAA+B,EAAE,eAAe,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAChE,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC","sourcesContent":["import { createModuleLogger } from '@metamask/utils';\nimport type { Hex } from '@metamask/utils';\n\nimport { projectLogger } from '../logger.js';\nimport type { TransactionControllerMessenger } from '../TransactionController.js';\nimport type { Layer1GasFeeFlow, TransactionMeta } from '../types.js';\n\nconst log = createModuleLogger(projectLogger, 'layer-1-gas-fee-flow');\n\nexport type UpdateLayer1GasFeeRequest = {\n layer1GasFeeFlows: Layer1GasFeeFlow[];\n messenger: TransactionControllerMessenger;\n transactionMeta: TransactionMeta;\n};\n\n/**\n * Updates the given transactionMeta with the layer 1 gas fee.\n *\n * @param request - The request to use when getting the layer 1 gas fee.\n * @param request.transactionMeta - The transaction to get the layer 1 gas fee for.\n * @param request.layer1GasFeeFlows - The layer 1 gas fee flows to search.\n * @param request.messenger - The messenger instance.\n */\nexport async function updateTransactionLayer1GasFee(\n request: UpdateLayer1GasFeeRequest,\n): Promise<void> {\n const layer1GasFee = await getTransactionLayer1GasFee(request);\n\n if (!layer1GasFee) {\n return;\n }\n\n const { transactionMeta } = request;\n\n transactionMeta.layer1GasFee = layer1GasFee;\n\n log('Updated layer 1 gas fee', layer1GasFee, transactionMeta.id);\n}\n\n/**\n * Get the layer 1 gas fee flow for a transaction.\n *\n * @param transactionMeta - The transaction to get the layer 1 gas fee flow for.\n * @param layer1GasFeeFlows - The layer 1 gas fee flows to search.\n * @param messenger - The messenger instance.\n * @returns The layer 1 gas fee flow for the transaction, or undefined if none match.\n */\nasync function getLayer1GasFeeFlow(\n transactionMeta: TransactionMeta,\n layer1GasFeeFlows: Layer1GasFeeFlow[],\n messenger: TransactionControllerMessenger,\n): Promise<Layer1GasFeeFlow | undefined> {\n for (const layer1GasFeeFlow of layer1GasFeeFlows) {\n const matches = await layer1GasFeeFlow.matchesTransaction({\n transactionMeta,\n messenger,\n });\n\n if (matches) {\n return layer1GasFeeFlow;\n }\n }\n\n return undefined;\n}\n\n/**\n * Get the layer 1 gas fee for a transaction.\n *\n * @param request - The request to use when getting the layer 1 gas fee.\n * @param request.layer1GasFeeFlows - The layer 1 gas fee flows to search.\n * @param request.transactionMeta - The transaction to get the layer 1 gas fee for.\n * @param request.messenger - The messenger instance.\n * @returns The layer 1 gas fee.\n */\nexport async function getTransactionLayer1GasFee({\n layer1GasFeeFlows,\n messenger,\n transactionMeta,\n}: UpdateLayer1GasFeeRequest): Promise<Hex | undefined> {\n const layer1GasFeeFlow = await getLayer1GasFeeFlow(\n transactionMeta,\n layer1GasFeeFlows,\n messenger,\n );\n\n if (!layer1GasFeeFlow) {\n return undefined;\n }\n\n log(\n 'Found layer 1 gas fee flow',\n layer1GasFeeFlow.constructor.name,\n transactionMeta.id,\n );\n\n try {\n const { layer1Fee } = await layer1GasFeeFlow.getLayer1Fee({\n messenger,\n transactionMeta,\n });\n return layer1Fee;\n } catch (error) {\n log('Failed to get layer 1 gas fee', transactionMeta.id, error);\n return undefined;\n }\n}\n"]}
@@ -2,8 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getAndFormatTransactionsForNonceTracker = exports.getNextNonce = void 0;
4
4
  const controller_utils_1 = require("@metamask/controller-utils");
5
- const logger_1 = require("../logger.cjs");
6
- const log = (0, logger_1.createModuleLogger)(logger_1.projectLogger, 'nonce');
5
+ const logger_js_1 = require("../logger.cjs");
6
+ const log = (0, logger_js_1.createModuleLogger)(logger_js_1.projectLogger, 'nonce');
7
7
  /**
8
8
  * Determine the next nonce to be used for a transaction.
9
9
  *
@@ -1 +1 @@
1
- {"version":3,"file":"nonce.cjs","sourceRoot":"","sources":["../../src/utils/nonce.ts"],"names":[],"mappings":"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","sourcesContent":["import { toHex } from '@metamask/controller-utils';\nimport type {\n NonceLock,\n Transaction as NonceTrackerTransaction,\n} from '@metamask/nonce-tracker';\n\nimport { createModuleLogger, projectLogger } from '../logger';\nimport type { TransactionMeta, TransactionStatus } from '../types';\n\nconst log = createModuleLogger(projectLogger, 'nonce');\n\n/**\n * Determine the next nonce to be used for a transaction.\n *\n * @param txMeta - The transaction metadata.\n * @param getNonceLock - An anonymous function that acquires the nonce lock for an address\n * @returns The next hexadecimal nonce to be used for the given transaction, and optionally a function to release the nonce lock.\n */\nexport async function getNextNonce(\n txMeta: TransactionMeta,\n getNonceLock: (address: string) => Promise<NonceLock>,\n): Promise<[string | undefined, (() => void) | undefined]> {\n const {\n customNonceValue,\n isExternalSign,\n txParams: { from, nonce: existingNonce },\n } = txMeta;\n\n if (isExternalSign) {\n log('Skipping nonce as signed externally');\n return [undefined, undefined];\n }\n\n const customNonce = customNonceValue ? toHex(customNonceValue) : undefined;\n\n if (customNonce) {\n log('Using custom nonce', customNonce);\n return [customNonce, undefined];\n }\n\n if (existingNonce) {\n log('Using existing nonce', existingNonce);\n return [existingNonce, undefined];\n }\n\n const nonceLock = await getNonceLock(from);\n const nonce = toHex(nonceLock.nextNonce);\n const releaseLock = nonceLock.releaseLock.bind(nonceLock);\n\n log('Using nonce from nonce tracker', nonce, nonceLock.nonceDetails);\n\n return [nonce, releaseLock];\n}\n\n/**\n * Filter and format transactions for the nonce tracker.\n *\n * @param currentChainId - Chain ID of the current network.\n * @param fromAddress - Address of the account from which the transactions to filter from are sent.\n * @param transactionStatuses - Status of the transactions for which to filter.\n * @param transactions - Array of transactionMeta objects that have been prefiltered.\n * @returns Array of transactions formatted for the nonce tracker.\n */\nexport function getAndFormatTransactionsForNonceTracker(\n currentChainId: string,\n fromAddress: string,\n transactionStatuses: TransactionStatus[],\n transactions: TransactionMeta[],\n): NonceTrackerTransaction[] {\n return transactions\n .filter(\n ({\n chainId,\n isTransfer,\n isUserOperation,\n status,\n txParams: { from, nonce },\n }) =>\n !isTransfer &&\n !isUserOperation &&\n chainId === currentChainId &&\n transactionStatuses.includes(status) &&\n from.toLowerCase() === fromAddress.toLowerCase() &&\n nonce,\n )\n .flatMap(\n ({\n status,\n txParams: { authorizationList, from, gas, value, nonce },\n }) => {\n const authorizationNonces = (authorizationList ?? [])\n .map((authorization) => authorization.nonce)\n .filter((authorizationNonce) => authorizationNonce !== undefined);\n\n // the only value we care about is the nonce\n // but we need to return the other values to satisfy the type\n // TODO: refactor nonceTracker to not require this\n /* istanbul ignore next */\n return [nonce, ...authorizationNonces].map((currentNonce) => ({\n status,\n history: [{}],\n txParams: {\n from: from ?? '',\n gas: gas ?? '',\n value: value ?? '',\n nonce: currentNonce ?? '',\n },\n }));\n },\n );\n}\n"]}
1
+ {"version":3,"file":"nonce.cjs","sourceRoot":"","sources":["../../src/utils/nonce.ts"],"names":[],"mappings":"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","sourcesContent":["import { toHex } from '@metamask/controller-utils';\nimport type {\n NonceLock,\n Transaction as NonceTrackerTransaction,\n} from '@metamask/nonce-tracker';\n\nimport { createModuleLogger, projectLogger } from '../logger.js';\nimport type { TransactionMeta, TransactionStatus } from '../types.js';\n\nconst log = createModuleLogger(projectLogger, 'nonce');\n\n/**\n * Determine the next nonce to be used for a transaction.\n *\n * @param txMeta - The transaction metadata.\n * @param getNonceLock - An anonymous function that acquires the nonce lock for an address\n * @returns The next hexadecimal nonce to be used for the given transaction, and optionally a function to release the nonce lock.\n */\nexport async function getNextNonce(\n txMeta: TransactionMeta,\n getNonceLock: (address: string) => Promise<NonceLock>,\n): Promise<[string | undefined, (() => void) | undefined]> {\n const {\n customNonceValue,\n isExternalSign,\n txParams: { from, nonce: existingNonce },\n } = txMeta;\n\n if (isExternalSign) {\n log('Skipping nonce as signed externally');\n return [undefined, undefined];\n }\n\n const customNonce = customNonceValue ? toHex(customNonceValue) : undefined;\n\n if (customNonce) {\n log('Using custom nonce', customNonce);\n return [customNonce, undefined];\n }\n\n if (existingNonce) {\n log('Using existing nonce', existingNonce);\n return [existingNonce, undefined];\n }\n\n const nonceLock = await getNonceLock(from);\n const nonce = toHex(nonceLock.nextNonce);\n const releaseLock = nonceLock.releaseLock.bind(nonceLock);\n\n log('Using nonce from nonce tracker', nonce, nonceLock.nonceDetails);\n\n return [nonce, releaseLock];\n}\n\n/**\n * Filter and format transactions for the nonce tracker.\n *\n * @param currentChainId - Chain ID of the current network.\n * @param fromAddress - Address of the account from which the transactions to filter from are sent.\n * @param transactionStatuses - Status of the transactions for which to filter.\n * @param transactions - Array of transactionMeta objects that have been prefiltered.\n * @returns Array of transactions formatted for the nonce tracker.\n */\nexport function getAndFormatTransactionsForNonceTracker(\n currentChainId: string,\n fromAddress: string,\n transactionStatuses: TransactionStatus[],\n transactions: TransactionMeta[],\n): NonceTrackerTransaction[] {\n return transactions\n .filter(\n ({\n chainId,\n isTransfer,\n isUserOperation,\n status,\n txParams: { from, nonce },\n }) =>\n !isTransfer &&\n !isUserOperation &&\n chainId === currentChainId &&\n transactionStatuses.includes(status) &&\n from.toLowerCase() === fromAddress.toLowerCase() &&\n nonce,\n )\n .flatMap(\n ({\n status,\n txParams: { authorizationList, from, gas, value, nonce },\n }) => {\n const authorizationNonces = (authorizationList ?? [])\n .map((authorization) => authorization.nonce)\n .filter((authorizationNonce) => authorizationNonce !== undefined);\n\n // the only value we care about is the nonce\n // but we need to return the other values to satisfy the type\n // TODO: refactor nonceTracker to not require this\n /* istanbul ignore next */\n return [nonce, ...authorizationNonces].map((currentNonce) => ({\n status,\n history: [{}],\n txParams: {\n from: from ?? '',\n gas: gas ?? '',\n value: value ?? '',\n nonce: currentNonce ?? '',\n },\n }));\n },\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"nonce.d.cts","sourceRoot":"","sources":["../../src/utils/nonce.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,SAAS,EACT,WAAW,IAAI,uBAAuB,EACvC,gCAAgC;AAGjC,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,qBAAiB;AAInE;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,eAAe,EACvB,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,GACpD,OAAO,CAAC,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CA+BzD;AAED;;;;;;;;GAQG;AACH,wBAAgB,uCAAuC,CACrD,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,mBAAmB,EAAE,iBAAiB,EAAE,EACxC,YAAY,EAAE,eAAe,EAAE,GAC9B,uBAAuB,EAAE,CA0C3B"}
1
+ {"version":3,"file":"nonce.d.cts","sourceRoot":"","sources":["../../src/utils/nonce.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,SAAS,EACT,WAAW,IAAI,uBAAuB,EACvC,gCAAgC;AAGjC,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,qBAAoB;AAItE;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,eAAe,EACvB,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,GACpD,OAAO,CAAC,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CA+BzD;AAED;;;;;;;;GAQG;AACH,wBAAgB,uCAAuC,CACrD,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,mBAAmB,EAAE,iBAAiB,EAAE,EACxC,YAAY,EAAE,eAAe,EAAE,GAC9B,uBAAuB,EAAE,CA0C3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"nonce.d.mts","sourceRoot":"","sources":["../../src/utils/nonce.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,SAAS,EACT,WAAW,IAAI,uBAAuB,EACvC,gCAAgC;AAGjC,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,qBAAiB;AAInE;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,eAAe,EACvB,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,GACpD,OAAO,CAAC,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CA+BzD;AAED;;;;;;;;GAQG;AACH,wBAAgB,uCAAuC,CACrD,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,mBAAmB,EAAE,iBAAiB,EAAE,EACxC,YAAY,EAAE,eAAe,EAAE,GAC9B,uBAAuB,EAAE,CA0C3B"}
1
+ {"version":3,"file":"nonce.d.mts","sourceRoot":"","sources":["../../src/utils/nonce.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,SAAS,EACT,WAAW,IAAI,uBAAuB,EACvC,gCAAgC;AAGjC,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,qBAAoB;AAItE;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,eAAe,EACvB,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,GACpD,OAAO,CAAC,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CA+BzD;AAED;;;;;;;;GAQG;AACH,wBAAgB,uCAAuC,CACrD,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,mBAAmB,EAAE,iBAAiB,EAAE,EACxC,YAAY,EAAE,eAAe,EAAE,GAC9B,uBAAuB,EAAE,CA0C3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"nonce.mjs","sourceRoot":"","sources":["../../src/utils/nonce.ts"],"names":[],"mappings":"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","sourcesContent":["import { toHex } from '@metamask/controller-utils';\nimport type {\n NonceLock,\n Transaction as NonceTrackerTransaction,\n} from '@metamask/nonce-tracker';\n\nimport { createModuleLogger, projectLogger } from '../logger';\nimport type { TransactionMeta, TransactionStatus } from '../types';\n\nconst log = createModuleLogger(projectLogger, 'nonce');\n\n/**\n * Determine the next nonce to be used for a transaction.\n *\n * @param txMeta - The transaction metadata.\n * @param getNonceLock - An anonymous function that acquires the nonce lock for an address\n * @returns The next hexadecimal nonce to be used for the given transaction, and optionally a function to release the nonce lock.\n */\nexport async function getNextNonce(\n txMeta: TransactionMeta,\n getNonceLock: (address: string) => Promise<NonceLock>,\n): Promise<[string | undefined, (() => void) | undefined]> {\n const {\n customNonceValue,\n isExternalSign,\n txParams: { from, nonce: existingNonce },\n } = txMeta;\n\n if (isExternalSign) {\n log('Skipping nonce as signed externally');\n return [undefined, undefined];\n }\n\n const customNonce = customNonceValue ? toHex(customNonceValue) : undefined;\n\n if (customNonce) {\n log('Using custom nonce', customNonce);\n return [customNonce, undefined];\n }\n\n if (existingNonce) {\n log('Using existing nonce', existingNonce);\n return [existingNonce, undefined];\n }\n\n const nonceLock = await getNonceLock(from);\n const nonce = toHex(nonceLock.nextNonce);\n const releaseLock = nonceLock.releaseLock.bind(nonceLock);\n\n log('Using nonce from nonce tracker', nonce, nonceLock.nonceDetails);\n\n return [nonce, releaseLock];\n}\n\n/**\n * Filter and format transactions for the nonce tracker.\n *\n * @param currentChainId - Chain ID of the current network.\n * @param fromAddress - Address of the account from which the transactions to filter from are sent.\n * @param transactionStatuses - Status of the transactions for which to filter.\n * @param transactions - Array of transactionMeta objects that have been prefiltered.\n * @returns Array of transactions formatted for the nonce tracker.\n */\nexport function getAndFormatTransactionsForNonceTracker(\n currentChainId: string,\n fromAddress: string,\n transactionStatuses: TransactionStatus[],\n transactions: TransactionMeta[],\n): NonceTrackerTransaction[] {\n return transactions\n .filter(\n ({\n chainId,\n isTransfer,\n isUserOperation,\n status,\n txParams: { from, nonce },\n }) =>\n !isTransfer &&\n !isUserOperation &&\n chainId === currentChainId &&\n transactionStatuses.includes(status) &&\n from.toLowerCase() === fromAddress.toLowerCase() &&\n nonce,\n )\n .flatMap(\n ({\n status,\n txParams: { authorizationList, from, gas, value, nonce },\n }) => {\n const authorizationNonces = (authorizationList ?? [])\n .map((authorization) => authorization.nonce)\n .filter((authorizationNonce) => authorizationNonce !== undefined);\n\n // the only value we care about is the nonce\n // but we need to return the other values to satisfy the type\n // TODO: refactor nonceTracker to not require this\n /* istanbul ignore next */\n return [nonce, ...authorizationNonces].map((currentNonce) => ({\n status,\n history: [{}],\n txParams: {\n from: from ?? '',\n gas: gas ?? '',\n value: value ?? '',\n nonce: currentNonce ?? '',\n },\n }));\n },\n );\n}\n"]}
1
+ {"version":3,"file":"nonce.mjs","sourceRoot":"","sources":["../../src/utils/nonce.ts"],"names":[],"mappings":"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","sourcesContent":["import { toHex } from '@metamask/controller-utils';\nimport type {\n NonceLock,\n Transaction as NonceTrackerTransaction,\n} from '@metamask/nonce-tracker';\n\nimport { createModuleLogger, projectLogger } from '../logger.js';\nimport type { TransactionMeta, TransactionStatus } from '../types.js';\n\nconst log = createModuleLogger(projectLogger, 'nonce');\n\n/**\n * Determine the next nonce to be used for a transaction.\n *\n * @param txMeta - The transaction metadata.\n * @param getNonceLock - An anonymous function that acquires the nonce lock for an address\n * @returns The next hexadecimal nonce to be used for the given transaction, and optionally a function to release the nonce lock.\n */\nexport async function getNextNonce(\n txMeta: TransactionMeta,\n getNonceLock: (address: string) => Promise<NonceLock>,\n): Promise<[string | undefined, (() => void) | undefined]> {\n const {\n customNonceValue,\n isExternalSign,\n txParams: { from, nonce: existingNonce },\n } = txMeta;\n\n if (isExternalSign) {\n log('Skipping nonce as signed externally');\n return [undefined, undefined];\n }\n\n const customNonce = customNonceValue ? toHex(customNonceValue) : undefined;\n\n if (customNonce) {\n log('Using custom nonce', customNonce);\n return [customNonce, undefined];\n }\n\n if (existingNonce) {\n log('Using existing nonce', existingNonce);\n return [existingNonce, undefined];\n }\n\n const nonceLock = await getNonceLock(from);\n const nonce = toHex(nonceLock.nextNonce);\n const releaseLock = nonceLock.releaseLock.bind(nonceLock);\n\n log('Using nonce from nonce tracker', nonce, nonceLock.nonceDetails);\n\n return [nonce, releaseLock];\n}\n\n/**\n * Filter and format transactions for the nonce tracker.\n *\n * @param currentChainId - Chain ID of the current network.\n * @param fromAddress - Address of the account from which the transactions to filter from are sent.\n * @param transactionStatuses - Status of the transactions for which to filter.\n * @param transactions - Array of transactionMeta objects that have been prefiltered.\n * @returns Array of transactions formatted for the nonce tracker.\n */\nexport function getAndFormatTransactionsForNonceTracker(\n currentChainId: string,\n fromAddress: string,\n transactionStatuses: TransactionStatus[],\n transactions: TransactionMeta[],\n): NonceTrackerTransaction[] {\n return transactions\n .filter(\n ({\n chainId,\n isTransfer,\n isUserOperation,\n status,\n txParams: { from, nonce },\n }) =>\n !isTransfer &&\n !isUserOperation &&\n chainId === currentChainId &&\n transactionStatuses.includes(status) &&\n from.toLowerCase() === fromAddress.toLowerCase() &&\n nonce,\n )\n .flatMap(\n ({\n status,\n txParams: { authorizationList, from, gas, value, nonce },\n }) => {\n const authorizationNonces = (authorizationList ?? [])\n .map((authorization) => authorization.nonce)\n .filter((authorizationNonce) => authorizationNonce !== undefined);\n\n // the only value we care about is the nonce\n // but we need to return the other values to satisfy the type\n // TODO: refactor nonceTracker to not require this\n /* istanbul ignore next */\n return [nonce, ...authorizationNonces].map((currentNonce) => ({\n status,\n history: [{}],\n txParams: {\n from: from ?? '',\n gas: gas ?? '',\n value: value ?? '',\n nonce: currentNonce ?? '',\n },\n }));\n },\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"prepare.cjs","sourceRoot":"","sources":["../../src/utils/prepare.ts"],"names":[],"mappings":";;;AACA,+CAAsD;AAEtD,uCAAoD;AACpD,2CAA6C;AAE7C,mCAAmC;AAItB,QAAA,QAAQ,GAAG,iBAAQ,CAAC,MAAM,CAAC;AAExC;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAChC,OAAY,EACZ,QAA2B;IAE3B,MAAM,cAAc,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAEjD,oDAAoD;IACpD,MAAM,IAAI,GAAG,cAA6B,CAAC;IAE3C,OAAO,uBAAkB,CAAC,UAAU,CAAC,IAAI,EAAE;QACzC,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,sBAAsB,CAAC,OAAO,CAAC;KACxC,CAAC,CAAC;AACL,CAAC;AAbD,gDAaC;AAED;;;;;;GAMG;AACH,SAAgB,oBAAoB,CAAC,OAAY,EAAE,MAAmB;IACpE,OAAO,IAAA,kBAAU,EACf,uBAAkB,CAAC,UAAU,CAAC,MAAM,EAAE;QACpC,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,sBAAsB,CAAC,OAAO,CAAC;KACxC,CAAC,CAAC,SAAS,EAAE,CACf,CAAC;AACJ,CAAC;AAPD,oDAOC;AAED;;;;;GAKG;AACH,SAAS,sBAAsB,CAAC,OAAY;IAC1C,MAAM,iBAAiB,GAAyB;QAC9C,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;QAC9B,eAAe,EAAE,gBAAQ;KAC1B,CAAC;IAEF,OAAO,eAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE;QACtC,IAAI,EAAE,CAAC,IAAI,CAAC;KACb,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,SAAS,eAAe,CAAC,MAAyB;IAChD,MAAM,SAAS,GAAG,IAAA,kBAAS,EAAC,MAAM,CAAC,CAAC;IACpC,0BAA0B,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACxD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,SAAS,0BAA0B,CACjC,iBAAqC;IAErC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IAED,KAAK,MAAM,aAAa,IAAI,iBAAiB,EAAE,CAAC;QAC9C,aAAa,CAAC,KAAK,GAAG,mBAAmB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC/D,aAAa,CAAC,CAAC,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACvD,aAAa,CAAC,CAAC,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACvD,aAAa,CAAC,OAAO,GAAG,mBAAmB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,KAAsB;IACjD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAQ,KAAK,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,IAAI,CAAS,IAAI,KAAK,CAAC;AAC9D,CAAC","sourcesContent":["import type { ChainConfig } from '@ethereumjs/common';\nimport { Common, Hardfork } from '@ethereumjs/common';\nimport type { TypedTransaction, TypedTxData } from '@ethereumjs/tx';\nimport { TransactionFactory } from '@ethereumjs/tx';\nimport { bytesToHex } from '@metamask/utils';\nimport type { Hex } from '@metamask/utils';\nimport { cloneDeep } from 'lodash';\n\nimport type { AuthorizationList, TransactionParams } from '../types';\n\nexport const HARDFORK = Hardfork.Prague;\n\n/**\n * Creates an `etheruemjs/tx` transaction object from the raw transaction parameters.\n *\n * @param chainId - Chain ID of the transaction.\n * @param txParams - Transaction parameters.\n * @returns The transaction object.\n */\nexport function prepareTransaction(\n chainId: Hex,\n txParams: TransactionParams,\n): TypedTransaction {\n const normalizedData = normalizeParams(txParams);\n\n // Does not allow `gasPrice` on type 4 transactions.\n const data = normalizedData as TypedTxData;\n\n return TransactionFactory.fromTxData(data, {\n freeze: false,\n common: getCommonConfiguration(chainId),\n });\n}\n\n/**\n * Serializes transaction data into a hex string.\n *\n * @param chainId - Chain ID of the transaction.\n * @param txData - The signed transaction data.\n * @returns The prefixed hex string.\n */\nexport function serializeTransaction(chainId: Hex, txData: TypedTxData): Hex {\n return bytesToHex(\n TransactionFactory.fromTxData(txData, {\n freeze: false,\n common: getCommonConfiguration(chainId),\n }).serialize(),\n );\n}\n\n/**\n * Generates the configuration used to prepare transactions.\n *\n * @param chainId - Chain ID.\n * @returns The common configuration.\n */\nfunction getCommonConfiguration(chainId: Hex): Common {\n const customChainParams: Partial<ChainConfig> = {\n chainId: parseInt(chainId, 16),\n defaultHardfork: HARDFORK,\n };\n\n return Common.custom(customChainParams, {\n eips: [7702],\n });\n}\n\n/**\n * Normalize the transaction parameters for compatibility with `ethereumjs/tx`.\n *\n * @param params - The transaction parameters to normalize.\n * @returns The normalized transaction parameters.\n */\nfunction normalizeParams(params: TransactionParams): TransactionParams {\n const newParams = cloneDeep(params);\n normalizeAuthorizationList(newParams.authorizationList);\n return newParams;\n}\n\n/**\n * Normalize the authorization list for `ethereumjs/tx` compatibility.\n *\n * @param authorizationList - The list of authorizations to normalize.\n */\nfunction normalizeAuthorizationList(\n authorizationList?: AuthorizationList,\n): void {\n if (!authorizationList) {\n return;\n }\n\n for (const authorization of authorizationList) {\n authorization.nonce = removeLeadingZeroes(authorization.nonce);\n authorization.r = removeLeadingZeroes(authorization.r);\n authorization.s = removeLeadingZeroes(authorization.s);\n authorization.yParity = removeLeadingZeroes(authorization.yParity);\n }\n}\n\n/**\n * Remove leading zeroes from a hexadecimal string.\n *\n * @param value - The hexadecimal string to process.\n * @returns The processed hexadecimal string.\n */\nfunction removeLeadingZeroes(value: Hex | undefined): Hex | undefined {\n if (!value) {\n return value;\n }\n\n if (value === '0x0') {\n return '0x';\n }\n\n return (value.replace?.(/^0x(00)+/u, '0x') as Hex) ?? value;\n}\n"]}
1
+ {"version":3,"file":"prepare.cjs","sourceRoot":"","sources":["../../src/utils/prepare.ts"],"names":[],"mappings":";;;AACA,+CAAsD;AAEtD,uCAAoD;AACpD,2CAA6C;AAE7C,mCAAmC;AAItB,QAAA,QAAQ,GAAG,iBAAQ,CAAC,MAAM,CAAC;AAExC;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAChC,OAAY,EACZ,QAA2B;IAE3B,MAAM,cAAc,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAEjD,oDAAoD;IACpD,MAAM,IAAI,GAAG,cAA6B,CAAC;IAE3C,OAAO,uBAAkB,CAAC,UAAU,CAAC,IAAI,EAAE;QACzC,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,sBAAsB,CAAC,OAAO,CAAC;KACxC,CAAC,CAAC;AACL,CAAC;AAbD,gDAaC;AAED;;;;;;GAMG;AACH,SAAgB,oBAAoB,CAAC,OAAY,EAAE,MAAmB;IACpE,OAAO,IAAA,kBAAU,EACf,uBAAkB,CAAC,UAAU,CAAC,MAAM,EAAE;QACpC,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,sBAAsB,CAAC,OAAO,CAAC;KACxC,CAAC,CAAC,SAAS,EAAE,CACf,CAAC;AACJ,CAAC;AAPD,oDAOC;AAED;;;;;GAKG;AACH,SAAS,sBAAsB,CAAC,OAAY;IAC1C,MAAM,iBAAiB,GAAyB;QAC9C,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;QAC9B,eAAe,EAAE,gBAAQ;KAC1B,CAAC;IAEF,OAAO,eAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE;QACtC,IAAI,EAAE,CAAC,IAAI,CAAC;KACb,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,SAAS,eAAe,CAAC,MAAyB;IAChD,MAAM,SAAS,GAAG,IAAA,kBAAS,EAAC,MAAM,CAAC,CAAC;IACpC,0BAA0B,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACxD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,SAAS,0BAA0B,CACjC,iBAAqC;IAErC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IAED,KAAK,MAAM,aAAa,IAAI,iBAAiB,EAAE,CAAC;QAC9C,aAAa,CAAC,KAAK,GAAG,mBAAmB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC/D,aAAa,CAAC,CAAC,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACvD,aAAa,CAAC,CAAC,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACvD,aAAa,CAAC,OAAO,GAAG,mBAAmB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,KAAsB;IACjD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAQ,KAAK,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,IAAI,CAAS,IAAI,KAAK,CAAC;AAC9D,CAAC","sourcesContent":["import type { ChainConfig } from '@ethereumjs/common';\nimport { Common, Hardfork } from '@ethereumjs/common';\nimport type { TypedTransaction, TypedTxData } from '@ethereumjs/tx';\nimport { TransactionFactory } from '@ethereumjs/tx';\nimport { bytesToHex } from '@metamask/utils';\nimport type { Hex } from '@metamask/utils';\nimport { cloneDeep } from 'lodash';\n\nimport type { AuthorizationList, TransactionParams } from '../types.js';\n\nexport const HARDFORK = Hardfork.Prague;\n\n/**\n * Creates an `etheruemjs/tx` transaction object from the raw transaction parameters.\n *\n * @param chainId - Chain ID of the transaction.\n * @param txParams - Transaction parameters.\n * @returns The transaction object.\n */\nexport function prepareTransaction(\n chainId: Hex,\n txParams: TransactionParams,\n): TypedTransaction {\n const normalizedData = normalizeParams(txParams);\n\n // Does not allow `gasPrice` on type 4 transactions.\n const data = normalizedData as TypedTxData;\n\n return TransactionFactory.fromTxData(data, {\n freeze: false,\n common: getCommonConfiguration(chainId),\n });\n}\n\n/**\n * Serializes transaction data into a hex string.\n *\n * @param chainId - Chain ID of the transaction.\n * @param txData - The signed transaction data.\n * @returns The prefixed hex string.\n */\nexport function serializeTransaction(chainId: Hex, txData: TypedTxData): Hex {\n return bytesToHex(\n TransactionFactory.fromTxData(txData, {\n freeze: false,\n common: getCommonConfiguration(chainId),\n }).serialize(),\n );\n}\n\n/**\n * Generates the configuration used to prepare transactions.\n *\n * @param chainId - Chain ID.\n * @returns The common configuration.\n */\nfunction getCommonConfiguration(chainId: Hex): Common {\n const customChainParams: Partial<ChainConfig> = {\n chainId: parseInt(chainId, 16),\n defaultHardfork: HARDFORK,\n };\n\n return Common.custom(customChainParams, {\n eips: [7702],\n });\n}\n\n/**\n * Normalize the transaction parameters for compatibility with `ethereumjs/tx`.\n *\n * @param params - The transaction parameters to normalize.\n * @returns The normalized transaction parameters.\n */\nfunction normalizeParams(params: TransactionParams): TransactionParams {\n const newParams = cloneDeep(params);\n normalizeAuthorizationList(newParams.authorizationList);\n return newParams;\n}\n\n/**\n * Normalize the authorization list for `ethereumjs/tx` compatibility.\n *\n * @param authorizationList - The list of authorizations to normalize.\n */\nfunction normalizeAuthorizationList(\n authorizationList?: AuthorizationList,\n): void {\n if (!authorizationList) {\n return;\n }\n\n for (const authorization of authorizationList) {\n authorization.nonce = removeLeadingZeroes(authorization.nonce);\n authorization.r = removeLeadingZeroes(authorization.r);\n authorization.s = removeLeadingZeroes(authorization.s);\n authorization.yParity = removeLeadingZeroes(authorization.yParity);\n }\n}\n\n/**\n * Remove leading zeroes from a hexadecimal string.\n *\n * @param value - The hexadecimal string to process.\n * @returns The processed hexadecimal string.\n */\nfunction removeLeadingZeroes(value: Hex | undefined): Hex | undefined {\n if (!value) {\n return value;\n }\n\n if (value === '0x0') {\n return '0x';\n }\n\n return (value.replace?.(/^0x(00)+/u, '0x') as Hex) ?? value;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"prepare.d.cts","sourceRoot":"","sources":["../../src/utils/prepare.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,QAAQ,EAAE,2BAA2B;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,uBAAuB;AAGpE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAqB,iBAAiB,EAAE,qBAAiB;AAErE,eAAO,MAAM,QAAQ,kBAAkB,CAAC;AAExC;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,GAAG,EACZ,QAAQ,EAAE,iBAAiB,GAC1B,gBAAgB,CAUlB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,GAAG,GAAG,CAO3E"}
1
+ {"version":3,"file":"prepare.d.cts","sourceRoot":"","sources":["../../src/utils/prepare.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,QAAQ,EAAE,2BAA2B;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,uBAAuB;AAGpE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAqB,iBAAiB,EAAE,qBAAoB;AAExE,eAAO,MAAM,QAAQ,kBAAkB,CAAC;AAExC;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,GAAG,EACZ,QAAQ,EAAE,iBAAiB,GAC1B,gBAAgB,CAUlB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,GAAG,GAAG,CAO3E"}
@@ -1 +1 @@
1
- {"version":3,"file":"prepare.d.mts","sourceRoot":"","sources":["../../src/utils/prepare.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,QAAQ,EAAE,2BAA2B;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,uBAAuB;AAGpE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAqB,iBAAiB,EAAE,qBAAiB;AAErE,eAAO,MAAM,QAAQ,kBAAkB,CAAC;AAExC;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,GAAG,EACZ,QAAQ,EAAE,iBAAiB,GAC1B,gBAAgB,CAUlB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,GAAG,GAAG,CAO3E"}
1
+ {"version":3,"file":"prepare.d.mts","sourceRoot":"","sources":["../../src/utils/prepare.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,QAAQ,EAAE,2BAA2B;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,uBAAuB;AAGpE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAqB,iBAAiB,EAAE,qBAAoB;AAExE,eAAO,MAAM,QAAQ,kBAAkB,CAAC;AAExC;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,GAAG,EACZ,QAAQ,EAAE,iBAAiB,GAC1B,gBAAgB,CAUlB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,GAAG,GAAG,CAO3E"}
@@ -1 +1 @@
1
- {"version":3,"file":"prepare.mjs","sourceRoot":"","sources":["../../src/utils/prepare.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,2BAA2B;AAEtD,OAAO,EAAE,kBAAkB,EAAE,uBAAuB;AACpD,OAAO,EAAE,UAAU,EAAE,wBAAwB;;;AAM7C,MAAM,CAAC,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAY,EACZ,QAA2B;IAE3B,MAAM,cAAc,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAEjD,oDAAoD;IACpD,MAAM,IAAI,GAAG,cAA6B,CAAC;IAE3C,OAAO,kBAAkB,CAAC,UAAU,CAAC,IAAI,EAAE;QACzC,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,sBAAsB,CAAC,OAAO,CAAC;KACxC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAY,EAAE,MAAmB;IACpE,OAAO,UAAU,CACf,kBAAkB,CAAC,UAAU,CAAC,MAAM,EAAE;QACpC,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,sBAAsB,CAAC,OAAO,CAAC;KACxC,CAAC,CAAC,SAAS,EAAE,CACf,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,sBAAsB,CAAC,OAAY;IAC1C,MAAM,iBAAiB,GAAyB;QAC9C,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;QAC9B,eAAe,EAAE,QAAQ;KAC1B,CAAC;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE;QACtC,IAAI,EAAE,CAAC,IAAI,CAAC;KACb,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,SAAS,eAAe,CAAC,MAAyB;IAChD,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IACpC,0BAA0B,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACxD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,SAAS,0BAA0B,CACjC,iBAAqC;IAErC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IAED,KAAK,MAAM,aAAa,IAAI,iBAAiB,EAAE,CAAC;QAC9C,aAAa,CAAC,KAAK,GAAG,mBAAmB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC/D,aAAa,CAAC,CAAC,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACvD,aAAa,CAAC,CAAC,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACvD,aAAa,CAAC,OAAO,GAAG,mBAAmB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,KAAsB;IACjD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAQ,KAAK,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,IAAI,CAAS,IAAI,KAAK,CAAC;AAC9D,CAAC","sourcesContent":["import type { ChainConfig } from '@ethereumjs/common';\nimport { Common, Hardfork } from '@ethereumjs/common';\nimport type { TypedTransaction, TypedTxData } from '@ethereumjs/tx';\nimport { TransactionFactory } from '@ethereumjs/tx';\nimport { bytesToHex } from '@metamask/utils';\nimport type { Hex } from '@metamask/utils';\nimport { cloneDeep } from 'lodash';\n\nimport type { AuthorizationList, TransactionParams } from '../types';\n\nexport const HARDFORK = Hardfork.Prague;\n\n/**\n * Creates an `etheruemjs/tx` transaction object from the raw transaction parameters.\n *\n * @param chainId - Chain ID of the transaction.\n * @param txParams - Transaction parameters.\n * @returns The transaction object.\n */\nexport function prepareTransaction(\n chainId: Hex,\n txParams: TransactionParams,\n): TypedTransaction {\n const normalizedData = normalizeParams(txParams);\n\n // Does not allow `gasPrice` on type 4 transactions.\n const data = normalizedData as TypedTxData;\n\n return TransactionFactory.fromTxData(data, {\n freeze: false,\n common: getCommonConfiguration(chainId),\n });\n}\n\n/**\n * Serializes transaction data into a hex string.\n *\n * @param chainId - Chain ID of the transaction.\n * @param txData - The signed transaction data.\n * @returns The prefixed hex string.\n */\nexport function serializeTransaction(chainId: Hex, txData: TypedTxData): Hex {\n return bytesToHex(\n TransactionFactory.fromTxData(txData, {\n freeze: false,\n common: getCommonConfiguration(chainId),\n }).serialize(),\n );\n}\n\n/**\n * Generates the configuration used to prepare transactions.\n *\n * @param chainId - Chain ID.\n * @returns The common configuration.\n */\nfunction getCommonConfiguration(chainId: Hex): Common {\n const customChainParams: Partial<ChainConfig> = {\n chainId: parseInt(chainId, 16),\n defaultHardfork: HARDFORK,\n };\n\n return Common.custom(customChainParams, {\n eips: [7702],\n });\n}\n\n/**\n * Normalize the transaction parameters for compatibility with `ethereumjs/tx`.\n *\n * @param params - The transaction parameters to normalize.\n * @returns The normalized transaction parameters.\n */\nfunction normalizeParams(params: TransactionParams): TransactionParams {\n const newParams = cloneDeep(params);\n normalizeAuthorizationList(newParams.authorizationList);\n return newParams;\n}\n\n/**\n * Normalize the authorization list for `ethereumjs/tx` compatibility.\n *\n * @param authorizationList - The list of authorizations to normalize.\n */\nfunction normalizeAuthorizationList(\n authorizationList?: AuthorizationList,\n): void {\n if (!authorizationList) {\n return;\n }\n\n for (const authorization of authorizationList) {\n authorization.nonce = removeLeadingZeroes(authorization.nonce);\n authorization.r = removeLeadingZeroes(authorization.r);\n authorization.s = removeLeadingZeroes(authorization.s);\n authorization.yParity = removeLeadingZeroes(authorization.yParity);\n }\n}\n\n/**\n * Remove leading zeroes from a hexadecimal string.\n *\n * @param value - The hexadecimal string to process.\n * @returns The processed hexadecimal string.\n */\nfunction removeLeadingZeroes(value: Hex | undefined): Hex | undefined {\n if (!value) {\n return value;\n }\n\n if (value === '0x0') {\n return '0x';\n }\n\n return (value.replace?.(/^0x(00)+/u, '0x') as Hex) ?? value;\n}\n"]}
1
+ {"version":3,"file":"prepare.mjs","sourceRoot":"","sources":["../../src/utils/prepare.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,2BAA2B;AAEtD,OAAO,EAAE,kBAAkB,EAAE,uBAAuB;AACpD,OAAO,EAAE,UAAU,EAAE,wBAAwB;;;AAM7C,MAAM,CAAC,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAY,EACZ,QAA2B;IAE3B,MAAM,cAAc,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAEjD,oDAAoD;IACpD,MAAM,IAAI,GAAG,cAA6B,CAAC;IAE3C,OAAO,kBAAkB,CAAC,UAAU,CAAC,IAAI,EAAE;QACzC,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,sBAAsB,CAAC,OAAO,CAAC;KACxC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAY,EAAE,MAAmB;IACpE,OAAO,UAAU,CACf,kBAAkB,CAAC,UAAU,CAAC,MAAM,EAAE;QACpC,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,sBAAsB,CAAC,OAAO,CAAC;KACxC,CAAC,CAAC,SAAS,EAAE,CACf,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,sBAAsB,CAAC,OAAY;IAC1C,MAAM,iBAAiB,GAAyB;QAC9C,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;QAC9B,eAAe,EAAE,QAAQ;KAC1B,CAAC;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE;QACtC,IAAI,EAAE,CAAC,IAAI,CAAC;KACb,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,SAAS,eAAe,CAAC,MAAyB;IAChD,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IACpC,0BAA0B,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACxD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,SAAS,0BAA0B,CACjC,iBAAqC;IAErC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IAED,KAAK,MAAM,aAAa,IAAI,iBAAiB,EAAE,CAAC;QAC9C,aAAa,CAAC,KAAK,GAAG,mBAAmB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC/D,aAAa,CAAC,CAAC,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACvD,aAAa,CAAC,CAAC,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACvD,aAAa,CAAC,OAAO,GAAG,mBAAmB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,KAAsB;IACjD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAQ,KAAK,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,IAAI,CAAS,IAAI,KAAK,CAAC;AAC9D,CAAC","sourcesContent":["import type { ChainConfig } from '@ethereumjs/common';\nimport { Common, Hardfork } from '@ethereumjs/common';\nimport type { TypedTransaction, TypedTxData } from '@ethereumjs/tx';\nimport { TransactionFactory } from '@ethereumjs/tx';\nimport { bytesToHex } from '@metamask/utils';\nimport type { Hex } from '@metamask/utils';\nimport { cloneDeep } from 'lodash';\n\nimport type { AuthorizationList, TransactionParams } from '../types.js';\n\nexport const HARDFORK = Hardfork.Prague;\n\n/**\n * Creates an `etheruemjs/tx` transaction object from the raw transaction parameters.\n *\n * @param chainId - Chain ID of the transaction.\n * @param txParams - Transaction parameters.\n * @returns The transaction object.\n */\nexport function prepareTransaction(\n chainId: Hex,\n txParams: TransactionParams,\n): TypedTransaction {\n const normalizedData = normalizeParams(txParams);\n\n // Does not allow `gasPrice` on type 4 transactions.\n const data = normalizedData as TypedTxData;\n\n return TransactionFactory.fromTxData(data, {\n freeze: false,\n common: getCommonConfiguration(chainId),\n });\n}\n\n/**\n * Serializes transaction data into a hex string.\n *\n * @param chainId - Chain ID of the transaction.\n * @param txData - The signed transaction data.\n * @returns The prefixed hex string.\n */\nexport function serializeTransaction(chainId: Hex, txData: TypedTxData): Hex {\n return bytesToHex(\n TransactionFactory.fromTxData(txData, {\n freeze: false,\n common: getCommonConfiguration(chainId),\n }).serialize(),\n );\n}\n\n/**\n * Generates the configuration used to prepare transactions.\n *\n * @param chainId - Chain ID.\n * @returns The common configuration.\n */\nfunction getCommonConfiguration(chainId: Hex): Common {\n const customChainParams: Partial<ChainConfig> = {\n chainId: parseInt(chainId, 16),\n defaultHardfork: HARDFORK,\n };\n\n return Common.custom(customChainParams, {\n eips: [7702],\n });\n}\n\n/**\n * Normalize the transaction parameters for compatibility with `ethereumjs/tx`.\n *\n * @param params - The transaction parameters to normalize.\n * @returns The normalized transaction parameters.\n */\nfunction normalizeParams(params: TransactionParams): TransactionParams {\n const newParams = cloneDeep(params);\n normalizeAuthorizationList(newParams.authorizationList);\n return newParams;\n}\n\n/**\n * Normalize the authorization list for `ethereumjs/tx` compatibility.\n *\n * @param authorizationList - The list of authorizations to normalize.\n */\nfunction normalizeAuthorizationList(\n authorizationList?: AuthorizationList,\n): void {\n if (!authorizationList) {\n return;\n }\n\n for (const authorization of authorizationList) {\n authorization.nonce = removeLeadingZeroes(authorization.nonce);\n authorization.r = removeLeadingZeroes(authorization.r);\n authorization.s = removeLeadingZeroes(authorization.s);\n authorization.yParity = removeLeadingZeroes(authorization.yParity);\n }\n}\n\n/**\n * Remove leading zeroes from a hexadecimal string.\n *\n * @param value - The hexadecimal string to process.\n * @returns The processed hexadecimal string.\n */\nfunction removeLeadingZeroes(value: Hex | undefined): Hex | undefined {\n if (!value) {\n return value;\n }\n\n if (value === '0x0') {\n return '0x';\n }\n\n return (value.replace?.(/^0x(00)+/u, '0x') as Hex) ?? value;\n}\n"]}
@@ -2,8 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getChainId = exports.getNetworkClientId = exports.rpcRequest = exports.getProvider = void 0;
4
4
  const network_controller_1 = require("@metamask/network-controller");
5
- const logger_1 = require("../logger.cjs");
6
- const log = (0, logger_1.createModuleLogger)(logger_1.projectLogger, 'provider');
5
+ const logger_js_1 = require("../logger.cjs");
6
+ const log = (0, logger_js_1.createModuleLogger)(logger_js_1.projectLogger, 'provider');
7
7
  /**
8
8
  * Get a provider for the specified chain or network client.
9
9
  * Resolves chainId to networkClientId if needed, then gets the provider.
@@ -1 +1 @@
1
- {"version":3,"file":"provider.cjs","sourceRoot":"","sources":["../../src/utils/provider.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n NetworkClient,\n NetworkClientId,\n Provider,\n} from '@metamask/network-controller';\nimport { NetworkClientType } from '@metamask/network-controller';\nimport type { Hex } from '@metamask/utils';\n\nimport { createModuleLogger, projectLogger } from '../logger';\nimport type { TransactionControllerMessenger } from '../TransactionController';\n\nconst log = createModuleLogger(projectLogger, 'provider');\n\ntype ProviderRequestParams = Parameters<Provider['request']>[0]['params'];\n\n/**\n * Get a provider for the specified chain or network client.\n * Resolves chainId to networkClientId if needed, then gets the provider.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.chainId - The chain ID to resolve to a network client.\n * @param request.networkClientId - The network client ID to use directly.\n * @returns The Provider instance.\n */\nexport function getProvider({\n messenger,\n chainId,\n networkClientId,\n}: {\n messenger: TransactionControllerMessenger;\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n}): Provider {\n const resolvedId = getNetworkClientId({\n messenger,\n chainId,\n networkClientId,\n });\n\n return getNetworkClient(messenger, resolvedId).provider;\n}\n\n/**\n * Send an RPC request to the network for the specified chain or network client.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.chainId - The chain ID to resolve to a network client.\n * @param request.networkClientId - The network client ID to use directly.\n * @param request.method - The JSON-RPC method name.\n * @param request.params - Optional parameters for the RPC call.\n * @returns The RPC response.\n */\nexport async function rpcRequest({\n messenger,\n chainId,\n networkClientId,\n method,\n params,\n}: {\n messenger: TransactionControllerMessenger;\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n method: string;\n params?: ProviderRequestParams;\n}): Promise<unknown> {\n const resolvedNetworkClientId = getNetworkClientId({\n messenger,\n chainId,\n networkClientId,\n });\n\n const networkClient = getNetworkClient(messenger, resolvedNetworkClientId);\n const { provider } = networkClient;\n\n let response: unknown;\n try {\n response = await provider.request({ method, params });\n } catch (error) {\n throwWithRpcContext(error, {\n method,\n networkClient,\n });\n }\n\n log(method, { params, response });\n\n return response;\n}\n\n/**\n * Get the network client ID for the specified chain or network client.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.chainId - The chain ID to resolve to a network client.\n * @param request.networkClientId - The network client ID to use directly.\n * @returns The network client ID.\n */\nexport function getNetworkClientId({\n messenger,\n chainId,\n networkClientId,\n}: {\n messenger: TransactionControllerMessenger;\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n}): NetworkClientId {\n if (networkClientId) {\n return networkClientId;\n }\n\n if (chainId) {\n return messenger.call(\n 'NetworkController:findNetworkClientIdByChainId',\n chainId,\n );\n }\n\n throw new Error('Either chainId or networkClientId must be provided');\n}\n\n/**\n * Get the chain ID for the specified network client.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.networkClientId - The network client ID.\n * @returns The chain ID.\n */\nexport function getChainId({\n messenger,\n networkClientId,\n}: {\n messenger: TransactionControllerMessenger;\n networkClientId: NetworkClientId;\n}): Hex {\n return (\n messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n ) as {\n configuration: { chainId: Hex };\n }\n ).configuration.chainId;\n}\n\nfunction getNetworkClient(\n messenger: TransactionControllerMessenger,\n networkClientId: NetworkClientId,\n): NetworkClient {\n return messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n ) as NetworkClient;\n}\n\nfunction throwWithRpcContext(\n error: unknown,\n {\n method,\n networkClient,\n }: {\n method: string;\n networkClient: NetworkClient;\n },\n): never {\n const errorObject = error as {\n data?: { message?: string };\n message?: string;\n };\n const message = errorObject.data?.message ?? errorObject.message;\n const prefix = `RPC ${networkClient.configuration.chainId} ${getEndpointLabel(\n networkClient,\n )} ${method}`;\n const prefixedMessage = `${prefix}: ${message}`;\n\n errorObject.message = prefixedMessage;\n throw error;\n}\n\nfunction getEndpointLabel(networkClient: NetworkClient): 'Infura' | 'Custom' {\n return networkClient.configuration.type === NetworkClientType.Infura\n ? 'Infura'\n : 'Custom';\n}\n"]}
1
+ {"version":3,"file":"provider.cjs","sourceRoot":"","sources":["../../src/utils/provider.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n NetworkClient,\n NetworkClientId,\n Provider,\n} from '@metamask/network-controller';\nimport { NetworkClientType } from '@metamask/network-controller';\nimport type { Hex } from '@metamask/utils';\n\nimport { createModuleLogger, projectLogger } from '../logger.js';\nimport type { TransactionControllerMessenger } from '../TransactionController.js';\n\nconst log = createModuleLogger(projectLogger, 'provider');\n\ntype ProviderRequestParams = Parameters<Provider['request']>[0]['params'];\n\n/**\n * Get a provider for the specified chain or network client.\n * Resolves chainId to networkClientId if needed, then gets the provider.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.chainId - The chain ID to resolve to a network client.\n * @param request.networkClientId - The network client ID to use directly.\n * @returns The Provider instance.\n */\nexport function getProvider({\n messenger,\n chainId,\n networkClientId,\n}: {\n messenger: TransactionControllerMessenger;\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n}): Provider {\n const resolvedId = getNetworkClientId({\n messenger,\n chainId,\n networkClientId,\n });\n\n return getNetworkClient(messenger, resolvedId).provider;\n}\n\n/**\n * Send an RPC request to the network for the specified chain or network client.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.chainId - The chain ID to resolve to a network client.\n * @param request.networkClientId - The network client ID to use directly.\n * @param request.method - The JSON-RPC method name.\n * @param request.params - Optional parameters for the RPC call.\n * @returns The RPC response.\n */\nexport async function rpcRequest({\n messenger,\n chainId,\n networkClientId,\n method,\n params,\n}: {\n messenger: TransactionControllerMessenger;\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n method: string;\n params?: ProviderRequestParams;\n}): Promise<unknown> {\n const resolvedNetworkClientId = getNetworkClientId({\n messenger,\n chainId,\n networkClientId,\n });\n\n const networkClient = getNetworkClient(messenger, resolvedNetworkClientId);\n const { provider } = networkClient;\n\n let response: unknown;\n try {\n response = await provider.request({ method, params });\n } catch (error) {\n throwWithRpcContext(error, {\n method,\n networkClient,\n });\n }\n\n log(method, { params, response });\n\n return response;\n}\n\n/**\n * Get the network client ID for the specified chain or network client.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.chainId - The chain ID to resolve to a network client.\n * @param request.networkClientId - The network client ID to use directly.\n * @returns The network client ID.\n */\nexport function getNetworkClientId({\n messenger,\n chainId,\n networkClientId,\n}: {\n messenger: TransactionControllerMessenger;\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n}): NetworkClientId {\n if (networkClientId) {\n return networkClientId;\n }\n\n if (chainId) {\n return messenger.call(\n 'NetworkController:findNetworkClientIdByChainId',\n chainId,\n );\n }\n\n throw new Error('Either chainId or networkClientId must be provided');\n}\n\n/**\n * Get the chain ID for the specified network client.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.networkClientId - The network client ID.\n * @returns The chain ID.\n */\nexport function getChainId({\n messenger,\n networkClientId,\n}: {\n messenger: TransactionControllerMessenger;\n networkClientId: NetworkClientId;\n}): Hex {\n return (\n messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n ) as {\n configuration: { chainId: Hex };\n }\n ).configuration.chainId;\n}\n\nfunction getNetworkClient(\n messenger: TransactionControllerMessenger,\n networkClientId: NetworkClientId,\n): NetworkClient {\n return messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n ) as NetworkClient;\n}\n\nfunction throwWithRpcContext(\n error: unknown,\n {\n method,\n networkClient,\n }: {\n method: string;\n networkClient: NetworkClient;\n },\n): never {\n const errorObject = error as {\n data?: { message?: string };\n message?: string;\n };\n const message = errorObject.data?.message ?? errorObject.message;\n const prefix = `RPC ${networkClient.configuration.chainId} ${getEndpointLabel(\n networkClient,\n )} ${method}`;\n const prefixedMessage = `${prefix}: ${message}`;\n\n errorObject.message = prefixedMessage;\n throw error;\n}\n\nfunction getEndpointLabel(networkClient: NetworkClient): 'Infura' | 'Custom' {\n return networkClient.configuration.type === NetworkClientType.Infura\n ? 'Infura'\n : 'Custom';\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.cts","sourceRoot":"","sources":["../../src/utils/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,eAAe,EACf,QAAQ,EACT,qCAAqC;AAEtC,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAiC;AAI/E,KAAK,qBAAqB,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAE1E;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,OAAO,EACP,eAAe,GAChB,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,QAAQ,CAQX;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAAC,EAC/B,SAAS,EACT,OAAO,EACP,eAAe,EACf,MAAM,EACN,MAAM,GACP,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,qBAAqB,CAAC;CAChC,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,OAAO,EACP,eAAe,GAChB,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,eAAe,CAalB;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,eAAe,GAChB,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,eAAe,EAAE,eAAe,CAAC;CAClC,GAAG,GAAG,CASN"}
1
+ {"version":3,"file":"provider.d.cts","sourceRoot":"","sources":["../../src/utils/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,eAAe,EACf,QAAQ,EACT,qCAAqC;AAEtC,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAoC;AAIlF,KAAK,qBAAqB,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAE1E;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,OAAO,EACP,eAAe,GAChB,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,QAAQ,CAQX;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAAC,EAC/B,SAAS,EACT,OAAO,EACP,eAAe,EACf,MAAM,EACN,MAAM,GACP,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,qBAAqB,CAAC;CAChC,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,OAAO,EACP,eAAe,GAChB,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,eAAe,CAalB;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,eAAe,GAChB,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,eAAe,EAAE,eAAe,CAAC;CAClC,GAAG,GAAG,CASN"}
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.mts","sourceRoot":"","sources":["../../src/utils/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,eAAe,EACf,QAAQ,EACT,qCAAqC;AAEtC,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAiC;AAI/E,KAAK,qBAAqB,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAE1E;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,OAAO,EACP,eAAe,GAChB,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,QAAQ,CAQX;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAAC,EAC/B,SAAS,EACT,OAAO,EACP,eAAe,EACf,MAAM,EACN,MAAM,GACP,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,qBAAqB,CAAC;CAChC,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,OAAO,EACP,eAAe,GAChB,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,eAAe,CAalB;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,eAAe,GAChB,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,eAAe,EAAE,eAAe,CAAC;CAClC,GAAG,GAAG,CASN"}
1
+ {"version":3,"file":"provider.d.mts","sourceRoot":"","sources":["../../src/utils/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,eAAe,EACf,QAAQ,EACT,qCAAqC;AAEtC,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAoC;AAIlF,KAAK,qBAAqB,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAE1E;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,OAAO,EACP,eAAe,GAChB,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,QAAQ,CAQX;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAAC,EAC/B,SAAS,EACT,OAAO,EACP,eAAe,EACf,MAAM,EACN,MAAM,GACP,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,qBAAqB,CAAC;CAChC,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,OAAO,EACP,eAAe,GAChB,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,eAAe,CAalB;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,eAAe,GAChB,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,eAAe,EAAE,eAAe,CAAC;CAClC,GAAG,GAAG,CASN"}
@@ -1 +1 @@
1
- {"version":3,"file":"provider.mjs","sourceRoot":"","sources":["../../src/utils/provider.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n NetworkClient,\n NetworkClientId,\n Provider,\n} from '@metamask/network-controller';\nimport { NetworkClientType } from '@metamask/network-controller';\nimport type { Hex } from '@metamask/utils';\n\nimport { createModuleLogger, projectLogger } from '../logger';\nimport type { TransactionControllerMessenger } from '../TransactionController';\n\nconst log = createModuleLogger(projectLogger, 'provider');\n\ntype ProviderRequestParams = Parameters<Provider['request']>[0]['params'];\n\n/**\n * Get a provider for the specified chain or network client.\n * Resolves chainId to networkClientId if needed, then gets the provider.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.chainId - The chain ID to resolve to a network client.\n * @param request.networkClientId - The network client ID to use directly.\n * @returns The Provider instance.\n */\nexport function getProvider({\n messenger,\n chainId,\n networkClientId,\n}: {\n messenger: TransactionControllerMessenger;\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n}): Provider {\n const resolvedId = getNetworkClientId({\n messenger,\n chainId,\n networkClientId,\n });\n\n return getNetworkClient(messenger, resolvedId).provider;\n}\n\n/**\n * Send an RPC request to the network for the specified chain or network client.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.chainId - The chain ID to resolve to a network client.\n * @param request.networkClientId - The network client ID to use directly.\n * @param request.method - The JSON-RPC method name.\n * @param request.params - Optional parameters for the RPC call.\n * @returns The RPC response.\n */\nexport async function rpcRequest({\n messenger,\n chainId,\n networkClientId,\n method,\n params,\n}: {\n messenger: TransactionControllerMessenger;\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n method: string;\n params?: ProviderRequestParams;\n}): Promise<unknown> {\n const resolvedNetworkClientId = getNetworkClientId({\n messenger,\n chainId,\n networkClientId,\n });\n\n const networkClient = getNetworkClient(messenger, resolvedNetworkClientId);\n const { provider } = networkClient;\n\n let response: unknown;\n try {\n response = await provider.request({ method, params });\n } catch (error) {\n throwWithRpcContext(error, {\n method,\n networkClient,\n });\n }\n\n log(method, { params, response });\n\n return response;\n}\n\n/**\n * Get the network client ID for the specified chain or network client.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.chainId - The chain ID to resolve to a network client.\n * @param request.networkClientId - The network client ID to use directly.\n * @returns The network client ID.\n */\nexport function getNetworkClientId({\n messenger,\n chainId,\n networkClientId,\n}: {\n messenger: TransactionControllerMessenger;\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n}): NetworkClientId {\n if (networkClientId) {\n return networkClientId;\n }\n\n if (chainId) {\n return messenger.call(\n 'NetworkController:findNetworkClientIdByChainId',\n chainId,\n );\n }\n\n throw new Error('Either chainId or networkClientId must be provided');\n}\n\n/**\n * Get the chain ID for the specified network client.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.networkClientId - The network client ID.\n * @returns The chain ID.\n */\nexport function getChainId({\n messenger,\n networkClientId,\n}: {\n messenger: TransactionControllerMessenger;\n networkClientId: NetworkClientId;\n}): Hex {\n return (\n messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n ) as {\n configuration: { chainId: Hex };\n }\n ).configuration.chainId;\n}\n\nfunction getNetworkClient(\n messenger: TransactionControllerMessenger,\n networkClientId: NetworkClientId,\n): NetworkClient {\n return messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n ) as NetworkClient;\n}\n\nfunction throwWithRpcContext(\n error: unknown,\n {\n method,\n networkClient,\n }: {\n method: string;\n networkClient: NetworkClient;\n },\n): never {\n const errorObject = error as {\n data?: { message?: string };\n message?: string;\n };\n const message = errorObject.data?.message ?? errorObject.message;\n const prefix = `RPC ${networkClient.configuration.chainId} ${getEndpointLabel(\n networkClient,\n )} ${method}`;\n const prefixedMessage = `${prefix}: ${message}`;\n\n errorObject.message = prefixedMessage;\n throw error;\n}\n\nfunction getEndpointLabel(networkClient: NetworkClient): 'Infura' | 'Custom' {\n return networkClient.configuration.type === NetworkClientType.Infura\n ? 'Infura'\n : 'Custom';\n}\n"]}
1
+ {"version":3,"file":"provider.mjs","sourceRoot":"","sources":["../../src/utils/provider.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n NetworkClient,\n NetworkClientId,\n Provider,\n} from '@metamask/network-controller';\nimport { NetworkClientType } from '@metamask/network-controller';\nimport type { Hex } from '@metamask/utils';\n\nimport { createModuleLogger, projectLogger } from '../logger.js';\nimport type { TransactionControllerMessenger } from '../TransactionController.js';\n\nconst log = createModuleLogger(projectLogger, 'provider');\n\ntype ProviderRequestParams = Parameters<Provider['request']>[0]['params'];\n\n/**\n * Get a provider for the specified chain or network client.\n * Resolves chainId to networkClientId if needed, then gets the provider.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.chainId - The chain ID to resolve to a network client.\n * @param request.networkClientId - The network client ID to use directly.\n * @returns The Provider instance.\n */\nexport function getProvider({\n messenger,\n chainId,\n networkClientId,\n}: {\n messenger: TransactionControllerMessenger;\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n}): Provider {\n const resolvedId = getNetworkClientId({\n messenger,\n chainId,\n networkClientId,\n });\n\n return getNetworkClient(messenger, resolvedId).provider;\n}\n\n/**\n * Send an RPC request to the network for the specified chain or network client.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.chainId - The chain ID to resolve to a network client.\n * @param request.networkClientId - The network client ID to use directly.\n * @param request.method - The JSON-RPC method name.\n * @param request.params - Optional parameters for the RPC call.\n * @returns The RPC response.\n */\nexport async function rpcRequest({\n messenger,\n chainId,\n networkClientId,\n method,\n params,\n}: {\n messenger: TransactionControllerMessenger;\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n method: string;\n params?: ProviderRequestParams;\n}): Promise<unknown> {\n const resolvedNetworkClientId = getNetworkClientId({\n messenger,\n chainId,\n networkClientId,\n });\n\n const networkClient = getNetworkClient(messenger, resolvedNetworkClientId);\n const { provider } = networkClient;\n\n let response: unknown;\n try {\n response = await provider.request({ method, params });\n } catch (error) {\n throwWithRpcContext(error, {\n method,\n networkClient,\n });\n }\n\n log(method, { params, response });\n\n return response;\n}\n\n/**\n * Get the network client ID for the specified chain or network client.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.chainId - The chain ID to resolve to a network client.\n * @param request.networkClientId - The network client ID to use directly.\n * @returns The network client ID.\n */\nexport function getNetworkClientId({\n messenger,\n chainId,\n networkClientId,\n}: {\n messenger: TransactionControllerMessenger;\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n}): NetworkClientId {\n if (networkClientId) {\n return networkClientId;\n }\n\n if (chainId) {\n return messenger.call(\n 'NetworkController:findNetworkClientIdByChainId',\n chainId,\n );\n }\n\n throw new Error('Either chainId or networkClientId must be provided');\n}\n\n/**\n * Get the chain ID for the specified network client.\n *\n * @param request - The request object.\n * @param request.messenger - The TransactionController messenger.\n * @param request.networkClientId - The network client ID.\n * @returns The chain ID.\n */\nexport function getChainId({\n messenger,\n networkClientId,\n}: {\n messenger: TransactionControllerMessenger;\n networkClientId: NetworkClientId;\n}): Hex {\n return (\n messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n ) as {\n configuration: { chainId: Hex };\n }\n ).configuration.chainId;\n}\n\nfunction getNetworkClient(\n messenger: TransactionControllerMessenger,\n networkClientId: NetworkClientId,\n): NetworkClient {\n return messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n ) as NetworkClient;\n}\n\nfunction throwWithRpcContext(\n error: unknown,\n {\n method,\n networkClient,\n }: {\n method: string;\n networkClient: NetworkClient;\n },\n): never {\n const errorObject = error as {\n data?: { message?: string };\n message?: string;\n };\n const message = errorObject.data?.message ?? errorObject.message;\n const prefix = `RPC ${networkClient.configuration.chainId} ${getEndpointLabel(\n networkClient,\n )} ${method}`;\n const prefixedMessage = `${prefix}: ${message}`;\n\n errorObject.message = prefixedMessage;\n throw error;\n}\n\nfunction getEndpointLabel(networkClient: NetworkClient): 'Infura' | 'Custom' {\n return networkClient.configuration.type === NetworkClientType.Infura\n ? 'Infura'\n : 'Custom';\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"retry.cjs","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":";;;AAAA,iEAAiE;AAEjE,2CAAwC;AAQxC;;;;;;;GAOG;AACH,SAAgB,uCAAuC,CACrD,yBAA4C,EAC5C,IAAY,EACZ,YAAqD;IAErD,MAAM,WAAW,GAAG,oBAAoB,CACtC,yBAAyB,EACzB,IAAI,EACJ,YAAY,CACb,CAAC;IAEF,MAAM,aAAa,GAAG,sBAAsB,CAC1C,yBAAyB,EACzB,IAAI,EACJ,YAAY,CACb,CAAC;IAEF,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,WAAW,GAAsB;YACrC,GAAG,yBAAyB;YAC5B,GAAG,aAAa;SACjB,CAAC;QAEF,OAAO,WAAW,CAAC,QAAQ,CAAC;QAE5B,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,WAAW,GAAsB;YACrC,GAAG,yBAAyB;YAC5B,QAAQ,EAAE,WAAW;SACtB,CAAC;QAEF,OAAO,WAAW,CAAC,YAAY,CAAC;QAChC,OAAO,WAAW,CAAC,oBAAoB,CAAC;QAExC,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,MAAM,IAAI,KAAK,CACb,8EAA8E,CAC/E,CAAC;AACJ,CAAC;AA3CD,0FA2CC;AAED;;;;;;;GAOG;AACH,SAAS,sBAAsB,CAC7B,yBAA4C,EAC5C,IAAY,EACZ,YAAqD;IAErD,IACE,YAAY;QACZ,cAAc,IAAI,YAAY;QAC9B,sBAAsB,IAAI,YAAY,EACtC,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,mBAAmB,GAAG,yBAAyB,CAAC,YAEzC,CAAC;IAEd,MAAM,2BAA2B,GAC/B,yBAAyB,CAAC,oBAAuC,CAAC;IAEpE,IACE,CAAC,mBAAmB;QACpB,CAAC,2BAA2B;QAC5B,mBAAmB,KAAK,KAAK;QAC7B,2BAA2B,KAAK,KAAK,EACrC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,YAAY,GAAG,WAAW,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;IAC5D,MAAM,oBAAoB,GAAG,WAAW,CAAC,2BAA2B,EAAE,IAAI,CAAC,CAAC;IAE5E,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAChD,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,oBAAoB,CAC3B,yBAA4C,EAC5C,IAAY,EACZ,YAAqD;IAErD,IAAI,YAAY,IAAI,UAAU,IAAI,YAAY,EAAE,CAAC;QAC/C,OAAO,YAAY,CAAC,QAAe,CAAC;IACtC,CAAC;IAED,MAAM,eAAe,GAAG,yBAAyB,CAAC,QAA2B,CAAC;IAE9E,IAAI,CAAC,eAAe,IAAI,eAAe,KAAK,KAAK,EAAE,CAAC;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,WAAW,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,KAAsB,EAAE,UAAkB;IAC7D,MAAM,YAAY,GAAG,IAAA,sCAAmB,EAAC,KAAK,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,YAAY,GAAG,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IAEnE,OAAO,IAAA,aAAK,EAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC","sourcesContent":["import { convertHexToDecimal } from '@metamask/controller-utils';\nimport type { Hex } from '@metamask/utils';\nimport { add0x } from '@metamask/utils';\n\nimport type {\n FeeMarketEIP1559Values,\n GasPriceValue,\n TransactionParams,\n} from '../types';\n\n/**\n * Returns new transaction parameters with increased gas fees.\n *\n * @param originalTransactionParams - The original transaction parameters.\n * @param rate - The rate by which to increase the existing gas fee properties.\n * @param newGasValues - Optional new gas values to use instead of increased the existing values.\n * @returns The new transaction parameters with the increased gas fee properties.\n */\nexport function getTransactionParamsWithIncreasedGasFee(\n originalTransactionParams: TransactionParams,\n rate: number,\n newGasValues?: GasPriceValue | FeeMarketEIP1559Values,\n): TransactionParams {\n const newGasPrice = getIncreasedGasPrice(\n originalTransactionParams,\n rate,\n newGasValues,\n );\n\n const new1559Values = getIncreased1559Values(\n originalTransactionParams,\n rate,\n newGasValues,\n );\n\n if (new1559Values) {\n const newTxParams: TransactionParams = {\n ...originalTransactionParams,\n ...new1559Values,\n };\n\n delete newTxParams.gasPrice;\n\n return newTxParams;\n }\n\n if (newGasPrice) {\n const newTxParams: TransactionParams = {\n ...originalTransactionParams,\n gasPrice: newGasPrice,\n };\n\n delete newTxParams.maxFeePerGas;\n delete newTxParams.maxPriorityFeePerGas;\n\n return newTxParams;\n }\n\n throw new Error(\n 'Cannot increase gas fee as no current values and no new values were provided',\n );\n}\n\n/**\n * Generate the increased EIP-1559 gas properties.\n *\n * @param originalTransactionParams - The original transaction parameters.\n * @param rate - The rate by which to increase the existing gas fee properties.\n * @param newGasValues - Optional new gas values to use instead of increased the existing values.\n * @returns The new EIP-1559 gas properties.\n */\nfunction getIncreased1559Values(\n originalTransactionParams: TransactionParams,\n rate: number,\n newGasValues?: GasPriceValue | FeeMarketEIP1559Values,\n): FeeMarketEIP1559Values | undefined {\n if (\n newGasValues &&\n 'maxFeePerGas' in newGasValues &&\n 'maxPriorityFeePerGas' in newGasValues\n ) {\n return newGasValues;\n }\n\n const currentMaxFeePerGas = originalTransactionParams.maxFeePerGas as\n | Hex\n | undefined;\n\n const currentMaxPriorityFeePerGas =\n originalTransactionParams.maxPriorityFeePerGas as Hex | undefined;\n\n if (\n !currentMaxFeePerGas ||\n !currentMaxPriorityFeePerGas ||\n currentMaxFeePerGas === '0x0' ||\n currentMaxPriorityFeePerGas === '0x0'\n ) {\n return undefined;\n }\n\n const maxFeePerGas = multiplyHex(currentMaxFeePerGas, rate);\n const maxPriorityFeePerGas = multiplyHex(currentMaxPriorityFeePerGas, rate);\n\n return { maxFeePerGas, maxPriorityFeePerGas };\n}\n\n/**\n * Generate the increased gas price.\n *\n * @param originalTransactionParams - The original transaction parameters.\n * @param rate - The rate by which to increase the existing gas fee properties.\n * @param newGasValues - Optional new gas values to use instead of increased the existing values.\n * @returns The new gas price.\n */\nfunction getIncreasedGasPrice(\n originalTransactionParams: TransactionParams,\n rate: number,\n newGasValues?: GasPriceValue | FeeMarketEIP1559Values,\n): Hex | undefined {\n if (newGasValues && 'gasPrice' in newGasValues) {\n return newGasValues.gasPrice as Hex;\n }\n\n const currentGasPrice = originalTransactionParams.gasPrice as Hex | undefined;\n\n if (!currentGasPrice || currentGasPrice === '0x0') {\n return undefined;\n }\n\n return multiplyHex(currentGasPrice, rate);\n}\n\n/**\n * Multiply a hex value by a multiplier.\n *\n * @param value - The hex value to multiply.\n * @param multiplier - The multiplier.\n * @returns The multiplied hex value.\n */\nfunction multiplyHex(value: Hex | undefined, multiplier: number): Hex {\n const decimalValue = convertHexToDecimal(value);\n const decimalResult = parseInt(`${decimalValue * multiplier}`, 10);\n\n return add0x(decimalResult.toString(16));\n}\n"]}
1
+ {"version":3,"file":"retry.cjs","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":";;;AAAA,iEAAiE;AAEjE,2CAAwC;AAQxC;;;;;;;GAOG;AACH,SAAgB,uCAAuC,CACrD,yBAA4C,EAC5C,IAAY,EACZ,YAAqD;IAErD,MAAM,WAAW,GAAG,oBAAoB,CACtC,yBAAyB,EACzB,IAAI,EACJ,YAAY,CACb,CAAC;IAEF,MAAM,aAAa,GAAG,sBAAsB,CAC1C,yBAAyB,EACzB,IAAI,EACJ,YAAY,CACb,CAAC;IAEF,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,WAAW,GAAsB;YACrC,GAAG,yBAAyB;YAC5B,GAAG,aAAa;SACjB,CAAC;QAEF,OAAO,WAAW,CAAC,QAAQ,CAAC;QAE5B,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,WAAW,GAAsB;YACrC,GAAG,yBAAyB;YAC5B,QAAQ,EAAE,WAAW;SACtB,CAAC;QAEF,OAAO,WAAW,CAAC,YAAY,CAAC;QAChC,OAAO,WAAW,CAAC,oBAAoB,CAAC;QAExC,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,MAAM,IAAI,KAAK,CACb,8EAA8E,CAC/E,CAAC;AACJ,CAAC;AA3CD,0FA2CC;AAED;;;;;;;GAOG;AACH,SAAS,sBAAsB,CAC7B,yBAA4C,EAC5C,IAAY,EACZ,YAAqD;IAErD,IACE,YAAY;QACZ,cAAc,IAAI,YAAY;QAC9B,sBAAsB,IAAI,YAAY,EACtC,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,mBAAmB,GAAG,yBAAyB,CAAC,YAEzC,CAAC;IAEd,MAAM,2BAA2B,GAC/B,yBAAyB,CAAC,oBAAuC,CAAC;IAEpE,IACE,CAAC,mBAAmB;QACpB,CAAC,2BAA2B;QAC5B,mBAAmB,KAAK,KAAK;QAC7B,2BAA2B,KAAK,KAAK,EACrC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,YAAY,GAAG,WAAW,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;IAC5D,MAAM,oBAAoB,GAAG,WAAW,CAAC,2BAA2B,EAAE,IAAI,CAAC,CAAC;IAE5E,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAChD,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,oBAAoB,CAC3B,yBAA4C,EAC5C,IAAY,EACZ,YAAqD;IAErD,IAAI,YAAY,IAAI,UAAU,IAAI,YAAY,EAAE,CAAC;QAC/C,OAAO,YAAY,CAAC,QAAe,CAAC;IACtC,CAAC;IAED,MAAM,eAAe,GAAG,yBAAyB,CAAC,QAA2B,CAAC;IAE9E,IAAI,CAAC,eAAe,IAAI,eAAe,KAAK,KAAK,EAAE,CAAC;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,WAAW,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,KAAsB,EAAE,UAAkB;IAC7D,MAAM,YAAY,GAAG,IAAA,sCAAmB,EAAC,KAAK,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,YAAY,GAAG,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IAEnE,OAAO,IAAA,aAAK,EAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC","sourcesContent":["import { convertHexToDecimal } from '@metamask/controller-utils';\nimport type { Hex } from '@metamask/utils';\nimport { add0x } from '@metamask/utils';\n\nimport type {\n FeeMarketEIP1559Values,\n GasPriceValue,\n TransactionParams,\n} from '../types.js';\n\n/**\n * Returns new transaction parameters with increased gas fees.\n *\n * @param originalTransactionParams - The original transaction parameters.\n * @param rate - The rate by which to increase the existing gas fee properties.\n * @param newGasValues - Optional new gas values to use instead of increased the existing values.\n * @returns The new transaction parameters with the increased gas fee properties.\n */\nexport function getTransactionParamsWithIncreasedGasFee(\n originalTransactionParams: TransactionParams,\n rate: number,\n newGasValues?: GasPriceValue | FeeMarketEIP1559Values,\n): TransactionParams {\n const newGasPrice = getIncreasedGasPrice(\n originalTransactionParams,\n rate,\n newGasValues,\n );\n\n const new1559Values = getIncreased1559Values(\n originalTransactionParams,\n rate,\n newGasValues,\n );\n\n if (new1559Values) {\n const newTxParams: TransactionParams = {\n ...originalTransactionParams,\n ...new1559Values,\n };\n\n delete newTxParams.gasPrice;\n\n return newTxParams;\n }\n\n if (newGasPrice) {\n const newTxParams: TransactionParams = {\n ...originalTransactionParams,\n gasPrice: newGasPrice,\n };\n\n delete newTxParams.maxFeePerGas;\n delete newTxParams.maxPriorityFeePerGas;\n\n return newTxParams;\n }\n\n throw new Error(\n 'Cannot increase gas fee as no current values and no new values were provided',\n );\n}\n\n/**\n * Generate the increased EIP-1559 gas properties.\n *\n * @param originalTransactionParams - The original transaction parameters.\n * @param rate - The rate by which to increase the existing gas fee properties.\n * @param newGasValues - Optional new gas values to use instead of increased the existing values.\n * @returns The new EIP-1559 gas properties.\n */\nfunction getIncreased1559Values(\n originalTransactionParams: TransactionParams,\n rate: number,\n newGasValues?: GasPriceValue | FeeMarketEIP1559Values,\n): FeeMarketEIP1559Values | undefined {\n if (\n newGasValues &&\n 'maxFeePerGas' in newGasValues &&\n 'maxPriorityFeePerGas' in newGasValues\n ) {\n return newGasValues;\n }\n\n const currentMaxFeePerGas = originalTransactionParams.maxFeePerGas as\n | Hex\n | undefined;\n\n const currentMaxPriorityFeePerGas =\n originalTransactionParams.maxPriorityFeePerGas as Hex | undefined;\n\n if (\n !currentMaxFeePerGas ||\n !currentMaxPriorityFeePerGas ||\n currentMaxFeePerGas === '0x0' ||\n currentMaxPriorityFeePerGas === '0x0'\n ) {\n return undefined;\n }\n\n const maxFeePerGas = multiplyHex(currentMaxFeePerGas, rate);\n const maxPriorityFeePerGas = multiplyHex(currentMaxPriorityFeePerGas, rate);\n\n return { maxFeePerGas, maxPriorityFeePerGas };\n}\n\n/**\n * Generate the increased gas price.\n *\n * @param originalTransactionParams - The original transaction parameters.\n * @param rate - The rate by which to increase the existing gas fee properties.\n * @param newGasValues - Optional new gas values to use instead of increased the existing values.\n * @returns The new gas price.\n */\nfunction getIncreasedGasPrice(\n originalTransactionParams: TransactionParams,\n rate: number,\n newGasValues?: GasPriceValue | FeeMarketEIP1559Values,\n): Hex | undefined {\n if (newGasValues && 'gasPrice' in newGasValues) {\n return newGasValues.gasPrice as Hex;\n }\n\n const currentGasPrice = originalTransactionParams.gasPrice as Hex | undefined;\n\n if (!currentGasPrice || currentGasPrice === '0x0') {\n return undefined;\n }\n\n return multiplyHex(currentGasPrice, rate);\n}\n\n/**\n * Multiply a hex value by a multiplier.\n *\n * @param value - The hex value to multiply.\n * @param multiplier - The multiplier.\n * @returns The multiplied hex value.\n */\nfunction multiplyHex(value: Hex | undefined, multiplier: number): Hex {\n const decimalValue = convertHexToDecimal(value);\n const decimalResult = parseInt(`${decimalValue * multiplier}`, 10);\n\n return add0x(decimalResult.toString(16));\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"retry.d.cts","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,sBAAsB,EACtB,aAAa,EACb,iBAAiB,EAClB,qBAAiB;AAElB;;;;;;;GAOG;AACH,wBAAgB,uCAAuC,CACrD,yBAAyB,EAAE,iBAAiB,EAC5C,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,aAAa,GAAG,sBAAsB,GACpD,iBAAiB,CAuCnB"}
1
+ {"version":3,"file":"retry.d.cts","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,sBAAsB,EACtB,aAAa,EACb,iBAAiB,EAClB,qBAAoB;AAErB;;;;;;;GAOG;AACH,wBAAgB,uCAAuC,CACrD,yBAAyB,EAAE,iBAAiB,EAC5C,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,aAAa,GAAG,sBAAsB,GACpD,iBAAiB,CAuCnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"retry.d.mts","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,sBAAsB,EACtB,aAAa,EACb,iBAAiB,EAClB,qBAAiB;AAElB;;;;;;;GAOG;AACH,wBAAgB,uCAAuC,CACrD,yBAAyB,EAAE,iBAAiB,EAC5C,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,aAAa,GAAG,sBAAsB,GACpD,iBAAiB,CAuCnB"}
1
+ {"version":3,"file":"retry.d.mts","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,sBAAsB,EACtB,aAAa,EACb,iBAAiB,EAClB,qBAAoB;AAErB;;;;;;;GAOG;AACH,wBAAgB,uCAAuC,CACrD,yBAAyB,EAAE,iBAAiB,EAC5C,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,aAAa,GAAG,sBAAsB,GACpD,iBAAiB,CAuCnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"retry.mjs","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,mCAAmC;AAEjE,OAAO,EAAE,KAAK,EAAE,wBAAwB;AAQxC;;;;;;;GAOG;AACH,MAAM,UAAU,uCAAuC,CACrD,yBAA4C,EAC5C,IAAY,EACZ,YAAqD;IAErD,MAAM,WAAW,GAAG,oBAAoB,CACtC,yBAAyB,EACzB,IAAI,EACJ,YAAY,CACb,CAAC;IAEF,MAAM,aAAa,GAAG,sBAAsB,CAC1C,yBAAyB,EACzB,IAAI,EACJ,YAAY,CACb,CAAC;IAEF,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,WAAW,GAAsB;YACrC,GAAG,yBAAyB;YAC5B,GAAG,aAAa;SACjB,CAAC;QAEF,OAAO,WAAW,CAAC,QAAQ,CAAC;QAE5B,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,WAAW,GAAsB;YACrC,GAAG,yBAAyB;YAC5B,QAAQ,EAAE,WAAW;SACtB,CAAC;QAEF,OAAO,WAAW,CAAC,YAAY,CAAC;QAChC,OAAO,WAAW,CAAC,oBAAoB,CAAC;QAExC,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,MAAM,IAAI,KAAK,CACb,8EAA8E,CAC/E,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,sBAAsB,CAC7B,yBAA4C,EAC5C,IAAY,EACZ,YAAqD;IAErD,IACE,YAAY;QACZ,cAAc,IAAI,YAAY;QAC9B,sBAAsB,IAAI,YAAY,EACtC,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,mBAAmB,GAAG,yBAAyB,CAAC,YAEzC,CAAC;IAEd,MAAM,2BAA2B,GAC/B,yBAAyB,CAAC,oBAAuC,CAAC;IAEpE,IACE,CAAC,mBAAmB;QACpB,CAAC,2BAA2B;QAC5B,mBAAmB,KAAK,KAAK;QAC7B,2BAA2B,KAAK,KAAK,EACrC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,YAAY,GAAG,WAAW,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;IAC5D,MAAM,oBAAoB,GAAG,WAAW,CAAC,2BAA2B,EAAE,IAAI,CAAC,CAAC;IAE5E,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAChD,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,oBAAoB,CAC3B,yBAA4C,EAC5C,IAAY,EACZ,YAAqD;IAErD,IAAI,YAAY,IAAI,UAAU,IAAI,YAAY,EAAE,CAAC;QAC/C,OAAO,YAAY,CAAC,QAAe,CAAC;IACtC,CAAC;IAED,MAAM,eAAe,GAAG,yBAAyB,CAAC,QAA2B,CAAC;IAE9E,IAAI,CAAC,eAAe,IAAI,eAAe,KAAK,KAAK,EAAE,CAAC;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,WAAW,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,KAAsB,EAAE,UAAkB;IAC7D,MAAM,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,YAAY,GAAG,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IAEnE,OAAO,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC","sourcesContent":["import { convertHexToDecimal } from '@metamask/controller-utils';\nimport type { Hex } from '@metamask/utils';\nimport { add0x } from '@metamask/utils';\n\nimport type {\n FeeMarketEIP1559Values,\n GasPriceValue,\n TransactionParams,\n} from '../types';\n\n/**\n * Returns new transaction parameters with increased gas fees.\n *\n * @param originalTransactionParams - The original transaction parameters.\n * @param rate - The rate by which to increase the existing gas fee properties.\n * @param newGasValues - Optional new gas values to use instead of increased the existing values.\n * @returns The new transaction parameters with the increased gas fee properties.\n */\nexport function getTransactionParamsWithIncreasedGasFee(\n originalTransactionParams: TransactionParams,\n rate: number,\n newGasValues?: GasPriceValue | FeeMarketEIP1559Values,\n): TransactionParams {\n const newGasPrice = getIncreasedGasPrice(\n originalTransactionParams,\n rate,\n newGasValues,\n );\n\n const new1559Values = getIncreased1559Values(\n originalTransactionParams,\n rate,\n newGasValues,\n );\n\n if (new1559Values) {\n const newTxParams: TransactionParams = {\n ...originalTransactionParams,\n ...new1559Values,\n };\n\n delete newTxParams.gasPrice;\n\n return newTxParams;\n }\n\n if (newGasPrice) {\n const newTxParams: TransactionParams = {\n ...originalTransactionParams,\n gasPrice: newGasPrice,\n };\n\n delete newTxParams.maxFeePerGas;\n delete newTxParams.maxPriorityFeePerGas;\n\n return newTxParams;\n }\n\n throw new Error(\n 'Cannot increase gas fee as no current values and no new values were provided',\n );\n}\n\n/**\n * Generate the increased EIP-1559 gas properties.\n *\n * @param originalTransactionParams - The original transaction parameters.\n * @param rate - The rate by which to increase the existing gas fee properties.\n * @param newGasValues - Optional new gas values to use instead of increased the existing values.\n * @returns The new EIP-1559 gas properties.\n */\nfunction getIncreased1559Values(\n originalTransactionParams: TransactionParams,\n rate: number,\n newGasValues?: GasPriceValue | FeeMarketEIP1559Values,\n): FeeMarketEIP1559Values | undefined {\n if (\n newGasValues &&\n 'maxFeePerGas' in newGasValues &&\n 'maxPriorityFeePerGas' in newGasValues\n ) {\n return newGasValues;\n }\n\n const currentMaxFeePerGas = originalTransactionParams.maxFeePerGas as\n | Hex\n | undefined;\n\n const currentMaxPriorityFeePerGas =\n originalTransactionParams.maxPriorityFeePerGas as Hex | undefined;\n\n if (\n !currentMaxFeePerGas ||\n !currentMaxPriorityFeePerGas ||\n currentMaxFeePerGas === '0x0' ||\n currentMaxPriorityFeePerGas === '0x0'\n ) {\n return undefined;\n }\n\n const maxFeePerGas = multiplyHex(currentMaxFeePerGas, rate);\n const maxPriorityFeePerGas = multiplyHex(currentMaxPriorityFeePerGas, rate);\n\n return { maxFeePerGas, maxPriorityFeePerGas };\n}\n\n/**\n * Generate the increased gas price.\n *\n * @param originalTransactionParams - The original transaction parameters.\n * @param rate - The rate by which to increase the existing gas fee properties.\n * @param newGasValues - Optional new gas values to use instead of increased the existing values.\n * @returns The new gas price.\n */\nfunction getIncreasedGasPrice(\n originalTransactionParams: TransactionParams,\n rate: number,\n newGasValues?: GasPriceValue | FeeMarketEIP1559Values,\n): Hex | undefined {\n if (newGasValues && 'gasPrice' in newGasValues) {\n return newGasValues.gasPrice as Hex;\n }\n\n const currentGasPrice = originalTransactionParams.gasPrice as Hex | undefined;\n\n if (!currentGasPrice || currentGasPrice === '0x0') {\n return undefined;\n }\n\n return multiplyHex(currentGasPrice, rate);\n}\n\n/**\n * Multiply a hex value by a multiplier.\n *\n * @param value - The hex value to multiply.\n * @param multiplier - The multiplier.\n * @returns The multiplied hex value.\n */\nfunction multiplyHex(value: Hex | undefined, multiplier: number): Hex {\n const decimalValue = convertHexToDecimal(value);\n const decimalResult = parseInt(`${decimalValue * multiplier}`, 10);\n\n return add0x(decimalResult.toString(16));\n}\n"]}
1
+ {"version":3,"file":"retry.mjs","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,mCAAmC;AAEjE,OAAO,EAAE,KAAK,EAAE,wBAAwB;AAQxC;;;;;;;GAOG;AACH,MAAM,UAAU,uCAAuC,CACrD,yBAA4C,EAC5C,IAAY,EACZ,YAAqD;IAErD,MAAM,WAAW,GAAG,oBAAoB,CACtC,yBAAyB,EACzB,IAAI,EACJ,YAAY,CACb,CAAC;IAEF,MAAM,aAAa,GAAG,sBAAsB,CAC1C,yBAAyB,EACzB,IAAI,EACJ,YAAY,CACb,CAAC;IAEF,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,WAAW,GAAsB;YACrC,GAAG,yBAAyB;YAC5B,GAAG,aAAa;SACjB,CAAC;QAEF,OAAO,WAAW,CAAC,QAAQ,CAAC;QAE5B,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,WAAW,GAAsB;YACrC,GAAG,yBAAyB;YAC5B,QAAQ,EAAE,WAAW;SACtB,CAAC;QAEF,OAAO,WAAW,CAAC,YAAY,CAAC;QAChC,OAAO,WAAW,CAAC,oBAAoB,CAAC;QAExC,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,MAAM,IAAI,KAAK,CACb,8EAA8E,CAC/E,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,sBAAsB,CAC7B,yBAA4C,EAC5C,IAAY,EACZ,YAAqD;IAErD,IACE,YAAY;QACZ,cAAc,IAAI,YAAY;QAC9B,sBAAsB,IAAI,YAAY,EACtC,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,mBAAmB,GAAG,yBAAyB,CAAC,YAEzC,CAAC;IAEd,MAAM,2BAA2B,GAC/B,yBAAyB,CAAC,oBAAuC,CAAC;IAEpE,IACE,CAAC,mBAAmB;QACpB,CAAC,2BAA2B;QAC5B,mBAAmB,KAAK,KAAK;QAC7B,2BAA2B,KAAK,KAAK,EACrC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,YAAY,GAAG,WAAW,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;IAC5D,MAAM,oBAAoB,GAAG,WAAW,CAAC,2BAA2B,EAAE,IAAI,CAAC,CAAC;IAE5E,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAChD,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,oBAAoB,CAC3B,yBAA4C,EAC5C,IAAY,EACZ,YAAqD;IAErD,IAAI,YAAY,IAAI,UAAU,IAAI,YAAY,EAAE,CAAC;QAC/C,OAAO,YAAY,CAAC,QAAe,CAAC;IACtC,CAAC;IAED,MAAM,eAAe,GAAG,yBAAyB,CAAC,QAA2B,CAAC;IAE9E,IAAI,CAAC,eAAe,IAAI,eAAe,KAAK,KAAK,EAAE,CAAC;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,WAAW,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,KAAsB,EAAE,UAAkB;IAC7D,MAAM,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,YAAY,GAAG,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IAEnE,OAAO,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC","sourcesContent":["import { convertHexToDecimal } from '@metamask/controller-utils';\nimport type { Hex } from '@metamask/utils';\nimport { add0x } from '@metamask/utils';\n\nimport type {\n FeeMarketEIP1559Values,\n GasPriceValue,\n TransactionParams,\n} from '../types.js';\n\n/**\n * Returns new transaction parameters with increased gas fees.\n *\n * @param originalTransactionParams - The original transaction parameters.\n * @param rate - The rate by which to increase the existing gas fee properties.\n * @param newGasValues - Optional new gas values to use instead of increased the existing values.\n * @returns The new transaction parameters with the increased gas fee properties.\n */\nexport function getTransactionParamsWithIncreasedGasFee(\n originalTransactionParams: TransactionParams,\n rate: number,\n newGasValues?: GasPriceValue | FeeMarketEIP1559Values,\n): TransactionParams {\n const newGasPrice = getIncreasedGasPrice(\n originalTransactionParams,\n rate,\n newGasValues,\n );\n\n const new1559Values = getIncreased1559Values(\n originalTransactionParams,\n rate,\n newGasValues,\n );\n\n if (new1559Values) {\n const newTxParams: TransactionParams = {\n ...originalTransactionParams,\n ...new1559Values,\n };\n\n delete newTxParams.gasPrice;\n\n return newTxParams;\n }\n\n if (newGasPrice) {\n const newTxParams: TransactionParams = {\n ...originalTransactionParams,\n gasPrice: newGasPrice,\n };\n\n delete newTxParams.maxFeePerGas;\n delete newTxParams.maxPriorityFeePerGas;\n\n return newTxParams;\n }\n\n throw new Error(\n 'Cannot increase gas fee as no current values and no new values were provided',\n );\n}\n\n/**\n * Generate the increased EIP-1559 gas properties.\n *\n * @param originalTransactionParams - The original transaction parameters.\n * @param rate - The rate by which to increase the existing gas fee properties.\n * @param newGasValues - Optional new gas values to use instead of increased the existing values.\n * @returns The new EIP-1559 gas properties.\n */\nfunction getIncreased1559Values(\n originalTransactionParams: TransactionParams,\n rate: number,\n newGasValues?: GasPriceValue | FeeMarketEIP1559Values,\n): FeeMarketEIP1559Values | undefined {\n if (\n newGasValues &&\n 'maxFeePerGas' in newGasValues &&\n 'maxPriorityFeePerGas' in newGasValues\n ) {\n return newGasValues;\n }\n\n const currentMaxFeePerGas = originalTransactionParams.maxFeePerGas as\n | Hex\n | undefined;\n\n const currentMaxPriorityFeePerGas =\n originalTransactionParams.maxPriorityFeePerGas as Hex | undefined;\n\n if (\n !currentMaxFeePerGas ||\n !currentMaxPriorityFeePerGas ||\n currentMaxFeePerGas === '0x0' ||\n currentMaxPriorityFeePerGas === '0x0'\n ) {\n return undefined;\n }\n\n const maxFeePerGas = multiplyHex(currentMaxFeePerGas, rate);\n const maxPriorityFeePerGas = multiplyHex(currentMaxPriorityFeePerGas, rate);\n\n return { maxFeePerGas, maxPriorityFeePerGas };\n}\n\n/**\n * Generate the increased gas price.\n *\n * @param originalTransactionParams - The original transaction parameters.\n * @param rate - The rate by which to increase the existing gas fee properties.\n * @param newGasValues - Optional new gas values to use instead of increased the existing values.\n * @returns The new gas price.\n */\nfunction getIncreasedGasPrice(\n originalTransactionParams: TransactionParams,\n rate: number,\n newGasValues?: GasPriceValue | FeeMarketEIP1559Values,\n): Hex | undefined {\n if (newGasValues && 'gasPrice' in newGasValues) {\n return newGasValues.gasPrice as Hex;\n }\n\n const currentGasPrice = originalTransactionParams.gasPrice as Hex | undefined;\n\n if (!currentGasPrice || currentGasPrice === '0x0') {\n return undefined;\n }\n\n return multiplyHex(currentGasPrice, rate);\n}\n\n/**\n * Multiply a hex value by a multiplier.\n *\n * @param value - The hex value to multiply.\n * @param multiplier - The multiplier.\n * @returns The multiplied hex value.\n */\nfunction multiplyHex(value: Hex | undefined, multiplier: number): Hex {\n const decimalValue = convertHexToDecimal(value);\n const decimalResult = parseInt(`${decimalValue * multiplier}`, 10);\n\n return add0x(decimalResult.toString(16));\n}\n"]}
@@ -2,9 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.extractRevert = exports.decodeRevert = exports.OnChainFailureError = void 0;
4
4
  const abi_1 = require("@ethersproject/abi");
5
- const logger_1 = require("../logger.cjs");
6
- const provider_1 = require("./provider.cjs");
7
- const log = (0, logger_1.createModuleLogger)(logger_1.projectLogger, 'revert-reason');
5
+ const logger_js_1 = require("../logger.cjs");
6
+ const provider_js_1 = require("./provider.cjs");
7
+ const log = (0, logger_js_1.createModuleLogger)(logger_js_1.projectLogger, 'revert-reason');
8
8
  const ERROR_SELECTOR = '0x08c379a0';
9
9
  const PANIC_SELECTOR = '0x4e487b71';
10
10
  /**
@@ -96,7 +96,7 @@ async function extractRevert({ messenger, networkClientId, txParams, }) {
96
96
  callParams.value = txParams.value;
97
97
  }
98
98
  try {
99
- await (0, provider_1.rpcRequest)({
99
+ await (0, provider_js_1.rpcRequest)({
100
100
  messenger,
101
101
  networkClientId,
102
102
  // `eth_estimateGas` is used instead of `eth_call` to bypass
@@ -1 +1 @@
1
- {"version":3,"file":"revert-reason.cjs","sourceRoot":"","sources":["../../src/utils/revert-reason.ts"],"names":[],"mappings":"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","sourcesContent":["import { defaultAbiCoder } from '@ethersproject/abi';\nimport type { NetworkClientId } from '@metamask/network-controller';\nimport type { Hex } from '@metamask/utils';\n\nimport { createModuleLogger, projectLogger } from '../logger';\nimport type { TransactionControllerMessenger } from '../TransactionController';\nimport type { Revert, TransactionParams } from '../types';\nimport { rpcRequest } from './provider';\n\nconst log = createModuleLogger(projectLogger, 'revert-reason');\n\nconst ERROR_SELECTOR = '0x08c379a0';\nconst PANIC_SELECTOR = '0x4e487b71';\n\n/**\n * Solidity panic code descriptions.\n *\n * @see https://docs.soliditylang.org/en/latest/control-structures.html#panic-via-assert-and-error-via-require\n */\nconst PANIC_CODE_MESSAGES: Record<string, string> = {\n '0x00': 'Generic compiler panic',\n '0x01': 'Assertion failed',\n '0x11': 'Arithmetic overflow or underflow',\n '0x12': 'Division or modulo by zero',\n '0x21': 'Invalid enum value',\n '0x22': 'Incorrectly encoded storage byte array',\n '0x31': 'Pop on empty array',\n '0x32': 'Array index out of bounds',\n '0x41': 'Memory allocation overflow',\n '0x51': 'Call to zero-initialized function',\n};\n\n/**\n * Input accepted by `decodeRevert`. Either raw revert data hex, or a\n * thrown JSON-RPC error carrying the data on `data` (standard) or\n * nested `data.data` (some older node forks).\n */\ntype RevertInput =\n | Hex\n | undefined\n | { data?: Hex | { data?: Hex } | null }\n | null;\n\n/**\n * Error thrown by `PendingTransactionTracker` when a transaction failed\n * on-chain, carrying any decoded revert.\n */\nexport class OnChainFailureError extends Error {\n readonly revert?: Revert;\n\n constructor(revert?: Revert) {\n const suffix = revert?.message ? `: ${revert.message}` : '';\n super(`Transaction failed on-chain${suffix}`);\n this.name = 'OnChainFailureError';\n this.revert = revert;\n }\n}\n\n/**\n * Decode an EVM revert into a `Revert` containing both the decoded\n * human-readable message and the original raw `data`. Accepts either a\n * raw revert data hex string, or a thrown JSON-RPC error of the shape\n * `{ data: Hex | { data: Hex } }`. Handles `Error(string)`,\n * `Panic(uint256)`, and falls back to a raw `Custom error: 0x<selector>`\n * reference for unknown custom errors.\n *\n * @param input - Raw revert data hex, or a thrown JSON-RPC error.\n * @param source - Optional label included in debug logs to identify the\n * caller (e.g. `gas`, `simulation`).\n * @returns A `Revert` if any data was found, otherwise `undefined`.\n */\nexport function decodeRevert(\n input: RevertInput,\n source?: string,\n): Revert | undefined {\n const data = toRevertDataHex(input);\n if (!data) {\n return undefined;\n }\n\n const message = decodeMessage(data);\n const revert: Revert = {\n ...(message ? { message } : {}),\n data,\n };\n\n logRevert(source, revert);\n return revert;\n}\n\n/**\n * Replay a transaction that failed on-chain via `eth_estimateGas` to\n * recover the revert reason. `eth_estimateGas` is used instead of\n * `eth_call` to avoid `RetryOnEmptyMiddleware`, which retries reverted\n * `eth_call` responses 10 times and discards the original error data.\n *\n * Always resolves; never throws.\n *\n * @param input - Extraction inputs.\n * @param input.messenger - Transaction controller messenger.\n * @param input.networkClientId - Network client ID to replay against.\n * @param input.txParams - Transaction parameters for the failed tx.\n * @returns A `Revert`, or `undefined` if none could be observed.\n */\nexport async function extractRevert({\n messenger,\n networkClientId,\n txParams,\n}: {\n messenger: TransactionControllerMessenger;\n networkClientId: NetworkClientId;\n txParams: TransactionParams;\n}): Promise<Revert | undefined> {\n if (!txParams?.to && !txParams?.data) {\n return undefined;\n }\n\n const callParams: Record<string, string> = {};\n if (txParams.from) {\n callParams.from = txParams.from;\n }\n if (txParams.to) {\n callParams.to = txParams.to;\n }\n if (txParams.data) {\n callParams.data = txParams.data;\n }\n if (txParams.value) {\n callParams.value = txParams.value;\n }\n\n try {\n await rpcRequest({\n messenger,\n networkClientId,\n // `eth_estimateGas` is used instead of `eth_call` to bypass\n // `RetryOnEmptyMiddleware`, which retries reverted `eth_call`\n // responses and discards the original revert data.\n method: 'eth_estimateGas',\n params: [callParams],\n });\n return undefined;\n } catch (error: unknown) {\n return decodeRevert(error as RevertInput, 'receipt');\n }\n}\n\n/**\n * Coerce a `RevertInput` to a non-empty revert data hex string.\n *\n * @param input - Raw hex or thrown JSON-RPC error.\n * @returns The revert data hex, or `undefined`.\n */\nfunction toRevertDataHex(input: RevertInput): Hex | undefined {\n if (isHex(input)) {\n return input;\n }\n\n if (typeof input !== 'object' || input === null) {\n return undefined;\n }\n\n const { data } = input;\n if (isHex(data)) {\n return data;\n }\n\n if (typeof data === 'object' && data !== null && isHex(data.data)) {\n return data.data;\n }\n\n return undefined;\n}\n\n/**\n * Type guard for non-empty `0x`-prefixed hex strings.\n *\n * @param value - Value to test.\n * @returns Whether the value is a non-empty hex string.\n */\nfunction isHex(value: unknown): value is Hex {\n return typeof value === 'string' && value.startsWith('0x') && value !== '0x';\n}\n\n/**\n * Decode raw revert data into a human-readable string.\n *\n * @param data - Raw revert data hex.\n * @returns Decoded message, or `undefined` if undecodable.\n */\nfunction decodeMessage(data: Hex | undefined): string | undefined {\n if (!data || data === '0x') {\n return undefined;\n }\n\n if (data.length < 10) {\n return `execution reverted (${data})`;\n }\n\n const selector = data.slice(0, 10).toLowerCase();\n const payload = `0x${data.slice(10)}`;\n\n if (selector === ERROR_SELECTOR) {\n try {\n const [reason] = defaultAbiCoder.decode(['string'], payload);\n return typeof reason === 'string' ? reason : undefined;\n } catch {\n return undefined;\n }\n }\n\n if (selector === PANIC_SELECTOR) {\n try {\n const [code] = defaultAbiCoder.decode(['uint256'], payload) as [\n { toHexString: () => string },\n ];\n const codeHex = code.toHexString().toLowerCase() as Hex;\n const description = PANIC_CODE_MESSAGES[codeHex] ?? 'Unknown panic';\n return `Panic: ${description}`;\n } catch {\n return undefined;\n }\n }\n\n return `Custom error: ${selector}`;\n}\n\n/**\n * Emit a single structured debug line for a decoded revert.\n *\n * @param source - Source label, when known.\n * @param revert - Resolved Revert.\n */\nfunction logRevert(source: string | undefined, revert: Revert): void {\n log('Decoded revert', source ?? 'unknown', revert);\n}\n"]}
1
+ {"version":3,"file":"revert-reason.cjs","sourceRoot":"","sources":["../../src/utils/revert-reason.ts"],"names":[],"mappings":"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","sourcesContent":["import { defaultAbiCoder } from '@ethersproject/abi';\nimport type { NetworkClientId } from '@metamask/network-controller';\nimport type { Hex } from '@metamask/utils';\n\nimport { createModuleLogger, projectLogger } from '../logger.js';\nimport type { TransactionControllerMessenger } from '../TransactionController.js';\nimport type { Revert, TransactionParams } from '../types.js';\nimport { rpcRequest } from './provider.js';\n\nconst log = createModuleLogger(projectLogger, 'revert-reason');\n\nconst ERROR_SELECTOR = '0x08c379a0';\nconst PANIC_SELECTOR = '0x4e487b71';\n\n/**\n * Solidity panic code descriptions.\n *\n * @see https://docs.soliditylang.org/en/latest/control-structures.html#panic-via-assert-and-error-via-require\n */\nconst PANIC_CODE_MESSAGES: Record<string, string> = {\n '0x00': 'Generic compiler panic',\n '0x01': 'Assertion failed',\n '0x11': 'Arithmetic overflow or underflow',\n '0x12': 'Division or modulo by zero',\n '0x21': 'Invalid enum value',\n '0x22': 'Incorrectly encoded storage byte array',\n '0x31': 'Pop on empty array',\n '0x32': 'Array index out of bounds',\n '0x41': 'Memory allocation overflow',\n '0x51': 'Call to zero-initialized function',\n};\n\n/**\n * Input accepted by `decodeRevert`. Either raw revert data hex, or a\n * thrown JSON-RPC error carrying the data on `data` (standard) or\n * nested `data.data` (some older node forks).\n */\ntype RevertInput =\n | Hex\n | undefined\n | { data?: Hex | { data?: Hex } | null }\n | null;\n\n/**\n * Error thrown by `PendingTransactionTracker` when a transaction failed\n * on-chain, carrying any decoded revert.\n */\nexport class OnChainFailureError extends Error {\n readonly revert?: Revert;\n\n constructor(revert?: Revert) {\n const suffix = revert?.message ? `: ${revert.message}` : '';\n super(`Transaction failed on-chain${suffix}`);\n this.name = 'OnChainFailureError';\n this.revert = revert;\n }\n}\n\n/**\n * Decode an EVM revert into a `Revert` containing both the decoded\n * human-readable message and the original raw `data`. Accepts either a\n * raw revert data hex string, or a thrown JSON-RPC error of the shape\n * `{ data: Hex | { data: Hex } }`. Handles `Error(string)`,\n * `Panic(uint256)`, and falls back to a raw `Custom error: 0x<selector>`\n * reference for unknown custom errors.\n *\n * @param input - Raw revert data hex, or a thrown JSON-RPC error.\n * @param source - Optional label included in debug logs to identify the\n * caller (e.g. `gas`, `simulation`).\n * @returns A `Revert` if any data was found, otherwise `undefined`.\n */\nexport function decodeRevert(\n input: RevertInput,\n source?: string,\n): Revert | undefined {\n const data = toRevertDataHex(input);\n if (!data) {\n return undefined;\n }\n\n const message = decodeMessage(data);\n const revert: Revert = {\n ...(message ? { message } : {}),\n data,\n };\n\n logRevert(source, revert);\n return revert;\n}\n\n/**\n * Replay a transaction that failed on-chain via `eth_estimateGas` to\n * recover the revert reason. `eth_estimateGas` is used instead of\n * `eth_call` to avoid `RetryOnEmptyMiddleware`, which retries reverted\n * `eth_call` responses 10 times and discards the original error data.\n *\n * Always resolves; never throws.\n *\n * @param input - Extraction inputs.\n * @param input.messenger - Transaction controller messenger.\n * @param input.networkClientId - Network client ID to replay against.\n * @param input.txParams - Transaction parameters for the failed tx.\n * @returns A `Revert`, or `undefined` if none could be observed.\n */\nexport async function extractRevert({\n messenger,\n networkClientId,\n txParams,\n}: {\n messenger: TransactionControllerMessenger;\n networkClientId: NetworkClientId;\n txParams: TransactionParams;\n}): Promise<Revert | undefined> {\n if (!txParams?.to && !txParams?.data) {\n return undefined;\n }\n\n const callParams: Record<string, string> = {};\n if (txParams.from) {\n callParams.from = txParams.from;\n }\n if (txParams.to) {\n callParams.to = txParams.to;\n }\n if (txParams.data) {\n callParams.data = txParams.data;\n }\n if (txParams.value) {\n callParams.value = txParams.value;\n }\n\n try {\n await rpcRequest({\n messenger,\n networkClientId,\n // `eth_estimateGas` is used instead of `eth_call` to bypass\n // `RetryOnEmptyMiddleware`, which retries reverted `eth_call`\n // responses and discards the original revert data.\n method: 'eth_estimateGas',\n params: [callParams],\n });\n return undefined;\n } catch (error: unknown) {\n return decodeRevert(error as RevertInput, 'receipt');\n }\n}\n\n/**\n * Coerce a `RevertInput` to a non-empty revert data hex string.\n *\n * @param input - Raw hex or thrown JSON-RPC error.\n * @returns The revert data hex, or `undefined`.\n */\nfunction toRevertDataHex(input: RevertInput): Hex | undefined {\n if (isHex(input)) {\n return input;\n }\n\n if (typeof input !== 'object' || input === null) {\n return undefined;\n }\n\n const { data } = input;\n if (isHex(data)) {\n return data;\n }\n\n if (typeof data === 'object' && data !== null && isHex(data.data)) {\n return data.data;\n }\n\n return undefined;\n}\n\n/**\n * Type guard for non-empty `0x`-prefixed hex strings.\n *\n * @param value - Value to test.\n * @returns Whether the value is a non-empty hex string.\n */\nfunction isHex(value: unknown): value is Hex {\n return typeof value === 'string' && value.startsWith('0x') && value !== '0x';\n}\n\n/**\n * Decode raw revert data into a human-readable string.\n *\n * @param data - Raw revert data hex.\n * @returns Decoded message, or `undefined` if undecodable.\n */\nfunction decodeMessage(data: Hex | undefined): string | undefined {\n if (!data || data === '0x') {\n return undefined;\n }\n\n if (data.length < 10) {\n return `execution reverted (${data})`;\n }\n\n const selector = data.slice(0, 10).toLowerCase();\n const payload = `0x${data.slice(10)}`;\n\n if (selector === ERROR_SELECTOR) {\n try {\n const [reason] = defaultAbiCoder.decode(['string'], payload);\n return typeof reason === 'string' ? reason : undefined;\n } catch {\n return undefined;\n }\n }\n\n if (selector === PANIC_SELECTOR) {\n try {\n const [code] = defaultAbiCoder.decode(['uint256'], payload) as [\n { toHexString: () => string },\n ];\n const codeHex = code.toHexString().toLowerCase() as Hex;\n const description = PANIC_CODE_MESSAGES[codeHex] ?? 'Unknown panic';\n return `Panic: ${description}`;\n } catch {\n return undefined;\n }\n }\n\n return `Custom error: ${selector}`;\n}\n\n/**\n * Emit a single structured debug line for a decoded revert.\n *\n * @param source - Source label, when known.\n * @param revert - Resolved Revert.\n */\nfunction logRevert(source: string | undefined, revert: Revert): void {\n log('Decoded revert', source ?? 'unknown', revert);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"revert-reason.d.cts","sourceRoot":"","sources":["../../src/utils/revert-reason.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,qCAAqC;AACpE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAiC;AAC/E,OAAO,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,qBAAiB;AA0B1D;;;;GAIG;AACH,KAAK,WAAW,GACZ,GAAG,GACH,SAAS,GACT;IAAE,IAAI,CAAC,EAAE,GAAG,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAA;KAAE,GAAG,IAAI,CAAA;CAAE,GACtC,IAAI,CAAC;AAET;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;gBAEb,MAAM,CAAC,EAAE,MAAM;CAM5B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,WAAW,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,GAAG,SAAS,CAcpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,aAAa,CAAC,EAClC,SAAS,EACT,eAAe,EACf,QAAQ,GACT,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,eAAe,EAAE,eAAe,CAAC;IACjC,QAAQ,EAAE,iBAAiB,CAAC;CAC7B,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAiC9B"}
1
+ {"version":3,"file":"revert-reason.d.cts","sourceRoot":"","sources":["../../src/utils/revert-reason.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,qCAAqC;AACpE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAoC;AAClF,OAAO,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,qBAAoB;AA0B7D;;;;GAIG;AACH,KAAK,WAAW,GACZ,GAAG,GACH,SAAS,GACT;IAAE,IAAI,CAAC,EAAE,GAAG,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAA;KAAE,GAAG,IAAI,CAAA;CAAE,GACtC,IAAI,CAAC;AAET;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;gBAEb,MAAM,CAAC,EAAE,MAAM;CAM5B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,WAAW,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,GAAG,SAAS,CAcpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,aAAa,CAAC,EAClC,SAAS,EACT,eAAe,EACf,QAAQ,GACT,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,eAAe,EAAE,eAAe,CAAC;IACjC,QAAQ,EAAE,iBAAiB,CAAC;CAC7B,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAiC9B"}
@@ -1 +1 @@
1
- {"version":3,"file":"revert-reason.d.mts","sourceRoot":"","sources":["../../src/utils/revert-reason.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,qCAAqC;AACpE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAiC;AAC/E,OAAO,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,qBAAiB;AA0B1D;;;;GAIG;AACH,KAAK,WAAW,GACZ,GAAG,GACH,SAAS,GACT;IAAE,IAAI,CAAC,EAAE,GAAG,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAA;KAAE,GAAG,IAAI,CAAA;CAAE,GACtC,IAAI,CAAC;AAET;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;gBAEb,MAAM,CAAC,EAAE,MAAM;CAM5B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,WAAW,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,GAAG,SAAS,CAcpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,aAAa,CAAC,EAClC,SAAS,EACT,eAAe,EACf,QAAQ,GACT,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,eAAe,EAAE,eAAe,CAAC;IACjC,QAAQ,EAAE,iBAAiB,CAAC;CAC7B,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAiC9B"}
1
+ {"version":3,"file":"revert-reason.d.mts","sourceRoot":"","sources":["../../src/utils/revert-reason.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,qCAAqC;AACpE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAoC;AAClF,OAAO,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,qBAAoB;AA0B7D;;;;GAIG;AACH,KAAK,WAAW,GACZ,GAAG,GACH,SAAS,GACT;IAAE,IAAI,CAAC,EAAE,GAAG,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAA;KAAE,GAAG,IAAI,CAAA;CAAE,GACtC,IAAI,CAAC;AAET;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;gBAEb,MAAM,CAAC,EAAE,MAAM;CAM5B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,WAAW,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,GAAG,SAAS,CAcpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,aAAa,CAAC,EAClC,SAAS,EACT,eAAe,EACf,QAAQ,GACT,EAAE;IACD,SAAS,EAAE,8BAA8B,CAAC;IAC1C,eAAe,EAAE,eAAe,CAAC;IACjC,QAAQ,EAAE,iBAAiB,CAAC;CAC7B,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAiC9B"}
@@ -1 +1 @@
1
- {"version":3,"file":"revert-reason.mjs","sourceRoot":"","sources":["../../src/utils/revert-reason.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,2BAA2B;AAIrD,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,sBAAkB;AAG9D,OAAO,EAAE,UAAU,EAAE,uBAAmB;AAExC,MAAM,GAAG,GAAG,kBAAkB,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;AAE/D,MAAM,cAAc,GAAG,YAAY,CAAC;AACpC,MAAM,cAAc,GAAG,YAAY,CAAC;AAEpC;;;;GAIG;AACH,MAAM,mBAAmB,GAA2B;IAClD,MAAM,EAAE,wBAAwB;IAChC,MAAM,EAAE,kBAAkB;IAC1B,MAAM,EAAE,kCAAkC;IAC1C,MAAM,EAAE,4BAA4B;IACpC,MAAM,EAAE,oBAAoB;IAC5B,MAAM,EAAE,wCAAwC;IAChD,MAAM,EAAE,oBAAoB;IAC5B,MAAM,EAAE,2BAA2B;IACnC,MAAM,EAAE,4BAA4B;IACpC,MAAM,EAAE,mCAAmC;CAC5C,CAAC;AAaF;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAG5C,YAAY,MAAe;QACzB,MAAM,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,KAAK,CAAC,8BAA8B,MAAM,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAkB,EAClB,MAAe;IAEf,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,MAAM,GAAW;QACrB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,IAAI;KACL,CAAC;IAEF,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAClC,SAAS,EACT,eAAe,EACf,QAAQ,GAKT;IACC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;QACrC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,UAAU,GAA2B,EAAE,CAAC;IAC9C,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClB,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAClC,CAAC;IACD,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;QAChB,UAAU,CAAC,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;IAC9B,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClB,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAClC,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnB,UAAU,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;IACpC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,UAAU,CAAC;YACf,SAAS;YACT,eAAe;YACf,4DAA4D;YAC5D,8DAA8D;YAC9D,mDAAmD;YACnD,MAAM,EAAE,iBAAiB;YACzB,MAAM,EAAE,CAAC,UAAU,CAAC;SACrB,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO,YAAY,CAAC,KAAoB,EAAE,SAAS,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,eAAe,CAAC,KAAkB;IACzC,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACjB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IACvB,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClE,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,SAAS,KAAK,CAAC,KAAc;IAC3B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC;AAC/E,CAAC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CAAC,IAAqB;IAC1C,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACrB,OAAO,uBAAuB,IAAI,GAAG,CAAC;IACxC,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACjD,MAAM,OAAO,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;IAEtC,IAAI,QAAQ,KAAK,cAAc,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;YAC7D,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,KAAK,cAAc,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,EAAE,OAAO,CAEzD,CAAC;YACF,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAS,CAAC;YACxD,MAAM,WAAW,GAAG,mBAAmB,CAAC,OAAO,CAAC,IAAI,eAAe,CAAC;YACpE,OAAO,UAAU,WAAW,EAAE,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,iBAAiB,QAAQ,EAAE,CAAC;AACrC,CAAC;AAED;;;;;GAKG;AACH,SAAS,SAAS,CAAC,MAA0B,EAAE,MAAc;IAC3D,GAAG,CAAC,gBAAgB,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,CAAC,CAAC;AACrD,CAAC","sourcesContent":["import { defaultAbiCoder } from '@ethersproject/abi';\nimport type { NetworkClientId } from '@metamask/network-controller';\nimport type { Hex } from '@metamask/utils';\n\nimport { createModuleLogger, projectLogger } from '../logger';\nimport type { TransactionControllerMessenger } from '../TransactionController';\nimport type { Revert, TransactionParams } from '../types';\nimport { rpcRequest } from './provider';\n\nconst log = createModuleLogger(projectLogger, 'revert-reason');\n\nconst ERROR_SELECTOR = '0x08c379a0';\nconst PANIC_SELECTOR = '0x4e487b71';\n\n/**\n * Solidity panic code descriptions.\n *\n * @see https://docs.soliditylang.org/en/latest/control-structures.html#panic-via-assert-and-error-via-require\n */\nconst PANIC_CODE_MESSAGES: Record<string, string> = {\n '0x00': 'Generic compiler panic',\n '0x01': 'Assertion failed',\n '0x11': 'Arithmetic overflow or underflow',\n '0x12': 'Division or modulo by zero',\n '0x21': 'Invalid enum value',\n '0x22': 'Incorrectly encoded storage byte array',\n '0x31': 'Pop on empty array',\n '0x32': 'Array index out of bounds',\n '0x41': 'Memory allocation overflow',\n '0x51': 'Call to zero-initialized function',\n};\n\n/**\n * Input accepted by `decodeRevert`. Either raw revert data hex, or a\n * thrown JSON-RPC error carrying the data on `data` (standard) or\n * nested `data.data` (some older node forks).\n */\ntype RevertInput =\n | Hex\n | undefined\n | { data?: Hex | { data?: Hex } | null }\n | null;\n\n/**\n * Error thrown by `PendingTransactionTracker` when a transaction failed\n * on-chain, carrying any decoded revert.\n */\nexport class OnChainFailureError extends Error {\n readonly revert?: Revert;\n\n constructor(revert?: Revert) {\n const suffix = revert?.message ? `: ${revert.message}` : '';\n super(`Transaction failed on-chain${suffix}`);\n this.name = 'OnChainFailureError';\n this.revert = revert;\n }\n}\n\n/**\n * Decode an EVM revert into a `Revert` containing both the decoded\n * human-readable message and the original raw `data`. Accepts either a\n * raw revert data hex string, or a thrown JSON-RPC error of the shape\n * `{ data: Hex | { data: Hex } }`. Handles `Error(string)`,\n * `Panic(uint256)`, and falls back to a raw `Custom error: 0x<selector>`\n * reference for unknown custom errors.\n *\n * @param input - Raw revert data hex, or a thrown JSON-RPC error.\n * @param source - Optional label included in debug logs to identify the\n * caller (e.g. `gas`, `simulation`).\n * @returns A `Revert` if any data was found, otherwise `undefined`.\n */\nexport function decodeRevert(\n input: RevertInput,\n source?: string,\n): Revert | undefined {\n const data = toRevertDataHex(input);\n if (!data) {\n return undefined;\n }\n\n const message = decodeMessage(data);\n const revert: Revert = {\n ...(message ? { message } : {}),\n data,\n };\n\n logRevert(source, revert);\n return revert;\n}\n\n/**\n * Replay a transaction that failed on-chain via `eth_estimateGas` to\n * recover the revert reason. `eth_estimateGas` is used instead of\n * `eth_call` to avoid `RetryOnEmptyMiddleware`, which retries reverted\n * `eth_call` responses 10 times and discards the original error data.\n *\n * Always resolves; never throws.\n *\n * @param input - Extraction inputs.\n * @param input.messenger - Transaction controller messenger.\n * @param input.networkClientId - Network client ID to replay against.\n * @param input.txParams - Transaction parameters for the failed tx.\n * @returns A `Revert`, or `undefined` if none could be observed.\n */\nexport async function extractRevert({\n messenger,\n networkClientId,\n txParams,\n}: {\n messenger: TransactionControllerMessenger;\n networkClientId: NetworkClientId;\n txParams: TransactionParams;\n}): Promise<Revert | undefined> {\n if (!txParams?.to && !txParams?.data) {\n return undefined;\n }\n\n const callParams: Record<string, string> = {};\n if (txParams.from) {\n callParams.from = txParams.from;\n }\n if (txParams.to) {\n callParams.to = txParams.to;\n }\n if (txParams.data) {\n callParams.data = txParams.data;\n }\n if (txParams.value) {\n callParams.value = txParams.value;\n }\n\n try {\n await rpcRequest({\n messenger,\n networkClientId,\n // `eth_estimateGas` is used instead of `eth_call` to bypass\n // `RetryOnEmptyMiddleware`, which retries reverted `eth_call`\n // responses and discards the original revert data.\n method: 'eth_estimateGas',\n params: [callParams],\n });\n return undefined;\n } catch (error: unknown) {\n return decodeRevert(error as RevertInput, 'receipt');\n }\n}\n\n/**\n * Coerce a `RevertInput` to a non-empty revert data hex string.\n *\n * @param input - Raw hex or thrown JSON-RPC error.\n * @returns The revert data hex, or `undefined`.\n */\nfunction toRevertDataHex(input: RevertInput): Hex | undefined {\n if (isHex(input)) {\n return input;\n }\n\n if (typeof input !== 'object' || input === null) {\n return undefined;\n }\n\n const { data } = input;\n if (isHex(data)) {\n return data;\n }\n\n if (typeof data === 'object' && data !== null && isHex(data.data)) {\n return data.data;\n }\n\n return undefined;\n}\n\n/**\n * Type guard for non-empty `0x`-prefixed hex strings.\n *\n * @param value - Value to test.\n * @returns Whether the value is a non-empty hex string.\n */\nfunction isHex(value: unknown): value is Hex {\n return typeof value === 'string' && value.startsWith('0x') && value !== '0x';\n}\n\n/**\n * Decode raw revert data into a human-readable string.\n *\n * @param data - Raw revert data hex.\n * @returns Decoded message, or `undefined` if undecodable.\n */\nfunction decodeMessage(data: Hex | undefined): string | undefined {\n if (!data || data === '0x') {\n return undefined;\n }\n\n if (data.length < 10) {\n return `execution reverted (${data})`;\n }\n\n const selector = data.slice(0, 10).toLowerCase();\n const payload = `0x${data.slice(10)}`;\n\n if (selector === ERROR_SELECTOR) {\n try {\n const [reason] = defaultAbiCoder.decode(['string'], payload);\n return typeof reason === 'string' ? reason : undefined;\n } catch {\n return undefined;\n }\n }\n\n if (selector === PANIC_SELECTOR) {\n try {\n const [code] = defaultAbiCoder.decode(['uint256'], payload) as [\n { toHexString: () => string },\n ];\n const codeHex = code.toHexString().toLowerCase() as Hex;\n const description = PANIC_CODE_MESSAGES[codeHex] ?? 'Unknown panic';\n return `Panic: ${description}`;\n } catch {\n return undefined;\n }\n }\n\n return `Custom error: ${selector}`;\n}\n\n/**\n * Emit a single structured debug line for a decoded revert.\n *\n * @param source - Source label, when known.\n * @param revert - Resolved Revert.\n */\nfunction logRevert(source: string | undefined, revert: Revert): void {\n log('Decoded revert', source ?? 'unknown', revert);\n}\n"]}
1
+ {"version":3,"file":"revert-reason.mjs","sourceRoot":"","sources":["../../src/utils/revert-reason.ts"],"names":[],"mappings":"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","sourcesContent":["import { defaultAbiCoder } from '@ethersproject/abi';\nimport type { NetworkClientId } from '@metamask/network-controller';\nimport type { Hex } from '@metamask/utils';\n\nimport { createModuleLogger, projectLogger } from '../logger.js';\nimport type { TransactionControllerMessenger } from '../TransactionController.js';\nimport type { Revert, TransactionParams } from '../types.js';\nimport { rpcRequest } from './provider.js';\n\nconst log = createModuleLogger(projectLogger, 'revert-reason');\n\nconst ERROR_SELECTOR = '0x08c379a0';\nconst PANIC_SELECTOR = '0x4e487b71';\n\n/**\n * Solidity panic code descriptions.\n *\n * @see https://docs.soliditylang.org/en/latest/control-structures.html#panic-via-assert-and-error-via-require\n */\nconst PANIC_CODE_MESSAGES: Record<string, string> = {\n '0x00': 'Generic compiler panic',\n '0x01': 'Assertion failed',\n '0x11': 'Arithmetic overflow or underflow',\n '0x12': 'Division or modulo by zero',\n '0x21': 'Invalid enum value',\n '0x22': 'Incorrectly encoded storage byte array',\n '0x31': 'Pop on empty array',\n '0x32': 'Array index out of bounds',\n '0x41': 'Memory allocation overflow',\n '0x51': 'Call to zero-initialized function',\n};\n\n/**\n * Input accepted by `decodeRevert`. Either raw revert data hex, or a\n * thrown JSON-RPC error carrying the data on `data` (standard) or\n * nested `data.data` (some older node forks).\n */\ntype RevertInput =\n | Hex\n | undefined\n | { data?: Hex | { data?: Hex } | null }\n | null;\n\n/**\n * Error thrown by `PendingTransactionTracker` when a transaction failed\n * on-chain, carrying any decoded revert.\n */\nexport class OnChainFailureError extends Error {\n readonly revert?: Revert;\n\n constructor(revert?: Revert) {\n const suffix = revert?.message ? `: ${revert.message}` : '';\n super(`Transaction failed on-chain${suffix}`);\n this.name = 'OnChainFailureError';\n this.revert = revert;\n }\n}\n\n/**\n * Decode an EVM revert into a `Revert` containing both the decoded\n * human-readable message and the original raw `data`. Accepts either a\n * raw revert data hex string, or a thrown JSON-RPC error of the shape\n * `{ data: Hex | { data: Hex } }`. Handles `Error(string)`,\n * `Panic(uint256)`, and falls back to a raw `Custom error: 0x<selector>`\n * reference for unknown custom errors.\n *\n * @param input - Raw revert data hex, or a thrown JSON-RPC error.\n * @param source - Optional label included in debug logs to identify the\n * caller (e.g. `gas`, `simulation`).\n * @returns A `Revert` if any data was found, otherwise `undefined`.\n */\nexport function decodeRevert(\n input: RevertInput,\n source?: string,\n): Revert | undefined {\n const data = toRevertDataHex(input);\n if (!data) {\n return undefined;\n }\n\n const message = decodeMessage(data);\n const revert: Revert = {\n ...(message ? { message } : {}),\n data,\n };\n\n logRevert(source, revert);\n return revert;\n}\n\n/**\n * Replay a transaction that failed on-chain via `eth_estimateGas` to\n * recover the revert reason. `eth_estimateGas` is used instead of\n * `eth_call` to avoid `RetryOnEmptyMiddleware`, which retries reverted\n * `eth_call` responses 10 times and discards the original error data.\n *\n * Always resolves; never throws.\n *\n * @param input - Extraction inputs.\n * @param input.messenger - Transaction controller messenger.\n * @param input.networkClientId - Network client ID to replay against.\n * @param input.txParams - Transaction parameters for the failed tx.\n * @returns A `Revert`, or `undefined` if none could be observed.\n */\nexport async function extractRevert({\n messenger,\n networkClientId,\n txParams,\n}: {\n messenger: TransactionControllerMessenger;\n networkClientId: NetworkClientId;\n txParams: TransactionParams;\n}): Promise<Revert | undefined> {\n if (!txParams?.to && !txParams?.data) {\n return undefined;\n }\n\n const callParams: Record<string, string> = {};\n if (txParams.from) {\n callParams.from = txParams.from;\n }\n if (txParams.to) {\n callParams.to = txParams.to;\n }\n if (txParams.data) {\n callParams.data = txParams.data;\n }\n if (txParams.value) {\n callParams.value = txParams.value;\n }\n\n try {\n await rpcRequest({\n messenger,\n networkClientId,\n // `eth_estimateGas` is used instead of `eth_call` to bypass\n // `RetryOnEmptyMiddleware`, which retries reverted `eth_call`\n // responses and discards the original revert data.\n method: 'eth_estimateGas',\n params: [callParams],\n });\n return undefined;\n } catch (error: unknown) {\n return decodeRevert(error as RevertInput, 'receipt');\n }\n}\n\n/**\n * Coerce a `RevertInput` to a non-empty revert data hex string.\n *\n * @param input - Raw hex or thrown JSON-RPC error.\n * @returns The revert data hex, or `undefined`.\n */\nfunction toRevertDataHex(input: RevertInput): Hex | undefined {\n if (isHex(input)) {\n return input;\n }\n\n if (typeof input !== 'object' || input === null) {\n return undefined;\n }\n\n const { data } = input;\n if (isHex(data)) {\n return data;\n }\n\n if (typeof data === 'object' && data !== null && isHex(data.data)) {\n return data.data;\n }\n\n return undefined;\n}\n\n/**\n * Type guard for non-empty `0x`-prefixed hex strings.\n *\n * @param value - Value to test.\n * @returns Whether the value is a non-empty hex string.\n */\nfunction isHex(value: unknown): value is Hex {\n return typeof value === 'string' && value.startsWith('0x') && value !== '0x';\n}\n\n/**\n * Decode raw revert data into a human-readable string.\n *\n * @param data - Raw revert data hex.\n * @returns Decoded message, or `undefined` if undecodable.\n */\nfunction decodeMessage(data: Hex | undefined): string | undefined {\n if (!data || data === '0x') {\n return undefined;\n }\n\n if (data.length < 10) {\n return `execution reverted (${data})`;\n }\n\n const selector = data.slice(0, 10).toLowerCase();\n const payload = `0x${data.slice(10)}`;\n\n if (selector === ERROR_SELECTOR) {\n try {\n const [reason] = defaultAbiCoder.decode(['string'], payload);\n return typeof reason === 'string' ? reason : undefined;\n } catch {\n return undefined;\n }\n }\n\n if (selector === PANIC_SELECTOR) {\n try {\n const [code] = defaultAbiCoder.decode(['uint256'], payload) as [\n { toHexString: () => string },\n ];\n const codeHex = code.toHexString().toLowerCase() as Hex;\n const description = PANIC_CODE_MESSAGES[codeHex] ?? 'Unknown panic';\n return `Panic: ${description}`;\n } catch {\n return undefined;\n }\n }\n\n return `Custom error: ${selector}`;\n}\n\n/**\n * Emit a single structured debug line for a decoded revert.\n *\n * @param source - Source label, when known.\n * @param revert - Resolved Revert.\n */\nfunction logRevert(source: string | undefined, revert: Revert): void {\n log('Decoded revert', source ?? 'unknown', revert);\n}\n"]}