@metamask-previews/assets-controller 14.0.2-preview-4f4c98e → 14.0.2-preview-eb263b0ee

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 (573) hide show
  1. package/CHANGELOG.md +0 -5
  2. package/dist/AssetsController-method-action-types.cjs +7 -0
  3. package/dist/AssetsController-method-action-types.cjs.map +1 -0
  4. package/dist/{AssetsController-method-action-types.d.ts → AssetsController-method-action-types.d.cts} +2 -2
  5. package/dist/AssetsController-method-action-types.d.cts.map +1 -0
  6. package/dist/AssetsController-method-action-types.d.mts +181 -0
  7. package/dist/AssetsController-method-action-types.d.mts.map +1 -0
  8. package/dist/{AssetsController-method-action-types.js → AssetsController-method-action-types.mjs} +1 -1
  9. package/dist/AssetsController-method-action-types.mjs.map +1 -0
  10. package/dist/AssetsController.cjs +2559 -0
  11. package/dist/AssetsController.cjs.map +1 -0
  12. package/dist/{AssetsController.d.ts → AssetsController.d.cts} +30 -30
  13. package/dist/AssetsController.d.cts.map +1 -0
  14. package/dist/AssetsController.d.mts +395 -0
  15. package/dist/AssetsController.d.mts.map +1 -0
  16. package/dist/{AssetsController.js → AssetsController.mjs} +29 -28
  17. package/dist/AssetsController.mjs.map +1 -0
  18. package/dist/data-sources/AbstractDataSource.cjs +111 -0
  19. package/dist/data-sources/AbstractDataSource.cjs.map +1 -0
  20. package/dist/data-sources/{AbstractDataSource.d.ts → AbstractDataSource.d.cts} +2 -2
  21. package/dist/data-sources/AbstractDataSource.d.cts.map +1 -0
  22. package/dist/data-sources/AbstractDataSource.d.mts +113 -0
  23. package/dist/data-sources/AbstractDataSource.d.mts.map +1 -0
  24. package/dist/data-sources/{AbstractDataSource.js → AbstractDataSource.mjs} +1 -1
  25. package/dist/data-sources/AbstractDataSource.mjs.map +1 -0
  26. package/dist/data-sources/AccountActivityDataSource.cjs +267 -0
  27. package/dist/data-sources/AccountActivityDataSource.cjs.map +1 -0
  28. package/dist/data-sources/{AccountActivityDataSource.d.ts → AccountActivityDataSource.d.cts} +6 -6
  29. package/dist/data-sources/AccountActivityDataSource.d.cts.map +1 -0
  30. package/dist/data-sources/AccountActivityDataSource.d.mts +80 -0
  31. package/dist/data-sources/AccountActivityDataSource.d.mts.map +1 -0
  32. package/dist/data-sources/{AccountActivityDataSource.js → AccountActivityDataSource.mjs} +11 -11
  33. package/dist/data-sources/AccountActivityDataSource.mjs.map +1 -0
  34. package/dist/data-sources/AccountsApiDataSource.cjs +586 -0
  35. package/dist/data-sources/AccountsApiDataSource.cjs.map +1 -0
  36. package/dist/data-sources/{AccountsApiDataSource.d.ts → AccountsApiDataSource.d.cts} +7 -7
  37. package/dist/data-sources/AccountsApiDataSource.d.cts.map +1 -0
  38. package/dist/data-sources/AccountsApiDataSource.d.mts +82 -0
  39. package/dist/data-sources/AccountsApiDataSource.d.mts.map +1 -0
  40. package/dist/data-sources/{AccountsApiDataSource.js → AccountsApiDataSource.mjs} +8 -7
  41. package/dist/data-sources/AccountsApiDataSource.mjs.map +1 -0
  42. package/dist/data-sources/PriceDataSource.cjs +466 -0
  43. package/dist/data-sources/PriceDataSource.cjs.map +1 -0
  44. package/dist/data-sources/{PriceDataSource.d.ts → PriceDataSource.d.cts} +5 -5
  45. package/dist/data-sources/PriceDataSource.d.cts.map +1 -0
  46. package/dist/data-sources/PriceDataSource.d.mts +100 -0
  47. package/dist/data-sources/PriceDataSource.d.mts.map +1 -0
  48. package/dist/data-sources/{PriceDataSource.js → PriceDataSource.mjs} +8 -7
  49. package/dist/data-sources/PriceDataSource.mjs.map +1 -0
  50. package/dist/data-sources/RpcDataSource.cjs +1021 -0
  51. package/dist/data-sources/RpcDataSource.cjs.map +1 -0
  52. package/dist/data-sources/{RpcDataSource.d.ts → RpcDataSource.d.cts} +10 -10
  53. package/dist/data-sources/RpcDataSource.d.cts.map +1 -0
  54. package/dist/data-sources/RpcDataSource.d.mts +174 -0
  55. package/dist/data-sources/RpcDataSource.d.mts.map +1 -0
  56. package/dist/data-sources/{RpcDataSource.js → RpcDataSource.mjs} +11 -11
  57. package/dist/data-sources/RpcDataSource.mjs.map +1 -0
  58. package/dist/data-sources/SnapDataSource.cjs +443 -0
  59. package/dist/data-sources/SnapDataSource.cjs.map +1 -0
  60. package/dist/data-sources/{SnapDataSource.d.ts → SnapDataSource.d.cts} +8 -8
  61. package/dist/data-sources/SnapDataSource.d.cts.map +1 -0
  62. package/dist/data-sources/SnapDataSource.d.mts +127 -0
  63. package/dist/data-sources/SnapDataSource.d.mts.map +1 -0
  64. package/dist/data-sources/{SnapDataSource.js → SnapDataSource.mjs} +6 -6
  65. package/dist/data-sources/SnapDataSource.mjs.map +1 -0
  66. package/dist/data-sources/StakedBalanceDataSource.cjs +616 -0
  67. package/dist/data-sources/StakedBalanceDataSource.cjs.map +1 -0
  68. package/dist/data-sources/{StakedBalanceDataSource.d.ts → StakedBalanceDataSource.d.cts} +5 -5
  69. package/dist/data-sources/StakedBalanceDataSource.d.cts.map +1 -0
  70. package/dist/data-sources/StakedBalanceDataSource.d.mts +72 -0
  71. package/dist/data-sources/StakedBalanceDataSource.d.mts.map +1 -0
  72. package/dist/data-sources/{StakedBalanceDataSource.js → StakedBalanceDataSource.mjs} +7 -7
  73. package/dist/data-sources/StakedBalanceDataSource.mjs.map +1 -0
  74. package/dist/data-sources/TokenDataSource.cjs +583 -0
  75. package/dist/data-sources/TokenDataSource.cjs.map +1 -0
  76. package/dist/data-sources/{TokenDataSource.d.ts → TokenDataSource.d.cts} +5 -5
  77. package/dist/data-sources/TokenDataSource.d.cts.map +1 -0
  78. package/dist/data-sources/TokenDataSource.d.mts +81 -0
  79. package/dist/data-sources/TokenDataSource.d.mts.map +1 -0
  80. package/dist/data-sources/{TokenDataSource.js → TokenDataSource.mjs} +8 -7
  81. package/dist/data-sources/TokenDataSource.mjs.map +1 -0
  82. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.cjs +705 -0
  83. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.cjs.map +1 -0
  84. package/dist/data-sources/evm-rpc-services/clients/{MulticallClient.d.ts → MulticallClient.d.cts} +3 -3
  85. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.cts.map +1 -0
  86. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.mts +65 -0
  87. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.mts.map +1 -0
  88. package/dist/data-sources/evm-rpc-services/clients/{MulticallClient.js → MulticallClient.mjs} +5 -5
  89. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.mjs.map +1 -0
  90. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.cjs +312 -0
  91. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.cjs.map +1 -0
  92. package/dist/data-sources/evm-rpc-services/clients/{TokensApiClient.d.ts → TokensApiClient.d.cts} +2 -2
  93. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.d.cts.map +1 -0
  94. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.d.mts +61 -0
  95. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.d.mts.map +1 -0
  96. package/dist/data-sources/evm-rpc-services/clients/{TokensApiClient.js → TokensApiClient.mjs} +2 -2
  97. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.mjs.map +1 -0
  98. package/dist/data-sources/evm-rpc-services/clients/index.cjs +10 -0
  99. package/dist/data-sources/evm-rpc-services/clients/index.cjs.map +1 -0
  100. package/dist/data-sources/evm-rpc-services/clients/index.d.cts +4 -0
  101. package/dist/data-sources/evm-rpc-services/clients/index.d.cts.map +1 -0
  102. package/dist/data-sources/evm-rpc-services/clients/index.d.mts +4 -0
  103. package/dist/data-sources/evm-rpc-services/clients/index.d.mts.map +1 -0
  104. package/dist/data-sources/evm-rpc-services/clients/index.mjs +3 -0
  105. package/dist/data-sources/evm-rpc-services/clients/index.mjs.map +1 -0
  106. package/dist/data-sources/evm-rpc-services/index.cjs +17 -0
  107. package/dist/data-sources/evm-rpc-services/index.cjs.map +1 -0
  108. package/dist/data-sources/evm-rpc-services/{index.d.ts → index.d.cts} +5 -5
  109. package/dist/data-sources/evm-rpc-services/index.d.cts.map +1 -0
  110. package/dist/data-sources/evm-rpc-services/index.d.mts +5 -0
  111. package/dist/data-sources/evm-rpc-services/index.d.mts.map +1 -0
  112. package/dist/data-sources/evm-rpc-services/index.mjs +4 -0
  113. package/dist/data-sources/evm-rpc-services/index.mjs.map +1 -0
  114. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.cjs +247 -0
  115. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.cjs.map +1 -0
  116. package/dist/data-sources/evm-rpc-services/services/{BalanceFetcher.d.ts → BalanceFetcher.d.cts} +11 -11
  117. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.cts.map +1 -0
  118. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.mts +96 -0
  119. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.mts.map +1 -0
  120. package/dist/data-sources/evm-rpc-services/services/{BalanceFetcher.js → BalanceFetcher.mjs} +5 -5
  121. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.mjs.map +1 -0
  122. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.cjs +132 -0
  123. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.cjs.map +1 -0
  124. package/dist/data-sources/evm-rpc-services/services/{StakedBalanceFetcher.d.ts → StakedBalanceFetcher.d.cts} +14 -13
  125. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.d.cts.map +1 -0
  126. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.d.mts +81 -0
  127. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.d.mts.map +1 -0
  128. package/dist/data-sources/evm-rpc-services/services/{StakedBalanceFetcher.js → StakedBalanceFetcher.mjs} +6 -5
  129. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.mjs.map +1 -0
  130. package/dist/data-sources/evm-rpc-services/services/TokenDetector.cjs +230 -0
  131. package/dist/data-sources/evm-rpc-services/services/TokenDetector.cjs.map +1 -0
  132. package/dist/data-sources/evm-rpc-services/services/{TokenDetector.d.ts → TokenDetector.d.cts} +12 -12
  133. package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.cts.map +1 -0
  134. package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.mts +78 -0
  135. package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.mts.map +1 -0
  136. package/dist/data-sources/evm-rpc-services/services/{TokenDetector.js → TokenDetector.mjs} +4 -4
  137. package/dist/data-sources/evm-rpc-services/services/TokenDetector.mjs.map +1 -0
  138. package/dist/data-sources/evm-rpc-services/services/index.cjs +13 -0
  139. package/dist/data-sources/evm-rpc-services/services/index.cjs.map +1 -0
  140. package/dist/data-sources/evm-rpc-services/services/{index.d.ts → index.d.cts} +4 -4
  141. package/dist/data-sources/evm-rpc-services/services/index.d.cts.map +1 -0
  142. package/dist/data-sources/evm-rpc-services/services/index.d.mts +4 -0
  143. package/dist/data-sources/evm-rpc-services/services/index.d.mts.map +1 -0
  144. package/dist/data-sources/evm-rpc-services/services/index.mjs +4 -0
  145. package/dist/data-sources/evm-rpc-services/services/index.mjs.map +1 -0
  146. package/dist/data-sources/evm-rpc-services/types/assets.cjs +3 -0
  147. package/dist/data-sources/evm-rpc-services/types/assets.cjs.map +1 -0
  148. package/dist/data-sources/evm-rpc-services/types/{assets.d.ts → assets.d.cts} +3 -3
  149. package/dist/data-sources/evm-rpc-services/types/assets.d.cts.map +1 -0
  150. package/dist/data-sources/evm-rpc-services/types/assets.d.mts +53 -0
  151. package/dist/data-sources/evm-rpc-services/types/assets.d.mts.map +1 -0
  152. package/dist/data-sources/evm-rpc-services/types/assets.mjs +2 -0
  153. package/dist/data-sources/evm-rpc-services/types/assets.mjs.map +1 -0
  154. package/dist/data-sources/evm-rpc-services/types/config.cjs +3 -0
  155. package/dist/data-sources/evm-rpc-services/types/config.cjs.map +1 -0
  156. package/dist/data-sources/evm-rpc-services/types/{config.d.ts → config.d.cts} +2 -2
  157. package/dist/data-sources/evm-rpc-services/types/config.d.cts.map +1 -0
  158. package/dist/data-sources/evm-rpc-services/types/config.d.mts +18 -0
  159. package/dist/data-sources/evm-rpc-services/types/config.d.mts.map +1 -0
  160. package/dist/data-sources/evm-rpc-services/types/config.mjs +2 -0
  161. package/dist/data-sources/evm-rpc-services/types/config.mjs.map +1 -0
  162. package/dist/data-sources/evm-rpc-services/types/core.cjs +3 -0
  163. package/dist/data-sources/evm-rpc-services/types/core.cjs.map +1 -0
  164. package/dist/data-sources/evm-rpc-services/types/{core.d.ts → core.d.cts} +2 -2
  165. package/dist/data-sources/evm-rpc-services/types/core.d.cts.map +1 -0
  166. package/dist/data-sources/evm-rpc-services/types/core.d.mts +19 -0
  167. package/dist/data-sources/evm-rpc-services/types/core.d.mts.map +1 -0
  168. package/dist/data-sources/evm-rpc-services/types/core.mjs +2 -0
  169. package/dist/data-sources/evm-rpc-services/types/core.mjs.map +1 -0
  170. package/dist/data-sources/evm-rpc-services/types/index.cjs +3 -0
  171. package/dist/data-sources/evm-rpc-services/types/index.cjs.map +1 -0
  172. package/dist/data-sources/evm-rpc-services/types/index.d.cts +7 -0
  173. package/dist/data-sources/evm-rpc-services/types/index.d.cts.map +1 -0
  174. package/dist/data-sources/evm-rpc-services/types/index.d.mts +7 -0
  175. package/dist/data-sources/evm-rpc-services/types/index.d.mts.map +1 -0
  176. package/dist/data-sources/evm-rpc-services/types/index.mjs +2 -0
  177. package/dist/data-sources/evm-rpc-services/types/index.mjs.map +1 -0
  178. package/dist/data-sources/evm-rpc-services/types/multicall.cjs +3 -0
  179. package/dist/data-sources/evm-rpc-services/types/multicall.cjs.map +1 -0
  180. package/dist/data-sources/evm-rpc-services/types/{multicall.d.ts → multicall.d.cts} +2 -2
  181. package/dist/data-sources/evm-rpc-services/types/multicall.d.cts.map +1 -0
  182. package/dist/data-sources/evm-rpc-services/types/multicall.d.mts +24 -0
  183. package/dist/data-sources/evm-rpc-services/types/multicall.d.mts.map +1 -0
  184. package/dist/data-sources/evm-rpc-services/types/multicall.mjs +2 -0
  185. package/dist/data-sources/evm-rpc-services/types/multicall.mjs.map +1 -0
  186. package/dist/data-sources/evm-rpc-services/types/services.cjs +3 -0
  187. package/dist/data-sources/evm-rpc-services/types/services.cjs.map +1 -0
  188. package/dist/data-sources/evm-rpc-services/types/{services.d.ts → services.d.cts} +3 -3
  189. package/dist/data-sources/evm-rpc-services/types/services.d.cts.map +1 -0
  190. package/dist/data-sources/evm-rpc-services/types/services.d.mts +70 -0
  191. package/dist/data-sources/evm-rpc-services/types/services.d.mts.map +1 -0
  192. package/dist/data-sources/evm-rpc-services/types/services.mjs +2 -0
  193. package/dist/data-sources/evm-rpc-services/types/services.mjs.map +1 -0
  194. package/dist/data-sources/evm-rpc-services/types/state.cjs +3 -0
  195. package/dist/data-sources/evm-rpc-services/types/state.cjs.map +1 -0
  196. package/dist/data-sources/evm-rpc-services/types/{state.d.ts → state.d.cts} +2 -2
  197. package/dist/data-sources/evm-rpc-services/types/state.d.cts.map +1 -0
  198. package/dist/data-sources/evm-rpc-services/types/state.d.mts +58 -0
  199. package/dist/data-sources/evm-rpc-services/types/state.d.mts.map +1 -0
  200. package/dist/data-sources/evm-rpc-services/types/state.mjs +2 -0
  201. package/dist/data-sources/evm-rpc-services/types/state.mjs.map +1 -0
  202. package/dist/data-sources/evm-rpc-services/utils/assets.cjs +9 -0
  203. package/dist/data-sources/evm-rpc-services/utils/assets.cjs.map +1 -0
  204. package/dist/data-sources/evm-rpc-services/utils/{assets.d.ts → assets.d.cts} +2 -2
  205. package/dist/data-sources/evm-rpc-services/utils/assets.d.cts.map +1 -0
  206. package/dist/data-sources/evm-rpc-services/utils/assets.d.mts +3 -0
  207. package/dist/data-sources/evm-rpc-services/utils/assets.d.mts.map +1 -0
  208. package/dist/data-sources/evm-rpc-services/utils/{assets.js → assets.mjs} +2 -2
  209. package/dist/data-sources/evm-rpc-services/utils/assets.mjs.map +1 -0
  210. package/dist/data-sources/evm-rpc-services/utils/batch.cjs +45 -0
  211. package/dist/data-sources/evm-rpc-services/utils/batch.cjs.map +1 -0
  212. package/dist/data-sources/evm-rpc-services/utils/{batch.d.ts → batch.d.cts} +1 -1
  213. package/dist/data-sources/evm-rpc-services/utils/batch.d.cts.map +1 -0
  214. package/dist/data-sources/evm-rpc-services/utils/batch.d.mts +28 -0
  215. package/dist/data-sources/evm-rpc-services/utils/batch.d.mts.map +1 -0
  216. package/dist/data-sources/evm-rpc-services/utils/{batch.js → batch.mjs} +1 -1
  217. package/dist/data-sources/evm-rpc-services/utils/batch.mjs.map +1 -0
  218. package/dist/data-sources/evm-rpc-services/utils/index.cjs +15 -0
  219. package/dist/data-sources/evm-rpc-services/utils/index.cjs.map +1 -0
  220. package/dist/data-sources/evm-rpc-services/utils/index.d.cts +4 -0
  221. package/dist/data-sources/evm-rpc-services/utils/index.d.cts.map +1 -0
  222. package/dist/data-sources/evm-rpc-services/utils/index.d.mts +4 -0
  223. package/dist/data-sources/evm-rpc-services/utils/index.d.mts.map +1 -0
  224. package/dist/data-sources/evm-rpc-services/utils/index.mjs +4 -0
  225. package/dist/data-sources/evm-rpc-services/utils/index.mjs.map +1 -0
  226. package/dist/data-sources/evm-rpc-services/utils/parsing.cjs +47 -0
  227. package/dist/data-sources/evm-rpc-services/utils/parsing.cjs.map +1 -0
  228. package/dist/data-sources/evm-rpc-services/utils/{parsing.d.ts → parsing.d.cts} +3 -3
  229. package/dist/data-sources/evm-rpc-services/utils/parsing.d.cts.map +1 -0
  230. package/dist/data-sources/evm-rpc-services/utils/parsing.d.mts +25 -0
  231. package/dist/data-sources/evm-rpc-services/utils/parsing.d.mts.map +1 -0
  232. package/dist/data-sources/evm-rpc-services/utils/{parsing.js → parsing.mjs} +3 -3
  233. package/dist/data-sources/evm-rpc-services/utils/parsing.mjs.map +1 -0
  234. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.cjs +68 -0
  235. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.cjs.map +1 -0
  236. package/dist/data-sources/evm-rpc-services/utils/{staking-contracts.d.ts → staking-contracts.d.cts} +1 -1
  237. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.cts.map +1 -0
  238. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.mts +25 -0
  239. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.mts.map +1 -0
  240. package/dist/data-sources/evm-rpc-services/utils/{staking-contracts.js → staking-contracts.mjs} +3 -3
  241. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.mjs.map +1 -0
  242. package/dist/data-sources/index.cjs +30 -0
  243. package/dist/data-sources/index.cjs.map +1 -0
  244. package/dist/data-sources/{index.d.ts → index.d.cts} +9 -9
  245. package/dist/data-sources/index.d.cts.map +1 -0
  246. package/dist/data-sources/index.d.mts +9 -0
  247. package/dist/data-sources/index.d.mts.map +1 -0
  248. package/dist/data-sources/index.mjs +14 -0
  249. package/dist/data-sources/index.mjs.map +1 -0
  250. package/dist/defaults.cjs +125 -0
  251. package/dist/defaults.cjs.map +1 -0
  252. package/dist/{defaults.d.ts → defaults.d.cts} +2 -2
  253. package/dist/defaults.d.cts.map +1 -0
  254. package/dist/defaults.d.mts +50 -0
  255. package/dist/defaults.d.mts.map +1 -0
  256. package/dist/{defaults.js → defaults.mjs} +1 -1
  257. package/dist/defaults.mjs.map +1 -0
  258. package/dist/errors.cjs +25 -0
  259. package/dist/errors.cjs.map +1 -0
  260. package/dist/{errors.d.ts → errors.d.cts} +1 -1
  261. package/dist/errors.d.cts.map +1 -0
  262. package/dist/errors.d.mts +25 -0
  263. package/dist/errors.d.mts.map +1 -0
  264. package/dist/{errors.js → errors.mjs} +1 -1
  265. package/dist/errors.mjs.map +1 -0
  266. package/dist/index.cjs +67 -0
  267. package/dist/index.cjs.map +1 -0
  268. package/dist/{index.d.ts → index.d.cts} +26 -26
  269. package/dist/index.d.cts.map +1 -0
  270. package/dist/index.d.mts +26 -0
  271. package/dist/index.d.mts.map +1 -0
  272. package/dist/{index.js → index.mjs} +13 -13
  273. package/dist/index.mjs.map +1 -0
  274. package/dist/logger.cjs +7 -0
  275. package/dist/logger.cjs.map +1 -0
  276. package/dist/logger.d.cts +5 -0
  277. package/dist/logger.d.cts.map +1 -0
  278. package/dist/logger.d.mts +5 -0
  279. package/dist/logger.d.mts.map +1 -0
  280. package/dist/logger.mjs +4 -0
  281. package/dist/logger.mjs.map +1 -0
  282. package/dist/middlewares/CustomAssetGraduationMiddleware.cjs +132 -0
  283. package/dist/middlewares/CustomAssetGraduationMiddleware.cjs.map +1 -0
  284. package/dist/middlewares/{CustomAssetGraduationMiddleware.d.ts → CustomAssetGraduationMiddleware.d.cts} +2 -2
  285. package/dist/middlewares/CustomAssetGraduationMiddleware.d.cts.map +1 -0
  286. package/dist/middlewares/CustomAssetGraduationMiddleware.d.mts +32 -0
  287. package/dist/middlewares/CustomAssetGraduationMiddleware.d.mts.map +1 -0
  288. package/dist/middlewares/{CustomAssetGraduationMiddleware.js → CustomAssetGraduationMiddleware.mjs} +5 -5
  289. package/dist/middlewares/CustomAssetGraduationMiddleware.mjs.map +1 -0
  290. package/dist/middlewares/DetectionMiddleware.cjs +154 -0
  291. package/dist/middlewares/DetectionMiddleware.cjs.map +1 -0
  292. package/dist/middlewares/{DetectionMiddleware.d.ts → DetectionMiddleware.d.cts} +2 -2
  293. package/dist/middlewares/DetectionMiddleware.d.cts.map +1 -0
  294. package/dist/middlewares/DetectionMiddleware.d.mts +40 -0
  295. package/dist/middlewares/DetectionMiddleware.d.mts.map +1 -0
  296. package/dist/middlewares/{DetectionMiddleware.js → DetectionMiddleware.mjs} +4 -4
  297. package/dist/middlewares/DetectionMiddleware.mjs.map +1 -0
  298. package/dist/middlewares/ParallelMiddleware.cjs +263 -0
  299. package/dist/middlewares/ParallelMiddleware.cjs.map +1 -0
  300. package/dist/middlewares/{ParallelMiddleware.d.ts → ParallelMiddleware.d.cts} +2 -2
  301. package/dist/middlewares/ParallelMiddleware.d.cts.map +1 -0
  302. package/dist/middlewares/ParallelMiddleware.d.mts +41 -0
  303. package/dist/middlewares/ParallelMiddleware.d.mts.map +1 -0
  304. package/dist/middlewares/{ParallelMiddleware.js → ParallelMiddleware.mjs} +9 -2
  305. package/dist/middlewares/{ParallelMiddleware.js.map → ParallelMiddleware.mjs.map} +1 -1
  306. package/dist/middlewares/RpcFallbackMiddleware.cjs +90 -0
  307. package/dist/middlewares/RpcFallbackMiddleware.cjs.map +1 -0
  308. package/dist/middlewares/{RpcFallbackMiddleware.d.ts → RpcFallbackMiddleware.d.cts} +2 -2
  309. package/dist/middlewares/RpcFallbackMiddleware.d.cts.map +1 -0
  310. package/dist/middlewares/RpcFallbackMiddleware.d.mts +23 -0
  311. package/dist/middlewares/RpcFallbackMiddleware.d.mts.map +1 -0
  312. package/dist/middlewares/{RpcFallbackMiddleware.js → RpcFallbackMiddleware.mjs} +4 -4
  313. package/dist/middlewares/RpcFallbackMiddleware.mjs.map +1 -0
  314. package/dist/middlewares/index.cjs +14 -0
  315. package/dist/middlewares/index.cjs.map +1 -0
  316. package/dist/middlewares/index.d.cts +9 -0
  317. package/dist/middlewares/index.d.cts.map +1 -0
  318. package/dist/middlewares/index.d.mts +9 -0
  319. package/dist/middlewares/index.d.mts.map +1 -0
  320. package/dist/middlewares/index.mjs +5 -0
  321. package/dist/middlewares/index.mjs.map +1 -0
  322. package/dist/migrations/healAssetsInfoMetadata.cjs +385 -0
  323. package/dist/migrations/healAssetsInfoMetadata.cjs.map +1 -0
  324. package/dist/migrations/{healAssetsInfoMetadata.d.ts → healAssetsInfoMetadata.d.cts} +4 -4
  325. package/dist/migrations/healAssetsInfoMetadata.d.cts.map +1 -0
  326. package/dist/migrations/healAssetsInfoMetadata.d.mts +106 -0
  327. package/dist/migrations/healAssetsInfoMetadata.d.mts.map +1 -0
  328. package/dist/migrations/{healAssetsInfoMetadata.js → healAssetsInfoMetadata.mjs} +5 -4
  329. package/dist/migrations/healAssetsInfoMetadata.mjs.map +1 -0
  330. package/dist/selectors/balance.cjs +532 -0
  331. package/dist/selectors/balance.cjs.map +1 -0
  332. package/dist/selectors/{balance.d.ts → balance.d.cts} +6 -6
  333. package/dist/selectors/balance.d.cts.map +1 -0
  334. package/dist/selectors/balance.d.mts +103 -0
  335. package/dist/selectors/balance.d.mts.map +1 -0
  336. package/dist/selectors/{balance.js → balance.mjs} +5 -5
  337. package/dist/selectors/balance.mjs.map +1 -0
  338. package/dist/types.cjs +39 -0
  339. package/dist/types.cjs.map +1 -0
  340. package/dist/{types.d.ts → types.d.cts} +4 -4
  341. package/dist/types.d.cts.map +1 -0
  342. package/dist/types.d.mts +533 -0
  343. package/dist/types.d.mts.map +1 -0
  344. package/dist/{types.js → types.mjs} +1 -1
  345. package/dist/types.mjs.map +1 -0
  346. package/dist/utils/constants.cjs +5 -0
  347. package/dist/utils/constants.cjs.map +1 -0
  348. package/dist/utils/constants.d.cts +2 -0
  349. package/dist/utils/constants.d.cts.map +1 -0
  350. package/dist/utils/constants.d.mts +2 -0
  351. package/dist/utils/constants.d.mts.map +1 -0
  352. package/dist/utils/{constants.js → constants.mjs} +1 -1
  353. package/dist/utils/constants.mjs.map +1 -0
  354. package/dist/utils/customAssetsRpcSupplement.cjs +72 -0
  355. package/dist/utils/customAssetsRpcSupplement.cjs.map +1 -0
  356. package/dist/utils/{customAssetsRpcSupplement.d.ts → customAssetsRpcSupplement.d.cts} +2 -2
  357. package/dist/utils/customAssetsRpcSupplement.d.cts.map +1 -0
  358. package/dist/utils/customAssetsRpcSupplement.d.mts +60 -0
  359. package/dist/utils/customAssetsRpcSupplement.d.mts.map +1 -0
  360. package/dist/utils/{customAssetsRpcSupplement.js → customAssetsRpcSupplement.mjs} +2 -2
  361. package/dist/utils/customAssetsRpcSupplement.mjs.map +1 -0
  362. package/dist/utils/dedupingBatchFetcher.cjs +168 -0
  363. package/dist/utils/dedupingBatchFetcher.cjs.map +1 -0
  364. package/dist/utils/{dedupingBatchFetcher.d.ts → dedupingBatchFetcher.d.cts} +1 -1
  365. package/dist/utils/dedupingBatchFetcher.d.cts.map +1 -0
  366. package/dist/utils/dedupingBatchFetcher.d.mts +72 -0
  367. package/dist/utils/dedupingBatchFetcher.d.mts.map +1 -0
  368. package/dist/utils/{dedupingBatchFetcher.js → dedupingBatchFetcher.mjs} +1 -1
  369. package/dist/utils/dedupingBatchFetcher.mjs.map +1 -0
  370. package/dist/utils/fetchWithTimeout.cjs +30 -0
  371. package/dist/utils/fetchWithTimeout.cjs.map +1 -0
  372. package/dist/utils/{fetchWithTimeout.d.ts → fetchWithTimeout.d.cts} +1 -1
  373. package/dist/utils/fetchWithTimeout.d.cts.map +1 -0
  374. package/dist/utils/fetchWithTimeout.d.mts +11 -0
  375. package/dist/utils/fetchWithTimeout.d.mts.map +1 -0
  376. package/dist/utils/{fetchWithTimeout.js → fetchWithTimeout.mjs} +1 -1
  377. package/dist/utils/fetchWithTimeout.mjs.map +1 -0
  378. package/dist/utils/formatExchangeRatesForBridge.cjs +161 -0
  379. package/dist/utils/formatExchangeRatesForBridge.cjs.map +1 -0
  380. package/dist/utils/{formatExchangeRatesForBridge.d.ts → formatExchangeRatesForBridge.d.cts} +3 -3
  381. package/dist/utils/formatExchangeRatesForBridge.d.cts.map +1 -0
  382. package/dist/utils/formatExchangeRatesForBridge.d.mts +43 -0
  383. package/dist/utils/formatExchangeRatesForBridge.d.mts.map +1 -0
  384. package/dist/utils/{formatExchangeRatesForBridge.js → formatExchangeRatesForBridge.mjs} +7 -6
  385. package/dist/utils/formatExchangeRatesForBridge.mjs.map +1 -0
  386. package/dist/utils/formatStateForTransactionPay.cjs +174 -0
  387. package/dist/utils/formatStateForTransactionPay.cjs.map +1 -0
  388. package/dist/utils/{formatStateForTransactionPay.d.ts → formatStateForTransactionPay.d.cts} +3 -3
  389. package/dist/utils/formatStateForTransactionPay.d.cts.map +1 -0
  390. package/dist/utils/formatStateForTransactionPay.d.mts +72 -0
  391. package/dist/utils/formatStateForTransactionPay.d.mts.map +1 -0
  392. package/dist/utils/{formatStateForTransactionPay.js → formatStateForTransactionPay.mjs} +8 -7
  393. package/dist/utils/formatStateForTransactionPay.mjs.map +1 -0
  394. package/dist/utils/index.cjs +21 -0
  395. package/dist/utils/index.cjs.map +1 -0
  396. package/dist/utils/index.d.cts +9 -0
  397. package/dist/utils/index.d.cts.map +1 -0
  398. package/dist/utils/index.d.mts +9 -0
  399. package/dist/utils/index.d.mts.map +1 -0
  400. package/dist/utils/index.mjs +7 -0
  401. package/dist/utils/index.mjs.map +1 -0
  402. package/dist/utils/native-assets.cjs +64 -0
  403. package/dist/utils/native-assets.cjs.map +1 -0
  404. package/dist/utils/{native-assets.d.ts → native-assets.d.cts} +2 -2
  405. package/dist/utils/native-assets.d.cts.map +1 -0
  406. package/dist/utils/native-assets.d.mts +19 -0
  407. package/dist/utils/native-assets.d.mts.map +1 -0
  408. package/dist/utils/{native-assets.js → native-assets.mjs} +5 -5
  409. package/dist/utils/native-assets.mjs.map +1 -0
  410. package/dist/utils/normalizeAmountString.cjs +64 -0
  411. package/dist/utils/normalizeAmountString.cjs.map +1 -0
  412. package/dist/utils/{normalizeAmountString.d.ts → normalizeAmountString.d.cts} +1 -1
  413. package/dist/utils/normalizeAmountString.d.cts.map +1 -0
  414. package/dist/utils/normalizeAmountString.d.mts +35 -0
  415. package/dist/utils/normalizeAmountString.d.mts.map +1 -0
  416. package/dist/utils/{normalizeAmountString.js → normalizeAmountString.mjs} +2 -2
  417. package/dist/utils/normalizeAmountString.mjs.map +1 -0
  418. package/dist/utils/normalizeAssetId.cjs +60 -0
  419. package/dist/utils/normalizeAssetId.cjs.map +1 -0
  420. package/dist/utils/{normalizeAssetId.d.ts → normalizeAssetId.d.cts} +3 -3
  421. package/dist/utils/normalizeAssetId.d.cts.map +1 -0
  422. package/dist/utils/normalizeAssetId.d.mts +32 -0
  423. package/dist/utils/normalizeAssetId.d.mts.map +1 -0
  424. package/dist/utils/{normalizeAssetId.js → normalizeAssetId.mjs} +11 -4
  425. package/dist/utils/normalizeAssetId.mjs.map +1 -0
  426. package/dist/utils/snaps-assets-migration.cjs +171 -0
  427. package/dist/utils/snaps-assets-migration.cjs.map +1 -0
  428. package/dist/utils/{snaps-assets-migration.d.ts → snaps-assets-migration.d.cts} +5 -5
  429. package/dist/utils/snaps-assets-migration.d.cts.map +1 -0
  430. package/dist/utils/snaps-assets-migration.d.mts +113 -0
  431. package/dist/utils/snaps-assets-migration.d.mts.map +1 -0
  432. package/dist/utils/{snaps-assets-migration.js → snaps-assets-migration.mjs} +2 -2
  433. package/dist/utils/snaps-assets-migration.mjs.map +1 -0
  434. package/dist/utils/trace.cjs +120 -0
  435. package/dist/utils/trace.cjs.map +1 -0
  436. package/dist/utils/{trace.d.ts → trace.d.cts} +2 -2
  437. package/dist/utils/trace.d.cts.map +1 -0
  438. package/dist/utils/trace.d.mts +52 -0
  439. package/dist/utils/trace.d.mts.map +1 -0
  440. package/dist/utils/{trace.js → trace.mjs} +1 -1
  441. package/dist/utils/trace.mjs.map +1 -0
  442. package/package.json +18 -15
  443. package/dist/AssetsController-method-action-types.d.ts.map +0 -1
  444. package/dist/AssetsController-method-action-types.js.map +0 -1
  445. package/dist/AssetsController.d.ts.map +0 -1
  446. package/dist/AssetsController.js.map +0 -1
  447. package/dist/data-sources/AbstractDataSource.d.ts.map +0 -1
  448. package/dist/data-sources/AbstractDataSource.js.map +0 -1
  449. package/dist/data-sources/AccountActivityDataSource.d.ts.map +0 -1
  450. package/dist/data-sources/AccountActivityDataSource.js.map +0 -1
  451. package/dist/data-sources/AccountsApiDataSource.d.ts.map +0 -1
  452. package/dist/data-sources/AccountsApiDataSource.js.map +0 -1
  453. package/dist/data-sources/PriceDataSource.d.ts.map +0 -1
  454. package/dist/data-sources/PriceDataSource.js.map +0 -1
  455. package/dist/data-sources/RpcDataSource.d.ts.map +0 -1
  456. package/dist/data-sources/RpcDataSource.js.map +0 -1
  457. package/dist/data-sources/SnapDataSource.d.ts.map +0 -1
  458. package/dist/data-sources/SnapDataSource.js.map +0 -1
  459. package/dist/data-sources/StakedBalanceDataSource.d.ts.map +0 -1
  460. package/dist/data-sources/StakedBalanceDataSource.js.map +0 -1
  461. package/dist/data-sources/TokenDataSource.d.ts.map +0 -1
  462. package/dist/data-sources/TokenDataSource.js.map +0 -1
  463. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.ts.map +0 -1
  464. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.js.map +0 -1
  465. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.d.ts.map +0 -1
  466. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.js.map +0 -1
  467. package/dist/data-sources/evm-rpc-services/clients/index.d.ts +0 -4
  468. package/dist/data-sources/evm-rpc-services/clients/index.d.ts.map +0 -1
  469. package/dist/data-sources/evm-rpc-services/clients/index.js +0 -3
  470. package/dist/data-sources/evm-rpc-services/clients/index.js.map +0 -1
  471. package/dist/data-sources/evm-rpc-services/index.d.ts.map +0 -1
  472. package/dist/data-sources/evm-rpc-services/index.js +0 -4
  473. package/dist/data-sources/evm-rpc-services/index.js.map +0 -1
  474. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.ts.map +0 -1
  475. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.js.map +0 -1
  476. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.d.ts.map +0 -1
  477. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.js.map +0 -1
  478. package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.ts.map +0 -1
  479. package/dist/data-sources/evm-rpc-services/services/TokenDetector.js.map +0 -1
  480. package/dist/data-sources/evm-rpc-services/services/index.d.ts.map +0 -1
  481. package/dist/data-sources/evm-rpc-services/services/index.js +0 -4
  482. package/dist/data-sources/evm-rpc-services/services/index.js.map +0 -1
  483. package/dist/data-sources/evm-rpc-services/types/assets.d.ts.map +0 -1
  484. package/dist/data-sources/evm-rpc-services/types/assets.js +0 -2
  485. package/dist/data-sources/evm-rpc-services/types/assets.js.map +0 -1
  486. package/dist/data-sources/evm-rpc-services/types/config.d.ts.map +0 -1
  487. package/dist/data-sources/evm-rpc-services/types/config.js +0 -2
  488. package/dist/data-sources/evm-rpc-services/types/config.js.map +0 -1
  489. package/dist/data-sources/evm-rpc-services/types/core.d.ts.map +0 -1
  490. package/dist/data-sources/evm-rpc-services/types/core.js +0 -2
  491. package/dist/data-sources/evm-rpc-services/types/core.js.map +0 -1
  492. package/dist/data-sources/evm-rpc-services/types/index.d.ts +0 -7
  493. package/dist/data-sources/evm-rpc-services/types/index.d.ts.map +0 -1
  494. package/dist/data-sources/evm-rpc-services/types/index.js +0 -2
  495. package/dist/data-sources/evm-rpc-services/types/index.js.map +0 -1
  496. package/dist/data-sources/evm-rpc-services/types/multicall.d.ts.map +0 -1
  497. package/dist/data-sources/evm-rpc-services/types/multicall.js +0 -2
  498. package/dist/data-sources/evm-rpc-services/types/multicall.js.map +0 -1
  499. package/dist/data-sources/evm-rpc-services/types/services.d.ts.map +0 -1
  500. package/dist/data-sources/evm-rpc-services/types/services.js +0 -2
  501. package/dist/data-sources/evm-rpc-services/types/services.js.map +0 -1
  502. package/dist/data-sources/evm-rpc-services/types/state.d.ts.map +0 -1
  503. package/dist/data-sources/evm-rpc-services/types/state.js +0 -2
  504. package/dist/data-sources/evm-rpc-services/types/state.js.map +0 -1
  505. package/dist/data-sources/evm-rpc-services/utils/assets.d.ts.map +0 -1
  506. package/dist/data-sources/evm-rpc-services/utils/assets.js.map +0 -1
  507. package/dist/data-sources/evm-rpc-services/utils/batch.d.ts.map +0 -1
  508. package/dist/data-sources/evm-rpc-services/utils/batch.js.map +0 -1
  509. package/dist/data-sources/evm-rpc-services/utils/index.d.ts +0 -4
  510. package/dist/data-sources/evm-rpc-services/utils/index.d.ts.map +0 -1
  511. package/dist/data-sources/evm-rpc-services/utils/index.js +0 -4
  512. package/dist/data-sources/evm-rpc-services/utils/index.js.map +0 -1
  513. package/dist/data-sources/evm-rpc-services/utils/parsing.d.ts.map +0 -1
  514. package/dist/data-sources/evm-rpc-services/utils/parsing.js.map +0 -1
  515. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.ts.map +0 -1
  516. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.js.map +0 -1
  517. package/dist/data-sources/index.d.ts.map +0 -1
  518. package/dist/data-sources/index.js +0 -14
  519. package/dist/data-sources/index.js.map +0 -1
  520. package/dist/defaults.d.ts.map +0 -1
  521. package/dist/defaults.js.map +0 -1
  522. package/dist/errors.d.ts.map +0 -1
  523. package/dist/errors.js.map +0 -1
  524. package/dist/index.d.ts.map +0 -1
  525. package/dist/index.js.map +0 -1
  526. package/dist/logger.d.ts +0 -4
  527. package/dist/logger.d.ts.map +0 -1
  528. package/dist/logger.js +0 -4
  529. package/dist/logger.js.map +0 -1
  530. package/dist/middlewares/CustomAssetGraduationMiddleware.d.ts.map +0 -1
  531. package/dist/middlewares/CustomAssetGraduationMiddleware.js.map +0 -1
  532. package/dist/middlewares/DetectionMiddleware.d.ts.map +0 -1
  533. package/dist/middlewares/DetectionMiddleware.js.map +0 -1
  534. package/dist/middlewares/ParallelMiddleware.d.ts.map +0 -1
  535. package/dist/middlewares/RpcFallbackMiddleware.d.ts.map +0 -1
  536. package/dist/middlewares/RpcFallbackMiddleware.js.map +0 -1
  537. package/dist/middlewares/index.d.ts +0 -9
  538. package/dist/middlewares/index.d.ts.map +0 -1
  539. package/dist/middlewares/index.js +0 -5
  540. package/dist/middlewares/index.js.map +0 -1
  541. package/dist/migrations/healAssetsInfoMetadata.d.ts.map +0 -1
  542. package/dist/migrations/healAssetsInfoMetadata.js.map +0 -1
  543. package/dist/selectors/balance.d.ts.map +0 -1
  544. package/dist/selectors/balance.js.map +0 -1
  545. package/dist/types.d.ts.map +0 -1
  546. package/dist/types.js.map +0 -1
  547. package/dist/utils/constants.d.ts +0 -2
  548. package/dist/utils/constants.d.ts.map +0 -1
  549. package/dist/utils/constants.js.map +0 -1
  550. package/dist/utils/customAssetsRpcSupplement.d.ts.map +0 -1
  551. package/dist/utils/customAssetsRpcSupplement.js.map +0 -1
  552. package/dist/utils/dedupingBatchFetcher.d.ts.map +0 -1
  553. package/dist/utils/dedupingBatchFetcher.js.map +0 -1
  554. package/dist/utils/fetchWithTimeout.d.ts.map +0 -1
  555. package/dist/utils/fetchWithTimeout.js.map +0 -1
  556. package/dist/utils/formatExchangeRatesForBridge.d.ts.map +0 -1
  557. package/dist/utils/formatExchangeRatesForBridge.js.map +0 -1
  558. package/dist/utils/formatStateForTransactionPay.d.ts.map +0 -1
  559. package/dist/utils/formatStateForTransactionPay.js.map +0 -1
  560. package/dist/utils/index.d.ts +0 -9
  561. package/dist/utils/index.d.ts.map +0 -1
  562. package/dist/utils/index.js +0 -7
  563. package/dist/utils/index.js.map +0 -1
  564. package/dist/utils/native-assets.d.ts.map +0 -1
  565. package/dist/utils/native-assets.js.map +0 -1
  566. package/dist/utils/normalizeAmountString.d.ts.map +0 -1
  567. package/dist/utils/normalizeAmountString.js.map +0 -1
  568. package/dist/utils/normalizeAssetId.d.ts.map +0 -1
  569. package/dist/utils/normalizeAssetId.js.map +0 -1
  570. package/dist/utils/snaps-assets-migration.d.ts.map +0 -1
  571. package/dist/utils/snaps-assets-migration.js.map +0 -1
  572. package/dist/utils/trace.d.ts.map +0 -1
  573. package/dist/utils/trace.js.map +0 -1
