@metamask-previews/transaction-pay-controller 23.1.0-preview-a65eb72 → 23.1.0-preview-e37aff3

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 (80) hide show
  1. package/CHANGELOG.md +0 -5
  2. package/dist/TransactionPayController-method-action-types.cjs.map +1 -1
  3. package/dist/TransactionPayController-method-action-types.d.cts +1 -5
  4. package/dist/TransactionPayController-method-action-types.d.cts.map +1 -1
  5. package/dist/TransactionPayController-method-action-types.d.mts +1 -5
  6. package/dist/TransactionPayController-method-action-types.d.mts.map +1 -1
  7. package/dist/TransactionPayController-method-action-types.mjs.map +1 -1
  8. package/dist/TransactionPayController.cjs +3 -9
  9. package/dist/TransactionPayController.cjs.map +1 -1
  10. package/dist/TransactionPayController.d.cts +2 -3
  11. package/dist/TransactionPayController.d.cts.map +1 -1
  12. package/dist/TransactionPayController.d.mts +2 -3
  13. package/dist/TransactionPayController.d.mts.map +1 -1
  14. package/dist/TransactionPayController.mjs +3 -9
  15. package/dist/TransactionPayController.mjs.map +1 -1
  16. package/dist/index.cjs.map +1 -1
  17. package/dist/index.d.cts +2 -2
  18. package/dist/index.d.cts.map +1 -1
  19. package/dist/index.d.mts +2 -2
  20. package/dist/index.d.mts.map +1 -1
  21. package/dist/index.mjs.map +1 -1
  22. package/dist/strategy/fiat/fiat-submit.cjs +101 -27
  23. package/dist/strategy/fiat/fiat-submit.cjs.map +1 -1
  24. package/dist/strategy/fiat/fiat-submit.d.cts.map +1 -1
  25. package/dist/strategy/fiat/fiat-submit.d.mts.map +1 -1
  26. package/dist/strategy/fiat/fiat-submit.mjs +101 -27
  27. package/dist/strategy/fiat/fiat-submit.mjs.map +1 -1
  28. package/dist/strategy/fiat/utils.cjs +1 -66
  29. package/dist/strategy/fiat/utils.cjs.map +1 -1
  30. package/dist/strategy/fiat/utils.d.cts +0 -32
  31. package/dist/strategy/fiat/utils.d.cts.map +1 -1
  32. package/dist/strategy/fiat/utils.d.mts +0 -32
  33. package/dist/strategy/fiat/utils.d.mts.map +1 -1
  34. package/dist/strategy/fiat/utils.mjs +0 -63
  35. package/dist/strategy/fiat/utils.mjs.map +1 -1
  36. package/dist/types.cjs.map +1 -1
  37. package/dist/types.d.cts +0 -22
  38. package/dist/types.d.cts.map +1 -1
  39. package/dist/types.d.mts +0 -22
  40. package/dist/types.d.mts.map +1 -1
  41. package/dist/types.mjs.map +1 -1
  42. package/dist/utils/feature-flags.cjs +1 -41
  43. package/dist/utils/feature-flags.cjs.map +1 -1
  44. package/dist/utils/feature-flags.d.cts +0 -22
  45. package/dist/utils/feature-flags.d.cts.map +1 -1
  46. package/dist/utils/feature-flags.d.mts +0 -22
  47. package/dist/utils/feature-flags.d.mts.map +1 -1
  48. package/dist/utils/feature-flags.mjs +0 -38
  49. package/dist/utils/feature-flags.mjs.map +1 -1
  50. package/dist/utils/quotes.cjs +2 -3
  51. package/dist/utils/quotes.cjs.map +1 -1
  52. package/dist/utils/quotes.d.cts.map +1 -1
  53. package/dist/utils/quotes.d.mts.map +1 -1
  54. package/dist/utils/quotes.mjs +2 -3
  55. package/dist/utils/quotes.mjs.map +1 -1
  56. package/dist/utils/totals.cjs +7 -41
  57. package/dist/utils/totals.cjs.map +1 -1
  58. package/dist/utils/totals.d.cts +1 -3
  59. package/dist/utils/totals.d.cts.map +1 -1
  60. package/dist/utils/totals.d.mts +1 -3
  61. package/dist/utils/totals.d.mts.map +1 -1
  62. package/dist/utils/totals.mjs +7 -41
  63. package/dist/utils/totals.mjs.map +1 -1
  64. package/package.json +1 -1
  65. package/dist/strategy/fiat/fiat-submit-simple.cjs +0 -61
  66. package/dist/strategy/fiat/fiat-submit-simple.cjs.map +0 -1
  67. package/dist/strategy/fiat/fiat-submit-simple.d.cts +0 -23
  68. package/dist/strategy/fiat/fiat-submit-simple.d.cts.map +0 -1
  69. package/dist/strategy/fiat/fiat-submit-simple.d.mts +0 -23
  70. package/dist/strategy/fiat/fiat-submit-simple.d.mts.map +0 -1
  71. package/dist/strategy/fiat/fiat-submit-simple.mjs +0 -57
  72. package/dist/strategy/fiat/fiat-submit-simple.mjs.map +0 -1
  73. package/dist/strategy/fiat/fiat-submit-with-calldata.cjs +0 -185
  74. package/dist/strategy/fiat/fiat-submit-with-calldata.cjs.map +0 -1
  75. package/dist/strategy/fiat/fiat-submit-with-calldata.d.cts +0 -27
  76. package/dist/strategy/fiat/fiat-submit-with-calldata.d.cts.map +0 -1
  77. package/dist/strategy/fiat/fiat-submit-with-calldata.d.mts +0 -27
  78. package/dist/strategy/fiat/fiat-submit-with-calldata.d.mts.map +0 -1
  79. package/dist/strategy/fiat/fiat-submit-with-calldata.mjs +0 -181
  80. package/dist/strategy/fiat/fiat-submit-with-calldata.mjs.map +0 -1
@@ -9,7 +9,6 @@ const gas_1 = require("./gas.cjs");
9
9
  * Calculate totals for a list of quotes and tokens.
10
10
  *
11
11
  * @param request - Request parameters.
12
- * @param request.fiatPaymentAmount - The amount of the transaction in fiat.
13
12
  * @param request.isMaxAmount - Whether the transaction is a maximum amount transaction.
14
13
  * @param request.quotes - List of bridge quotes.
15
14
  * @param request.messenger - Controller messenger.
@@ -17,7 +16,7 @@ const gas_1 = require("./gas.cjs");
17
16
  * @param request.transaction - Transaction metadata.
18
17
  * @returns The calculated totals in USD and fiat currency.
19
18
  */
