@metamask-previews/bridge-controller 79.0.1-preview-58a4a8b71 → 79.0.1-preview-4c8a5dfcb

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 (74) hide show
  1. package/CHANGELOG.md +8 -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 +11 -9
  7. package/dist/index.cjs.map +1 -1
  8. package/dist/index.d.cts +2 -1
  9. package/dist/index.d.cts.map +1 -1
  10. package/dist/index.d.mts +2 -1
  11. package/dist/index.d.mts.map +1 -1
  12. package/dist/index.mjs +1 -0
  13. package/dist/index.mjs.map +1 -1
  14. package/dist/selectors.cjs +40 -4
  15. package/dist/selectors.cjs.map +1 -1
  16. package/dist/selectors.d.cts +1199 -105
  17. package/dist/selectors.d.cts.map +1 -1
  18. package/dist/selectors.d.mts +1199 -105
  19. package/dist/selectors.d.mts.map +1 -1
  20. package/dist/selectors.mjs +40 -4
  21. package/dist/selectors.mjs.map +1 -1
  22. package/dist/utils/quote-metadata/calculators.cjs +6 -11
  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 +6 -11
  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 +12 -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 +12 -10
  43. package/dist/utils/quote-metadata/merge.mjs.map +1 -1
  44. package/dist/utils/quote-metadata/to-currency-values.cjs +58 -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 +54 -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 +66 -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 +66 -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 +21 -42
  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 +21 -42
  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/package.json +3 -3
@@ -1,15 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.toQuoteMetadataV1 = void 0;
4
+ const superstruct_1 = require("@metamask/superstruct");
4
5
  const lodash_1 = require("lodash");
6
+ const quote_response_js_1 = require("../../validators/quote-response.cjs");
7
+ const number_formatters_js_1 = require("../number-formatters.cjs");
8
+ const include_if_truthy_js_1 = require("./include-if-truthy.cjs");
9
+ const types_js_1 = require("./types.cjs");
5
10
  /**
6
11
  * Extracts legacy {@link QuoteMetadata} values from a {@link QuoteResponse} or {@link QuoteResponseV1}.
7
12
  * If a QuoteResponse is provided, this assumes that its `valueInCurrency` properties are set.
8
13
  *
9
14
  * @param quoteResponse - The quote to extract the metadata from
15
+ * @param migrationPhase - The migration phase to use
10
16
  * @returns A partial {@link QuoteMetadata} object
11
17
  */