@@ -0,0 +1,41 @@
1
+ import type { ChainId, DataResponse, Middleware, AssetsDataSource } from "../types.mjs";
2
+ /**
3
+ * Deep-merge multiple DataResponses into one.
4
+ * Used when running balance data sources in parallel.
5
+ *
6
+ * @param responses - Array of DataResponse from each source.
7
+ * @returns Single merged DataResponse.
8
+ */
9
+ export declare function mergeDataResponses(responses: DataResponse[]): DataResponse;
10
+ export type BalanceSource = {
11
+ getName(): string;
12
+ /** Chains this source can fetch (e.g. from getActiveChainsSync()). Used to partition chains with no overlap. */
13
+ getActiveChainsSync(): ChainId[];
14
+ assetsMiddleware: Middleware;
15
+ };
16
+ /**
17
+ * Middleware that runs multiple balance data source middlewares in parallel,
18
+ * with no chain overlap. Chains that fail (response.errors) are re-partitioned
19
+ * and fetched again in a fallback round so lower-priority sources can try them.
20
+ *
21
+ * @param sources - Array of balance sources in priority order (each with getName(), getActiveChainsSync(), assetsMiddleware).
22
+ * @returns A single middleware that runs all sources in parallel and merges responses.
23
+ */
24
+ export declare function createParallelBalanceMiddleware(sources: BalanceSource[]): {
25
+ getName(): string;
26
+ assetsMiddleware: Middleware;
27
+ };
28
+ /**
29
+ * Middleware that runs multiple data source middlewares (e.g. TokenDataSource,
30
+ * PriceDataSource) in parallel with the same request. Responses are merged so
31
+ * that assetsInfo (token metadata) and assetsPrice are combined. Use this to
32
+ * fetch token and price data concurrently instead of sequentially.
33
+ *
34
+ * @param sources - Array of named middleware sources (getName + assetsMiddleware).
35
+ * @returns A single middleware that runs all sources in parallel and merges responses.
36
+ */
37
+ export declare function createParallelMiddleware(sources: AssetsDataSource[]): {
38
+ getName(): string;
39
+ assetsMiddleware: Middleware;
40
+ };
41
+ //# sourceMappingURL=ParallelMiddleware.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParallelMiddleware.d.mts","sourceRoot":"","sources":["../../src/middlewares/ParallelMiddleware.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,OAAO,EAGP,YAAY,EACZ,UAAU,EACV,gBAAgB,EACjB,qBAAoB;AAMrB;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,YAAY,CAsD1E;AAWD,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,IAAI,MAAM,CAAC;IAClB,gHAAgH;IAChH,mBAAmB,IAAI,OAAO,EAAE,CAAC;IACjC,gBAAgB,EAAE,UAAU,CAAC;CAC9B,CAAC;AAwDF;;;;;;;GAOG;AACH,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG;IACzE,OAAO,IAAI,MAAM,CAAC;IAClB,gBAAgB,EAAE,UAAU,CAAC;CAC9B,CAiHA;AAWD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG;IACrE,OAAO,IAAI,MAAM,CAAC;IAClB,gBAAgB,EAAE,UAAU,CAAC;CAC9B,CAqDA"}
@@ -1,4 +1,11 @@
1
- import pLimit from 'p-limit';
1
+ function $importDefault(module) {
2
+ if (module?.__esModule) {
3
+ return module.default;
4
+ }
5
+ return module;
6
+ }
7
+ import $pLimit from "p-limit/index.js";
8
+ const pLimit = $importDefault($pLimit);
2
9
  // ============================================================================
