@metamask-previews/perps-controller 0.0.0-preview-685dbf46b → 1.0.0-preview-bc00f2c

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 (482) hide show
  1. package/CHANGELOG.md +30 -2
  2. package/dist/PerpsController.cjs +3077 -65
  3. package/dist/PerpsController.cjs.map +1 -1
  4. package/dist/PerpsController.d.cts +969 -82
  5. package/dist/PerpsController.d.cts.map +1 -1
  6. package/dist/PerpsController.d.mts +969 -82
  7. package/dist/PerpsController.d.mts.map +1 -1
  8. package/dist/PerpsController.mjs +3073 -62
  9. package/dist/PerpsController.mjs.map +1 -1
  10. package/dist/aggregation/SubscriptionMultiplexer.cjs +441 -0
  11. package/dist/aggregation/SubscriptionMultiplexer.cjs.map +1 -0
  12. package/dist/aggregation/SubscriptionMultiplexer.d.cts +171 -0
  13. package/dist/aggregation/SubscriptionMultiplexer.d.cts.map +1 -0
  14. package/dist/aggregation/SubscriptionMultiplexer.d.mts +171 -0
  15. package/dist/aggregation/SubscriptionMultiplexer.d.mts.map +1 -0
  16. package/dist/aggregation/SubscriptionMultiplexer.mjs +437 -0
  17. package/dist/aggregation/SubscriptionMultiplexer.mjs.map +1 -0
  18. package/dist/aggregation/index.cjs +9 -0
  19. package/dist/aggregation/index.cjs.map +1 -0
  20. package/dist/aggregation/index.d.cts +6 -0
  21. package/dist/aggregation/index.d.cts.map +1 -0
  22. package/dist/aggregation/index.d.mts +6 -0
  23. package/dist/aggregation/index.d.mts.map +1 -0
  24. package/dist/aggregation/index.mjs +5 -0
  25. package/dist/aggregation/index.mjs.map +1 -0
  26. package/dist/constants/chartConfig.cjs +227 -0
  27. package/dist/constants/chartConfig.cjs.map +1 -0
  28. package/dist/constants/chartConfig.d.cts +216 -0
  29. package/dist/constants/chartConfig.d.cts.map +1 -0
  30. package/dist/constants/chartConfig.d.mts +216 -0
  31. package/dist/constants/chartConfig.d.mts.map +1 -0
  32. package/dist/constants/chartConfig.mjs +221 -0
  33. package/dist/constants/chartConfig.mjs.map +1 -0
  34. package/dist/constants/eventNames.cjs +436 -0
  35. package/dist/constants/eventNames.cjs.map +1 -0
  36. package/dist/constants/eventNames.d.cts +387 -0
  37. package/dist/constants/eventNames.d.cts.map +1 -0
  38. package/dist/constants/eventNames.d.mts +387 -0
  39. package/dist/constants/eventNames.d.mts.map +1 -0
  40. package/dist/constants/eventNames.mjs +433 -0
  41. package/dist/constants/eventNames.mjs.map +1 -0
  42. package/dist/constants/hyperLiquidConfig.cjs +380 -0
  43. package/dist/constants/hyperLiquidConfig.cjs.map +1 -0
  44. package/dist/constants/hyperLiquidConfig.d.cts +236 -0
  45. package/dist/constants/hyperLiquidConfig.d.cts.map +1 -0
  46. package/dist/constants/hyperLiquidConfig.d.mts +236 -0
  47. package/dist/constants/hyperLiquidConfig.d.mts.map +1 -0
  48. package/dist/constants/hyperLiquidConfig.mjs +371 -0
  49. package/dist/constants/hyperLiquidConfig.mjs.map +1 -0
  50. package/dist/constants/index.cjs +28 -0
  51. package/dist/constants/index.cjs.map +1 -0
  52. package/dist/constants/index.d.cts +12 -0
  53. package/dist/constants/index.d.cts.map +1 -0
  54. package/dist/constants/index.d.mts +12 -0
  55. package/dist/constants/index.d.mts.map +1 -0
  56. package/dist/constants/index.mjs +12 -0
  57. package/dist/constants/index.mjs.map +1 -0
  58. package/dist/constants/myxConfig.cjs +229 -0
  59. package/dist/constants/myxConfig.cjs.map +1 -0
  60. package/dist/constants/myxConfig.d.cts +106 -0
  61. package/dist/constants/myxConfig.d.cts.map +1 -0
  62. package/dist/constants/myxConfig.d.mts +106 -0
  63. package/dist/constants/myxConfig.d.mts.map +1 -0
  64. package/dist/constants/myxConfig.mjs +219 -0
  65. package/dist/constants/myxConfig.mjs.map +1 -0
  66. package/dist/constants/orderTypes.cjs +31 -0
  67. package/dist/constants/orderTypes.cjs.map +1 -0
  68. package/dist/constants/orderTypes.d.cts +19 -0
  69. package/dist/constants/orderTypes.d.cts.map +1 -0
  70. package/dist/constants/orderTypes.d.mts +19 -0
  71. package/dist/constants/orderTypes.d.mts.map +1 -0
  72. package/dist/constants/orderTypes.mjs +27 -0
  73. package/dist/constants/orderTypes.mjs.map +1 -0
  74. package/dist/constants/performanceMetrics.cjs +63 -0
  75. package/dist/constants/performanceMetrics.cjs.map +1 -0
  76. package/dist/constants/performanceMetrics.d.cts +46 -0
  77. package/dist/constants/performanceMetrics.d.cts.map +1 -0
  78. package/dist/constants/performanceMetrics.d.mts +46 -0
  79. package/dist/constants/performanceMetrics.d.mts.map +1 -0
  80. package/dist/constants/performanceMetrics.mjs +60 -0
  81. package/dist/constants/performanceMetrics.mjs.map +1 -0
  82. package/dist/constants/perpsConfig.cjs +295 -0
  83. package/dist/constants/perpsConfig.cjs.map +1 -0
  84. package/dist/constants/perpsConfig.d.cts +221 -0
  85. package/dist/constants/perpsConfig.d.cts.map +1 -0
  86. package/dist/constants/perpsConfig.d.mts +221 -0
  87. package/dist/constants/perpsConfig.d.mts.map +1 -0
  88. package/dist/constants/perpsConfig.mjs +292 -0
  89. package/dist/constants/perpsConfig.mjs.map +1 -0
  90. package/dist/constants/transactionsHistoryConfig.cjs +19 -0
  91. package/dist/constants/transactionsHistoryConfig.cjs.map +1 -0
  92. package/dist/constants/transactionsHistoryConfig.d.cts +16 -0
  93. package/dist/constants/transactionsHistoryConfig.d.cts.map +1 -0
  94. package/dist/constants/transactionsHistoryConfig.d.mts +16 -0
  95. package/dist/constants/transactionsHistoryConfig.d.mts.map +1 -0
  96. package/dist/constants/transactionsHistoryConfig.mjs +16 -0
  97. package/dist/constants/transactionsHistoryConfig.mjs.map +1 -0
  98. package/dist/index.cjs +63 -1
  99. package/dist/index.cjs.map +1 -1
  100. package/dist/index.d.cts +38 -2
  101. package/dist/index.d.cts.map +1 -1
  102. package/dist/index.d.mts +38 -2
  103. package/dist/index.d.mts.map +1 -1
  104. package/dist/index.mjs +46 -1
  105. package/dist/index.mjs.map +1 -1
  106. package/dist/perpsErrorCodes.cjs +80 -0
  107. package/dist/perpsErrorCodes.cjs.map +1 -0
  108. package/dist/perpsErrorCodes.d.cts +65 -0
  109. package/dist/perpsErrorCodes.d.cts.map +1 -0
  110. package/dist/perpsErrorCodes.d.mts +65 -0
  111. package/dist/perpsErrorCodes.d.mts.map +1 -0
  112. package/dist/perpsErrorCodes.mjs +77 -0
  113. package/dist/perpsErrorCodes.mjs.map +1 -0
  114. package/dist/providers/AggregatedPerpsProvider.cjs +508 -0
  115. package/dist/providers/AggregatedPerpsProvider.cjs.map +1 -0
  116. package/dist/providers/AggregatedPerpsProvider.d.cts +171 -0
  117. package/dist/providers/AggregatedPerpsProvider.d.cts.map +1 -0
  118. package/dist/providers/AggregatedPerpsProvider.d.mts +171 -0
  119. package/dist/providers/AggregatedPerpsProvider.d.mts.map +1 -0
  120. package/dist/providers/AggregatedPerpsProvider.mjs +504 -0
  121. package/dist/providers/AggregatedPerpsProvider.mjs.map +1 -0
  122. package/dist/providers/HyperLiquidProvider.cjs +5679 -0
  123. package/dist/providers/HyperLiquidProvider.cjs.map +1 -0
  124. package/dist/providers/HyperLiquidProvider.d.cts +516 -0
  125. package/dist/providers/HyperLiquidProvider.d.cts.map +1 -0
  126. package/dist/providers/HyperLiquidProvider.d.mts +516 -0
  127. package/dist/providers/HyperLiquidProvider.d.mts.map +1 -0
  128. package/dist/providers/HyperLiquidProvider.mjs +5675 -0
  129. package/dist/providers/HyperLiquidProvider.mjs.map +1 -0
  130. package/dist/providers/MYXProvider.cjs +514 -0
  131. package/dist/providers/MYXProvider.cjs.map +1 -0
  132. package/dist/providers/MYXProvider.d.cts +105 -0
  133. package/dist/providers/MYXProvider.d.cts.map +1 -0
  134. package/dist/providers/MYXProvider.d.mts +105 -0
  135. package/dist/providers/MYXProvider.d.mts.map +1 -0
  136. package/dist/providers/MYXProvider.mjs +510 -0
  137. package/dist/providers/MYXProvider.mjs.map +1 -0
  138. package/dist/routing/ProviderRouter.cjs +154 -0
  139. package/dist/routing/ProviderRouter.cjs.map +1 -0
  140. package/dist/routing/ProviderRouter.d.cts +112 -0
  141. package/dist/routing/ProviderRouter.d.cts.map +1 -0
  142. package/dist/routing/ProviderRouter.d.mts +112 -0
  143. package/dist/routing/ProviderRouter.d.mts.map +1 -0
  144. package/dist/routing/ProviderRouter.mjs +150 -0
  145. package/dist/routing/ProviderRouter.mjs.map +1 -0
  146. package/dist/routing/index.cjs +9 -0
  147. package/dist/routing/index.cjs.map +1 -0
  148. package/dist/routing/index.d.cts +6 -0
  149. package/dist/routing/index.d.cts.map +1 -0
  150. package/dist/routing/index.d.mts +6 -0
  151. package/dist/routing/index.d.mts.map +1 -0
  152. package/dist/routing/index.mjs +5 -0
  153. package/dist/routing/index.mjs.map +1 -0
  154. package/dist/selectors.cjs +166 -0
  155. package/dist/selectors.cjs.map +1 -0
  156. package/dist/selectors.d.cts +362 -0
  157. package/dist/selectors.d.cts.map +1 -0
  158. package/dist/selectors.d.mts +362 -0
  159. package/dist/selectors.d.mts.map +1 -0
  160. package/dist/selectors.mjs +158 -0
  161. package/dist/selectors.mjs.map +1 -0
  162. package/dist/services/AccountService.cjs +324 -0
  163. package/dist/services/AccountService.cjs.map +1 -0
  164. package/dist/services/AccountService.d.cts +56 -0
  165. package/dist/services/AccountService.d.cts.map +1 -0
  166. package/dist/services/AccountService.d.mts +56 -0
  167. package/dist/services/AccountService.d.mts.map +1 -0
  168. package/dist/services/AccountService.mjs +320 -0
  169. package/dist/services/AccountService.mjs.map +1 -0
  170. package/dist/services/DataLakeService.cjs +233 -0
  171. package/dist/services/DataLakeService.cjs.map +1 -0
  172. package/dist/services/DataLakeService.d.cts +51 -0
  173. package/dist/services/DataLakeService.d.cts.map +1 -0
  174. package/dist/services/DataLakeService.d.mts +51 -0
  175. package/dist/services/DataLakeService.d.mts.map +1 -0
  176. package/dist/services/DataLakeService.mjs +229 -0
  177. package/dist/services/DataLakeService.mjs.map +1 -0
  178. package/dist/services/DepositService.cjs +98 -0
  179. package/dist/services/DepositService.cjs.map +1 -0
  180. package/dist/services/DepositService.d.cts +39 -0
  181. package/dist/services/DepositService.d.cts.map +1 -0
  182. package/dist/services/DepositService.d.mts +39 -0
  183. package/dist/services/DepositService.d.mts.map +1 -0
  184. package/dist/services/DepositService.mjs +94 -0
  185. package/dist/services/DepositService.mjs.map +1 -0
  186. package/dist/services/EligibilityService.cjs +173 -0
  187. package/dist/services/EligibilityService.cjs.map +1 -0
  188. package/dist/services/EligibilityService.d.cts +39 -0
  189. package/dist/services/EligibilityService.d.cts.map +1 -0
  190. package/dist/services/EligibilityService.d.mts +39 -0
  191. package/dist/services/EligibilityService.d.mts.map +1 -0
  192. package/dist/services/EligibilityService.mjs +169 -0
  193. package/dist/services/EligibilityService.mjs.map +1 -0
  194. package/dist/services/FeatureFlagConfigurationService.cjs +257 -0
  195. package/dist/services/FeatureFlagConfigurationService.cjs.map +1 -0
  196. package/dist/services/FeatureFlagConfigurationService.d.cts +73 -0
  197. package/dist/services/FeatureFlagConfigurationService.d.cts.map +1 -0
  198. package/dist/services/FeatureFlagConfigurationService.d.mts +73 -0
  199. package/dist/services/FeatureFlagConfigurationService.d.mts.map +1 -0
  200. package/dist/services/FeatureFlagConfigurationService.mjs +253 -0
  201. package/dist/services/FeatureFlagConfigurationService.mjs.map +1 -0
  202. package/dist/services/HyperLiquidClientService.cjs +867 -0
  203. package/dist/services/HyperLiquidClientService.cjs.map +1 -0
  204. package/dist/services/HyperLiquidClientService.d.cts +214 -0
  205. package/dist/services/HyperLiquidClientService.d.cts.map +1 -0
  206. package/dist/services/HyperLiquidClientService.d.mts +214 -0
  207. package/dist/services/HyperLiquidClientService.d.mts.map +1 -0
  208. package/dist/services/HyperLiquidClientService.mjs +862 -0
  209. package/dist/services/HyperLiquidClientService.mjs.map +1 -0
  210. package/dist/services/HyperLiquidSubscriptionService.cjs +2199 -0
  211. package/dist/services/HyperLiquidSubscriptionService.cjs.map +1 -0
  212. package/dist/services/HyperLiquidSubscriptionService.d.cts +187 -0
  213. package/dist/services/HyperLiquidSubscriptionService.d.cts.map +1 -0
  214. package/dist/services/HyperLiquidSubscriptionService.d.mts +187 -0
  215. package/dist/services/HyperLiquidSubscriptionService.d.mts.map +1 -0
  216. package/dist/services/HyperLiquidSubscriptionService.mjs +2195 -0
  217. package/dist/services/HyperLiquidSubscriptionService.mjs.map +1 -0
  218. package/dist/services/HyperLiquidWalletService.cjs +163 -0
  219. package/dist/services/HyperLiquidWalletService.cjs.map +1 -0
  220. package/dist/services/HyperLiquidWalletService.d.cts +78 -0
  221. package/dist/services/HyperLiquidWalletService.d.cts.map +1 -0
  222. package/dist/services/HyperLiquidWalletService.d.mts +78 -0
  223. package/dist/services/HyperLiquidWalletService.d.mts.map +1 -0
  224. package/dist/services/HyperLiquidWalletService.mjs +159 -0
  225. package/dist/services/HyperLiquidWalletService.mjs.map +1 -0
  226. package/dist/services/MYXClientService.cjs +304 -0
  227. package/dist/services/MYXClientService.cjs.map +1 -0
  228. package/dist/services/MYXClientService.d.cts +81 -0
  229. package/dist/services/MYXClientService.d.cts.map +1 -0
  230. package/dist/services/MYXClientService.d.mts +81 -0
  231. package/dist/services/MYXClientService.d.mts.map +1 -0
  232. package/dist/services/MYXClientService.mjs +300 -0
  233. package/dist/services/MYXClientService.mjs.map +1 -0
  234. package/dist/services/MarketDataService.cjs +848 -0
  235. package/dist/services/MarketDataService.cjs.map +1 -0
  236. package/dist/services/MarketDataService.d.cts +291 -0
  237. package/dist/services/MarketDataService.d.cts.map +1 -0
  238. package/dist/services/MarketDataService.d.mts +291 -0
  239. package/dist/services/MarketDataService.d.mts.map +1 -0
  240. package/dist/services/MarketDataService.mjs +844 -0
  241. package/dist/services/MarketDataService.mjs.map +1 -0
  242. package/dist/services/RewardsIntegrationService.cjs +120 -0
  243. package/dist/services/RewardsIntegrationService.cjs.map +1 -0
  244. package/dist/services/RewardsIntegrationService.d.cts +28 -0
  245. package/dist/services/RewardsIntegrationService.d.cts.map +1 -0
  246. package/dist/services/RewardsIntegrationService.d.mts +28 -0
  247. package/dist/services/RewardsIntegrationService.d.mts.map +1 -0
  248. package/dist/services/RewardsIntegrationService.mjs +116 -0
  249. package/dist/services/RewardsIntegrationService.mjs.map +1 -0
  250. package/dist/services/ServiceContext.cjs +3 -0
  251. package/dist/services/ServiceContext.cjs.map +1 -0
  252. package/dist/services/ServiceContext.d.cts +86 -0
  253. package/dist/services/ServiceContext.d.cts.map +1 -0
  254. package/dist/services/ServiceContext.d.mts +86 -0
  255. package/dist/services/ServiceContext.d.mts.map +1 -0
  256. package/dist/services/ServiceContext.mjs +2 -0
  257. package/dist/services/ServiceContext.mjs.map +1 -0
  258. package/dist/services/TradingReadinessCache.cjs +288 -0
  259. package/dist/services/TradingReadinessCache.cjs.map +1 -0
  260. package/dist/services/TradingReadinessCache.d.cts +174 -0
  261. package/dist/services/TradingReadinessCache.d.cts.map +1 -0
  262. package/dist/services/TradingReadinessCache.d.mts +174 -0
  263. package/dist/services/TradingReadinessCache.d.mts.map +1 -0
  264. package/dist/services/TradingReadinessCache.mjs +285 -0
  265. package/dist/services/TradingReadinessCache.mjs.map +1 -0
  266. package/dist/services/TradingService.cjs +1457 -0
  267. package/dist/services/TradingService.cjs.map +1 -0
  268. package/dist/services/TradingService.d.cts +195 -0
  269. package/dist/services/TradingService.d.cts.map +1 -0
  270. package/dist/services/TradingService.d.mts +195 -0
  271. package/dist/services/TradingService.d.mts.map +1 -0
  272. package/dist/services/TradingService.mjs +1453 -0
  273. package/dist/services/TradingService.mjs.map +1 -0
  274. package/dist/types/config.cjs +3 -0
  275. package/dist/types/config.cjs.map +1 -0
  276. package/dist/types/config.d.cts +49 -0
  277. package/dist/types/config.d.cts.map +1 -0
  278. package/dist/types/config.d.mts +49 -0
  279. package/dist/types/config.d.mts.map +1 -0
  280. package/dist/types/config.mjs +2 -0
  281. package/dist/types/config.mjs.map +1 -0
  282. package/dist/types/hyperliquid-types.cjs +3 -0
  283. package/dist/types/hyperliquid-types.cjs.map +1 -0
  284. package/dist/types/hyperliquid-types.d.cts +20 -0
  285. package/dist/types/hyperliquid-types.d.cts.map +1 -0
  286. package/dist/types/hyperliquid-types.d.mts +20 -0
  287. package/dist/types/hyperliquid-types.d.mts.map +1 -0
  288. package/dist/types/hyperliquid-types.mjs +2 -0
  289. package/dist/types/hyperliquid-types.mjs.map +1 -0
  290. package/dist/types/index.cjs +115 -0
  291. package/dist/types/index.cjs.map +1 -0
  292. package/dist/types/index.d.cts +1262 -0
  293. package/dist/types/index.d.cts.map +1 -0
  294. package/dist/types/index.d.mts +1262 -0
  295. package/dist/types/index.d.mts.map +1 -0
  296. package/dist/types/index.mjs +97 -0
  297. package/dist/types/index.mjs.map +1 -0
  298. package/dist/types/messenger.cjs +3 -0
  299. package/dist/types/messenger.cjs.map +1 -0
  300. package/dist/types/messenger.d.cts +27 -0
  301. package/dist/types/messenger.d.cts.map +1 -0
  302. package/dist/types/messenger.d.mts +27 -0
  303. package/dist/types/messenger.d.mts.map +1 -0
  304. package/dist/types/messenger.mjs +2 -0
  305. package/dist/types/messenger.mjs.map +1 -0
  306. package/dist/types/myx-types.cjs +25 -0
  307. package/dist/types/myx-types.cjs.map +1 -0
  308. package/dist/types/myx-types.d.cts +63 -0
  309. package/dist/types/myx-types.d.cts.map +1 -0
  310. package/dist/types/myx-types.d.mts +63 -0
  311. package/dist/types/myx-types.d.mts.map +1 -0
  312. package/dist/types/myx-types.mjs +22 -0
  313. package/dist/types/myx-types.mjs.map +1 -0
  314. package/dist/types/perps-types.cjs +4 -0
  315. package/dist/types/perps-types.cjs.map +1 -0
  316. package/dist/types/perps-types.d.cts +105 -0
  317. package/dist/types/perps-types.d.cts.map +1 -0
  318. package/dist/types/perps-types.d.mts +105 -0
  319. package/dist/types/perps-types.d.mts.map +1 -0
  320. package/dist/types/perps-types.mjs +2 -0
  321. package/dist/types/perps-types.mjs.map +1 -0
  322. package/dist/types/token.cjs +3 -0
  323. package/dist/types/token.cjs.map +1 -0
  324. package/dist/types/token.d.cts +25 -0
  325. package/dist/types/token.d.cts.map +1 -0
  326. package/dist/types/token.d.mts +25 -0
  327. package/dist/types/token.d.mts.map +1 -0
  328. package/dist/types/token.mjs +2 -0
  329. package/dist/types/token.mjs.map +1 -0
  330. package/dist/types/transactionTypes.cjs +28 -0
  331. package/dist/types/transactionTypes.cjs.map +1 -0
  332. package/dist/types/transactionTypes.d.cts +64 -0
  333. package/dist/types/transactionTypes.d.cts.map +1 -0
  334. package/dist/types/transactionTypes.d.mts +64 -0
  335. package/dist/types/transactionTypes.d.mts.map +1 -0
  336. package/dist/types/transactionTypes.mjs +23 -0
  337. package/dist/types/transactionTypes.mjs.map +1 -0
  338. package/dist/utils/accountUtils.cjs +100 -0
  339. package/dist/utils/accountUtils.cjs.map +1 -0
  340. package/dist/utils/accountUtils.d.cts +30 -0
  341. package/dist/utils/accountUtils.d.cts.map +1 -0
  342. package/dist/utils/accountUtils.d.mts +30 -0
  343. package/dist/utils/accountUtils.d.mts.map +1 -0
  344. package/dist/utils/accountUtils.mjs +92 -0
  345. package/dist/utils/accountUtils.mjs.map +1 -0
  346. package/dist/utils/errorUtils.cjs +35 -0
  347. package/dist/utils/errorUtils.cjs.map +1 -0
  348. package/dist/utils/errorUtils.d.cts +15 -0
  349. package/dist/utils/errorUtils.d.cts.map +1 -0
  350. package/dist/utils/errorUtils.d.mts +15 -0
  351. package/dist/utils/errorUtils.d.mts.map +1 -0
  352. package/dist/utils/errorUtils.mjs +31 -0
  353. package/dist/utils/errorUtils.mjs.map +1 -0
  354. package/dist/utils/hyperLiquidAdapter.cjs +331 -0
  355. package/dist/utils/hyperLiquidAdapter.cjs.map +1 -0
  356. package/dist/utils/hyperLiquidAdapter.d.cts +42 -0
  357. package/dist/utils/hyperLiquidAdapter.d.cts.map +1 -0
  358. package/dist/utils/hyperLiquidAdapter.d.mts +42 -0
  359. package/dist/utils/hyperLiquidAdapter.d.mts.map +1 -0
  360. package/dist/utils/hyperLiquidAdapter.mjs +316 -0
  361. package/dist/utils/hyperLiquidAdapter.mjs.map +1 -0
  362. package/dist/utils/hyperLiquidOrderBookProcessor.cjs +83 -0
  363. package/dist/utils/hyperLiquidOrderBookProcessor.cjs.map +1 -0
  364. package/dist/utils/hyperLiquidOrderBookProcessor.d.cts +55 -0
  365. package/dist/utils/hyperLiquidOrderBookProcessor.d.cts.map +1 -0
  366. package/dist/utils/hyperLiquidOrderBookProcessor.d.mts +55 -0
  367. package/dist/utils/hyperLiquidOrderBookProcessor.d.mts.map +1 -0
  368. package/dist/utils/hyperLiquidOrderBookProcessor.mjs +78 -0
  369. package/dist/utils/hyperLiquidOrderBookProcessor.mjs.map +1 -0
  370. package/dist/utils/hyperLiquidValidation.cjs +426 -0
  371. package/dist/utils/hyperLiquidValidation.cjs.map +1 -0
  372. package/dist/utils/hyperLiquidValidation.d.cts +143 -0
  373. package/dist/utils/hyperLiquidValidation.d.cts.map +1 -0
  374. package/dist/utils/hyperLiquidValidation.d.mts +143 -0
  375. package/dist/utils/hyperLiquidValidation.d.mts.map +1 -0
  376. package/dist/utils/hyperLiquidValidation.mjs +413 -0
  377. package/dist/utils/hyperLiquidValidation.mjs.map +1 -0
  378. package/dist/utils/idUtils.cjs +18 -0
  379. package/dist/utils/idUtils.cjs.map +1 -0
  380. package/dist/utils/idUtils.d.cts +6 -0
  381. package/dist/utils/idUtils.d.cts.map +1 -0
  382. package/dist/utils/idUtils.d.mts +6 -0
  383. package/dist/utils/idUtils.d.mts.map +1 -0
  384. package/dist/utils/idUtils.mjs +10 -0
  385. package/dist/utils/idUtils.mjs.map +1 -0
  386. package/dist/utils/index.cjs +59 -0
  387. package/dist/utils/index.cjs.map +1 -0
  388. package/dist/utils/index.d.cts +25 -0
  389. package/dist/utils/index.d.cts.map +1 -0
  390. package/dist/utils/index.d.mts +25 -0
  391. package/dist/utils/index.d.mts.map +1 -0
  392. package/dist/utils/index.mjs +30 -0
  393. package/dist/utils/index.mjs.map +1 -0
  394. package/dist/utils/marketDataTransform.cjs +211 -0
  395. package/dist/utils/marketDataTransform.cjs.map +1 -0
  396. package/dist/utils/marketDataTransform.d.cts +40 -0
  397. package/dist/utils/marketDataTransform.d.cts.map +1 -0
  398. package/dist/utils/marketDataTransform.d.mts +40 -0
  399. package/dist/utils/marketDataTransform.d.mts.map +1 -0
  400. package/dist/utils/marketDataTransform.mjs +205 -0
  401. package/dist/utils/marketDataTransform.mjs.map +1 -0
  402. package/dist/utils/marketUtils.cjs +151 -0
  403. package/dist/utils/marketUtils.cjs.map +1 -0
  404. package/dist/utils/marketUtils.d.cts +30 -0
  405. package/dist/utils/marketUtils.d.cts.map +1 -0
  406. package/dist/utils/marketUtils.d.mts +30 -0
  407. package/dist/utils/marketUtils.d.mts.map +1 -0
  408. package/dist/utils/marketUtils.mjs +138 -0
  409. package/dist/utils/marketUtils.mjs.map +1 -0
  410. package/dist/utils/myxAdapter.cjs +224 -0
  411. package/dist/utils/myxAdapter.cjs.map +1 -0
  412. package/dist/utils/myxAdapter.d.cts +81 -0
  413. package/dist/utils/myxAdapter.d.cts.map +1 -0
  414. package/dist/utils/myxAdapter.d.mts +81 -0
  415. package/dist/utils/myxAdapter.d.mts.map +1 -0
  416. package/dist/utils/myxAdapter.mjs +213 -0
  417. package/dist/utils/myxAdapter.mjs.map +1 -0
  418. package/dist/utils/orderCalculations.cjs +283 -0
  419. package/dist/utils/orderCalculations.cjs.map +1 -0
  420. package/dist/utils/orderCalculations.d.cts +107 -0
  421. package/dist/utils/orderCalculations.d.cts.map +1 -0
  422. package/dist/utils/orderCalculations.d.mts +107 -0
  423. package/dist/utils/orderCalculations.d.mts.map +1 -0
  424. package/dist/utils/orderCalculations.mjs +274 -0
  425. package/dist/utils/orderCalculations.mjs.map +1 -0
  426. package/dist/utils/rewardsUtils.cjs +98 -0
  427. package/dist/utils/rewardsUtils.cjs.map +1 -0
  428. package/dist/utils/rewardsUtils.d.cts +33 -0
  429. package/dist/utils/rewardsUtils.d.cts.map +1 -0
  430. package/dist/utils/rewardsUtils.d.mts +33 -0
  431. package/dist/utils/rewardsUtils.d.mts.map +1 -0
  432. package/dist/utils/rewardsUtils.mjs +92 -0
  433. package/dist/utils/rewardsUtils.mjs.map +1 -0
  434. package/dist/utils/significantFigures.cjs +88 -0
  435. package/dist/utils/significantFigures.cjs.map +1 -0
  436. package/dist/utils/significantFigures.d.cts +25 -0
  437. package/dist/utils/significantFigures.d.cts.map +1 -0
  438. package/dist/utils/significantFigures.d.mts +25 -0
  439. package/dist/utils/significantFigures.d.mts.map +1 -0
  440. package/dist/utils/significantFigures.mjs +82 -0
  441. package/dist/utils/significantFigures.mjs.map +1 -0
  442. package/dist/utils/sortMarkets.cjs +93 -0
  443. package/dist/utils/sortMarkets.cjs.map +1 -0
  444. package/dist/utils/sortMarkets.d.cts +27 -0
  445. package/dist/utils/sortMarkets.d.cts.map +1 -0
  446. package/dist/utils/sortMarkets.d.mts +27 -0
  447. package/dist/utils/sortMarkets.d.mts.map +1 -0
  448. package/dist/utils/sortMarkets.mjs +88 -0
  449. package/dist/utils/sortMarkets.mjs.map +1 -0
  450. package/dist/utils/standaloneInfoClient.cjs +70 -0
  451. package/dist/utils/standaloneInfoClient.cjs.map +1 -0
  452. package/dist/utils/standaloneInfoClient.d.cts +37 -0
  453. package/dist/utils/standaloneInfoClient.d.cts.map +1 -0
  454. package/dist/utils/standaloneInfoClient.d.mts +37 -0
  455. package/dist/utils/standaloneInfoClient.d.mts.map +1 -0
  456. package/dist/utils/standaloneInfoClient.mjs +64 -0
  457. package/dist/utils/standaloneInfoClient.mjs.map +1 -0
  458. package/dist/utils/stringParseUtils.cjs +18 -0
  459. package/dist/utils/stringParseUtils.cjs.map +1 -0
  460. package/dist/utils/stringParseUtils.d.cts +3 -0
  461. package/dist/utils/stringParseUtils.d.cts.map +1 -0
  462. package/dist/utils/stringParseUtils.d.mts +3 -0
  463. package/dist/utils/stringParseUtils.d.mts.map +1 -0
  464. package/dist/utils/stringParseUtils.mjs +13 -0
  465. package/dist/utils/stringParseUtils.mjs.map +1 -0
  466. package/dist/utils/transferData.cjs +33 -0
  467. package/dist/utils/transferData.cjs.map +1 -0
  468. package/dist/utils/transferData.d.cts +9 -0
  469. package/dist/utils/transferData.d.cts.map +1 -0
  470. package/dist/utils/transferData.d.mts +9 -0
  471. package/dist/utils/transferData.d.mts.map +1 -0
  472. package/dist/utils/transferData.mjs +29 -0
  473. package/dist/utils/transferData.mjs.map +1 -0
  474. package/dist/utils/wait.cjs +6 -0
  475. package/dist/utils/wait.cjs.map +1 -0
  476. package/dist/utils/wait.d.cts +2 -0
  477. package/dist/utils/wait.d.cts.map +1 -0
  478. package/dist/utils/wait.d.mts +2 -0
  479. package/dist/utils/wait.d.mts.map +1 -0
  480. package/dist/utils/wait.mjs +2 -0
  481. package/dist/utils/wait.mjs.map +1 -0
  482. package/package.json +16 -2
