@metamask-previews/bridge-controller 77.8.0-preview-5959fe813 → 77.8.0-preview-0d2cbf546

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 (196) hide show
  1. package/CHANGELOG.md +0 -12
  2. package/dist/bridge-controller.cjs +3 -8
  3. package/dist/bridge-controller.cjs.map +1 -1
  4. package/dist/bridge-controller.d.cts +3 -4
  5. package/dist/bridge-controller.d.cts.map +1 -1
  6. package/dist/bridge-controller.d.mts +3 -4
  7. package/dist/bridge-controller.d.mts.map +1 -1
  8. package/dist/bridge-controller.mjs +3 -8
  9. package/dist/bridge-controller.mjs.map +1 -1
  10. package/dist/index.cjs +2 -19
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.d.cts +4 -12
  13. package/dist/index.d.cts.map +1 -1
  14. package/dist/index.d.mts +4 -12
  15. package/dist/index.d.mts.map +1 -1
  16. package/dist/index.mjs +1 -7
  17. package/dist/index.mjs.map +1 -1
  18. package/dist/selectors.cjs +29 -31
  19. package/dist/selectors.cjs.map +1 -1
  20. package/dist/selectors.d.cts +36410 -5110
  21. package/dist/selectors.d.cts.map +1 -1
  22. package/dist/selectors.d.mts +36410 -5110
  23. package/dist/selectors.d.mts.map +1 -1
  24. package/dist/selectors.mjs +29 -31
  25. package/dist/selectors.mjs.map +1 -1
  26. package/dist/types.cjs.map +1 -1
  27. package/dist/types.d.cts +7 -2
  28. package/dist/types.d.cts.map +1 -1
  29. package/dist/types.d.mts +7 -2
  30. package/dist/types.d.mts.map +1 -1
  31. package/dist/types.mjs.map +1 -1
  32. package/dist/utils/bridge.cjs +5 -1
  33. package/dist/utils/bridge.cjs.map +1 -1
  34. package/dist/utils/bridge.d.cts +19 -2
  35. package/dist/utils/bridge.d.cts.map +1 -1
  36. package/dist/utils/bridge.d.mts +19 -2
  37. package/dist/utils/bridge.d.mts.map +1 -1
  38. package/dist/utils/bridge.mjs +3 -0
  39. package/dist/utils/bridge.mjs.map +1 -1
  40. package/dist/utils/caip-formatters.cjs +3 -0
  41. package/dist/utils/caip-formatters.cjs.map +1 -1
  42. package/dist/utils/caip-formatters.d.cts.map +1 -1
  43. package/dist/utils/caip-formatters.d.mts.map +1 -1
  44. package/dist/utils/caip-formatters.mjs +3 -0
  45. package/dist/utils/caip-formatters.mjs.map +1 -1
  46. package/dist/utils/feature-flags.d.cts +2 -2
  47. package/dist/utils/feature-flags.d.mts +2 -2
  48. package/dist/utils/fetch.cjs +40 -37
  49. package/dist/utils/fetch.cjs.map +1 -1
  50. package/dist/utils/fetch.d.cts +4 -10
  51. package/dist/utils/fetch.d.cts.map +1 -1
  52. package/dist/utils/fetch.d.mts +4 -10
  53. package/dist/utils/fetch.d.mts.map +1 -1
  54. package/dist/utils/fetch.mjs +40 -37
  55. package/dist/utils/fetch.mjs.map +1 -1
  56. package/dist/utils/metrics/properties.cjs +6 -6
  57. package/dist/utils/metrics/properties.cjs.map +1 -1
  58. package/dist/utils/metrics/properties.d.cts +5 -8
  59. package/dist/utils/metrics/properties.d.cts.map +1 -1
  60. package/dist/utils/metrics/properties.d.mts +5 -8
  61. package/dist/utils/metrics/properties.d.mts.map +1 -1
  62. package/dist/utils/metrics/properties.mjs +6 -6
  63. package/dist/utils/metrics/properties.mjs.map +1 -1
  64. package/dist/utils/metrics/types.cjs.map +1 -1
  65. package/dist/utils/metrics/types.d.cts +1 -1
  66. package/dist/utils/metrics/types.d.cts.map +1 -1
  67. package/dist/utils/metrics/types.d.mts +1 -1
  68. package/dist/utils/metrics/types.d.mts.map +1 -1
  69. package/dist/utils/metrics/types.mjs.map +1 -1
  70. package/dist/utils/number-formatters.cjs +1 -74
  71. package/dist/utils/number-formatters.cjs.map +1 -1
  72. package/dist/utils/number-formatters.d.cts +0 -18
  73. package/dist/utils/number-formatters.d.cts.map +1 -1
  74. package/dist/utils/number-formatters.d.mts +0 -18
  75. package/dist/utils/number-formatters.d.mts.map +1 -1
  76. package/dist/utils/number-formatters.mjs +0 -71
  77. package/dist/utils/number-formatters.mjs.map +1 -1
  78. package/dist/utils/quote-fees.cjs +22 -23
  79. package/dist/utils/quote-fees.cjs.map +1 -1
  80. package/dist/utils/quote-fees.d.cts +2 -4
  81. package/dist/utils/quote-fees.d.cts.map +1 -1
  82. package/dist/utils/quote-fees.d.mts +2 -4
  83. package/dist/utils/quote-fees.d.mts.map +1 -1
  84. package/dist/utils/quote-fees.mjs +23 -24
  85. package/dist/utils/quote-fees.mjs.map +1 -1
  86. package/dist/utils/quote-metadata/calculators.cjs +35 -33
  87. package/dist/utils/quote-metadata/calculators.cjs.map +1 -1
  88. package/dist/utils/quote-metadata/calculators.d.cts +14 -20
  89. package/dist/utils/quote-metadata/calculators.d.cts.map +1 -1
  90. package/dist/utils/quote-metadata/calculators.d.mts +14 -20
  91. package/dist/utils/quote-metadata/calculators.d.mts.map +1 -1
  92. package/dist/utils/quote-metadata/calculators.mjs +36 -34
  93. package/dist/utils/quote-metadata/calculators.mjs.map +1 -1
  94. package/dist/utils/quote-metadata/merge.cjs +2 -24
  95. package/dist/utils/quote-metadata/merge.cjs.map +1 -1
  96. package/dist/utils/quote-metadata/merge.d.cts +2 -3
  97. package/dist/utils/quote-metadata/merge.d.cts.map +1 -1
  98. package/dist/utils/quote-metadata/merge.d.mts +2 -3
  99. package/dist/utils/quote-metadata/merge.d.mts.map +1 -1
  100. package/dist/utils/quote-metadata/merge.mjs +2 -24
  101. package/dist/utils/quote-metadata/merge.mjs.map +1 -1
  102. package/dist/utils/slippage.d.cts +1 -1
  103. package/dist/utils/slippage.d.mts +1 -1
  104. package/dist/validators/batch-sell.d.cts +8 -8
  105. package/dist/validators/batch-sell.d.mts +8 -8
  106. package/dist/validators/bridge-asset.cjs +1 -65
  107. package/dist/validators/bridge-asset.cjs.map +1 -1
  108. package/dist/validators/bridge-asset.d.cts +5 -99
  109. package/dist/validators/bridge-asset.d.cts.map +1 -1
  110. package/dist/validators/bridge-asset.d.mts +5 -99
  111. package/dist/validators/bridge-asset.d.mts.map +1 -1
  112. package/dist/validators/bridge-asset.mjs +1 -64
  113. package/dist/validators/bridge-asset.mjs.map +1 -1
  114. package/dist/validators/feature-flags.d.cts +5 -5
  115. package/dist/validators/feature-flags.d.mts +5 -5
  116. package/dist/validators/intent.d.cts +3 -3
  117. package/dist/validators/intent.d.mts +3 -3
  118. package/dist/validators/quote-response-v1.d.cts +179 -179
  119. package/dist/validators/quote-response-v1.d.mts +179 -179
  120. package/dist/validators/quote.cjs +3 -73
  121. package/dist/validators/quote.cjs.map +1 -1
  122. package/dist/validators/quote.d.cts +45 -407
  123. package/dist/validators/quote.d.cts.map +1 -1
  124. package/dist/validators/quote.d.mts +45 -407
  125. package/dist/validators/quote.d.mts.map +1 -1
  126. package/dist/validators/quote.mjs +4 -74
  127. package/dist/validators/quote.mjs.map +1 -1
  128. package/dist/validators/step.cjs +1 -7
  129. package/dist/validators/step.cjs.map +1 -1
  130. package/dist/validators/step.d.cts +26 -197
  131. package/dist/validators/step.d.cts.map +1 -1
  132. package/dist/validators/step.d.mts +26 -197
  133. package/dist/validators/step.d.mts.map +1 -1
  134. package/dist/validators/step.mjs +1 -7
  135. package/dist/validators/step.mjs.map +1 -1
  136. package/dist/validators/token-feature.d.cts +2 -2
  137. package/dist/validators/token-feature.d.mts +2 -2
  138. package/dist/validators/trade.d.cts +2 -2
  139. package/dist/validators/trade.d.mts +2 -2
  140. package/package.json +1 -1
  141. package/dist/coercers/quote-response-v1-to-v2.cjs +0 -137
  142. package/dist/coercers/quote-response-v1-to-v2.cjs.map +0 -1
  143. package/dist/coercers/quote-response-v1-to-v2.d.cts +0 -13
  144. package/dist/coercers/quote-response-v1-to-v2.d.cts.map +0 -1
  145. package/dist/coercers/quote-response-v1-to-v2.d.mts +0 -13
  146. package/dist/coercers/quote-response-v1-to-v2.d.mts.map +0 -1
  147. package/dist/coercers/quote-response-v1-to-v2.mjs +0 -132
  148. package/dist/coercers/quote-response-v1-to-v2.mjs.map +0 -1
  149. package/dist/coercers/quote-response-v2-to-v1.cjs +0 -173
  150. package/dist/coercers/quote-response-v2-to-v1.cjs.map +0 -1
  151. package/dist/coercers/quote-response-v2-to-v1.d.cts +0 -13
  152. package/dist/coercers/quote-response-v2-to-v1.d.cts.map +0 -1
  153. package/dist/coercers/quote-response-v2-to-v1.d.mts +0 -13
  154. package/dist/coercers/quote-response-v2-to-v1.d.mts.map +0 -1
  155. package/dist/coercers/quote-response-v2-to-v1.mjs +0 -169
  156. package/dist/coercers/quote-response-v2-to-v1.mjs.map +0 -1
  157. package/dist/utils/quote-metadata/to-normalized-amounts.cjs +0 -38
  158. package/dist/utils/quote-metadata/to-normalized-amounts.cjs.map +0 -1
  159. package/dist/utils/quote-metadata/to-normalized-amounts.d.cts +0 -10
  160. package/dist/utils/quote-metadata/to-normalized-amounts.d.cts.map +0 -1
  161. package/dist/utils/quote-metadata/to-normalized-amounts.d.mts +0 -10
  162. package/dist/utils/quote-metadata/to-normalized-amounts.d.mts.map +0 -1
  163. package/dist/utils/quote-metadata/to-normalized-amounts.mjs +0 -34
  164. package/dist/utils/quote-metadata/to-normalized-amounts.mjs.map +0 -1
  165. package/dist/utils/quote-metadata/to-quote-metadata-v1.cjs +0 -39
  166. package/dist/utils/quote-metadata/to-quote-metadata-v1.cjs.map +0 -1
  167. package/dist/utils/quote-metadata/to-quote-metadata-v1.d.cts +0 -13
  168. package/dist/utils/quote-metadata/to-quote-metadata-v1.d.cts.map +0 -1
  169. package/dist/utils/quote-metadata/to-quote-metadata-v1.d.mts +0 -13
  170. package/dist/utils/quote-metadata/to-quote-metadata-v1.d.mts.map +0 -1
  171. package/dist/utils/quote-metadata/to-quote-metadata-v1.mjs +0 -36
  172. package/dist/utils/quote-metadata/to-quote-metadata-v1.mjs.map +0 -1
  173. package/dist/utils/quote-metadata/to-quote-metadata-v2.cjs +0 -94
  174. package/dist/utils/quote-metadata/to-quote-metadata-v2.cjs.map +0 -1
  175. package/dist/utils/quote-metadata/to-quote-metadata-v2.d.cts +0 -12
  176. package/dist/utils/quote-metadata/to-quote-metadata-v2.d.cts.map +0 -1
  177. package/dist/utils/quote-metadata/to-quote-metadata-v2.d.mts +0 -12
  178. package/dist/utils/quote-metadata/to-quote-metadata-v2.d.mts.map +0 -1
  179. package/dist/utils/quote-metadata/to-quote-metadata-v2.mjs +0 -90
  180. package/dist/utils/quote-metadata/to-quote-metadata-v2.mjs.map +0 -1
  181. package/dist/validators/amount-and-asset.cjs +0 -27
  182. package/dist/validators/amount-and-asset.cjs.map +0 -1
  183. package/dist/validators/amount-and-asset.d.cts +0 -62
  184. package/dist/validators/amount-and-asset.d.cts.map +0 -1
  185. package/dist/validators/amount-and-asset.d.mts +0 -62
  186. package/dist/validators/amount-and-asset.d.mts.map +0 -1
  187. package/dist/validators/amount-and-asset.mjs +0 -24
  188. package/dist/validators/amount-and-asset.mjs.map +0 -1
  189. package/dist/validators/quote-response.cjs +0 -116
  190. package/dist/validators/quote-response.cjs.map +0 -1
  191. package/dist/validators/quote-response.d.cts +0 -1979
  192. package/dist/validators/quote-response.d.cts.map +0 -1
  193. package/dist/validators/quote-response.d.mts +0 -1979
  194. package/dist/validators/quote-response.d.mts.map +0 -1
  195. package/dist/validators/quote-response.mjs +0 -112
  196. package/dist/validators/quote-response.mjs.map +0 -1
