@metamask-previews/transaction-pay-controller 0.0.0-preview-6bf4b220

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 (212) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/LICENSE +20 -0
  3. package/README.md +19 -0
  4. package/dist/TransactionPayController.cjs +90 -0
  5. package/dist/TransactionPayController.cjs.map +1 -0
  6. package/dist/TransactionPayController.d.cts +14 -0
  7. package/dist/TransactionPayController.d.cts.map +1 -0
  8. package/dist/TransactionPayController.d.mts +14 -0
  9. package/dist/TransactionPayController.d.mts.map +1 -0
  10. package/dist/TransactionPayController.mjs +87 -0
  11. package/dist/TransactionPayController.mjs.map +1 -0
  12. package/dist/actions/update-payment-token.cjs +79 -0
  13. package/dist/actions/update-payment-token.cjs.map +1 -0
  14. package/dist/actions/update-payment-token.d.cts +20 -0
  15. package/dist/actions/update-payment-token.d.cts.map +1 -0
  16. package/dist/actions/update-payment-token.d.mts +20 -0
  17. package/dist/actions/update-payment-token.d.mts.map +1 -0
  18. package/dist/actions/update-payment-token.mjs +75 -0
  19. package/dist/actions/update-payment-token.mjs.map +1 -0
  20. package/dist/constants.cjs +12 -0
  21. package/dist/constants.cjs.map +1 -0
  22. package/dist/constants.d.cts +8 -0
  23. package/dist/constants.d.cts.map +1 -0
  24. package/dist/constants.d.mts +8 -0
  25. package/dist/constants.d.mts.map +1 -0
  26. package/dist/constants.mjs +9 -0
  27. package/dist/constants.mjs.map +1 -0
  28. package/dist/helpers/TransactionPayPublishHook.cjs +61 -0
  29. package/dist/helpers/TransactionPayPublishHook.cjs.map +1 -0
  30. package/dist/helpers/TransactionPayPublishHook.d.cts +12 -0
  31. package/dist/helpers/TransactionPayPublishHook.d.cts.map +1 -0
  32. package/dist/helpers/TransactionPayPublishHook.d.mts +12 -0
  33. package/dist/helpers/TransactionPayPublishHook.d.mts.map +1 -0
  34. package/dist/helpers/TransactionPayPublishHook.mjs +57 -0
  35. package/dist/helpers/TransactionPayPublishHook.mjs.map +1 -0
  36. package/dist/index.cjs +10 -0
  37. package/dist/index.cjs.map +1 -0
  38. package/dist/index.d.cts +6 -0
  39. package/dist/index.d.cts.map +1 -0
  40. package/dist/index.d.mts +6 -0
  41. package/dist/index.d.mts.map +1 -0
  42. package/dist/index.mjs +4 -0
  43. package/dist/index.mjs.map +1 -0
  44. package/dist/logger.cjs +8 -0
  45. package/dist/logger.cjs.map +1 -0
  46. package/dist/logger.d.cts +5 -0
  47. package/dist/logger.d.cts.map +1 -0
  48. package/dist/logger.d.mts +5 -0
  49. package/dist/logger.d.mts.map +1 -0
  50. package/dist/logger.mjs +5 -0
  51. package/dist/logger.mjs.map +1 -0
  52. package/dist/strategy/bridge/BridgeStrategy.cjs +30 -0
  53. package/dist/strategy/bridge/BridgeStrategy.cjs.map +1 -0
  54. package/dist/strategy/bridge/BridgeStrategy.d.cts +11 -0
  55. package/dist/strategy/bridge/BridgeStrategy.d.cts.map +1 -0
  56. package/dist/strategy/bridge/BridgeStrategy.d.mts +11 -0
  57. package/dist/strategy/bridge/BridgeStrategy.d.mts.map +1 -0
  58. package/dist/strategy/bridge/BridgeStrategy.mjs +26 -0
  59. package/dist/strategy/bridge/BridgeStrategy.mjs.map +1 -0
  60. package/dist/strategy/bridge/bridge-quotes.cjs +396 -0
  61. package/dist/strategy/bridge/bridge-quotes.cjs.map +1 -0
  62. package/dist/strategy/bridge/bridge-quotes.d.cts +35 -0
  63. package/dist/strategy/bridge/bridge-quotes.d.cts.map +1 -0
  64. package/dist/strategy/bridge/bridge-quotes.d.mts +35 -0
  65. package/dist/strategy/bridge/bridge-quotes.d.mts.map +1 -0
  66. package/dist/strategy/bridge/bridge-quotes.mjs +390 -0
  67. package/dist/strategy/bridge/bridge-quotes.mjs.map +1 -0
  68. package/dist/strategy/bridge/bridge-submit.cjs +155 -0
  69. package/dist/strategy/bridge/bridge-submit.cjs.map +1 -0
  70. package/dist/strategy/bridge/bridge-submit.d.cts +19 -0
  71. package/dist/strategy/bridge/bridge-submit.d.cts.map +1 -0
  72. package/dist/strategy/bridge/bridge-submit.d.mts +19 -0
  73. package/dist/strategy/bridge/bridge-submit.d.mts.map +1 -0
  74. package/dist/strategy/bridge/bridge-submit.mjs +152 -0
  75. package/dist/strategy/bridge/bridge-submit.mjs.map +1 -0
  76. package/dist/strategy/bridge/types.cjs +3 -0
  77. package/dist/strategy/bridge/types.cjs.map +1 -0
  78. package/dist/strategy/bridge/types.d.cts +27 -0
  79. package/dist/strategy/bridge/types.d.cts.map +1 -0
  80. package/dist/strategy/bridge/types.d.mts +27 -0
  81. package/dist/strategy/bridge/types.d.mts.map +1 -0
  82. package/dist/strategy/bridge/types.mjs +2 -0
  83. package/dist/strategy/bridge/types.mjs.map +1 -0
  84. package/dist/strategy/relay/RelayStrategy.cjs +15 -0
  85. package/dist/strategy/relay/RelayStrategy.cjs.map +1 -0
  86. package/dist/strategy/relay/RelayStrategy.d.cts +9 -0
  87. package/dist/strategy/relay/RelayStrategy.d.cts.map +1 -0
  88. package/dist/strategy/relay/RelayStrategy.d.mts +9 -0
  89. package/dist/strategy/relay/RelayStrategy.d.mts.map +1 -0
  90. package/dist/strategy/relay/RelayStrategy.mjs +11 -0
  91. package/dist/strategy/relay/RelayStrategy.mjs.map +1 -0
  92. package/dist/strategy/relay/constants.cjs +8 -0
  93. package/dist/strategy/relay/constants.cjs.map +1 -0
  94. package/dist/strategy/relay/constants.d.cts +5 -0
  95. package/dist/strategy/relay/constants.d.cts.map +1 -0
  96. package/dist/strategy/relay/constants.d.mts +5 -0
  97. package/dist/strategy/relay/constants.d.mts.map +1 -0
  98. package/dist/strategy/relay/constants.mjs +5 -0
  99. package/dist/strategy/relay/constants.mjs.map +1 -0
  100. package/dist/strategy/relay/relay-quotes.cjs +193 -0
  101. package/dist/strategy/relay/relay-quotes.cjs.map +1 -0
  102. package/dist/strategy/relay/relay-quotes.d.cts +10 -0
  103. package/dist/strategy/relay/relay-quotes.d.cts.map +1 -0
  104. package/dist/strategy/relay/relay-quotes.d.mts +10 -0
  105. package/dist/strategy/relay/relay-quotes.d.mts.map +1 -0
  106. package/dist/strategy/relay/relay-quotes.mjs +189 -0
  107. package/dist/strategy/relay/relay-quotes.mjs.map +1 -0
  108. package/dist/strategy/relay/relay-submit.cjs +129 -0
  109. package/dist/strategy/relay/relay-submit.cjs.map +1 -0
  110. package/dist/strategy/relay/relay-submit.d.cts +13 -0
  111. package/dist/strategy/relay/relay-submit.d.cts.map +1 -0
  112. package/dist/strategy/relay/relay-submit.d.mts +13 -0
  113. package/dist/strategy/relay/relay-submit.d.mts.map +1 -0
  114. package/dist/strategy/relay/relay-submit.mjs +125 -0
  115. package/dist/strategy/relay/relay-submit.mjs.map +1 -0
  116. package/dist/strategy/relay/types.cjs +3 -0
  117. package/dist/strategy/relay/types.cjs.map +1 -0
  118. package/dist/strategy/relay/types.d.cts +52 -0
  119. package/dist/strategy/relay/types.d.cts.map +1 -0
  120. package/dist/strategy/relay/types.d.mts +52 -0
  121. package/dist/strategy/relay/types.d.mts.map +1 -0
  122. package/dist/strategy/relay/types.mjs +2 -0
  123. package/dist/strategy/relay/types.mjs.map +1 -0
  124. package/dist/strategy/test/TestStrategy.cjs +48 -0
  125. package/dist/strategy/test/TestStrategy.cjs.map +1 -0
  126. package/dist/strategy/test/TestStrategy.d.cts +9 -0
  127. package/dist/strategy/test/TestStrategy.d.cts.map +1 -0
  128. package/dist/strategy/test/TestStrategy.d.mts +9 -0
  129. package/dist/strategy/test/TestStrategy.d.mts.map +1 -0
  130. package/dist/strategy/test/TestStrategy.mjs +44 -0
  131. package/dist/strategy/test/TestStrategy.mjs.map +1 -0
  132. package/dist/tests/messenger-mock.cjs +71 -0
  133. package/dist/tests/messenger-mock.cjs.map +1 -0
  134. package/dist/tests/messenger-mock.d.cts +211 -0
  135. package/dist/tests/messenger-mock.d.cts.map +1 -0
  136. package/dist/tests/messenger-mock.d.mts +211 -0
  137. package/dist/tests/messenger-mock.d.mts.map +1 -0
  138. package/dist/tests/messenger-mock.mjs +67 -0
  139. package/dist/tests/messenger-mock.mjs.map +1 -0
  140. package/dist/types.cjs +3 -0
  141. package/dist/types.cjs.map +1 -0
  142. package/dist/types.d.cts +149 -0
  143. package/dist/types.d.cts.map +1 -0
  144. package/dist/types.d.mts +149 -0
  145. package/dist/types.d.mts.map +1 -0
  146. package/dist/types.mjs +2 -0
  147. package/dist/types.mjs.map +1 -0
  148. package/dist/utils/gas.cjs +69 -0
  149. package/dist/utils/gas.cjs.map +1 -0
  150. package/dist/utils/gas.d.cts +26 -0
  151. package/dist/utils/gas.d.cts.map +1 -0
  152. package/dist/utils/gas.d.mts +26 -0
  153. package/dist/utils/gas.d.mts.map +1 -0
  154. package/dist/utils/gas.mjs +64 -0
  155. package/dist/utils/gas.mjs.map +1 -0
  156. package/dist/utils/quotes.cjs +168 -0
  157. package/dist/utils/quotes.cjs.map +1 -0
  158. package/dist/utils/quotes.d.cts +21 -0
  159. package/dist/utils/quotes.d.cts.map +1 -0
  160. package/dist/utils/quotes.d.mts +21 -0
  161. package/dist/utils/quotes.d.mts.map +1 -0
  162. package/dist/utils/quotes.mjs +163 -0
  163. package/dist/utils/quotes.mjs.map +1 -0
  164. package/dist/utils/required-tokens.cjs +179 -0
  165. package/dist/utils/required-tokens.cjs.map +1 -0
  166. package/dist/utils/required-tokens.d.cts +11 -0
  167. package/dist/utils/required-tokens.d.cts.map +1 -0
  168. package/dist/utils/required-tokens.d.mts +11 -0
  169. package/dist/utils/required-tokens.d.mts.map +1 -0
  170. package/dist/utils/required-tokens.mjs +175 -0
  171. package/dist/utils/required-tokens.mjs.map +1 -0
  172. package/dist/utils/source-amounts.cjs +72 -0
  173. package/dist/utils/source-amounts.cjs.map +1 -0
  174. package/dist/utils/source-amounts.d.cts +11 -0
  175. package/dist/utils/source-amounts.d.cts.map +1 -0
  176. package/dist/utils/source-amounts.d.mts +11 -0
  177. package/dist/utils/source-amounts.d.mts.map +1 -0
  178. package/dist/utils/source-amounts.mjs +68 -0
  179. package/dist/utils/source-amounts.mjs.map +1 -0
  180. package/dist/utils/strategy.cjs +39 -0
  181. package/dist/utils/strategy.cjs.map +1 -0
  182. package/dist/utils/strategy.d.cts +19 -0
  183. package/dist/utils/strategy.d.cts.map +1 -0
  184. package/dist/utils/strategy.d.mts +19 -0
  185. package/dist/utils/strategy.d.mts.map +1 -0
  186. package/dist/utils/strategy.mjs +34 -0
  187. package/dist/utils/strategy.mjs.map +1 -0
  188. package/dist/utils/token.cjs +161 -0
  189. package/dist/utils/token.cjs.map +1 -0
  190. package/dist/utils/token.d.cts +53 -0
  191. package/dist/utils/token.d.cts.map +1 -0
  192. package/dist/utils/token.d.mts +53 -0
  193. package/dist/utils/token.d.mts.map +1 -0
  194. package/dist/utils/token.mjs +154 -0
  195. package/dist/utils/token.mjs.map +1 -0
  196. package/dist/utils/totals.cjs +69 -0
  197. package/dist/utils/totals.cjs.map +1 -0
  198. package/dist/utils/totals.d.cts +11 -0
  199. package/dist/utils/totals.d.cts.map +1 -0
  200. package/dist/utils/totals.d.mts +11 -0
  201. package/dist/utils/totals.d.mts.map +1 -0
  202. package/dist/utils/totals.mjs +65 -0
  203. package/dist/utils/totals.mjs.map +1 -0
  204. package/dist/utils/transaction.cjs +132 -0
  205. package/dist/utils/transaction.cjs.map +1 -0
  206. package/dist/utils/transaction.d.cts +42 -0
  207. package/dist/utils/transaction.d.cts.map +1 -0
  208. package/dist/utils/transaction.d.mts +42 -0
  209. package/dist/utils/transaction.d.mts.map +1 -0
  210. package/dist/utils/transaction.mjs +126 -0
  211. package/dist/utils/transaction.mjs.map +1 -0
  212. package/package.json +96 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.mts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.mjs ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.mjs","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n CurrencyRateControllerActions,\n TokenBalancesControllerGetStateAction,\n} from '@metamask/assets-controllers';\nimport type { TokenListControllerActions } from '@metamask/assets-controllers';\nimport type { TokenRatesControllerGetStateAction } from '@metamask/assets-controllers';\nimport type { TokensControllerGetStateAction } from '@metamask/assets-controllers';\nimport type { AccountTrackerControllerGetStateAction } from '@metamask/assets-controllers';\nimport type { RestrictedMessenger } from '@metamask/base-controller';\nimport type { ControllerStateChangeEvent } from '@metamask/base-controller';\nimport type { ControllerGetStateAction } from '@metamask/base-controller';\nimport type { BridgeControllerActions } from '@metamask/bridge-controller';\nimport type { BridgeStatusControllerStateChangeEvent } from '@metamask/bridge-status-controller';\nimport type { BridgeStatusControllerActions } from '@metamask/bridge-status-controller';\nimport type { GasFeeControllerActions } from '@metamask/gas-fee-controller';\nimport type { NetworkControllerFindNetworkClientIdByChainIdAction } from '@metamask/network-controller';\nimport type { NetworkControllerGetNetworkClientByIdAction } from '@metamask/network-controller';\nimport type { RemoteFeatureFlagControllerGetStateAction } from '@metamask/remote-feature-flag-controller';\nimport type { TransactionControllerUnapprovedTransactionAddedEvent } from '@metamask/transaction-controller';\nimport type { TransactionControllerGetStateAction } from '@metamask/transaction-controller';\nimport type { TransactionControllerStateChangeEvent } from '@metamask/transaction-controller';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\nimport type { TransactionControllerAddTransactionAction } from '@metamask/transaction-controller';\nimport type { TransactionControllerUpdateTransactionAction } from '@metamask/transaction-controller';\nimport type { BatchTransaction } from '@metamask/transaction-controller';\nimport type { Hex, Json } from '@metamask/utils';\nimport type { Draft } from 'immer';\n\nimport type { CONTROLLER_NAME, TransactionPayStrategy } from './constants';\n\nexport type AllowedActions =\n | AccountTrackerControllerGetStateAction\n | BridgeControllerActions\n | BridgeStatusControllerActions\n | CurrencyRateControllerActions\n | GasFeeControllerActions\n | NetworkControllerFindNetworkClientIdByChainIdAction\n | NetworkControllerGetNetworkClientByIdAction\n | RemoteFeatureFlagControllerGetStateAction\n | TokenBalancesControllerGetStateAction\n | TokenListControllerActions\n | TokenRatesControllerGetStateAction\n | TokensControllerGetStateAction\n | TransactionControllerAddTransactionAction\n | TransactionControllerGetStateAction\n | TransactionControllerUpdateTransactionAction;\n\nexport type AllowedEvents =\n | BridgeStatusControllerStateChangeEvent\n | TransactionControllerStateChangeEvent\n | TransactionControllerUnapprovedTransactionAddedEvent;\n\nexport type TransactionPayControllerGetStateAction = ControllerGetStateAction<\n typeof CONTROLLER_NAME,\n TransactionPayControllerState\n>;\n\nexport type TransactionPayControllerGetStrategyAction = {\n type: `${typeof CONTROLLER_NAME}:getStrategy`;\n handler: (transaction: TransactionMeta) => Promise<TransactionPayStrategy>;\n};\n\nexport type TransactionPayControllerStateChangeEvent =\n ControllerStateChangeEvent<\n typeof CONTROLLER_NAME,\n TransactionPayControllerState\n >;\n\nexport type TransactionPayControllerActions =\n | TransactionPayControllerGetStateAction\n | TransactionPayControllerGetStrategyAction;\n\nexport type TransactionPayControllerEvents =\n TransactionPayControllerStateChangeEvent;\n\nexport type TransactionPayControllerMessenger = RestrictedMessenger<\n typeof CONTROLLER_NAME,\n TransactionPayControllerActions | AllowedActions,\n TransactionPayControllerEvents | AllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n\nexport type TransactionPayControllerOptions = {\n getStrategy?: (\n transaction: TransactionMeta,\n ) => Promise<TransactionPayStrategy>;\n messenger: TransactionPayControllerMessenger;\n state?: Partial<TransactionPayControllerState>;\n};\n\nexport type TransactionPayControllerState = {\n transactionData: Record<string, TransactionData>;\n};\n\nexport type TransactionData = {\n isLoading: boolean;\n paymentToken?: TransactionPaymentToken;\n quotes?: TransactionPayQuote<Json>[];\n quotesLastUpdated?: number;\n sourceAmounts?: TransactionPaySourceAmount[];\n tokens: TransactionPayRequiredToken[];\n totals?: TransactionPayTotals;\n};\n\nexport type TransactionPayRequiredToken = {\n address: Hex;\n allowUnderMinimum: boolean;\n amountFiat: string;\n amountHuman: string;\n amountRaw: string;\n amountUsd: string;\n balanceFiat: string;\n balanceHuman: string;\n balanceRaw: string;\n balanceUsd: string;\n chainId: Hex;\n decimals: number;\n skipIfBalance: boolean;\n symbol: string;\n};\n\nexport type TransactionPaySourceAmount = {\n sourceAmountHuman: string;\n sourceAmountRaw: string;\n targetTokenAddress: Hex;\n};\n\nexport type TransactionPaymentToken = {\n address: Hex;\n balanceFiat: string;\n balanceHuman: string;\n balanceRaw: string;\n balanceUsd: string;\n chainId: Hex;\n decimals: number;\n symbol: string;\n};\n\nexport type UpdateTransactionDataCallback = (\n transactionId: string,\n fn: (data: Draft<TransactionData>) => void,\n) => void;\n\nexport type FiatRates = {\n fiatRate: string;\n usdRate: string;\n};\n\nexport type QuoteRequest = {\n from: Hex;\n sourceBalanceRaw: string;\n sourceChainId: Hex;\n sourceTokenAddress: Hex;\n sourceTokenAmount: string;\n targetAmountMinimum: string;\n targetChainId: Hex;\n targetTokenAddress: Hex;\n};\n\nexport type TransactionPayFees = {\n provider: FiatValue;\n sourceNetwork: FiatValue;\n targetNetwork: FiatValue;\n};\n\nexport type TransactionPayQuote<OriginalQuote> = {\n dust: FiatValue;\n estimatedDuration: number;\n fees: TransactionPayFees;\n original: OriginalQuote;\n request: QuoteRequest;\n strategy: TransactionPayStrategy;\n};\n\nexport type PayStrategyGetQuotesRequest = {\n messenger: TransactionPayControllerMessenger;\n requests: QuoteRequest[];\n transaction: TransactionMeta;\n};\n\nexport type PayStrategyExecuteRequest<OriginalRequest> = {\n isSmartTransaction: (chainId: Hex) => boolean;\n messenger: TransactionPayControllerMessenger;\n quotes: TransactionPayQuote<OriginalRequest>[];\n transaction: TransactionMeta;\n};\n\nexport type PayStrategyGetBatchRequest<OriginalQuote> = {\n messenger: TransactionPayControllerMessenger;\n quotes: TransactionPayQuote<OriginalQuote>[];\n};\n\nexport type PayStrategyGetRefreshIntervalRequest = {\n chainId: Hex;\n messenger: TransactionPayControllerMessenger;\n};\n\nexport type PayStrategy<OriginalQuote> = {\n getQuotes: (\n request: PayStrategyGetQuotesRequest,\n ) => Promise<TransactionPayQuote<OriginalQuote>[]>;\n\n getBatchTransactions?: (\n request: PayStrategyGetBatchRequest<OriginalQuote>,\n ) => Promise<BatchTransaction[]>;\n\n getRefreshInterval?: (\n request: PayStrategyGetRefreshIntervalRequest,\n ) => Promise<number | undefined>;\n\n execute: (request: PayStrategyExecuteRequest<OriginalQuote>) => Promise<{\n transactionHash?: Hex;\n }>;\n};\n\nexport type FiatValue = {\n fiat: string;\n usd: string;\n};\n\nexport type TransactionPayTotals = {\n estimatedDuration: number;\n fees: TransactionPayFees;\n total: FiatValue;\n};\n"]}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getGasFee = exports.calculateGasCost = void 0;