12
- const toQuoteMetadataV1 = (quoteResponse) => {
18
+ const toQuoteMetadataV1 = (quoteResponse, migrationPhase = types_js_1.QuoteMetadataMigrationPhase.V1Data) => {
13
19
  /* istanbul ignore if */
14
20
  if (!quoteResponse) {
15
21
  return {};
@@ -22,22 +28,66 @@ const toQuoteMetadataV1 = (quoteResponse) => {
22
28
  swapRate,
23
29
  gasFee,
24
30
  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
- : {}),
31
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(adjustedReturn, { adjustedReturn }),
32
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(cost, { cost }),
33
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(priceImpact, { priceImpact }),
34
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(relayerFee, { relayerFee }),
35
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(includedTxFees, { includedTxFees }),
38
36
  };
39
- // Phase 1 only uses legacyMetadata
40
- return (0, lodash_1.merge)({}, legacyMetadata);
37
+ if (migrationPhase === types_js_1.QuoteMetadataMigrationPhase.V1Data ||
38
+ !(0, superstruct_1.is)(quoteResponse, quote_response_js_1.QuoteResponseSchemaV2)) {
39
+ return legacyMetadata;
40
+ }
41
+ const { quote: { src, dest, priceData, feeData: { network, relayer, txFee }, }, } = quoteResponse;
42
+ const totalNetworkFeeV2 = (0, number_formatters_js_1.sumAmounts)(network, relayer);
43
+ const toTokenAmountValues = (data) => {
44
+ return {
45
+ amount: data?.normalizedAmount,
46
+ usd: data?.usd,
47
+ valueInCurrency: data?.valueInCurrency,
48
+ };
49
+ };
50
+ // Build V1 from V2 quote
51
+ const v2Metadata = {
52
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(src, {
53
+ sentAmount: toTokenAmountValues(src),
54
+ }),
55
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(dest, {
56
+ toTokenAmount: toTokenAmountValues(dest),
57
+ minToTokenAmount: {
58
+ amount: dest.minAmountNormalized,
59
+ valueInCurrency: dest.minAmountValueInCurrency,
60
+ usd: dest.minAmountUsd,
61
+ },
62
+ }),
63
+ ...(priceData?.swapRate && { swapRate: priceData.swapRate }),
64
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(priceData?.adjustedReturn, {
65
+ adjustedReturn: toTokenAmountValues(priceData?.adjustedReturn),
66
+ }),
67
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(network?.[0], {
68
+ gasFee: {
69
+ total: toTokenAmountValues(network?.[0]),
70
+ },
71
+ }),
72
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(totalNetworkFeeV2, {
73
+ totalNetworkFee: toTokenAmountValues(totalNetworkFeeV2),
74
+ }),
75
+ ...(priceData?.priceImpact && {
76
+ priceImpact: toTokenAmountValues(priceData?.priceImpact),
77
+ // Use priceImpact as cost
78
+ cost: toTokenAmountValues(priceData?.priceImpact),
79
+ }),
80
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(relayer?.[0], {
81
+ relayerFee: toTokenAmountValues(relayer?.[0]),
82
+ }),
83
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(txFee?.[0], {
84
+ includedTxFees: toTokenAmountValues(txFee?.[0]),
85
+ }),
86
+ };
87
+ if (migrationPhase === types_js_1.QuoteMetadataMigrationPhase.V2WithV1Fallback) {
88
+ return (0, lodash_1.merge)({}, legacyMetadata, v2Metadata);
89
+ }
90
+ return v2Metadata;
41
91
  };
42
92
  exports.toQuoteMetadataV1 = toQuoteMetadataV1;
43
93
  //# 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 { is } from '@metamask/superstruct';\nimport { 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 { QuoteResponseSchemaV2 } 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 !is(quoteResponse, QuoteResponseSchemaV2)\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":"AAGA,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":"AAGA,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,19 @@
1
+ import { is } from "@metamask/superstruct";
1
2
  import $lodash from "lodash";
2
3
  const { merge } = $lodash;
4
+ import { QuoteResponseSchemaV2 } from "../../validators/quote-response.mjs";
5
+ import { sumAmounts } from "../number-formatters.mjs";
6
+ import { includeIfTruthy } from "./include-if-truthy.mjs";
7
+ import { QuoteMetadataMigrationPhase } from "./types.mjs";
3
8
  /**
4
9
  * Extracts legacy {@link QuoteMetadata} values from a {@link QuoteResponse} or {@link QuoteResponseV1}.
5
10
  * If a QuoteResponse is provided, this assumes that its `valueInCurrency` properties are set.
6
11
  *
7
12
  * @param quoteResponse - The quote to extract the metadata from
13
+ * @param migrationPhase - The migration phase to use
8
14
  * @returns A partial {@link QuoteMetadata} object
9
15
  */
10
- export const toQuoteMetadataV1 = (quoteResponse) => {
16
+ export const toQuoteMetadataV1 = (quoteResponse, migrationPhase = QuoteMetadataMigrationPhase.V1Data) => {
11
17
  /* istanbul ignore if */
12
18
  if (!quoteResponse) {
13
19
  return {};
@@ -20,21 +26,65 @@ export const toQuoteMetadataV1 = (quoteResponse) => {
20
26
  swapRate,
21
27
  gasFee,
22
28
  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
- : {}),
29
+ ...includeIfTruthy(adjustedReturn, { adjustedReturn }),
30
+ ...includeIfTruthy(cost, { cost }),
31
+ ...includeIfTruthy(priceImpact, { priceImpact }),
32
+ ...includeIfTruthy(relayerFee, { relayerFee }),
33
+ ...includeIfTruthy(includedTxFees, { includedTxFees }),
36
34
  };
37
- // Phase 1 only uses legacyMetadata
38
- return merge({}, legacyMetadata);
35
+ if (migrationPhase === QuoteMetadataMigrationPhase.V1Data ||
36
+ !is(quoteResponse, QuoteResponseSchemaV2)) {
37
+ return legacyMetadata;
38
+ }
39
+ const { quote: { src, dest, priceData, feeData: { network, relayer, txFee }, }, } = quoteResponse;
40
+ const totalNetworkFeeV2 = sumAmounts(network, relayer);
41
+ const toTokenAmountValues = (data) => {
42
+ return {
43
+ amount: data?.normalizedAmount,
44
+ usd: data?.usd,
45
+ valueInCurrency: data?.valueInCurrency,
46
+ };
47
+ };
48
+ // Build V1 from V2 quote
49
+ const v2Metadata = {
50
+ ...includeIfTruthy(src, {
51
+ sentAmount: toTokenAmountValues(src),
52
+ }),
53
+ ...includeIfTruthy(dest, {
54
+ toTokenAmount: toTokenAmountValues(dest),
55
+ minToTokenAmount: {
56
+ amount: dest.minAmountNormalized,
57
+ valueInCurrency: dest.minAmountValueInCurrency,
58
+ usd: dest.minAmountUsd,
59
+ },
60
+ }),
61
+ ...(priceData?.swapRate && { swapRate: priceData.swapRate }),
62
+ ...includeIfTruthy(priceData?.adjustedReturn, {
63
+ adjustedReturn: toTokenAmountValues(priceData?.adjustedReturn),
64
+ }),
65
+ ...includeIfTruthy(network?.[0], {
66
+ gasFee: {
67
+ total: toTokenAmountValues(network?.[0]),
68
+ },
69
+ }),
70
+ ...includeIfTruthy(totalNetworkFeeV2, {
71
+ totalNetworkFee: toTokenAmountValues(totalNetworkFeeV2),
72
+ }),
73
+ ...(priceData?.priceImpact && {
74
+ priceImpact: toTokenAmountValues(priceData?.priceImpact),
75
+ // Use priceImpact as cost
76
+ cost: toTokenAmountValues(priceData?.priceImpact),
77
+ }),
78
+ ...includeIfTruthy(relayer?.[0], {
79
+ relayerFee: toTokenAmountValues(relayer?.[0]),
80
+ }),
81
+ ...includeIfTruthy(txFee?.[0], {
82
+ includedTxFees: toTokenAmountValues(txFee?.[0]),
83
+ }),
84
+ };
85
+ if (migrationPhase === QuoteMetadataMigrationPhase.V2WithV1Fallback) {
86
+ return merge({}, legacyMetadata, v2Metadata);
87
+ }
88
+ return v2Metadata;
39
89
  };
40
90
  //# 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 { is } from '@metamask/superstruct';\nimport { 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 { QuoteResponseSchemaV2 } 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 !is(quoteResponse, QuoteResponseSchemaV2)\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,20 +29,21 @@ 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,
@@ -49,50 +51,27 @@ const toQuoteMetadataV2 = (quoteMetadata, quoteResponseV2) => {
49
51
  },
50
52
  feeData: {
51
53
  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,
54
+ toAmountAndAsset(nativeAsset, networkFeeToUse, {
57
55
  asset: nativeAsset,
58
- },
56
+ }),
59
57
  ],
60
- ...(relayerFee &&
61
- Object.values(relayerFee).some(Boolean) && {
58
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(relayerFee, {
62
59
  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,
68
- asset: nativeAsset,
69
- },
60
+ toAmountAndAsset(nativeAsset, relayerFee, { asset: nativeAsset }),
70
61
  ],
71
62
  }),
72
- ...(includedTxFees &&
73
- Object.values(includedTxFees).some(Boolean) && {
63
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(includedTxFees, {
74
64
  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
- },
65
+ toAmountAndAsset(txFeeAsset, includedTxFees, { asset: txFeeAsset }),
82
66
  ],
83
67
  }),
84
68
  },
