@metamask-previews/bridge-controller 79.3.0-preview-5cf810ca6 → 79.3.0-preview-b55ba783e

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 (82) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/coercers/quote-response-v1-to-v2.cjs +4 -4
  3. package/dist/coercers/quote-response-v1-to-v2.cjs.map +1 -1
  4. package/dist/coercers/quote-response-v1-to-v2.mjs +4 -4
  5. package/dist/coercers/quote-response-v1-to-v2.mjs.map +1 -1
  6. package/dist/index.cjs +12 -9
  7. package/dist/index.cjs.map +1 -1
  8. package/dist/index.d.cts +3 -2
  9. package/dist/index.d.cts.map +1 -1
  10. package/dist/index.d.mts +3 -2
  11. package/dist/index.d.mts.map +1 -1
  12. package/dist/index.mjs +2 -1
  13. package/dist/index.mjs.map +1 -1
  14. package/dist/selectors.cjs +43 -4
  15. package/dist/selectors.cjs.map +1 -1
  16. package/dist/selectors.d.cts +1200 -105
  17. package/dist/selectors.d.cts.map +1 -1
  18. package/dist/selectors.d.mts +1200 -105
  19. package/dist/selectors.d.mts.map +1 -1
  20. package/dist/selectors.mjs +43 -4
  21. package/dist/selectors.mjs.map +1 -1
  22. package/dist/utils/quote-metadata/calculators.cjs +7 -12
  23. package/dist/utils/quote-metadata/calculators.cjs.map +1 -1
  24. package/dist/utils/quote-metadata/calculators.d.cts.map +1 -1
  25. package/dist/utils/quote-metadata/calculators.d.mts.map +1 -1
  26. package/dist/utils/quote-metadata/calculators.mjs +8 -13
  27. package/dist/utils/quote-metadata/calculators.mjs.map +1 -1
  28. package/dist/utils/quote-metadata/include-if-truthy.cjs +14 -0
  29. package/dist/utils/quote-metadata/include-if-truthy.cjs.map +1 -0
  30. package/dist/utils/quote-metadata/include-if-truthy.d.cts +2 -0
  31. package/dist/utils/quote-metadata/include-if-truthy.d.cts.map +1 -0
  32. package/dist/utils/quote-metadata/include-if-truthy.d.mts +2 -0
  33. package/dist/utils/quote-metadata/include-if-truthy.d.mts.map +1 -0
  34. package/dist/utils/quote-metadata/include-if-truthy.mjs +10 -0
  35. package/dist/utils/quote-metadata/include-if-truthy.mjs.map +1 -0
  36. package/dist/utils/quote-metadata/merge.cjs +35 -10
  37. package/dist/utils/quote-metadata/merge.cjs.map +1 -1
  38. package/dist/utils/quote-metadata/merge.d.cts +6 -3
  39. package/dist/utils/quote-metadata/merge.d.cts.map +1 -1
  40. package/dist/utils/quote-metadata/merge.d.mts +6 -3
  41. package/dist/utils/quote-metadata/merge.d.mts.map +1 -1
  42. package/dist/utils/quote-metadata/merge.mjs +35 -10
  43. package/dist/utils/quote-metadata/merge.mjs.map +1 -1
  44. package/dist/utils/quote-metadata/to-currency-values.cjs +60 -0
  45. package/dist/utils/quote-metadata/to-currency-values.cjs.map +1 -0
  46. package/dist/utils/quote-metadata/to-currency-values.d.cts +12 -0
  47. package/dist/utils/quote-metadata/to-currency-values.d.cts.map +1 -0
  48. package/dist/utils/quote-metadata/to-currency-values.d.mts +12 -0
  49. package/dist/utils/quote-metadata/to-currency-values.d.mts.map +1 -0
  50. package/dist/utils/quote-metadata/to-currency-values.mjs +56 -0
  51. package/dist/utils/quote-metadata/to-currency-values.mjs.map +1 -0
  52. package/dist/utils/quote-metadata/to-quote-metadata-v1.cjs +65 -16
  53. package/dist/utils/quote-metadata/to-quote-metadata-v1.cjs.map +1 -1
  54. package/dist/utils/quote-metadata/to-quote-metadata-v1.d.cts +3 -1
  55. package/dist/utils/quote-metadata/to-quote-metadata-v1.d.cts.map +1 -1
  56. package/dist/utils/quote-metadata/to-quote-metadata-v1.d.mts +3 -1
  57. package/dist/utils/quote-metadata/to-quote-metadata-v1.d.mts.map +1 -1
  58. package/dist/utils/quote-metadata/to-quote-metadata-v1.mjs +65 -16
  59. package/dist/utils/quote-metadata/to-quote-metadata-v1.mjs.map +1 -1
  60. package/dist/utils/quote-metadata/to-quote-metadata-v2.cjs +26 -45
  61. package/dist/utils/quote-metadata/to-quote-metadata-v2.cjs.map +1 -1
  62. package/dist/utils/quote-metadata/to-quote-metadata-v2.d.cts.map +1 -1
  63. package/dist/utils/quote-metadata/to-quote-metadata-v2.d.mts.map +1 -1
  64. package/dist/utils/quote-metadata/to-quote-metadata-v2.mjs +26 -45
  65. package/dist/utils/quote-metadata/to-quote-metadata-v2.mjs.map +1 -1
  66. package/dist/utils/quote-metadata/types.cjs +16 -0
  67. package/dist/utils/quote-metadata/types.cjs.map +1 -1
  68. package/dist/utils/quote-metadata/types.d.cts +21 -0
  69. package/dist/utils/quote-metadata/types.d.cts.map +1 -1
  70. package/dist/utils/quote-metadata/types.d.mts +21 -0
  71. package/dist/utils/quote-metadata/types.d.mts.map +1 -1
  72. package/dist/utils/quote-metadata/types.mjs +15 -1
  73. package/dist/utils/quote-metadata/types.mjs.map +1 -1
  74. package/dist/validators/quote-response.cjs +14 -1
  75. package/dist/validators/quote-response.cjs.map +1 -1
  76. package/dist/validators/quote-response.d.cts +9 -0
  77. package/dist/validators/quote-response.d.cts.map +1 -1
  78. package/dist/validators/quote-response.d.mts +9 -0
  79. package/dist/validators/quote-response.d.mts.map +1 -1
  80. package/dist/validators/quote-response.mjs +12 -0
  81. package/dist/validators/quote-response.mjs.map +1 -1
  82. package/package.json +1 -1
@@ -2,14 +2,19 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.toQuoteMetadataV1 = void 0;
4
4
  const lodash_1 = require("lodash");
5
+ const quote_response_js_1 = require("../../validators/quote-response.cjs");
6
+ const number_formatters_js_1 = require("../number-formatters.cjs");
7
+ const include_if_truthy_js_1 = require("./include-if-truthy.cjs");
8
+ const types_js_1 = require("./types.cjs");
5
9
  /**
6
10
  * Extracts legacy {@link QuoteMetadata} values from a {@link QuoteResponse} or {@link QuoteResponseV1}.
7
11
  * If a QuoteResponse is provided, this assumes that its `valueInCurrency` properties are set.
8
12
  *
9
13
  * @param quoteResponse - The quote to extract the metadata from
14
+ * @param migrationPhase - The migration phase to use
10
15
  * @returns A partial {@link QuoteMetadata} object
11
16
  */