4
+ const utils_1 = require("@metamask/utils");
5
+ const bignumber_js_1 = require("bignumber.js");
6
+ const token_1 = require("./token.cjs");
7
+ const logger_1 = require("../logger.cjs");
8
+ const log = (0, utils_1.createModuleLogger)(logger_1.projectLogger, 'gas');
9
+ /**
10
+ *
11
+ * Calculate the estimated gas cost for a given transaction in fiat.
12
+ *
13
+ * @param transaction - Transaction to calculate gas cost for
14
+ * @param messenger - Controller messenger.
15
+ * @returns Estimated gas cost for the transaction.
16
+ */
17
+ function calculateGasCost(transaction, messenger) {
18
+ const { chainId, gasUsed, gasLimitNoBuffer, txParams } = transaction;
19
+ const { gas, maxFeePerGas, maxPriorityFeePerGas } = txParams;
20
+ const estimatedGasLimit = gasUsed || gasLimitNoBuffer || gas || '0x0';
21
+ const { estimatedBaseFee } = getGasFee(chainId, messenger);
22
+ const gasFeeValue = estimatedBaseFee
23
+ ? new bignumber_js_1.BigNumber(estimatedBaseFee).plus(maxPriorityFeePerGas ?? '0x0')
24
+ : new bignumber_js_1.BigNumber(maxFeePerGas ?? '0x0');
25
+ const gasCost = gasFeeValue.multipliedBy(estimatedGasLimit).shiftedBy(-18);
26
+ const fiatRate = (0, token_1.getTokenFiatRate)(messenger, (0, token_1.getNativeToken)(chainId), chainId);
27
+ if (!fiatRate) {
28
+ throw new Error('Could not fetch fiat rate for native token');
29
+ }
30
+ const usd = gasCost.multipliedBy(fiatRate.usdRate).toString(10);
31
+ const fiat = gasCost.multipliedBy(fiatRate.fiatRate).toString(10);
32
+ log('Calculated gas cost', {
33
+ transactionId: transaction.id,
34
+ chainId,
35
+ usd,
36
+ fiat,
37
+ });
38
+ return {
39
+ usd,
40
+ fiat,
41
+ };
42
+ }
43
+ exports.calculateGasCost = calculateGasCost;
44
+ /**
45
+ * Get gas fee estimates for a given chain.
46
+ *
47
+ * @param chainId - Chain ID.
48
+ * @param messenger - Controller messenger.
49
+ * @returns Gas fee estimates for the chain.
50
+ */
51
+ function getGasFee(chainId, messenger) {
52
+ const gasFeeControllerState = messenger.call('GasFeeController:getState');
53
+ const chainState = gasFeeControllerState?.gasFeeEstimatesByChainId?.[chainId];
54
+ const { estimatedBaseFee: estimatedBaseFeeGwei, medium } = chainState?.gasFeeEstimates ?? {};
55
+ const maxFeePerGasGwei = medium?.suggestedMaxFeePerGas;
56
+ const maxPriorityFeePerGasGwei = medium?.suggestedMaxPriorityFeePerGas;
57
+ const estimatedBaseFee = estimatedBaseFeeGwei
58
+ ? new bignumber_js_1.BigNumber(estimatedBaseFeeGwei).shiftedBy(9).toString(10)
59
+ : undefined;
60
+ const maxFeePerGas = maxFeePerGasGwei
61
+ ? new bignumber_js_1.BigNumber(maxFeePerGasGwei).shiftedBy(9).toString(10)
62
+ : undefined;
63
+ const maxPriorityFeePerGas = maxPriorityFeePerGasGwei
64
+ ? new bignumber_js_1.BigNumber(maxPriorityFeePerGasGwei).shiftedBy(9).toString(10)
65
+ : undefined;
66
+ return { estimatedBaseFee, maxFeePerGas, maxPriorityFeePerGas };
67
+ }
68
+ exports.getGasFee = getGasFee;
69
+ //# sourceMappingURL=gas.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gas.cjs","sourceRoot":"","sources":["../../src/utils/gas.ts"],"names":[],"mappings":"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","sourcesContent":["import type { GasFeeEstimates } from '@metamask/gas-fee-controller';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\nimport type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport { getNativeToken, getTokenFiatRate } from './token';\nimport type { TransactionPayControllerMessenger } from '..';\nimport { projectLogger } from '../logger';\nimport type { FiatValue } from '../types';\n\nconst log = createModuleLogger(projectLogger, 'gas');\n\n/**\n *\n * Calculate the estimated gas cost for a given transaction in fiat.\n *\n * @param transaction - Transaction to calculate gas cost for\n * @param messenger - Controller messenger.\n * @returns Estimated gas cost for the transaction.\n */\nexport function calculateGasCost(\n transaction: TransactionMeta,\n messenger: TransactionPayControllerMessenger,\n): FiatValue {\n const { chainId, gasUsed, gasLimitNoBuffer, txParams } = transaction;\n const { gas, maxFeePerGas, maxPriorityFeePerGas } = txParams;\n\n const estimatedGasLimit = gasUsed || gasLimitNoBuffer || gas || '0x0';\n const { estimatedBaseFee } = getGasFee(chainId, messenger);\n\n const gasFeeValue = estimatedBaseFee\n ? new BigNumber(estimatedBaseFee).plus(maxPriorityFeePerGas ?? '0x0')\n : new BigNumber(maxFeePerGas ?? '0x0');\n\n const gasCost = gasFeeValue.multipliedBy(estimatedGasLimit).shiftedBy(-18);\n\n const fiatRate = getTokenFiatRate(\n messenger,\n getNativeToken(chainId),\n chainId,\n );\n\n if (!fiatRate) {\n throw new Error('Could not fetch fiat rate for native token');\n }\n\n const usd = gasCost.multipliedBy(fiatRate.usdRate).toString(10);\n const fiat = gasCost.multipliedBy(fiatRate.fiatRate).toString(10);\n\n log('Calculated gas cost', {\n transactionId: transaction.id,\n chainId,\n usd,\n fiat,\n });\n\n return {\n usd,\n fiat,\n };\n}\n\n/**\n * Get gas fee estimates for a given chain.\n *\n * @param chainId - Chain ID.\n * @param messenger - Controller messenger.\n * @returns Gas fee estimates for the chain.\n */\nexport function getGasFee(\n chainId: Hex,\n messenger: TransactionPayControllerMessenger,\n) {\n const gasFeeControllerState = messenger.call('GasFeeController:getState');\n\n const chainState = gasFeeControllerState?.gasFeeEstimatesByChainId?.[chainId];\n\n const { estimatedBaseFee: estimatedBaseFeeGwei, medium } =\n (chainState?.gasFeeEstimates as GasFeeEstimates | undefined) ?? {};\n\n const maxFeePerGasGwei = medium?.suggestedMaxFeePerGas;\n const maxPriorityFeePerGasGwei = medium?.suggestedMaxPriorityFeePerGas;\n\n const estimatedBaseFee = estimatedBaseFeeGwei\n ? new BigNumber(estimatedBaseFeeGwei).shiftedBy(9).toString(10)\n : undefined;\n\n const maxFeePerGas = maxFeePerGasGwei\n ? new BigNumber(maxFeePerGasGwei).shiftedBy(9).toString(10)\n : undefined;\n\n const maxPriorityFeePerGas = maxPriorityFeePerGasGwei\n ? new BigNumber(maxPriorityFeePerGasGwei).shiftedBy(9).toString(10)\n : undefined;\n\n return { estimatedBaseFee, maxFeePerGas, maxPriorityFeePerGas };\n}\n"]}
@@ -0,0 +1,26 @@
1
+ import type { TransactionMeta } from "@metamask/transaction-controller";
2
+ import type { Hex } from "@metamask/utils";
3
+ import type { TransactionPayControllerMessenger } from "../index.cjs";
4
+ import type { FiatValue } from "../types.cjs";
5
+ /**
6
+ *
7
+ * Calculate the estimated gas cost for a given transaction in fiat.
8
+ *
9
+ * @param transaction - Transaction to calculate gas cost for
10
+ * @param messenger - Controller messenger.
11
+ * @returns Estimated gas cost for the transaction.
12
+ */
13
+ export declare function calculateGasCost(transaction: TransactionMeta, messenger: TransactionPayControllerMessenger): FiatValue;
14
+ /**
15
+ * Get gas fee estimates for a given chain.
16
+ *
17
+ * @param chainId - Chain ID.
18
+ * @param messenger - Controller messenger.
19
+ * @returns Gas fee estimates for the chain.
20
+ */
21
+ export declare function getGasFee(chainId: Hex, messenger: TransactionPayControllerMessenger): {
22
+ estimatedBaseFee: string | undefined;
23
+ maxFeePerGas: string | undefined;
24
+ maxPriorityFeePerGas: string | undefined;
25
+ };
26
+ //# sourceMappingURL=gas.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gas.d.cts","sourceRoot":"","sources":["../../src/utils/gas.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,yCAAyC;AACxE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAK3C,OAAO,KAAK,EAAE,iCAAiC,EAAE,qBAAW;AAE5D,OAAO,KAAK,EAAE,SAAS,EAAE,qBAAiB;AAI1C;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,eAAe,EAC5B,SAAS,EAAE,iCAAiC,GAC3C,SAAS,CAqCX;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,GAAG,EACZ,SAAS,EAAE,iCAAiC;;;;EAyB7C"}
@@ -0,0 +1,26 @@
1
+ import type { TransactionMeta } from "@metamask/transaction-controller";
2
+ import type { Hex } from "@metamask/utils";
3
+ import type { TransactionPayControllerMessenger } from "../index.mjs";
4
+ import type { FiatValue } from "../types.mjs";
5
+ /**
6
+ *
7
+ * Calculate the estimated gas cost for a given transaction in fiat.
8
+ *
9
+ * @param transaction - Transaction to calculate gas cost for
10
+ * @param messenger - Controller messenger.
11
+ * @returns Estimated gas cost for the transaction.
12
+ */
13
+ export declare function calculateGasCost(transaction: TransactionMeta, messenger: TransactionPayControllerMessenger): FiatValue;
14
+ /**
15
+ * Get gas fee estimates for a given chain.
16
+ *
17
+ * @param chainId - Chain ID.
18
+ * @param messenger - Controller messenger.
19
+ * @returns Gas fee estimates for the chain.
20
+ */
21
+ export declare function getGasFee(chainId: Hex, messenger: TransactionPayControllerMessenger): {
22
+ estimatedBaseFee: string | undefined;
23
+ maxFeePerGas: string | undefined;
24
+ maxPriorityFeePerGas: string | undefined;
25
+ };
26
+ //# sourceMappingURL=gas.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gas.d.mts","sourceRoot":"","sources":["../../src/utils/gas.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,yCAAyC;AACxE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAK3C,OAAO,KAAK,EAAE,iCAAiC,EAAE,qBAAW;AAE5D,OAAO,KAAK,EAAE,SAAS,EAAE,qBAAiB;AAI1C;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,eAAe,EAC5B,SAAS,EAAE,iCAAiC,GAC3C,SAAS,CAqCX;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,GAAG,EACZ,SAAS,EAAE,iCAAiC;;;;EAyB7C"}
@@ -0,0 +1,64 @@
1
+ import { createModuleLogger } from "@metamask/utils";
2
+ import { BigNumber } from "bignumber.js";
3
+ import { getNativeToken, getTokenFiatRate } from "./token.mjs";
4
+ import { projectLogger } from "../logger.mjs";
5
+ const log = createModuleLogger(projectLogger, 'gas');
6
+ /**
7
+ *
8
+ * Calculate the estimated gas cost for a given transaction in fiat.
9
+ *
10
+ * @param transaction - Transaction to calculate gas cost for
11
+ * @param messenger - Controller messenger.
12
+ * @returns Estimated gas cost for the transaction.
13
+ */
14
+ export function calculateGasCost(transaction, messenger) {
15
+ const { chainId, gasUsed, gasLimitNoBuffer, txParams } = transaction;
16
+ const { gas, maxFeePerGas, maxPriorityFeePerGas } = txParams;
17
+ const estimatedGasLimit = gasUsed || gasLimitNoBuffer || gas || '0x0';
18
+ const { estimatedBaseFee } = getGasFee(chainId, messenger);
19
+ const gasFeeValue = estimatedBaseFee
20
+ ? new BigNumber(estimatedBaseFee).plus(maxPriorityFeePerGas ?? '0x0')
21
+ : new BigNumber(maxFeePerGas ?? '0x0');
22
+ const gasCost = gasFeeValue.multipliedBy(estimatedGasLimit).shiftedBy(-18);
23
+ const fiatRate = getTokenFiatRate(messenger, getNativeToken(chainId), chainId);
24
+ if (!fiatRate) {
25
+ throw new Error('Could not fetch fiat rate for native token');
26
+ }
27
+ const usd = gasCost.multipliedBy(fiatRate.usdRate).toString(10);
28
+ const fiat = gasCost.multipliedBy(fiatRate.fiatRate).toString(10);
29
+ log('Calculated gas cost', {
30
+ transactionId: transaction.id,
31
+ chainId,
32
+ usd,
33
+ fiat,
34
+ });
35
+ return {
36
+ usd,
37
+ fiat,
38
+ };
39
+ }
40
+ /**
41
+ * Get gas fee estimates for a given chain.
42
+ *
43
+ * @param chainId - Chain ID.
44
+ * @param messenger - Controller messenger.
45
+ * @returns Gas fee estimates for the chain.
46
+ */
47
+ export function getGasFee(chainId, messenger) {
48
+ const gasFeeControllerState = messenger.call('GasFeeController:getState');
49
+ const chainState = gasFeeControllerState?.gasFeeEstimatesByChainId?.[chainId];
50
+ const { estimatedBaseFee: estimatedBaseFeeGwei, medium } = chainState?.gasFeeEstimates ?? {};
51
+ const maxFeePerGasGwei = medium?.suggestedMaxFeePerGas;
52
+ const maxPriorityFeePerGasGwei = medium?.suggestedMaxPriorityFeePerGas;
53
+ const estimatedBaseFee = estimatedBaseFeeGwei
54
+ ? new BigNumber(estimatedBaseFeeGwei).shiftedBy(9).toString(10)
55
+ : undefined;
56
+ const maxFeePerGas = maxFeePerGasGwei
57
+ ? new BigNumber(maxFeePerGasGwei).shiftedBy(9).toString(10)
58
+ : undefined;
59
+ const maxPriorityFeePerGas = maxPriorityFeePerGasGwei
60
+ ? new BigNumber(maxPriorityFeePerGasGwei).shiftedBy(9).toString(10)
61
+ : undefined;
62
+ return { estimatedBaseFee, maxFeePerGas, maxPriorityFeePerGas };
63
+ }
64
+ //# sourceMappingURL=gas.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gas.mjs","sourceRoot":"","sources":["../../src/utils/gas.ts"],"names":[],"mappings":"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","sourcesContent":["import type { GasFeeEstimates } from '@metamask/gas-fee-controller';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\nimport type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport { getNativeToken, getTokenFiatRate } from './token';\nimport type { TransactionPayControllerMessenger } from '..';\nimport { projectLogger } from '../logger';\nimport type { FiatValue } from '../types';\n\nconst log = createModuleLogger(projectLogger, 'gas');\n\n/**\n *\n * Calculate the estimated gas cost for a given transaction in fiat.\n *\n * @param transaction - Transaction to calculate gas cost for\n * @param messenger - Controller messenger.\n * @returns Estimated gas cost for the transaction.\n */\nexport function calculateGasCost(\n transaction: TransactionMeta,\n messenger: TransactionPayControllerMessenger,\n): FiatValue {\n const { chainId, gasUsed, gasLimitNoBuffer, txParams } = transaction;\n const { gas, maxFeePerGas, maxPriorityFeePerGas } = txParams;\n\n const estimatedGasLimit = gasUsed || gasLimitNoBuffer || gas || '0x0';\n const { estimatedBaseFee } = getGasFee(chainId, messenger);\n\n const gasFeeValue = estimatedBaseFee\n ? new BigNumber(estimatedBaseFee).plus(maxPriorityFeePerGas ?? '0x0')\n : new BigNumber(maxFeePerGas ?? '0x0');\n\n const gasCost = gasFeeValue.multipliedBy(estimatedGasLimit).shiftedBy(-18);\n\n const fiatRate = getTokenFiatRate(\n messenger,\n getNativeToken(chainId),\n chainId,\n );\n\n if (!fiatRate) {\n throw new Error('Could not fetch fiat rate for native token');\n }\n\n const usd = gasCost.multipliedBy(fiatRate.usdRate).toString(10);\n const fiat = gasCost.multipliedBy(fiatRate.fiatRate).toString(10);\n\n log('Calculated gas cost', {\n transactionId: transaction.id,\n chainId,\n usd,\n fiat,\n });\n\n return {\n usd,\n fiat,\n };\n}\n\n/**\n * Get gas fee estimates for a given chain.\n *\n * @param chainId - Chain ID.\n * @param messenger - Controller messenger.\n * @returns Gas fee estimates for the chain.\n */\nexport function getGasFee(\n chainId: Hex,\n messenger: TransactionPayControllerMessenger,\n) {\n const gasFeeControllerState = messenger.call('GasFeeController:getState');\n\n const chainState = gasFeeControllerState?.gasFeeEstimatesByChainId?.[chainId];\n\n const { estimatedBaseFee: estimatedBaseFeeGwei, medium } =\n (chainState?.gasFeeEstimates as GasFeeEstimates | undefined) ?? {};\n\n const maxFeePerGasGwei = medium?.suggestedMaxFeePerGas;\n const maxPriorityFeePerGasGwei = medium?.suggestedMaxPriorityFeePerGas;\n\n const estimatedBaseFee = estimatedBaseFeeGwei\n ? new BigNumber(estimatedBaseFeeGwei).shiftedBy(9).toString(10)\n : undefined;\n\n const maxFeePerGas = maxFeePerGasGwei\n ? new BigNumber(maxFeePerGasGwei).shiftedBy(9).toString(10)\n : undefined;\n\n const maxPriorityFeePerGas = maxPriorityFeePerGasGwei\n ? new BigNumber(maxPriorityFeePerGasGwei).shiftedBy(9).toString(10)\n : undefined;\n\n return { estimatedBaseFee, maxFeePerGas, maxPriorityFeePerGas };\n}\n"]}
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.queueRefreshQuotes = exports.updateQuotes = void 0;
4
+ const utils_1 = require("@metamask/utils");
5
+ const strategy_1 = require("./strategy.cjs");
6
+ const totals_1 = require("./totals.cjs");
7
+ const transaction_1 = require("./transaction.cjs");
8
+ const logger_1 = require("../logger.cjs");
9
+ const QUOTES_CHECK_INTERVAL = 1 * 1000; // 1 Second
10
+ const DEFAULT_REFRESH_INTERVAL = 30 * 1000; // 30 Seconds
11
+ const log = (0, utils_1.createModuleLogger)(logger_1.projectLogger, 'quotes');
12
+ /**
13
+ * Update the quotes for a specific transaction.
14
+ *
15
+ * @param request - Request parameters.
16
+ */
17
+ async function updateQuotes(request) {
18
+ const { messenger, transactionData, transactionId, updateTransactionData } = request;
19
+ const transaction = (0, transaction_1.getTransaction)(transactionId, messenger);
20
+ log('Updating quotes', { transactionId });
21
+ if (!transaction || !transactionData) {
22
+ throw new Error('Transaction not found');
23
+ }
24
+ const { paymentToken, sourceAmounts, tokens } = transactionData;
25
+ if (!paymentToken) {
26
+ return;
27
+ }
28
+ const requests = (sourceAmounts ?? []).map((sourceAmount, i) => {
29
+ const token = tokens[i];
30
+ return {
31
+ from: transaction.txParams.from,
32
+ sourceBalanceRaw: paymentToken.balanceRaw,
33
+ sourceTokenAmount: sourceAmount.sourceAmountRaw,
34
+ sourceChainId: paymentToken.chainId,
35
+ sourceTokenAddress: paymentToken.address,
36
+ targetAmountMinimum: token.allowUnderMinimum ? '0' : token.amountRaw,
37
+ targetChainId: token.chainId,
38
+ targetTokenAddress: token.address,
39
+ };
40
+ });
41
+ if (!requests?.length) {
42
+ log('No quote requests', { transactionId });
43
+ }
44
+ let quotes = [];
45
+ const strategy = await (0, strategy_1.getStrategy)(messenger, transaction);
46
+ try {
47
+ quotes = requests?.length
48
+ ? (await strategy.getQuotes({
49
+ messenger,
50
+ requests,
51
+ transaction,
52
+ }))
53
+ : [];
54
+ }
55
+ catch (error) {
56
+ log('Error fetching quotes', { error, transactionId });
57
+ }
58
+ log('Updated', { transactionId, quotes });
59
+ const batchTransactions = quotes?.length && strategy.getBatchTransactions
60
+ ? await strategy.getBatchTransactions({
61
+ messenger,
62
+ quotes,
63
+ })
64
+ : [];
65
+ log('Batch transactions', { transactionId, batchTransactions });
66
+ const totals = (0, totals_1.calculateTotals)(quotes, tokens, messenger);
67
+ log('Calculated totals', { transactionId, totals });
68
+ syncTransaction({
69
+ batchTransactions,
70
+ messenger: messenger,
71
+ paymentToken,
72
+ totals,
73
+ transactionId,
74
+ });
75
+ updateTransactionData(transactionId, (data) => {
76
+ data.quotes = quotes;
77
+ data.quotesLastUpdated = Date.now();
78
+ data.totals = totals;
79
+ data.isLoading = false;
80
+ });
81
+ }
82
+ exports.updateQuotes = updateQuotes;
83
+ /**
84
+ * Poll quotes at regular intervals.
85
+ *
86
+ * @param messenger - Messenger instance.
87
+ * @param updateTransactionData - Callback to update transaction data.
88
+ */
89
+ function queueRefreshQuotes(messenger, updateTransactionData) {
90
+ setTimeout(() => {
91
+ refreshQuotes(messenger, updateTransactionData)
92
+ .finally(() => queueRefreshQuotes(messenger, updateTransactionData))
93
+ .catch((error) => {
94
+ log('Error polling quotes', { messenger, error });
95
+ });
96
+ }, QUOTES_CHECK_INTERVAL);
97
+ }
98
+ exports.queueRefreshQuotes = queueRefreshQuotes;
99
+ /**
100
+ * Sync batch transactions to the transaction meta.
101
+ *
102
+ * @param request - Request object.
103
+ * @param request.batchTransactions - Batch transactions to sync.
104
+ * @param request.messenger - Messenger instance.
105
+ * @param request.paymentToken - Payment token used.
106
+ * @param request.totals - Calculated totals.
107
+ * @param request.transactionId - ID of the transaction to sync.
108
+ */
109
+ function syncTransaction({ batchTransactions, messenger, paymentToken, totals, transactionId, }) {
110
+ (0, transaction_1.updateTransaction)({
111
+ transactionId,
112
+ messenger: messenger,
113
+ note: 'Update transaction pay data',
114
+ }, (tx) => {
115
+ tx.batchTransactions = batchTransactions;
116
+ tx.batchTransactionsOptions = {};
117
+ tx.metamaskPay = {
118
+ bridgeFeeFiat: totals.fees.provider.usd,
119
+ chainId: paymentToken.chainId,
120
+ networkFeeFiat: totals.fees.sourceNetwork.usd,
121
+ tokenAddress: paymentToken.address,
122
+ totalFiat: totals.total.usd,
123
+ };
124
+ });
125
+ }
126
+ /**
127
+ * Refresh quotes for all transactions if expired.
128
+ *
129
+ * @param messenger - Messenger instance.
130
+ * @param updateTransactionData - Callback to update transaction data.
131
+ */
132
+ async function refreshQuotes(messenger, updateTransactionData) {
133
+ const state = messenger.call('TransactionPayController:getState');
134
+ const transactionIds = Object.keys(state.transactionData);
135
+ for (const transactionId of transactionIds) {
136
+ const transactionData = state.transactionData[transactionId];
137
+ const { isLoading, quotes, quotesLastUpdated } = transactionData;
138
+ if (isLoading || !quotes?.length) {
139
+ continue;
140
+ }
141
+ const strategyName = quotes[0].strategy;
142
+ const strategy = (0, strategy_1.getStrategyByName)(strategyName);
143
+ const refreshInterval = (await strategy.getRefreshInterval?.({
144
+ chainId: quotes[0].request.sourceChainId,
145
+ messenger,
146
+ })) ?? DEFAULT_REFRESH_INTERVAL;
147
+ const isExpired = Date.now() - (quotesLastUpdated ?? 0) > refreshInterval;
148
+ if (!isExpired) {
149
+ continue;
150
+ }
151
+ log('Refreshing expired quotes', {
152
+ transactionId,
153
+ strategy: strategyName,
154
+ refreshInterval,
155
+ });
156
+ updateTransactionData(transactionId, (data) => {
157
+ data.isLoading = true;
158
+ });
159
+ await updateQuotes({
160
+ messenger,
161
+ transactionData,
162
+ transactionId,
163
+ updateTransactionData,
164
+ });
165
+ log('Refreshed quotes', { transactionId, strategy: strategyName });
166
+ }
167
+ }
168
+ //# sourceMappingURL=quotes.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quotes.cjs","sourceRoot":"","sources":["../../src/utils/quotes.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BatchTransaction } from '@metamask/transaction-controller';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\nimport type { Hex, Json } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\n\nimport { getStrategy, getStrategyByName } from './strategy';\nimport { calculateTotals } from './totals';\nimport { getTransaction, updateTransaction } from './transaction';\nimport { projectLogger } from '../logger';\nimport type {\n QuoteRequest,\n TransactionData,\n TransactionPayControllerMessenger,\n TransactionPayQuote,\n TransactionPayTotals,\n TransactionPaymentToken,\n UpdateTransactionDataCallback,\n} from '../types';\n\nconst QUOTES_CHECK_INTERVAL = 1 * 1000; // 1 Second\nconst DEFAULT_REFRESH_INTERVAL = 30 * 1000; // 30 Seconds\n\nconst log = createModuleLogger(projectLogger, 'quotes');\n\nexport type UpdateQuotesRequest = {\n messenger: TransactionPayControllerMessenger;\n transactionData: TransactionData | undefined;\n transactionId: string;\n updateTransactionData: UpdateTransactionDataCallback;\n};\n\n/**\n * Update the quotes for a specific transaction.\n *\n * @param request - Request parameters.\n */\nexport async function updateQuotes(request: UpdateQuotesRequest) {\n const { messenger, transactionData, transactionId, updateTransactionData } =\n request;\n\n const transaction = getTransaction(transactionId, messenger);\n\n log('Updating quotes', { transactionId });\n\n if (!transaction || !transactionData) {\n throw new Error('Transaction not found');\n }\n\n const { paymentToken, sourceAmounts, tokens } = transactionData;\n\n if (!paymentToken) {\n return;\n }\n\n const requests: QuoteRequest[] = (sourceAmounts ?? []).map(\n (sourceAmount, i) => {\n const token = tokens[i];\n\n return {\n from: transaction.txParams.from as Hex,\n sourceBalanceRaw: paymentToken.balanceRaw,\n sourceTokenAmount: sourceAmount.sourceAmountRaw,\n sourceChainId: paymentToken.chainId,\n sourceTokenAddress: paymentToken.address,\n targetAmountMinimum: token.allowUnderMinimum ? '0' : token.amountRaw,\n targetChainId: token.chainId,\n targetTokenAddress: token.address,\n };\n },\n );\n\n if (!requests?.length) {\n log('No quote requests', { transactionId });\n }\n\n let quotes: TransactionPayQuote<Json>[] | undefined = [];\n\n const strategy = await getStrategy(messenger as never, transaction);\n\n try {\n quotes = requests?.length\n ? ((await strategy.getQuotes({\n messenger,\n requests,\n transaction,\n })) as TransactionPayQuote<Json>[])\n : [];\n } catch (error) {\n log('Error fetching quotes', { error, transactionId });\n }\n\n log('Updated', { transactionId, quotes });\n\n const batchTransactions =\n quotes?.length && strategy.getBatchTransactions\n ? await strategy.getBatchTransactions({\n messenger,\n quotes,\n })\n : [];\n\n log('Batch transactions', { transactionId, batchTransactions });\n\n const totals = calculateTotals(quotes as never, tokens, messenger);\n\n log('Calculated totals', { transactionId, totals });\n\n syncTransaction({\n batchTransactions,\n messenger: messenger as never,\n paymentToken,\n totals,\n transactionId,\n });\n\n updateTransactionData(transactionId, (data) => {\n data.quotes = quotes as never;\n data.quotesLastUpdated = Date.now();\n data.totals = totals;\n data.isLoading = false;\n });\n}\n\n/**\n * Poll quotes at regular intervals.\n *\n * @param messenger - Messenger instance.\n * @param updateTransactionData - Callback to update transaction data.\n */\nexport function queueRefreshQuotes(\n messenger: TransactionPayControllerMessenger,\n updateTransactionData: UpdateTransactionDataCallback,\n) {\n setTimeout(() => {\n refreshQuotes(messenger, updateTransactionData)\n .finally(() => queueRefreshQuotes(messenger, updateTransactionData))\n .catch((error) => {\n log('Error polling quotes', { messenger, error });\n });\n }, QUOTES_CHECK_INTERVAL);\n}\n\n/**\n * Sync batch transactions to the transaction meta.\n *\n * @param request - Request object.\n * @param request.batchTransactions - Batch transactions to sync.\n * @param request.messenger - Messenger instance.\n * @param request.paymentToken - Payment token used.\n * @param request.totals - Calculated totals.\n * @param request.transactionId - ID of the transaction to sync.\n */\nfunction syncTransaction({\n batchTransactions,\n messenger,\n paymentToken,\n totals,\n transactionId,\n}: {\n batchTransactions: BatchTransaction[];\n messenger: TransactionPayControllerMessenger;\n paymentToken: TransactionPaymentToken;\n totals: TransactionPayTotals;\n transactionId: string;\n}) {\n updateTransaction(\n {\n transactionId,\n messenger: messenger as never,\n note: 'Update transaction pay data',\n },\n (tx: TransactionMeta) => {\n tx.batchTransactions = batchTransactions;\n tx.batchTransactionsOptions = {};\n\n tx.metamaskPay = {\n bridgeFeeFiat: totals.fees.provider.usd,\n chainId: paymentToken.chainId,\n networkFeeFiat: totals.fees.sourceNetwork.usd,\n tokenAddress: paymentToken.address,\n totalFiat: totals.total.usd,\n };\n },\n );\n}\n\n/**\n * Refresh quotes for all transactions if expired.\n *\n * @param messenger - Messenger instance.\n * @param updateTransactionData - Callback to update transaction data.\n */\nasync function refreshQuotes(\n messenger: TransactionPayControllerMessenger,\n updateTransactionData: UpdateTransactionDataCallback,\n) {\n const state = messenger.call('TransactionPayController:getState');\n const transactionIds = Object.keys(state.transactionData);\n\n for (const transactionId of transactionIds) {\n const transactionData = state.transactionData[transactionId];\n const { isLoading, quotes, quotesLastUpdated } = transactionData;\n\n if (isLoading || !quotes?.length) {\n continue;\n }\n\n const strategyName = quotes[0].strategy;\n const strategy = getStrategyByName(strategyName);\n\n const refreshInterval =\n (await strategy.getRefreshInterval?.({\n chainId: quotes[0].request.sourceChainId,\n messenger,\n })) ?? DEFAULT_REFRESH_INTERVAL;\n\n const isExpired = Date.now() - (quotesLastUpdated ?? 0) > refreshInterval;\n\n if (!isExpired) {\n continue;\n }\n\n log('Refreshing expired quotes', {\n transactionId,\n strategy: strategyName,\n refreshInterval,\n });\n\n updateTransactionData(transactionId, (data) => {\n data.isLoading = true;\n });\n\n await updateQuotes({\n messenger,\n transactionData,\n transactionId,\n updateTransactionData,\n });\n\n log('Refreshed quotes', { transactionId, strategy: strategyName });\n }\n}\n"]}
@@ -0,0 +1,21 @@
1
+ import type { TransactionData, TransactionPayControllerMessenger, UpdateTransactionDataCallback } from "../types.cjs";
2
+ export type UpdateQuotesRequest = {
3
+ messenger: TransactionPayControllerMessenger;
4
+ transactionData: TransactionData | undefined;
5
+ transactionId: string;
6
+ updateTransactionData: UpdateTransactionDataCallback;
7
+ };
8
+ /**
9
+ * Update the quotes for a specific transaction.
10
+ *
11
+ * @param request - Request parameters.
12
+ */
13
+ export declare function updateQuotes(request: UpdateQuotesRequest): Promise<void>;
14
+ /**
15
+ * Poll quotes at regular intervals.
16
+ *
17
+ * @param messenger - Messenger instance.
18
+ * @param updateTransactionData - Callback to update transaction data.
19
+ */
20
+ export declare function queueRefreshQuotes(messenger: TransactionPayControllerMessenger, updateTransactionData: UpdateTransactionDataCallback): void;
21
+ //# sourceMappingURL=quotes.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quotes.d.cts","sourceRoot":"","sources":["../../src/utils/quotes.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAEV,eAAe,EACf,iCAAiC,EAIjC,6BAA6B,EAC9B,qBAAiB;AAOlB,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,iCAAiC,CAAC;IAC7C,eAAe,EAAE,eAAe,GAAG,SAAS,CAAC;IAC7C,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,6BAA6B,CAAC;CACtD,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,mBAAmB,iBAqF9D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,iCAAiC,EAC5C,qBAAqB,EAAE,6BAA6B,QASrD"}
@@ -0,0 +1,21 @@
1
+ import type { TransactionData, TransactionPayControllerMessenger, UpdateTransactionDataCallback } from "../types.mjs";
2
+ export type UpdateQuotesRequest = {
3
+ messenger: TransactionPayControllerMessenger;
4
+ transactionData: TransactionData | undefined;
5
+ transactionId: string;
6
+ updateTransactionData: UpdateTransactionDataCallback;
7
+ };
8
+ /**
9
+ * Update the quotes for a specific transaction.
10
+ *
11
+ * @param request - Request parameters.
12
+ */
13
+ export declare function updateQuotes(request: UpdateQuotesRequest): Promise<void>;
14
+ /**
15
+ * Poll quotes at regular intervals.
16
+ *
17
+ * @param messenger - Messenger instance.
18
+ * @param updateTransactionData - Callback to update transaction data.
19
+ */
20
+ export declare function queueRefreshQuotes(messenger: TransactionPayControllerMessenger, updateTransactionData: UpdateTransactionDataCallback): void;
21
+ //# sourceMappingURL=quotes.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quotes.d.mts","sourceRoot":"","sources":["../../src/utils/quotes.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAEV,eAAe,EACf,iCAAiC,EAIjC,6BAA6B,EAC9B,qBAAiB;AAOlB,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,iCAAiC,CAAC;IAC7C,eAAe,EAAE,eAAe,GAAG,SAAS,CAAC;IAC7C,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,6BAA6B,CAAC;CACtD,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,mBAAmB,iBAqF9D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,iCAAiC,EAC5C,qBAAqB,EAAE,6BAA6B,QASrD"}