3
10
  // MERGE HELPER
4
11
  // ============================================================================
@@ -251,4 +258,4 @@ export function createParallelMiddleware(sources) {
251
258
  },
252
259
  };
253
260
  }
254
- //# sourceMappingURL=ParallelMiddleware.js.map
261
+ //# sourceMappingURL=ParallelMiddleware.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ParallelMiddleware.js","sourceRoot":"","sources":["../../src/middlewares/ParallelMiddleware.ts"],"names":[],"mappings":"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","sourcesContent":["import pLimit from 'p-limit';\n\nimport type {\n ChainId,\n Context,\n DataRequest,\n DataResponse,\n Middleware,\n AssetsDataSource,\n} from '../types.js';\n\n// ============================================================================\n// MERGE HELPER\n// ============================================================================\n\n/**\n * Deep-merge multiple DataResponses into one.\n * Used when running balance data sources in parallel.\n *\n * @param responses - Array of DataResponse from each source.\n * @returns Single merged DataResponse.\n */\nexport function mergeDataResponses(responses: DataResponse[]): DataResponse {\n const merged: DataResponse = {};\n\n for (const response of responses) {\n if (response.assetsBalance) {\n merged.assetsBalance ??= {};\n for (const [accountId, accountBalances] of Object.entries(\n response.assetsBalance,\n )) {\n merged.assetsBalance[accountId] = {\n ...(merged.assetsBalance[accountId] ?? {}),\n ...accountBalances,\n };\n }\n }\n if (response.assetsInfo) {\n merged.assetsInfo = {\n ...(merged.assetsInfo ?? {}),\n ...response.assetsInfo,\n };\n }\n if (response.assetsPrice) {\n merged.assetsPrice = {\n ...(merged.assetsPrice ?? {}),\n ...response.assetsPrice,\n };\n }\n if (response.errors) {\n merged.errors = {\n ...(merged.errors ?? {}),\n ...response.errors,\n };\n }\n if (response.detectedAssets) {\n merged.detectedAssets = {\n ...(merged.detectedAssets ?? {}),\n ...response.detectedAssets,\n };\n }\n if (response.updateMode === 'full') {\n merged.updateMode = 'full';\n } else if (\n response.updateMode === 'merge' &&\n merged.updateMode !== 'full'\n ) {\n merged.updateMode = 'merge';\n }\n if (response.replaceCoveredChainBalances) {\n merged.replaceCoveredChainBalances = true;\n }\n }\n merged.updateMode ??= 'merge';\n\n return merged;\n}\n\n// ============================================================================\n// PARALLEL BALANCE MIDDLEWARE\n// ============================================================================\n\nconst PARALLEL_BALANCE_MIDDLEWARE_NAME = 'ParallelBalanceMiddleware';\n\n/** Max concurrent balance source calls (round 1 and fallback). */\nconst BALANCE_CONCURRENCY = 3;\n\nexport type BalanceSource = {\n getName(): string;\n /** Chains this source can fetch (e.g. from getActiveChainsSync()). Used to partition chains with no overlap. */\n getActiveChainsSync(): ChainId[];\n assetsMiddleware: Middleware;\n};\n\n/**\n * Partition request.chainIds so each chain is assigned to exactly one source\n * (by source order: first source that supports the chain gets it). Ensures no\n * chain overlap across data source calls.\n *\n * @param request - The data request with chainIds to partition.\n * @param sources - Balance sources in priority order (e.g. AccountsAPI, Snap, Rpc).\n * @returns Array of requests, one per source, each with only that source's assigned chainIds.\n */\nfunction partitionChainsBySource(\n request: DataRequest,\n sources: BalanceSource[],\n): DataRequest[] {\n const { chainIds } = request;\n const assigned = new Set<ChainId>();\n\n return sources.map((source) => {\n const supported = new Set(source.getActiveChainsSync());\n const chainsForSource = chainIds.filter(\n (id) => supported.has(id) && !assigned.has(id),\n );\n chainsForSource.forEach((id) => assigned.add(id));\n\n return {\n ...request,\n chainIds: chainsForSource,\n };\n });\n}\n\n/**\n * Collect chain IDs that failed in the first round (present in response.errors).\n * Used to run a fallback round with remaining sources.\n *\n * @param requests - Partitioned requests, one per source (same order as results).\n * @param results - Results from each source; chain IDs in requests[i] that have errors in results[i].response.errors are considered failed.\n * @returns Set of chain IDs that had errors in the first round.\n */\nfunction getFailedChainIds(\n requests: DataRequest[],\n results: { response: DataResponse }[],\n): Set<ChainId> {\n const failed = new Set<ChainId>();\n for (let i = 0; i < results.length; i++) {\n const errors = results[i].response.errors ?? {};\n for (const chainId of requests[i].chainIds) {\n if (errors[chainId]) {\n failed.add(chainId);\n }\n }\n }\n return failed;\n}\n\n/**\n * Middleware that runs multiple balance data source middlewares in parallel,\n * with no chain overlap. Chains that fail (response.errors) are re-partitioned\n * and fetched again in a fallback round so lower-priority sources can try them.\n *\n * @param sources - Array of balance sources in priority order (each with getName(), getActiveChainsSync(), assetsMiddleware).\n * @returns A single middleware that runs all sources in parallel and merges responses.\n */\nexport function createParallelBalanceMiddleware(sources: BalanceSource[]): {\n getName(): string;\n assetsMiddleware: Middleware;\n} {\n return {\n getName(): string {\n return PARALLEL_BALANCE_MIDDLEWARE_NAME;\n },\n\n assetsMiddleware: async (context, next): Promise<Context> => {\n if (sources.length === 0) {\n return next(context);\n }\n\n const noopNext = async (ctx: typeof context): Promise<typeof context> =>\n ctx;\n const limit = pLimit(BALANCE_CONCURRENCY);\n\n // Round 1: partition chains (no overlap), run with limited concurrency\n const requests = partitionChainsBySource(context.request, sources);\n const round1Timed = await Promise.all(\n sources.map((source, i) =>\n limit(async () => {\n const start = Date.now();\n const result = await source.assetsMiddleware(\n {\n request: requests[i],\n response: {},\n getAssetsState: context.getAssetsState,\n },\n noopNext,\n );\n const durationMs = Date.now() - start;\n return { result, sourceName: source.getName(), durationMs };\n }),\n ),\n );\n const results = round1Timed.map((entry) => entry.result);\n\n const durationByDataSource: Record<string, number> = {\n ...context.durationByDataSource,\n };\n for (const { sourceName, durationMs } of round1Timed) {\n const key = `${PARALLEL_BALANCE_MIDDLEWARE_NAME}.${sourceName}`;\n durationByDataSource[key] =\n (durationByDataSource[key] ?? 0) + durationMs;\n }\n\n let mergedResponse = mergeDataResponses(\n results.map((result) => result.response),\n );\n\n // Fallback: chains that failed (in errors) get re-partitioned and tried again\n const failedChainIds = getFailedChainIds(requests, results);\n if (failedChainIds.size > 0) {\n const fallbackRequest: DataRequest = {\n ...context.request,\n chainIds: [...failedChainIds],\n };\n const fallbackRequests = partitionChainsBySource(\n fallbackRequest,\n sources,\n );\n const fallbackTimed = await Promise.all(\n sources.map((source, i) =>\n limit(async () => {\n const start = Date.now();\n const result = await source.assetsMiddleware(\n {\n request: fallbackRequests[i],\n response: {},\n getAssetsState: context.getAssetsState,\n },\n noopNext,\n );\n const durationMs = Date.now() - start;\n return { result, sourceName: source.getName(), durationMs };\n }),\n ),\n );\n const fallbackResults = fallbackTimed.map((entry) => entry.result);\n for (const { sourceName, durationMs } of fallbackTimed) {\n const key = `${PARALLEL_BALANCE_MIDDLEWARE_NAME}.${sourceName}`;\n durationByDataSource[key] =\n (durationByDataSource[key] ?? 0) + durationMs;\n }\n const fallbackMerged = mergeDataResponses(\n fallbackResults.map((result) => result.response),\n );\n mergedResponse = mergeDataResponses([mergedResponse, fallbackMerged]);\n // Remove errors for chains we successfully got balance for in fallback\n if (mergedResponse.errors && mergedResponse.assetsBalance) {\n const chainsWithBalance = new Set<ChainId>();\n for (const accountBalances of Object.values(\n mergedResponse.assetsBalance,\n )) {\n for (const assetId of Object.keys(accountBalances)) {\n const chainId = assetId.split('/')[0] as ChainId;\n chainsWithBalance.add(chainId);\n }\n }\n for (const chainId of failedChainIds) {\n if (chainsWithBalance.has(chainId)) {\n delete mergedResponse.errors[chainId];\n }\n }\n }\n }\n\n return next({\n ...context,\n response: mergeDataResponses([context.response, mergedResponse]),\n durationByDataSource,\n });\n },\n };\n}\n\n// ============================================================================\n// PARALLEL TOKEN/PRICE MIDDLEWARE\n// ============================================================================\n\nconst PARALLEL_MIDDLEWARE_NAME = 'ParallelMiddleware';\n\n/** Max concurrent token/price source calls. */\nconst CONCURRENCY = 2;\n\n/**\n * Middleware that runs multiple data source middlewares (e.g. TokenDataSource,\n * PriceDataSource) in parallel with the same request. Responses are merged so\n * that assetsInfo (token metadata) and assetsPrice are combined. Use this to\n * fetch token and price data concurrently instead of sequentially.\n *\n * @param sources - Array of named middleware sources (getName + assetsMiddleware).\n * @returns A single middleware that runs all sources in parallel and merges responses.\n */\nexport function createParallelMiddleware(sources: AssetsDataSource[]): {\n getName(): string;\n assetsMiddleware: Middleware;\n} {\n return {\n getName(): string {\n return PARALLEL_MIDDLEWARE_NAME;\n },\n\n assetsMiddleware: async (context, next): Promise<Context> => {\n if (sources.length === 0) {\n return next(context);\n }\n\n const noopNext = async (ctx: typeof context): Promise<typeof context> =>\n ctx;\n const limit = pLimit(CONCURRENCY);\n\n const timedResults = await Promise.all(\n sources.map((source) =>\n limit(async () => {\n const start = Date.now();\n const result = await source.assetsMiddleware(\n {\n request: context.request,\n response: { ...context.response },\n getAssetsState: context.getAssetsState,\n },\n noopNext,\n );\n const durationMs = Date.now() - start;\n return { result, sourceName: source.getName(), durationMs };\n }),\n ),\n );\n\n const results = timedResults.map((entry) => entry.result);\n const mergedResponse = mergeDataResponses(\n results.map((result) => result.response),\n );\n\n const durationByDataSource: Record<string, number> = {\n ...context.durationByDataSource,\n };\n for (const { sourceName, durationMs } of timedResults) {\n durationByDataSource[`${PARALLEL_MIDDLEWARE_NAME}.${sourceName}`] =\n durationMs;\n }\n\n return next({\n ...context,\n response: mergeDataResponses([context.response, mergedResponse]),\n durationByDataSource,\n });\n },\n };\n}\n"]}
1
+ {"version":3,"file":"ParallelMiddleware.mjs","sourceRoot":"","sources":["../../src/middlewares/ParallelMiddleware.ts"],"names":[],"mappings":"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","sourcesContent":["import pLimit from 'p-limit';\n\nimport type {\n ChainId,\n Context,\n DataRequest,\n DataResponse,\n Middleware,\n AssetsDataSource,\n} from '../types.js';\n\n// ============================================================================\n// MERGE HELPER\n// ============================================================================\n\n/**\n * Deep-merge multiple DataResponses into one.\n * Used when running balance data sources in parallel.\n *\n * @param responses - Array of DataResponse from each source.\n * @returns Single merged DataResponse.\n */\nexport function mergeDataResponses(responses: DataResponse[]): DataResponse {\n const merged: DataResponse = {};\n\n for (const response of responses) {\n if (response.assetsBalance) {\n merged.assetsBalance ??= {};\n for (const [accountId, accountBalances] of Object.entries(\n response.assetsBalance,\n )) {\n merged.assetsBalance[accountId] = {\n ...(merged.assetsBalance[accountId] ?? {}),\n ...accountBalances,\n };\n }\n }\n if (response.assetsInfo) {\n merged.assetsInfo = {\n ...(merged.assetsInfo ?? {}),\n ...response.assetsInfo,\n };\n }\n if (response.assetsPrice) {\n merged.assetsPrice = {\n ...(merged.assetsPrice ?? {}),\n ...response.assetsPrice,\n };\n }\n if (response.errors) {\n merged.errors = {\n ...(merged.errors ?? {}),\n ...response.errors,\n };\n }\n if (response.detectedAssets) {\n merged.detectedAssets = {\n ...(merged.detectedAssets ?? {}),\n ...response.detectedAssets,\n };\n }\n if (response.updateMode === 'full') {\n merged.updateMode = 'full';\n } else if (\n response.updateMode === 'merge' &&\n merged.updateMode !== 'full'\n ) {\n merged.updateMode = 'merge';\n }\n if (response.replaceCoveredChainBalances) {\n merged.replaceCoveredChainBalances = true;\n }\n }\n merged.updateMode ??= 'merge';\n\n return merged;\n}\n\n// ============================================================================\n// PARALLEL BALANCE MIDDLEWARE\n// ============================================================================\n\nconst PARALLEL_BALANCE_MIDDLEWARE_NAME = 'ParallelBalanceMiddleware';\n\n/** Max concurrent balance source calls (round 1 and fallback). */\nconst BALANCE_CONCURRENCY = 3;\n\nexport type BalanceSource = {\n getName(): string;\n /** Chains this source can fetch (e.g. from getActiveChainsSync()). Used to partition chains with no overlap. */\n getActiveChainsSync(): ChainId[];\n assetsMiddleware: Middleware;\n};\n\n/**\n * Partition request.chainIds so each chain is assigned to exactly one source\n * (by source order: first source that supports the chain gets it). Ensures no\n * chain overlap across data source calls.\n *\n * @param request - The data request with chainIds to partition.\n * @param sources - Balance sources in priority order (e.g. AccountsAPI, Snap, Rpc).\n * @returns Array of requests, one per source, each with only that source's assigned chainIds.\n */\nfunction partitionChainsBySource(\n request: DataRequest,\n sources: BalanceSource[],\n): DataRequest[] {\n const { chainIds } = request;\n const assigned = new Set<ChainId>();\n\n return sources.map((source) => {\n const supported = new Set(source.getActiveChainsSync());\n const chainsForSource = chainIds.filter(\n (id) => supported.has(id) && !assigned.has(id),\n );\n chainsForSource.forEach((id) => assigned.add(id));\n\n return {\n ...request,\n chainIds: chainsForSource,\n };\n });\n}\n\n/**\n * Collect chain IDs that failed in the first round (present in response.errors).\n * Used to run a fallback round with remaining sources.\n *\n * @param requests - Partitioned requests, one per source (same order as results).\n * @param results - Results from each source; chain IDs in requests[i] that have errors in results[i].response.errors are considered failed.\n * @returns Set of chain IDs that had errors in the first round.\n */\nfunction getFailedChainIds(\n requests: DataRequest[],\n results: { response: DataResponse }[],\n): Set<ChainId> {\n const failed = new Set<ChainId>();\n for (let i = 0; i < results.length; i++) {\n const errors = results[i].response.errors ?? {};\n for (const chainId of requests[i].chainIds) {\n if (errors[chainId]) {\n failed.add(chainId);\n }\n }\n }\n return failed;\n}\n\n/**\n * Middleware that runs multiple balance data source middlewares in parallel,\n * with no chain overlap. Chains that fail (response.errors) are re-partitioned\n * and fetched again in a fallback round so lower-priority sources can try them.\n *\n * @param sources - Array of balance sources in priority order (each with getName(), getActiveChainsSync(), assetsMiddleware).\n * @returns A single middleware that runs all sources in parallel and merges responses.\n */\nexport function createParallelBalanceMiddleware(sources: BalanceSource[]): {\n getName(): string;\n assetsMiddleware: Middleware;\n} {\n return {\n getName(): string {\n return PARALLEL_BALANCE_MIDDLEWARE_NAME;\n },\n\n assetsMiddleware: async (context, next): Promise<Context> => {\n if (sources.length === 0) {\n return next(context);\n }\n\n const noopNext = async (ctx: typeof context): Promise<typeof context> =>\n ctx;\n const limit = pLimit(BALANCE_CONCURRENCY);\n\n // Round 1: partition chains (no overlap), run with limited concurrency\n const requests = partitionChainsBySource(context.request, sources);\n const round1Timed = await Promise.all(\n sources.map((source, i) =>\n limit(async () => {\n const start = Date.now();\n const result = await source.assetsMiddleware(\n {\n request: requests[i],\n response: {},\n getAssetsState: context.getAssetsState,\n },\n noopNext,\n );\n const durationMs = Date.now() - start;\n return { result, sourceName: source.getName(), durationMs };\n }),\n ),\n );\n const results = round1Timed.map((entry) => entry.result);\n\n const durationByDataSource: Record<string, number> = {\n ...context.durationByDataSource,\n };\n for (const { sourceName, durationMs } of round1Timed) {\n const key = `${PARALLEL_BALANCE_MIDDLEWARE_NAME}.${sourceName}`;\n durationByDataSource[key] =\n (durationByDataSource[key] ?? 0) + durationMs;\n }\n\n let mergedResponse = mergeDataResponses(\n results.map((result) => result.response),\n );\n\n // Fallback: chains that failed (in errors) get re-partitioned and tried again\n const failedChainIds = getFailedChainIds(requests, results);\n if (failedChainIds.size > 0) {\n const fallbackRequest: DataRequest = {\n ...context.request,\n chainIds: [...failedChainIds],\n };\n const fallbackRequests = partitionChainsBySource(\n fallbackRequest,\n sources,\n );\n const fallbackTimed = await Promise.all(\n sources.map((source, i) =>\n limit(async () => {\n const start = Date.now();\n const result = await source.assetsMiddleware(\n {\n request: fallbackRequests[i],\n response: {},\n getAssetsState: context.getAssetsState,\n },\n noopNext,\n );\n const durationMs = Date.now() - start;\n return { result, sourceName: source.getName(), durationMs };\n }),\n ),\n );\n const fallbackResults = fallbackTimed.map((entry) => entry.result);\n for (const { sourceName, durationMs } of fallbackTimed) {\n const key = `${PARALLEL_BALANCE_MIDDLEWARE_NAME}.${sourceName}`;\n durationByDataSource[key] =\n (durationByDataSource[key] ?? 0) + durationMs;\n }\n const fallbackMerged = mergeDataResponses(\n fallbackResults.map((result) => result.response),\n );\n mergedResponse = mergeDataResponses([mergedResponse, fallbackMerged]);\n // Remove errors for chains we successfully got balance for in fallback\n if (mergedResponse.errors && mergedResponse.assetsBalance) {\n const chainsWithBalance = new Set<ChainId>();\n for (const accountBalances of Object.values(\n mergedResponse.assetsBalance,\n )) {\n for (const assetId of Object.keys(accountBalances)) {\n const chainId = assetId.split('/')[0] as ChainId;\n chainsWithBalance.add(chainId);\n }\n }\n for (const chainId of failedChainIds) {\n if (chainsWithBalance.has(chainId)) {\n delete mergedResponse.errors[chainId];\n }\n }\n }\n }\n\n return next({\n ...context,\n response: mergeDataResponses([context.response, mergedResponse]),\n durationByDataSource,\n });\n },\n };\n}\n\n// ============================================================================\n// PARALLEL TOKEN/PRICE MIDDLEWARE\n// ============================================================================\n\nconst PARALLEL_MIDDLEWARE_NAME = 'ParallelMiddleware';\n\n/** Max concurrent token/price source calls. */\nconst CONCURRENCY = 2;\n\n/**\n * Middleware that runs multiple data source middlewares (e.g. TokenDataSource,\n * PriceDataSource) in parallel with the same request. Responses are merged so\n * that assetsInfo (token metadata) and assetsPrice are combined. Use this to\n * fetch token and price data concurrently instead of sequentially.\n *\n * @param sources - Array of named middleware sources (getName + assetsMiddleware).\n * @returns A single middleware that runs all sources in parallel and merges responses.\n */\nexport function createParallelMiddleware(sources: AssetsDataSource[]): {\n getName(): string;\n assetsMiddleware: Middleware;\n} {\n return {\n getName(): string {\n return PARALLEL_MIDDLEWARE_NAME;\n },\n\n assetsMiddleware: async (context, next): Promise<Context> => {\n if (sources.length === 0) {\n return next(context);\n }\n\n const noopNext = async (ctx: typeof context): Promise<typeof context> =>\n ctx;\n const limit = pLimit(CONCURRENCY);\n\n const timedResults = await Promise.all(\n sources.map((source) =>\n limit(async () => {\n const start = Date.now();\n const result = await source.assetsMiddleware(\n {\n request: context.request,\n response: { ...context.response },\n getAssetsState: context.getAssetsState,\n },\n noopNext,\n );\n const durationMs = Date.now() - start;\n return { result, sourceName: source.getName(), durationMs };\n }),\n ),\n );\n\n const results = timedResults.map((entry) => entry.result);\n const mergedResponse = mergeDataResponses(\n results.map((result) => result.response),\n );\n\n const durationByDataSource: Record<string, number> = {\n ...context.durationByDataSource,\n };\n for (const { sourceName, durationMs } of timedResults) {\n durationByDataSource[`${PARALLEL_MIDDLEWARE_NAME}.${sourceName}`] =\n durationMs;\n }\n\n return next({\n ...context,\n response: mergeDataResponses([context.response, mergedResponse]),\n durationByDataSource,\n });\n },\n };\n}\n"]}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ 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");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ 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");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _RpcFallbackMiddleware_rpcDataSource;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.RpcFallbackMiddleware = void 0;
16
+ const logger_js_1 = require("../logger.cjs");
17
+ const types_js_1 = require("../types.cjs");
18
+ const ParallelMiddleware_js_1 = require("./ParallelMiddleware.cjs");
19
+ const CONTROLLER_NAME = 'RpcFallbackMiddleware';
20
+ const log = (0, logger_js_1.createModuleLogger)(logger_js_1.projectLogger, CONTROLLER_NAME);
21
+ /**
22
+ * RpcFallbackMiddleware retries chains that failed upstream on the RPC data
23
+ * source. Any chain present in `response.errors` (network error,
24
+ * unprocessedNetworks, timeout, …) is handed off to RPC with the request
25
+ * filtered to just those chains. Successful RPC results are merged into the
26
+ * response and their entries are cleared from `response.errors`.
27
+ *
28
+ * Place this immediately after `createParallelBalanceMiddleware` in the fast
29
+ * pipeline.
30
+ */
31
+ class RpcFallbackMiddleware {
32
+ constructor(options) {
33
+ this.name = CONTROLLER_NAME;
34
+ _RpcFallbackMiddleware_rpcDataSource.set(this, void 0);
35
+ __classPrivateFieldSet(this, _RpcFallbackMiddleware_rpcDataSource, options.rpcDataSource, "f");
36
+ }
37
+ getName() {
38
+ return this.name;
39
+ }
40
+ get assetsMiddleware() {
41
+ return (0, types_js_1.forDataTypes)(['balance'], async (ctx, next) => {
42
+ const erroredChains = new Set(Object.keys(ctx.response.errors ?? {}));
43
+ if (erroredChains.size === 0) {
44
+ return next(ctx);
45
+ }
46
+ log('Retrying failed chains on RPC', {
47
+ chains: [...erroredChains],
48
+ });
49
+ const filteredRequest = {
50
+ ...ctx.request,
51
+ chainIds: ctx.request.chainIds.filter((id) => erroredChains.has(id)),
52
+ };
53
+ const noopNext = async (inner) => inner;
54
+ const rpcResult = await __classPrivateFieldGet(this, _RpcFallbackMiddleware_rpcDataSource, "f").assetsMiddleware({
55
+ ...ctx,
56
+ request: filteredRequest,
57
+ response: {},
58
+ }, noopNext);
59
+ const merged = (0, ParallelMiddleware_js_1.mergeDataResponses)([
60
+ ctx.response,
61
+ rpcResult.response,
62
+ ]);
63
+ // Clear errors only for chains RPC actually recovered a balance for.
64
+ // We must inspect rpcResult.response — NOT merged — because merged
65
+ // also contains balances from the upstream sources (AccountsApi /
66
+ // Websocket / Staked). If those sources returned partial data for
67
+ // a chain that they also flagged as errored (e.g. via
68
+ // unprocessedNetworks), and RPC then failed for that same chain,
69
+ // looking at merged would incorrectly mark the error as recovered.
70
+ const rpcAssetsBalance = rpcResult.response.assetsBalance;
71
+ if (merged.errors && rpcAssetsBalance) {
72
+ const chainsRecoveredByRpc = new Set();
73
+ for (const accountBalances of Object.values(rpcAssetsBalance)) {
74
+ for (const assetId of Object.keys(accountBalances)) {
75
+ chainsRecoveredByRpc.add(assetId.split('/')[0]);
76
+ }
77
+ }
78
+ for (const chainId of erroredChains) {
79
+ if (chainsRecoveredByRpc.has(chainId)) {
80
+ delete merged.errors[chainId];
81
+ }
82
+ }
83
+ }
84
+ return next({ ...ctx, response: merged });
85
+ });
86
+ }
87
+ }
88
+ exports.RpcFallbackMiddleware = RpcFallbackMiddleware;
89
+ _RpcFallbackMiddleware_rpcDataSource = new WeakMap();
90
+ //# sourceMappingURL=RpcFallbackMiddleware.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RpcFallbackMiddleware.cjs","sourceRoot":"","sources":["../../src/middlewares/RpcFallbackMiddleware.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,6CAAiE;AACjE,2CAA2C;AAO3C,oEAA6D;AAE7D,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAEhD,MAAM,GAAG,GAAG,IAAA,8BAAkB,EAAC,yBAAa,EAAE,eAAe,CAAC,CAAC;AAO/D;;;;;;;;;GASG;AACH,MAAa,qBAAqB;IAKhC,YAAY,OAAqC;QAJxC,SAAI,GAAG,eAAe,CAAC;QAEvB,uDAAiC;QAGxC,uBAAA,IAAI,wCAAkB,OAAO,CAAC,aAAa,MAAA,CAAC;IAC9C,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,gBAAgB;QAClB,OAAO,IAAA,uBAAY,EAAC,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YACnD,MAAM,aAAa,GAAG,IAAI,GAAG,CAC3B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAc,CACpD,CAAC;YACF,IAAI,aAAa,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;YAED,GAAG,CAAC,+BAA+B,EAAE;gBACnC,MAAM,EAAE,CAAC,GAAG,aAAa,CAAC;aAC3B,CAAC,CAAC;YAEH,MAAM,eAAe,GAAG;gBACtB,GAAG,GAAG,CAAC,OAAO;gBACd,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;aACrE,CAAC;YAEF,MAAM,QAAQ,GAAG,KAAK,EAAE,KAAiB,EAAuB,EAAE,CAAC,KAAK,CAAC;YACzE,MAAM,SAAS,GAAG,MAAM,uBAAA,IAAI,4CAAe,CAAC,gBAAgB,CAC1D;gBACE,GAAG,GAAG;gBACN,OAAO,EAAE,eAAe;gBACxB,QAAQ,EAAE,EAAE;aACb,EACD,QAAQ,CACT,CAAC;YAEF,MAAM,MAAM,GAAiB,IAAA,0CAAkB,EAAC;gBAC9C,GAAG,CAAC,QAAQ;gBACZ,SAAS,CAAC,QAAQ;aACnB,CAAC,CAAC;YAEH,qEAAqE;YACrE,mEAAmE;YACnE,kEAAkE;YAClE,kEAAkE;YAClE,sDAAsD;YACtD,iEAAiE;YACjE,mEAAmE;YACnE,MAAM,gBAAgB,GAAG,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC;YAC1D,IAAI,MAAM,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC;gBACtC,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAU,CAAC;gBAC/C,KAAK,MAAM,eAAe,IAAI,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBAC9D,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;wBACnD,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClD,CAAC;gBACH,CAAC;gBACD,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;oBACpC,IAAI,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;wBACtC,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBAChC,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAvED,sDAuEC","sourcesContent":["import { projectLogger, createModuleLogger } from '../logger.js';\nimport { forDataTypes } from '../types.js';\nimport type {\n AssetsDataSource,\n ChainId,\n DataResponse,\n Middleware,\n} from '../types.js';\nimport { mergeDataResponses } from './ParallelMiddleware.js';\n\nconst CONTROLLER_NAME = 'RpcFallbackMiddleware';\n\nconst log = createModuleLogger(projectLogger, CONTROLLER_NAME);\n\nexport type RpcFallbackMiddlewareOptions = {\n /** The RPC data source to use as a fallback. */\n rpcDataSource: AssetsDataSource;\n};\n\n/**\n * RpcFallbackMiddleware retries chains that failed upstream on the RPC data\n * source. Any chain present in `response.errors` (network error,\n * unprocessedNetworks, timeout, …) is handed off to RPC with the request\n * filtered to just those chains. Successful RPC results are merged into the\n * response and their entries are cleared from `response.errors`.\n *\n * Place this immediately after `createParallelBalanceMiddleware` in the fast\n * pipeline.\n */\nexport class RpcFallbackMiddleware {\n readonly name = CONTROLLER_NAME;\n\n readonly #rpcDataSource: AssetsDataSource;\n\n constructor(options: RpcFallbackMiddlewareOptions) {\n this.#rpcDataSource = options.rpcDataSource;\n }\n\n getName(): string {\n return this.name;\n }\n\n get assetsMiddleware(): Middleware {\n return forDataTypes(['balance'], async (ctx, next) => {\n const erroredChains = new Set<ChainId>(\n Object.keys(ctx.response.errors ?? {}) as ChainId[],\n );\n if (erroredChains.size === 0) {\n return next(ctx);\n }\n\n log('Retrying failed chains on RPC', {\n chains: [...erroredChains],\n });\n\n const filteredRequest = {\n ...ctx.request,\n chainIds: ctx.request.chainIds.filter((id) => erroredChains.has(id)),\n };\n\n const noopNext = async (inner: typeof ctx): Promise<typeof ctx> => inner;\n const rpcResult = await this.#rpcDataSource.assetsMiddleware(\n {\n ...ctx,\n request: filteredRequest,\n response: {},\n },\n noopNext,\n );\n\n const merged: DataResponse = mergeDataResponses([\n ctx.response,\n rpcResult.response,\n ]);\n\n // Clear errors only for chains RPC actually recovered a balance for.\n // We must inspect rpcResult.response — NOT merged — because merged\n // also contains balances from the upstream sources (AccountsApi /\n // Websocket / Staked). If those sources returned partial data for\n // a chain that they also flagged as errored (e.g. via\n // unprocessedNetworks), and RPC then failed for that same chain,\n // looking at merged would incorrectly mark the error as recovered.\n const rpcAssetsBalance = rpcResult.response.assetsBalance;\n if (merged.errors && rpcAssetsBalance) {\n const chainsRecoveredByRpc = new Set<string>();\n for (const accountBalances of Object.values(rpcAssetsBalance)) {\n for (const assetId of Object.keys(accountBalances)) {\n chainsRecoveredByRpc.add(assetId.split('/')[0]);\n }\n }\n for (const chainId of erroredChains) {\n if (chainsRecoveredByRpc.has(chainId)) {\n delete merged.errors[chainId];\n }\n }\n }\n\n return next({ ...ctx, response: merged });\n });\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { AssetsDataSource, Middleware } from '../types.js';
1
+ import type { AssetsDataSource, Middleware } from "../types.cjs";
2
2
  export type RpcFallbackMiddlewareOptions = {
3
3
  /** The RPC data source to use as a fallback. */
4
4
  rpcDataSource: AssetsDataSource;
@@ -20,4 +20,4 @@ export declare class RpcFallbackMiddleware {
20
20
  getName(): string;
21
21
  get assetsMiddleware(): Middleware;
22
22
  }
23
- //# sourceMappingURL=RpcFallbackMiddleware.d.ts.map
23
+ //# sourceMappingURL=RpcFallbackMiddleware.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RpcFallbackMiddleware.d.cts","sourceRoot":"","sources":["../../src/middlewares/RpcFallbackMiddleware.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAGhB,UAAU,EACX,qBAAoB;AAOrB,MAAM,MAAM,4BAA4B,GAAG;IACzC,gDAAgD;IAChD,aAAa,EAAE,gBAAgB,CAAC;CACjC,CAAC;AAEF;;;;;;;;;GASG;AACH,qBAAa,qBAAqB;;IAChC,QAAQ,CAAC,IAAI,2BAAmB;gBAIpB,OAAO,EAAE,4BAA4B;IAIjD,OAAO,IAAI,MAAM;IAIjB,IAAI,gBAAgB,IAAI,UAAU,CAyDjC;CACF"}
@@ -0,0 +1,23 @@
1
+ import type { AssetsDataSource, Middleware } from "../types.mjs";
2
+ export type RpcFallbackMiddlewareOptions = {
3
+ /** The RPC data source to use as a fallback. */
4
+ rpcDataSource: AssetsDataSource;
5
+ };
6
+ /**
7
+ * RpcFallbackMiddleware retries chains that failed upstream on the RPC data
8
+ * source. Any chain present in `response.errors` (network error,
9
+ * unprocessedNetworks, timeout, …) is handed off to RPC with the request
10
+ * filtered to just those chains. Successful RPC results are merged into the
11
+ * response and their entries are cleared from `response.errors`.
12
+ *
13
+ * Place this immediately after `createParallelBalanceMiddleware` in the fast
14
+ * pipeline.
15
+ */
16
+ export declare class RpcFallbackMiddleware {
17
+ #private;
18
+ readonly name = "RpcFallbackMiddleware";
19
+ constructor(options: RpcFallbackMiddlewareOptions);
20
+ getName(): string;
21
+ get assetsMiddleware(): Middleware;
22
+ }
23
+ //# sourceMappingURL=RpcFallbackMiddleware.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RpcFallbackMiddleware.d.mts","sourceRoot":"","sources":["../../src/middlewares/RpcFallbackMiddleware.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAGhB,UAAU,EACX,qBAAoB;AAOrB,MAAM,MAAM,4BAA4B,GAAG;IACzC,gDAAgD;IAChD,aAAa,EAAE,gBAAgB,CAAC;CACjC,CAAC;AAEF;;;;;;;;;GASG;AACH,qBAAa,qBAAqB;;IAChC,QAAQ,CAAC,IAAI,2BAAmB;gBAIpB,OAAO,EAAE,4BAA4B;IAIjD,OAAO,IAAI,MAAM;IAIjB,IAAI,gBAAgB,IAAI,UAAU,CAyDjC;CACF"}
@@ -10,9 +10,9 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
10
10
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
11
  };