85
69
  priceData: {
86
- ...(priceImpactToUse &&
87
- Object.values(priceImpactToUse).some(Boolean) && {
70
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(priceImpactToUse, {
88
71
  priceImpact: priceImpactToUse,
89
72
  }),
90
- ...(adjustedReturn &&
91
- Object.values(adjustedReturn).some(Boolean) && {
92
- adjustedReturn: {
93
- valueInCurrency: adjustedReturn?.valueInCurrency,
94
- usd: adjustedReturn?.usd,
95
- },
73
+ ...(0, include_if_truthy_js_1.includeIfTruthy)(adjustedReturn, {
74
+ adjustedReturn,
96
75
  }),
97
76
  swapRate,
98
77
  },
@@ -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 network: [\n toAmountAndAsset(nativeAsset, networkFeeToUse, {\n asset: nativeAsset,\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,CAyF3B,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,CAyF3B,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,20 +26,21 @@ 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,
@@ -46,50 +48,27 @@ export const toQuoteMetadataV2 = (quoteMetadata, quoteResponseV2) => {
46
48
  },
47
49
  feeData: {
48
50
  network: [
49
- {
50
- amount: calcAtomicTokenAmount(networkFeeToUse?.amount, nativeAsset?.decimals),
51
- normalizedAmount: networkFeeToUse?.amount,
52
- valueInCurrency: networkFeeToUse?.valueInCurrency,
53
- usd: networkFeeToUse?.usd,
51
+ toAmountAndAsset(nativeAsset, networkFeeToUse, {
54
52
  asset: nativeAsset,
55
- },
53
+ }),
56
54
  ],
57
- ...(relayerFee &&
58
- Object.values(relayerFee).some(Boolean) && {
55
+ ...includeIfTruthy(relayerFee, {
59
56
  relayer: [
60
- {
61
- amount: calcAtomicTokenAmount(relayerFee?.amount, nativeAsset?.decimals),
62
- normalizedAmount: relayerFee.amount,
63
- valueInCurrency: relayerFee.valueInCurrency,
64
- usd: relayerFee.usd,
65
- asset: nativeAsset,
66
- },
57
+ toAmountAndAsset(nativeAsset, relayerFee, { asset: nativeAsset }),
67
58
  ],
68
59
  }),
69
- ...(includedTxFees &&
70
- Object.values(includedTxFees).some(Boolean) && {
60
+ ...includeIfTruthy(includedTxFees, {
71
61
  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
- },
62
+ toAmountAndAsset(txFeeAsset, includedTxFees, { asset: txFeeAsset }),
79
63
  ],
80
64
  }),
81
65
  },
82
66
  priceData: {
83
- ...(priceImpactToUse &&
84
- Object.values(priceImpactToUse).some(Boolean) && {
67
+ ...includeIfTruthy(priceImpactToUse, {
85
68
  priceImpact: priceImpactToUse,
86
69
  }),
87
- ...(adjustedReturn &&
88
- Object.values(adjustedReturn).some(Boolean) && {
89
- adjustedReturn: {
90
- valueInCurrency: adjustedReturn?.valueInCurrency,
91
- usd: adjustedReturn?.usd,
92
- },
70
+ ...includeIfTruthy(adjustedReturn, {
71
+ adjustedReturn,
93
72
  }),
94
73
  swapRate,
95
74
  },
@@ -1 +1 @@
1
- {"version":3,"file":"to-quote-metadata-v2.mjs","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.mjs","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 network: [\n toAmountAndAsset(nativeAsset, networkFeeToUse, {\n asset: nativeAsset,\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"]}