20
- function calculateTotals({ fiatPaymentAmount, isMaxAmount, quotes, messenger, tokens, transaction, }) {
19
+ function calculateTotals({ isMaxAmount, quotes, messenger, tokens, transaction, }) {
21
20
  const metaMaskFee = sumFiat(quotes.map((quote) => quote.fees.metaMask));
22
21
  const providerFee = sumFiat(quotes.map((quote) => quote.fees.provider));
23
22
  const providerFiatFee = sumFiat(quotes.map((quote) => quote.fees.providerFiat ?? { fiat: '0', usd: '0' }));
@@ -37,33 +36,21 @@ function calculateTotals({ fiatPaymentAmount, isMaxAmount, quotes, messenger, to
37
36
  const amountFiat = sumProperty(quoteTokens, (token) => token.amountFiat);
38
37
  const amountUsd = sumProperty(quoteTokens, (token) => token.amountUsd);
39
38
  const hasQuotes = quotes.length > 0;
40
- const sourceAmountFiat = getSourceAmount({
41
- hasFiatStrategy,
42
- fiatPaymentAmount,
43
- isMaxAmount,
44
- hasQuotes,
45
- targetAmount: targetAmount.fiat,
46
- tokenAmount: amountFiat,
47
- });
48
- const sourceAmountUsd = getSourceAmount({
49
- hasFiatStrategy,
50
- fiatPaymentAmount,
51
- isMaxAmount,
52
- hasQuotes,
53
- targetAmount: targetAmount.usd,
54
- tokenAmount: amountUsd,
55
- });
56
39
  const totalFiat = new bignumber_js_1.BigNumber(providerFee.fiat)
57
40
  .plus(metaMaskFee.fiat)
58
41
  .plus(sourceNetworkFeeEstimate.fiat)
59
42
  .plus(targetNetworkFee.fiat)
60
- .plus(sourceAmountFiat)
43
+ .plus((hasFiatStrategy || isMaxAmount) && hasQuotes
44
+ ? targetAmount.fiat
45
+ : amountFiat)
61
46
  .toString(10);
62
47
  const totalUsd = new bignumber_js_1.BigNumber(providerFee.usd)
63
48
  .plus(metaMaskFee.usd)
64
49
  .plus(sourceNetworkFeeEstimate.usd)
65
50
  .plus(targetNetworkFee.usd)
66
- .plus(sourceAmountUsd)
51
+ .plus((hasFiatStrategy || isMaxAmount) && hasQuotes
52
+ ? targetAmount.usd
53
+ : amountUsd)
67
54
  .toString(10);
68
55
  const estimatedDuration = Number(sumProperty(quotes, (quote) => quote.estimatedDuration));
69
56
  const isSourceGasFeeToken = quotes.some((quote) => quote.fees.isSourceGasFeeToken);
@@ -92,27 +79,6 @@ function calculateTotals({ fiatPaymentAmount, isMaxAmount, quotes, messenger, to
92
79
  };
93
80
  }
94
81
  exports.calculateTotals = calculateTotals;
95
- /**
96
- * Get the source amount to include in totals.
97
- *
98
- * @param request - Request parameters.
99
- * @param request.hasFiatStrategy - Whether a fiat strategy quote is present.
100
- * @param request.fiatPaymentAmount - The fiat payment amount, if applicable.
101
- * @param request.isMaxAmount - Whether the transaction is a maximum amount transaction.
102
- * @param request.hasQuotes - Whether any quotes are present.
103
- * @param request.targetAmount - The target amount from quotes.
104
- * @param request.tokenAmount - The summed token amount.
105
- * @returns The payment amount to include in totals.
106
- */
107
- function getSourceAmount({ hasFiatStrategy, fiatPaymentAmount, isMaxAmount, hasQuotes, targetAmount, tokenAmount, }) {
108
- if (hasFiatStrategy) {
109
- return fiatPaymentAmount ?? '0';
110
- }
111
- if (isMaxAmount && hasQuotes) {
112
- return targetAmount;
113
- }
114
- return tokenAmount;
115
- }
116
82
  /**
117
83
  * Sum a list of fiat value.
118
84
  *
@@ -1 +1 @@
1
- {"version":3,"file":"totals.cjs","sourceRoot":"","sources":["../../src/utils/totals.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TransactionMeta } from '@metamask/transaction-controller';\nimport { BigNumber } from 'bignumber.js';\n\nimport { TransactionPayStrategy } from '../constants';\nimport type {\n FiatValue,\n TransactionPayControllerMessenger,\n TransactionPayQuote,\n TransactionPayRequiredToken,\n TransactionPayTotals,\n} from '../types';\nimport { sumAmounts } from './amounts';\nimport { calculateTransactionGasCost } from './gas';\n\n/**\n * Calculate totals for a list of quotes and tokens.\n *\n * @param request - Request parameters.\n * @param request.fiatPaymentAmount - The amount of the transaction in fiat.\n * @param request.isMaxAmount - Whether the transaction is a maximum amount transaction.\n * @param request.quotes - List of bridge quotes.\n * @param request.messenger - Controller messenger.\n * @param request.tokens - List of required tokens.\n * @param request.transaction - Transaction metadata.\n * @returns The calculated totals in USD and fiat currency.\n */\nexport function calculateTotals({\n fiatPaymentAmount,\n isMaxAmount,\n quotes,\n messenger,\n tokens,\n transaction,\n}: {\n fiatPaymentAmount?: string;\n isMaxAmount?: boolean;\n quotes: TransactionPayQuote<unknown>[];\n messenger: TransactionPayControllerMessenger;\n tokens: TransactionPayRequiredToken[];\n transaction: TransactionMeta;\n}): TransactionPayTotals {\n const metaMaskFee = sumFiat(quotes.map((quote) => quote.fees.metaMask));\n const providerFee = sumFiat(quotes.map((quote) => quote.fees.provider));\n const providerFiatFee = sumFiat(\n quotes.map((quote) => quote.fees.providerFiat ?? { fiat: '0', usd: '0' }),\n );\n const hasFiatStrategy = quotes.some(\n (quote) => quote.strategy === TransactionPayStrategy.Fiat,\n );\n\n const sourceNetworkFeeMax = sumAmounts(\n quotes.map((quote) => quote.fees.sourceNetwork.max),\n );\n\n const sourceNetworkFeeEstimate = sumAmounts(\n quotes.map((quote) => quote.fees.sourceNetwork.estimate),\n );\n\n const transactionNetworkFee = calculateTransactionGasCost(\n transaction,\n messenger,\n );\n\n const targetNetworkFee = quotes?.length\n ? {\n ...sumFiat(quotes.map((quote) => quote.fees.targetNetwork)),\n isGasFeeToken: false,\n }\n : transactionNetworkFee;\n\n const sourceAmount = sumAmounts(quotes.map((quote) => quote.sourceAmount));\n const targetAmount = sumFiat(quotes.map((quote) => quote.targetAmount));\n\n const quoteTokens = tokens.filter(\n (singleToken) => !singleToken.skipIfBalance,\n );\n\n const amountFiat = sumProperty(quoteTokens, (token) => token.amountFiat);\n const amountUsd = sumProperty(quoteTokens, (token) => token.amountUsd);\n const hasQuotes = quotes.length > 0;\n\n const sourceAmountFiat = getSourceAmount({\n hasFiatStrategy,\n fiatPaymentAmount,\n isMaxAmount,\n hasQuotes,\n targetAmount: targetAmount.fiat,\n tokenAmount: amountFiat,\n });\n\n const sourceAmountUsd = getSourceAmount({\n hasFiatStrategy,\n fiatPaymentAmount,\n isMaxAmount,\n hasQuotes,\n targetAmount: targetAmount.usd,\n tokenAmount: amountUsd,\n });\n\n const totalFiat = new BigNumber(providerFee.fiat)\n .plus(metaMaskFee.fiat)\n .plus(sourceNetworkFeeEstimate.fiat)\n .plus(targetNetworkFee.fiat)\n .plus(sourceAmountFiat)\n .toString(10);\n\n const totalUsd = new BigNumber(providerFee.usd)\n .plus(metaMaskFee.usd)\n .plus(sourceNetworkFeeEstimate.usd)\n .plus(targetNetworkFee.usd)\n .plus(sourceAmountUsd)\n .toString(10);\n\n const estimatedDuration = Number(\n sumProperty(quotes, (quote) => quote.estimatedDuration),\n );\n\n const isSourceGasFeeToken = quotes.some(\n (quote) => quote.fees.isSourceGasFeeToken,\n );\n\n const isTargetGasFeeToken =\n Boolean(targetNetworkFee.isGasFeeToken) ||\n quotes.some((quote) => quote.fees.isTargetGasFeeToken);\n\n return {\n estimatedDuration,\n fees: {\n isSourceGasFeeToken,\n isTargetGasFeeToken,\n providerFiat: providerFiatFee,\n metaMask: metaMaskFee,\n provider: providerFee,\n sourceNetwork: {\n estimate: sourceNetworkFeeEstimate,\n max: sourceNetworkFeeMax,\n },\n targetNetwork: targetNetworkFee,\n },\n sourceAmount,\n targetAmount,\n total: {\n fiat: totalFiat,\n usd: totalUsd,\n },\n };\n}\n\n/**\n * Get the source amount to include in totals.\n *\n * @param request - Request parameters.\n * @param request.hasFiatStrategy - Whether a fiat strategy quote is present.\n * @param request.fiatPaymentAmount - The fiat payment amount, if applicable.\n * @param request.isMaxAmount - Whether the transaction is a maximum amount transaction.\n * @param request.hasQuotes - Whether any quotes are present.\n * @param request.targetAmount - The target amount from quotes.\n * @param request.tokenAmount - The summed token amount.\n * @returns The payment amount to include in totals.\n */\nfunction getSourceAmount({\n hasFiatStrategy,\n fiatPaymentAmount,\n isMaxAmount,\n hasQuotes,\n targetAmount,\n tokenAmount,\n}: {\n hasFiatStrategy: boolean;\n fiatPaymentAmount?: string;\n isMaxAmount?: boolean;\n hasQuotes: boolean;\n targetAmount: string;\n tokenAmount: string;\n}): string {\n if (hasFiatStrategy) {\n return fiatPaymentAmount ?? '0';\n }\n\n if (isMaxAmount && hasQuotes) {\n return targetAmount;\n }\n\n return tokenAmount;\n}\n\n/**\n * Sum a list of fiat value.\n *\n * @param data - List of fiat values.\n * @returns Total fiat value.\n */\nfunction sumFiat(data: FiatValue[]): FiatValue {\n const fiat = sumProperty(data, (item) => item.fiat);\n const usd = sumProperty(data, (item) => item.usd);\n return { fiat, usd };\n}\n\n/**\n * Sum a specific property from a list of items.\n *\n * @param data - List of items.\n * @param getProperty - Function to extract the property to sum from each item.\n * @returns The summed value as a string.\n */\nfunction sumProperty<DataType>(\n data: DataType[],\n getProperty: (item: DataType) => BigNumber.Value,\n): string {\n return data\n .map(getProperty)\n .reduce<BigNumber>((total, value) => total.plus(value), new BigNumber(0))\n .toString(10);\n}\n"]}
1
+ {"version":3,"file":"totals.cjs","sourceRoot":"","sources":["../../src/utils/totals.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TransactionMeta } from '@metamask/transaction-controller';\nimport { BigNumber } from 'bignumber.js';\n\nimport { TransactionPayStrategy } from '../constants';\nimport type {\n FiatValue,\n TransactionPayControllerMessenger,\n TransactionPayQuote,\n TransactionPayRequiredToken,\n TransactionPayTotals,\n} from '../types';\nimport { sumAmounts } from './amounts';\nimport { calculateTransactionGasCost } from './gas';\n\n/**\n * Calculate totals for a list of quotes and tokens.\n *\n * @param request - Request parameters.\n * @param request.isMaxAmount - Whether the transaction is a maximum amount transaction.\n * @param request.quotes - List of bridge quotes.\n * @param request.messenger - Controller messenger.\n * @param request.tokens - List of required tokens.\n * @param request.transaction - Transaction metadata.\n * @returns The calculated totals in USD and fiat currency.\n */\nexport function calculateTotals({\n isMaxAmount,\n quotes,\n messenger,\n tokens,\n transaction,\n}: {\n isMaxAmount?: boolean;\n quotes: TransactionPayQuote<unknown>[];\n messenger: TransactionPayControllerMessenger;\n tokens: TransactionPayRequiredToken[];\n transaction: TransactionMeta;\n}): TransactionPayTotals {\n const metaMaskFee = sumFiat(quotes.map((quote) => quote.fees.metaMask));\n const providerFee = sumFiat(quotes.map((quote) => quote.fees.provider));\n const providerFiatFee = sumFiat(\n quotes.map((quote) => quote.fees.providerFiat ?? { fiat: '0', usd: '0' }),\n );\n const hasFiatStrategy = quotes.some(\n (quote) => quote.strategy === TransactionPayStrategy.Fiat,\n );\n\n const sourceNetworkFeeMax = sumAmounts(\n quotes.map((quote) => quote.fees.sourceNetwork.max),\n );\n\n const sourceNetworkFeeEstimate = sumAmounts(\n quotes.map((quote) => quote.fees.sourceNetwork.estimate),\n );\n\n const transactionNetworkFee = calculateTransactionGasCost(\n transaction,\n messenger,\n );\n\n const targetNetworkFee = quotes?.length\n ? {\n ...sumFiat(quotes.map((quote) => quote.fees.targetNetwork)),\n isGasFeeToken: false,\n }\n : transactionNetworkFee;\n\n const sourceAmount = sumAmounts(quotes.map((quote) => quote.sourceAmount));\n const targetAmount = sumFiat(quotes.map((quote) => quote.targetAmount));\n\n const quoteTokens = tokens.filter(\n (singleToken) => !singleToken.skipIfBalance,\n );\n\n const amountFiat = sumProperty(quoteTokens, (token) => token.amountFiat);\n const amountUsd = sumProperty(quoteTokens, (token) => token.amountUsd);\n const hasQuotes = quotes.length > 0;\n\n const totalFiat = new BigNumber(providerFee.fiat)\n .plus(metaMaskFee.fiat)\n .plus(sourceNetworkFeeEstimate.fiat)\n .plus(targetNetworkFee.fiat)\n .plus(\n (hasFiatStrategy || isMaxAmount) && hasQuotes\n ? targetAmount.fiat\n : amountFiat,\n )\n .toString(10);\n\n const totalUsd = new BigNumber(providerFee.usd)\n .plus(metaMaskFee.usd)\n .plus(sourceNetworkFeeEstimate.usd)\n .plus(targetNetworkFee.usd)\n .plus(\n (hasFiatStrategy || isMaxAmount) && hasQuotes\n ? targetAmount.usd\n : amountUsd,\n )\n .toString(10);\n\n const estimatedDuration = Number(\n sumProperty(quotes, (quote) => quote.estimatedDuration),\n );\n\n const isSourceGasFeeToken = quotes.some(\n (quote) => quote.fees.isSourceGasFeeToken,\n );\n\n const isTargetGasFeeToken =\n Boolean(targetNetworkFee.isGasFeeToken) ||\n quotes.some((quote) => quote.fees.isTargetGasFeeToken);\n\n return {\n estimatedDuration,\n fees: {\n isSourceGasFeeToken,\n isTargetGasFeeToken,\n providerFiat: providerFiatFee,\n metaMask: metaMaskFee,\n provider: providerFee,\n sourceNetwork: {\n estimate: sourceNetworkFeeEstimate,\n max: sourceNetworkFeeMax,\n },\n targetNetwork: targetNetworkFee,\n },\n sourceAmount,\n targetAmount,\n total: {\n fiat: totalFiat,\n usd: totalUsd,\n },\n };\n}\n\n/**\n * Sum a list of fiat value.\n *\n * @param data - List of fiat values.\n * @returns Total fiat value.\n */\nfunction sumFiat(data: FiatValue[]): FiatValue {\n const fiat = sumProperty(data, (item) => item.fiat);\n const usd = sumProperty(data, (item) => item.usd);\n return { fiat, usd };\n}\n\n/**\n * Sum a specific property from a list of items.\n *\n * @param data - List of items.\n * @param getProperty - Function to extract the property to sum from each item.\n * @returns The summed value as a string.\n */\nfunction sumProperty<DataType>(\n data: DataType[],\n getProperty: (item: DataType) => BigNumber.Value,\n): string {\n return data\n .map(getProperty)\n .reduce<BigNumber>((total, value) => total.plus(value), new BigNumber(0))\n .toString(10);\n}\n"]}
@@ -4,7 +4,6 @@ import type { TransactionPayControllerMessenger, TransactionPayQuote, Transactio
4
4
  * Calculate totals for a list of quotes and tokens.
5
5
  *
6
6
  * @param request - Request parameters.
7
- * @param request.fiatPaymentAmount - The amount of the transaction in fiat.
8
7
  * @param request.isMaxAmount - Whether the transaction is a maximum amount transaction.
9
8
  * @param request.quotes - List of bridge quotes.
10
9
  * @param request.messenger - Controller messenger.
@@ -12,8 +11,7 @@ import type { TransactionPayControllerMessenger, TransactionPayQuote, Transactio
12
11
  * @param request.transaction - Transaction metadata.
13
12
  * @returns The calculated totals in USD and fiat currency.
14
13
  */
15
- export declare function calculateTotals({ fiatPaymentAmount, isMaxAmount, quotes, messenger, tokens, transaction, }: {
16
- fiatPaymentAmount?: string;
14
+ export declare function calculateTotals({ isMaxAmount, quotes, messenger, tokens, transaction, }: {
17
15
  isMaxAmount?: boolean;
18
16
  quotes: TransactionPayQuote<unknown>[];
19
17
  messenger: TransactionPayControllerMessenger;
@@ -1 +1 @@
1
- {"version":3,"file":"totals.d.cts","sourceRoot":"","sources":["../../src/utils/totals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,yCAAyC;AAIxE,OAAO,KAAK,EAEV,iCAAiC,EACjC,mBAAmB,EACnB,2BAA2B,EAC3B,oBAAoB,EACrB,qBAAiB;AAIlB;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,EAC9B,iBAAiB,EACjB,WAAW,EACX,MAAM,EACN,SAAS,EACT,MAAM,EACN,WAAW,GACZ,EAAE;IACD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;IACvC,SAAS,EAAE,iCAAiC,CAAC;IAC7C,MAAM,EAAE,2BAA2B,EAAE,CAAC;IACtC,WAAW,EAAE,eAAe,CAAC;CAC9B,GAAG,oBAAoB,CA0GvB"}
1
+ {"version":3,"file":"totals.d.cts","sourceRoot":"","sources":["../../src/utils/totals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,yCAAyC;AAIxE,OAAO,KAAK,EAEV,iCAAiC,EACjC,mBAAmB,EACnB,2BAA2B,EAC3B,oBAAoB,EACrB,qBAAiB;AAIlB;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,EAC9B,WAAW,EACX,MAAM,EACN,SAAS,EACT,MAAM,EACN,WAAW,GACZ,EAAE;IACD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;IACvC,SAAS,EAAE,iCAAiC,CAAC;IAC7C,MAAM,EAAE,2BAA2B,EAAE,CAAC;IACtC,WAAW,EAAE,eAAe,CAAC;CAC9B,GAAG,oBAAoB,CAgGvB"}
@@ -4,7 +4,6 @@ import type { TransactionPayControllerMessenger, TransactionPayQuote, Transactio
4
4
  * Calculate totals for a list of quotes and tokens.
5
5
  *
6
6
  * @param request - Request parameters.
7
- * @param request.fiatPaymentAmount - The amount of the transaction in fiat.
8
7
  * @param request.isMaxAmount - Whether the transaction is a maximum amount transaction.
9
8
  * @param request.quotes - List of bridge quotes.
10
9
  * @param request.messenger - Controller messenger.
@@ -12,8 +11,7 @@ import type { TransactionPayControllerMessenger, TransactionPayQuote, Transactio
12
11
  * @param request.transaction - Transaction metadata.
13
12
  * @returns The calculated totals in USD and fiat currency.
14
13
  */
15
- export declare function calculateTotals({ fiatPaymentAmount, isMaxAmount, quotes, messenger, tokens, transaction, }: {
16
- fiatPaymentAmount?: string;
14
+ export declare function calculateTotals({ isMaxAmount, quotes, messenger, tokens, transaction, }: {
17
15
  isMaxAmount?: boolean;
18
16
  quotes: TransactionPayQuote<unknown>[];
19
17
  messenger: TransactionPayControllerMessenger;
@@ -1 +1 @@
1
- {"version":3,"file":"totals.d.mts","sourceRoot":"","sources":["../../src/utils/totals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,yCAAyC;AAIxE,OAAO,KAAK,EAEV,iCAAiC,EACjC,mBAAmB,EACnB,2BAA2B,EAC3B,oBAAoB,EACrB,qBAAiB;AAIlB;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,EAC9B,iBAAiB,EACjB,WAAW,EACX,MAAM,EACN,SAAS,EACT,MAAM,EACN,WAAW,GACZ,EAAE;IACD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;IACvC,SAAS,EAAE,iCAAiC,CAAC;IAC7C,MAAM,EAAE,2BAA2B,EAAE,CAAC;IACtC,WAAW,EAAE,eAAe,CAAC;CAC9B,GAAG,oBAAoB,CA0GvB"}
1
+ {"version":3,"file":"totals.d.mts","sourceRoot":"","sources":["../../src/utils/totals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,yCAAyC;AAIxE,OAAO,KAAK,EAEV,iCAAiC,EACjC,mBAAmB,EACnB,2BAA2B,EAC3B,oBAAoB,EACrB,qBAAiB;AAIlB;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,EAC9B,WAAW,EACX,MAAM,EACN,SAAS,EACT,MAAM,EACN,WAAW,GACZ,EAAE;IACD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;IACvC,SAAS,EAAE,iCAAiC,CAAC;IAC7C,MAAM,EAAE,2BAA2B,EAAE,CAAC;IACtC,WAAW,EAAE,eAAe,CAAC;CAC9B,GAAG,oBAAoB,CAgGvB"}
@@ -6,7 +6,6 @@ import { calculateTransactionGasCost } from "./gas.mjs";
6
6
  * Calculate totals for a list of quotes and tokens.
7
7
  *
8
8
  * @param request - Request parameters.
9
- * @param request.fiatPaymentAmount - The amount of the transaction in fiat.
10
9
  * @param request.isMaxAmount - Whether the transaction is a maximum amount transaction.
11
10
  * @param request.quotes - List of bridge quotes.
12
11
  * @param request.messenger - Controller messenger.
@@ -14,7 +13,7 @@ import { calculateTransactionGasCost } from "./gas.mjs";
14
13
  * @param request.transaction - Transaction metadata.
15
14
  * @returns The calculated totals in USD and fiat currency.
16
15
  */
17
- export function calculateTotals({ fiatPaymentAmount, isMaxAmount, quotes, messenger, tokens, transaction, }) {
16
+ export function calculateTotals({ isMaxAmount, quotes, messenger, tokens, transaction, }) {
18
17
  const metaMaskFee = sumFiat(quotes.map((quote) => quote.fees.metaMask));
19
18
  const providerFee = sumFiat(quotes.map((quote) => quote.fees.provider));
20
19
  const providerFiatFee = sumFiat(quotes.map((quote) => quote.fees.providerFiat ?? { fiat: '0', usd: '0' }));
@@ -34,33 +33,21 @@ export function calculateTotals({ fiatPaymentAmount, isMaxAmount, quotes, messen
34
33
  const amountFiat = sumProperty(quoteTokens, (token) => token.amountFiat);
35
34
  const amountUsd = sumProperty(quoteTokens, (token) => token.amountUsd);
36
35
  const hasQuotes = quotes.length > 0;
37
- const sourceAmountFiat = getSourceAmount({
38
- hasFiatStrategy,
39
- fiatPaymentAmount,
40
- isMaxAmount,
41
- hasQuotes,
42
- targetAmount: targetAmount.fiat,
43
- tokenAmount: amountFiat,
44
- });
45
- const sourceAmountUsd = getSourceAmount({
46
- hasFiatStrategy,
47
- fiatPaymentAmount,
48
- isMaxAmount,
49
- hasQuotes,
50
- targetAmount: targetAmount.usd,
51
- tokenAmount: amountUsd,
52
- });
53
36
  const totalFiat = new BigNumber(providerFee.fiat)
54
37
  .plus(metaMaskFee.fiat)
55
38
  .plus(sourceNetworkFeeEstimate.fiat)
56
39
  .plus(targetNetworkFee.fiat)
57
- .plus(sourceAmountFiat)
40
+ .plus((hasFiatStrategy || isMaxAmount) && hasQuotes
41
+ ? targetAmount.fiat
42
+ : amountFiat)
58
43
  .toString(10);
59
44
  const totalUsd = new BigNumber(providerFee.usd)
60
45
  .plus(metaMaskFee.usd)
61
46
  .plus(sourceNetworkFeeEstimate.usd)
62
47
  .plus(targetNetworkFee.usd)
63
- .plus(sourceAmountUsd)
48
+ .plus((hasFiatStrategy || isMaxAmount) && hasQuotes
49
+ ? targetAmount.usd
50
+ : amountUsd)
64
51
  .toString(10);
65
52
  const estimatedDuration = Number(sumProperty(quotes, (quote) => quote.estimatedDuration));
66
53
  const isSourceGasFeeToken = quotes.some((quote) => quote.fees.isSourceGasFeeToken);
@@ -88,27 +75,6 @@ export function calculateTotals({ fiatPaymentAmount, isMaxAmount, quotes, messen
88
75
  },
89
76
  };
90
77
  }
91
- /**
92
- * Get the source amount to include in totals.
93
- *
94
- * @param request - Request parameters.
95
- * @param request.hasFiatStrategy - Whether a fiat strategy quote is present.
96
- * @param request.fiatPaymentAmount - The fiat payment amount, if applicable.
97
- * @param request.isMaxAmount - Whether the transaction is a maximum amount transaction.
98
- * @param request.hasQuotes - Whether any quotes are present.
99
- * @param request.targetAmount - The target amount from quotes.
100
- * @param request.tokenAmount - The summed token amount.
101
- * @returns The payment amount to include in totals.
102
- */
103
- function getSourceAmount({ hasFiatStrategy, fiatPaymentAmount, isMaxAmount, hasQuotes, targetAmount, tokenAmount, }) {
104
- if (hasFiatStrategy) {
105
- return fiatPaymentAmount ?? '0';
106
- }
107
- if (isMaxAmount && hasQuotes) {
108
- return targetAmount;
109
- }
110
- return tokenAmount;
111
- }
112
78
  /**
113
79
  * Sum a list of fiat value.
114
80
  *
@@ -1 +1 @@
1
- {"version":3,"file":"totals.mjs","sourceRoot":"","sources":["../../src/utils/totals.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TransactionMeta } from '@metamask/transaction-controller';\nimport { BigNumber } from 'bignumber.js';\n\nimport { TransactionPayStrategy } from '../constants';\nimport type {\n FiatValue,\n TransactionPayControllerMessenger,\n TransactionPayQuote,\n TransactionPayRequiredToken,\n TransactionPayTotals,\n} from '../types';\nimport { sumAmounts } from './amounts';\nimport { calculateTransactionGasCost } from './gas';\n\n/**\n * Calculate totals for a list of quotes and tokens.\n *\n * @param request - Request parameters.\n * @param request.fiatPaymentAmount - The amount of the transaction in fiat.\n * @param request.isMaxAmount - Whether the transaction is a maximum amount transaction.\n * @param request.quotes - List of bridge quotes.\n * @param request.messenger - Controller messenger.\n * @param request.tokens - List of required tokens.\n * @param request.transaction - Transaction metadata.\n * @returns The calculated totals in USD and fiat currency.\n */\nexport function calculateTotals({\n fiatPaymentAmount,\n isMaxAmount,\n quotes,\n messenger,\n tokens,\n transaction,\n}: {\n fiatPaymentAmount?: string;\n isMaxAmount?: boolean;\n quotes: TransactionPayQuote<unknown>[];\n messenger: TransactionPayControllerMessenger;\n tokens: TransactionPayRequiredToken[];\n transaction: TransactionMeta;\n}): TransactionPayTotals {\n const metaMaskFee = sumFiat(quotes.map((quote) => quote.fees.metaMask));\n const providerFee = sumFiat(quotes.map((quote) => quote.fees.provider));\n const providerFiatFee = sumFiat(\n quotes.map((quote) => quote.fees.providerFiat ?? { fiat: '0', usd: '0' }),\n );\n const hasFiatStrategy = quotes.some(\n (quote) => quote.strategy === TransactionPayStrategy.Fiat,\n );\n\n const sourceNetworkFeeMax = sumAmounts(\n quotes.map((quote) => quote.fees.sourceNetwork.max),\n );\n\n const sourceNetworkFeeEstimate = sumAmounts(\n quotes.map((quote) => quote.fees.sourceNetwork.estimate),\n );\n\n const transactionNetworkFee = calculateTransactionGasCost(\n transaction,\n messenger,\n );\n\n const targetNetworkFee = quotes?.length\n ? {\n ...sumFiat(quotes.map((quote) => quote.fees.targetNetwork)),\n isGasFeeToken: false,\n }\n : transactionNetworkFee;\n\n const sourceAmount = sumAmounts(quotes.map((quote) => quote.sourceAmount));\n const targetAmount = sumFiat(quotes.map((quote) => quote.targetAmount));\n\n const quoteTokens = tokens.filter(\n (singleToken) => !singleToken.skipIfBalance,\n );\n\n const amountFiat = sumProperty(quoteTokens, (token) => token.amountFiat);\n const amountUsd = sumProperty(quoteTokens, (token) => token.amountUsd);\n const hasQuotes = quotes.length > 0;\n\n const sourceAmountFiat = getSourceAmount({\n hasFiatStrategy,\n fiatPaymentAmount,\n isMaxAmount,\n hasQuotes,\n targetAmount: targetAmount.fiat,\n tokenAmount: amountFiat,\n });\n\n const sourceAmountUsd = getSourceAmount({\n hasFiatStrategy,\n fiatPaymentAmount,\n isMaxAmount,\n hasQuotes,\n targetAmount: targetAmount.usd,\n tokenAmount: amountUsd,\n });\n\n const totalFiat = new BigNumber(providerFee.fiat)\n .plus(metaMaskFee.fiat)\n .plus(sourceNetworkFeeEstimate.fiat)\n .plus(targetNetworkFee.fiat)\n .plus(sourceAmountFiat)\n .toString(10);\n\n const totalUsd = new BigNumber(providerFee.usd)\n .plus(metaMaskFee.usd)\n .plus(sourceNetworkFeeEstimate.usd)\n .plus(targetNetworkFee.usd)\n .plus(sourceAmountUsd)\n .toString(10);\n\n const estimatedDuration = Number(\n sumProperty(quotes, (quote) => quote.estimatedDuration),\n );\n\n const isSourceGasFeeToken = quotes.some(\n (quote) => quote.fees.isSourceGasFeeToken,\n );\n\n const isTargetGasFeeToken =\n Boolean(targetNetworkFee.isGasFeeToken) ||\n quotes.some((quote) => quote.fees.isTargetGasFeeToken);\n\n return {\n estimatedDuration,\n fees: {\n isSourceGasFeeToken,\n isTargetGasFeeToken,\n providerFiat: providerFiatFee,\n metaMask: metaMaskFee,\n provider: providerFee,\n sourceNetwork: {\n estimate: sourceNetworkFeeEstimate,\n max: sourceNetworkFeeMax,\n },\n targetNetwork: targetNetworkFee,\n },\n sourceAmount,\n targetAmount,\n total: {\n fiat: totalFiat,\n usd: totalUsd,\n },\n };\n}\n\n/**\n * Get the source amount to include in totals.\n *\n * @param request - Request parameters.\n * @param request.hasFiatStrategy - Whether a fiat strategy quote is present.\n * @param request.fiatPaymentAmount - The fiat payment amount, if applicable.\n * @param request.isMaxAmount - Whether the transaction is a maximum amount transaction.\n * @param request.hasQuotes - Whether any quotes are present.\n * @param request.targetAmount - The target amount from quotes.\n * @param request.tokenAmount - The summed token amount.\n * @returns The payment amount to include in totals.\n */\nfunction getSourceAmount({\n hasFiatStrategy,\n fiatPaymentAmount,\n isMaxAmount,\n hasQuotes,\n targetAmount,\n tokenAmount,\n}: {\n hasFiatStrategy: boolean;\n fiatPaymentAmount?: string;\n isMaxAmount?: boolean;\n hasQuotes: boolean;\n targetAmount: string;\n tokenAmount: string;\n}): string {\n if (hasFiatStrategy) {\n return fiatPaymentAmount ?? '0';\n }\n\n if (isMaxAmount && hasQuotes) {\n return targetAmount;\n }\n\n return tokenAmount;\n}\n\n/**\n * Sum a list of fiat value.\n *\n * @param data - List of fiat values.\n * @returns Total fiat value.\n */\nfunction sumFiat(data: FiatValue[]): FiatValue {\n const fiat = sumProperty(data, (item) => item.fiat);\n const usd = sumProperty(data, (item) => item.usd);\n return { fiat, usd };\n}\n\n/**\n * Sum a specific property from a list of items.\n *\n * @param data - List of items.\n * @param getProperty - Function to extract the property to sum from each item.\n * @returns The summed value as a string.\n */\nfunction sumProperty<DataType>(\n data: DataType[],\n getProperty: (item: DataType) => BigNumber.Value,\n): string {\n return data\n .map(getProperty)\n .reduce<BigNumber>((total, value) => total.plus(value), new BigNumber(0))\n .toString(10);\n}\n"]}
1
+ {"version":3,"file":"totals.mjs","sourceRoot":"","sources":["../../src/utils/totals.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TransactionMeta } from '@metamask/transaction-controller';\nimport { BigNumber } from 'bignumber.js';\n\nimport { TransactionPayStrategy } from '../constants';\nimport type {\n FiatValue,\n TransactionPayControllerMessenger,\n TransactionPayQuote,\n TransactionPayRequiredToken,\n TransactionPayTotals,\n} from '../types';\nimport { sumAmounts } from './amounts';\nimport { calculateTransactionGasCost } from './gas';\n\n/**\n * Calculate totals for a list of quotes and tokens.\n *\n * @param request - Request parameters.\n * @param request.isMaxAmount - Whether the transaction is a maximum amount transaction.\n * @param request.quotes - List of bridge quotes.\n * @param request.messenger - Controller messenger.\n * @param request.tokens - List of required tokens.\n * @param request.transaction - Transaction metadata.\n * @returns The calculated totals in USD and fiat currency.\n */\nexport function calculateTotals({\n isMaxAmount,\n quotes,\n messenger,\n tokens,\n transaction,\n}: {\n isMaxAmount?: boolean;\n quotes: TransactionPayQuote<unknown>[];\n messenger: TransactionPayControllerMessenger;\n tokens: TransactionPayRequiredToken[];\n transaction: TransactionMeta;\n}): TransactionPayTotals {\n const metaMaskFee = sumFiat(quotes.map((quote) => quote.fees.metaMask));\n const providerFee = sumFiat(quotes.map((quote) => quote.fees.provider));\n const providerFiatFee = sumFiat(\n quotes.map((quote) => quote.fees.providerFiat ?? { fiat: '0', usd: '0' }),\n );\n const hasFiatStrategy = quotes.some(\n (quote) => quote.strategy === TransactionPayStrategy.Fiat,\n );\n\n const sourceNetworkFeeMax = sumAmounts(\n quotes.map((quote) => quote.fees.sourceNetwork.max),\n );\n\n const sourceNetworkFeeEstimate = sumAmounts(\n quotes.map((quote) => quote.fees.sourceNetwork.estimate),\n );\n\n const transactionNetworkFee = calculateTransactionGasCost(\n transaction,\n messenger,\n );\n\n const targetNetworkFee = quotes?.length\n ? {\n ...sumFiat(quotes.map((quote) => quote.fees.targetNetwork)),\n isGasFeeToken: false,\n }\n : transactionNetworkFee;\n\n const sourceAmount = sumAmounts(quotes.map((quote) => quote.sourceAmount));\n const targetAmount = sumFiat(quotes.map((quote) => quote.targetAmount));\n\n const quoteTokens = tokens.filter(\n (singleToken) => !singleToken.skipIfBalance,\n );\n\n const amountFiat = sumProperty(quoteTokens, (token) => token.amountFiat);\n const amountUsd = sumProperty(quoteTokens, (token) => token.amountUsd);\n const hasQuotes = quotes.length > 0;\n\n const totalFiat = new BigNumber(providerFee.fiat)\n .plus(metaMaskFee.fiat)\n .plus(sourceNetworkFeeEstimate.fiat)\n .plus(targetNetworkFee.fiat)\n .plus(\n (hasFiatStrategy || isMaxAmount) && hasQuotes\n ? targetAmount.fiat\n : amountFiat,\n )\n .toString(10);\n\n const totalUsd = new BigNumber(providerFee.usd)\n .plus(metaMaskFee.usd)\n .plus(sourceNetworkFeeEstimate.usd)\n .plus(targetNetworkFee.usd)\n .plus(\n (hasFiatStrategy || isMaxAmount) && hasQuotes\n ? targetAmount.usd\n : amountUsd,\n )\n .toString(10);\n\n const estimatedDuration = Number(\n sumProperty(quotes, (quote) => quote.estimatedDuration),\n );\n\n const isSourceGasFeeToken = quotes.some(\n (quote) => quote.fees.isSourceGasFeeToken,\n );\n\n const isTargetGasFeeToken =\n Boolean(targetNetworkFee.isGasFeeToken) ||\n quotes.some((quote) => quote.fees.isTargetGasFeeToken);\n\n return {\n estimatedDuration,\n fees: {\n isSourceGasFeeToken,\n isTargetGasFeeToken,\n providerFiat: providerFiatFee,\n metaMask: metaMaskFee,\n provider: providerFee,\n sourceNetwork: {\n estimate: sourceNetworkFeeEstimate,\n max: sourceNetworkFeeMax,\n },\n targetNetwork: targetNetworkFee,\n },\n sourceAmount,\n targetAmount,\n total: {\n fiat: totalFiat,\n usd: totalUsd,\n },\n };\n}\n\n/**\n * Sum a list of fiat value.\n *\n * @param data - List of fiat values.\n * @returns Total fiat value.\n */\nfunction sumFiat(data: FiatValue[]): FiatValue {\n const fiat = sumProperty(data, (item) => item.fiat);\n const usd = sumProperty(data, (item) => item.usd);\n return { fiat, usd };\n}\n\n/**\n * Sum a specific property from a list of items.\n *\n * @param data - List of items.\n * @param getProperty - Function to extract the property to sum from each item.\n * @returns The summed value as a string.\n */\nfunction sumProperty<DataType>(\n data: DataType[],\n getProperty: (item: DataType) => BigNumber.Value,\n): string {\n return data\n .map(getProperty)\n .reduce<BigNumber>((total, value) => total.plus(value), new BigNumber(0))\n .toString(10);\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask-previews/transaction-pay-controller",
3
- "version": "23.1.0-preview-a65eb72",
3
+ "version": "23.1.0-preview-e37aff3",
4
4
  "description": "Manages alternate payment strategies to provide required funds for transactions in MetaMask",
5
5
  "keywords": [
6
6
  "Ethereum",
@@ -1,61 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.submitSimpleRelay = void 0;
4
- const utils_1 = require("@metamask/utils");
5
- const logger_1 = require("../../logger.cjs");
6
- const feature_flags_1 = require("../../utils/feature-flags.cjs");
7
- const relay_quotes_1 = require("../relay/relay-quotes.cjs");
8
- const relay_submit_1 = require("../relay/relay-submit.cjs");
9
- const utils_2 = require("./utils.cjs");
10
- const log = (0, utils_1.createModuleLogger)(logger_1.projectLogger, 'fiat-submit-simple');
11
- /**
12
- * Submits a single EXACT_INPUT relay quote for simple deposits
13
- * that don't require nested calldata re-encoding or delegation.
14
- *
15
- * @param options - The submission options.
16
- * @param options.baseRequest - The base quote request from the original fiat quote.
17
- * @param options.request - The original fiat strategy execute request.
18
- * @param options.sourceAmountRaw - The settled source amount in atomic units.
19
- * @param options.transaction - The transaction metadata.
20
- * @returns An object containing the relay transaction hash if available.
21
- */
22
- async function submitSimpleRelay({ baseRequest, request, sourceAmountRaw, transaction, }) {
23
- const { messenger } = request;
24
- const transactionId = transaction.id;
25
- const originalRelayQuote = request.quotes[0].original.relayQuote;
26
- const relayRequest = {
27
- ...baseRequest,
28
- isMaxAmount: false,
29
- isPostQuote: true,
30
- sourceBalanceRaw: sourceAmountRaw,
31
- sourceTokenAmount: sourceAmountRaw,
32
- };
33
- const relayQuotes = await (0, relay_quotes_1.getRelayQuotes)({
34
- accountSupports7702: request.accountSupports7702,
35
- messenger,
36
- requests: [relayRequest],
37
- transaction,
38
- });
39
- if (!relayQuotes.length) {
40
- throw new Error('No relay quotes returned for completed fiat order');
41
- }
42
- (0, utils_2.validateRelayRateDrift)({
43
- originalQuote: originalRelayQuote,
44
- discoveryQuote: relayQuotes[0].original,
45
- maxRateDriftPercent: (0, feature_flags_1.getFiatMaxRateDriftPercent)(messenger),
46
- transactionId,
47
- });
48
- log('Submitting simple relay after fiat settlement', {
49
- relayQuoteCount: relayQuotes.length,
50
- transactionId,
51
- });
52
- return await (0, relay_submit_1.submitRelayQuotes)({
53
- accountSupports7702: request.accountSupports7702,
54
- isSmartTransaction: request.isSmartTransaction,
55
- messenger,
56
- quotes: relayQuotes,
57
- transaction,
58
- });
59
- }
60
- exports.submitSimpleRelay = submitSimpleRelay;
61
- //# sourceMappingURL=fiat-submit-simple.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fiat-submit-simple.cjs","sourceRoot":"","sources":["../../../src/strategy/fiat/fiat-submit-simple.ts"],"names":[],"mappings":";;;AACA,2CAAqD;AAErD,6CAA6C;AAE7C,iEAAuE;AACvE,4DAAuD;AACvD,4DAA0D;AAE1D,uCAAiD;AAEjD,MAAM,GAAG,GAAG,IAAA,0BAAkB,EAAC,sBAAa,EAAE,oBAAoB,CAAC,CAAC;AAEpE;;;;;;;;;;GAUG;AACI,KAAK,UAAU,iBAAiB,CAAC,EACtC,WAAW,EACX,OAAO,EACP,eAAe,EACf,WAAW,GAMZ;IACC,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAC9B,MAAM,aAAa,GAAG,WAAW,CAAC,EAAE,CAAC;IAErC,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;IAEjE,MAAM,YAAY,GAAiB;QACjC,GAAG,WAAW;QACd,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,IAAI;QACjB,gBAAgB,EAAE,eAAe;QACjC,iBAAiB,EAAE,eAAe;KACnC,CAAC;IAEF,MAAM,WAAW,GAAG,MAAM,IAAA,6BAAc,EAAC;QACvC,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;QAChD,SAAS;QACT,QAAQ,EAAE,CAAC,YAAY,CAAC;QACxB,WAAW;KACZ,CAAC,CAAC;IAEH,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IAED,IAAA,8BAAsB,EAAC;QACrB,aAAa,EAAE,kBAAkB;QACjC,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ;QACvC,mBAAmB,EAAE,IAAA,0CAA0B,EAAC,SAAS,CAAC;QAC1D,aAAa;KACd,CAAC,CAAC;IAEH,GAAG,CAAC,+CAA+C,EAAE;QACnD,eAAe,EAAE,WAAW,CAAC,MAAM;QACnC,aAAa;KACd,CAAC,CAAC;IAEH,OAAO,MAAM,IAAA,gCAAiB,EAAC;QAC7B,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;QAChD,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;QAC9C,SAAS;QACT,MAAM,EAAE,WAAW;QACnB,WAAW;KACZ,CAAC,CAAC;AACL,CAAC;AAtDD,8CAsDC","sourcesContent":["import type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\n\nimport { projectLogger } from '../../logger';\nimport type { PayStrategyExecuteRequest, QuoteRequest } from '../../types';\nimport { getFiatMaxRateDriftPercent } from '../../utils/feature-flags';\nimport { getRelayQuotes } from '../relay/relay-quotes';\nimport { submitRelayQuotes } from '../relay/relay-submit';\nimport type { FiatQuote } from './types';\nimport { validateRelayRateDrift } from './utils';\n\nconst log = createModuleLogger(projectLogger, 'fiat-submit-simple');\n\n/**\n * Submits a single EXACT_INPUT relay quote for simple deposits\n * that don't require nested calldata re-encoding or delegation.\n *\n * @param options - The submission options.\n * @param options.baseRequest - The base quote request from the original fiat quote.\n * @param options.request - The original fiat strategy execute request.\n * @param options.sourceAmountRaw - The settled source amount in atomic units.\n * @param options.transaction - The transaction metadata.\n * @returns An object containing the relay transaction hash if available.\n */\nexport async function submitSimpleRelay({\n baseRequest,\n request,\n sourceAmountRaw,\n transaction,\n}: {\n baseRequest: QuoteRequest;\n request: PayStrategyExecuteRequest<FiatQuote>;\n sourceAmountRaw: string;\n transaction: PayStrategyExecuteRequest<FiatQuote>['transaction'];\n}): Promise<{ transactionHash?: Hex }> {\n const { messenger } = request;\n const transactionId = transaction.id;\n\n const originalRelayQuote = request.quotes[0].original.relayQuote;\n\n const relayRequest: QuoteRequest = {\n ...baseRequest,\n isMaxAmount: false,\n isPostQuote: true,\n sourceBalanceRaw: sourceAmountRaw,\n sourceTokenAmount: sourceAmountRaw,\n };\n\n const relayQuotes = await getRelayQuotes({\n accountSupports7702: request.accountSupports7702,\n messenger,\n requests: [relayRequest],\n transaction,\n });\n\n if (!relayQuotes.length) {\n throw new Error('No relay quotes returned for completed fiat order');\n }\n\n validateRelayRateDrift({\n originalQuote: originalRelayQuote,\n discoveryQuote: relayQuotes[0].original,\n maxRateDriftPercent: getFiatMaxRateDriftPercent(messenger),\n transactionId,\n });\n\n log('Submitting simple relay after fiat settlement', {\n relayQuoteCount: relayQuotes.length,\n transactionId,\n });\n\n return await submitRelayQuotes({\n accountSupports7702: request.accountSupports7702,\n isSmartTransaction: request.isSmartTransaction,\n messenger,\n quotes: relayQuotes,\n transaction,\n });\n}\n"]}
@@ -1,23 +0,0 @@
1
- import type { Hex } from "@metamask/utils";
2
- import type { PayStrategyExecuteRequest, QuoteRequest } from "../../types.cjs";
3
- import type { FiatQuote } from "./types.cjs";
4
- /**
5
- * Submits a single EXACT_INPUT relay quote for simple deposits
6
- * that don't require nested calldata re-encoding or delegation.
7
- *
8
- * @param options - The submission options.
9
- * @param options.baseRequest - The base quote request from the original fiat quote.
10
- * @param options.request - The original fiat strategy execute request.
11
- * @param options.sourceAmountRaw - The settled source amount in atomic units.
12
- * @param options.transaction - The transaction metadata.
13
- * @returns An object containing the relay transaction hash if available.
14
- */
15
- export declare function submitSimpleRelay({ baseRequest, request, sourceAmountRaw, transaction, }: {
16
- baseRequest: QuoteRequest;
17
- request: PayStrategyExecuteRequest<FiatQuote>;
18
- sourceAmountRaw: string;
19
- transaction: PayStrategyExecuteRequest<FiatQuote>['transaction'];
20
- }): Promise<{
21
- transactionHash?: Hex;
22
- }>;
23
- //# sourceMappingURL=fiat-submit-simple.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fiat-submit-simple.d.cts","sourceRoot":"","sources":["../../../src/strategy/fiat/fiat-submit-simple.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAI3C,OAAO,KAAK,EAAE,yBAAyB,EAAE,YAAY,EAAE,wBAAoB;AAI3E,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAgB;AAKzC;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CAAC,EACtC,WAAW,EACX,OAAO,EACP,eAAe,EACf,WAAW,GACZ,EAAE;IACD,WAAW,EAAE,YAAY,CAAC;IAC1B,OAAO,EAAE,yBAAyB,CAAC,SAAS,CAAC,CAAC;IAC9C,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,yBAAyB,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC;CAClE,GAAG,OAAO,CAAC;IAAE,eAAe,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC,CA4CrC"}
@@ -1,23 +0,0 @@
1
- import type { Hex } from "@metamask/utils";
2
- import type { PayStrategyExecuteRequest, QuoteRequest } from "../../types.mjs";
3
- import type { FiatQuote } from "./types.mjs";
4
- /**
5
- * Submits a single EXACT_INPUT relay quote for simple deposits
6
- * that don't require nested calldata re-encoding or delegation.
7
- *
8
- * @param options - The submission options.
9
- * @param options.baseRequest - The base quote request from the original fiat quote.
10
- * @param options.request - The original fiat strategy execute request.
11
- * @param options.sourceAmountRaw - The settled source amount in atomic units.
12
- * @param options.transaction - The transaction metadata.
13
- * @returns An object containing the relay transaction hash if available.
14
- */
15
- export declare function submitSimpleRelay({ baseRequest, request, sourceAmountRaw, transaction, }: {
16
- baseRequest: QuoteRequest;
17
- request: PayStrategyExecuteRequest<FiatQuote>;
18
- sourceAmountRaw: string;
19
- transaction: PayStrategyExecuteRequest<FiatQuote>['transaction'];
20
- }): Promise<{
21
- transactionHash?: Hex;
22
- }>;
23
- //# sourceMappingURL=fiat-submit-simple.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fiat-submit-simple.d.mts","sourceRoot":"","sources":["../../../src/strategy/fiat/fiat-submit-simple.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAI3C,OAAO,KAAK,EAAE,yBAAyB,EAAE,YAAY,EAAE,wBAAoB;AAI3E,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAgB;AAKzC;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CAAC,EACtC,WAAW,EACX,OAAO,EACP,eAAe,EACf,WAAW,GACZ,EAAE;IACD,WAAW,EAAE,YAAY,CAAC;IAC1B,OAAO,EAAE,yBAAyB,CAAC,SAAS,CAAC,CAAC;IAC9C,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,yBAAyB,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC;CAClE,GAAG,OAAO,CAAC;IAAE,eAAe,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC,CA4CrC"}
@@ -1,57 +0,0 @@
1
- import { createModuleLogger } from "@metamask/utils";
2
- import { projectLogger } from "../../logger.mjs";
3
- import { getFiatMaxRateDriftPercent } from "../../utils/feature-flags.mjs";
4
- import { getRelayQuotes } from "../relay/relay-quotes.mjs";
5
- import { submitRelayQuotes } from "../relay/relay-submit.mjs";
6
- import { validateRelayRateDrift } from "./utils.mjs";
7
- const log = createModuleLogger(projectLogger, 'fiat-submit-simple');
8
- /**
9
- * Submits a single EXACT_INPUT relay quote for simple deposits
10
- * that don't require nested calldata re-encoding or delegation.
11
- *
12
- * @param options - The submission options.
13
- * @param options.baseRequest - The base quote request from the original fiat quote.
14
- * @param options.request - The original fiat strategy execute request.
15
- * @param options.sourceAmountRaw - The settled source amount in atomic units.
16
- * @param options.transaction - The transaction metadata.
17
- * @returns An object containing the relay transaction hash if available.
18
- */
19
- export async function submitSimpleRelay({ baseRequest, request, sourceAmountRaw, transaction, }) {
20
- const { messenger } = request;
21
- const transactionId = transaction.id;
22
- const originalRelayQuote = request.quotes[0].original.relayQuote;
23
- const relayRequest = {
24
- ...baseRequest,
25
- isMaxAmount: false,
26
- isPostQuote: true,
27
- sourceBalanceRaw: sourceAmountRaw,
28
- sourceTokenAmount: sourceAmountRaw,
29
- };
30
- const relayQuotes = await getRelayQuotes({
31
- accountSupports7702: request.accountSupports7702,
32
- messenger,
33
- requests: [relayRequest],
34
- transaction,
35
- });
36
- if (!relayQuotes.length) {
37
- throw new Error('No relay quotes returned for completed fiat order');
38
- }
39
- validateRelayRateDrift({
40
- originalQuote: originalRelayQuote,
41
- discoveryQuote: relayQuotes[0].original,
42
- maxRateDriftPercent: getFiatMaxRateDriftPercent(messenger),
43
- transactionId,
44
- });
45
- log('Submitting simple relay after fiat settlement', {
46
- relayQuoteCount: relayQuotes.length,
47
- transactionId,
48
- });
49
- return await submitRelayQuotes({
50
- accountSupports7702: request.accountSupports7702,
51
- isSmartTransaction: request.isSmartTransaction,
52
- messenger,
53
- quotes: relayQuotes,
54
- transaction,
55
- });
56
- }
57
- //# sourceMappingURL=fiat-submit-simple.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fiat-submit-simple.mjs","sourceRoot":"","sources":["../../../src/strategy/fiat/fiat-submit-simple.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,wBAAwB;AAErD,OAAO,EAAE,aAAa,EAAE,yBAAqB;AAE7C,OAAO,EAAE,0BAA0B,EAAE,sCAAkC;AACvE,OAAO,EAAE,cAAc,EAAE,kCAA8B;AACvD,OAAO,EAAE,iBAAiB,EAAE,kCAA8B;AAE1D,OAAO,EAAE,sBAAsB,EAAE,oBAAgB;AAEjD,MAAM,GAAG,GAAG,kBAAkB,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC;AAEpE;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EACtC,WAAW,EACX,OAAO,EACP,eAAe,EACf,WAAW,GAMZ;IACC,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAC9B,MAAM,aAAa,GAAG,WAAW,CAAC,EAAE,CAAC;IAErC,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;IAEjE,MAAM,YAAY,GAAiB;QACjC,GAAG,WAAW;QACd,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,IAAI;QACjB,gBAAgB,EAAE,eAAe;QACjC,iBAAiB,EAAE,eAAe;KACnC,CAAC;IAEF,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC;QACvC,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;QAChD,SAAS;QACT,QAAQ,EAAE,CAAC,YAAY,CAAC;QACxB,WAAW;KACZ,CAAC,CAAC;IAEH,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IAED,sBAAsB,CAAC;QACrB,aAAa,EAAE,kBAAkB;QACjC,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ;QACvC,mBAAmB,EAAE,0BAA0B,CAAC,SAAS,CAAC;QAC1D,aAAa;KACd,CAAC,CAAC;IAEH,GAAG,CAAC,+CAA+C,EAAE;QACnD,eAAe,EAAE,WAAW,CAAC,MAAM;QACnC,aAAa;KACd,CAAC,CAAC;IAEH,OAAO,MAAM,iBAAiB,CAAC;QAC7B,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;QAChD,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;QAC9C,SAAS;QACT,MAAM,EAAE,WAAW;QACnB,WAAW;KACZ,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\n\nimport { projectLogger } from '../../logger';\nimport type { PayStrategyExecuteRequest, QuoteRequest } from '../../types';\nimport { getFiatMaxRateDriftPercent } from '../../utils/feature-flags';\nimport { getRelayQuotes } from '../relay/relay-quotes';\nimport { submitRelayQuotes } from '../relay/relay-submit';\nimport type { FiatQuote } from './types';\nimport { validateRelayRateDrift } from './utils';\n\nconst log = createModuleLogger(projectLogger, 'fiat-submit-simple');\n\n/**\n * Submits a single EXACT_INPUT relay quote for simple deposits\n * that don't require nested calldata re-encoding or delegation.\n *\n * @param options - The submission options.\n * @param options.baseRequest - The base quote request from the original fiat quote.\n * @param options.request - The original fiat strategy execute request.\n * @param options.sourceAmountRaw - The settled source amount in atomic units.\n * @param options.transaction - The transaction metadata.\n * @returns An object containing the relay transaction hash if available.\n */\nexport async function submitSimpleRelay({\n baseRequest,\n request,\n sourceAmountRaw,\n transaction,\n}: {\n baseRequest: QuoteRequest;\n request: PayStrategyExecuteRequest<FiatQuote>;\n sourceAmountRaw: string;\n transaction: PayStrategyExecuteRequest<FiatQuote>['transaction'];\n}): Promise<{ transactionHash?: Hex }> {\n const { messenger } = request;\n const transactionId = transaction.id;\n\n const originalRelayQuote = request.quotes[0].original.relayQuote;\n\n const relayRequest: QuoteRequest = {\n ...baseRequest,\n isMaxAmount: false,\n isPostQuote: true,\n sourceBalanceRaw: sourceAmountRaw,\n sourceTokenAmount: sourceAmountRaw,\n };\n\n const relayQuotes = await getRelayQuotes({\n accountSupports7702: request.accountSupports7702,\n messenger,\n requests: [relayRequest],\n transaction,\n });\n\n if (!relayQuotes.length) {\n throw new Error('No relay quotes returned for completed fiat order');\n }\n\n validateRelayRateDrift({\n originalQuote: originalRelayQuote,\n discoveryQuote: relayQuotes[0].original,\n maxRateDriftPercent: getFiatMaxRateDriftPercent(messenger),\n transactionId,\n });\n\n log('Submitting simple relay after fiat settlement', {\n relayQuoteCount: relayQuotes.length,\n transactionId,\n });\n\n return await submitRelayQuotes({\n accountSupports7702: request.accountSupports7702,\n isSmartTransaction: request.isSmartTransaction,\n messenger,\n quotes: relayQuotes,\n transaction,\n });\n}\n"]}