@@ -3,9 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.fetchBatchSellTrades = exports.formatBatchSellTradesRequest = exports.fetchBridgeQuoteStream = exports.fetchAssetPrices = exports.fetchBridgeQuotes = exports.fetchBridgeTokens = exports.getClientHeaders = void 0;
4
4
  /* eslint-disable @typescript-eslint/explicit-function-return-type */
5
5
  const superstruct_1 = require("@metamask/superstruct");
6
- const utils_1 = require("@metamask/utils");
7
- const quote_response_v1_to_v2_1 = require("../coercers/quote-response-v1-to-v2.cjs");
8
- const quote_response_v2_to_v1_1 = require("../coercers/quote-response-v2-to-v1.cjs");
9
6
  const batch_sell_1 = require("../validators/batch-sell.cjs");
10
7
  const bridge_asset_1 = require("../validators/bridge-asset.cjs");
11
8
  const quote_response_v1_1 = require("../validators/quote-response-v1.cjs");
@@ -224,8 +221,8 @@ const fetchAssetPrices = async (request) => {
224
221
  return combinedPrices;
225
222
  };
226
223
  exports.fetchAssetPrices = fetchAssetPrices;
227
- const getQuoteRequestId = ({ srcChainId, destChainId, srcTokenAddress, destTokenAddress, }) => `${(0, caip_formatters_1.formatAddressToAssetId)(srcTokenAddress, srcChainId)}-${(0, caip_formatters_1.formatAddressToAssetId)(destTokenAddress, destChainId)}`.toLowerCase();
228
- const getQuoteResponseId = ({ src: { asset: srcAsset }, dest: { asset: destAsset }, }) => `${srcAsset.assetId}-${destAsset.assetId}`.toLowerCase();
224
+ const getQuoteRequestId = ({ srcChainId, destChainId, srcTokenAddress, destTokenAddress, }) => `${(0, caip_formatters_1.formatAddressToAssetId)(srcTokenAddress, srcChainId)}-${(0, caip_formatters_1.formatAddressToAssetId)(destTokenAddress, destChainId)}`;
225
+ const getQuoteResponseId = ({ srcAsset: { address: srcTokenAddress, chainId: srcChainId }, destAsset: { address: destTokenAddress, chainId: destChainId }, }) => `${(0, caip_formatters_1.formatAddressToAssetId)(srcTokenAddress, srcChainId)}-${(0, caip_formatters_1.formatAddressToAssetId)(destTokenAddress, destChainId)}`;
229
226
  /**
230
227
  * Fetches quotes from the bridge-api
231
228
  *
@@ -255,43 +252,42 @@ async function fetchBridgeQuoteStream(fetchFn, quoteRequests, signal, featureId,
255
252
  const quoteRequestIds = isBatchSellRequest
256
253
  ? normalizedQuoteRequests.map(getQuoteRequestId)
257
254
  : undefined;
258
- const onQuoteReceived = async (quoteResponseV1OrV2) => {
255
+ const onQuoteReceived = async (quoteResponse) => {
259
256
  const uniqueValidationFailures = new Set([]);
260
257
  try {
261
- const quoteResponse = (0, quote_response_v1_to_v2_1.toQuoteResponseV2)(quoteResponseV1OrV2);
262
- // Fallback to 0 if the quote doesn't match any requests
263
- const matchedQuoteRequestIdx = Math.max(quoteRequestIds?.findIndex((id) => {
264
- return id === getQuoteResponseId(quoteResponse.quote);
265
- }) ?? 0, 0);
266
- const matchingQuoteRequest = normalizedQuoteRequests[matchedQuoteRequestIdx];
267
- return await serverEventHandlers.onValidQuoteReceived({
268
- ...quoteResponse,
269
- featureId,
270
- // Append the reset approval data to the quote response if the request has resetApproval set to true and the quote has an approval
271
- resetApproval: quoteResponse.namespace === utils_1.KnownCaipNamespace.Eip155 &&
272
- matchingQuoteRequest.resetApproval &&
273
- quoteResponse.approval
274
- ? {
275
- ...quoteResponse.approval,
276
- data: (0, bridge_1.getEthUsdtResetData)(matchingQuoteRequest.destChainId),
277
- }
278
- : undefined,
279
- ...(isBatchSellRequest && {
280
- quoteRequestIndex: matchedQuoteRequestIdx,
281
- }),
282
- });
258
+ if ((0, quote_response_v1_1.validateQuoteResponseV1)(quoteResponse)) {
259
+ // Fallback to 0 if the quote doesn't match any requests
260
+ const matchedQuoteRequestIdx = Math.max(quoteRequestIds?.findIndex((id) => {
261
+ return id === getQuoteResponseId(quoteResponse.quote);
262
+ }) ?? 0, 0);
263
+ const matchingQuoteRequest = normalizedQuoteRequests[matchedQuoteRequestIdx];
264
+ return await serverEventHandlers.onValidQuoteReceived({
265
+ ...quoteResponse,
266
+ featureId,
267
+ // Append the reset approval data to the quote response if the request has resetApproval set to true and the quote has an approval
268
+ resetApproval: matchingQuoteRequest.resetApproval &&
269
+ quoteResponse.approval &&
270
+ (0, trade_1.isEvmTxData)(quoteResponse.approval)
271
+ ? {
272
+ ...quoteResponse.approval,
273
+ data: (0, bridge_1.getEthUsdtResetData)(matchingQuoteRequest.destChainId),
274
+ }
275
+ : undefined,
276
+ ...(isBatchSellRequest && {
277
+ quoteRequestIndex: matchedQuoteRequestIdx,
278
+ }),
279
+ });
280
+ }
283
281
  }
284
282
  catch (error) {
285
283
  if (error instanceof superstruct_1.StructError) {
286
284
  console.warn('Quote validation failed', (0, struct_error_1.formatStructErrors)(error));
287
285
  error.failures().forEach(({ branch, path }) => {
288
- const aggregatorId = branch?.[0]?.quote?.aggregator ??
289
- branch?.[0]?.quote?.protocols?.[0] ??
290
- quoteResponseV1OrV2?.quote?.protocols?.[0] ??
291
- quoteResponseV1OrV2?.quote?.bridgeId ??
292
- quoteResponseV1OrV2?.quote?.bridges?.[0] ??
293
- quoteResponseV1OrV2?.quote?.aggregator ??
294
- 'unknown';
286
+ const aggregatorId = branch?.[0]?.quote?.bridgeId ??
287
+ branch?.[0]?.quote?.bridges?.[0] ??
288
+ quoteResponse?.quote?.bridgeId ??
289
+ (quoteResponse?.quote?.bridges?.[0] ||
290
+ 'unknown');
295
291
  const pathString = path?.join('.') || 'unknown';
296
292
  uniqueValidationFailures.add([aggregatorId, pathString].join('|'));
297
293
  });
@@ -303,6 +299,7 @@ async function fetchBridgeQuoteStream(fetchFn, quoteRequests, signal, featureId,
303
299
  // Rethrow any unexpected errors
304
300
  throw error;
305
301
  }
302
+ return undefined;
306
303
  };
307
304
  const onTokenWarningReceived = (data) => {
308
305
  try {
@@ -374,8 +371,14 @@ async function fetchBridgeQuoteStream(fetchFn, quoteRequests, signal, featureId,
374
371
  exports.fetchBridgeQuoteStream = fetchBridgeQuoteStream;
375
372
  const formatBatchSellTradesRequest = (quotes, stxEnabled) => ({
376
373
  quotes: quotes
377
- .filter((quote) => quote !== null && Boolean(quote))
378
- .map(quote_response_v2_to_v1_1.toQuoteResponseV1),
374
+ .filter((quote) => quote !== null)
375
+ .map(({ trade, approval, quote, estimatedProcessingTimeInSeconds, quoteId, }) => ({
376
+ trade,
377
+ approval,
378
+ quote,
379
+ estimatedProcessingTimeInSeconds,
380
+ quoteId,
381
+ })),
379
382
  stxEnabled,
380
383
  });
381
384
  exports.formatBatchSellTradesRequest = formatBatchSellTradesRequest;
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.cjs","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":";;;AAAA,qEAAqE;AACrE,uDAAoD;AACpD,2CAAqD;AAGrD,qFAAwE;AACxE,qFAAwE;AAUxE,6DAA2E;AAC3E,iEAAiE;AAKjE,2EAA0E;AAC1E,mFAAkF;AAClF,mEAAmE;AACnE,mDAAkD;AAElD,yCAA+C;AAC/C,2DAI2B;AAC3B,mEAA0D;AAE1D,qDAAoD;AAE7C,MAAM,gBAAgB,GAAG,CAAC,EAC/B,QAAQ,EACR,aAAa,EACb,GAAG,GAKJ,EAAE,EAAE,CAAC,CAAC;IACL,aAAa,EAAE,QAAQ;IACvB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAClD,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CAC9D,CAAC,CAAC;AAZU,QAAA,gBAAgB,oBAY1B;AAEH;;;;;;;;;;;;GAYG;AACI,KAAK,UAAU,iBAAiB,CACrC,OAA0B,EAC1B,QAAgB,EAChB,GAAuB,EACvB,OAAsB,EACtB,gBAAwB,EACxB,aAAsB;IAEtB,MAAM,GAAG,GAAG,GAAG,gBAAgB,sBAAsB,IAAA,oCAAkB,EAAC,OAAO,CAAC,EAAE,CAAC;IAEnF,uGAAuG;IACvG,uEAAuE;IACvE,6IAA6I;IAC7I,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE;QAChC,OAAO,EAAE,IAAA,wBAAgB,EAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;KAC5D,CAAC,CAAC;IAEH,MAAM,iBAAiB,GAAgC,EAAE,CAAC;IAC1D,MAAM,CAAC,OAAO,CAAC,CAAC,KAAc,EAAE,EAAE;QAChC,IAAI,IAAA,kCAAmB,EAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;QAC3C,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAxBD,8CAwBC;AAED;;;;;GAKG;AACH,MAAM,kBAAkB,GAAG,CAAC,OAA4B,EAAgB,EAAE;IACxE,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,OAAO,CAAC,aAAa,CAAC;IAC7E,wDAAwD;IACxD,MAAM,iBAAiB,GAAiB;QACtC,aAAa,EAAE,IAAA,8CAA4B,EAAC,OAAO,CAAC,aAAa,CAAC;QAClE,iBAAiB,EAAE,IAAA,8CAA4B,EAAC,iBAAiB,CAAC;QAClE,UAAU,EAAE,IAAA,oCAAkB,EAAC,OAAO,CAAC,UAAU,CAAC;QAClD,WAAW,EAAE,IAAA,oCAAkB,EAAC,OAAO,CAAC,WAAW,CAAC;QACpD,eAAe,EAAE,IAAA,8CAA4B,EAAC,OAAO,CAAC,eAAe,CAAC;QACtE,gBAAgB,EAAE,IAAA,8CAA4B,EAAC,OAAO,CAAC,gBAAgB,CAAC;QACxE,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC;QACjD,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;QAC7C,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;QACzC,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC;KAClD,CAAC;IACF,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACnC,iBAAiB,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAChD,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC9B,iBAAiB,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACtC,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,iBAAiB,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC5C,CAAC;IACD,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,iBAAiB,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAClD,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,iBAAiB,GAAG,CACxB,iBAA+B,EACd,EAAE;IACnB,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE,CAAC;IAC1C,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACzD,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IACH,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACI,KAAK,UAAU,iBAAiB,CACrC,OAA4B,EAC5B,MAA0B,EAC1B,QAAgB,EAChB,GAAuB,EACvB,OAAsB,EACtB,gBAAwB,EACxB,SAA2B,EAC3B,aAAsB;IAKtB,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IAEzD,MAAM,GAAG,GAAG,GAAG,gBAAgB,aAAa,WAAW,EAAE,CAAC;IAC1D,MAAM,MAAM,GAAc,MAAM,OAAO,CAAC,GAAG,EAAE;QAC3C,OAAO,EAAE,IAAA,wBAAgB,EAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;QAC3D,MAAM;KACP,CAAC,CAAC;IAEH,MAAM,wBAAwB,GAAgB,IAAI,GAAG,CAAS,EAAE,CAAC,CAAC;IAClE,MAAM,cAAc,GAAG,MAAM;SAC1B,MAAM,CAAC,CAAC,aAAsB,EAAoC,EAAE;QACnE,IAAI,CAAC;YACH,OAAO,IAAA,2CAAuB,EAAC,aAAa,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,yBAAW,EAAE,CAAC;gBACjC,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;oBAC5C,MAAM,YAAY,GAChB,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ;wBAC5B,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;wBAC/B,aAAiC,EAAE,KAAK,EAAE,QAAQ;wBAClD,aAAiC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;wBACvD,SAAS,CAAC;oBACZ,MAAM,UAAU,GAAG,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;oBAChD,wBAAwB,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBACrE,CAAC,CAAC,CAAC;YACL,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACf,GAAG,KAAK;QACR,SAAS,EAAE,SAAS,IAAI,SAAS;QACjC,sEAAsE;QACtE,8DAA8D;QAC9D,aAAa,EACX,OAAO,CAAC,aAAa,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAA,mBAAW,EAAC,KAAK,CAAC,QAAQ,CAAC;YACpE,CAAC,CAAC;gBACE,GAAG,KAAK,CAAC,QAAQ;gBACjB,IAAI,EAAE,IAAA,4BAAmB,EAAC,OAAO,CAAC,WAAW,CAAC;aAC/C;YACH,CAAC,CAAC,SAAS;KAChB,CAAC,CAAC,CAAC;IAEN,MAAM,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAChE,IAAI,wBAAwB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,kBAAkB,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO;QACL,MAAM,EAAE,cAAc;QACtB,kBAAkB;KACnB,CAAC;AACJ,CAAC;AAlED,8CAkEC;AAED,MAAM,2BAA2B,GAAG,KAAK,EAAE,OAO1C,EAAkE,EAAE;IACnE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,GACpE,OAAO,CAAC;IACV,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3D,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC;QACtC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACjD,UAAU,EAAE,QAAQ;KACrB,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,mDAAmD,WAAW,EAAE,CAAC;IAC7E,MAAM,gBAAgB,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,EAAE;QAC3C,OAAO,EAAE,IAAA,wBAAgB,EAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;QACtD,MAAM;KACP,CAAC,CAAqE,CAAC;IACxE,IAAI,CAAC,gBAAgB,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE,CAAC;QAC9D,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAE5C,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE,EAAE;QACpC,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO,GAAG,CAAC;QACb,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,OAAwB,CAAC,EAAE,CAAC;YACnC,GAAG,CAAC,OAAwB,CAAC,GAAG,EAAE,CAAC;QACrC,CAAC;QACD,IAAI,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,GAAG,CAAC,OAAwB,CAAC,CAAC,QAAQ,CAAC;gBACrC,eAAe,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;QACzC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC,CAAC;AAEF;;;;;GAKG;AACI,MAAM,gBAAgB,GAAG,KAAK,EACnC,OAEuE,EAGvE,EAAE;IACF,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAExC,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,UAAU,CAC7C,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CACxB,KAAK,EAAE,QAAQ,EAAE,EAAE,CACjB,MAAM,2BAA2B,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,CAAC,CAC3D,CACF,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,EAAE;QAC1B,OAAO,gBAAgB,CAAC,MAAM,CAE5B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;YAChB,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE,EAAE;oBAClE,MAAM,cAAc,GAAG,GAAG,CAAC,OAAwB,CAAC,CAAC;oBACrD,IAAI,CAAC,cAAc,EAAE,CAAC;wBACpB,GAAG,CAAC,OAAwB,CAAC,GAAG,EAAE,CAAC;oBACrC,CAAC;oBACD,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE;wBAC5D,GAAG,CAAC,OAAwB,CAAC,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;oBAClD,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,CAAC,CAAC,CAAC;IAEH,OAAO,cAAc,CAAC;AACxB,CAAC,CAAC;AAlCW,QAAA,gBAAgB,oBAkC3B;AAEF,MAAM,iBAAiB,GAAG,CAAC,EACzB,UAAU,EACV,WAAW,EACX,eAAe,EACf,gBAAgB,GACH,EAAU,EAAE,CACzB,GAAG,IAAA,wCAAsB,EAAC,eAAe,EAAE,UAAU,CAAC,IAAI,IAAA,wCAAsB,EAAC,gBAAgB,EAAE,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;AAElI,MAAM,kBAAkB,GAAG,CAAC,EAC1B,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EACxB,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GACH,EAAU,EAAE,CACnC,GAAG,QAAQ,CAAC,OAAO,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,CAAC;AAE3D;;;;;;;;;;;;;;;;;;GAkBG;AACI,KAAK,UAAU,sBAAsB,CAC1C,OAAsB,EACtB,aAAoC,EACpC,MAA+B,EAC/B,SAAoB,EACpB,QAAgB,EAChB,GAAuB,EACvB,gBAAwB,EACxB,mBAQC,EACD,aAAsB;IAEtB;;;OAGG;IACH,MAAM,kBAAkB,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;IACpD,MAAM,uBAAuB,GAAG,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACtE,MAAM,eAAe,GAAG,kBAAkB;QACxC,CAAC,CAAC,uBAAuB,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAChD,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,eAAe,GAAG,KAAK,EAC3B,mBAA4B,EACb,EAAE;QACjB,MAAM,wBAAwB,GAAgB,IAAI,GAAG,CAAS,EAAE,CAAC,CAAC;QAElE,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,IAAA,2CAAiB,EAAC,mBAAmB,CAAC,CAAC;YAC7D,wDAAwD;YACxD,MAAM,sBAAsB,GAAG,IAAI,CAAC,GAAG,CACrC,eAAe,EAAE,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE;gBAChC,OAAO,EAAE,KAAK,kBAAkB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACxD,CAAC,CAAC,IAAI,CAAC,EACP,CAAC,CACF,CAAC;YACF,MAAM,oBAAoB,GACxB,uBAAuB,CAAC,sBAAsB,CAAC,CAAC;YAElD,OAAO,MAAM,mBAAmB,CAAC,oBAAoB,CAAC;gBACpD,GAAG,aAAa;gBAChB,SAAS;gBACT,kIAAkI;gBAClI,aAAa,EACX,aAAa,CAAC,SAAS,KAAK,0BAAkB,CAAC,MAAM;oBACrD,oBAAoB,CAAC,aAAa;oBAClC,aAAa,CAAC,QAAQ;oBACpB,CAAC,CAAC;wBACE,GAAG,aAAa,CAAC,QAAQ;wBACzB,IAAI,EAAE,IAAA,4BAAmB,EAAC,oBAAoB,CAAC,WAAW,CAAC;qBAC5D;oBACH,CAAC,CAAC,SAAS;gBACf,GAAG,CAAC,kBAAkB,IAAI;oBACxB,iBAAiB,EAAE,sBAAsB;iBAC1C,CAAC;aACH,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,yBAAW,EAAE,CAAC;gBACjC,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,IAAA,iCAAkB,EAAC,KAAK,CAAC,CAAC,CAAC;gBACnE,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;oBAC5C,MAAM,YAAY,GAChB,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU;wBAC9B,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;wBACjC,mBAAuC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;wBAC9D,mBAAuC,EAAE,KAAK,EAAE,QAAQ;wBACxD,mBAAuC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;wBAC5D,mBAAqC,EAAE,KAAK,EAAE,UAAU;wBACzD,SAAS,CAAC;oBACZ,MAAM,UAAU,GAAG,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;oBAChD,wBAAwB,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBACrE,CAAC,CAAC,CAAC;YACL,CAAC;YACD,MAAM,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAChE,IAAI,wBAAwB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBACtC,OAAO,mBAAmB,CAAC,wBAAwB,CAAC,kBAAkB,CAAC,CAAC;YAC1E,CAAC;YACD,gCAAgC;YAChC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,sBAAsB,GAAG,CAAC,IAAa,EAAQ,EAAE;QACrD,IAAI,CAAC;YACH,IAAI,IAAA,oCAAoB,EAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,mBAAmB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,CAAC,IAAa,EAAQ,EAAE;QACjD,IAAI,CAAC;YACH,IAAI,IAAA,mDAA2B,EAAC,IAAI,CAAC,EAAE,CAAC;gBACtC,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;QACjE,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,EACrB,IAA6B,EAC7B,SAAkB,EACH,EAAE;QACjB,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,OAAO;gBACV,OAAO,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;YACrC,KAAK,eAAe;gBAClB,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;YACtC,KAAK,UAAU;gBACb,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAClC;gBACE,OAAO,SAAS,CAAC;QACrB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG;QACzB,MAAM;QACN,SAAS;QACT,OAAO,EAAE,CAAC,KAAc,EAAE,EAAE;YAC1B,iDAAiD;YACjD,MAAM,KAAK,CAAC;QACd,CAAC;QACD,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,mBAAmB,CAAC,OAAO,EAAE,CAAC;QACtC,CAAC;QACD,OAAO;KACR,CAAC;IAEF,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,GAAG,gBAAgB,sBAAsB,CAAC;QAC5D,MAAM,IAAA,uCAAiB,EAAC,SAAS,EAAE;YACjC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,uBAAuB,EAAE,CAAC;YAC3D,OAAO,EAAE;gBACP,GAAG,IAAA,wBAAgB,EAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;gBACrD,cAAc,EAAE,kBAAkB;aACnC;YACD,GAAG,kBAAkB;SACtB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,iBAAiB,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,MAAM,SAAS,GAAG,GAAG,gBAAgB,mBAAmB,WAAW,EAAE,CAAC;IACtE,MAAM,IAAA,uCAAiB,EAAC,SAAS,EAAE;QACjC,OAAO,EAAE;YACP,GAAG,IAAA,wBAAgB,EAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;YACrD,cAAc,EAAE,mBAAmB;SACpC;QACD,GAAG,kBAAkB;KACtB,CAAC,CAAC;AACL,CAAC;AAhKD,wDAgKC;AAEM,MAAM,4BAA4B,GAAG,CAC1C,MAAoE,EACpE,UAAmB,EACK,EAAE,CAAC,CAAC;IAC5B,MAAM,EAAE,MAAM;SACX,MAAM,CACL,CAAC,KAAK,EAA8D,EAAE,CACpE,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,CACnC;SACA,GAAG,CAAC,2CAAiB,CAAC;IACzB,UAAU;CACX,CAAC,CAAC;AAXU,QAAA,4BAA4B,gCAWtC;AAEH;;;;;;;;;;;;GAYG;AACI,KAAK,UAAU,oBAAoB,CACxC,MAAgC,EAChC,UAAmB,EACnB,MAA0B,EAC1B,QAAgB,EAChB,GAAuB,EACvB,OAAsB,EACtB,gBAAwB,EACxB,aAAsB;IAEtB,MAAM,GAAG,GAAG,GAAG,gBAAgB,qBAAqB,CAAC;IACrD,MAAM,OAAO,GAA2B,IAAA,oCAA4B,EAClE,MAAM,EACN,UAAU,CACX,CAAC;IACF,MAAM,uBAAuB,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE;QACjD,OAAO,EAAE;YACP,GAAG,IAAA,wBAAgB,EAAC;gBAClB,QAAQ;gBACR,aAAa;gBACb,GAAG;aACJ,CAAC;YACF,cAAc,EAAE,kBAAkB;SACnC;QACD,MAAM;QACN,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;KAC9B,CAAC,CAAC;IAEH,IAAI,CAAC,uBAAuB,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACb,sCAAsC,uBAAuB,CAAC,UAAU,EAAE,CAC3E,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,uBAAuB,CAAC,IAAI,EAAE,CAAC;QAClD,IAAA,4CAA+B,EAAC,IAAI,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,gCAAgC;QAChC,MAAM,IAAI,KAAK,CAAC,sCAAsC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AA3CD,oDA2CC","sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport { StructError } from '@metamask/superstruct';\nimport { KnownCaipNamespace } from '@metamask/utils';\nimport type { CaipAssetType, CaipChainId, Hex } from '@metamask/utils';\n\nimport { toQuoteResponseV2 } from '../coercers/quote-response-v1-to-v2';\nimport { toQuoteResponseV1 } from '../coercers/quote-response-v2-to-v1';\nimport type {\n FetchFunction,\n GenericQuoteRequest,\n QuoteRequest,\n TokenFeature,\n QuoteStreamCompleteData,\n BatchSellTradesRequest,\n BatchSellTradesResponse,\n} from '../types';\nimport { validateBatchSellTradesResponse } from '../validators/batch-sell';\nimport { validateBridgeAsset } from '../validators/bridge-asset';\nimport type { BridgeAsset } from '../validators/bridge-asset';\nimport type { FeatureId } from '../validators/feature-flags';\nimport type { QuoteResponse } from '../validators/quote-response';\nimport type { QuoteResponseV1 } from '../validators/quote-response-v1';\nimport { validateQuoteResponseV1 } from '../validators/quote-response-v1';\nimport { validateQuoteStreamComplete } from '../validators/quote-stream-complete';\nimport { validateTokenFeature } from '../validators/token-feature';\nimport { isEvmTxData } from '../validators/trade';\nimport type { TxData } from '../validators/trade';\nimport { getEthUsdtResetData } from './bridge';\nimport {\n formatAddressToAssetId,\n formatAddressToCaipReference,\n formatChainIdToDec,\n} from './caip-formatters';\nimport { fetchServerEvents } from './fetch-server-events';\nimport type { QuoteMetadata } from './quote-metadata/types';\nimport { formatStructErrors } from './struct-error';\n\nexport const getClientHeaders = ({\n clientId,\n clientVersion,\n jwt,\n}: {\n clientId: string;\n clientVersion?: string;\n jwt?: string;\n}) => ({\n 'X-Client-Id': clientId,\n ...(jwt ? { Authorization: `Bearer ${jwt}` } : {}),\n ...(clientVersion ? { 'Client-Version': clientVersion } : {}),\n});\n\n/**\n * Returns a list of enabled (unblocked) tokens\n *\n * @deprecated Use the popular and search bridge-api endpoints instead\n *\n * @param chainId - The chain ID to fetch tokens for\n * @param clientId - The client ID for metrics\n * @param jwt - The JWT token for authentication\n * @param fetchFn - The fetch function to use\n * @param bridgeApiBaseUrl - The base URL for the bridge API\n * @param clientVersion - The client version for metrics (optional)\n * @returns A list of enabled (unblocked) tokens\n */\nexport async function fetchBridgeTokens(\n chainId: Hex | CaipChainId,\n clientId: string,\n jwt: string | undefined,\n fetchFn: FetchFunction,\n bridgeApiBaseUrl: string,\n clientVersion?: string,\n): Promise<Record<string, BridgeAsset>> {\n const url = `${bridgeApiBaseUrl}/getTokens?chainId=${formatChainIdToDec(chainId)}`;\n\n // TODO we will need to cache these. In Extension fetchWithCache is used. This is due to the following:\n // If we allow selecting dest networks which the user has not imported,\n // note that the Assets controller won't be able to provide tokens. In extension we fetch+cache the token list from bridge-api to handle this\n const tokens = await fetchFn(url, {\n headers: getClientHeaders({ clientId, clientVersion, jwt }),\n });\n\n const transformedTokens: Record<string, BridgeAsset> = {};\n tokens.forEach((token: unknown) => {\n if (validateBridgeAsset(token)) {\n transformedTokens[token.address] = token;\n }\n });\n return transformedTokens;\n}\n\n/**\n * Converts the generic quote request to QuoteRequest\n *\n * @param request - The quote request\n * @returns A QuoteRequest object\n */\nconst formatQuoteRequest = (request: GenericQuoteRequest): QuoteRequest => {\n const destWalletAddress = request.destWalletAddress ?? request.walletAddress;\n // Transform the generic quote request into QuoteRequest\n const normalizedRequest: QuoteRequest = {\n walletAddress: formatAddressToCaipReference(request.walletAddress),\n destWalletAddress: formatAddressToCaipReference(destWalletAddress),\n srcChainId: formatChainIdToDec(request.srcChainId),\n destChainId: formatChainIdToDec(request.destChainId),\n srcTokenAddress: formatAddressToCaipReference(request.srcTokenAddress),\n destTokenAddress: formatAddressToCaipReference(request.destTokenAddress),\n srcTokenAmount: request.srcTokenAmount,\n insufficientBal: Boolean(request.insufficientBal),\n resetApproval: Boolean(request.resetApproval),\n gasIncluded: Boolean(request.gasIncluded),\n gasIncluded7702: Boolean(request.gasIncluded7702),\n };\n if (request.slippage !== undefined) {\n normalizedRequest.slippage = request.slippage;\n }\n if (request.fee !== undefined) {\n normalizedRequest.fee = request.fee;\n }\n if (request.aggIds && request.aggIds.length > 0) {\n normalizedRequest.aggIds = request.aggIds;\n }\n if (request.bridgeIds && request.bridgeIds.length > 0) {\n normalizedRequest.bridgeIds = request.bridgeIds;\n }\n\n return normalizedRequest;\n};\n\n/**\n * Converts the generic quote request to the type that the bridge-api expects\n *\n * @param normalizedRequest - The normalized quote request\n * @returns A URLSearchParams object with the query parameters\n */\nconst formatQueryParams = (\n normalizedRequest: QuoteRequest,\n): URLSearchParams => {\n const queryParams = new URLSearchParams();\n Object.entries(normalizedRequest).forEach(([key, value]) => {\n queryParams.append(key, value.toString());\n });\n return queryParams;\n};\n\n/**\n * Fetches quotes from the bridge-api's getQuote endpoint\n *\n * @param request - The quote request\n * @param signal - The abort signal\n * @param clientId - The client ID for metrics\n * @param jwt - The JWT token for authentication\n * @param fetchFn - The fetch function to use\n * @param bridgeApiBaseUrl - The base URL for the bridge API\n * @param featureId - The feature ID to append to each quote\n * @param clientVersion - The client version for metrics (optional)\n * @returns A list of bridge tx quotes\n */\nexport async function fetchBridgeQuotes(\n request: GenericQuoteRequest,\n signal: AbortSignal | null,\n clientId: string,\n jwt: string | undefined,\n fetchFn: FetchFunction,\n bridgeApiBaseUrl: string,\n featureId: FeatureId | null,\n clientVersion?: string,\n): Promise<{\n quotes: QuoteResponseV1[];\n validationFailures: string[];\n}> {\n const normalizedRequest = formatQuoteRequest(request);\n const queryParams = formatQueryParams(normalizedRequest);\n\n const url = `${bridgeApiBaseUrl}/getQuote?${queryParams}`;\n const quotes: unknown[] = await fetchFn(url, {\n headers: getClientHeaders({ clientId, clientVersion, jwt }),\n signal,\n });\n\n const uniqueValidationFailures: Set<string> = new Set<string>([]);\n const filteredQuotes = quotes\n .filter((quoteResponse: unknown): quoteResponse is QuoteResponseV1 => {\n try {\n return validateQuoteResponseV1(quoteResponse);\n } catch (error) {\n if (error instanceof StructError) {\n error.failures().forEach(({ branch, path }) => {\n const aggregatorId =\n branch?.[0]?.quote?.bridgeId ??\n branch?.[0]?.quote?.bridges?.[0] ??\n (quoteResponse as QuoteResponseV1)?.quote?.bridgeId ??\n (quoteResponse as QuoteResponseV1)?.quote?.bridges?.[0] ??\n 'unknown';\n const pathString = path?.join('.') || 'unknown';\n uniqueValidationFailures.add([aggregatorId, pathString].join('|'));\n });\n }\n return false;\n }\n })\n .map((quote) => ({\n ...quote,\n featureId: featureId ?? undefined,\n // Append the reset approval data to the quote response if the request\n // has resetApproval set to true and the quote has an approval\n resetApproval:\n request.resetApproval && quote.approval && isEvmTxData(quote.approval)\n ? {\n ...quote.approval,\n data: getEthUsdtResetData(request.destChainId),\n }\n : undefined,\n }));\n\n const validationFailures = Array.from(uniqueValidationFailures);\n if (uniqueValidationFailures.size > 0) {\n console.warn('Quote validation failed', validationFailures);\n }\n\n return {\n quotes: filteredQuotes,\n validationFailures,\n };\n}\n\nconst fetchAssetPricesForCurrency = async (request: {\n currency: string;\n assetIds: Set<CaipAssetType>;\n clientId: string;\n clientVersion?: string;\n fetchFn: FetchFunction;\n signal?: AbortSignal;\n}): Promise<Record<CaipAssetType, { [currency: string]: string }>> => {\n const { currency, assetIds, clientId, clientVersion, fetchFn, signal } =\n request;\n const validAssetIds = Array.from(assetIds).filter(Boolean);\n if (validAssetIds.length === 0) {\n return {};\n }\n\n const queryParams = new URLSearchParams({\n assetIds: validAssetIds.filter(Boolean).join(','),\n vsCurrency: currency,\n });\n const url = `https://price.api.cx.metamask.io/v3/spot-prices?${queryParams}`;\n const priceApiResponse = (await fetchFn(url, {\n headers: getClientHeaders({ clientId, clientVersion }),\n signal,\n })) as unknown as Record<CaipAssetType, { [currency: string]: number }>;\n if (!priceApiResponse || typeof priceApiResponse !== 'object') {\n return {};\n }\n\n return Object.entries(priceApiResponse).reduce<\n Record<CaipAssetType, { [currency: string]: string }>\n >((acc, [assetId, currencyToPrice]) => {\n if (!currencyToPrice) {\n return acc;\n }\n if (!acc[assetId as CaipAssetType]) {\n acc[assetId as CaipAssetType] = {};\n }\n if (currencyToPrice[currency]) {\n acc[assetId as CaipAssetType][currency] =\n currencyToPrice[currency].toString();\n }\n return acc;\n }, {});\n};\n\n/**\n * Fetches the asset prices from the price API for multiple currencies\n *\n * @param request - The request object\n * @returns The asset prices by assetId\n */\nexport const fetchAssetPrices = async (\n request: {\n currencies: Set<string>;\n } & Omit<Parameters<typeof fetchAssetPricesForCurrency>[0], 'currency'>,\n): Promise<\n Record<CaipAssetType, { [currency: string]: string } | undefined>\n> => {\n const { currencies, ...args } = request;\n\n const combinedPrices = await Promise.allSettled(\n Array.from(currencies).map(\n async (currency) =>\n await fetchAssetPricesForCurrency({ ...args, currency }),\n ),\n ).then((priceApiResponse) => {\n return priceApiResponse.reduce<\n Record<CaipAssetType, { [currency: string]: string }>\n >((acc, result) => {\n if (result.status === 'fulfilled') {\n Object.entries(result.value).forEach(([assetId, currencyToPrice]) => {\n const existingPrices = acc[assetId as CaipAssetType];\n if (!existingPrices) {\n acc[assetId as CaipAssetType] = {};\n }\n Object.entries(currencyToPrice).forEach(([currency, price]) => {\n acc[assetId as CaipAssetType][currency] = price;\n });\n });\n }\n return acc;\n }, {});\n });\n\n return combinedPrices;\n};\n\nconst getQuoteRequestId = ({\n srcChainId,\n destChainId,\n srcTokenAddress,\n destTokenAddress,\n}: QuoteRequest): string =>\n `${formatAddressToAssetId(srcTokenAddress, srcChainId)}-${formatAddressToAssetId(destTokenAddress, destChainId)}`.toLowerCase();\n\nconst getQuoteResponseId = ({\n src: { asset: srcAsset },\n dest: { asset: destAsset },\n}: QuoteResponse['quote']): string =>\n `${srcAsset.assetId}-${destAsset.assetId}`.toLowerCase();\n\n/**\n * Fetches quotes from the bridge-api\n *\n * @param fetchFn - The fetch function to use\n * @param quoteRequests - An array of GenericQuoteRequest objects\n * @param signal - The abort signal\n * @param featureId - The {@link FeatureId} for the experience that's requesting the quotes\n * @param clientId - The client ID for metrics\n * @param jwt - The JWT token for authentication\n * @param bridgeApiBaseUrl - The base URL for the bridge API\n * @param serverEventHandlers - The server event handlers\n * @param serverEventHandlers.onQuoteValidationFailure - The function to handle quote validation failures\n * @param serverEventHandlers.onValidQuoteReceived - The function to handle valid quotes\n * @param serverEventHandlers.onTokenWarning - The function to handle token warning events\n * @param serverEventHandlers.onComplete - The function to handle the complete event emitted when the stream finishes\n * @param serverEventHandlers.onClose - The function to run when the stream is closed and there are no thrown errors\n * @param clientVersion - The client version for metrics (optional)\n * @returns A list of bridge tx quote promises\n */\nexport async function fetchBridgeQuoteStream(\n fetchFn: FetchFunction,\n quoteRequests: GenericQuoteRequest[],\n signal: AbortSignal | undefined,\n featureId: FeatureId,\n clientId: string,\n jwt: string | undefined,\n bridgeApiBaseUrl: string,\n serverEventHandlers: {\n onClose: () => void | Promise<void>;\n onQuoteValidationFailure: (validationFailures: string[]) => void;\n onValidQuoteReceived: (\n quotes: QuoteResponse & { resetApproval?: TxData },\n ) => Promise<void>;\n onTokenWarning: (warning: TokenFeature) => void;\n onComplete: (data: QuoteStreamCompleteData) => void;\n },\n clientVersion?: string,\n): Promise<void> {\n /**\n * If the request includes multiple quote requests, it is a batch sell request.\n * A batch sell consists of multiple swaps that are executed in a single tx submission.\n */\n const isBatchSellRequest = quoteRequests.length > 1;\n const normalizedQuoteRequests = quoteRequests.map(formatQuoteRequest);\n const quoteRequestIds = isBatchSellRequest\n ? normalizedQuoteRequests.map(getQuoteRequestId)\n : undefined;\n\n const onQuoteReceived = async (\n quoteResponseV1OrV2: unknown,\n ): Promise<void> => {\n const uniqueValidationFailures: Set<string> = new Set<string>([]);\n\n try {\n const quoteResponse = toQuoteResponseV2(quoteResponseV1OrV2);\n // Fallback to 0 if the quote doesn't match any requests\n const matchedQuoteRequestIdx = Math.max(\n quoteRequestIds?.findIndex((id) => {\n return id === getQuoteResponseId(quoteResponse.quote);\n }) ?? 0,\n 0,\n );\n const matchingQuoteRequest =\n normalizedQuoteRequests[matchedQuoteRequestIdx];\n\n return await serverEventHandlers.onValidQuoteReceived({\n ...quoteResponse,\n featureId,\n // Append the reset approval data to the quote response if the request has resetApproval set to true and the quote has an approval\n resetApproval:\n quoteResponse.namespace === KnownCaipNamespace.Eip155 &&\n matchingQuoteRequest.resetApproval &&\n quoteResponse.approval\n ? {\n ...quoteResponse.approval,\n data: getEthUsdtResetData(matchingQuoteRequest.destChainId),\n }\n : undefined,\n ...(isBatchSellRequest && {\n quoteRequestIndex: matchedQuoteRequestIdx,\n }),\n });\n } catch (error) {\n if (error instanceof StructError) {\n console.warn('Quote validation failed', formatStructErrors(error));\n error.failures().forEach(({ branch, path }) => {\n const aggregatorId =\n branch?.[0]?.quote?.aggregator ??\n branch?.[0]?.quote?.protocols?.[0] ??\n (quoteResponseV1OrV2 as QuoteResponseV1)?.quote?.protocols?.[0] ??\n (quoteResponseV1OrV2 as QuoteResponseV1)?.quote?.bridgeId ??\n (quoteResponseV1OrV2 as QuoteResponseV1)?.quote?.bridges?.[0] ??\n (quoteResponseV1OrV2 as QuoteResponse)?.quote?.aggregator ??\n 'unknown';\n const pathString = path?.join('.') || 'unknown';\n uniqueValidationFailures.add([aggregatorId, pathString].join('|'));\n });\n }\n const validationFailures = Array.from(uniqueValidationFailures);\n if (uniqueValidationFailures.size > 0) {\n return serverEventHandlers.onQuoteValidationFailure(validationFailures);\n }\n // Rethrow any unexpected errors\n throw error;\n }\n };\n\n const onTokenWarningReceived = (data: unknown): void => {\n try {\n if (validateTokenFeature(data)) {\n serverEventHandlers.onTokenWarning(data);\n }\n } catch (error) {\n console.warn('Token warning validation failed', error);\n }\n };\n\n const onCompleteReceived = (data: unknown): void => {\n try {\n if (validateQuoteStreamComplete(data)) {\n serverEventHandlers.onComplete(data);\n }\n } catch (error) {\n console.warn('Quote stream complete validation failed', error);\n }\n };\n\n const onMessage = async (\n data: Record<string, unknown>,\n eventName?: string,\n ): Promise<void> => {\n switch (eventName) {\n case 'quote':\n return await onQuoteReceived(data);\n case 'token_warning':\n return onTokenWarningReceived(data);\n case 'complete':\n return onCompleteReceived(data);\n default:\n return undefined;\n }\n };\n\n const sharedFetchOptions = {\n signal,\n onMessage,\n onError: (error: unknown) => {\n // Rethrow error to prevent silent fetch failures\n throw error;\n },\n onClose: async () => {\n await serverEventHandlers.onClose();\n },\n fetchFn,\n };\n\n if (isBatchSellRequest) {\n const urlStream = `${bridgeApiBaseUrl}/getBatchQuoteStream`;\n await fetchServerEvents(urlStream, {\n method: 'POST',\n body: JSON.stringify({ requests: normalizedQuoteRequests }),\n headers: {\n ...getClientHeaders({ clientId, clientVersion, jwt }),\n 'Content-Type': 'application/json',\n },\n ...sharedFetchOptions,\n });\n return;\n }\n\n const queryParams = formatQueryParams(normalizedQuoteRequests[0]);\n const urlStream = `${bridgeApiBaseUrl}/getQuoteStream?${queryParams}`;\n await fetchServerEvents(urlStream, {\n headers: {\n ...getClientHeaders({ clientId, clientVersion, jwt }),\n 'Content-Type': 'text/event-stream',\n },\n ...sharedFetchOptions,\n });\n}\n\nexport const formatBatchSellTradesRequest = (\n quotes: (QuoteResponse | (QuoteResponseV1 & QuoteMetadata) | null)[],\n stxEnabled: boolean,\n): BatchSellTradesRequest => ({\n quotes: quotes\n .filter(\n (quote): quote is QuoteResponse | (QuoteResponseV1 & QuoteMetadata) =>\n quote !== null && Boolean(quote),\n )\n .map(toQuoteResponseV1),\n stxEnabled,\n});\n\n/**\n * Fetches quotes from the bridge-api's getQuote endpoint\n *\n * @param quotes - The quotes to fetch the gasless transaction data and fees for. May contain null values if a quote is not available for a swap\n * @param stxEnabled - Flag to estimate gas cost more precisely for the batch sell feature.\n * @param signal - The abort signal\n * @param clientId - The client ID for metrics\n * @param jwt - The JWT token for authentication\n * @param fetchFn - The fetch function to use\n * @param bridgeApiBaseUrl - The base URL for the bridge API\n * @param clientVersion - The client version for metrics (optional)\n * @returns The batch sell trades and the total network fee\n */\nexport async function fetchBatchSellTrades(\n quotes: (QuoteResponse | null)[],\n stxEnabled: boolean,\n signal: AbortSignal | null,\n clientId: string,\n jwt: string | undefined,\n fetchFn: FetchFunction,\n bridgeApiBaseUrl: string,\n clientVersion?: string,\n): Promise<BatchSellTradesResponse> {\n const url = `${bridgeApiBaseUrl}/obtainGaslessBatch`;\n const request: BatchSellTradesRequest = formatBatchSellTradesRequest(\n quotes,\n stxEnabled,\n );\n const batchSellTradesResponse = await fetchFn(url, {\n headers: {\n ...getClientHeaders({\n clientId,\n clientVersion,\n jwt,\n }),\n 'Content-Type': 'application/json',\n },\n signal,\n method: 'POST',\n body: JSON.stringify(request),\n });\n\n if (!batchSellTradesResponse.ok) {\n throw new Error(\n `Failed to fetch batch sell trades. ${batchSellTradesResponse.statusText}`,\n );\n }\n\n try {\n const data = await batchSellTradesResponse.json();\n validateBatchSellTradesResponse(data);\n return data;\n } catch (error: unknown) {\n // TODO validation failure event\n throw new Error(`Invalid batch simulation response. ${error?.toString()}`);\n }\n}\n"]}
1
+ {"version":3,"file":"fetch.cjs","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport { StructError } from '@metamask/superstruct';\nimport type { CaipAssetType, CaipChainId, Hex } from '@metamask/utils';\n\nimport type {\n FetchFunction,\n GenericQuoteRequest,\n QuoteRequest,\n BridgeAsset,\n TokenFeature,\n QuoteStreamCompleteData,\n BatchSellTradesRequest,\n BatchSellTradesResponse,\n} from '../types';\nimport { validateBatchSellTradesResponse } from '../validators/batch-sell';\nimport { validateBridgeAsset } from '../validators/bridge-asset';\nimport type { FeatureId } from '../validators/feature-flags';\nimport type { QuoteResponseV1 } from '../validators/quote-response-v1';\nimport { validateQuoteResponseV1 } from '../validators/quote-response-v1';\nimport { validateQuoteStreamComplete } from '../validators/quote-stream-complete';\nimport { validateTokenFeature } from '../validators/token-feature';\nimport { isEvmTxData } from '../validators/trade';\nimport { getEthUsdtResetData } from './bridge';\nimport {\n formatAddressToAssetId,\n formatAddressToCaipReference,\n formatChainIdToDec,\n} from './caip-formatters';\nimport { fetchServerEvents } from './fetch-server-events';\nimport { formatStructErrors } from './struct-error';\n\nexport const getClientHeaders = ({\n clientId,\n clientVersion,\n jwt,\n}: {\n clientId: string;\n clientVersion?: string;\n jwt?: string;\n}) => ({\n 'X-Client-Id': clientId,\n ...(jwt ? { Authorization: `Bearer ${jwt}` } : {}),\n ...(clientVersion ? { 'Client-Version': clientVersion } : {}),\n});\n\n/**\n * Returns a list of enabled (unblocked) tokens\n *\n * @deprecated Use the popular and search bridge-api endpoints instead\n *\n * @param chainId - The chain ID to fetch tokens for\n * @param clientId - The client ID for metrics\n * @param jwt - The JWT token for authentication\n * @param fetchFn - The fetch function to use\n * @param bridgeApiBaseUrl - The base URL for the bridge API\n * @param clientVersion - The client version for metrics (optional)\n * @returns A list of enabled (unblocked) tokens\n */\nexport async function fetchBridgeTokens(\n chainId: Hex | CaipChainId,\n clientId: string,\n jwt: string | undefined,\n fetchFn: FetchFunction,\n bridgeApiBaseUrl: string,\n clientVersion?: string,\n): Promise<Record<string, BridgeAsset>> {\n const url = `${bridgeApiBaseUrl}/getTokens?chainId=${formatChainIdToDec(chainId)}`;\n\n // TODO we will need to cache these. In Extension fetchWithCache is used. This is due to the following:\n // If we allow selecting dest networks which the user has not imported,\n // note that the Assets controller won't be able to provide tokens. In extension we fetch+cache the token list from bridge-api to handle this\n const tokens = await fetchFn(url, {\n headers: getClientHeaders({ clientId, clientVersion, jwt }),\n });\n\n const transformedTokens: Record<string, BridgeAsset> = {};\n tokens.forEach((token: unknown) => {\n if (validateBridgeAsset(token)) {\n transformedTokens[token.address] = token;\n }\n });\n return transformedTokens;\n}\n\n/**\n * Converts the generic quote request to QuoteRequest\n *\n * @param request - The quote request\n * @returns A QuoteRequest object\n */\nconst formatQuoteRequest = (request: GenericQuoteRequest): QuoteRequest => {\n const destWalletAddress = request.destWalletAddress ?? request.walletAddress;\n // Transform the generic quote request into QuoteRequest\n const normalizedRequest: QuoteRequest = {\n walletAddress: formatAddressToCaipReference(request.walletAddress),\n destWalletAddress: formatAddressToCaipReference(destWalletAddress),\n srcChainId: formatChainIdToDec(request.srcChainId),\n destChainId: formatChainIdToDec(request.destChainId),\n srcTokenAddress: formatAddressToCaipReference(request.srcTokenAddress),\n destTokenAddress: formatAddressToCaipReference(request.destTokenAddress),\n srcTokenAmount: request.srcTokenAmount,\n insufficientBal: Boolean(request.insufficientBal),\n resetApproval: Boolean(request.resetApproval),\n gasIncluded: Boolean(request.gasIncluded),\n gasIncluded7702: Boolean(request.gasIncluded7702),\n };\n if (request.slippage !== undefined) {\n normalizedRequest.slippage = request.slippage;\n }\n if (request.fee !== undefined) {\n normalizedRequest.fee = request.fee;\n }\n if (request.aggIds && request.aggIds.length > 0) {\n normalizedRequest.aggIds = request.aggIds;\n }\n if (request.bridgeIds && request.bridgeIds.length > 0) {\n normalizedRequest.bridgeIds = request.bridgeIds;\n }\n\n return normalizedRequest;\n};\n\n/**\n * Converts the generic quote request to the type that the bridge-api expects\n *\n * @param normalizedRequest - The normalized quote request\n * @returns A URLSearchParams object with the query parameters\n */\nconst formatQueryParams = (\n normalizedRequest: QuoteRequest,\n): URLSearchParams => {\n const queryParams = new URLSearchParams();\n Object.entries(normalizedRequest).forEach(([key, value]) => {\n queryParams.append(key, value.toString());\n });\n return queryParams;\n};\n\n/**\n * Fetches quotes from the bridge-api's getQuote endpoint\n *\n * @param request - The quote request\n * @param signal - The abort signal\n * @param clientId - The client ID for metrics\n * @param jwt - The JWT token for authentication\n * @param fetchFn - The fetch function to use\n * @param bridgeApiBaseUrl - The base URL for the bridge API\n * @param featureId - The feature ID to append to each quote\n * @param clientVersion - The client version for metrics (optional)\n * @returns A list of bridge tx quotes\n */\nexport async function fetchBridgeQuotes(\n request: GenericQuoteRequest,\n signal: AbortSignal | null,\n clientId: string,\n jwt: string | undefined,\n fetchFn: FetchFunction,\n bridgeApiBaseUrl: string,\n featureId: FeatureId | null,\n clientVersion?: string,\n): Promise<{\n quotes: QuoteResponseV1[];\n validationFailures: string[];\n}> {\n const normalizedRequest = formatQuoteRequest(request);\n const queryParams = formatQueryParams(normalizedRequest);\n\n const url = `${bridgeApiBaseUrl}/getQuote?${queryParams}`;\n const quotes: unknown[] = await fetchFn(url, {\n headers: getClientHeaders({ clientId, clientVersion, jwt }),\n signal,\n });\n\n const uniqueValidationFailures: Set<string> = new Set<string>([]);\n const filteredQuotes = quotes\n .filter((quoteResponse: unknown): quoteResponse is QuoteResponseV1 => {\n try {\n return validateQuoteResponseV1(quoteResponse);\n } catch (error) {\n if (error instanceof StructError) {\n error.failures().forEach(({ branch, path }) => {\n const aggregatorId =\n branch?.[0]?.quote?.bridgeId ??\n branch?.[0]?.quote?.bridges?.[0] ??\n (quoteResponse as QuoteResponseV1)?.quote?.bridgeId ??\n (quoteResponse as QuoteResponseV1)?.quote?.bridges?.[0] ??\n 'unknown';\n const pathString = path?.join('.') || 'unknown';\n uniqueValidationFailures.add([aggregatorId, pathString].join('|'));\n });\n }\n return false;\n }\n })\n .map((quote) => ({\n ...quote,\n featureId: featureId ?? undefined,\n // Append the reset approval data to the quote response if the request\n // has resetApproval set to true and the quote has an approval\n resetApproval:\n request.resetApproval && quote.approval && isEvmTxData(quote.approval)\n ? {\n ...quote.approval,\n data: getEthUsdtResetData(request.destChainId),\n }\n : undefined,\n }));\n\n const validationFailures = Array.from(uniqueValidationFailures);\n if (uniqueValidationFailures.size > 0) {\n console.warn('Quote validation failed', validationFailures);\n }\n\n return {\n quotes: filteredQuotes,\n validationFailures,\n };\n}\n\nconst fetchAssetPricesForCurrency = async (request: {\n currency: string;\n assetIds: Set<CaipAssetType>;\n clientId: string;\n clientVersion?: string;\n fetchFn: FetchFunction;\n signal?: AbortSignal;\n}): Promise<Record<CaipAssetType, { [currency: string]: string }>> => {\n const { currency, assetIds, clientId, clientVersion, fetchFn, signal } =\n request;\n const validAssetIds = Array.from(assetIds).filter(Boolean);\n if (validAssetIds.length === 0) {\n return {};\n }\n\n const queryParams = new URLSearchParams({\n assetIds: validAssetIds.filter(Boolean).join(','),\n vsCurrency: currency,\n });\n const url = `https://price.api.cx.metamask.io/v3/spot-prices?${queryParams}`;\n const priceApiResponse = (await fetchFn(url, {\n headers: getClientHeaders({ clientId, clientVersion }),\n signal,\n })) as unknown as Record<CaipAssetType, { [currency: string]: number }>;\n if (!priceApiResponse || typeof priceApiResponse !== 'object') {\n return {};\n }\n\n return Object.entries(priceApiResponse).reduce<\n Record<CaipAssetType, { [currency: string]: string }>\n >((acc, [assetId, currencyToPrice]) => {\n if (!currencyToPrice) {\n return acc;\n }\n if (!acc[assetId as CaipAssetType]) {\n acc[assetId as CaipAssetType] = {};\n }\n if (currencyToPrice[currency]) {\n acc[assetId as CaipAssetType][currency] =\n currencyToPrice[currency].toString();\n }\n return acc;\n }, {});\n};\n\n/**\n * Fetches the asset prices from the price API for multiple currencies\n *\n * @param request - The request object\n * @returns The asset prices by assetId\n */\nexport const fetchAssetPrices = async (\n request: {\n currencies: Set<string>;\n } & Omit<Parameters<typeof fetchAssetPricesForCurrency>[0], 'currency'>,\n): Promise<\n Record<CaipAssetType, { [currency: string]: string } | undefined>\n> => {\n const { currencies, ...args } = request;\n\n const combinedPrices = await Promise.allSettled(\n Array.from(currencies).map(\n async (currency) =>\n await fetchAssetPricesForCurrency({ ...args, currency }),\n ),\n ).then((priceApiResponse) => {\n return priceApiResponse.reduce<\n Record<CaipAssetType, { [currency: string]: string }>\n >((acc, result) => {\n if (result.status === 'fulfilled') {\n Object.entries(result.value).forEach(([assetId, currencyToPrice]) => {\n const existingPrices = acc[assetId as CaipAssetType];\n if (!existingPrices) {\n acc[assetId as CaipAssetType] = {};\n }\n Object.entries(currencyToPrice).forEach(([currency, price]) => {\n acc[assetId as CaipAssetType][currency] = price;\n });\n });\n }\n return acc;\n }, {});\n });\n\n return combinedPrices;\n};\n\nconst getQuoteRequestId = ({\n srcChainId,\n destChainId,\n srcTokenAddress,\n destTokenAddress,\n}: QuoteRequest): string =>\n `${formatAddressToAssetId(srcTokenAddress, srcChainId)}-${formatAddressToAssetId(destTokenAddress, destChainId)}`;\n\nconst getQuoteResponseId = ({\n srcAsset: { address: srcTokenAddress, chainId: srcChainId },\n destAsset: { address: destTokenAddress, chainId: destChainId },\n}: QuoteResponseV1['quote']): string =>\n `${formatAddressToAssetId(srcTokenAddress, srcChainId)}-${formatAddressToAssetId(destTokenAddress, destChainId)}`;\n\n/**\n * Fetches quotes from the bridge-api\n *\n * @param fetchFn - The fetch function to use\n * @param quoteRequests - An array of GenericQuoteRequest objects\n * @param signal - The abort signal\n * @param featureId - The {@link FeatureId} for the experience that's requesting the quotes\n * @param clientId - The client ID for metrics\n * @param jwt - The JWT token for authentication\n * @param bridgeApiBaseUrl - The base URL for the bridge API\n * @param serverEventHandlers - The server event handlers\n * @param serverEventHandlers.onQuoteValidationFailure - The function to handle quote validation failures\n * @param serverEventHandlers.onValidQuoteReceived - The function to handle valid quotes\n * @param serverEventHandlers.onTokenWarning - The function to handle token warning events\n * @param serverEventHandlers.onComplete - The function to handle the complete event emitted when the stream finishes\n * @param serverEventHandlers.onClose - The function to run when the stream is closed and there are no thrown errors\n * @param clientVersion - The client version for metrics (optional)\n * @returns A list of bridge tx quote promises\n */\nexport async function fetchBridgeQuoteStream(\n fetchFn: FetchFunction,\n quoteRequests: GenericQuoteRequest[],\n signal: AbortSignal | undefined,\n featureId: FeatureId,\n clientId: string,\n jwt: string | undefined,\n bridgeApiBaseUrl: string,\n serverEventHandlers: {\n onClose: () => void | Promise<void>;\n onQuoteValidationFailure: (validationFailures: string[]) => void;\n onValidQuoteReceived: (quotes: QuoteResponseV1) => Promise<void>;\n onTokenWarning: (warning: TokenFeature) => void;\n onComplete: (data: QuoteStreamCompleteData) => void;\n },\n clientVersion?: string,\n): Promise<void> {\n /**\n * If the request includes multiple quote requests, it is a batch sell request.\n * A batch sell consists of multiple swaps that are executed in a single tx submission.\n */\n const isBatchSellRequest = quoteRequests.length > 1;\n const normalizedQuoteRequests = quoteRequests.map(formatQuoteRequest);\n const quoteRequestIds = isBatchSellRequest\n ? normalizedQuoteRequests.map(getQuoteRequestId)\n : undefined;\n\n const onQuoteReceived = async (quoteResponse: unknown): Promise<void> => {\n const uniqueValidationFailures: Set<string> = new Set<string>([]);\n\n try {\n if (validateQuoteResponseV1(quoteResponse)) {\n // Fallback to 0 if the quote doesn't match any requests\n const matchedQuoteRequestIdx = Math.max(\n quoteRequestIds?.findIndex((id) => {\n return id === getQuoteResponseId(quoteResponse.quote);\n }) ?? 0,\n 0,\n );\n const matchingQuoteRequest =\n normalizedQuoteRequests[matchedQuoteRequestIdx];\n\n return await serverEventHandlers.onValidQuoteReceived({\n ...quoteResponse,\n featureId,\n // Append the reset approval data to the quote response if the request has resetApproval set to true and the quote has an approval\n resetApproval:\n matchingQuoteRequest.resetApproval &&\n quoteResponse.approval &&\n isEvmTxData(quoteResponse.approval)\n ? {\n ...quoteResponse.approval,\n data: getEthUsdtResetData(matchingQuoteRequest.destChainId),\n }\n : undefined,\n ...(isBatchSellRequest && {\n quoteRequestIndex: matchedQuoteRequestIdx,\n }),\n });\n }\n } catch (error) {\n if (error instanceof StructError) {\n console.warn('Quote validation failed', formatStructErrors(error));\n error.failures().forEach(({ branch, path }) => {\n const aggregatorId =\n branch?.[0]?.quote?.bridgeId ??\n branch?.[0]?.quote?.bridges?.[0] ??\n (quoteResponse as QuoteResponseV1)?.quote?.bridgeId ??\n ((quoteResponse as QuoteResponseV1)?.quote?.bridges?.[0] ||\n ('unknown' as string));\n const pathString = path?.join('.') || 'unknown';\n uniqueValidationFailures.add([aggregatorId, pathString].join('|'));\n });\n }\n const validationFailures = Array.from(uniqueValidationFailures);\n if (uniqueValidationFailures.size > 0) {\n return serverEventHandlers.onQuoteValidationFailure(validationFailures);\n }\n // Rethrow any unexpected errors\n throw error;\n }\n return undefined;\n };\n\n const onTokenWarningReceived = (data: unknown): void => {\n try {\n if (validateTokenFeature(data)) {\n serverEventHandlers.onTokenWarning(data);\n }\n } catch (error) {\n console.warn('Token warning validation failed', error);\n }\n };\n\n const onCompleteReceived = (data: unknown): void => {\n try {\n if (validateQuoteStreamComplete(data)) {\n serverEventHandlers.onComplete(data);\n }\n } catch (error) {\n console.warn('Quote stream complete validation failed', error);\n }\n };\n\n const onMessage = async (\n data: Record<string, unknown>,\n eventName?: string,\n ): Promise<void> => {\n switch (eventName) {\n case 'quote':\n return await onQuoteReceived(data);\n case 'token_warning':\n return onTokenWarningReceived(data);\n case 'complete':\n return onCompleteReceived(data);\n default:\n return undefined;\n }\n };\n\n const sharedFetchOptions = {\n signal,\n onMessage,\n onError: (error: unknown) => {\n // Rethrow error to prevent silent fetch failures\n throw error;\n },\n onClose: async () => {\n await serverEventHandlers.onClose();\n },\n fetchFn,\n };\n\n if (isBatchSellRequest) {\n const urlStream = `${bridgeApiBaseUrl}/getBatchQuoteStream`;\n await fetchServerEvents(urlStream, {\n method: 'POST',\n body: JSON.stringify({ requests: normalizedQuoteRequests }),\n headers: {\n ...getClientHeaders({ clientId, clientVersion, jwt }),\n 'Content-Type': 'application/json',\n },\n ...sharedFetchOptions,\n });\n return;\n }\n\n const queryParams = formatQueryParams(normalizedQuoteRequests[0]);\n const urlStream = `${bridgeApiBaseUrl}/getQuoteStream?${queryParams}`;\n await fetchServerEvents(urlStream, {\n headers: {\n ...getClientHeaders({ clientId, clientVersion, jwt }),\n 'Content-Type': 'text/event-stream',\n },\n ...sharedFetchOptions,\n });\n}\n\nexport const formatBatchSellTradesRequest = (\n quotes: (QuoteResponseV1 | null)[],\n stxEnabled: boolean,\n): BatchSellTradesRequest => ({\n quotes: quotes\n .filter((quote): quote is QuoteResponseV1 => quote !== null)\n .map(\n ({\n trade,\n approval,\n quote,\n estimatedProcessingTimeInSeconds,\n quoteId,\n }) => ({\n trade,\n approval,\n quote,\n estimatedProcessingTimeInSeconds,\n quoteId,\n }),\n ),\n stxEnabled,\n});\n\n/**\n * Fetches quotes from the bridge-api's getQuote endpoint\n *\n * @param quotes - The quotes to fetch the gasless transaction data and fees for. May contain null values if a quote is not available for a swap\n * @param stxEnabled - Flag to estimate gas cost more precisely for the batch sell feature.\n * @param signal - The abort signal\n * @param clientId - The client ID for metrics\n * @param jwt - The JWT token for authentication\n * @param fetchFn - The fetch function to use\n * @param bridgeApiBaseUrl - The base URL for the bridge API\n * @param clientVersion - The client version for metrics (optional)\n * @returns The batch sell trades and the total network fee\n */\nexport async function fetchBatchSellTrades(\n quotes: (QuoteResponseV1 | null)[],\n stxEnabled: boolean,\n signal: AbortSignal | null,\n clientId: string,\n jwt: string | undefined,\n fetchFn: FetchFunction,\n bridgeApiBaseUrl: string,\n clientVersion?: string,\n): Promise<BatchSellTradesResponse> {\n const url = `${bridgeApiBaseUrl}/obtainGaslessBatch`;\n const request: BatchSellTradesRequest = formatBatchSellTradesRequest(\n quotes,\n stxEnabled,\n );\n const batchSellTradesResponse = await fetchFn(url, {\n headers: {\n ...getClientHeaders({\n clientId,\n clientVersion,\n jwt,\n }),\n 'Content-Type': 'application/json',\n },\n signal,\n method: 'POST',\n body: JSON.stringify(request),\n });\n\n if (!batchSellTradesResponse.ok) {\n throw new Error(\n `Failed to fetch batch sell trades. ${batchSellTradesResponse.statusText}`,\n );\n }\n\n try {\n const data = await batchSellTradesResponse.json();\n validateBatchSellTradesResponse(data);\n return data;\n } catch (error: unknown) {\n // TODO validation failure event\n throw new Error(`Invalid batch simulation response. ${error?.toString()}`);\n }\n}\n"]}
@@ -1,11 +1,7 @@
1
1
  import type { CaipAssetType, CaipChainId, Hex } from "@metamask/utils";