@@ -0,0 +1,504 @@
1
+ /**
2
+ * AggregatedPerpsProvider - Multi-provider aggregation wrapper
3
+ *
4
+ * Implements PerpsProvider interface to enable seamless multi-provider support.
5
+ * Aggregates read operations from all providers, routes write operations to specific
6
+ * providers based on params.providerId or default provider.
7
+ *
8
+ * Phase 1 Implementation:
9
+ * - Read operations: Aggregate from all providers using Promise.allSettled()
10
+ * - Write operations: Route to params.providerId ?? defaultProvider
11
+ * - Subscriptions: Multiplex via SubscriptionMultiplexer
12
+ * - Lifecycle: Delegate to default provider
13
+ *
14
+ * All returned data includes providerId field for UI differentiation.
15
+ */
16
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
17
+ if (kind === "m") throw new TypeError("Private method is not writable");
18
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
19
+ 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");
20
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
21
+ };
22
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
23
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
24
+ 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");
25
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
26
+ };
27
+ var _AggregatedPerpsProvider_instances, _AggregatedPerpsProvider_providers, _AggregatedPerpsProvider_defaultProvider, _AggregatedPerpsProvider_aggregationMode, _AggregatedPerpsProvider_deps, _AggregatedPerpsProvider_router, _AggregatedPerpsProvider_subscriptionMux, _AggregatedPerpsProvider_getActiveProviders, _AggregatedPerpsProvider_getDefaultProvider, _AggregatedPerpsProvider_getProviderOrDefault, _AggregatedPerpsProvider_extractSuccessfulResults;
28
+ import { SubscriptionMultiplexer } from "../aggregation/SubscriptionMultiplexer.mjs";
29
+ import { ProviderRouter } from "../routing/ProviderRouter.mjs";
30
+ /**
31
+ * AggregatedPerpsProvider implements PerpsProvider by coordinating
32
+ * multiple backend providers.
33
+ *
34
+ * Design principles:
35
+ * 1. Read operations aggregate from all providers (parallel)
36
+ * 2. Write operations route to specific provider (explicit > default)
37
+ * 3. Lifecycle operations delegate to default provider
38
+ * 4. All returned data includes providerId for UI differentiation
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * const aggregated = new AggregatedPerpsProvider({
43
+ * providers: new Map([
44
+ * ['hyperliquid', hlProvider],
45
+ * ['myx', myxProvider],
46
+ * ]),
47
+ * defaultProvider: 'hyperliquid',
48
+ * infrastructure: deps,
49
+ * });
50
+ *
51
+ * // Read: returns positions from all providers
52
+ * const positions = await aggregated.getPositions();
53
+ *
54
+ * // Write: routes to specific or default provider
55
+ * await aggregated.placeOrder({ symbol: 'BTC', providerId: 'myx', ... });
56
+ * ```
57
+ */
58
+ export class AggregatedPerpsProvider {
59
+ constructor(config) {
60
+ _AggregatedPerpsProvider_instances.add(this);
61
+ this.protocolId = 'aggregated';
62
+ _AggregatedPerpsProvider_providers.set(this, void 0);
63
+ _AggregatedPerpsProvider_defaultProvider.set(this, void 0);
64
+ _AggregatedPerpsProvider_aggregationMode.set(this, void 0);
65
+ _AggregatedPerpsProvider_deps.set(this, void 0);
66
+ _AggregatedPerpsProvider_router.set(this, void 0);
67
+ _AggregatedPerpsProvider_subscriptionMux.set(this, void 0);
68
+ __classPrivateFieldSet(this, _AggregatedPerpsProvider_providers, config.providers, "f");
69
+ __classPrivateFieldSet(this, _AggregatedPerpsProvider_defaultProvider, config.defaultProvider, "f");
70
+ __classPrivateFieldSet(this, _AggregatedPerpsProvider_aggregationMode, config.aggregationMode ?? 'all', "f");
71
+ __classPrivateFieldSet(this, _AggregatedPerpsProvider_deps, config.infrastructure, "f");
72
+ // Initialize router with default provider
73
+ __classPrivateFieldSet(this, _AggregatedPerpsProvider_router, new ProviderRouter({
74
+ defaultProvider: __classPrivateFieldGet(this, _AggregatedPerpsProvider_defaultProvider, "f"),
75
+ }), "f");
76
+ // Initialize subscription multiplexer with logger for error reporting
77
+ __classPrivateFieldSet(this, _AggregatedPerpsProvider_subscriptionMux, new SubscriptionMultiplexer({
78
+ logger: __classPrivateFieldGet(this, _AggregatedPerpsProvider_deps, "f").logger,
79
+ }), "f");
80
+ __classPrivateFieldGet(this, _AggregatedPerpsProvider_deps, "f").debugLogger.log('[AggregatedPerpsProvider] Initialized', {
81
+ providers: Array.from(__classPrivateFieldGet(this, _AggregatedPerpsProvider_providers, "f").keys()),
82
+ defaultProvider: __classPrivateFieldGet(this, _AggregatedPerpsProvider_defaultProvider, "f"),
83
+ aggregationMode: __classPrivateFieldGet(this, _AggregatedPerpsProvider_aggregationMode, "f"),
84
+ });
85
+ }
86
+ // ============================================================================
87
+ // Asset Routes (Synchronous - delegate to default provider)
88
+ // ============================================================================
89
+ getDepositRoutes(params) {
90
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getDefaultProvider).call(this).getDepositRoutes(params);
91
+ }
92
+ getWithdrawalRoutes(params) {
93
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getDefaultProvider).call(this).getWithdrawalRoutes(params);
94
+ }
95
+ // ============================================================================
96
+ // Read Operations (Aggregate from all providers)
97
+ // ============================================================================
98
+ async getPositions(params) {
99
+ const results = await Promise.allSettled(__classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getActiveProviders).call(this).map(async ([id, provider]) => {
100
+ const positions = await provider.getPositions(params);
101
+ return positions.map((pos) => ({ ...pos, providerId: id }));
102
+ }));
103
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_extractSuccessfulResults).call(this, results, 'getPositions').flat();
104
+ }
105
+ async getAccountState(params) {
106
+ // Return account state from default provider with providerId injected
107
+ const provider = __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getDefaultProvider).call(this);
108
+ const state = await provider.getAccountState(params);
109
+ return { ...state, providerId: __classPrivateFieldGet(this, _AggregatedPerpsProvider_defaultProvider, "f") };
110
+ }
111
+ async getMarkets(params) {
112
+ const results = await Promise.allSettled(__classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getActiveProviders).call(this).map(async ([id, provider]) => {
113
+ const markets = await provider.getMarkets(params);
114
+ return markets.map((market) => ({ ...market, providerId: id }));
115
+ }));
116
+ const allMarkets = __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_extractSuccessfulResults).call(this, results, 'getMarkets').flat();
117
+ // Deduplicate markets by name (keep first occurrence)
118
+ const seen = new Set();
119
+ return allMarkets.filter((market) => {
120
+ // Use providerId:name as unique key to allow same market from different providers
121
+ const key = `${market.providerId}:${market.name}`;
122
+ if (seen.has(key)) {
123
+ return false;
124
+ }
125
+ seen.add(key);
126
+ return true;
127
+ });
128
+ }
129
+ async getMarketDataWithPrices() {
130
+ const results = await Promise.allSettled(__classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getActiveProviders).call(this).map(async ([id, provider]) => {
131
+ const data = await provider.getMarketDataWithPrices();
132
+ return data.map((item) => ({ ...item, providerId: id }));
133
+ }));
134
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_extractSuccessfulResults).call(this, results, 'getMarketDataWithPrices').flat();
135
+ }
136
+ async getOrderFills(params) {
137
+ const results = await Promise.allSettled(__classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getActiveProviders).call(this).map(async ([id, provider]) => {
138
+ const fills = await provider.getOrderFills(params);
139
+ return fills.map((fill) => ({ ...fill, providerId: id }));
140
+ }));
141
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_extractSuccessfulResults).call(this, results, 'getOrderFills').flat();
142
+ }
143
+ async getOrFetchFills(params) {
144
+ const results = await Promise.allSettled(__classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getActiveProviders).call(this).map(async ([id, provider]) => {
145
+ const fills = await provider.getOrFetchFills(params);
146
+ return fills.map((fill) => ({ ...fill, providerId: id }));
147
+ }));
148
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_extractSuccessfulResults).call(this, results, 'getOrFetchFills').flat();
149
+ }
150
+ async getOrders(params) {
151
+ const results = await Promise.allSettled(__classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getActiveProviders).call(this).map(async ([id, provider]) => {
152
+ const orders = await provider.getOrders(params);
153
+ return orders.map((order) => ({ ...order, providerId: id }));
154
+ }));
155
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_extractSuccessfulResults).call(this, results, 'getOrders').flat();
156
+ }
157
+ async getOpenOrders(params) {
158
+ const results = await Promise.allSettled(__classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getActiveProviders).call(this).map(async ([id, provider]) => {
159
+ const orders = await provider.getOpenOrders(params);
160
+ return orders.map((order) => ({ ...order, providerId: id }));
161
+ }));
162
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_extractSuccessfulResults).call(this, results, 'getOpenOrders').flat();
163
+ }
164
+ async getFunding(params) {
165
+ const results = await Promise.allSettled(__classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getActiveProviders).call(this).map(async ([_providerId, provider]) => {
166
+ const funding = await provider.getFunding(params);
167
+ // Funding type doesn't have providerId - we could add it if needed
168
+ return funding;
169
+ }));
170
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_extractSuccessfulResults).call(this, results, 'getFunding').flat();
171
+ }
172
+ async getHistoricalPortfolio(params) {
173
+ // Delegate to default provider
174
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getDefaultProvider).call(this).getHistoricalPortfolio(params);
175
+ }
176
+ /**
177
+ * Get user non-funding ledger updates from default provider.
178
+ *
179
+ * @param params - Optional parameters
180
+ * @param params.accountId - Account ID to filter by
181
+ * @param params.startTime - Start time filter
182
+ * @param params.endTime - End time filter
183
+ * @returns Raw ledger updates
184
+ */
185
+ async getUserNonFundingLedgerUpdates(params) {
186
+ // Delegate to default provider (protocol-specific)
187
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getDefaultProvider).call(this).getUserNonFundingLedgerUpdates(params);
188
+ }
189
+ /**
190
+ * Get user history from all providers.
191
+ *
192
+ * @param params - Optional parameters
193
+ * @param params.accountId - Account ID to filter by
194
+ * @param params.startTime - Start time filter
195
+ * @param params.endTime - End time filter
196
+ * @returns Aggregated user history with providerId
197
+ */
198
+ async getUserHistory(params) {
199
+ const results = await Promise.allSettled(__classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getActiveProviders).call(this).map(async ([id, provider]) => {
200
+ const history = await provider.getUserHistory(params);
201
+ return history.map((item) => ({ ...item, providerId: id }));
202
+ }));
203
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_extractSuccessfulResults).call(this, results, 'getUserHistory').flat();
204
+ }
205
+ // ============================================================================
206
+ // Write Operations (Route to specific provider)
207
+ // ============================================================================
208
+ async placeOrder(params) {
209
+ const [providerId, provider] = __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getProviderOrDefault).call(this, params.providerId);
210
+ __classPrivateFieldGet(this, _AggregatedPerpsProvider_deps, "f").debugLogger.log('[AggregatedPerpsProvider] placeOrder routing', {
211
+ requestedProvider: params.providerId,
212
+ actualProvider: providerId,
213
+ symbol: params.symbol,
214
+ });
215
+ const result = await provider.placeOrder(params);
216
+ return { ...result, providerId };
217
+ }
218
+ async editOrder(params) {
219
+ // EditOrderParams contains OrderParams in newOrder which may have providerId
220
+ const [providerId, provider] = __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getProviderOrDefault).call(this, params.newOrder.providerId);
221
+ const result = await provider.editOrder(params);
222
+ return { ...result, providerId };
223
+ }
224
+ async cancelOrder(params) {
225
+ const [providerId, provider] = __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getProviderOrDefault).call(this, params.providerId);
226
+ const result = await provider.cancelOrder(params);
227
+ return { ...result, providerId };
228
+ }
229
+ async cancelOrders(params) {
230
+ // Batch cancel delegates to default provider
231
+ const provider = __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getDefaultProvider).call(this);
232
+ if (!provider.cancelOrders) {
233
+ return {
234
+ success: false,
235
+ successCount: 0,
236
+ failureCount: params.length,
237
+ results: params.map((param) => ({
238
+ orderId: param.orderId,
239
+ symbol: param.symbol,
240
+ success: false,
241
+ error: 'Batch cancel not supported',
242
+ })),
243
+ };
244
+ }
245
+ return provider.cancelOrders(params);
246
+ }
247
+ async closePosition(params) {
248
+ const [providerId, provider] = __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getProviderOrDefault).call(this, params.providerId);
249
+ const result = await provider.closePosition(params);
250
+ return { ...result, providerId };
251
+ }
252
+ async closePositions(params) {
253
+ // Batch close delegates to default provider
254
+ const provider = __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getDefaultProvider).call(this);
255
+ if (!provider.closePositions) {
256
+ return {
257
+ success: false,
258
+ successCount: 0,
259
+ failureCount: 0,
260
+ results: [],
261
+ };
262
+ }
263
+ return provider.closePositions(params);
264
+ }
265
+ async updatePositionTPSL(params) {
266
+ const [providerId, provider] = __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getProviderOrDefault).call(this, params.providerId);
267
+ const result = await provider.updatePositionTPSL(params);
268
+ return { ...result, providerId };
269
+ }
270
+ async updateMargin(params) {
271
+ const [, provider] = __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getProviderOrDefault).call(this, params.providerId);
272
+ return provider.updateMargin(params);
273
+ }
274
+ async withdraw(params) {
275
+ const [, provider] = __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getProviderOrDefault).call(this, params.providerId);
276
+ return provider.withdraw(params);
277
+ }
278
+ // ============================================================================
279
+ // Validation (Route to specific provider)
280
+ // ============================================================================
281
+ async validateDeposit(params) {
282
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getDefaultProvider).call(this).validateDeposit(params);
283
+ }
284
+ async validateOrder(params) {
285
+ const [, provider] = __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getProviderOrDefault).call(this, params.providerId);
286
+ return provider.validateOrder(params);
287
+ }
288
+ async validateClosePosition(params) {
289
+ const [, provider] = __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getProviderOrDefault).call(this, params.providerId);
290
+ return provider.validateClosePosition(params);
291
+ }
292
+ async validateWithdrawal(params) {
293
+ const [, provider] = __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getProviderOrDefault).call(this, params.providerId);
294
+ return provider.validateWithdrawal(params);
295
+ }
296
+ // ============================================================================
297
+ // Protocol Calculations (Delegate to default or route)
298
+ // ============================================================================
299
+ async calculateLiquidationPrice(params) {
300
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getDefaultProvider).call(this).calculateLiquidationPrice(params);
301
+ }
302
+ async calculateMaintenanceMargin(params) {
303
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getDefaultProvider).call(this).calculateMaintenanceMargin(params);
304
+ }
305
+ async getMaxLeverage(asset) {
306
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getDefaultProvider).call(this).getMaxLeverage(asset);
307
+ }
308
+ async calculateFees(params) {
309
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getDefaultProvider).call(this).calculateFees(params);
310
+ }
311
+ // ============================================================================
312
+ // Subscriptions (Multiplex via SubscriptionMultiplexer)
313
+ // ============================================================================
314
+ subscribeToPrices(params) {
315
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_subscriptionMux, "f").subscribeToPrices({
316
+ ...params,
317
+ providers: __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getActiveProviders).call(this),
318
+ aggregationMode: 'merge',
319
+ });
320
+ }
321
+ subscribeToPositions(params) {
322
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_subscriptionMux, "f").subscribeToPositions({
323
+ ...params,
324
+ providers: __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getActiveProviders).call(this),
325
+ });
326
+ }
327
+ subscribeToOrderFills(params) {
328
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_subscriptionMux, "f").subscribeToOrderFills({
329
+ ...params,
330
+ providers: __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getActiveProviders).call(this),
331
+ });
332
+ }
333
+ subscribeToOrders(params) {
334
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_subscriptionMux, "f").subscribeToOrders({
335
+ ...params,
336
+ providers: __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getActiveProviders).call(this),
337
+ });
338
+ }
339
+ subscribeToAccount(params) {
340
+ // For account subscriptions, we emit as array for multi-provider
341
+ // but the callback expects single AccountState
342
+ // Delegate to default provider for now
343
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getDefaultProvider).call(this).subscribeToAccount(params);
344
+ }
345
+ subscribeToOICaps(params) {
346
+ // Delegate to default provider
347
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getDefaultProvider).call(this).subscribeToOICaps(params);
348
+ }
349
+ subscribeToCandles(params) {
350
+ // Delegate to default provider
351
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getDefaultProvider).call(this).subscribeToCandles(params);
352
+ }
353
+ subscribeToOrderBook(params) {
354
+ // Delegate to default provider
355
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getDefaultProvider).call(this).subscribeToOrderBook(params);
356
+ }
357
+ // ============================================================================
358
+ // Configuration
359
+ // ============================================================================
360
+ setLiveDataConfig(config) {
361
+ // Apply config to all providers
362
+ __classPrivateFieldGet(this, _AggregatedPerpsProvider_providers, "f").forEach((provider) => {
363
+ provider.setLiveDataConfig(config);
364
+ });
365
+ }
366
+ setUserFeeDiscount(discountBips) {
367
+ // Apply to all providers that support it
368
+ __classPrivateFieldGet(this, _AggregatedPerpsProvider_providers, "f").forEach((provider) => {
369
+ if (provider.setUserFeeDiscount) {
370
+ provider.setUserFeeDiscount(discountBips);
371
+ }
372
+ });
373
+ }
374
+ // ============================================================================
375
+ // Lifecycle (Delegate to default provider)
376
+ // ============================================================================
377
+ async toggleTestnet() {
378
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getDefaultProvider).call(this).toggleTestnet();
379
+ }
380
+ async initialize() {
381
+ // Initialize default provider
382
+ const result = await __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getDefaultProvider).call(this).initialize();
383
+ // Optionally initialize other providers in background
384
+ // For Phase 1, we only initialize default provider
385
+ return result;
386
+ }
387
+ async isReadyToTrade() {
388
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getDefaultProvider).call(this).isReadyToTrade();
389
+ }
390
+ async disconnect() {
391
+ // Disconnect all providers
392
+ const results = await Promise.allSettled(__classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getActiveProviders).call(this).map(([, provider]) => provider.disconnect()));
393
+ // Clear subscription cache
394
+ __classPrivateFieldGet(this, _AggregatedPerpsProvider_subscriptionMux, "f").clearCache();
395
+ // Return success if at least one succeeded
396
+ const successCount = results.filter((res) => res.status === 'fulfilled' && res.value.success).length;
397
+ return {
398
+ success: successCount > 0,
399
+ };
400
+ }
401
+ async ping(timeoutMs) {
402
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getDefaultProvider).call(this).ping(timeoutMs);
403
+ }
404
+ // ============================================================================
405
+ // Block Explorer
406
+ // ============================================================================
407
+ getBlockExplorerUrl(address) {
408
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getDefaultProvider).call(this).getBlockExplorerUrl(address);
409
+ }
410
+ // ============================================================================
411
+ // HIP-3 (Optional)
412
+ // ============================================================================
413
+ async getAvailableDexs(params) {
414
+ const provider = __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getDefaultProvider).call(this);
415
+ if (!provider.getAvailableDexs) {
416
+ return [];
417
+ }
418
+ return provider.getAvailableDexs(params);
419
+ }
420
+ // ============================================================================
421
+ // Provider Management
422
+ // ============================================================================
423
+ /**
424
+ * Add a new provider to the aggregated provider.
425
+ *
426
+ * @param providerId - Unique identifier for the provider
427
+ * @param provider - Provider instance
428
+ */
429
+ addProvider(providerId, provider) {
430
+ __classPrivateFieldGet(this, _AggregatedPerpsProvider_providers, "f").set(providerId, provider);
431
+ __classPrivateFieldGet(this, _AggregatedPerpsProvider_deps, "f").debugLogger.log('[AggregatedPerpsProvider] Provider added', {
432
+ providerId,
433
+ });
434
+ }
435
+ /**
436
+ * Remove a provider from the aggregated provider.
437
+ *
438
+ * @param providerId - Provider to remove
439
+ * @returns true if removed, false if not found
440
+ */
441
+ removeProvider(providerId) {
442
+ const removed = __classPrivateFieldGet(this, _AggregatedPerpsProvider_providers, "f").delete(providerId);
443
+ if (removed) {
444
+ __classPrivateFieldGet(this, _AggregatedPerpsProvider_deps, "f").debugLogger.log('[AggregatedPerpsProvider] Provider removed', {
445
+ providerId,
446
+ });
447
+ }
448
+ return removed;
449
+ }
450
+ /**
451
+ * Get list of all registered provider IDs.
452
+ *
453
+ * @returns The result of the operation.
454
+ */
455
+ getProviderIds() {
456
+ return Array.from(__classPrivateFieldGet(this, _AggregatedPerpsProvider_providers, "f").keys());
457
+ }
458
+ /**
459
+ * Check if a provider is registered.
460
+ *
461
+ * @param providerId - The provider id value.
462
+ * @returns True if the condition is met.
463
+ */
464
+ hasProvider(providerId) {
465
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_providers, "f").has(providerId);
466
+ }
467
+ /**
468
+ * Get the router instance for external configuration.
469
+ *
470
+ * @returns The result of the operation.
471
+ */
472
+ getRouter() {
473
+ return __classPrivateFieldGet(this, _AggregatedPerpsProvider_router, "f");
474
+ }
475
+ }
476
+ _AggregatedPerpsProvider_providers = new WeakMap(), _AggregatedPerpsProvider_defaultProvider = new WeakMap(), _AggregatedPerpsProvider_aggregationMode = new WeakMap(), _AggregatedPerpsProvider_deps = new WeakMap(), _AggregatedPerpsProvider_router = new WeakMap(), _AggregatedPerpsProvider_subscriptionMux = new WeakMap(), _AggregatedPerpsProvider_instances = new WeakSet(), _AggregatedPerpsProvider_getActiveProviders = function _AggregatedPerpsProvider_getActiveProviders() {
477
+ return Array.from(__classPrivateFieldGet(this, _AggregatedPerpsProvider_providers, "f").entries());
478
+ }, _AggregatedPerpsProvider_getDefaultProvider = function _AggregatedPerpsProvider_getDefaultProvider() {
479
+ const provider = __classPrivateFieldGet(this, _AggregatedPerpsProvider_providers, "f").get(__classPrivateFieldGet(this, _AggregatedPerpsProvider_defaultProvider, "f"));
480
+ if (!provider) {
481
+ throw new Error(`[AggregatedPerpsProvider] Default provider '${__classPrivateFieldGet(this, _AggregatedPerpsProvider_defaultProvider, "f")}' not available`);
482
+ }
483
+ return provider;
484
+ }, _AggregatedPerpsProvider_getProviderOrDefault = function _AggregatedPerpsProvider_getProviderOrDefault(providerId) {
485
+ const id = providerId ?? __classPrivateFieldGet(this, _AggregatedPerpsProvider_defaultProvider, "f");
486
+ const provider = __classPrivateFieldGet(this, _AggregatedPerpsProvider_providers, "f").get(id);
487
+ if (!provider) {
488
+ __classPrivateFieldGet(this, _AggregatedPerpsProvider_deps, "f").debugLogger.log(`[AggregatedPerpsProvider] Provider '${id}' not found, using default`);
489
+ return [__classPrivateFieldGet(this, _AggregatedPerpsProvider_defaultProvider, "f"), __classPrivateFieldGet(this, _AggregatedPerpsProvider_instances, "m", _AggregatedPerpsProvider_getDefaultProvider).call(this)];
490
+ }
491
+ return [id, provider];
492
+ }, _AggregatedPerpsProvider_extractSuccessfulResults = function _AggregatedPerpsProvider_extractSuccessfulResults(results, context) {
493
+ const successful = [];
494
+ results.forEach((result, index) => {
495
+ if (result.status === 'fulfilled') {
496
+ successful.push(result.value);
497
+ }
498
+ else {
499
+ __classPrivateFieldGet(this, _AggregatedPerpsProvider_deps, "f").debugLogger.log(`[AggregatedPerpsProvider] ${context} failed for provider ${index}`, { error: result.reason });
500
+ }
501
+ });
502
+ return successful;
503
+ };
504
+ //# sourceMappingURL=AggregatedPerpsProvider.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AggregatedPerpsProvider.mjs","sourceRoot":"","sources":["../../src/providers/AggregatedPerpsProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * AggregatedPerpsProvider - Multi-provider aggregation wrapper\n *\n * Implements PerpsProvider interface to enable seamless multi-provider support.\n * Aggregates read operations from all providers, routes write operations to specific\n * providers based on params.providerId or default provider.\n *\n * Phase 1 Implementation:\n * - Read operations: Aggregate from all providers using Promise.allSettled()\n * - Write operations: Route to params.providerId ?? defaultProvider\n * - Subscriptions: Multiplex via SubscriptionMultiplexer\n * - Lifecycle: Delegate to default provider\n *\n * All returned data includes providerId field for UI differentiation.\n */\n\nimport type { CaipAccountId } from '@metamask/utils';\n\nimport { SubscriptionMultiplexer } from '../aggregation/SubscriptionMultiplexer';\nimport { ProviderRouter } from '../routing/ProviderRouter';\nimport type {\n AccountState,\n AggregatedProviderConfig,\n AggregationMode,\n AssetRoute,\n BatchCancelOrdersParams,\n CancelOrderParams,\n CancelOrderResult,\n CancelOrdersResult,\n ClosePositionParams,\n ClosePositionsParams,\n ClosePositionsResult,\n DepositParams,\n DisconnectResult,\n EditOrderParams,\n FeeCalculationParams,\n FeeCalculationResult,\n Funding,\n GetAccountStateParams,\n GetAvailableDexsParams,\n GetFundingParams,\n GetHistoricalPortfolioParams,\n GetMarketsParams,\n GetOrderFillsParams,\n GetOrdersParams,\n GetOrFetchFillsParams,\n GetPositionsParams,\n GetSupportedPathsParams,\n HistoricalPortfolioResult,\n InitializeResult,\n PerpsPlatformDependencies,\n PerpsProvider,\n LiquidationPriceParams,\n LiveDataConfig,\n MaintenanceMarginParams,\n MarginResult,\n MarketInfo,\n Order,\n OrderFill,\n OrderParams,\n OrderResult,\n PerpsMarketData,\n PerpsProviderType,\n Position,\n ReadyToTradeResult,\n SubscribeAccountParams,\n SubscribeCandlesParams,\n SubscribeOICapsParams,\n SubscribeOrderBookParams,\n SubscribeOrderFillsParams,\n SubscribeOrdersParams,\n SubscribePositionsParams,\n SubscribePricesParams,\n ToggleTestnetResult,\n UpdateMarginParams,\n UpdatePositionTPSLParams,\n UserHistoryItem,\n WithdrawParams,\n WithdrawResult,\n RawLedgerUpdate,\n} from '../types';\n\n/**\n * AggregatedPerpsProvider implements PerpsProvider by coordinating\n * multiple backend providers.\n *\n * Design principles:\n * 1. Read operations aggregate from all providers (parallel)\n * 2. Write operations route to specific provider (explicit > default)\n * 3. Lifecycle operations delegate to default provider\n * 4. All returned data includes providerId for UI differentiation\n *\n * @example\n * ```typescript\n * const aggregated = new AggregatedPerpsProvider({\n * providers: new Map([\n * ['hyperliquid', hlProvider],\n * ['myx', myxProvider],\n * ]),\n * defaultProvider: 'hyperliquid',\n * infrastructure: deps,\n * });\n *\n * // Read: returns positions from all providers\n * const positions = await aggregated.getPositions();\n *\n * // Write: routes to specific or default provider\n * await aggregated.placeOrder({ symbol: 'BTC', providerId: 'myx', ... });\n * ```\n */\nexport class AggregatedPerpsProvider implements PerpsProvider {\n readonly protocolId = 'aggregated';\n\n readonly #providers: Map<PerpsProviderType, PerpsProvider>;\n\n readonly #defaultProvider: PerpsProviderType;\n\n readonly #aggregationMode: AggregationMode;\n\n readonly #deps: PerpsPlatformDependencies;\n\n readonly #router: ProviderRouter;\n\n readonly #subscriptionMux: SubscriptionMultiplexer;\n\n constructor(config: AggregatedProviderConfig) {\n this.#providers = config.providers;\n this.#defaultProvider = config.defaultProvider;\n this.#aggregationMode = config.aggregationMode ?? 'all';\n this.#deps = config.infrastructure;\n\n // Initialize router with default provider\n this.#router = new ProviderRouter({\n defaultProvider: this.#defaultProvider,\n });\n\n // Initialize subscription multiplexer with logger for error reporting\n this.#subscriptionMux = new SubscriptionMultiplexer({\n logger: this.#deps.logger,\n });\n\n this.#deps.debugLogger.log('[AggregatedPerpsProvider] Initialized', {\n providers: Array.from(this.#providers.keys()),\n defaultProvider: this.#defaultProvider,\n aggregationMode: this.#aggregationMode,\n });\n }\n\n // ============================================================================\n // Helper Methods\n // ============================================================================\n\n /**\n * Get list of active providers as tuples for iteration.\n * Returns array of [providerId, provider] pairs.\n *\n * @returns The result of the operation.\n */\n #getActiveProviders(): [PerpsProviderType, PerpsProvider][] {\n return Array.from(this.#providers.entries());\n }\n\n /**\n * Get the default provider instance.\n * Throws if default provider is not available.\n *\n * @returns The result of the operation.\n */\n #getDefaultProvider(): PerpsProvider {\n const provider = this.#providers.get(this.#defaultProvider);\n if (!provider) {\n throw new Error(\n `[AggregatedPerpsProvider] Default provider '${this.#defaultProvider}' not available`,\n );\n }\n return provider;\n }\n\n /**\n * Get provider by ID, falling back to default if not found.\n *\n * @param providerId - The provider id value.\n * @returns The result of the operation.\n */\n #getProviderOrDefault(\n providerId?: PerpsProviderType,\n ): [PerpsProviderType, PerpsProvider] {\n const id = providerId ?? this.#defaultProvider;\n const provider = this.#providers.get(id);\n if (!provider) {\n this.#deps.debugLogger.log(\n `[AggregatedPerpsProvider] Provider '${id}' not found, using default`,\n );\n return [this.#defaultProvider, this.#getDefaultProvider()];\n }\n return [id, provider];\n }\n\n /**\n * Extract successful results from Promise.allSettled.\n * Logs errors for failed promises.\n *\n * @param results - Results from Promise.allSettled\n * @param context - Context string for logging\n * @returns Array of successful values\n */\n #extractSuccessfulResults<TResult>(\n results: PromiseSettledResult<TResult>[],\n context: string,\n ): TResult[] {\n const successful: TResult[] = [];\n results.forEach((result, index) => {\n if (result.status === 'fulfilled') {\n successful.push(result.value);\n } else {\n this.#deps.debugLogger.log(\n `[AggregatedPerpsProvider] ${context} failed for provider ${index}`,\n { error: result.reason },\n );\n }\n });\n return successful;\n }\n\n // ============================================================================\n // Asset Routes (Synchronous - delegate to default provider)\n // ============================================================================\n\n getDepositRoutes(params?: GetSupportedPathsParams): AssetRoute[] {\n return this.#getDefaultProvider().getDepositRoutes(params);\n }\n\n getWithdrawalRoutes(params?: GetSupportedPathsParams): AssetRoute[] {\n return this.#getDefaultProvider().getWithdrawalRoutes(params);\n }\n\n // ============================================================================\n // Read Operations (Aggregate from all providers)\n // ============================================================================\n\n async getPositions(params?: GetPositionsParams): Promise<Position[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([id, provider]) => {\n const positions = await provider.getPositions(params);\n return positions.map((pos) => ({ ...pos, providerId: id }));\n }),\n );\n\n return this.#extractSuccessfulResults(results, 'getPositions').flat();\n }\n\n async getAccountState(params?: GetAccountStateParams): Promise<AccountState> {\n // Return account state from default provider with providerId injected\n const provider = this.#getDefaultProvider();\n const state = await provider.getAccountState(params);\n return { ...state, providerId: this.#defaultProvider };\n }\n\n async getMarkets(params?: GetMarketsParams): Promise<MarketInfo[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([id, provider]) => {\n const markets = await provider.getMarkets(params);\n return markets.map((market) => ({ ...market, providerId: id }));\n }),\n );\n\n const allMarkets = this.#extractSuccessfulResults(\n results,\n 'getMarkets',\n ).flat();\n\n // Deduplicate markets by name (keep first occurrence)\n const seen = new Set<string>();\n return allMarkets.filter((market) => {\n // Use providerId:name as unique key to allow same market from different providers\n const key = `${market.providerId}:${market.name}`;\n if (seen.has(key)) {\n return false;\n }\n seen.add(key);\n return true;\n });\n }\n\n async getMarketDataWithPrices(): Promise<PerpsMarketData[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([id, provider]) => {\n const data = await provider.getMarketDataWithPrices();\n return data.map((item) => ({ ...item, providerId: id }));\n }),\n );\n\n return this.#extractSuccessfulResults(\n results,\n 'getMarketDataWithPrices',\n ).flat();\n }\n\n async getOrderFills(params?: GetOrderFillsParams): Promise<OrderFill[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([id, provider]) => {\n const fills = await provider.getOrderFills(params);\n return fills.map((fill) => ({ ...fill, providerId: id }));\n }),\n );\n\n return this.#extractSuccessfulResults(results, 'getOrderFills').flat();\n }\n\n async getOrFetchFills(params?: GetOrFetchFillsParams): Promise<OrderFill[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([id, provider]) => {\n const fills = await provider.getOrFetchFills(params);\n return fills.map((fill) => ({ ...fill, providerId: id }));\n }),\n );\n\n return this.#extractSuccessfulResults(results, 'getOrFetchFills').flat();\n }\n\n async getOrders(params?: GetOrdersParams): Promise<Order[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([id, provider]) => {\n const orders = await provider.getOrders(params);\n return orders.map((order) => ({ ...order, providerId: id }));\n }),\n );\n\n return this.#extractSuccessfulResults(results, 'getOrders').flat();\n }\n\n async getOpenOrders(params?: GetOrdersParams): Promise<Order[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([id, provider]) => {\n const orders = await provider.getOpenOrders(params);\n return orders.map((order) => ({ ...order, providerId: id }));\n }),\n );\n\n return this.#extractSuccessfulResults(results, 'getOpenOrders').flat();\n }\n\n async getFunding(params?: GetFundingParams): Promise<Funding[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([_providerId, provider]) => {\n const funding = await provider.getFunding(params);\n // Funding type doesn't have providerId - we could add it if needed\n return funding;\n }),\n );\n\n return this.#extractSuccessfulResults(results, 'getFunding').flat();\n }\n\n async getHistoricalPortfolio(\n params?: GetHistoricalPortfolioParams,\n ): Promise<HistoricalPortfolioResult> {\n // Delegate to default provider\n return this.#getDefaultProvider().getHistoricalPortfolio(params);\n }\n\n /**\n * Get user non-funding ledger updates from default provider.\n *\n * @param params - Optional parameters\n * @param params.accountId - Account ID to filter by\n * @param params.startTime - Start time filter\n * @param params.endTime - End time filter\n * @returns Raw ledger updates\n */\n async getUserNonFundingLedgerUpdates(params?: {\n accountId?: string;\n startTime?: number;\n endTime?: number;\n }): Promise<RawLedgerUpdate[]> {\n // Delegate to default provider (protocol-specific)\n return this.#getDefaultProvider().getUserNonFundingLedgerUpdates(params);\n }\n\n /**\n * Get user history from all providers.\n *\n * @param params - Optional parameters\n * @param params.accountId - Account ID to filter by\n * @param params.startTime - Start time filter\n * @param params.endTime - End time filter\n * @returns Aggregated user history with providerId\n */\n async getUserHistory(params?: {\n accountId?: CaipAccountId;\n startTime?: number;\n endTime?: number;\n }): Promise<UserHistoryItem[]> {\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(async ([id, provider]) => {\n const history = await provider.getUserHistory(params);\n return history.map((item) => ({ ...item, providerId: id }));\n }),\n );\n\n return this.#extractSuccessfulResults(results, 'getUserHistory').flat();\n }\n\n // ============================================================================\n // Write Operations (Route to specific provider)\n // ============================================================================\n\n async placeOrder(params: OrderParams): Promise<OrderResult> {\n const [providerId, provider] = this.#getProviderOrDefault(\n params.providerId,\n );\n\n this.#deps.debugLogger.log('[AggregatedPerpsProvider] placeOrder routing', {\n requestedProvider: params.providerId,\n actualProvider: providerId,\n symbol: params.symbol,\n });\n\n const result = await provider.placeOrder(params);\n return { ...result, providerId };\n }\n\n async editOrder(params: EditOrderParams): Promise<OrderResult> {\n // EditOrderParams contains OrderParams in newOrder which may have providerId\n const [providerId, provider] = this.#getProviderOrDefault(\n params.newOrder.providerId,\n );\n const result = await provider.editOrder(params);\n return { ...result, providerId };\n }\n\n async cancelOrder(params: CancelOrderParams): Promise<CancelOrderResult> {\n const [providerId, provider] = this.#getProviderOrDefault(\n params.providerId,\n );\n const result = await provider.cancelOrder(params);\n return { ...result, providerId };\n }\n\n async cancelOrders(\n params: BatchCancelOrdersParams,\n ): Promise<CancelOrdersResult> {\n // Batch cancel delegates to default provider\n const provider = this.#getDefaultProvider();\n if (!provider.cancelOrders) {\n return {\n success: false,\n successCount: 0,\n failureCount: params.length,\n results: params.map((param) => ({\n orderId: param.orderId,\n symbol: param.symbol,\n success: false,\n error: 'Batch cancel not supported',\n })),\n };\n }\n return provider.cancelOrders(params);\n }\n\n async closePosition(params: ClosePositionParams): Promise<OrderResult> {\n const [providerId, provider] = this.#getProviderOrDefault(\n params.providerId,\n );\n const result = await provider.closePosition(params);\n return { ...result, providerId };\n }\n\n async closePositions(\n params: ClosePositionsParams,\n ): Promise<ClosePositionsResult> {\n // Batch close delegates to default provider\n const provider = this.#getDefaultProvider();\n if (!provider.closePositions) {\n return {\n success: false,\n successCount: 0,\n failureCount: 0,\n results: [],\n };\n }\n return provider.closePositions(params);\n }\n\n async updatePositionTPSL(\n params: UpdatePositionTPSLParams,\n ): Promise<OrderResult> {\n const [providerId, provider] = this.#getProviderOrDefault(\n params.providerId,\n );\n const result = await provider.updatePositionTPSL(params);\n return { ...result, providerId };\n }\n\n async updateMargin(params: UpdateMarginParams): Promise<MarginResult> {\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n return provider.updateMargin(params);\n }\n\n async withdraw(params: WithdrawParams): Promise<WithdrawResult> {\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n return provider.withdraw(params);\n }\n\n // ============================================================================\n // Validation (Route to specific provider)\n // ============================================================================\n\n async validateDeposit(\n params: DepositParams,\n ): Promise<{ isValid: boolean; error?: string }> {\n return this.#getDefaultProvider().validateDeposit(params);\n }\n\n async validateOrder(\n params: OrderParams,\n ): Promise<{ isValid: boolean; error?: string }> {\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n return provider.validateOrder(params);\n }\n\n async validateClosePosition(\n params: ClosePositionParams,\n ): Promise<{ isValid: boolean; error?: string }> {\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n return provider.validateClosePosition(params);\n }\n\n async validateWithdrawal(\n params: WithdrawParams,\n ): Promise<{ isValid: boolean; error?: string }> {\n const [, provider] = this.#getProviderOrDefault(params.providerId);\n return provider.validateWithdrawal(params);\n }\n\n // ============================================================================\n // Protocol Calculations (Delegate to default or route)\n // ============================================================================\n\n async calculateLiquidationPrice(\n params: LiquidationPriceParams,\n ): Promise<string> {\n return this.#getDefaultProvider().calculateLiquidationPrice(params);\n }\n\n async calculateMaintenanceMargin(\n params: MaintenanceMarginParams,\n ): Promise<number> {\n return this.#getDefaultProvider().calculateMaintenanceMargin(params);\n }\n\n async getMaxLeverage(asset: string): Promise<number> {\n return this.#getDefaultProvider().getMaxLeverage(asset);\n }\n\n async calculateFees(\n params: FeeCalculationParams,\n ): Promise<FeeCalculationResult> {\n return this.#getDefaultProvider().calculateFees(params);\n }\n\n // ============================================================================\n // Subscriptions (Multiplex via SubscriptionMultiplexer)\n // ============================================================================\n\n subscribeToPrices(params: SubscribePricesParams): () => void {\n return this.#subscriptionMux.subscribeToPrices({\n ...params,\n providers: this.#getActiveProviders(),\n aggregationMode: 'merge',\n });\n }\n\n subscribeToPositions(params: SubscribePositionsParams): () => void {\n return this.#subscriptionMux.subscribeToPositions({\n ...params,\n providers: this.#getActiveProviders(),\n });\n }\n\n subscribeToOrderFills(params: SubscribeOrderFillsParams): () => void {\n return this.#subscriptionMux.subscribeToOrderFills({\n ...params,\n providers: this.#getActiveProviders(),\n });\n }\n\n subscribeToOrders(params: SubscribeOrdersParams): () => void {\n return this.#subscriptionMux.subscribeToOrders({\n ...params,\n providers: this.#getActiveProviders(),\n });\n }\n\n subscribeToAccount(params: SubscribeAccountParams): () => void {\n // For account subscriptions, we emit as array for multi-provider\n // but the callback expects single AccountState\n // Delegate to default provider for now\n return this.#getDefaultProvider().subscribeToAccount(params);\n }\n\n subscribeToOICaps(params: SubscribeOICapsParams): () => void {\n // Delegate to default provider\n return this.#getDefaultProvider().subscribeToOICaps(params);\n }\n\n subscribeToCandles(params: SubscribeCandlesParams): () => void {\n // Delegate to default provider\n return this.#getDefaultProvider().subscribeToCandles(params);\n }\n\n subscribeToOrderBook(params: SubscribeOrderBookParams): () => void {\n // Delegate to default provider\n return this.#getDefaultProvider().subscribeToOrderBook(params);\n }\n\n // ============================================================================\n // Configuration\n // ============================================================================\n\n setLiveDataConfig(config: Partial<LiveDataConfig>): void {\n // Apply config to all providers\n this.#providers.forEach((provider) => {\n provider.setLiveDataConfig(config);\n });\n }\n\n setUserFeeDiscount(discountBips: number | undefined): void {\n // Apply to all providers that support it\n this.#providers.forEach((provider) => {\n if (provider.setUserFeeDiscount) {\n provider.setUserFeeDiscount(discountBips);\n }\n });\n }\n\n // ============================================================================\n // Lifecycle (Delegate to default provider)\n // ============================================================================\n\n async toggleTestnet(): Promise<ToggleTestnetResult> {\n return this.#getDefaultProvider().toggleTestnet();\n }\n\n async initialize(): Promise<InitializeResult> {\n // Initialize default provider\n const result = await this.#getDefaultProvider().initialize();\n\n // Optionally initialize other providers in background\n // For Phase 1, we only initialize default provider\n return result;\n }\n\n async isReadyToTrade(): Promise<ReadyToTradeResult> {\n return this.#getDefaultProvider().isReadyToTrade();\n }\n\n async disconnect(): Promise<DisconnectResult> {\n // Disconnect all providers\n const results = await Promise.allSettled(\n this.#getActiveProviders().map(([, provider]) => provider.disconnect()),\n );\n\n // Clear subscription cache\n this.#subscriptionMux.clearCache();\n\n // Return success if at least one succeeded\n const successCount = results.filter(\n (res) => res.status === 'fulfilled' && res.value.success,\n ).length;\n\n return {\n success: successCount > 0,\n };\n }\n\n async ping(timeoutMs?: number): Promise<void> {\n return this.#getDefaultProvider().ping(timeoutMs);\n }\n\n // ============================================================================\n // Block Explorer\n // ============================================================================\n\n getBlockExplorerUrl(address?: string): string {\n return this.#getDefaultProvider().getBlockExplorerUrl(address);\n }\n\n // ============================================================================\n // HIP-3 (Optional)\n // ============================================================================\n\n async getAvailableDexs(params?: GetAvailableDexsParams): Promise<string[]> {\n const provider = this.#getDefaultProvider();\n if (!provider.getAvailableDexs) {\n return [];\n }\n return provider.getAvailableDexs(params);\n }\n\n // ============================================================================\n // Provider Management\n // ============================================================================\n\n /**\n * Add a new provider to the aggregated provider.\n *\n * @param providerId - Unique identifier for the provider\n * @param provider - Provider instance\n */\n addProvider(providerId: PerpsProviderType, provider: PerpsProvider): void {\n this.#providers.set(providerId, provider);\n this.#deps.debugLogger.log('[AggregatedPerpsProvider] Provider added', {\n providerId,\n });\n }\n\n /**\n * Remove a provider from the aggregated provider.\n *\n * @param providerId - Provider to remove\n * @returns true if removed, false if not found\n */\n removeProvider(providerId: PerpsProviderType): boolean {\n const removed = this.#providers.delete(providerId);\n if (removed) {\n this.#deps.debugLogger.log('[AggregatedPerpsProvider] Provider removed', {\n providerId,\n });\n }\n return removed;\n }\n\n /**\n * Get list of all registered provider IDs.\n *\n * @returns The result of the operation.\n */\n getProviderIds(): PerpsProviderType[] {\n return Array.from(this.#providers.keys());\n }\n\n /**\n * Check if a provider is registered.\n *\n * @param providerId - The provider id value.\n * @returns True if the condition is met.\n */\n hasProvider(providerId: PerpsProviderType): boolean {\n return this.#providers.has(providerId);\n }\n\n /**\n * Get the router instance for external configuration.\n *\n * @returns The result of the operation.\n */\n getRouter(): ProviderRouter {\n return this.#router;\n }\n}\n"]}