12
12
  var _RpcFallbackMiddleware_rpcDataSource;
13
- import { projectLogger, createModuleLogger } from '../logger.js';
14
- import { forDataTypes } from '../types.js';
15
- import { mergeDataResponses } from './ParallelMiddleware.js';
13
+ import { projectLogger, createModuleLogger } from "../logger.mjs";
14
+ import { forDataTypes } from "../types.mjs";
15
+ import { mergeDataResponses } from "./ParallelMiddleware.mjs";
16
16
  const CONTROLLER_NAME = 'RpcFallbackMiddleware';
17
17
  const log = createModuleLogger(projectLogger, CONTROLLER_NAME);
18
18
  /**
@@ -83,4 +83,4 @@ export class RpcFallbackMiddleware {
83
83
  }
84
84
  }
85
85
  _RpcFallbackMiddleware_rpcDataSource = new WeakMap();
86
- //# sourceMappingURL=RpcFallbackMiddleware.js.map
86
+ //# sourceMappingURL=RpcFallbackMiddleware.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RpcFallbackMiddleware.mjs","sourceRoot":"","sources":["../../src/middlewares/RpcFallbackMiddleware.ts"],"names":[],"mappings":"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","sourcesContent":["import { projectLogger, createModuleLogger } from '../logger.js';\nimport { forDataTypes } from '../types.js';\nimport type {\n AssetsDataSource,\n ChainId,\n DataResponse,\n Middleware,\n} from '../types.js';\nimport { mergeDataResponses } from './ParallelMiddleware.js';\n\nconst CONTROLLER_NAME = 'RpcFallbackMiddleware';\n\nconst log = createModuleLogger(projectLogger, CONTROLLER_NAME);\n\nexport type RpcFallbackMiddlewareOptions = {\n /** The RPC data source to use as a fallback. */\n rpcDataSource: AssetsDataSource;\n};\n\n/**\n * RpcFallbackMiddleware retries chains that failed upstream on the RPC data\n * source. Any chain present in `response.errors` (network error,\n * unprocessedNetworks, timeout, …) is handed off to RPC with the request\n * filtered to just those chains. Successful RPC results are merged into the\n * response and their entries are cleared from `response.errors`.\n *\n * Place this immediately after `createParallelBalanceMiddleware` in the fast\n * pipeline.\n */\nexport class RpcFallbackMiddleware {\n readonly name = CONTROLLER_NAME;\n\n readonly #rpcDataSource: AssetsDataSource;\n\n constructor(options: RpcFallbackMiddlewareOptions) {\n this.#rpcDataSource = options.rpcDataSource;\n }\n\n getName(): string {\n return this.name;\n }\n\n get assetsMiddleware(): Middleware {\n return forDataTypes(['balance'], async (ctx, next) => {\n const erroredChains = new Set<ChainId>(\n Object.keys(ctx.response.errors ?? {}) as ChainId[],\n );\n if (erroredChains.size === 0) {\n return next(ctx);\n }\n\n log('Retrying failed chains on RPC', {\n chains: [...erroredChains],\n });\n\n const filteredRequest = {\n ...ctx.request,\n chainIds: ctx.request.chainIds.filter((id) => erroredChains.has(id)),\n };\n\n const noopNext = async (inner: typeof ctx): Promise<typeof ctx> => inner;\n const rpcResult = await this.#rpcDataSource.assetsMiddleware(\n {\n ...ctx,\n request: filteredRequest,\n response: {},\n },\n noopNext,\n );\n\n const merged: DataResponse = mergeDataResponses([\n ctx.response,\n rpcResult.response,\n ]);\n\n // Clear errors only for chains RPC actually recovered a balance for.\n // We must inspect rpcResult.response — NOT merged — because merged\n // also contains balances from the upstream sources (AccountsApi /\n // Websocket / Staked). If those sources returned partial data for\n // a chain that they also flagged as errored (e.g. via\n // unprocessedNetworks), and RPC then failed for that same chain,\n // looking at merged would incorrectly mark the error as recovered.\n const rpcAssetsBalance = rpcResult.response.assetsBalance;\n if (merged.errors && rpcAssetsBalance) {\n const chainsRecoveredByRpc = new Set<string>();\n for (const accountBalances of Object.values(rpcAssetsBalance)) {\n for (const assetId of Object.keys(accountBalances)) {\n chainsRecoveredByRpc.add(assetId.split('/')[0]);\n }\n }\n for (const chainId of erroredChains) {\n if (chainsRecoveredByRpc.has(chainId)) {\n delete merged.errors[chainId];\n }\n }\n }\n\n return next({ ...ctx, response: merged });\n });\n }\n}\n"]}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mergeDataResponses = exports.createParallelMiddleware = exports.createParallelBalanceMiddleware = exports.RpcFallbackMiddleware = exports.DetectionMiddleware = exports.CustomAssetGraduationMiddleware = void 0;
4
+ var CustomAssetGraduationMiddleware_js_1 = require("./CustomAssetGraduationMiddleware.cjs");
5
+ Object.defineProperty(exports, "CustomAssetGraduationMiddleware", { enumerable: true, get: function () { return CustomAssetGraduationMiddleware_js_1.CustomAssetGraduationMiddleware; } });
6
+ var DetectionMiddleware_js_1 = require("./DetectionMiddleware.cjs");
7
+ Object.defineProperty(exports, "DetectionMiddleware", { enumerable: true, get: function () { return DetectionMiddleware_js_1.DetectionMiddleware; } });
8
+ var RpcFallbackMiddleware_js_1 = require("./RpcFallbackMiddleware.cjs");
9
+ Object.defineProperty(exports, "RpcFallbackMiddleware", { enumerable: true, get: function () { return RpcFallbackMiddleware_js_1.RpcFallbackMiddleware; } });
10
+ var ParallelMiddleware_js_1 = require("./ParallelMiddleware.cjs");
11
+ Object.defineProperty(exports, "createParallelBalanceMiddleware", { enumerable: true, get: function () { return ParallelMiddleware_js_1.createParallelBalanceMiddleware; } });
12
+ Object.defineProperty(exports, "createParallelMiddleware", { enumerable: true, get: function () { return ParallelMiddleware_js_1.createParallelMiddleware; } });
13
+ Object.defineProperty(exports, "mergeDataResponses", { enumerable: true, get: function () { return ParallelMiddleware_js_1.mergeDataResponses; } });
14
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../src/middlewares/index.ts"],"names":[],"mappings":";;;AAAA,4FAAuF;AAA9E,qJAAA,+BAA+B,OAAA;AAExC,oEAA+D;AAAtD,6HAAA,mBAAmB,OAAA;AAC5B,wEAAmE;AAA1D,iIAAA,qBAAqB,OAAA;AAE9B,kEAIiC;AAH/B,wIAAA,+BAA+B,OAAA;AAC/B,iIAAA,wBAAwB,OAAA;AACxB,2HAAA,kBAAkB,OAAA","sourcesContent":["export { CustomAssetGraduationMiddleware } from './CustomAssetGraduationMiddleware.js';\nexport type { CustomAssetGraduationMiddlewareOptions } from './CustomAssetGraduationMiddleware.js';\nexport { DetectionMiddleware } from './DetectionMiddleware.js';\nexport { RpcFallbackMiddleware } from './RpcFallbackMiddleware.js';\nexport type { RpcFallbackMiddlewareOptions } from './RpcFallbackMiddleware.js';\nexport {\n createParallelBalanceMiddleware,\n createParallelMiddleware,\n mergeDataResponses,\n} from './ParallelMiddleware.js';\nexport type { BalanceSource } from './ParallelMiddleware.js';\nexport type { AssetsDataSource } from '../types.js';\n"]}
@@ -0,0 +1,9 @@
1
+ export { CustomAssetGraduationMiddleware } from "./CustomAssetGraduationMiddleware.cjs";
2
+ export type { CustomAssetGraduationMiddlewareOptions } from "./CustomAssetGraduationMiddleware.cjs";
3
+ export { DetectionMiddleware } from "./DetectionMiddleware.cjs";
4
+ export { RpcFallbackMiddleware } from "./RpcFallbackMiddleware.cjs";
5
+ export type { RpcFallbackMiddlewareOptions } from "./RpcFallbackMiddleware.cjs";
6
+ export { createParallelBalanceMiddleware, createParallelMiddleware, mergeDataResponses, } from "./ParallelMiddleware.cjs";
7
+ export type { BalanceSource } from "./ParallelMiddleware.cjs";
8
+ export type { AssetsDataSource } from "../types.cjs";
9
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/middlewares/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,8CAA6C;AACvF,YAAY,EAAE,sCAAsC,EAAE,8CAA6C;AACnG,OAAO,EAAE,mBAAmB,EAAE,kCAAiC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,oCAAmC;AACnE,YAAY,EAAE,4BAA4B,EAAE,oCAAmC;AAC/E,OAAO,EACL,+BAA+B,EAC/B,wBAAwB,EACxB,kBAAkB,GACnB,iCAAgC;AACjC,YAAY,EAAE,aAAa,EAAE,iCAAgC;AAC7D,YAAY,EAAE,gBAAgB,EAAE,qBAAoB"}
@@ -0,0 +1,9 @@
1
+ export { CustomAssetGraduationMiddleware } from "./CustomAssetGraduationMiddleware.mjs";
2
+ export type { CustomAssetGraduationMiddlewareOptions } from "./CustomAssetGraduationMiddleware.mjs";
3
+ export { DetectionMiddleware } from "./DetectionMiddleware.mjs";
4
+ export { RpcFallbackMiddleware } from "./RpcFallbackMiddleware.mjs";
5
+ export type { RpcFallbackMiddlewareOptions } from "./RpcFallbackMiddleware.mjs";
6
+ export { createParallelBalanceMiddleware, createParallelMiddleware, mergeDataResponses, } from "./ParallelMiddleware.mjs";
7
+ export type { BalanceSource } from "./ParallelMiddleware.mjs";
8
+ export type { AssetsDataSource } from "../types.mjs";
9
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/middlewares/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,8CAA6C;AACvF,YAAY,EAAE,sCAAsC,EAAE,8CAA6C;AACnG,OAAO,EAAE,mBAAmB,EAAE,kCAAiC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,oCAAmC;AACnE,YAAY,EAAE,4BAA4B,EAAE,oCAAmC;AAC/E,OAAO,EACL,+BAA+B,EAC/B,wBAAwB,EACxB,kBAAkB,GACnB,iCAAgC;AACjC,YAAY,EAAE,aAAa,EAAE,iCAAgC;AAC7D,YAAY,EAAE,gBAAgB,EAAE,qBAAoB"}
@@ -0,0 +1,5 @@
1
+ export { CustomAssetGraduationMiddleware } from "./CustomAssetGraduationMiddleware.mjs";
2
+ export { DetectionMiddleware } from "./DetectionMiddleware.mjs";
3
+ export { RpcFallbackMiddleware } from "./RpcFallbackMiddleware.mjs";
4
+ export { createParallelBalanceMiddleware, createParallelMiddleware, mergeDataResponses } from "./ParallelMiddleware.mjs";
5
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/middlewares/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,8CAA6C;AAEvF,OAAO,EAAE,mBAAmB,EAAE,kCAAiC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,oCAAmC;AAEnE,OAAO,EACL,+BAA+B,EAC/B,wBAAwB,EACxB,kBAAkB,EACnB,iCAAgC","sourcesContent":["export { CustomAssetGraduationMiddleware } from './CustomAssetGraduationMiddleware.js';\nexport type { CustomAssetGraduationMiddlewareOptions } from './CustomAssetGraduationMiddleware.js';\nexport { DetectionMiddleware } from './DetectionMiddleware.js';\nexport { RpcFallbackMiddleware } from './RpcFallbackMiddleware.js';\nexport type { RpcFallbackMiddlewareOptions } from './RpcFallbackMiddleware.js';\nexport {\n createParallelBalanceMiddleware,\n createParallelMiddleware,\n mergeDataResponses,\n} from './ParallelMiddleware.js';\nexport type { BalanceSource } from './ParallelMiddleware.js';\nexport type { AssetsDataSource } from '../types.js';\n"]}