2
- import type { FetchFunction, GenericQuoteRequest, TokenFeature, QuoteStreamCompleteData, BatchSellTradesRequest, BatchSellTradesResponse } from "../types.cjs";
3
- import type { BridgeAsset } from "../validators/bridge-asset.cjs";
2
+ import type { FetchFunction, GenericQuoteRequest, BridgeAsset, TokenFeature, QuoteStreamCompleteData, BatchSellTradesRequest, BatchSellTradesResponse } from "../types.cjs";
4
3
  import type { FeatureId } from "../validators/feature-flags.cjs";
5
- import type { QuoteResponse } from "../validators/quote-response.cjs";
6
4
  import type { QuoteResponseV1 } from "../validators/quote-response-v1.cjs";
7
- import type { TxData } from "../validators/trade.cjs";
8
- import type { QuoteMetadata } from "./quote-metadata/types.cjs";
9
5
  export declare const getClientHeaders: ({ clientId, clientVersion, jwt, }: {
10
6
  clientId: string;
11
7
  clientVersion?: string | undefined;
@@ -89,13 +85,11 @@ export declare const fetchAssetPrices: (request: {
89
85
  export declare function fetchBridgeQuoteStream(fetchFn: FetchFunction, quoteRequests: GenericQuoteRequest[], signal: AbortSignal | undefined, featureId: FeatureId, clientId: string, jwt: string | undefined, bridgeApiBaseUrl: string, serverEventHandlers: {
90
86
  onClose: () => void | Promise<void>;
91
87
  onQuoteValidationFailure: (validationFailures: string[]) => void;
92
- onValidQuoteReceived: (quotes: QuoteResponse & {
93
- resetApproval?: TxData;
94
- }) => Promise<void>;
88
+ onValidQuoteReceived: (quotes: QuoteResponseV1) => Promise<void>;
95
89
  onTokenWarning: (warning: TokenFeature) => void;
96
90
  onComplete: (data: QuoteStreamCompleteData) => void;
97
91
  }, clientVersion?: string): Promise<void>;
98
- export declare const formatBatchSellTradesRequest: (quotes: (QuoteResponse | (QuoteResponseV1 & QuoteMetadata) | null)[], stxEnabled: boolean) => BatchSellTradesRequest;
92
+ export declare const formatBatchSellTradesRequest: (quotes: (QuoteResponseV1 | null)[], stxEnabled: boolean) => BatchSellTradesRequest;
99
93
  /**
100
94
  * Fetches quotes from the bridge-api's getQuote endpoint
101
95
  *
@@ -109,6 +103,6 @@ export declare const formatBatchSellTradesRequest: (quotes: (QuoteResponse | (Qu
109
103
  * @param clientVersion - The client version for metrics (optional)
110
104
  * @returns The batch sell trades and the total network fee
111
105
  */
112
- export declare function fetchBatchSellTrades(quotes: (QuoteResponse | null)[], stxEnabled: boolean, signal: AbortSignal | null, clientId: string, jwt: string | undefined, fetchFn: FetchFunction, bridgeApiBaseUrl: string, clientVersion?: string): Promise<BatchSellTradesResponse>;
106
+ export declare function fetchBatchSellTrades(quotes: (QuoteResponseV1 | null)[], stxEnabled: boolean, signal: AbortSignal | null, clientId: string, jwt: string | undefined, fetchFn: FetchFunction, bridgeApiBaseUrl: string, clientVersion?: string): Promise<BatchSellTradesResponse>;
113
107
  export {};
114
108
  //# sourceMappingURL=fetch.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.d.cts","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetch.d.cts","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,7 @@
1
1
  import type { CaipAssetType, CaipChainId, Hex } from "@metamask/utils";
2
- import type { FetchFunction, GenericQuoteRequest, TokenFeature, QuoteStreamCompleteData, BatchSellTradesRequest, BatchSellTradesResponse } from "../types.mjs";
3
- import type { BridgeAsset } from "../validators/bridge-asset.mjs";
2
+ import type { FetchFunction, GenericQuoteRequest, BridgeAsset, TokenFeature, QuoteStreamCompleteData, BatchSellTradesRequest, BatchSellTradesResponse } from "../types.mjs";
4
3
  import type { FeatureId } from "../validators/feature-flags.mjs";
5
- import type { QuoteResponse } from "../validators/quote-response.mjs";
6
4
  import type { QuoteResponseV1 } from "../validators/quote-response-v1.mjs";
7
- import type { TxData } from "../validators/trade.mjs";
8
- import type { QuoteMetadata } from "./quote-metadata/types.mjs";
9
5
  export declare const getClientHeaders: ({ clientId, clientVersion, jwt, }: {
10
6
  clientId: string;
11
7
  clientVersion?: string | undefined;
@@ -89,13 +85,11 @@ export declare const fetchAssetPrices: (request: {
89
85
  export declare function fetchBridgeQuoteStream(fetchFn: FetchFunction, quoteRequests: GenericQuoteRequest[], signal: AbortSignal | undefined, featureId: FeatureId, clientId: string, jwt: string | undefined, bridgeApiBaseUrl: string, serverEventHandlers: {
90
86
  onClose: () => void | Promise<void>;
91
87
  onQuoteValidationFailure: (validationFailures: string[]) => void;
92
- onValidQuoteReceived: (quotes: QuoteResponse & {
93
- resetApproval?: TxData;
94
- }) => Promise<void>;
88
+ onValidQuoteReceived: (quotes: QuoteResponseV1) => Promise<void>;
95
89
  onTokenWarning: (warning: TokenFeature) => void;
96
90
  onComplete: (data: QuoteStreamCompleteData) => void;
97
91
  }, clientVersion?: string): Promise<void>;
98
- export declare const formatBatchSellTradesRequest: (quotes: (QuoteResponse | (QuoteResponseV1 & QuoteMetadata) | null)[], stxEnabled: boolean) => BatchSellTradesRequest;
92
+ export declare const formatBatchSellTradesRequest: (quotes: (QuoteResponseV1 | null)[], stxEnabled: boolean) => BatchSellTradesRequest;
99
93
  /**
100
94
  * Fetches quotes from the bridge-api's getQuote endpoint
101
95
  *
@@ -109,6 +103,6 @@ export declare const formatBatchSellTradesRequest: (quotes: (QuoteResponse | (Qu
109
103
  * @param clientVersion - The client version for metrics (optional)
110
104
  * @returns The batch sell trades and the total network fee
111
105
  */
112
- export declare function fetchBatchSellTrades(quotes: (QuoteResponse | null)[], stxEnabled: boolean, signal: AbortSignal | null, clientId: string, jwt: string | undefined, fetchFn: FetchFunction, bridgeApiBaseUrl: string, clientVersion?: string): Promise<BatchSellTradesResponse>;
106
+ export declare function fetchBatchSellTrades(quotes: (QuoteResponseV1 | null)[], stxEnabled: boolean, signal: AbortSignal | null, clientId: string, jwt: string | undefined, fetchFn: FetchFunction, bridgeApiBaseUrl: string, clientVersion?: string): Promise<BatchSellTradesResponse>;
113
107
  export {};
114
108
  //# sourceMappingURL=fetch.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.d.mts","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetch.d.mts","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,EAAE,wBAAwB;AAEvE,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EAEnB,WAAW,EACX,YAAY,EACZ,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACxB,qBAAiB;AAGlB,OAAO,KAAK,EAAE,SAAS,EAAE,wCAAoC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,4CAAwC;AAcvE,eAAO,MAAM,gBAAgB;cAKjB,MAAM;;;;;;;CAOhB,CAAC;AAEH;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,GAAG,GAAG,WAAW,EAC1B,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,OAAO,EAAE,aAAa,EACtB,gBAAgB,EAAE,MAAM,EACxB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAiBtC;AAwDD;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,mBAAmB,EAC5B,MAAM,EAAE,WAAW,GAAG,IAAI,EAC1B,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,OAAO,EAAE,aAAa,EACtB,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,SAAS,GAAG,IAAI,EAC3B,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC;IACT,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B,CAAC,CAsDD;AAED,QAAA,MAAM,2BAA2B,YAAmB;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,IAAI,aAAa,CAAC,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;;GAoCA,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,YAClB;IACP,UAAU,EAAE,IAAI,MAAM,CAAC,CAAC;CACzB,GAAG,KAAK,WAAW,kCAAkC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC;;eA+BxE,CAAC;AAgBF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,aAAa,EACtB,aAAa,EAAE,mBAAmB,EAAE,EACpC,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,gBAAgB,EAAE,MAAM,EACxB,mBAAmB,EAAE;IACnB,OAAO,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,wBAAwB,EAAE,CAAC,kBAAkB,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACjE,oBAAoB,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,cAAc,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;IAChD,UAAU,EAAE,CAAC,IAAI,EAAE,uBAAuB,KAAK,IAAI,CAAC;CACrD,EACD,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CA4If;AAED,eAAO,MAAM,4BAA4B,WAC/B,CAAC,eAAe,GAAG,IAAI,CAAC,EAAE,cACtB,OAAO,KAClB,sBAmBD,CAAC;AAEH;;;;;;;;;;;;GAYG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,CAAC,eAAe,GAAG,IAAI,CAAC,EAAE,EAClC,UAAU,EAAE,OAAO,EACnB,MAAM,EAAE,WAAW,GAAG,IAAI,EAC1B,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,OAAO,EAAE,aAAa,EACtB,gBAAgB,EAAE,MAAM,EACxB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,uBAAuB,CAAC,CAkClC"}
@@ -1,8 +1,5 @@
1
1
  /* eslint-disable @typescript-eslint/explicit-function-return-type */
2
2
  import { StructError } from "@metamask/superstruct";
3
- import { KnownCaipNamespace } from "@metamask/utils";
4
- import { toQuoteResponseV2 } from "../coercers/quote-response-v1-to-v2.mjs";
5
- import { toQuoteResponseV1 } from "../coercers/quote-response-v2-to-v1.mjs";
6
3
  import { validateBatchSellTradesResponse } from "../validators/batch-sell.mjs";
7
4
  import { validateBridgeAsset } from "../validators/bridge-asset.mjs";
8
5
  import { validateQuoteResponseV1 } from "../validators/quote-response-v1.mjs";
@@ -217,8 +214,8 @@ export const fetchAssetPrices = async (request) => {
217
214
  });
218
215
  return combinedPrices;
219
216
  };
220
- const getQuoteRequestId = ({ srcChainId, destChainId, srcTokenAddress, destTokenAddress, }) => `${formatAddressToAssetId(srcTokenAddress, srcChainId)}-${formatAddressToAssetId(destTokenAddress, destChainId)}`.toLowerCase();
221
- const getQuoteResponseId = ({ src: { asset: srcAsset }, dest: { asset: destAsset }, }) => `${srcAsset.assetId}-${destAsset.assetId}`.toLowerCase();
217
+ const getQuoteRequestId = ({ srcChainId, destChainId, srcTokenAddress, destTokenAddress, }) => `${formatAddressToAssetId(srcTokenAddress, srcChainId)}-${formatAddressToAssetId(destTokenAddress, destChainId)}`;
218
+ const getQuoteResponseId = ({ srcAsset: { address: srcTokenAddress, chainId: srcChainId }, destAsset: { address: destTokenAddress, chainId: destChainId }, }) => `${formatAddressToAssetId(srcTokenAddress, srcChainId)}-${formatAddressToAssetId(destTokenAddress, destChainId)}`;
222
219
  /**
223
220
  * Fetches quotes from the bridge-api
224
221
  *
@@ -248,43 +245,42 @@ export async function fetchBridgeQuoteStream(fetchFn, quoteRequests, signal, fea
248
245
  const quoteRequestIds = isBatchSellRequest
249
246
  ? normalizedQuoteRequests.map(getQuoteRequestId)
250
247
  : undefined;
251
- const onQuoteReceived = async (quoteResponseV1OrV2) => {
248
+ const onQuoteReceived = async (quoteResponse) => {
252
249
  const uniqueValidationFailures = new Set([]);
253
250
  try {
254
- const quoteResponse = toQuoteResponseV2(quoteResponseV1OrV2);
255
- // Fallback to 0 if the quote doesn't match any requests
256
- const matchedQuoteRequestIdx = Math.max(quoteRequestIds?.findIndex((id) => {
257
- return id === getQuoteResponseId(quoteResponse.quote);
258
- }) ?? 0, 0);
259
- const matchingQuoteRequest = normalizedQuoteRequests[matchedQuoteRequestIdx];
260
- return await serverEventHandlers.onValidQuoteReceived({
261
- ...quoteResponse,
262
- featureId,
263
- // Append the reset approval data to the quote response if the request has resetApproval set to true and the quote has an approval
264
- resetApproval: quoteResponse.namespace === KnownCaipNamespace.Eip155 &&
265
- matchingQuoteRequest.resetApproval &&
266
- quoteResponse.approval
267
- ? {
268
- ...quoteResponse.approval,
269
- data: getEthUsdtResetData(matchingQuoteRequest.destChainId),
270
- }
271
- : undefined,
272
- ...(isBatchSellRequest && {
273
- quoteRequestIndex: matchedQuoteRequestIdx,
274
- }),
275
- });
251
+ if (validateQuoteResponseV1(quoteResponse)) {
252
+ // Fallback to 0 if the quote doesn't match any requests
253
+ const matchedQuoteRequestIdx = Math.max(quoteRequestIds?.findIndex((id) => {
254
+ return id === getQuoteResponseId(quoteResponse.quote);
255
+ }) ?? 0, 0);
256
+ const matchingQuoteRequest = normalizedQuoteRequests[matchedQuoteRequestIdx];
257
+ return await serverEventHandlers.onValidQuoteReceived({
258
+ ...quoteResponse,
259
+ featureId,
260
+ // Append the reset approval data to the quote response if the request has resetApproval set to true and the quote has an approval
261
+ resetApproval: matchingQuoteRequest.resetApproval &&
262
+ quoteResponse.approval &&
263
+ isEvmTxData(quoteResponse.approval)
264
+ ? {
265
+ ...quoteResponse.approval,
266
+ data: getEthUsdtResetData(matchingQuoteRequest.destChainId),
267
+ }
268
+ : undefined,
269
+ ...(isBatchSellRequest && {
270
+ quoteRequestIndex: matchedQuoteRequestIdx,
271
+ }),
272
+ });
273
+ }
276
274
  }
277
275
  catch (error) {
278
276
  if (error instanceof StructError) {
279
277
  console.warn('Quote validation failed', formatStructErrors(error));
280
278
  error.failures().forEach(({ branch, path }) => {
281
- const aggregatorId = branch?.[0]?.quote?.aggregator ??
282
- branch?.[0]?.quote?.protocols?.[0] ??
283
- quoteResponseV1OrV2?.quote?.protocols?.[0] ??
284
- quoteResponseV1OrV2?.quote?.bridgeId ??
285
- quoteResponseV1OrV2?.quote?.bridges?.[0] ??
286
- quoteResponseV1OrV2?.quote?.aggregator ??
287
- 'unknown';
279
+ const aggregatorId = branch?.[0]?.quote?.bridgeId ??
280
+ branch?.[0]?.quote?.bridges?.[0] ??
281
+ quoteResponse?.quote?.bridgeId ??
282
+ (quoteResponse?.quote?.bridges?.[0] ||
283
+ 'unknown');
288
284
  const pathString = path?.join('.') || 'unknown';
289
285
  uniqueValidationFailures.add([aggregatorId, pathString].join('|'));
290
286
  });
@@ -296,6 +292,7 @@ export async function fetchBridgeQuoteStream(fetchFn, quoteRequests, signal, fea
296
292
  // Rethrow any unexpected errors
297
293
  throw error;
298
294
  }
295
+ return undefined;
299
296
  };
300
297
  const onTokenWarningReceived = (data) => {
301
298
  try {
@@ -366,8 +363,14 @@ export async function fetchBridgeQuoteStream(fetchFn, quoteRequests, signal, fea
366
363
  }
367
364
  export const formatBatchSellTradesRequest = (quotes, stxEnabled) => ({
368
365
  quotes: quotes
369
- .filter((quote) => quote !== null && Boolean(quote))
370
- .map(toQuoteResponseV1),
366
+ .filter((quote) => quote !== null)
367
+ .map(({ trade, approval, quote, estimatedProcessingTimeInSeconds, quoteId, }) => ({
368
+ trade,
369
+ approval,
370
+ quote,
371
+ estimatedProcessingTimeInSeconds,
372
+ quoteId,
373
+ })),
371
374
  stxEnabled,
372
375
  });
373
376
  /**