@metamask-previews/bridge-controller 80.1.0-preview-3866c0ff1 → 80.1.0-preview-e3275932a

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 (526) hide show
  1. package/CHANGELOG.md +0 -1
  2. package/dist/bridge-controller-method-action-types.cjs +7 -0
  3. package/dist/bridge-controller-method-action-types.cjs.map +1 -0
  4. package/dist/{bridge-controller-method-action-types.d.ts → bridge-controller-method-action-types.d.cts} +2 -2
  5. package/dist/bridge-controller-method-action-types.d.cts.map +1 -0
  6. package/dist/bridge-controller-method-action-types.d.mts +50 -0
  7. package/dist/bridge-controller-method-action-types.d.mts.map +1 -0
  8. package/dist/{bridge-controller-method-action-types.js → bridge-controller-method-action-types.mjs} +1 -1
  9. package/dist/bridge-controller-method-action-types.mjs.map +1 -0
  10. package/dist/bridge-controller.cjs +1044 -0
  11. package/dist/bridge-controller.cjs.map +1 -0
  12. package/dist/{bridge-controller.d.ts → bridge-controller.d.cts} +21 -21
  13. package/dist/bridge-controller.d.cts.map +1 -0
  14. package/dist/bridge-controller.d.mts +127 -0
  15. package/dist/bridge-controller.d.mts.map +1 -0
  16. package/dist/bridge-controller.mjs +1040 -0
  17. package/dist/bridge-controller.mjs.map +1 -0
  18. package/dist/coercers/quote-response-v1-to-v2.cjs +139 -0
  19. package/dist/coercers/quote-response-v1-to-v2.cjs.map +1 -0
  20. package/dist/coercers/{quote-response-v1-to-v2.d.ts → quote-response-v1-to-v2.d.cts} +4 -4
  21. package/dist/coercers/quote-response-v1-to-v2.d.cts.map +1 -0
  22. package/dist/coercers/quote-response-v1-to-v2.d.mts +13 -0
  23. package/dist/coercers/quote-response-v1-to-v2.d.mts.map +1 -0
  24. package/dist/coercers/{quote-response-v1-to-v2.js → quote-response-v1-to-v2.mjs} +11 -11
  25. package/dist/coercers/quote-response-v1-to-v2.mjs.map +1 -0
  26. package/dist/coercers/quote-response-v2-to-v1.cjs +162 -0
  27. package/dist/coercers/quote-response-v2-to-v1.cjs.map +1 -0
  28. package/dist/coercers/{quote-response-v2-to-v1.d.ts → quote-response-v2-to-v1.d.cts} +4 -4
  29. package/dist/coercers/quote-response-v2-to-v1.d.cts.map +1 -0
  30. package/dist/coercers/quote-response-v2-to-v1.d.mts +13 -0
  31. package/dist/coercers/quote-response-v2-to-v1.d.mts.map +1 -0
  32. package/dist/coercers/{quote-response-v2-to-v1.js → quote-response-v2-to-v1.mjs} +10 -10
  33. package/dist/coercers/quote-response-v2-to-v1.mjs.map +1 -0
  34. package/dist/constants/bridge.cjs +98 -0
  35. package/dist/constants/bridge.cjs.map +1 -0
  36. package/dist/constants/{bridge.d.ts → bridge.d.cts} +38 -38
  37. package/dist/constants/bridge.d.cts.map +1 -0
  38. package/dist/constants/bridge.d.mts +77 -0
  39. package/dist/constants/bridge.d.mts.map +1 -0
  40. package/dist/constants/{bridge.js → bridge.mjs} +4 -4
  41. package/dist/constants/bridge.mjs.map +1 -0
  42. package/dist/constants/chains.cjs +174 -0
  43. package/dist/constants/chains.cjs.map +1 -0
  44. package/dist/constants/{chains.d.ts → chains.d.cts} +84 -84
  45. package/dist/constants/chains.d.cts.map +1 -0
  46. package/dist/constants/chains.d.mts +171 -0
  47. package/dist/constants/chains.d.mts.map +1 -0
  48. package/dist/constants/{chains.js → chains.mjs} +1 -1
  49. package/dist/constants/chains.mjs.map +1 -0
  50. package/dist/constants/swaps.cjs +98 -0
  51. package/dist/constants/swaps.cjs.map +1 -0
  52. package/dist/constants/{swaps.d.ts → swaps.d.cts} +2 -2
  53. package/dist/constants/swaps.d.cts.map +1 -0
  54. package/dist/constants/swaps.d.mts +6 -0
  55. package/dist/constants/swaps.d.mts.map +1 -0
  56. package/dist/constants/{swaps.js → swaps.mjs} +2 -2
  57. package/dist/constants/swaps.mjs.map +1 -0
  58. package/dist/constants/tokens.cjs +212 -0
  59. package/dist/constants/tokens.cjs.map +1 -0
  60. package/dist/constants/{tokens.d.ts → tokens.d.cts} +34 -34
  61. package/dist/constants/tokens.d.cts.map +1 -0
  62. package/dist/constants/tokens.d.mts +195 -0
  63. package/dist/constants/tokens.d.mts.map +1 -0
  64. package/dist/constants/{tokens.js → tokens.mjs} +3 -3
  65. package/dist/constants/tokens.mjs.map +1 -0
  66. package/dist/constants/traces.cjs +11 -0
  67. package/dist/constants/traces.cjs.map +1 -0
  68. package/dist/constants/{traces.d.ts → traces.d.cts} +1 -1
  69. package/dist/constants/traces.d.cts.map +1 -0
  70. package/dist/constants/traces.d.mts +7 -0
  71. package/dist/constants/traces.d.mts.map +1 -0
  72. package/dist/constants/{traces.js → traces.mjs} +1 -1
  73. package/dist/constants/traces.mjs.map +1 -0
  74. package/dist/index.cjs +166 -0
  75. package/dist/index.cjs.map +1 -0
  76. package/dist/{index.d.ts → index.d.cts} +52 -52
  77. package/dist/index.d.cts.map +1 -0
  78. package/dist/index.d.mts +60 -0
  79. package/dist/index.d.mts.map +1 -0
  80. package/dist/index.mjs +47 -0
  81. package/dist/index.mjs.map +1 -0
  82. package/dist/selectors.cjs +449 -0
  83. package/dist/selectors.cjs.map +1 -0
  84. package/dist/{selectors.d.ts → selectors.d.cts} +5782 -5782
  85. package/dist/selectors.d.cts.map +1 -0
  86. package/dist/selectors.d.mts +13877 -0
  87. package/dist/selectors.d.mts.map +1 -0
  88. package/dist/{selectors.js → selectors.mjs} +19 -18
  89. package/dist/selectors.mjs.map +1 -0
  90. package/dist/types.cjs +66 -0
  91. package/dist/types.cjs.map +1 -0
  92. package/dist/{types.d.ts → types.d.cts} +27 -27
  93. package/dist/types.d.cts.map +1 -0
  94. package/dist/types.d.mts +283 -0
  95. package/dist/types.d.mts.map +1 -0
  96. package/dist/{types.js → types.mjs} +1 -1
  97. package/dist/types.mjs.map +1 -0
  98. package/dist/utils/assets.cjs +43 -0
  99. package/dist/utils/assets.cjs.map +1 -0
  100. package/dist/utils/{assets.d.ts → assets.d.cts} +4 -4
  101. package/dist/utils/assets.d.cts.map +1 -0
  102. package/dist/utils/assets.d.mts +10 -0
  103. package/dist/utils/assets.d.mts.map +1 -0
  104. package/dist/utils/{assets.js → assets.mjs} +4 -4
  105. package/dist/utils/assets.mjs.map +1 -0
  106. package/dist/utils/balance.cjs +34 -0
  107. package/dist/utils/balance.cjs.map +1 -0
  108. package/dist/utils/{balance.d.ts → balance.d.cts} +4 -4
  109. package/dist/utils/balance.d.cts.map +1 -0
  110. package/dist/utils/balance.d.mts +7 -0
  111. package/dist/utils/balance.d.mts.map +1 -0
  112. package/dist/utils/{balance.js → balance.mjs} +6 -6
  113. package/dist/utils/balance.mjs.map +1 -0
  114. package/dist/utils/bridge.cjs +204 -0
  115. package/dist/utils/bridge.cjs.map +1 -0
  116. package/dist/utils/{bridge.d.ts → bridge.d.cts} +23 -8
  117. package/dist/utils/bridge.d.cts.map +1 -0
  118. package/dist/utils/bridge.d.mts +97 -0
  119. package/dist/utils/bridge.d.mts.map +1 -0
  120. package/dist/utils/{bridge.js → bridge.mjs} +12 -12
  121. package/dist/utils/bridge.mjs.map +1 -0
  122. package/dist/utils/caip-formatters.cjs +157 -0
  123. package/dist/utils/caip-formatters.cjs.map +1 -0
  124. package/dist/utils/{caip-formatters.d.ts → caip-formatters.d.cts} +3 -3
  125. package/dist/utils/caip-formatters.d.cts.map +1 -0
  126. package/dist/utils/caip-formatters.d.mts +40 -0
  127. package/dist/utils/caip-formatters.d.mts.map +1 -0
  128. package/dist/utils/{caip-formatters.js → caip-formatters.mjs} +9 -9
  129. package/dist/utils/caip-formatters.mjs.map +1 -0
  130. package/dist/utils/feature-flags.cjs +77 -0
  131. package/dist/utils/feature-flags.cjs.map +1 -0
  132. package/dist/utils/{feature-flags.d.ts → feature-flags.d.cts} +9 -9
  133. package/dist/utils/feature-flags.d.cts.map +1 -0
  134. package/dist/utils/feature-flags.d.mts +52 -0
  135. package/dist/utils/feature-flags.d.mts.map +1 -0
  136. package/dist/utils/{feature-flags.js → feature-flags.mjs} +4 -4
  137. package/dist/utils/feature-flags.mjs.map +1 -0
  138. package/dist/utils/fetch-server-events.cjs +70 -0
  139. package/dist/utils/fetch-server-events.cjs.map +1 -0
  140. package/dist/utils/{fetch-server-events.d.ts → fetch-server-events.d.cts} +3 -3
  141. package/dist/utils/fetch-server-events.d.cts.map +1 -0
  142. package/dist/utils/fetch-server-events.d.mts +17 -0
  143. package/dist/utils/fetch-server-events.d.mts.map +1 -0
  144. package/dist/utils/{fetch-server-events.js → fetch-server-events.mjs} +1 -1
  145. package/dist/utils/fetch-server-events.mjs.map +1 -0
  146. package/dist/utils/fetch.cjs +426 -0
  147. package/dist/utils/fetch.cjs.map +1 -0
  148. package/dist/utils/{fetch.d.ts → fetch.d.cts} +15 -15
  149. package/dist/utils/fetch.d.cts.map +1 -0
  150. package/dist/utils/fetch.d.mts +114 -0
  151. package/dist/utils/fetch.d.mts.map +1 -0
  152. package/dist/utils/{fetch.js → fetch.mjs} +15 -15
  153. package/dist/utils/fetch.mjs.map +1 -0
  154. package/dist/utils/metrics/constants.cjs +103 -0
  155. package/dist/utils/metrics/constants.cjs.map +1 -0
  156. package/dist/utils/metrics/{constants.d.ts → constants.d.cts} +1 -1
  157. package/dist/utils/metrics/constants.d.cts.map +1 -0
  158. package/dist/utils/metrics/constants.d.mts +91 -0
  159. package/dist/utils/metrics/constants.d.mts.map +1 -0
  160. package/dist/utils/metrics/{constants.js → constants.mjs} +1 -1
  161. package/dist/utils/metrics/constants.mjs.map +1 -0
  162. package/dist/utils/metrics/properties.cjs +140 -0
  163. package/dist/utils/metrics/properties.cjs.map +1 -0
  164. package/dist/utils/metrics/{properties.d.ts → properties.d.cts} +14 -14
  165. package/dist/utils/metrics/properties.d.cts.map +1 -0
  166. package/dist/utils/metrics/properties.d.mts +66 -0
  167. package/dist/utils/metrics/properties.d.mts.map +1 -0
  168. package/dist/utils/metrics/{properties.js → properties.mjs} +7 -7
  169. package/dist/utils/metrics/properties.mjs.map +1 -0
  170. package/dist/utils/metrics/types.cjs +3 -0
  171. package/dist/utils/metrics/types.cjs.map +1 -0
  172. package/dist/utils/metrics/{types.d.ts → types.d.cts} +5 -5
  173. package/dist/utils/metrics/types.d.cts.map +1 -0
  174. package/dist/utils/metrics/types.d.mts +311 -0
  175. package/dist/utils/metrics/types.d.mts.map +1 -0
  176. package/dist/utils/metrics/types.mjs +2 -0
  177. package/dist/utils/metrics/types.mjs.map +1 -0
  178. package/dist/utils/number-formatters.cjs +107 -0
  179. package/dist/utils/number-formatters.cjs.map +1 -0
  180. package/dist/utils/{number-formatters.d.ts → number-formatters.d.cts} +4 -4
  181. package/dist/utils/number-formatters.d.cts.map +1 -0
  182. package/dist/utils/number-formatters.d.mts +34 -0
  183. package/dist/utils/number-formatters.d.mts.map +1 -0
  184. package/dist/utils/{number-formatters.js → number-formatters.mjs} +3 -3
  185. package/dist/utils/number-formatters.mjs.map +1 -0
  186. package/dist/utils/quote-fees.cjs +144 -0
  187. package/dist/utils/quote-fees.cjs.map +1 -0
  188. package/dist/utils/quote-fees.d.cts +21 -0
  189. package/dist/utils/quote-fees.d.cts.map +1 -0
  190. package/dist/utils/quote-fees.d.mts +21 -0
  191. package/dist/utils/quote-fees.d.mts.map +1 -0
  192. package/dist/utils/{quote-fees.js → quote-fees.mjs} +7 -7
  193. package/dist/utils/quote-fees.mjs.map +1 -0
  194. package/dist/utils/quote-metadata/calculators.cjs +345 -0
  195. package/dist/utils/quote-metadata/calculators.cjs.map +1 -0
  196. package/dist/utils/quote-metadata/{calculators.d.ts → calculators.d.cts} +12 -12
  197. package/dist/utils/quote-metadata/calculators.d.cts.map +1 -0
  198. package/dist/utils/quote-metadata/calculators.d.mts +121 -0
  199. package/dist/utils/quote-metadata/calculators.d.mts.map +1 -0
  200. package/dist/utils/quote-metadata/{calculators.js → calculators.mjs} +11 -11
  201. package/dist/utils/quote-metadata/calculators.mjs.map +1 -0
  202. package/dist/utils/quote-metadata/include-if-truthy.cjs +21 -0
  203. package/dist/utils/quote-metadata/include-if-truthy.cjs.map +1 -0
  204. package/dist/utils/quote-metadata/{include-if-truthy.d.ts → include-if-truthy.d.cts} +1 -1
  205. package/dist/utils/quote-metadata/include-if-truthy.d.cts.map +1 -0
  206. package/dist/utils/quote-metadata/include-if-truthy.d.mts +9 -0
  207. package/dist/utils/quote-metadata/include-if-truthy.d.mts.map +1 -0
  208. package/dist/utils/quote-metadata/{include-if-truthy.js → include-if-truthy.mjs} +1 -1
  209. package/dist/utils/quote-metadata/include-if-truthy.mjs.map +1 -0
  210. package/dist/utils/quote-metadata/merge.cjs +60 -0
  211. package/dist/utils/quote-metadata/merge.cjs.map +1 -0
  212. package/dist/utils/quote-metadata/{merge.d.ts → merge.d.cts} +5 -5
  213. package/dist/utils/quote-metadata/merge.d.cts.map +1 -0
  214. package/dist/utils/quote-metadata/merge.d.mts +15 -0
  215. package/dist/utils/quote-metadata/merge.d.mts.map +1 -0
  216. package/dist/utils/quote-metadata/{merge.js → merge.mjs} +7 -6
  217. package/dist/utils/quote-metadata/merge.mjs.map +1 -0
  218. package/dist/utils/quote-metadata/to-currency-values.cjs +62 -0
  219. package/dist/utils/quote-metadata/to-currency-values.cjs.map +1 -0
  220. package/dist/utils/quote-metadata/{to-currency-values.d.ts → to-currency-values.d.cts} +4 -4
  221. package/dist/utils/quote-metadata/to-currency-values.d.cts.map +1 -0
  222. package/dist/utils/quote-metadata/to-currency-values.d.mts +12 -0
  223. package/dist/utils/quote-metadata/to-currency-values.d.mts.map +1 -0
  224. package/dist/utils/quote-metadata/{to-currency-values.js → to-currency-values.mjs} +3 -2
  225. package/dist/utils/quote-metadata/to-currency-values.mjs.map +1 -0
  226. package/dist/utils/quote-metadata/to-normalized-amounts.cjs +38 -0
  227. package/dist/utils/quote-metadata/to-normalized-amounts.cjs.map +1 -0
  228. package/dist/utils/quote-metadata/{to-normalized-amounts.d.ts → to-normalized-amounts.d.cts} +3 -3
  229. package/dist/utils/quote-metadata/to-normalized-amounts.d.cts.map +1 -0
  230. package/dist/utils/quote-metadata/to-normalized-amounts.d.mts +10 -0
  231. package/dist/utils/quote-metadata/to-normalized-amounts.d.mts.map +1 -0
  232. package/dist/utils/quote-metadata/{to-normalized-amounts.js → to-normalized-amounts.mjs} +3 -3
  233. package/dist/utils/quote-metadata/to-normalized-amounts.mjs.map +1 -0
  234. package/dist/utils/quote-metadata/to-quote-metadata-v1.cjs +94 -0
  235. package/dist/utils/quote-metadata/to-quote-metadata-v1.cjs.map +1 -0
  236. package/dist/utils/quote-metadata/{to-quote-metadata-v1.d.ts → to-quote-metadata-v1.d.cts} +6 -6
  237. package/dist/utils/quote-metadata/to-quote-metadata-v1.d.cts.map +1 -0
  238. package/dist/utils/quote-metadata/to-quote-metadata-v1.d.mts +15 -0
  239. package/dist/utils/quote-metadata/to-quote-metadata-v1.d.mts.map +1 -0
  240. package/dist/utils/quote-metadata/{to-quote-metadata-v1.js → to-quote-metadata-v1.mjs} +7 -6
  241. package/dist/utils/quote-metadata/to-quote-metadata-v1.mjs.map +1 -0
  242. package/dist/utils/quote-metadata/to-quote-metadata-v2.cjs +84 -0
  243. package/dist/utils/quote-metadata/to-quote-metadata-v2.cjs.map +1 -0
  244. package/dist/utils/quote-metadata/{to-quote-metadata-v2.d.ts → to-quote-metadata-v2.d.cts} +4 -4
  245. package/dist/utils/quote-metadata/to-quote-metadata-v2.d.cts.map +1 -0
  246. package/dist/utils/quote-metadata/to-quote-metadata-v2.d.mts +12 -0
  247. package/dist/utils/quote-metadata/to-quote-metadata-v2.d.mts.map +1 -0
  248. package/dist/utils/quote-metadata/{to-quote-metadata-v2.js → to-quote-metadata-v2.mjs} +6 -6
  249. package/dist/utils/quote-metadata/to-quote-metadata-v2.mjs.map +1 -0
  250. package/dist/utils/quote-metadata/types.cjs +19 -0
  251. package/dist/utils/quote-metadata/types.cjs.map +1 -0
  252. package/dist/utils/quote-metadata/{types.d.ts → types.d.cts} +5 -5
  253. package/dist/utils/quote-metadata/types.d.cts.map +1 -0
  254. package/dist/utils/quote-metadata/types.d.mts +108 -0
  255. package/dist/utils/quote-metadata/types.d.mts.map +1 -0
  256. package/dist/utils/quote-metadata/{types.js → types.mjs} +1 -1
  257. package/dist/utils/quote-metadata/types.mjs.map +1 -0
  258. package/dist/utils/slippage.cjs +49 -0
  259. package/dist/utils/slippage.cjs.map +1 -0
  260. package/dist/utils/{slippage.d.ts → slippage.d.cts} +2 -2
  261. package/dist/utils/slippage.d.cts.map +1 -0
  262. package/dist/utils/slippage.d.mts +23 -0
  263. package/dist/utils/slippage.d.mts.map +1 -0
  264. package/dist/utils/{slippage.js → slippage.mjs} +2 -2
  265. package/dist/utils/slippage.mjs.map +1 -0
  266. package/dist/utils/snaps.cjs +76 -0
  267. package/dist/utils/snaps.cjs.map +1 -0
  268. package/dist/utils/{snaps.d.ts → snaps.d.cts} +5 -5
  269. package/dist/utils/snaps.d.cts.map +1 -0
  270. package/dist/utils/snaps.d.mts +59 -0
  271. package/dist/utils/snaps.d.mts.map +1 -0
  272. package/dist/utils/{snaps.js → snaps.mjs} +4 -4
  273. package/dist/utils/snaps.mjs.map +1 -0
  274. package/dist/utils/sort-quotes.cjs +16 -0
  275. package/dist/utils/sort-quotes.cjs.map +1 -0
  276. package/dist/utils/sort-quotes.d.cts +4 -0
  277. package/dist/utils/sort-quotes.d.cts.map +1 -0
  278. package/dist/utils/sort-quotes.d.mts +4 -0
  279. package/dist/utils/sort-quotes.d.mts.map +1 -0
  280. package/dist/utils/{sort-quotes.js → sort-quotes.mjs} +2 -2
  281. package/dist/utils/sort-quotes.mjs.map +1 -0
  282. package/dist/utils/struct-error.cjs +16 -0
  283. package/dist/utils/struct-error.cjs.map +1 -0
  284. package/dist/utils/{struct-error.d.ts → struct-error.d.cts} +2 -2
  285. package/dist/utils/struct-error.d.cts.map +1 -0
  286. package/dist/utils/struct-error.d.mts +11 -0
  287. package/dist/utils/struct-error.d.mts.map +1 -0
  288. package/dist/utils/{struct-error.js → struct-error.mjs} +1 -1
  289. package/dist/utils/struct-error.mjs.map +1 -0
  290. package/dist/utils/swaps.cjs +73 -0
  291. package/dist/utils/swaps.cjs.map +1 -0
  292. package/dist/utils/{swaps.d.ts → swaps.d.cts} +3 -3
  293. package/dist/utils/swaps.d.cts.map +1 -0
  294. package/dist/utils/swaps.d.mts +37 -0
  295. package/dist/utils/swaps.d.mts.map +1 -0
  296. package/dist/utils/{swaps.js → swaps.mjs} +5 -5
  297. package/dist/utils/swaps.mjs.map +1 -0
  298. package/dist/utils/trade-utils.cjs +39 -0
  299. package/dist/utils/trade-utils.cjs.map +1 -0
  300. package/dist/utils/{trade-utils.d.ts → trade-utils.d.cts} +2 -2
  301. package/dist/utils/trade-utils.d.cts.map +1 -0
  302. package/dist/utils/trade-utils.d.mts +9 -0
  303. package/dist/utils/trade-utils.d.mts.map +1 -0
  304. package/dist/utils/{trade-utils.js → trade-utils.mjs} +2 -2
  305. package/dist/utils/trade-utils.mjs.map +1 -0
  306. package/dist/validators/amount-and-asset.cjs +27 -0
  307. package/dist/validators/amount-and-asset.cjs.map +1 -0
  308. package/dist/validators/{amount-and-asset.d.ts → amount-and-asset.d.cts} +8 -8
  309. package/dist/validators/amount-and-asset.d.cts.map +1 -0
  310. package/dist/validators/amount-and-asset.d.mts +62 -0
  311. package/dist/validators/amount-and-asset.d.mts.map +1 -0
  312. package/dist/validators/{amount-and-asset.js → amount-and-asset.mjs} +4 -4
  313. package/dist/validators/amount-and-asset.mjs.map +1 -0
  314. package/dist/validators/batch-sell.cjs +39 -0
  315. package/dist/validators/batch-sell.cjs.map +1 -0
  316. package/dist/validators/{batch-sell.d.ts → batch-sell.d.cts} +39 -8
  317. package/dist/validators/batch-sell.d.cts.map +1 -0
  318. package/dist/validators/batch-sell.d.mts +79 -0
  319. package/dist/validators/batch-sell.d.mts.map +1 -0
  320. package/dist/validators/{batch-sell.js → batch-sell.mjs} +7 -7
  321. package/dist/validators/batch-sell.mjs.map +1 -0
  322. package/dist/validators/bridge-asset.cjs +106 -0
  323. package/dist/validators/bridge-asset.cjs.map +1 -0
  324. package/dist/validators/{bridge-asset.d.ts → bridge-asset.d.cts} +42 -10
  325. package/dist/validators/bridge-asset.d.cts.map +1 -0
  326. package/dist/validators/bridge-asset.d.mts +146 -0
  327. package/dist/validators/bridge-asset.d.mts.map +1 -0
  328. package/dist/validators/{bridge-asset.js → bridge-asset.mjs} +3 -3
  329. package/dist/validators/bridge-asset.mjs.map +1 -0
  330. package/dist/validators/feature-flags.cjs +110 -0
  331. package/dist/validators/feature-flags.cjs.map +1 -0
  332. package/dist/validators/{feature-flags.d.ts → feature-flags.d.cts} +60 -16
  333. package/dist/validators/feature-flags.d.cts.map +1 -0
  334. package/dist/validators/feature-flags.d.mts +264 -0
  335. package/dist/validators/feature-flags.d.mts.map +1 -0
  336. package/dist/validators/{feature-flags.js → feature-flags.mjs} +3 -3
  337. package/dist/validators/feature-flags.mjs.map +1 -0
  338. package/dist/validators/intent.cjs +122 -0
  339. package/dist/validators/intent.cjs.map +1 -0
  340. package/dist/validators/{intent.d.ts → intent.d.cts} +12 -12
  341. package/dist/validators/intent.d.cts.map +1 -0
  342. package/dist/validators/intent.d.mts +231 -0
  343. package/dist/validators/intent.d.mts.map +1 -0
  344. package/dist/validators/{intent.js → intent.mjs} +4 -4
  345. package/dist/validators/intent.mjs.map +1 -0
  346. package/dist/validators/number.cjs +8 -0
  347. package/dist/validators/number.cjs.map +1 -0
  348. package/dist/validators/{number.d.ts → number.d.cts} +1 -1
  349. package/dist/validators/number.d.cts.map +1 -0
  350. package/dist/validators/number.d.mts +4 -0
  351. package/dist/validators/number.d.mts.map +1 -0
  352. package/dist/validators/{number.js → number.mjs} +2 -2
  353. package/dist/validators/number.mjs.map +1 -0
  354. package/dist/validators/quote-request.cjs +57 -0
  355. package/dist/validators/quote-request.cjs.map +1 -0
  356. package/dist/validators/{quote-request.d.ts → quote-request.d.cts} +2 -2
  357. package/dist/validators/quote-request.d.cts.map +1 -0
  358. package/dist/validators/quote-request.d.mts +4 -0
  359. package/dist/validators/quote-request.d.mts.map +1 -0
  360. package/dist/validators/{quote-request.js → quote-request.mjs} +2 -2
  361. package/dist/validators/quote-request.mjs.map +1 -0
  362. package/dist/validators/quote-response-v1.cjs +31 -0
  363. package/dist/validators/quote-response-v1.cjs.map +1 -0
  364. package/dist/validators/{quote-response-v1.d.ts → quote-response-v1.d.cts} +335 -128
  365. package/dist/validators/quote-response-v1.d.cts.map +1 -0
  366. package/dist/validators/quote-response-v1.d.mts +661 -0
  367. package/dist/validators/quote-response-v1.d.mts.map +1 -0
  368. package/dist/validators/{quote-response-v1.js → quote-response-v1.mjs} +7 -7
  369. package/dist/validators/quote-response-v1.mjs.map +1 -0
  370. package/dist/validators/quote-response.cjs +129 -0
  371. package/dist/validators/quote-response.cjs.map +1 -0
  372. package/dist/validators/{quote-response.d.ts → quote-response.d.cts} +414 -414
  373. package/dist/validators/{quote-response.d.ts.map → quote-response.d.cts.map} +1 -1
  374. package/dist/validators/quote-response.d.mts +1973 -0
  375. package/dist/validators/quote-response.d.mts.map +1 -0
  376. package/dist/validators/{quote-response.js → quote-response.mjs} +7 -7
  377. package/dist/validators/quote-response.mjs.map +1 -0
  378. package/dist/validators/quote-stream-complete.cjs +29 -0
  379. package/dist/validators/quote-stream-complete.cjs.map +1 -0
  380. package/dist/validators/{quote-stream-complete.d.ts → quote-stream-complete.d.cts} +11 -7
  381. package/dist/validators/quote-stream-complete.d.cts.map +1 -0
  382. package/dist/validators/quote-stream-complete.d.mts +39 -0
  383. package/dist/validators/quote-stream-complete.d.mts.map +1 -0
  384. package/dist/validators/{quote-stream-complete.js → quote-stream-complete.mjs} +2 -2
  385. package/dist/validators/quote-stream-complete.mjs.map +1 -0
  386. package/dist/validators/quote.cjs +164 -0
  387. package/dist/validators/quote.cjs.map +1 -0
  388. package/dist/validators/{quote.d.ts → quote.d.cts} +132 -132
  389. package/dist/validators/quote.d.cts.map +1 -0
  390. package/dist/validators/quote.d.mts +588 -0
  391. package/dist/validators/quote.d.mts.map +1 -0
  392. package/dist/validators/{quote.js → quote.mjs} +7 -7
  393. package/dist/validators/quote.mjs.map +1 -0
  394. package/dist/validators/step.cjs +26 -0
  395. package/dist/validators/step.cjs.map +1 -0
  396. package/dist/validators/{step.d.ts → step.d.cts} +56 -56
  397. package/dist/validators/step.d.cts.map +1 -0
  398. package/dist/validators/step.d.mts +319 -0
  399. package/dist/validators/step.d.mts.map +1 -0
  400. package/dist/validators/{step.js → step.mjs} +4 -4
  401. package/dist/validators/step.mjs.map +1 -0
  402. package/dist/validators/token-feature.cjs +22 -0
  403. package/dist/validators/token-feature.cjs.map +1 -0
  404. package/dist/validators/{token-feature.d.ts → token-feature.d.cts} +9 -6
  405. package/dist/validators/token-feature.d.cts.map +1 -0
  406. package/dist/validators/token-feature.d.mts +26 -0
  407. package/dist/validators/token-feature.d.mts.map +1 -0
  408. package/dist/validators/{token-feature.js → token-feature.mjs} +2 -2
  409. package/dist/validators/token-feature.mjs.map +1 -0
  410. package/dist/validators/trade.cjs +94 -0
  411. package/dist/validators/trade.cjs.map +1 -0
  412. package/dist/validators/{trade.d.ts → trade.d.cts} +31 -7
  413. package/dist/validators/trade.d.cts.map +1 -0
  414. package/dist/validators/trade.d.mts +121 -0
  415. package/dist/validators/trade.d.mts.map +1 -0
  416. package/dist/validators/{trade.js → trade.mjs} +2 -2
  417. package/dist/validators/trade.mjs.map +1 -0
  418. package/package.json +17 -13
  419. package/dist/bridge-controller-method-action-types.d.ts.map +0 -1
  420. package/dist/bridge-controller-method-action-types.js.map +0 -1
  421. package/dist/bridge-controller.d.ts.map +0 -1
  422. package/dist/bridge-controller.js +0 -1029
  423. package/dist/bridge-controller.js.map +0 -1
  424. package/dist/coercers/quote-response-v1-to-v2.d.ts.map +0 -1
  425. package/dist/coercers/quote-response-v1-to-v2.js.map +0 -1
  426. package/dist/coercers/quote-response-v2-to-v1.d.ts.map +0 -1
  427. package/dist/coercers/quote-response-v2-to-v1.js.map +0 -1
  428. package/dist/constants/bridge.d.ts.map +0 -1
  429. package/dist/constants/bridge.js.map +0 -1
  430. package/dist/constants/chains.d.ts.map +0 -1
  431. package/dist/constants/chains.js.map +0 -1
  432. package/dist/constants/swaps.d.ts.map +0 -1
  433. package/dist/constants/swaps.js.map +0 -1
  434. package/dist/constants/tokens.d.ts.map +0 -1
  435. package/dist/constants/tokens.js.map +0 -1
  436. package/dist/constants/traces.d.ts.map +0 -1
  437. package/dist/constants/traces.js.map +0 -1
  438. package/dist/index.d.ts.map +0 -1
  439. package/dist/index.js +0 -47
  440. package/dist/index.js.map +0 -1
  441. package/dist/selectors.d.ts.map +0 -1
  442. package/dist/selectors.js.map +0 -1
  443. package/dist/types.d.ts.map +0 -1
  444. package/dist/types.js.map +0 -1
  445. package/dist/utils/assets.d.ts.map +0 -1
  446. package/dist/utils/assets.js.map +0 -1
  447. package/dist/utils/balance.d.ts.map +0 -1
  448. package/dist/utils/balance.js.map +0 -1
  449. package/dist/utils/bridge.d.ts.map +0 -1
  450. package/dist/utils/bridge.js.map +0 -1
  451. package/dist/utils/caip-formatters.d.ts.map +0 -1
  452. package/dist/utils/caip-formatters.js.map +0 -1
  453. package/dist/utils/feature-flags.d.ts.map +0 -1
  454. package/dist/utils/feature-flags.js.map +0 -1
  455. package/dist/utils/fetch-server-events.d.ts.map +0 -1
  456. package/dist/utils/fetch-server-events.js.map +0 -1
  457. package/dist/utils/fetch.d.ts.map +0 -1
  458. package/dist/utils/fetch.js.map +0 -1
  459. package/dist/utils/metrics/constants.d.ts.map +0 -1
  460. package/dist/utils/metrics/constants.js.map +0 -1
  461. package/dist/utils/metrics/properties.d.ts.map +0 -1
  462. package/dist/utils/metrics/properties.js.map +0 -1
  463. package/dist/utils/metrics/types.d.ts.map +0 -1
  464. package/dist/utils/metrics/types.js +0 -2
  465. package/dist/utils/metrics/types.js.map +0 -1
  466. package/dist/utils/number-formatters.d.ts.map +0 -1
  467. package/dist/utils/number-formatters.js.map +0 -1
  468. package/dist/utils/quote-fees.d.ts +0 -17
  469. package/dist/utils/quote-fees.d.ts.map +0 -1
  470. package/dist/utils/quote-fees.js.map +0 -1
  471. package/dist/utils/quote-metadata/calculators.d.ts.map +0 -1
  472. package/dist/utils/quote-metadata/calculators.js.map +0 -1
  473. package/dist/utils/quote-metadata/include-if-truthy.d.ts.map +0 -1
  474. package/dist/utils/quote-metadata/include-if-truthy.js.map +0 -1
  475. package/dist/utils/quote-metadata/merge.d.ts.map +0 -1
  476. package/dist/utils/quote-metadata/merge.js.map +0 -1
  477. package/dist/utils/quote-metadata/to-currency-values.d.ts.map +0 -1
  478. package/dist/utils/quote-metadata/to-currency-values.js.map +0 -1
  479. package/dist/utils/quote-metadata/to-normalized-amounts.d.ts.map +0 -1
  480. package/dist/utils/quote-metadata/to-normalized-amounts.js.map +0 -1
  481. package/dist/utils/quote-metadata/to-quote-metadata-v1.d.ts.map +0 -1
  482. package/dist/utils/quote-metadata/to-quote-metadata-v1.js.map +0 -1
  483. package/dist/utils/quote-metadata/to-quote-metadata-v2.d.ts.map +0 -1
  484. package/dist/utils/quote-metadata/to-quote-metadata-v2.js.map +0 -1
  485. package/dist/utils/quote-metadata/types.d.ts.map +0 -1
  486. package/dist/utils/quote-metadata/types.js.map +0 -1
  487. package/dist/utils/slippage.d.ts.map +0 -1
  488. package/dist/utils/slippage.js.map +0 -1
  489. package/dist/utils/snaps.d.ts.map +0 -1
  490. package/dist/utils/snaps.js.map +0 -1
  491. package/dist/utils/sort-quotes.d.ts +0 -4
  492. package/dist/utils/sort-quotes.d.ts.map +0 -1
  493. package/dist/utils/sort-quotes.js.map +0 -1
  494. package/dist/utils/struct-error.d.ts.map +0 -1
  495. package/dist/utils/struct-error.js.map +0 -1
  496. package/dist/utils/swaps.d.ts.map +0 -1
  497. package/dist/utils/swaps.js.map +0 -1
  498. package/dist/utils/trade-utils.d.ts.map +0 -1
  499. package/dist/utils/trade-utils.js.map +0 -1
  500. package/dist/validators/amount-and-asset.d.ts.map +0 -1
  501. package/dist/validators/amount-and-asset.js.map +0 -1
  502. package/dist/validators/batch-sell.d.ts.map +0 -1
  503. package/dist/validators/batch-sell.js.map +0 -1
  504. package/dist/validators/bridge-asset.d.ts.map +0 -1
  505. package/dist/validators/bridge-asset.js.map +0 -1
  506. package/dist/validators/feature-flags.d.ts.map +0 -1
  507. package/dist/validators/feature-flags.js.map +0 -1
  508. package/dist/validators/intent.d.ts.map +0 -1
  509. package/dist/validators/intent.js.map +0 -1
  510. package/dist/validators/number.d.ts.map +0 -1
  511. package/dist/validators/number.js.map +0 -1
  512. package/dist/validators/quote-request.d.ts.map +0 -1
  513. package/dist/validators/quote-request.js.map +0 -1
  514. package/dist/validators/quote-response-v1.d.ts.map +0 -1
  515. package/dist/validators/quote-response-v1.js.map +0 -1
  516. package/dist/validators/quote-response.js.map +0 -1
  517. package/dist/validators/quote-stream-complete.d.ts.map +0 -1
  518. package/dist/validators/quote-stream-complete.js.map +0 -1
  519. package/dist/validators/quote.d.ts.map +0 -1
  520. package/dist/validators/quote.js.map +0 -1
  521. package/dist/validators/step.d.ts.map +0 -1
  522. package/dist/validators/step.js.map +0 -1
  523. package/dist/validators/token-feature.d.ts.map +0 -1
  524. package/dist/validators/token-feature.js.map +0 -1
  525. package/dist/validators/trade.d.ts.map +0 -1
  526. package/dist/validators/trade.js.map +0 -1