12
- const toQuoteMetadataV1 = (quoteResponse) => {
17
+ const toQuoteMetadataV1 = (quoteResponse, migrationPhase = types_js_1.QuoteMetadataMigrationPhase.V1Data) => {
13
18
  /* istanbul ignore if */
14
19
  if (!quoteResponse) {
15
20
  return {};
@@ -22,22 +27,66 @@ const toQuoteMetadataV1 = (quoteResponse) => {
22
27
  swapRate,
23
28
  gasFee,
24
29
  totalNetworkFee,
25
- ...(adjustedReturn && Object.values(adjustedReturn).some(Boolean)
26
- ? { adjustedReturn }
27
- : {}),
28
- ...(cost && Object.values(cost).some(Boolean) ? { cost } : {}),
29
- ...(priceImpact && Object.values(priceImpact).some(Boolean)
30
- ? { priceImpact }
31
- : {}),
32
- ...(relayerFee && Object.values(relayerFee).some(Boolean)
33
- ? { relayerFee }
34
- : {}),
35
- ...(includedTxFees && Object.values(includedTxFees).some(Boolean)
36
- ? { includedTxFees }
37
- : {}),
30
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(adjustedReturn, { adjustedReturn }),
31
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(cost, { cost }),
32
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(priceImpact, { priceImpact }),
33
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(relayerFee, { relayerFee }),
34
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(includedTxFees, { includedTxFees }),
38
35
  };
39
- // Phase 1 only uses legacyMetadata
40
- return (0, lodash_1.merge)({}, legacyMetadata);
36
+ if (migrationPhase === types_js_1.QuoteMetadataMigrationPhase.V1Data ||
37
+ !(0, quote_response_js_1.isQuoteResponseV2)(quoteResponse)) {
38
+ return legacyMetadata;
39
+ }
40
+ const { quote: { src, dest, priceData, feeData: { network, relayer, txFee }, }, } = quoteResponse;
41
+ const totalNetworkFeeV2 = (0, number_formatters_js_1.sumAmounts)(network, relayer);
42
+ const toTokenAmountValues = (data) => {
43
+ return {
44
+ amount: data?.normalizedAmount,
45
+ usd: data?.usd,
46
+ valueInCurrency: data?.valueInCurrency,
47
+ };
48
+ };
49
+ // Build V1 from V2 quote
50
+ const v2Metadata = {
51
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(src, {
52
+ sentAmount: toTokenAmountValues(src),
53
+ }),
54
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(dest, {
55
+ toTokenAmount: toTokenAmountValues(dest),
56
+ minToTokenAmount: {
57
+ amount: dest.minAmountNormalized,
58
+ valueInCurrency: dest.minAmountValueInCurrency,
59
+ usd: dest.minAmountUsd,
60
+ },
61
+ }),
62
+ ...(priceData?.swapRate && { swapRate: priceData.swapRate }),
63
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(priceData?.adjustedReturn, {
64
+ adjustedReturn: toTokenAmountValues(priceData?.adjustedReturn),
65
+ }),
66
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(network?.[0], {
67
+ gasFee: {
68
+ total: toTokenAmountValues(network?.[0]),
69
+ },
70
+ }),
71
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(totalNetworkFeeV2, {
72
+ totalNetworkFee: toTokenAmountValues(totalNetworkFeeV2),
73
+ }),
74
+ ...(priceData?.priceImpact && {
75
+ priceImpact: toTokenAmountValues(priceData?.priceImpact),
76
+ // Use priceImpact as cost
77
+ cost: toTokenAmountValues(priceData?.priceImpact),
78
+ }),
79
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(relayer?.[0], {
80
+ relayerFee: toTokenAmountValues(relayer?.[0]),
81
+ }),
82
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(txFee?.[0], {
83
+ includedTxFees: toTokenAmountValues(txFee?.[0]),
84
+ }),
85
+ };
86
+ if (migrationPhase === types_js_1.QuoteMetadataMigrationPhase.V2WithV1Fallback) {
87
+ return (0, lodash_1.merge)({}, legacyMetadata, v2Metadata);
88
+ }
89
+ return v2Metadata;
41
90
  };
42
91
  exports.toQuoteMetadataV1 = toQuoteMetadataV1;
43
92
  //# sourceMappingURL=to-quote-metadata-v1.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"to-quote-metadata-v1.cjs","sourceRoot":"","sources":["../../../src/utils/quote-metadata/to-quote-metadata-v1.ts"],"names":[],"mappings":";;;AAAA,mCAA+B;AAO/B;;;;;;GAMG;AACI,MAAM,iBAAiB,GAAG,CAC/B,aAEQ,EACO,EAAE;IACjB,wBAAwB;IACxB,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,EACJ,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,QAAQ,EACR,cAAc,EACd,IAAI,EACJ,cAAc,EACd,UAAU,EACV,eAAe,EACf,MAAM,EACN,WAAW,GACZ,GAAG,aAAa,CAAC;IAElB,MAAM,cAAc,GAAG;QACrB,UAAU;QACV,aAAa;QACb,gBAAgB;QAChB,QAAQ;QACR,MAAM;QACN,eAAe;QACf,GAAG,CAAC,cAAc,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;YAC/D,CAAC,CAAC,EAAE,cAAc,EAAE;YACpB,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;YACzD,CAAC,CAAC,EAAE,WAAW,EAAE;YACjB,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;YACvD,CAAC,CAAC,EAAE,UAAU,EAAE;YAChB,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,cAAc,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;YAC/D,CAAC,CAAC,EAAE,cAAc,EAAE;YACpB,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IAEF,mCAAmC;IACnC,OAAO,IAAA,cAAK,EAAC,EAAE,EAAE,cAAc,CAAC,CAAC;AACnC,CAAC,CAAC;AAhDW,QAAA,iBAAiB,qBAgD5B","sourcesContent":["import { merge } from 'lodash';\n\nimport type { DeepPartial } from '../../types.js';\nimport type { QuoteResponseV1 } from '../../validators/quote-response-v1.js';\nimport type { QuoteResponse } from '../../validators/quote-response.js';\nimport type { QuoteMetadata } from './types.js';\n\n/**\n * Extracts legacy {@link QuoteMetadata} values from a {@link QuoteResponse} or {@link QuoteResponseV1}.\n * If a QuoteResponse is provided, this assumes that its `valueInCurrency` properties are set.\n *\n * @param quoteResponse - The quote to extract the metadata from\n * @returns A partial {@link QuoteMetadata} object\n */\nexport const toQuoteMetadataV1 = (\n quoteResponse:\n | (DeepPartial<QuoteResponse | QuoteResponseV1> & QuoteMetadata)\n | null,\n): QuoteMetadata => {\n /* istanbul ignore if */\n if (!quoteResponse) {\n return {};\n }\n\n const {\n toTokenAmount,\n minToTokenAmount,\n sentAmount,\n swapRate,\n adjustedReturn,\n cost,\n includedTxFees,\n relayerFee,\n totalNetworkFee,\n gasFee,\n priceImpact,\n } = quoteResponse;\n\n const legacyMetadata = {\n sentAmount,\n toTokenAmount,\n minToTokenAmount,\n swapRate,\n gasFee,\n totalNetworkFee,\n ...(adjustedReturn && Object.values(adjustedReturn).some(Boolean)\n ? { adjustedReturn }\n : {}),\n ...(cost && Object.values(cost).some(Boolean) ? { cost } : {}),\n ...(priceImpact && Object.values(priceImpact).some(Boolean)\n ? { priceImpact }\n : {}),\n ...(relayerFee && Object.values(relayerFee).some(Boolean)\n ? { relayerFee }\n : {}),\n ...(includedTxFees && Object.values(includedTxFees).some(Boolean)\n ? { includedTxFees }\n : {}),\n };\n\n // Phase 1 only uses legacyMetadata\n return merge({}, legacyMetadata);\n};\n"]}
1
+ {"version":3,"file":"to-quote-metadata-v1.cjs","sourceRoot":"","sources":["../../../src/utils/quote-metadata/to-quote-metadata-v1.ts"],"names":[],"mappings":"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","sourcesContent":["import { merge } from 'lodash';\n\nimport type { DeepPartial } from '../../types.js';\nimport type { AmountsAndAsset } from '../../validators/amount-and-asset.js';\nimport type { QuoteResponseV1 } from '../../validators/quote-response-v1.js';\nimport { isQuoteResponseV2 } from '../../validators/quote-response.js';\nimport type { QuoteResponse } from '../../validators/quote-response.js';\nimport { sumAmounts } from '../number-formatters.js';\nimport { includeIfTruthy } from './include-if-truthy.js';\nimport type { QuoteMetadata, TokenAmountValues } from './types.js';\nimport { QuoteMetadataMigrationPhase } from './types.js';\n\n/**\n * Extracts legacy {@link QuoteMetadata} values from a {@link QuoteResponse} or {@link QuoteResponseV1}.\n * If a QuoteResponse is provided, this assumes that its `valueInCurrency` properties are set.\n *\n * @param quoteResponse - The quote to extract the metadata from\n * @param migrationPhase - The migration phase to use\n * @returns A partial {@link QuoteMetadata} object\n */\nexport const toQuoteMetadataV1 = (\n quoteResponse:\n | (DeepPartial<QuoteResponse | QuoteResponseV1> & QuoteMetadata)\n | null,\n migrationPhase: QuoteMetadataMigrationPhase = QuoteMetadataMigrationPhase.V1Data,\n): QuoteMetadata => {\n /* istanbul ignore if */\n if (!quoteResponse) {\n return {};\n }\n\n const {\n toTokenAmount,\n minToTokenAmount,\n sentAmount,\n swapRate,\n adjustedReturn,\n cost,\n includedTxFees,\n relayerFee,\n totalNetworkFee,\n gasFee,\n priceImpact,\n } = quoteResponse;\n\n const legacyMetadata = {\n sentAmount,\n toTokenAmount,\n minToTokenAmount,\n swapRate,\n gasFee,\n totalNetworkFee,\n ...includeIfTruthy(adjustedReturn, { adjustedReturn }),\n ...includeIfTruthy(cost, { cost }),\n ...includeIfTruthy(priceImpact, { priceImpact }),\n ...includeIfTruthy(relayerFee, { relayerFee }),\n ...includeIfTruthy(includedTxFees, { includedTxFees }),\n };\n\n if (\n migrationPhase === QuoteMetadataMigrationPhase.V1Data ||\n !isQuoteResponseV2(quoteResponse)\n ) {\n return legacyMetadata;\n }\n\n const {\n quote: {\n src,\n dest,\n priceData,\n feeData: { network, relayer, txFee },\n },\n } = quoteResponse;\n\n const totalNetworkFeeV2 = sumAmounts(network, relayer);\n\n const toTokenAmountValues = (\n data?: Pick<\n AmountsAndAsset,\n 'normalizedAmount' | 'usd' | 'valueInCurrency'\n >,\n ): Partial<TokenAmountValues> => {\n return {\n amount: data?.normalizedAmount,\n usd: data?.usd,\n valueInCurrency: data?.valueInCurrency,\n };\n };\n\n // Build V1 from V2 quote\n const v2Metadata: QuoteMetadata = {\n ...includeIfTruthy(src, {\n sentAmount: toTokenAmountValues(src),\n }),\n ...includeIfTruthy(dest, {\n toTokenAmount: toTokenAmountValues(dest),\n minToTokenAmount: {\n amount: dest.minAmountNormalized,\n valueInCurrency: dest.minAmountValueInCurrency,\n usd: dest.minAmountUsd,\n },\n }),\n ...(priceData?.swapRate && { swapRate: priceData.swapRate }),\n ...includeIfTruthy(priceData?.adjustedReturn, {\n adjustedReturn: toTokenAmountValues(priceData?.adjustedReturn),\n }),\n ...includeIfTruthy(network?.[0], {\n gasFee: {\n total: toTokenAmountValues(network?.[0]),\n },\n }),\n ...includeIfTruthy(totalNetworkFeeV2, {\n totalNetworkFee: toTokenAmountValues(totalNetworkFeeV2),\n }),\n ...(priceData?.priceImpact && {\n priceImpact: toTokenAmountValues(priceData?.priceImpact),\n // Use priceImpact as cost\n cost: toTokenAmountValues(priceData?.priceImpact),\n }),\n ...includeIfTruthy(relayer?.[0], {\n relayerFee: toTokenAmountValues(relayer?.[0]),\n }),\n ...includeIfTruthy(txFee?.[0], {\n includedTxFees: toTokenAmountValues(txFee?.[0]),\n }),\n };\n\n if (migrationPhase === QuoteMetadataMigrationPhase.V2WithV1Fallback) {\n return merge({}, legacyMetadata, v2Metadata);\n }\n\n return v2Metadata;\n};\n"]}
@@ -2,12 +2,14 @@ import type { DeepPartial } from "../../types.cjs";
2
2
  import type { QuoteResponseV1 } from "../../validators/quote-response-v1.cjs";
3
3
  import type { QuoteResponse } from "../../validators/quote-response.cjs";
4
4
  import type { QuoteMetadata } from "./types.cjs";
5
+ import { QuoteMetadataMigrationPhase } from "./types.cjs";
5
6
  /**
6
7
  * Extracts legacy {@link QuoteMetadata} values from a {@link QuoteResponse} or {@link QuoteResponseV1}.
7
8
  * If a QuoteResponse is provided, this assumes that its `valueInCurrency` properties are set.
8
9
  *
9
10
  * @param quoteResponse - The quote to extract the metadata from
11
+ * @param migrationPhase - The migration phase to use
10
12
  * @returns A partial {@link QuoteMetadata} object
11
13
  */
12
- export declare const toQuoteMetadataV1: (quoteResponse: (DeepPartial<QuoteResponse | QuoteResponseV1> & QuoteMetadata) | null) => QuoteMetadata;
14
+ export declare const toQuoteMetadataV1: (quoteResponse: (DeepPartial<QuoteResponse | QuoteResponseV1> & QuoteMetadata) | null, migrationPhase?: QuoteMetadataMigrationPhase) => QuoteMetadata;
13
15
  //# sourceMappingURL=to-quote-metadata-v1.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"to-quote-metadata-v1.d.cts","sourceRoot":"","sources":["../../../src/utils/quote-metadata/to-quote-metadata-v1.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,wBAAuB;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,+CAA8C;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,4CAA2C;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAmB;AAEhD;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,kBAExB,CAAC,YAAY,aAAa,GAAG,eAAe,CAAC,GAAG,aAAa,CAAC,GAC9D,IAAI,KACP,aA4CF,CAAC"}
1
+ {"version":3,"file":"to-quote-metadata-v1.d.cts","sourceRoot":"","sources":["../../../src/utils/quote-metadata/to-quote-metadata-v1.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,wBAAuB;AAElD,OAAO,KAAK,EAAE,eAAe,EAAE,+CAA8C;AAE7E,OAAO,KAAK,EAAE,aAAa,EAAE,4CAA2C;AAGxE,OAAO,KAAK,EAAE,aAAa,EAAqB,oBAAmB;AACnE,OAAO,EAAE,2BAA2B,EAAE,oBAAmB;AAEzD;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,kBAExB,CAAC,YAAY,aAAa,GAAG,eAAe,CAAC,GAAG,aAAa,CAAC,GAC9D,IAAI,mBACQ,2BAA2B,KAC1C,aA4GF,CAAC"}
@@ -2,12 +2,14 @@ import type { DeepPartial } from "../../types.mjs";
2
2
  import type { QuoteResponseV1 } from "../../validators/quote-response-v1.mjs";
3
3
  import type { QuoteResponse } from "../../validators/quote-response.mjs";
4
4
  import type { QuoteMetadata } from "./types.mjs";
5
+ import { QuoteMetadataMigrationPhase } from "./types.mjs";
5
6
  /**
6
7
  * Extracts legacy {@link QuoteMetadata} values from a {@link QuoteResponse} or {@link QuoteResponseV1}.
7
8
  * If a QuoteResponse is provided, this assumes that its `valueInCurrency` properties are set.
8
9
  *
9
10
  * @param quoteResponse - The quote to extract the metadata from
11
+ * @param migrationPhase - The migration phase to use
10
12
  * @returns A partial {@link QuoteMetadata} object
11
13
  */
12
- export declare const toQuoteMetadataV1: (quoteResponse: (DeepPartial<QuoteResponse | QuoteResponseV1> & QuoteMetadata) | null) => QuoteMetadata;
14
+ export declare const toQuoteMetadataV1: (quoteResponse: (DeepPartial<QuoteResponse | QuoteResponseV1> & QuoteMetadata) | null, migrationPhase?: QuoteMetadataMigrationPhase) => QuoteMetadata;
13
15
  //# sourceMappingURL=to-quote-metadata-v1.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"to-quote-metadata-v1.d.mts","sourceRoot":"","sources":["../../../src/utils/quote-metadata/to-quote-metadata-v1.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,wBAAuB;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,+CAA8C;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,4CAA2C;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAmB;AAEhD;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,kBAExB,CAAC,YAAY,aAAa,GAAG,eAAe,CAAC,GAAG,aAAa,CAAC,GAC9D,IAAI,KACP,aA4CF,CAAC"}
1
+ {"version":3,"file":"to-quote-metadata-v1.d.mts","sourceRoot":"","sources":["../../../src/utils/quote-metadata/to-quote-metadata-v1.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,wBAAuB;AAElD,OAAO,KAAK,EAAE,eAAe,EAAE,+CAA8C;AAE7E,OAAO,KAAK,EAAE,aAAa,EAAE,4CAA2C;AAGxE,OAAO,KAAK,EAAE,aAAa,EAAqB,oBAAmB;AACnE,OAAO,EAAE,2BAA2B,EAAE,oBAAmB;AAEzD;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,kBAExB,CAAC,YAAY,aAAa,GAAG,eAAe,CAAC,GAAG,aAAa,CAAC,GAC9D,IAAI,mBACQ,2BAA2B,KAC1C,aA4GF,CAAC"}
@@ -1,13 +1,18 @@
1
1
  import $lodash from "lodash";
2
2
  const { merge } = $lodash;
3
+ import { isQuoteResponseV2 } from "../../validators/quote-response.mjs";
4
+ import { sumAmounts } from "../number-formatters.mjs";
5
+ import { includeIfTruthy } from "./include-if-truthy.mjs";
6
+ import { QuoteMetadataMigrationPhase } from "./types.mjs";
3
7
  /**
4
8
  * Extracts legacy {@link QuoteMetadata} values from a {@link QuoteResponse} or {@link QuoteResponseV1}.
5
9
  * If a QuoteResponse is provided, this assumes that its `valueInCurrency` properties are set.
6
10
  *
7
11
  * @param quoteResponse - The quote to extract the metadata from
12
+ * @param migrationPhase - The migration phase to use
8
13
  * @returns A partial {@link QuoteMetadata} object
9
14
  */
10
- export const toQuoteMetadataV1 = (quoteResponse) => {
15
+ export const toQuoteMetadataV1 = (quoteResponse, migrationPhase = QuoteMetadataMigrationPhase.V1Data) => {
11
16
  /* istanbul ignore if */
12
17
  if (!quoteResponse) {
13
18
  return {};
@@ -20,21 +25,65 @@ export const toQuoteMetadataV1 = (quoteResponse) => {
20
25
  swapRate,
21
26
  gasFee,
22
27
  totalNetworkFee,
23
- ...(adjustedReturn && Object.values(adjustedReturn).some(Boolean)
24
- ? { adjustedReturn }
25
- : {}),
26
- ...(cost && Object.values(cost).some(Boolean) ? { cost } : {}),
27
- ...(priceImpact && Object.values(priceImpact).some(Boolean)
28
- ? { priceImpact }
29
- : {}),
30
- ...(relayerFee && Object.values(relayerFee).some(Boolean)
31
- ? { relayerFee }
32
- : {}),
33
- ...(includedTxFees && Object.values(includedTxFees).some(Boolean)
34
- ? { includedTxFees }
35
- : {}),
28
+ ...includeIfTruthy(adjustedReturn, { adjustedReturn }),
29
+ ...includeIfTruthy(cost, { cost }),
30
+ ...includeIfTruthy(priceImpact, { priceImpact }),
31
+ ...includeIfTruthy(relayerFee, { relayerFee }),
32
+ ...includeIfTruthy(includedTxFees, { includedTxFees }),
36
33
  };
37
- // Phase 1 only uses legacyMetadata
38
- return merge({}, legacyMetadata);
34
+ if (migrationPhase === QuoteMetadataMigrationPhase.V1Data ||
35
+ !isQuoteResponseV2(quoteResponse)) {
36
+ return legacyMetadata;
37
+ }
38
+ const { quote: { src, dest, priceData, feeData: { network, relayer, txFee }, }, } = quoteResponse;
39
+ const totalNetworkFeeV2 = sumAmounts(network, relayer);
40
+ const toTokenAmountValues = (data) => {
41
+ return {
42
+ amount: data?.normalizedAmount,
43
+ usd: data?.usd,
44
+ valueInCurrency: data?.valueInCurrency,
45
+ };
46
+ };
47
+ // Build V1 from V2 quote
48
+ const v2Metadata = {
49
+ ...includeIfTruthy(src, {
50
+ sentAmount: toTokenAmountValues(src),
51
+ }),
52
+ ...includeIfTruthy(dest, {
53
+ toTokenAmount: toTokenAmountValues(dest),
54
+ minToTokenAmount: {
55
+ amount: dest.minAmountNormalized,
56
+ valueInCurrency: dest.minAmountValueInCurrency,
57
+ usd: dest.minAmountUsd,
58
+ },
59
+ }),
60
+ ...(priceData?.swapRate && { swapRate: priceData.swapRate }),
61
+ ...includeIfTruthy(priceData?.adjustedReturn, {
62
+ adjustedReturn: toTokenAmountValues(priceData?.adjustedReturn),
63
+ }),
64
+ ...includeIfTruthy(network?.[0], {
65
+ gasFee: {
66
+ total: toTokenAmountValues(network?.[0]),
67
+ },
68
+ }),
69
+ ...includeIfTruthy(totalNetworkFeeV2, {
70
+ totalNetworkFee: toTokenAmountValues(totalNetworkFeeV2),
71
+ }),
72
+ ...(priceData?.priceImpact && {
73
+ priceImpact: toTokenAmountValues(priceData?.priceImpact),
74
+ // Use priceImpact as cost
75
+ cost: toTokenAmountValues(priceData?.priceImpact),
76
+ }),
77
+ ...includeIfTruthy(relayer?.[0], {
78
+ relayerFee: toTokenAmountValues(relayer?.[0]),
79
+ }),
80
+ ...includeIfTruthy(txFee?.[0], {
81
+ includedTxFees: toTokenAmountValues(txFee?.[0]),
82
+ }),
83
+ };
84
+ if (migrationPhase === QuoteMetadataMigrationPhase.V2WithV1Fallback) {
85
+ return merge({}, legacyMetadata, v2Metadata);
86
+ }
87
+ return v2Metadata;
39
88
  };
40
89
  //# sourceMappingURL=to-quote-metadata-v1.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"to-quote-metadata-v1.mjs","sourceRoot":"","sources":["../../../src/utils/quote-metadata/to-quote-metadata-v1.ts"],"names":[],"mappings":";;AAOA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,aAEQ,EACO,EAAE;IACjB,wBAAwB;IACxB,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,EACJ,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,QAAQ,EACR,cAAc,EACd,IAAI,EACJ,cAAc,EACd,UAAU,EACV,eAAe,EACf,MAAM,EACN,WAAW,GACZ,GAAG,aAAa,CAAC;IAElB,MAAM,cAAc,GAAG;QACrB,UAAU;QACV,aAAa;QACb,gBAAgB;QAChB,QAAQ;QACR,MAAM;QACN,eAAe;QACf,GAAG,CAAC,cAAc,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;YAC/D,CAAC,CAAC,EAAE,cAAc,EAAE;YACpB,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;YACzD,CAAC,CAAC,EAAE,WAAW,EAAE;YACjB,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;YACvD,CAAC,CAAC,EAAE,UAAU,EAAE;YAChB,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,cAAc,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;YAC/D,CAAC,CAAC,EAAE,cAAc,EAAE;YACpB,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IAEF,mCAAmC;IACnC,OAAO,KAAK,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;AACnC,CAAC,CAAC","sourcesContent":["import { merge } from 'lodash';\n\nimport type { DeepPartial } from '../../types.js';\nimport type { QuoteResponseV1 } from '../../validators/quote-response-v1.js';\nimport type { QuoteResponse } from '../../validators/quote-response.js';\nimport type { QuoteMetadata } from './types.js';\n\n/**\n * Extracts legacy {@link QuoteMetadata} values from a {@link QuoteResponse} or {@link QuoteResponseV1}.\n * If a QuoteResponse is provided, this assumes that its `valueInCurrency` properties are set.\n *\n * @param quoteResponse - The quote to extract the metadata from\n * @returns A partial {@link QuoteMetadata} object\n */\nexport const toQuoteMetadataV1 = (\n quoteResponse:\n | (DeepPartial<QuoteResponse | QuoteResponseV1> & QuoteMetadata)\n | null,\n): QuoteMetadata => {\n /* istanbul ignore if */\n if (!quoteResponse) {\n return {};\n }\n\n const {\n toTokenAmount,\n minToTokenAmount,\n sentAmount,\n swapRate,\n adjustedReturn,\n cost,\n includedTxFees,\n relayerFee,\n totalNetworkFee,\n gasFee,\n priceImpact,\n } = quoteResponse;\n\n const legacyMetadata = {\n sentAmount,\n toTokenAmount,\n minToTokenAmount,\n swapRate,\n gasFee,\n totalNetworkFee,\n ...(adjustedReturn && Object.values(adjustedReturn).some(Boolean)\n ? { adjustedReturn }\n : {}),\n ...(cost && Object.values(cost).some(Boolean) ? { cost } : {}),\n ...(priceImpact && Object.values(priceImpact).some(Boolean)\n ? { priceImpact }\n : {}),\n ...(relayerFee && Object.values(relayerFee).some(Boolean)\n ? { relayerFee }\n : {}),\n ...(includedTxFees && Object.values(includedTxFees).some(Boolean)\n ? { includedTxFees }\n : {}),\n };\n\n // Phase 1 only uses legacyMetadata\n return merge({}, legacyMetadata);\n};\n"]}
1
+ {"version":3,"file":"to-quote-metadata-v1.mjs","sourceRoot":"","sources":["../../../src/utils/quote-metadata/to-quote-metadata-v1.ts"],"names":[],"mappings":"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","sourcesContent":["import { merge } from 'lodash';\n\nimport type { DeepPartial } from '../../types.js';\nimport type { AmountsAndAsset } from '../../validators/amount-and-asset.js';\nimport type { QuoteResponseV1 } from '../../validators/quote-response-v1.js';\nimport { isQuoteResponseV2 } from '../../validators/quote-response.js';\nimport type { QuoteResponse } from '../../validators/quote-response.js';\nimport { sumAmounts } from '../number-formatters.js';\nimport { includeIfTruthy } from './include-if-truthy.js';\nimport type { QuoteMetadata, TokenAmountValues } from './types.js';\nimport { QuoteMetadataMigrationPhase } from './types.js';\n\n/**\n * Extracts legacy {@link QuoteMetadata} values from a {@link QuoteResponse} or {@link QuoteResponseV1}.\n * If a QuoteResponse is provided, this assumes that its `valueInCurrency` properties are set.\n *\n * @param quoteResponse - The quote to extract the metadata from\n * @param migrationPhase - The migration phase to use\n * @returns A partial {@link QuoteMetadata} object\n */\nexport const toQuoteMetadataV1 = (\n quoteResponse:\n | (DeepPartial<QuoteResponse | QuoteResponseV1> & QuoteMetadata)\n | null,\n migrationPhase: QuoteMetadataMigrationPhase = QuoteMetadataMigrationPhase.V1Data,\n): QuoteMetadata => {\n /* istanbul ignore if */\n if (!quoteResponse) {\n return {};\n }\n\n const {\n toTokenAmount,\n minToTokenAmount,\n sentAmount,\n swapRate,\n adjustedReturn,\n cost,\n includedTxFees,\n relayerFee,\n totalNetworkFee,\n gasFee,\n priceImpact,\n } = quoteResponse;\n\n const legacyMetadata = {\n sentAmount,\n toTokenAmount,\n minToTokenAmount,\n swapRate,\n gasFee,\n totalNetworkFee,\n ...includeIfTruthy(adjustedReturn, { adjustedReturn }),\n ...includeIfTruthy(cost, { cost }),\n ...includeIfTruthy(priceImpact, { priceImpact }),\n ...includeIfTruthy(relayerFee, { relayerFee }),\n ...includeIfTruthy(includedTxFees, { includedTxFees }),\n };\n\n if (\n migrationPhase === QuoteMetadataMigrationPhase.V1Data ||\n !isQuoteResponseV2(quoteResponse)\n ) {\n return legacyMetadata;\n }\n\n const {\n quote: {\n src,\n dest,\n priceData,\n feeData: { network, relayer, txFee },\n },\n } = quoteResponse;\n\n const totalNetworkFeeV2 = sumAmounts(network, relayer);\n\n const toTokenAmountValues = (\n data?: Pick<\n AmountsAndAsset,\n 'normalizedAmount' | 'usd' | 'valueInCurrency'\n >,\n ): Partial<TokenAmountValues> => {\n return {\n amount: data?.normalizedAmount,\n usd: data?.usd,\n valueInCurrency: data?.valueInCurrency,\n };\n };\n\n // Build V1 from V2 quote\n const v2Metadata: QuoteMetadata = {\n ...includeIfTruthy(src, {\n sentAmount: toTokenAmountValues(src),\n }),\n ...includeIfTruthy(dest, {\n toTokenAmount: toTokenAmountValues(dest),\n minToTokenAmount: {\n amount: dest.minAmountNormalized,\n valueInCurrency: dest.minAmountValueInCurrency,\n usd: dest.minAmountUsd,\n },\n }),\n ...(priceData?.swapRate && { swapRate: priceData.swapRate }),\n ...includeIfTruthy(priceData?.adjustedReturn, {\n adjustedReturn: toTokenAmountValues(priceData?.adjustedReturn),\n }),\n ...includeIfTruthy(network?.[0], {\n gasFee: {\n total: toTokenAmountValues(network?.[0]),\n },\n }),\n ...includeIfTruthy(totalNetworkFeeV2, {\n totalNetworkFee: toTokenAmountValues(totalNetworkFeeV2),\n }),\n ...(priceData?.priceImpact && {\n priceImpact: toTokenAmountValues(priceData?.priceImpact),\n // Use priceImpact as cost\n cost: toTokenAmountValues(priceData?.priceImpact),\n }),\n ...includeIfTruthy(relayer?.[0], {\n relayerFee: toTokenAmountValues(relayer?.[0]),\n }),\n ...includeIfTruthy(txFee?.[0], {\n includedTxFees: toTokenAmountValues(txFee?.[0]),\n }),\n };\n\n if (migrationPhase === QuoteMetadataMigrationPhase.V2WithV1Fallback) {\n return merge({}, legacyMetadata, v2Metadata);\n }\n\n return v2Metadata;\n};\n"]}
@@ -5,6 +5,7 @@ const utils_1 = require("@metamask/utils");
5
5
  const quote_response_v1_to_v2_js_1 = require("../../coercers/quote-response-v1-to-v2.cjs");
6
6
  const bridge_js_1 = require("../bridge.cjs");
7
7
  const number_formatters_js_1 = require("../number-formatters.cjs");
8
+ const include_if_truthy_js_1 = require("./include-if-truthy.cjs");
8
9
  /**
9
10
  * Converts a {@link QuoteMetadata} to a partial {@link QuoteResponse} containing only metadata
10
11
  *
@@ -28,71 +29,51 @@ const toQuoteMetadataV2 = (quoteMetadata, quoteResponseV2) => {
28
29
  valueInCurrency: priceImpact?.valueInCurrency ?? cost?.valueInCurrency,
29
30
  };
30
31
  const networkFeeToUse = gasFee?.total ?? totalNetworkFee;
32
+ const toAmountAndAsset = (asset, metadata, extraFields) => {
33
+ return {
34
+ amount: (0, number_formatters_js_1.calcAtomicTokenAmount)(metadata?.amount, asset?.decimals),
35
+ normalizedAmount: metadata?.amount,
36
+ valueInCurrency: metadata?.valueInCurrency,
37
+ usd: metadata?.usd,
38
+ ...extraFields,
39
+ };
40
+ };
31
41
  return {
32
42
  ...rest,
33
43
  quote: {
34
- src: {
35
- amount: (0, number_formatters_js_1.calcAtomicTokenAmount)(sentAmount?.amount, srcAsset?.decimals),
36
- normalizedAmount: sentAmount?.amount,
37
- valueInCurrency: sentAmount?.valueInCurrency,
38
- usd: sentAmount?.usd,
39
- },
44
+ src: toAmountAndAsset(srcAsset, sentAmount),
40
45
  dest: {
41
- amount: (0, number_formatters_js_1.calcAtomicTokenAmount)(toTokenAmount?.amount, destAsset?.decimals),
42
- normalizedAmount: toTokenAmount?.amount,
43
- valueInCurrency: toTokenAmount?.valueInCurrency,
44
- usd: toTokenAmount?.usd,
46
+ ...toAmountAndAsset(destAsset, toTokenAmount),
45
47
  minAmount: (0, number_formatters_js_1.calcAtomicTokenAmount)(minToTokenAmount?.amount, destAsset?.decimals),
46
48
  minAmountNormalized: minToTokenAmount?.amount,
47
49
  minAmountUsd: minToTokenAmount?.usd,
48
50
  minAmountValueInCurrency: minToTokenAmount?.valueInCurrency,
49
51
  },
50
52
  feeData: {
51
- network: [
52
- {
53
- amount: (0, number_formatters_js_1.calcAtomicTokenAmount)(networkFeeToUse?.amount, nativeAsset?.decimals),
54
- normalizedAmount: networkFeeToUse?.amount,
55
- valueInCurrency: networkFeeToUse?.valueInCurrency,
56
- usd: networkFeeToUse?.usd,
57
- asset: nativeAsset,
58
- },
59
- ],
60
- ...(relayerFee &&
61
- Object.values(relayerFee).some(Boolean) && {
62
- relayer: [
63
- {
64
- amount: (0, number_formatters_js_1.calcAtomicTokenAmount)(relayerFee?.amount, nativeAsset?.decimals),
65
- normalizedAmount: relayerFee.amount,
66
- valueInCurrency: relayerFee.valueInCurrency,
67
- usd: relayerFee.usd,
53
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(networkFeeToUse, {
54
+ network: [
55
+ toAmountAndAsset(nativeAsset, networkFeeToUse, {
68
56
  asset: nativeAsset,
69
- },
57
+ }),
58
+ ],
59
+ }),
60
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(relayerFee, {
61
+ relayer: [
62
+ toAmountAndAsset(nativeAsset, relayerFee, { asset: nativeAsset }),
70
63
  ],
71
64
  }),
72
- ...(includedTxFees &&
73
- Object.values(includedTxFees).some(Boolean) && {
65
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(includedTxFees, {
74
66
  txFee: [
75
- {
76
- amount: (0, number_formatters_js_1.calcAtomicTokenAmount)(includedTxFees?.amount, txFeeAsset?.decimals),
77
- normalizedAmount: includedTxFees?.amount,
78
- valueInCurrency: includedTxFees?.valueInCurrency,
79
- usd: includedTxFees?.usd,
80
- asset: txFeeAsset,
81
- },
67
+ toAmountAndAsset(txFeeAsset, includedTxFees, { asset: txFeeAsset }),
82
68
  ],
83
69
  }),
84
70
  },
85
71
  priceData: {
86
- ...(priceImpactToUse &&
87
- Object.values(priceImpactToUse).some(Boolean) && {
72
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(priceImpactToUse, {
88
73
  priceImpact: priceImpactToUse,
89
74
  }),
90
- ...(adjustedReturn &&
91
- Object.values(adjustedReturn).some(Boolean) && {
92
- adjustedReturn: {
93
- valueInCurrency: adjustedReturn?.valueInCurrency,
94
- usd: adjustedReturn?.usd,
95
- },
75
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(adjustedReturn, {
76
+ adjustedReturn,
96
77
  }),
97
78
  swapRate,
98
79
  },
@@ -1 +1 @@
1
- {"version":3,"file":"to-quote-metadata-v2.cjs","sourceRoot":"","sources":["../../../src/utils/quote-metadata/to-quote-metadata-v2.ts"],"names":[],"mappings":"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","sourcesContent":["import { parseCaipAssetType } from '@metamask/utils';\n\nimport { toBridgeAssetV2 } from '../../coercers/quote-response-v1-to-v2.js';\nimport type { DeepPartial } from '../../types.js';\nimport type { QuoteResponse } from '../../validators/quote-response.js';\nimport { getNativeAssetForChainId } from '../bridge.js';\nimport { calcAtomicTokenAmount } from '../number-formatters.js';\nimport type { QuoteMetadata } from './types.js';\n\n/**\n * Converts a {@link QuoteMetadata} to a partial {@link QuoteResponse} containing only metadata\n *\n * @param quoteMetadata - The {@link QuoteMetadata} to convert\n * @param quoteResponseV2 - The {@link QuoteResponse} to use for token data\n * @returns The {@link DeepPartial<QuoteResponse>}\n */\nexport const toQuoteMetadataV2 = (\n quoteMetadata: QuoteMetadata,\n quoteResponseV2?: DeepPartial<QuoteResponse>,\n): DeepPartial<QuoteResponse> => {\n const {\n sentAmount,\n toTokenAmount,\n minToTokenAmount,\n swapRate,\n totalNetworkFee,\n gasFee,\n adjustedReturn,\n cost,\n includedTxFees,\n relayerFee,\n priceImpact,\n ...rest\n } = quoteMetadata;\n\n const srcAsset = quoteResponseV2?.quote?.src?.asset;\n const destAsset = quoteResponseV2?.quote?.dest?.asset;\n\n const chainId = srcAsset?.assetId\n ? parseCaipAssetType(srcAsset.assetId)?.chainId\n : undefined;\n const nativeAsset = chainId\n ? toBridgeAssetV2(getNativeAssetForChainId(chainId))\n : undefined;\n const txFeeAsset = quoteResponseV2?.quote?.feeData?.txFee?.[0]?.asset;\n\n const priceImpactToUse = {\n usd: priceImpact?.usd ?? cost?.usd,\n valueInCurrency: priceImpact?.valueInCurrency ?? cost?.valueInCurrency,\n };\n const networkFeeToUse = gasFee?.total ?? totalNetworkFee;\n\n return {\n ...rest,\n quote: {\n src: {\n amount: calcAtomicTokenAmount(sentAmount?.amount, srcAsset?.decimals),\n normalizedAmount: sentAmount?.amount,\n valueInCurrency: sentAmount?.valueInCurrency,\n usd: sentAmount?.usd,\n },\n dest: {\n amount: calcAtomicTokenAmount(\n toTokenAmount?.amount,\n destAsset?.decimals,\n ),\n normalizedAmount: toTokenAmount?.amount,\n valueInCurrency: toTokenAmount?.valueInCurrency,\n usd: toTokenAmount?.usd,\n minAmount: calcAtomicTokenAmount(\n minToTokenAmount?.amount,\n destAsset?.decimals,\n ),\n minAmountNormalized: minToTokenAmount?.amount,\n minAmountUsd: minToTokenAmount?.usd,\n minAmountValueInCurrency: minToTokenAmount?.valueInCurrency,\n },\n feeData: {\n network: [\n {\n amount: calcAtomicTokenAmount(\n networkFeeToUse?.amount,\n nativeAsset?.decimals,\n ),\n normalizedAmount: networkFeeToUse?.amount,\n valueInCurrency: networkFeeToUse?.valueInCurrency,\n usd: networkFeeToUse?.usd,\n asset: nativeAsset,\n },\n ],\n ...(relayerFee &&\n Object.values(relayerFee).some(Boolean) && {\n relayer: [\n {\n amount: calcAtomicTokenAmount(\n relayerFee?.amount,\n nativeAsset?.decimals,\n ),\n normalizedAmount: relayerFee.amount,\n valueInCurrency: relayerFee.valueInCurrency,\n usd: relayerFee.usd,\n asset: nativeAsset,\n },\n ],\n }),\n ...(includedTxFees &&\n Object.values(includedTxFees).some(Boolean) && {\n txFee: [\n {\n amount: calcAtomicTokenAmount(\n includedTxFees?.amount,\n txFeeAsset?.decimals,\n ),\n normalizedAmount: includedTxFees?.amount,\n valueInCurrency: includedTxFees?.valueInCurrency,\n usd: includedTxFees?.usd,\n asset: txFeeAsset,\n },\n ],\n }),\n },\n priceData: {\n ...(priceImpactToUse &&\n Object.values(priceImpactToUse).some(Boolean) && {\n priceImpact: priceImpactToUse,\n }),\n ...(adjustedReturn &&\n Object.values(adjustedReturn).some(Boolean) && {\n adjustedReturn: {\n valueInCurrency: adjustedReturn?.valueInCurrency,\n usd: adjustedReturn?.usd,\n },\n }),\n swapRate,\n },\n },\n };\n};\n"]}
1
+ {"version":3,"file":"to-quote-metadata-v2.cjs","sourceRoot":"","sources":["../../../src/utils/quote-metadata/to-quote-metadata-v2.ts"],"names":[],"mappings":"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","sourcesContent":["import { parseCaipAssetType } from '@metamask/utils';\n\nimport { toBridgeAssetV2 } from '../../coercers/quote-response-v1-to-v2.js';\nimport type { DeepPartial } from '../../types.js';\nimport type { AmountsAndAsset } from '../../validators/amount-and-asset.js';\nimport type { BridgeAssetV2 } from '../../validators/bridge-asset.js';\nimport type { QuoteResponse } from '../../validators/quote-response.js';\nimport { getNativeAssetForChainId } from '../bridge.js';\nimport { calcAtomicTokenAmount } from '../number-formatters.js';\nimport { includeIfTruthy } from './include-if-truthy.js';\nimport type { QuoteMetadata, TokenAmountValues } from './types.js';\n\n/**\n * Converts a {@link QuoteMetadata} to a partial {@link QuoteResponse} containing only metadata\n *\n * @param quoteMetadata - The {@link QuoteMetadata} to convert\n * @param quoteResponseV2 - The {@link QuoteResponse} to use for token data\n * @returns The {@link DeepPartial<QuoteResponse>}\n */\nexport const toQuoteMetadataV2 = (\n quoteMetadata: QuoteMetadata,\n quoteResponseV2?: DeepPartial<QuoteResponse>,\n): DeepPartial<QuoteResponse> => {\n const {\n sentAmount,\n toTokenAmount,\n minToTokenAmount,\n swapRate,\n totalNetworkFee,\n gasFee,\n adjustedReturn,\n cost,\n includedTxFees,\n relayerFee,\n priceImpact,\n ...rest\n } = quoteMetadata;\n\n const srcAsset = quoteResponseV2?.quote?.src?.asset;\n const destAsset = quoteResponseV2?.quote?.dest?.asset;\n\n const chainId = srcAsset?.assetId\n ? parseCaipAssetType(srcAsset.assetId)?.chainId\n : undefined;\n const nativeAsset = chainId\n ? toBridgeAssetV2(getNativeAssetForChainId(chainId))\n : undefined;\n const txFeeAsset = quoteResponseV2?.quote?.feeData?.txFee?.[0]?.asset;\n\n const priceImpactToUse = {\n usd: priceImpact?.usd ?? cost?.usd,\n valueInCurrency: priceImpact?.valueInCurrency ?? cost?.valueInCurrency,\n };\n const networkFeeToUse = gasFee?.total ?? totalNetworkFee;\n\n const toAmountAndAsset = (\n asset?: DeepPartial<BridgeAssetV2>,\n metadata?: Partial<TokenAmountValues>,\n extraFields?: DeepPartial<AmountsAndAsset>,\n ): DeepPartial<AmountsAndAsset> => {\n return {\n amount: calcAtomicTokenAmount(metadata?.amount, asset?.decimals),\n normalizedAmount: metadata?.amount,\n valueInCurrency: metadata?.valueInCurrency,\n usd: metadata?.usd,\n ...extraFields,\n };\n };\n\n return {\n ...rest,\n quote: {\n src: toAmountAndAsset(srcAsset, sentAmount),\n dest: {\n ...toAmountAndAsset(destAsset, toTokenAmount),\n minAmount: calcAtomicTokenAmount(\n minToTokenAmount?.amount,\n destAsset?.decimals,\n ),\n minAmountNormalized: minToTokenAmount?.amount,\n minAmountUsd: minToTokenAmount?.usd,\n minAmountValueInCurrency: minToTokenAmount?.valueInCurrency,\n },\n feeData: {\n ...includeIfTruthy(networkFeeToUse, {\n network: [\n toAmountAndAsset(nativeAsset, networkFeeToUse, {\n asset: nativeAsset,\n }),\n ],\n }),\n ...includeIfTruthy(relayerFee, {\n relayer: [\n toAmountAndAsset(nativeAsset, relayerFee, { asset: nativeAsset }),\n ],\n }),\n ...includeIfTruthy(includedTxFees, {\n txFee: [\n toAmountAndAsset(txFeeAsset, includedTxFees, { asset: txFeeAsset }),\n ],\n }),\n },\n priceData: {\n ...includeIfTruthy(priceImpactToUse, {\n priceImpact: priceImpactToUse,\n }),\n ...includeIfTruthy(adjustedReturn, {\n adjustedReturn,\n }),\n swapRate,\n },\n },\n };\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"to-quote-metadata-v2.d.cts","sourceRoot":"","sources":["../../../src/utils/quote-metadata/to-quote-metadata-v2.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,wBAAuB;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,4CAA2C;AAGxE,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAmB;AAEhD;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,kBACb,aAAa,oBACV,YAAY,aAAa,CAAC,KAC3C,YAAY,aAAa,CAsH3B,CAAC"}
1
+ {"version":3,"file":"to-quote-metadata-v2.d.cts","sourceRoot":"","sources":["../../../src/utils/quote-metadata/to-quote-metadata-v2.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,wBAAuB;AAGlD,OAAO,KAAK,EAAE,aAAa,EAAE,4CAA2C;AAIxE,OAAO,KAAK,EAAE,aAAa,EAAqB,oBAAmB;AAEnE;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,kBACb,aAAa,oBACV,YAAY,aAAa,CAAC,KAC3C,YAAY,aAAa,CA2F3B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"to-quote-metadata-v2.d.mts","sourceRoot":"","sources":["../../../src/utils/quote-metadata/to-quote-metadata-v2.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,wBAAuB;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,4CAA2C;AAGxE,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAmB;AAEhD;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,kBACb,aAAa,oBACV,YAAY,aAAa,CAAC,KAC3C,YAAY,aAAa,CAsH3B,CAAC"}
1
+ {"version":3,"file":"to-quote-metadata-v2.d.mts","sourceRoot":"","sources":["../../../src/utils/quote-metadata/to-quote-metadata-v2.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,wBAAuB;AAGlD,OAAO,KAAK,EAAE,aAAa,EAAE,4CAA2C;AAIxE,OAAO,KAAK,EAAE,aAAa,EAAqB,oBAAmB;AAEnE;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,kBACb,aAAa,oBACV,YAAY,aAAa,CAAC,KAC3C,YAAY,aAAa,CA2F3B,CAAC"}
@@ -2,6 +2,7 @@ import { parseCaipAssetType } from "@metamask/utils";
2
2
  import { toBridgeAssetV2 } from "../../coercers/quote-response-v1-to-v2.mjs";
3
3
  import { getNativeAssetForChainId } from "../bridge.mjs";
4
4
  import { calcAtomicTokenAmount } from "../number-formatters.mjs";
5
+ import { includeIfTruthy } from "./include-if-truthy.mjs";
5
6
  /**
6
7
  * Converts a {@link QuoteMetadata} to a partial {@link QuoteResponse} containing only metadata
7
8
  *
@@ -25,71 +26,51 @@ export const toQuoteMetadataV2 = (quoteMetadata, quoteResponseV2) => {
25
26
  valueInCurrency: priceImpact?.valueInCurrency ?? cost?.valueInCurrency,
26
27
  };
27
28
  const networkFeeToUse = gasFee?.total ?? totalNetworkFee;
29
+ const toAmountAndAsset = (asset, metadata, extraFields) => {
30
+ return {
31
+ amount: calcAtomicTokenAmount(metadata?.amount, asset?.decimals),
32
+ normalizedAmount: metadata?.amount,
33
+ valueInCurrency: metadata?.valueInCurrency,
34
+ usd: metadata?.usd,
35
+ ...extraFields,
36
+ };
37
+ };
28
38
  return {
29
39
  ...rest,
30
40
  quote: {
31
- src: {
32
- amount: calcAtomicTokenAmount(sentAmount?.amount, srcAsset?.decimals),
33
- normalizedAmount: sentAmount?.amount,
34
- valueInCurrency: sentAmount?.valueInCurrency,
35
- usd: sentAmount?.usd,
36
- },
41
+ src: toAmountAndAsset(srcAsset, sentAmount),
37
42
  dest: {
38
- amount: calcAtomicTokenAmount(toTokenAmount?.amount, destAsset?.decimals),
39
- normalizedAmount: toTokenAmount?.amount,
40
- valueInCurrency: toTokenAmount?.valueInCurrency,
41
- usd: toTokenAmount?.usd,
43
+ ...toAmountAndAsset(destAsset, toTokenAmount),
42
44
  minAmount: calcAtomicTokenAmount(minToTokenAmount?.amount, destAsset?.decimals),
43
45
  minAmountNormalized: minToTokenAmount?.amount,
44
46
  minAmountUsd: minToTokenAmount?.usd,
45
47
  minAmountValueInCurrency: minToTokenAmount?.valueInCurrency,
46
48
  },
47
49
  feeData: {
48
- network: [
49
- {
50
- amount: calcAtomicTokenAmount(networkFeeToUse?.amount, nativeAsset?.decimals),
51
- normalizedAmount: networkFeeToUse?.amount,
52
- valueInCurrency: networkFeeToUse?.valueInCurrency,
53
- usd: networkFeeToUse?.usd,
54
- asset: nativeAsset,
55
- },
56
- ],
57
- ...(relayerFee &&
58
- Object.values(relayerFee).some(Boolean) && {
59
- relayer: [
60
- {
61
- amount: calcAtomicTokenAmount(relayerFee?.amount, nativeAsset?.decimals),
62
- normalizedAmount: relayerFee.amount,
63
- valueInCurrency: relayerFee.valueInCurrency,
64
- usd: relayerFee.usd,
50
+ ...includeIfTruthy(networkFeeToUse, {
51
+ network: [
52
+ toAmountAndAsset(nativeAsset, networkFeeToUse, {
65
53
  asset: nativeAsset,
66
- },
54
+ }),
55
+ ],
56
+ }),
57
+ ...includeIfTruthy(relayerFee, {
58
+ relayer: [
59
+ toAmountAndAsset(nativeAsset, relayerFee, { asset: nativeAsset }),
67
60
  ],
68
61
  }),
69
- ...(includedTxFees &&
70
- Object.values(includedTxFees).some(Boolean) && {
62
+ ...includeIfTruthy(includedTxFees, {
71
63
  txFee: [
72
- {
73
- amount: calcAtomicTokenAmount(includedTxFees?.amount, txFeeAsset?.decimals),
74
- normalizedAmount: includedTxFees?.amount,
75
- valueInCurrency: includedTxFees?.valueInCurrency,
76
- usd: includedTxFees?.usd,
77
- asset: txFeeAsset,
78
- },
64
+ toAmountAndAsset(txFeeAsset, includedTxFees, { asset: txFeeAsset }),
79
65
  ],
80
66
  }),
81
67
  },
82
68
  priceData: {
83
- ...(priceImpactToUse &&
84
- Object.values(priceImpactToUse).some(Boolean) && {
69
+ ...includeIfTruthy(priceImpactToUse, {
85
70
  priceImpact: priceImpactToUse,
86
71
  }),
87
- ...(adjustedReturn &&
88
- Object.values(adjustedReturn).some(Boolean) && {
89
- adjustedReturn: {
90
- valueInCurrency: adjustedReturn?.valueInCurrency,
91
- usd: adjustedReturn?.usd,
92
- },
72
+ ...includeIfTruthy(adjustedReturn, {
73
+ adjustedReturn,
93
74
  }),
94
75
  swapRate,
95
76
  },