@@ -0,0 +1,1040 @@
1
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
+ if (kind === "m") throw new TypeError("Private method is not writable");
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
+ };
7
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
+ };
12
+ var _BridgeController_instances, _BridgeController_abortController, _BridgeController_batchSellTradesAbortController, _BridgeController_quotesFirstFetched, _BridgeController_location, _BridgeController_clientId, _BridgeController_clientVersion, _BridgeController_getLayer1GasFee, _BridgeController_fetchFn, _BridgeController_trackMetaMetricsFn, _BridgeController_trace, _BridgeController_config, _BridgeController_getUseAssetsControllerForRates, _BridgeController_trackQuoteValidationFailures, _BridgeController_fetchAssetExchangeRates, _BridgeController_hasInsufficientBalance, _BridgeController_appendInsufficientBalAndResetApproval, _BridgeController_shouldResetApproval, _BridgeController_fetchBridgeQuotes, _BridgeController_handleQuoteStreaming, _BridgeController_setMinimumBalanceForRentExemptionInLamports, _BridgeController_getMultichainSelectedAccount, _BridgeController_getNetworkClientByChainId, _BridgeController_getJwt, _BridgeController_getRequestMetadata, _BridgeController_getQuoteFetchData, _BridgeController_getEventProperties, _BridgeController_trackInputChangedEvents, _BridgeController_getUSDTMainnetAllowance;
13
+ /* eslint-disable @typescript-eslint/explicit-function-return-type */
14
+ import { BigNumber } from "@ethersproject/bignumber";
15
+ import { Contract } from "@ethersproject/contracts";
16
+ import { Web3Provider } from "@ethersproject/providers";
17
+ import { abiERC20 } from "@metamask/metamask-eth-abis";
18
+ import { StaticIntervalPollingController } from "@metamask/polling-controller";
19
+ import { v4 as uuid } from "uuid";
20
+ import { toQuoteResponseV2 } from "./coercers/quote-response-v1-to-v2.mjs";
21
+ import { BRIDGE_CONTROLLER_NAME, BRIDGE_PROD_API_BASE_URL, DEFAULT_BRIDGE_CONTROLLER_STATE, METABRIDGE_ETHEREUM_ADDRESS, REFRESH_INTERVAL_MS } from "./constants/bridge.mjs";
22
+ import { CHAIN_IDS } from "./constants/chains.mjs";
23
+ import { SWAPS_CONTRACT_ADDRESSES } from "./constants/swaps.mjs";
24
+ import { TraceName } from "./constants/traces.mjs";
25
+ import { RequestStatus } from "./types.mjs";
26
+ import { getAssetIdsForToken, toExchangeRates } from "./utils/assets.mjs";
27
+ import { hasSufficientBalance } from "./utils/balance.mjs";
28
+ import { getDefaultBridgeControllerState, isCrossChain, isEthUsdt, isNonEvmChainId, isSolanaChainId } from "./utils/bridge.mjs";
29
+ import { formatAddressToCaipReference, formatChainIdToCaip, formatChainIdToHex } from "./utils/caip-formatters.mjs";
30
+ import { getBridgeFeatureFlags, hasMinimumRequiredVersion } from "./utils/feature-flags.mjs";
31
+ import { fetchAssetPrices, fetchBridgeQuotes, fetchBridgeQuoteStream, fetchBatchSellTrades } from "./utils/fetch.mjs";
32
+ import { AbortReason, BatchSellMetricsEventName, MetaMetricsSwapsEventSource, MetricsActionType, UnifiedSwapBridgeEventName } from "./utils/metrics/constants.mjs";
33
+ import { formatProviderLabel, getAccountHardwareType, getRequestParams, getSwapType, getSwapTypeFromQuote, isCustomSlippage, toInputChangedPropertyKey, toInputChangedPropertyValue } from "./utils/metrics/properties.mjs";
34
+ import { appendFeesToQuotes } from "./utils/quote-fees.mjs";
35
+ import { getMinimumBalanceForRentExemptionInLamports } from "./utils/snaps.mjs";
36
+ import { sortQuotes } from "./utils/sort-quotes.mjs";
37
+ import { isValidQuoteRequest, isValidBatchSellQuoteRequest } from "./validators/quote-request.mjs";
38
+ const metadata = {
39
+ quoteRequest: {
40
+ includeInStateLogs: true,
41
+ persist: false,
42
+ includeInDebugSnapshot: false,
43
+ usedInUi: true,
44
+ },
45
+ quotes: {
46
+ includeInStateLogs: true,
47
+ persist: false,
48
+ includeInDebugSnapshot: false,
49
+ usedInUi: true,
50
+ },
51
+ quotesInitialLoadTime: {
52
+ includeInStateLogs: true,
53
+ persist: false,
54
+ includeInDebugSnapshot: false,
55
+ usedInUi: true,
56
+ },
57
+ quotesLastFetched: {
58
+ includeInStateLogs: true,
59
+ persist: false,
60
+ includeInDebugSnapshot: false,
61
+ usedInUi: true,
62
+ },
63
+ quotesLoadingStatus: {
64
+ includeInStateLogs: true,
65
+ persist: false,
66
+ includeInDebugSnapshot: false,
67
+ usedInUi: true,
68
+ },
69
+ quoteFetchError: {
70
+ includeInStateLogs: true,
71
+ persist: false,
72
+ includeInDebugSnapshot: false,
73
+ usedInUi: true,
74
+ },
75
+ quotesRefreshCount: {
76
+ includeInStateLogs: true,
77
+ persist: false,
78
+ includeInDebugSnapshot: false,
79
+ usedInUi: true,
80
+ },
81
+ assetExchangeRates: {
82
+ includeInStateLogs: true,
83
+ persist: false,
84
+ includeInDebugSnapshot: false,
85
+ usedInUi: true,
86
+ },
87
+ minimumBalanceForRentExemptionInLamports: {
88
+ includeInStateLogs: true,
89
+ persist: false,
90
+ includeInDebugSnapshot: false,
91
+ usedInUi: true,
92
+ },
93
+ tokenWarnings: {
94
+ includeInStateLogs: true,
95
+ persist: false,
96
+ includeInDebugSnapshot: false,
97
+ usedInUi: true,
98
+ },
99
+ tokenSecurityTypeDestination: {
100
+ includeInStateLogs: true,
101
+ persist: false,
102
+ includeInDebugSnapshot: false,
103
+ usedInUi: true,
104
+ },
105
+ inputPrimaryDenomination: {
106
+ includeInStateLogs: true,
107
+ persist: true,
108
+ includeInDebugSnapshot: false,
109
+ usedInUi: true,
110
+ },
111
+ quoteStreamComplete: {
112
+ includeInStateLogs: true,
113
+ persist: false,
114
+ includeInDebugSnapshot: false,
115
+ usedInUi: true,
116
+ },
117
+ batchSellTrades: {
118
+ includeInStateLogs: true,
119
+ persist: false,
120
+ includeInDebugSnapshot: false,
121
+ usedInUi: true,
122
+ },
123
+ batchSellTradesLoadingStatus: {
124
+ includeInStateLogs: true,
125
+ persist: false,
126
+ includeInDebugSnapshot: false,
127
+ usedInUi: true,
128
+ },
129
+ };
130
+ const QUOTE_ABORT_REASONS = new Set(Object.values(AbortReason));
131
+ const isExpectedQuoteAbort = (error, signal) => {
132
+ if (signal?.aborted) {
133
+ return true;
134
+ }
135
+ if (QUOTE_ABORT_REASONS.has(String(error))) {
136
+ return true;
137
+ }
138
+ const errorText = error instanceof Error ? `${error.name} ${error.message}` : String(error);
139
+ return (errorText.includes('AbortError') ||
140
+ errorText.includes('FetchRequestCanceledException'));
141
+ };
142
+ const MESSENGER_EXPOSED_METHODS = [
143
+ 'updateBridgeQuoteRequestParams',
144
+ 'fetchQuotes',
145
+ 'updateBatchSellTrades',
146
+ 'stopPollingForQuotes',
147
+ 'setLocation',
148
+ 'getLocation',
149
+ 'setInputPrimaryDenomination',
150
+ 'resetState',
151
+ 'setChainIntervalLength',
152
+ 'trackUnifiedSwapBridgeEvent',
153
+ ];
154
+ export class BridgeController extends StaticIntervalPollingController() {
155
+ constructor({ messenger, state, clientId, clientVersion, getLayer1GasFee, fetchFn, config, trackMetaMetricsFn, traceFn, getUseAssetsControllerForRates, }) {
156
+ super({
157
+ name: BRIDGE_CONTROLLER_NAME,
158
+ metadata,
159
+ messenger,
160
+ state: {
161
+ ...getDefaultBridgeControllerState(),
162
+ ...state,
163
+ },
164
+ });
165
+ _BridgeController_instances.add(this);
166
+ _BridgeController_abortController.set(this, void 0);
167
+ _BridgeController_batchSellTradesAbortController.set(this, void 0);
168
+ _BridgeController_quotesFirstFetched.set(this, void 0);
169
+ /**
170
+ * Stores the location/entry point from which the user initiated the swap or bridge flow.
171
+ * Set via setLocation() before navigating to the swap/bridge flow.
172
+ * Used as default for all subsequent internal events.
173
+ */
174
+ _BridgeController_location.set(this, MetaMetricsSwapsEventSource.Unknown);
175
+ _BridgeController_clientId.set(this, void 0);
176
+ _BridgeController_clientVersion.set(this, void 0);
177
+ _BridgeController_getLayer1GasFee.set(this, void 0);
178
+ _BridgeController_fetchFn.set(this, void 0);
179
+ _BridgeController_trackMetaMetricsFn.set(this, void 0);
180
+ _BridgeController_trace.set(this, void 0);
181
+ _BridgeController_config.set(this, void 0);
182
+ /**
183
+ * Returns whether to use AssetsController for exchange rates.
184
+ * Set via constructor option getUseAssetsControllerForRates; defaults to false.
185
+ *
186
+ * @returns True when exchange rates should be read from AssetsController:getExchangeRatesForBridge.
187
+ */
188
+ _BridgeController_getUseAssetsControllerForRates.set(this, void 0);
189
+ this._executePoll = async (pollingInput) => {
190
+ await __classPrivateFieldGet(this, _BridgeController_fetchBridgeQuotes, "f").call(this, pollingInput);
191
+ };
192
+ /**
193
+ * Updates the quote request at the specified index with the given parameters, then starts
194
+ * polling for quotes.
195
+ *
196
+ * @param paramsToUpdate - The parameters to update in the quote request at the specified index
197
+ * @param context - metrics context
198
+ * @param quoteRequestIndex - The index of the quote request to update
199
+ * @param quoteRequestCount - The number of quote requests in the UI
200
+ */
201
+ this.updateBridgeQuoteRequestParams = async (paramsToUpdate, context, quoteRequestIndex = 0, quoteRequestCount = 1) => {
202
+ // Guard against updating a quote request that doesn't exist
203
+ if (quoteRequestIndex >= quoteRequestCount) {
204
+ return;
205
+ }
206
+ __classPrivateFieldGet(this, _BridgeController_trackInputChangedEvents, "f").call(this, paramsToUpdate, context.feature_id, quoteRequestIndex);
207
+ this.resetState(AbortReason.QuoteRequestUpdated, quoteRequestIndex);
208
+ this.update((state) => {
209
+ // Update only the specified quote request and keep the rest of the quote requests unchanged
210
+ state.quoteRequest = state.quoteRequest
211
+ .slice(0, quoteRequestIndex)
212
+ .concat({
213
+ ...DEFAULT_BRIDGE_CONTROLLER_STATE.quoteRequest[0],
214
+ ...paramsToUpdate,
215
+ })
216
+ .concat(state.quoteRequest.slice(quoteRequestIndex + 1, quoteRequestCount));
217
+ state.tokenSecurityTypeDestination =
218
+ context.token_security_type_destination ?? null;
219
+ });
220
+ // BatchSell and Unified swaps both use the same polling logic so both validations should pass
221
+ if (isValidQuoteRequest(paramsToUpdate) &&
222
+ isValidBatchSellQuoteRequest(this.state.quoteRequest)) {
223
+ __classPrivateFieldSet(this, _BridgeController_quotesFirstFetched, Date.now(), "f");
224
+ // Update the insufficientBal and resetApproval params for the quote request
225
+ const quoteWithInsufficientBalAndResetApproval = await __classPrivateFieldGet(this, _BridgeController_appendInsufficientBalAndResetApproval, "f").call(this, paramsToUpdate);
226
+ this.update((state) => {
227
+ state.quoteRequest[quoteRequestIndex] =
228
+ quoteWithInsufficientBalAndResetApproval;
229
+ });
230
+ // Set refresh rate based on the source chain before starting polling
231
+ this.setChainIntervalLength();
232
+ this.startPolling({
233
+ quoteRequests: this.state.quoteRequest,
234
+ context,
235
+ });
236
+ }
237
+ };
238
+ /**
239
+ * Fetches quotes for specified request without updating the controller state
240
+ * This method does not start polling for quotes and does not emit UnifiedSwapBridge events
241
+ *
242
+ * @param quoteRequest - The parameters for quote requests to fetch
243
+ * @param featureId - The feature ID that maps to quoteParam overrides from LD
244
+ * @param abortSignal - The abort signal to cancel all the requests
245
+ * @returns A list of validated quotes
246
+ */
247
+ this.fetchQuotes = async (quoteRequest, featureId, abortSignal = null) => {
248
+ const bridgeFeatureFlags = getBridgeFeatureFlags(this.messenger);
249
+ const jwt = await __classPrivateFieldGet(this, _BridgeController_getJwt, "f").call(this);
250
+ // If featureId is specified, retrieve the quoteRequestOverrides for that featureId
251
+ const quoteRequestOverrides = featureId
252
+ ? bridgeFeatureFlags.quoteRequestOverrides?.[featureId]
253
+ : undefined;
254
+ const resetApproval = await __classPrivateFieldGet(this, _BridgeController_shouldResetApproval, "f").call(this, quoteRequest);
255
+ // If quoteRequestOverrides is specified, merge it with the quoteRequest
256
+ const { quotes: baseQuotes, validationFailures } = await fetchBridgeQuotes(quoteRequestOverrides
257
+ ? { ...quoteRequest, ...quoteRequestOverrides, resetApproval }
258
+ : { ...quoteRequest, resetApproval }, abortSignal, __classPrivateFieldGet(this, _BridgeController_clientId, "f"), jwt, __classPrivateFieldGet(this, _BridgeController_fetchFn, "f"), __classPrivateFieldGet(this, _BridgeController_config, "f").customBridgeApiBaseUrl ?? BRIDGE_PROD_API_BASE_URL, featureId, __classPrivateFieldGet(this, _BridgeController_clientVersion, "f"));
259
+ __classPrivateFieldGet(this, _BridgeController_trackQuoteValidationFailures, "f").call(this, validationFailures, featureId);
260
+ const srcChainIds = Array.from(new Set(baseQuotes.map((quote) => quote.quote.srcChainId))).filter(Boolean);
261
+ const quotesWithFees = srcChainIds.length > 1 || srcChainIds.length === 0
262
+ ? // Don't append fees if there are multiple srcChainIds
263
+ baseQuotes
264
+ : await appendFeesToQuotes(formatChainIdToCaip(srcChainIds[0]), baseQuotes, this.messenger, __classPrivateFieldGet(this, _BridgeController_getLayer1GasFee, "f"), __classPrivateFieldGet(this, _BridgeController_instances, "m", _BridgeController_getMultichainSelectedAccount).call(this, quoteRequest.walletAddress));
265
+ return sortQuotes(quotesWithFees, featureId);
266
+ };
267
+ /**
268
+ * Fetches gasless transaction data and fees for BatchSell quotes.
269
+ * To use this in the clients, add a listener for the recommendedQuotes and call
270
+ * this handler whenever they change.
271
+ *
272
+ * @param quotes - The quotes to fetch the gasless transaction data and fees for
273
+ * @param stxEnabled - Flag to estimate gas cost more precisely for the batch sell feature.
274
+ */
275
+ this.updateBatchSellTrades = async (quotes, stxEnabled) => {
276
+ __classPrivateFieldGet(this, _BridgeController_batchSellTradesAbortController, "f")?.abort(AbortReason.GaslessTxBatchFetched);
277
+ __classPrivateFieldSet(this, _BridgeController_batchSellTradesAbortController, new AbortController(), "f");
278
+ this.update((state) => {
279
+ // Set loading status again if recommended quotes are re-ordered
280
+ state.batchSellTradesLoadingStatus = RequestStatus.LOADING;
281
+ });
282
+ try {
283
+ const batchSellTradesResponse = await fetchBatchSellTrades(quotes, stxEnabled, __classPrivateFieldGet(this, _BridgeController_batchSellTradesAbortController, "f").signal, __classPrivateFieldGet(this, _BridgeController_clientId, "f"), await __classPrivateFieldGet(this, _BridgeController_getJwt, "f").call(this), __classPrivateFieldGet(this, _BridgeController_fetchFn, "f"), __classPrivateFieldGet(this, _BridgeController_config, "f").customBridgeApiBaseUrl ?? BRIDGE_PROD_API_BASE_URL, __classPrivateFieldGet(this, _BridgeController_clientVersion, "f"));
284
+ this.update((state) => {
285
+ state.batchSellTrades = batchSellTradesResponse;
286
+ state.batchSellTradesLoadingStatus = RequestStatus.FETCHED;
287
+ });
288
+ // TODO if fee.asset.assetId is not in exchange rates, fetch the exchange rate and update the state
289
+ }
290
+ catch (error) {
291
+ // Ignore abort errors
292
+ if (error.toString().includes('AbortError') ||
293
+ error.toString().includes('FetchRequestCanceledException') ||
294
+ [
295
+ AbortReason.ResetState,
296
+ AbortReason.NewQuoteRequest,
297
+ AbortReason.QuoteRequestUpdated,
298
+ AbortReason.TransactionSubmitted,
299
+ AbortReason.GaslessTxBatchFetched,
300
+ ].includes(error)) {
301
+ // Exit the function early to prevent other state updates
302
+ return;
303
+ }
304
+ this.update((state) => {
305
+ // Reset the batch sell trades if the fetch fails to avoid showing stale data
306
+ state.batchSellTrades = DEFAULT_BRIDGE_CONTROLLER_STATE.batchSellTrades;
307
+ // Update loading status
308
+ state.batchSellTradesLoadingStatus = RequestStatus.ERROR;
309
+ });
310
+ console.log(`Failed to fetch batch sell trades`, error);
311
+ }
312
+ };
313
+ _BridgeController_trackQuoteValidationFailures.set(this, (validationFailures, featureId) => {
314
+ if (validationFailures.length === 0) {
315
+ return;
316
+ }
317
+ this.trackUnifiedSwapBridgeEvent(UnifiedSwapBridgeEventName.QuotesValidationFailed, {
318
+ feature_id: featureId,
319
+ failures: validationFailures,
320
+ location: __classPrivateFieldGet(this, _BridgeController_location, "f"),
321
+ });
322
+ });
323
+ /**
324
+ * Fetches the exchange rates for the assets in the quote request if they are not already in the state
325
+ * In addition to the selected tokens, this also fetches the native asset for the source and destination chains
326
+ *
327
+ * @param quoteRequests - The quote requests to fetch the exchange rates for
328
+ */
329
+ _BridgeController_fetchAssetExchangeRates.set(this, async (quoteRequests) => {
330
+ // Get unique assetIds for all quote requests
331
+ const assetIds = new Set(quoteRequests.flatMap((quoteRequest) => [
332
+ getAssetIdsForToken(quoteRequest.srcTokenAddress, quoteRequest.srcChainId),
333
+ getAssetIdsForToken(quoteRequest.destTokenAddress, quoteRequest.destChainId),
334
+ ].flat()));
335
+ const currency = __classPrivateFieldGet(this, _BridgeController_getUseAssetsControllerForRates, "f").call(this)
336
+ ? this.messenger.call('AssetsController:getExchangeRatesForBridge')
337
+ .currentCurrency
338
+ : this.messenger.call('CurrencyRateController:getState').currentCurrency;
339
+ if (assetIds.size === 0) {
340
+ return;
341
+ }
342
+ const pricesByAssetId = await fetchAssetPrices({
343
+ assetIds,
344
+ currencies: new Set([currency, 'usd']),
345
+ clientId: __classPrivateFieldGet(this, _BridgeController_clientId, "f"),
346
+ clientVersion: __classPrivateFieldGet(this, _BridgeController_clientVersion, "f"),
347
+ fetchFn: __classPrivateFieldGet(this, _BridgeController_fetchFn, "f"),
348
+ signal: __classPrivateFieldGet(this, _BridgeController_abortController, "f")?.signal,
349
+ });
350
+ const exchangeRates = toExchangeRates(currency, pricesByAssetId);
351
+ this.update((state) => {
352
+ state.assetExchangeRates = {
353
+ ...state.assetExchangeRates,
354
+ ...exchangeRates,
355
+ };
356
+ });
357
+ });
358
+ _BridgeController_hasInsufficientBalance.set(this, async (quoteRequest) => {
359
+ try {
360
+ const srcChainIdInHex = formatChainIdToHex(quoteRequest.srcChainId);
361
+ const provider = __classPrivateFieldGet(this, _BridgeController_instances, "m", _BridgeController_getNetworkClientByChainId).call(this, srcChainIdInHex)?.provider;
362
+ const normalizedSrcTokenAddress = formatAddressToCaipReference(quoteRequest.srcTokenAddress);
363
+ return !(provider &&
364
+ normalizedSrcTokenAddress &&
365
+ quoteRequest.srcTokenAmount &&
366
+ srcChainIdInHex &&
367
+ (await hasSufficientBalance(provider, quoteRequest.walletAddress, normalizedSrcTokenAddress, quoteRequest.srcTokenAmount, srcChainIdInHex)));
368
+ }
369
+ catch (error) {
370
+ console.warn('Failed to set insufficientBal', error);
371
+ // Fall back to true so the backend returns quotes
372
+ return true;
373
+ }
374
+ });
375
+ _BridgeController_appendInsufficientBalAndResetApproval.set(this, async (quoteRequest) => {
376
+ const isSrcChainNonEVM = isNonEvmChainId(quoteRequest.srcChainId);
377
+ const providerConfig = isSrcChainNonEVM
378
+ ? undefined
379
+ : __classPrivateFieldGet(this, _BridgeController_instances, "m", _BridgeController_getNetworkClientByChainId).call(this, formatChainIdToHex(quoteRequest.srcChainId))?.configuration;
380
+ let insufficientBal;
381
+ let resetApproval = Boolean(quoteRequest.resetApproval);
382
+ if (isSrcChainNonEVM) {
383
+ // If the source chain is not an EVM network, use value from params
384
+ insufficientBal = quoteRequest.insufficientBal;
385
+ }
386
+ else if (providerConfig?.rpcUrl?.includes('tenderly')) {
387
+ // If the rpcUrl is a tenderly fork (e2e tests), set insufficientBal=true
388
+ // The bridge-api filters out quotes if the balance on mainnet is insufficient so this override allows quotes to always be returned
389
+ insufficientBal = true;
390
+ }
391
+ else {
392
+ // Set loading status if RPC calls are made before the quotes are fetched
393
+ this.update((state) => {
394
+ state.quotesLoadingStatus = RequestStatus.LOADING;
395
+ });
396
+ resetApproval = await __classPrivateFieldGet(this, _BridgeController_shouldResetApproval, "f").call(this, quoteRequest);
397
+ // Otherwise query the src token balance from the RPC provider
398
+ insufficientBal =
399
+ quoteRequest.insufficientBal ??
400
+ (await __classPrivateFieldGet(this, _BridgeController_hasInsufficientBalance, "f").call(this, quoteRequest));
401
+ }
402
+ return {
403
+ ...quoteRequest,
404
+ insufficientBal,
405
+ resetApproval,
406
+ };
407
+ });
408
+ _BridgeController_shouldResetApproval.set(this, async (quoteRequest) => {
409
+ if (isNonEvmChainId(quoteRequest.srcChainId)) {
410
+ return false;
411
+ }
412
+ try {
413
+ const normalizedSrcTokenAddress = formatAddressToCaipReference(quoteRequest.srcTokenAddress);
414
+ if (isEthUsdt(quoteRequest.srcChainId, normalizedSrcTokenAddress)) {
415
+ const allowance = BigNumber.from(await __classPrivateFieldGet(this, _BridgeController_getUSDTMainnetAllowance, "f").call(this, quoteRequest.walletAddress, normalizedSrcTokenAddress, quoteRequest.destChainId));
416
+ return allowance.lt(quoteRequest.srcTokenAmount) && allowance.gt(0);
417
+ }
418
+ return false;
419
+ }
420
+ catch (error) {
421
+ console.warn('Failed to set resetApproval', error);
422
+ // Fall back to true so the backend returns quotes
423
+ return true;
424
+ }
425
+ });
426
+ this.stopPollingForQuotes = (reason, context) => {
427
+ this.stopAllPolling();
428
+ // If polling is stopped before quotes finish loading, track QuotesReceived
429
+ if (this.state.quotesLoadingStatus === RequestStatus.LOADING && context) {
430
+ this.trackUnifiedSwapBridgeEvent(UnifiedSwapBridgeEventName.QuotesReceived, context);
431
+ }
432
+ // Clears quotes list in state
433
+ __classPrivateFieldGet(this, _BridgeController_abortController, "f")?.abort(reason);
434
+ __classPrivateFieldGet(this, _BridgeController_batchSellTradesAbortController, "f")?.abort(reason);
435
+ };
436
+ /**
437
+ * Sets the location/entry point for the current swap or bridge flow.
438
+ * Call this when the user enters the flow so that all internally-fired
439
+ * events (InputChanged, QuotesRequested, etc.) carry the correct location.
440
+ *
441
+ * @param location - The entry point from which the user initiated the flow
442
+ */
443
+ this.setLocation = (location) => {
444
+ __classPrivateFieldSet(this, _BridgeController_location, location, "f");
445
+ };
446
+ /**
447
+ * Returns the location/entry point for the current swap or bridge flow.
448
+ *
449
+ * @returns The entry point from which the user initiated the flow
450
+ */
451
+ this.getLocation = () => {
452
+ return __classPrivateFieldGet(this, _BridgeController_location, "f");
453
+ };
454
+ this.setInputPrimaryDenomination = (inputPrimaryDenomination) => {
455
+ this.update((state) => {
456
+ state.inputPrimaryDenomination = inputPrimaryDenomination;
457
+ });
458
+ };
459
+ this.resetState = (reason = AbortReason.ResetState, quoteRequestIndex = null, context) => {
460
+ this.stopPollingForQuotes(reason, context);
461
+ this.update((state) => {
462
+ // Cannot do direct assignment to state, i.e. state = {... }, need to manually assign each field
463
+ if (quoteRequestIndex === null) {
464
+ // Clear all requests if index is null
465
+ state.quoteRequest = DEFAULT_BRIDGE_CONTROLLER_STATE.quoteRequest;
466
+ }
467
+ else {
468
+ // Otherwise only clear the specified request
469
+ state.quoteRequest = state.quoteRequest
470
+ .slice(0, quoteRequestIndex)
471
+ .concat(DEFAULT_BRIDGE_CONTROLLER_STATE.quoteRequest[0])
472
+ .concat(state.quoteRequest.slice(quoteRequestIndex + 1));
473
+ }
474
+ state.quotesInitialLoadTime =
475
+ DEFAULT_BRIDGE_CONTROLLER_STATE.quotesInitialLoadTime;
476
+ state.quotes = DEFAULT_BRIDGE_CONTROLLER_STATE.quotes;
477
+ state.quotesLastFetched =
478
+ DEFAULT_BRIDGE_CONTROLLER_STATE.quotesLastFetched;
479
+ state.quotesLoadingStatus =
480
+ DEFAULT_BRIDGE_CONTROLLER_STATE.quotesLoadingStatus;
481
+ state.quoteFetchError = DEFAULT_BRIDGE_CONTROLLER_STATE.quoteFetchError;
482
+ state.quotesRefreshCount =
483
+ DEFAULT_BRIDGE_CONTROLLER_STATE.quotesRefreshCount;
484
+ state.assetExchangeRates =
485
+ DEFAULT_BRIDGE_CONTROLLER_STATE.assetExchangeRates;
486
+ state.minimumBalanceForRentExemptionInLamports =
487
+ DEFAULT_BRIDGE_CONTROLLER_STATE.minimumBalanceForRentExemptionInLamports;
488
+ state.tokenWarnings = DEFAULT_BRIDGE_CONTROLLER_STATE.tokenWarnings;
489
+ state.tokenSecurityTypeDestination =
490
+ DEFAULT_BRIDGE_CONTROLLER_STATE.tokenSecurityTypeDestination;
491
+ state.quoteStreamComplete =
492
+ DEFAULT_BRIDGE_CONTROLLER_STATE.quoteStreamComplete;
493
+ state.batchSellTrades = DEFAULT_BRIDGE_CONTROLLER_STATE.batchSellTrades;
494
+ state.batchSellTradesLoadingStatus =
495
+ DEFAULT_BRIDGE_CONTROLLER_STATE.batchSellTradesLoadingStatus;
496
+ });
497
+ };
498
+ /**
499
+ * Sets the interval length based on the source chain
500
+ */
501
+ this.setChainIntervalLength = () => {
502
+ const { state } = this;
503
+ // Assume that BatchSell quote requests all have the same source chain
504
+ // Use the first one to determine refresh rate
505
+ const { srcChainId } = state.quoteRequest[0];
506
+ const bridgeFeatureFlags = getBridgeFeatureFlags(this.messenger);
507
+ const refreshRateOverride = srcChainId
508
+ ? bridgeFeatureFlags.chains[formatChainIdToCaip(srcChainId)]?.refreshRate
509
+ : undefined;
510
+ const defaultRefreshRate = bridgeFeatureFlags.refreshRate;
511
+ this.setIntervalLength(refreshRateOverride ?? defaultRefreshRate);
512
+ };
513
+ _BridgeController_fetchBridgeQuotes.set(this, async ({ quoteRequests, context, }) => {
514
+ __classPrivateFieldGet(this, _BridgeController_abortController, "f")?.abort(AbortReason.NewQuoteRequest);
515
+ __classPrivateFieldGet(this, _BridgeController_batchSellTradesAbortController, "f")?.abort(AbortReason.NewQuoteRequest);
516
+ __classPrivateFieldSet(this, _BridgeController_abortController, new AbortController(), "f");
517
+ const quoteTraceStartTime = Date.now();
518
+ const quoteTraceRequestId = uuid();
519
+ const quoteAbortSignal = __classPrivateFieldGet(this, _BridgeController_abortController, "f").signal;
520
+ __classPrivateFieldGet(this, _BridgeController_fetchAssetExchangeRates, "f").call(this, quoteRequests).catch((error) => console.warn('Failed to fetch asset exchange rates', error));
521
+ this.trackUnifiedSwapBridgeEvent(UnifiedSwapBridgeEventName.QuotesRequested, context);
522
+ const { sse, maxRefreshCount } = getBridgeFeatureFlags(this.messenger);
523
+ const shouldStream = sse?.enabled &&
524
+ hasMinimumRequiredVersion(__classPrivateFieldGet(this, _BridgeController_clientVersion, "f"), sse.minimumVersion);
525
+ const isBatchSellRequest = quoteRequests.length > 1;
526
+ this.update((state) => {
527
+ state.quoteFetchError = DEFAULT_BRIDGE_CONTROLLER_STATE.quoteFetchError;
528
+ state.tokenWarnings = DEFAULT_BRIDGE_CONTROLLER_STATE.tokenWarnings;
529
+ state.quoteStreamComplete =
530
+ DEFAULT_BRIDGE_CONTROLLER_STATE.quoteStreamComplete;
531
+ state.quotesLastFetched = Date.now();
532
+ state.quotesLoadingStatus = RequestStatus.LOADING;
533
+ // Prevent clients from displaying stale batch sell fees
534
+ if (quoteRequests.length > 1) {
535
+ state.batchSellTradesLoadingStatus = RequestStatus.LOADING;
536
+ state.batchSellTrades = DEFAULT_BRIDGE_CONTROLLER_STATE.batchSellTrades;
537
+ }
538
+ });
539
+ const jwt = await __classPrivateFieldGet(this, _BridgeController_getJwt, "f").call(this);
540
+ const [firstQuoteRequest] = quoteRequests;
541
+ let traceResult = 'error';
542
+ let traceName = TraceName.BatchSellQuotesFetched;
543
+ if (!isBatchSellRequest) {
544
+ traceName = isCrossChain(firstQuoteRequest.srcChainId, firstQuoteRequest.destChainId)
545
+ ? TraceName.BridgeQuotesFetched
546
+ : TraceName.SwapQuotesFetched;
547
+ }
548
+ const tracedProviders = new Set();
549
+ const traceWithoutImpact = async (request) => {
550
+ try {
551
+ await __classPrivateFieldGet(this, _BridgeController_trace, "f").call(this, request, () => undefined);
552
+ }
553
+ catch {
554
+ // Telemetry failures must not affect quote fetching or state updates.
555
+ }
556
+ };
557
+ const traceProviderFirstResult = (providerData) => {
558
+ const provider = formatProviderLabel(providerData);
559
+ if (isBatchSellRequest || tracedProviders.has(provider)) {
560
+ return;
561
+ }
562
+ tracedProviders.add(provider);
563
+ // Provider telemetry must not delay quote processing.
564
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
565
+ traceWithoutImpact({
566
+ name: TraceName.QuoteProviderFirstResult,
567
+ startTime: quoteTraceStartTime,
568
+ data: {
569
+ provider,
570
+ feature_id: context.feature_id,
571
+ request_id: quoteTraceRequestId,
572
+ swap_type: getSwapType(firstQuoteRequest.srcChainId, firstQuoteRequest.destChainId),
573
+ srcChainId: formatChainIdToCaip(firstQuoteRequest.srcChainId),
574
+ destChainId: formatChainIdToCaip(firstQuoteRequest.destChainId),
575
+ result: 'success',
576
+ },
577
+ });
578
+ };
579
+ try {
580
+ const selectedAccount = __classPrivateFieldGet(this, _BridgeController_instances, "m", _BridgeController_getMultichainSelectedAccount).call(this, firstQuoteRequest.walletAddress);
581
+ // This call is not awaited to prevent blocking quote fetching if the snap takes too long to respond
582
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
583
+ __classPrivateFieldGet(this, _BridgeController_setMinimumBalanceForRentExemptionInLamports, "f").call(this, firstQuoteRequest.srcChainId, selectedAccount?.metadata?.snap?.id);
584
+ // Use SSE if enabled and return early
585
+ if (shouldStream || isBatchSellRequest) {
586
+ const quoteCount = await __classPrivateFieldGet(this, _BridgeController_handleQuoteStreaming, "f").call(this, {
587
+ quoteRequests,
588
+ featureId: context.feature_id,
589
+ jwt,
590
+ selectedAccount,
591
+ signal: quoteAbortSignal,
592
+ traceProviderFirstResult,
593
+ });
594
+ if (quoteAbortSignal.aborted) {
595
+ traceResult = 'cancelled';
596
+ return;
597
+ }
598
+ traceResult = quoteCount > 0 ? 'success' : 'no_quotes';
599
+ }
600
+ else {
601
+ // Otherwise use regular fetch
602
+ const quotes = await this.fetchQuotes(firstQuoteRequest, context.feature_id, quoteAbortSignal);
603
+ for (const quote of quotes) {
604
+ traceProviderFirstResult(quote.quote);
605
+ }
606
+ this.update((state) => {
607
+ // Set the initial load time if this is the first fetch
608
+ if (state.quotesRefreshCount ===
609
+ DEFAULT_BRIDGE_CONTROLLER_STATE.quotesRefreshCount &&
610
+ __classPrivateFieldGet(this, _BridgeController_quotesFirstFetched, "f")) {
611
+ state.quotesInitialLoadTime = Date.now() - __classPrivateFieldGet(this, _BridgeController_quotesFirstFetched, "f");
612
+ }
613
+ state.quotes = quotes.map(toQuoteResponseV2);
614
+ state.quotesLoadingStatus = RequestStatus.FETCHED;
615
+ });
616
+ traceResult = quotes.length > 0 ? 'success' : 'no_quotes';
617
+ }
618
+ }
619
+ catch (error) {
620
+ // Reset the quotes list if the fetch fails to avoid showing stale quotes
621
+ this.update((state) => {
622
+ state.quotes = DEFAULT_BRIDGE_CONTROLLER_STATE.quotes;
623
+ });
624
+ // Ignore abort errors
625
+ if (isExpectedQuoteAbort(error, quoteAbortSignal)) {
626
+ traceResult = 'cancelled';
627
+ // Exit the function early to prevent other state updates
628
+ return;
629
+ }
630
+ // Update loading status and error message
631
+ this.update((state) => {
632
+ // The error object reference is not guaranteed to exist on mobile so reading
633
+ // the message directly could cause an error.
634
+ let errorMessage;
635
+ try {
636
+ errorMessage =
637
+ error?.message ?? error.toString();
638
+ }
639
+ catch {
640
+ // Intentionally empty
641
+ }
642
+ finally {
643
+ state.quoteFetchError = errorMessage ?? 'Unknown error';
644
+ }
645
+ state.quotesLoadingStatus = RequestStatus.ERROR;
646
+ });
647
+ // Track event and log error
648
+ this.trackUnifiedSwapBridgeEvent(UnifiedSwapBridgeEventName.QuotesError, context);
649
+ console.log(`Failed to ${shouldStream ? 'stream' : 'fetch'} bridge quotes`, error);
650
+ }
651
+ finally {
652
+ await traceWithoutImpact({
653
+ name: traceName,
654
+ startTime: quoteTraceStartTime,
655
+ data: {
656
+ srcChainId: formatChainIdToCaip(firstQuoteRequest.srcChainId),
657
+ destChainId: formatChainIdToCaip(firstQuoteRequest.destChainId),
658
+ ...(!isBatchSellRequest && {
659
+ request_id: quoteTraceRequestId,
660
+ feature_id: context.feature_id,
661
+ result: traceResult,
662
+ }),
663
+ },
664
+ });
665
+ }
666
+ // Update refresh count after fetching, validation and fee calculation have completed
667
+ this.update((state) => {
668
+ state.quotesRefreshCount += 1;
669
+ });
670
+ const hasNoFundedQuoteRequests = quoteRequests.every(({ insufficientBal }) => Boolean(insufficientBal));
671
+ if (hasNoFundedQuoteRequests
672
+ ? // If all quote requests are insufficiently funded, stop polling
673
+ // So if a BatchSell has at least 1 sufficiently funded quote request, polling continues
674
+ true
675
+ : // Otherwise continue polling until the maximum number of refreshes has been reached
676
+ this.state.quotesRefreshCount >= maxRefreshCount) {
677
+ this.stopAllPolling();
678
+ }
679
+ });
680
+ _BridgeController_handleQuoteStreaming.set(this, async ({ quoteRequests, featureId, jwt, selectedAccount, signal, traceProviderFirstResult, }) => {
681
+ /**
682
+ * Tracks the number of valid quotes received from the current stream, which is used
683
+ * to determine when to clear the quotes list and set the initial load time
684
+ */
685
+ let validQuotesCounter = 0;
686
+ /**
687
+ * Tracks all pending promises from appendFeesToQuotes calls to ensure they complete
688
+ * before setting quotesLoadingStatus to FETCHED
689
+ */
690
+ const pendingFeeAppendPromises = new Set();
691
+ await fetchBridgeQuoteStream(__classPrivateFieldGet(this, _BridgeController_fetchFn, "f"), quoteRequests, signal, featureId, __classPrivateFieldGet(this, _BridgeController_clientId, "f"), jwt, __classPrivateFieldGet(this, _BridgeController_config, "f").customBridgeApiBaseUrl ?? BRIDGE_PROD_API_BASE_URL, {
692
+ onQuoteValidationFailure: (validationFailures) => __classPrivateFieldGet(this, _BridgeController_trackQuoteValidationFailures, "f").call(this, validationFailures, featureId),
693
+ onValidQuoteReceived: async (quote) => {
694
+ const feeAppendPromise = (async () => {
695
+ const quotesWithFees = await appendFeesToQuotes(quote.chainId, [quote], this.messenger, __classPrivateFieldGet(this, _BridgeController_getLayer1GasFee, "f"), selectedAccount);
696
+ if (quotesWithFees.length > 0) {
697
+ validQuotesCounter += 1;
698
+ traceProviderFirstResult(quote.quote);
699
+ }
700
+ this.update((state) => {
701
+ // Clear previous quotes and quotes load time when first quote in the current
702
+ // polling loop is received
703
+ // This enables clients to continue showing the previous quotes while new
704
+ // quotes are loading
705
+ // Note: If there are no valid quotes until the 2nd fetch, quotesInitialLoadTime will be > refreshRate
706
+ if (validQuotesCounter === 1) {
707
+ state.quotes = DEFAULT_BRIDGE_CONTROLLER_STATE.quotes;
708
+ if (!state.quotesInitialLoadTime && __classPrivateFieldGet(this, _BridgeController_quotesFirstFetched, "f")) {
709
+ // Set the initial load time after the first quote is received
710
+ state.quotesInitialLoadTime =
711
+ Date.now() - __classPrivateFieldGet(this, _BridgeController_quotesFirstFetched, "f");
712
+ }
713
+ }
714
+ state.quotes = [...state.quotes, ...quotesWithFees];
715
+ });
716
+ })();
717
+ pendingFeeAppendPromises.add(feeAppendPromise);
718
+ feeAppendPromise
719
+ .catch((error) => {
720
+ // Catch errors to prevent them from breaking stream processing
721
+ // If appendFeesToQuotes throws, the state update never happens, so no invalid entry is added
722
+ console.error('Error appending fees to quote', error);
723
+ })
724
+ .finally(() => {
725
+ pendingFeeAppendPromises.delete(feeAppendPromise);
726
+ });
727
+ // Await the promise to ensure errors are caught and handled before continuing
728
+ // The promise is also tracked in pendingFeeAppendPromises for onClose to wait for
729
+ await feeAppendPromise;
730
+ },
731
+ onTokenWarning: (warning) => {
732
+ this.update((state) => {
733
+ const isDuplicate = state.tokenWarnings.some((existing) => existing.feature_id === warning.feature_id);
734
+ if (!isDuplicate) {
735
+ state.tokenWarnings = [...state.tokenWarnings, warning];
736
+ }
737
+ });
738
+ },
739
+ onComplete: (data) => {
740
+ this.update((state) => {
741
+ state.quoteStreamComplete = data;
742
+ });
743
+ },
744
+ onClose: async () => {
745
+ // Wait for all pending appendFeesToQuotes operations to complete
746
+ // before setting quotesLoadingStatus to FETCHED
747
+ await Promise.allSettled(Array.from(pendingFeeAppendPromises));
748
+ this.update((state) => {
749
+ // If there are no valid quotes in the current stream, clear the quotes list
750
+ // to remove quotes from the previous stream
751
+ if (validQuotesCounter === 0) {
752
+ state.quotes = DEFAULT_BRIDGE_CONTROLLER_STATE.quotes;
753
+ }
754
+ state.quotesLoadingStatus = RequestStatus.FETCHED;
755
+ });
756
+ },
757
+ }, __classPrivateFieldGet(this, _BridgeController_clientVersion, "f"));
758
+ return validQuotesCounter;
759
+ });
760
+ _BridgeController_setMinimumBalanceForRentExemptionInLamports.set(this, async (srcChainId, snapId) => {
761
+ if (!isSolanaChainId(srcChainId) || !snapId) {
762
+ return;
763
+ }
764
+ const minimumBalanceForRentExemptionInLamports = await getMinimumBalanceForRentExemptionInLamports(snapId, this.messenger);
765
+ this.update((state) => {
766
+ state.minimumBalanceForRentExemptionInLamports =
767
+ minimumBalanceForRentExemptionInLamports;
768
+ });
769
+ });
770
+ _BridgeController_getJwt.set(this, async () => {
771
+ try {
772
+ const token = await this.messenger.call('AuthenticationController:getBearerToken');
773
+ return token;
774
+ }
775
+ catch (error) {
776
+ console.error('Error getting JWT token for bridge-api request', error);
777
+ return undefined;
778
+ }
779
+ });
780
+ _BridgeController_getRequestMetadata.set(this, (quoteRequestIndex = 0) => {
781
+ const quoteRequest = this.state.quoteRequest[quoteRequestIndex];
782
+ const { walletAddress } = quoteRequest;
783
+ const accountHardwareType = getAccountHardwareType(walletAddress
784
+ ? __classPrivateFieldGet(this, _BridgeController_instances, "m", _BridgeController_getMultichainSelectedAccount).call(this, walletAddress)
785
+ : undefined);
786
+ return {
787
+ slippage_limit: quoteRequest.slippage ?? 0,
788
+ swap_type: getSwapTypeFromQuote(quoteRequest),
789
+ custom_slippage: isCustomSlippage(quoteRequest.slippage),
790
+ account_hardware_type: accountHardwareType,
791
+ is_hardware_wallet: accountHardwareType !== null,
792
+ };
793
+ });
794
+ _BridgeController_getQuoteFetchData.set(this, () => {
795
+ return {
796
+ quotes_count: this.state.quotes.length,
797
+ quotes_list: this.state.quotes.map(({ quote }) => formatProviderLabel(quote)),
798
+ initial_load_time_all_quotes: this.state.quotesInitialLoadTime ?? 0,
799
+ has_gas_included_quote: this.state.quotes.some(({ quote }) => quote.gasIncluded),
800
+ };
801
+ });
802
+ _BridgeController_getEventProperties.set(this, (eventName, propertiesFromClient, quoteRequestIndex = 0) => {
803
+ const clientProps = propertiesFromClient;
804
+ const baseProperties = {
805
+ ...propertiesFromClient,
806
+ location: clientProps?.location ?? __classPrivateFieldGet(this, _BridgeController_location, "f"),
807
+ action_type: MetricsActionType.SWAPBRIDGE_V1,
808
+ };
809
+ const inputPrimaryDenominationProperties = {
810
+ input_primary_denomination: this.state.inputPrimaryDenomination,
811
+ };
812
+ const batchSellClientChainProperties = propertiesFromClient;
813
+ const batchSellBaseProperties = {
814
+ chain_id_source: batchSellClientChainProperties.chain_id_source,
815
+ chain_id_destination: batchSellClientChainProperties.chain_id_destination,
816
+ location: clientProps?.location ?? __classPrivateFieldGet(this, _BridgeController_location, "f"),
817
+ };
818
+ const quoteRequest = this.state.quoteRequest[quoteRequestIndex];
819
+ switch (eventName) {
820
+ case UnifiedSwapBridgeEventName.ButtonClicked:
821
+ return {
822
+ ...getRequestParams(quoteRequest, this.state.tokenSecurityTypeDestination),
823
+ ...baseProperties,
824
+ };
825
+ case UnifiedSwapBridgeEventName.PageViewed:
826
+ return {
827
+ ...getRequestParams(quoteRequest, this.state.tokenSecurityTypeDestination),
828
+ ...__classPrivateFieldGet(this, _BridgeController_getRequestMetadata, "f").call(this),
829
+ ...inputPrimaryDenominationProperties,
830
+ ...baseProperties,
831
+ };
832
+ case BatchSellMetricsEventName.BatchSellTokenPageViewed:
833
+ return batchSellBaseProperties;
834
+ case BatchSellMetricsEventName.BatchSellTokenPageContinueClicked: {
835
+ const propsFromClient = propertiesFromClient;
836
+ return {
837
+ ...batchSellBaseProperties,
838
+ source_token_count: propsFromClient.source_token_addresses.length,
839
+ source_token_symbols: propsFromClient.source_token_symbols,
840
+ source_token_addresses: propsFromClient.source_token_addresses,
841
+ };
842
+ }
843
+ case BatchSellMetricsEventName.BatchSellQuotePageViewed:
844
+ case BatchSellMetricsEventName.BatchSellQuotePageReviewClicked: {
845
+ const propsFromClient = propertiesFromClient;
846
+ return {
847
+ ...batchSellBaseProperties,
848
+ source_token_count: propsFromClient.source_token_addresses.length,
849
+ source_token_symbols: propsFromClient.source_token_symbols,
850
+ source_token_addresses: propsFromClient.source_token_addresses,
851
+ destination_token_symbol: propsFromClient.destination_token_symbol,
852
+ destination_token_address: propsFromClient.destination_token_address,
853
+ usd_amount_source_tokens: propsFromClient.usd_amount_source_tokens,
854
+ usd_amount_source_total: propsFromClient.usd_amount_source_total,
855
+ source_token_slippages: propsFromClient.source_token_slippages,
856
+ };
857
+ }
858
+ case BatchSellMetricsEventName.BatchSellReviewModalSubmitted: {
859
+ const reviewModalProperties = propertiesFromClient;
860
+ return {
861
+ ...batchSellBaseProperties,
862
+ source_token_count: reviewModalProperties.source_token_addresses.length,
863
+ source_token_symbols: reviewModalProperties.source_token_symbols,
864
+ source_token_addresses: reviewModalProperties.source_token_addresses,
865
+ destination_token_symbol: reviewModalProperties.destination_token_symbol,
866
+ destination_token_address: reviewModalProperties.destination_token_address,
867
+ usd_amount_source_tokens: reviewModalProperties.usd_amount_source_tokens,
868
+ usd_amount_source_total: reviewModalProperties.usd_amount_source_total,
869
+ source_token_slippages: reviewModalProperties.source_token_slippages,
870
+ usd_quoted_gas: reviewModalProperties.usd_quoted_gas,
871
+ usd_quoted_return: reviewModalProperties.usd_quoted_return,
872
+ };
873
+ }
874
+ case UnifiedSwapBridgeEventName.FiatCryptoToggleClicked:
875
+ return {
876
+ ...getRequestParams(quoteRequest, this.state.tokenSecurityTypeDestination),
877
+ swap_type: getSwapTypeFromQuote(quoteRequest),
878
+ ...baseProperties,
879
+ };
880
+ case UnifiedSwapBridgeEventName.QuotesValidationFailed:
881
+ return {
882
+ ...getRequestParams(quoteRequest, this.state.tokenSecurityTypeDestination),
883
+ refresh_count: this.state.quotesRefreshCount,
884
+ ...baseProperties,
885
+ };
886
+ case UnifiedSwapBridgeEventName.QuotesReceived:
887
+ return {
888
+ ...getRequestParams(quoteRequest, this.state.tokenSecurityTypeDestination),
889
+ ...__classPrivateFieldGet(this, _BridgeController_getRequestMetadata, "f").call(this),
890
+ ...__classPrivateFieldGet(this, _BridgeController_getQuoteFetchData, "f").call(this),
891
+ refresh_count: this.state.quotesRefreshCount,
892
+ has_sufficient_funds: !quoteRequest.insufficientBal,
893
+ ...inputPrimaryDenominationProperties,
894
+ ...baseProperties,
895
+ };
896
+ case UnifiedSwapBridgeEventName.QuotesRequested:
897
+ return {
898
+ ...getRequestParams(quoteRequest, this.state.tokenSecurityTypeDestination),
899
+ ...__classPrivateFieldGet(this, _BridgeController_getRequestMetadata, "f").call(this),
900
+ has_sufficient_funds: !quoteRequest.insufficientBal,
901
+ ...inputPrimaryDenominationProperties,
902
+ ...baseProperties,
903
+ };
904
+ case UnifiedSwapBridgeEventName.QuotesError:
905
+ return {
906
+ ...getRequestParams(quoteRequest, this.state.tokenSecurityTypeDestination),
907
+ ...__classPrivateFieldGet(this, _BridgeController_getRequestMetadata, "f").call(this),
908
+ error_message: this.state.quoteFetchError,
909
+ has_sufficient_funds: !quoteRequest.insufficientBal,
910
+ ...baseProperties,
911
+ };
912
+ case UnifiedSwapBridgeEventName.AllQuotesOpened:
913
+ case UnifiedSwapBridgeEventName.AllQuotesSorted:
914
+ case UnifiedSwapBridgeEventName.QuoteSelected:
915
+ return {
916
+ ...getRequestParams(quoteRequest, this.state.tokenSecurityTypeDestination),
917
+ ...__classPrivateFieldGet(this, _BridgeController_getRequestMetadata, "f").call(this),
918
+ ...__classPrivateFieldGet(this, _BridgeController_getQuoteFetchData, "f").call(this),
919
+ ...baseProperties,
920
+ };
921
+ case UnifiedSwapBridgeEventName.Failed: {
922
+ // Populate the properties that the error occurred before the tx was submitted
923
+ return {
924
+ ...baseProperties,
925
+ ...getRequestParams(quoteRequest, this.state.tokenSecurityTypeDestination),
926
+ ...__classPrivateFieldGet(this, _BridgeController_getRequestMetadata, "f").call(this),
927
+ ...__classPrivateFieldGet(this, _BridgeController_getQuoteFetchData, "f").call(this),
928
+ ...propertiesFromClient,
929
+ };
930
+ }
931
+ case UnifiedSwapBridgeEventName.AssetDetailTooltipClicked:
932
+ case UnifiedSwapBridgeEventName.AssetPickerOpened:
933
+ return baseProperties;
934
+ // Inject `token_security_type_destination` from controller state so the
935
+ // field is always present on this event. `baseProperties` (which spreads
936
+ // `propertiesFromClient`) wins if the client supplies a value explicitly.
937
+ case UnifiedSwapBridgeEventName.InputSourceDestinationSwitched:
938
+ return {
939
+ token_security_type_destination: this.state.tokenSecurityTypeDestination,
940
+ ...baseProperties,
941
+ };
942
+ // These events may be published after the bridge-controller state is reset
943
+ // So the BridgeStatusController populates all the properties
944
+ case UnifiedSwapBridgeEventName.Submitted:
945
+ case UnifiedSwapBridgeEventName.Completed:
946
+ return propertiesFromClient;
947
+ case UnifiedSwapBridgeEventName.InputChanged:
948
+ default:
949
+ return baseProperties;
950
+ }
951
+ });
952
+ _BridgeController_trackInputChangedEvents.set(this, (paramsToUpdate, featureId, quoteRequestIndex = 0) => {
953
+ Object.entries(paramsToUpdate).forEach(([key, value]) => {
954
+ const inputKey = toInputChangedPropertyKey[key];
955
+ const inputValue = toInputChangedPropertyValue[key]?.(paramsToUpdate);
956
+ if (inputKey &&
957
+ inputValue !== undefined &&
958
+ this.state.quoteRequest[quoteRequestIndex] &&
959
+ value !==
960
+ this.state.quoteRequest[quoteRequestIndex][key]) {
961
+ this.trackUnifiedSwapBridgeEvent(UnifiedSwapBridgeEventName.InputChanged, {
962
+ input: inputKey,
963
+ input_value: inputValue,
964
+ location: __classPrivateFieldGet(this, _BridgeController_location, "f"),
965
+ feature_id: featureId,
966
+ });
967
+ }
968
+ });
969
+ });
970
+ /**
971
+ * This method tracks cross-chain swaps events
972
+ *
973
+ * @param eventName - The name of the event to track
974
+ * @param propertiesFromClient - Properties that can't be calculated from the event name and need to be provided by the client
975
+ * @param quoteRequestIndex - The index of the quote request to track the event for
976
+ * @example
977
+ * this.trackUnifiedSwapBridgeEvent(UnifiedSwapBridgeEventName.ActionOpened, {
978
+ * location: MetaMetricsSwapsEventSource.MainView,
979
+ * });
980
+ */
981
+ this.trackUnifiedSwapBridgeEvent = (eventName, propertiesFromClient, quoteRequestIndex = 0) => {
982
+ try {
983
+ const combinedPropertiesForEvent = __classPrivateFieldGet(this, _BridgeController_getEventProperties, "f").call(this, eventName, propertiesFromClient, quoteRequestIndex);
984
+ __classPrivateFieldGet(this, _BridgeController_trackMetaMetricsFn, "f").call(this, eventName, combinedPropertiesForEvent);
985
+ }
986
+ catch (error) {
987
+ console.error(`Error tracking cross-chain swaps MetaMetrics event ${eventName}`, error);
988
+ }
989
+ };
990
+ /**
991
+ *
992
+ * @param walletAddress - The address of the account to get the allowance for
993
+ * @param contractAddress - The address of the ERC20 token contract on mainnet
994
+ * @param destinationChainId - The chain ID of the destination network
995
+ * @returns The atomic allowance of the ERC20 token contract
996
+ */
997
+ _BridgeController_getUSDTMainnetAllowance.set(this, async (walletAddress, contractAddress, destinationChainId) => {
998
+ const networkClient = __classPrivateFieldGet(this, _BridgeController_instances, "m", _BridgeController_getNetworkClientByChainId).call(this, CHAIN_IDS.MAINNET);
999
+ const provider = networkClient?.provider;
1000
+ if (!provider) {
1001
+ throw new Error('No provider found');
1002
+ }
1003
+ const ethersProvider = new Web3Provider(provider);
1004
+ const contract = new Contract(contractAddress, abiERC20, ethersProvider);
1005
+ const spenderAddress = isCrossChain(CHAIN_IDS.MAINNET, destinationChainId)
1006
+ ? METABRIDGE_ETHEREUM_ADDRESS
1007
+ : SWAPS_CONTRACT_ADDRESSES[CHAIN_IDS.MAINNET];
1008
+ const allowance = await contract.allowance(walletAddress, spenderAddress);
1009
+ return allowance.toString();
1010
+ });
1011
+ this.setIntervalLength(REFRESH_INTERVAL_MS);
1012
+ __classPrivateFieldSet(this, _BridgeController_abortController, new AbortController(), "f");
1013
+ __classPrivateFieldSet(this, _BridgeController_getLayer1GasFee, getLayer1GasFee, "f");
1014
+ __classPrivateFieldSet(this, _BridgeController_clientId, clientId, "f");
1015
+ __classPrivateFieldSet(this, _BridgeController_clientVersion, clientVersion, "f");
1016
+ __classPrivateFieldSet(this, _BridgeController_fetchFn, fetchFn, "f");
1017
+ __classPrivateFieldSet(this, _BridgeController_trackMetaMetricsFn, trackMetaMetricsFn, "f");
1018
+ __classPrivateFieldSet(this, _BridgeController_config, config ?? {}, "f");
1019
+ __classPrivateFieldSet(this, _BridgeController_trace, traceFn ?? ((_request, fn) => fn?.()), "f");
1020
+ __classPrivateFieldSet(this, _BridgeController_getUseAssetsControllerForRates, getUseAssetsControllerForRates ?? (() => false), "f");
1021
+ this.messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
1022
+ }
1023
+ }
1024
+ _BridgeController_abortController = new WeakMap(), _BridgeController_batchSellTradesAbortController = new WeakMap(), _BridgeController_quotesFirstFetched = new WeakMap(), _BridgeController_location = new WeakMap(), _BridgeController_clientId = new WeakMap(), _BridgeController_clientVersion = new WeakMap(), _BridgeController_getLayer1GasFee = new WeakMap(), _BridgeController_fetchFn = new WeakMap(), _BridgeController_trackMetaMetricsFn = new WeakMap(), _BridgeController_trace = new WeakMap(), _BridgeController_config = new WeakMap(), _BridgeController_getUseAssetsControllerForRates = new WeakMap(), _BridgeController_trackQuoteValidationFailures = new WeakMap(), _BridgeController_fetchAssetExchangeRates = new WeakMap(), _BridgeController_hasInsufficientBalance = new WeakMap(), _BridgeController_appendInsufficientBalAndResetApproval = new WeakMap(), _BridgeController_shouldResetApproval = new WeakMap(), _BridgeController_fetchBridgeQuotes = new WeakMap(), _BridgeController_handleQuoteStreaming = new WeakMap(), _BridgeController_setMinimumBalanceForRentExemptionInLamports = new WeakMap(), _BridgeController_getJwt = new WeakMap(), _BridgeController_getRequestMetadata = new WeakMap(), _BridgeController_getQuoteFetchData = new WeakMap(), _BridgeController_getEventProperties = new WeakMap(), _BridgeController_trackInputChangedEvents = new WeakMap(), _BridgeController_getUSDTMainnetAllowance = new WeakMap(), _BridgeController_instances = new WeakSet(), _BridgeController_getMultichainSelectedAccount = function _BridgeController_getMultichainSelectedAccount(walletAddress) {
1025
+ // Assume that all quotes in a batch are for the same account
1026
+ const addressToUse = walletAddress ?? this.state.quoteRequest[0].walletAddress;
1027
+ if (!addressToUse) {
1028
+ throw new Error('Account address is required');
1029
+ }
1030
+ const selectedAccount = this.messenger.call('AccountsController:getAccountByAddress', addressToUse);
1031
+ return selectedAccount;
1032
+ }, _BridgeController_getNetworkClientByChainId = function _BridgeController_getNetworkClientByChainId(chainId) {
1033
+ const networkClientId = this.messenger.call('NetworkController:findNetworkClientIdByChainId', chainId);
1034
+ if (!networkClientId) {
1035
+ throw new Error(`No network client found for chainId: ${chainId}`);
1036
+ }
1037
+ const networkClient = this.messenger.call('NetworkController:getNetworkClientById', networkClientId);
1038
+ return networkClient;
1039
+ };
1040
+ //# sourceMappingURL=bridge-controller.mjs.map