@metamask-previews/perps-controller 0.0.0-preview-ae46ab603 → 0.0.0-preview-e4aa1532

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 (498) hide show
  1. package/CHANGELOG.md +11 -1
  2. package/dist/PerpsController.cjs +2224 -66
  3. package/dist/PerpsController.cjs.map +1 -1
  4. package/dist/PerpsController.d.cts +933 -79
  5. package/dist/PerpsController.d.cts.map +1 -1
  6. package/dist/PerpsController.d.mts +933 -79
  7. package/dist/PerpsController.d.mts.map +1 -1
  8. package/dist/PerpsController.mjs +2221 -64
  9. package/dist/PerpsController.mjs.map +1 -1
  10. package/dist/__mocks__/hyperliquidMock.cjs +68 -0
  11. package/dist/__mocks__/hyperliquidMock.cjs.map +1 -0
  12. package/dist/__mocks__/hyperliquidMock.d.cts +15 -0
  13. package/dist/__mocks__/hyperliquidMock.d.cts.map +1 -0
  14. package/dist/__mocks__/hyperliquidMock.d.mts +15 -0
  15. package/dist/__mocks__/hyperliquidMock.d.mts.map +1 -0
  16. package/dist/__mocks__/hyperliquidMock.mjs +65 -0
  17. package/dist/__mocks__/hyperliquidMock.mjs.map +1 -0
  18. package/dist/__mocks__/providerMocks.cjs +144 -0
  19. package/dist/__mocks__/providerMocks.cjs.map +1 -0
  20. package/dist/__mocks__/providerMocks.d.cts +44 -0
  21. package/dist/__mocks__/providerMocks.d.cts.map +1 -0
  22. package/dist/__mocks__/providerMocks.d.mts +44 -0
  23. package/dist/__mocks__/providerMocks.d.mts.map +1 -0
  24. package/dist/__mocks__/providerMocks.mjs +136 -0
  25. package/dist/__mocks__/providerMocks.mjs.map +1 -0
  26. package/dist/__mocks__/serviceMocks.cjs +187 -0
  27. package/dist/__mocks__/serviceMocks.cjs.map +1 -0
  28. package/dist/__mocks__/serviceMocks.d.cts +58 -0
  29. package/dist/__mocks__/serviceMocks.d.cts.map +1 -0
  30. package/dist/__mocks__/serviceMocks.d.mts +58 -0
  31. package/dist/__mocks__/serviceMocks.d.mts.map +1 -0
  32. package/dist/__mocks__/serviceMocks.mjs +180 -0
  33. package/dist/__mocks__/serviceMocks.mjs.map +1 -0
  34. package/dist/aggregation/SubscriptionMultiplexer.cjs +459 -0
  35. package/dist/aggregation/SubscriptionMultiplexer.cjs.map +1 -0
  36. package/dist/aggregation/SubscriptionMultiplexer.d.cts +222 -0
  37. package/dist/aggregation/SubscriptionMultiplexer.d.cts.map +1 -0
  38. package/dist/aggregation/SubscriptionMultiplexer.d.mts +222 -0
  39. package/dist/aggregation/SubscriptionMultiplexer.d.mts.map +1 -0
  40. package/dist/aggregation/SubscriptionMultiplexer.mjs +455 -0
  41. package/dist/aggregation/SubscriptionMultiplexer.mjs.map +1 -0
  42. package/dist/aggregation/index.cjs +9 -0
  43. package/dist/aggregation/index.cjs.map +1 -0
  44. package/dist/aggregation/index.d.cts +6 -0
  45. package/dist/aggregation/index.d.cts.map +1 -0
  46. package/dist/aggregation/index.d.mts +6 -0
  47. package/dist/aggregation/index.d.mts.map +1 -0
  48. package/dist/aggregation/index.mjs +5 -0
  49. package/dist/aggregation/index.mjs.map +1 -0
  50. package/dist/constants/eventNames.cjs +117 -0
  51. package/dist/constants/eventNames.cjs.map +1 -0
  52. package/dist/constants/eventNames.d.cts +106 -0
  53. package/dist/constants/eventNames.d.cts.map +1 -0
  54. package/dist/constants/eventNames.d.mts +106 -0
  55. package/dist/constants/eventNames.d.mts.map +1 -0
  56. package/dist/constants/eventNames.mjs +114 -0
  57. package/dist/constants/eventNames.mjs.map +1 -0
  58. package/dist/constants/hyperLiquidConfig.cjs +366 -0
  59. package/dist/constants/hyperLiquidConfig.cjs.map +1 -0
  60. package/dist/constants/hyperLiquidConfig.d.cts +276 -0
  61. package/dist/constants/hyperLiquidConfig.d.cts.map +1 -0
  62. package/dist/constants/hyperLiquidConfig.d.mts +276 -0
  63. package/dist/constants/hyperLiquidConfig.d.mts.map +1 -0
  64. package/dist/constants/hyperLiquidConfig.mjs +357 -0
  65. package/dist/constants/hyperLiquidConfig.mjs.map +1 -0
  66. package/dist/constants/index.cjs +23 -0
  67. package/dist/constants/index.cjs.map +1 -0
  68. package/dist/constants/index.d.cts +7 -0
  69. package/dist/constants/index.d.cts.map +1 -0
  70. package/dist/constants/index.d.mts +7 -0
  71. package/dist/constants/index.d.mts.map +1 -0
  72. package/dist/constants/index.mjs +7 -0
  73. package/dist/constants/index.mjs.map +1 -0
  74. package/dist/constants/orderTypes.cjs +31 -0
  75. package/dist/constants/orderTypes.cjs.map +1 -0
  76. package/dist/constants/orderTypes.d.cts +19 -0
  77. package/dist/constants/orderTypes.d.cts.map +1 -0
  78. package/dist/constants/orderTypes.d.mts +19 -0
  79. package/dist/constants/orderTypes.d.mts.map +1 -0
  80. package/dist/constants/orderTypes.mjs +27 -0
  81. package/dist/constants/orderTypes.mjs.map +1 -0
  82. package/dist/constants/performanceMetrics.cjs +61 -0
  83. package/dist/constants/performanceMetrics.cjs.map +1 -0
  84. package/dist/constants/performanceMetrics.d.cts +44 -0
  85. package/dist/constants/performanceMetrics.d.cts.map +1 -0
  86. package/dist/constants/performanceMetrics.d.mts +44 -0
  87. package/dist/constants/performanceMetrics.d.mts.map +1 -0
  88. package/dist/constants/performanceMetrics.mjs +58 -0
  89. package/dist/constants/performanceMetrics.mjs.map +1 -0
  90. package/dist/constants/perpsConfig.cjs +461 -0
  91. package/dist/constants/perpsConfig.cjs.map +1 -0
  92. package/dist/constants/perpsConfig.d.cts +343 -0
  93. package/dist/constants/perpsConfig.d.cts.map +1 -0
  94. package/dist/constants/perpsConfig.d.mts +343 -0
  95. package/dist/constants/perpsConfig.d.mts.map +1 -0
  96. package/dist/constants/perpsConfig.mjs +458 -0
  97. package/dist/constants/perpsConfig.mjs.map +1 -0
  98. package/dist/constants/perpsErrorCodes.cjs +79 -0
  99. package/dist/constants/perpsErrorCodes.cjs.map +1 -0
  100. package/dist/constants/perpsErrorCodes.d.cts +64 -0
  101. package/dist/constants/perpsErrorCodes.d.cts.map +1 -0
  102. package/dist/constants/perpsErrorCodes.d.mts +64 -0
  103. package/dist/constants/perpsErrorCodes.d.mts.map +1 -0
  104. package/dist/constants/perpsErrorCodes.mjs +76 -0
  105. package/dist/constants/perpsErrorCodes.mjs.map +1 -0
  106. package/dist/index.cjs +32 -1
  107. package/dist/index.cjs.map +1 -1
  108. package/dist/index.d.cts +6 -2
  109. package/dist/index.d.cts.map +1 -1
  110. package/dist/index.d.mts +6 -2
  111. package/dist/index.d.mts.map +1 -1
  112. package/dist/index.mjs +9 -1
  113. package/dist/index.mjs.map +1 -1
  114. package/dist/platform-services/HyperLiquidClientService.cjs +857 -0
  115. package/dist/platform-services/HyperLiquidClientService.cjs.map +1 -0
  116. package/dist/platform-services/HyperLiquidClientService.d.cts +263 -0
  117. package/dist/platform-services/HyperLiquidClientService.d.cts.map +1 -0
  118. package/dist/platform-services/HyperLiquidClientService.d.mts +263 -0
  119. package/dist/platform-services/HyperLiquidClientService.d.mts.map +1 -0
  120. package/dist/platform-services/HyperLiquidClientService.mjs +853 -0
  121. package/dist/platform-services/HyperLiquidClientService.mjs.map +1 -0
  122. package/dist/platform-services/HyperLiquidSubscriptionService.cjs +2170 -0
  123. package/dist/platform-services/HyperLiquidSubscriptionService.cjs.map +1 -0
  124. package/dist/platform-services/HyperLiquidSubscriptionService.d.cts +424 -0
  125. package/dist/platform-services/HyperLiquidSubscriptionService.d.cts.map +1 -0
  126. package/dist/platform-services/HyperLiquidSubscriptionService.d.mts +424 -0
  127. package/dist/platform-services/HyperLiquidSubscriptionService.d.mts.map +1 -0
  128. package/dist/platform-services/HyperLiquidSubscriptionService.mjs +2166 -0
  129. package/dist/platform-services/HyperLiquidSubscriptionService.mjs.map +1 -0
  130. package/dist/platform-services/HyperLiquidWalletService.cjs +140 -0
  131. package/dist/platform-services/HyperLiquidWalletService.cjs.map +1 -0
  132. package/dist/platform-services/HyperLiquidWalletService.d.cts +78 -0
  133. package/dist/platform-services/HyperLiquidWalletService.d.cts.map +1 -0
  134. package/dist/platform-services/HyperLiquidWalletService.d.mts +78 -0
  135. package/dist/platform-services/HyperLiquidWalletService.d.mts.map +1 -0
  136. package/dist/platform-services/HyperLiquidWalletService.mjs +136 -0
  137. package/dist/platform-services/HyperLiquidWalletService.mjs.map +1 -0
  138. package/dist/providers/AggregatedPerpsProvider.cjs +777 -0
  139. package/dist/providers/AggregatedPerpsProvider.cjs.map +1 -0
  140. package/dist/providers/AggregatedPerpsProvider.d.cts +466 -0
  141. package/dist/providers/AggregatedPerpsProvider.d.cts.map +1 -0
  142. package/dist/providers/AggregatedPerpsProvider.d.mts +466 -0
  143. package/dist/providers/AggregatedPerpsProvider.d.mts.map +1 -0
  144. package/dist/providers/AggregatedPerpsProvider.mjs +773 -0
  145. package/dist/providers/AggregatedPerpsProvider.mjs.map +1 -0
  146. package/dist/providers/HyperLiquidProvider.cjs +5172 -0
  147. package/dist/providers/HyperLiquidProvider.cjs.map +1 -0
  148. package/dist/providers/HyperLiquidProvider.d.cts +881 -0
  149. package/dist/providers/HyperLiquidProvider.d.cts.map +1 -0
  150. package/dist/providers/HyperLiquidProvider.d.mts +881 -0
  151. package/dist/providers/HyperLiquidProvider.d.mts.map +1 -0
  152. package/dist/providers/HyperLiquidProvider.mjs +5168 -0
  153. package/dist/providers/HyperLiquidProvider.mjs.map +1 -0
  154. package/dist/providers/index.cjs +11 -0
  155. package/dist/providers/index.cjs.map +1 -0
  156. package/dist/providers/index.d.cts +6 -0
  157. package/dist/providers/index.d.cts.map +1 -0
  158. package/dist/providers/index.d.mts +6 -0
  159. package/dist/providers/index.d.mts.map +1 -0
  160. package/dist/providers/index.mjs +6 -0
  161. package/dist/providers/index.mjs.map +1 -0
  162. package/dist/routing/ProviderRouter.cjs +148 -0
  163. package/dist/routing/ProviderRouter.cjs.map +1 -0
  164. package/dist/routing/ProviderRouter.d.cts +124 -0
  165. package/dist/routing/ProviderRouter.d.cts.map +1 -0
  166. package/dist/routing/ProviderRouter.d.mts +124 -0
  167. package/dist/routing/ProviderRouter.d.mts.map +1 -0
  168. package/dist/routing/ProviderRouter.mjs +144 -0
  169. package/dist/routing/ProviderRouter.mjs.map +1 -0
  170. package/dist/routing/index.cjs +9 -0
  171. package/dist/routing/index.cjs.map +1 -0
  172. package/dist/routing/index.d.cts +6 -0
  173. package/dist/routing/index.d.cts.map +1 -0
  174. package/dist/routing/index.d.mts +6 -0
  175. package/dist/routing/index.d.mts.map +1 -0
  176. package/dist/routing/index.mjs +5 -0
  177. package/dist/routing/index.mjs.map +1 -0
  178. package/dist/selectors.cjs +161 -0
  179. package/dist/selectors.cjs.map +1 -0
  180. package/dist/selectors.d.cts +345 -0
  181. package/dist/selectors.d.cts.map +1 -0
  182. package/dist/selectors.d.mts +345 -0
  183. package/dist/selectors.d.mts.map +1 -0
  184. package/dist/selectors.mjs +153 -0
  185. package/dist/selectors.mjs.map +1 -0
  186. package/dist/services/AccountService.cjs +313 -0
  187. package/dist/services/AccountService.cjs.map +1 -0
  188. package/dist/services/AccountService.d.cts +53 -0
  189. package/dist/services/AccountService.d.cts.map +1 -0
  190. package/dist/services/AccountService.d.mts +53 -0
  191. package/dist/services/AccountService.d.mts.map +1 -0
  192. package/dist/services/AccountService.mjs +309 -0
  193. package/dist/services/AccountService.mjs.map +1 -0
  194. package/dist/services/DataLakeService.cjs +219 -0
  195. package/dist/services/DataLakeService.cjs.map +1 -0
  196. package/dist/services/DataLakeService.d.cts +49 -0
  197. package/dist/services/DataLakeService.d.cts.map +1 -0
  198. package/dist/services/DataLakeService.d.mts +49 -0
  199. package/dist/services/DataLakeService.d.mts.map +1 -0
  200. package/dist/services/DataLakeService.mjs +215 -0
  201. package/dist/services/DataLakeService.mjs.map +1 -0
  202. package/dist/services/DepositService.cjs +96 -0
  203. package/dist/services/DepositService.cjs.map +1 -0
  204. package/dist/services/DepositService.d.cts +37 -0
  205. package/dist/services/DepositService.d.cts.map +1 -0
  206. package/dist/services/DepositService.d.mts +37 -0
  207. package/dist/services/DepositService.d.mts.map +1 -0
  208. package/dist/services/DepositService.mjs +92 -0
  209. package/dist/services/DepositService.mjs.map +1 -0
  210. package/dist/services/EligibilityService.cjs +156 -0
  211. package/dist/services/EligibilityService.cjs.map +1 -0
  212. package/dist/services/EligibilityService.d.cts +48 -0
  213. package/dist/services/EligibilityService.d.cts.map +1 -0
  214. package/dist/services/EligibilityService.d.mts +48 -0
  215. package/dist/services/EligibilityService.d.mts.map +1 -0
  216. package/dist/services/EligibilityService.mjs +152 -0
  217. package/dist/services/EligibilityService.mjs.map +1 -0
  218. package/dist/services/FeatureFlagConfigurationService.cjs +258 -0
  219. package/dist/services/FeatureFlagConfigurationService.cjs.map +1 -0
  220. package/dist/services/FeatureFlagConfigurationService.d.cts +100 -0
  221. package/dist/services/FeatureFlagConfigurationService.d.cts.map +1 -0
  222. package/dist/services/FeatureFlagConfigurationService.d.mts +100 -0
  223. package/dist/services/FeatureFlagConfigurationService.d.mts.map +1 -0
  224. package/dist/services/FeatureFlagConfigurationService.mjs +254 -0
  225. package/dist/services/FeatureFlagConfigurationService.mjs.map +1 -0
  226. package/dist/services/MarketDataService.cjs +875 -0
  227. package/dist/services/MarketDataService.cjs.map +1 -0
  228. package/dist/services/MarketDataService.d.cts +289 -0
  229. package/dist/services/MarketDataService.d.cts.map +1 -0
  230. package/dist/services/MarketDataService.d.mts +289 -0
  231. package/dist/services/MarketDataService.d.mts.map +1 -0
  232. package/dist/services/MarketDataService.mjs +871 -0
  233. package/dist/services/MarketDataService.mjs.map +1 -0
  234. package/dist/services/RewardsIntegrationService.cjs +94 -0
  235. package/dist/services/RewardsIntegrationService.cjs.map +1 -0
  236. package/dist/services/RewardsIntegrationService.d.cts +30 -0
  237. package/dist/services/RewardsIntegrationService.d.cts.map +1 -0
  238. package/dist/services/RewardsIntegrationService.d.mts +30 -0
  239. package/dist/services/RewardsIntegrationService.d.mts.map +1 -0
  240. package/dist/services/RewardsIntegrationService.mjs +90 -0
  241. package/dist/services/RewardsIntegrationService.mjs.map +1 -0
  242. package/dist/services/ServiceContext.cjs +3 -0
  243. package/dist/services/ServiceContext.cjs.map +1 -0
  244. package/dist/services/ServiceContext.d.cts +110 -0
  245. package/dist/services/ServiceContext.d.cts.map +1 -0
  246. package/dist/services/ServiceContext.d.mts +110 -0
  247. package/dist/services/ServiceContext.d.mts.map +1 -0
  248. package/dist/services/ServiceContext.mjs +2 -0
  249. package/dist/services/ServiceContext.mjs.map +1 -0
  250. package/dist/services/TradingService.cjs +1481 -0
  251. package/dist/services/TradingService.cjs.map +1 -0
  252. package/dist/services/TradingService.d.cts +308 -0
  253. package/dist/services/TradingService.d.cts.map +1 -0
  254. package/dist/services/TradingService.d.mts +308 -0
  255. package/dist/services/TradingService.d.mts.map +1 -0
  256. package/dist/services/TradingService.mjs +1477 -0
  257. package/dist/services/TradingService.mjs.map +1 -0
  258. package/dist/services/index.cjs +26 -0
  259. package/dist/services/index.cjs.map +1 -0
  260. package/dist/services/index.d.cts +11 -0
  261. package/dist/services/index.d.cts.map +1 -0
  262. package/dist/services/index.d.mts +11 -0
  263. package/dist/services/index.d.mts.map +1 -0
  264. package/dist/services/index.mjs +10 -0
  265. package/dist/services/index.mjs.map +1 -0
  266. package/dist/services/utils.cjs +16 -0
  267. package/dist/services/utils.cjs.map +1 -0
  268. package/dist/services/utils.d.cts +8 -0
  269. package/dist/services/utils.d.cts.map +1 -0
  270. package/dist/services/utils.d.mts +8 -0
  271. package/dist/services/utils.d.mts.map +1 -0
  272. package/dist/services/utils.mjs +12 -0
  273. package/dist/services/utils.mjs.map +1 -0
  274. package/dist/types/chart.cjs +42 -0
  275. package/dist/types/chart.cjs.map +1 -0
  276. package/dist/types/chart.d.cts +62 -0
  277. package/dist/types/chart.d.cts.map +1 -0
  278. package/dist/types/chart.d.mts +62 -0
  279. package/dist/types/chart.d.mts.map +1 -0
  280. package/dist/types/chart.mjs +39 -0
  281. package/dist/types/chart.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 +52 -0
  285. package/dist/types/hyperliquid-types.d.cts.map +1 -0
  286. package/dist/types/hyperliquid-types.d.mts +52 -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 +96 -0
  291. package/dist/types/index.cjs.map +1 -0
  292. package/dist/types/index.d.cts +1153 -0
  293. package/dist/types/index.d.cts.map +1 -0
  294. package/dist/types/index.d.mts +1153 -0
  295. package/dist/types/index.d.mts.map +1 -0
  296. package/dist/types/index.mjs +79 -0
  297. package/dist/types/index.mjs.map +1 -0
  298. package/dist/types/transactionTypes.cjs +28 -0
  299. package/dist/types/transactionTypes.cjs.map +1 -0
  300. package/dist/types/transactionTypes.d.cts +64 -0
  301. package/dist/types/transactionTypes.d.cts.map +1 -0
  302. package/dist/types/transactionTypes.d.mts +64 -0
  303. package/dist/types/transactionTypes.d.mts.map +1 -0
  304. package/dist/types/transactionTypes.mjs +23 -0
  305. package/dist/types/transactionTypes.mjs.map +1 -0
  306. package/dist/utils/accountUtils.cjs +65 -0
  307. package/dist/utils/accountUtils.cjs.map +1 -0
  308. package/dist/utils/accountUtils.d.cts +26 -0
  309. package/dist/utils/accountUtils.d.cts.map +1 -0
  310. package/dist/utils/accountUtils.d.mts +26 -0
  311. package/dist/utils/accountUtils.d.mts.map +1 -0
  312. package/dist/utils/accountUtils.mjs +61 -0
  313. package/dist/utils/accountUtils.mjs.map +1 -0
  314. package/dist/utils/amountConversion.cjs +61 -0
  315. package/dist/utils/amountConversion.cjs.map +1 -0
  316. package/dist/utils/amountConversion.d.cts +16 -0
  317. package/dist/utils/amountConversion.d.cts.map +1 -0
  318. package/dist/utils/amountConversion.d.mts +16 -0
  319. package/dist/utils/amountConversion.d.mts.map +1 -0
  320. package/dist/utils/amountConversion.mjs +54 -0
  321. package/dist/utils/amountConversion.mjs.map +1 -0
  322. package/dist/utils/chartUtils.cjs +98 -0
  323. package/dist/utils/chartUtils.cjs.map +1 -0
  324. package/dist/utils/chartUtils.d.cts +14 -0
  325. package/dist/utils/chartUtils.d.cts.map +1 -0
  326. package/dist/utils/chartUtils.d.mts +14 -0
  327. package/dist/utils/chartUtils.d.mts.map +1 -0
  328. package/dist/utils/chartUtils.mjs +94 -0
  329. package/dist/utils/chartUtils.mjs.map +1 -0
  330. package/dist/utils/errorUtils.cjs +22 -0
  331. package/dist/utils/errorUtils.cjs.map +1 -0
  332. package/dist/utils/errorUtils.d.cts +13 -0
  333. package/dist/utils/errorUtils.d.cts.map +1 -0
  334. package/dist/utils/errorUtils.d.mts +13 -0
  335. package/dist/utils/errorUtils.d.mts.map +1 -0
  336. package/dist/utils/errorUtils.mjs +18 -0
  337. package/dist/utils/errorUtils.mjs.map +1 -0
  338. package/dist/utils/formatUtils.cjs +987 -0
  339. package/dist/utils/formatUtils.cjs.map +1 -0
  340. package/dist/utils/formatUtils.d.cts +387 -0
  341. package/dist/utils/formatUtils.d.cts.map +1 -0
  342. package/dist/utils/formatUtils.d.mts +387 -0
  343. package/dist/utils/formatUtils.d.mts.map +1 -0
  344. package/dist/utils/formatUtils.mjs +966 -0
  345. package/dist/utils/formatUtils.mjs.map +1 -0
  346. package/dist/utils/hyperLiquidAdapter.cjs +454 -0
  347. package/dist/utils/hyperLiquidAdapter.cjs.map +1 -0
  348. package/dist/utils/hyperLiquidAdapter.d.cts +158 -0
  349. package/dist/utils/hyperLiquidAdapter.d.cts.map +1 -0
  350. package/dist/utils/hyperLiquidAdapter.d.mts +158 -0
  351. package/dist/utils/hyperLiquidAdapter.d.mts.map +1 -0
  352. package/dist/utils/hyperLiquidAdapter.mjs +439 -0
  353. package/dist/utils/hyperLiquidAdapter.mjs.map +1 -0
  354. package/dist/utils/hyperLiquidOrderBookProcessor.cjs +89 -0
  355. package/dist/utils/hyperLiquidOrderBookProcessor.cjs.map +1 -0
  356. package/dist/utils/hyperLiquidOrderBookProcessor.d.cts +58 -0
  357. package/dist/utils/hyperLiquidOrderBookProcessor.d.cts.map +1 -0
  358. package/dist/utils/hyperLiquidOrderBookProcessor.d.mts +58 -0
  359. package/dist/utils/hyperLiquidOrderBookProcessor.d.mts.map +1 -0
  360. package/dist/utils/hyperLiquidOrderBookProcessor.mjs +84 -0
  361. package/dist/utils/hyperLiquidOrderBookProcessor.mjs.map +1 -0
  362. package/dist/utils/hyperLiquidValidation.cjs +426 -0
  363. package/dist/utils/hyperLiquidValidation.cjs.map +1 -0
  364. package/dist/utils/hyperLiquidValidation.d.cts +143 -0
  365. package/dist/utils/hyperLiquidValidation.d.cts.map +1 -0
  366. package/dist/utils/hyperLiquidValidation.d.mts +143 -0
  367. package/dist/utils/hyperLiquidValidation.d.mts.map +1 -0
  368. package/dist/utils/hyperLiquidValidation.mjs +413 -0
  369. package/dist/utils/hyperLiquidValidation.mjs.map +1 -0
  370. package/dist/utils/idUtils.cjs +50 -0
  371. package/dist/utils/idUtils.cjs.map +1 -0
  372. package/dist/utils/idUtils.d.cts +38 -0
  373. package/dist/utils/idUtils.d.cts.map +1 -0
  374. package/dist/utils/idUtils.d.mts +38 -0
  375. package/dist/utils/idUtils.d.mts.map +1 -0
  376. package/dist/utils/idUtils.mjs +42 -0
  377. package/dist/utils/idUtils.mjs.map +1 -0
  378. package/dist/utils/marginUtils.cjs +137 -0
  379. package/dist/utils/marginUtils.cjs.map +1 -0
  380. package/dist/utils/marginUtils.d.cts +64 -0
  381. package/dist/utils/marginUtils.d.cts.map +1 -0
  382. package/dist/utils/marginUtils.d.mts +64 -0
  383. package/dist/utils/marginUtils.d.mts.map +1 -0
  384. package/dist/utils/marginUtils.mjs +131 -0
  385. package/dist/utils/marginUtils.mjs.map +1 -0
  386. package/dist/utils/marketDataTransform.cjs +227 -0
  387. package/dist/utils/marketDataTransform.cjs.map +1 -0
  388. package/dist/utils/marketDataTransform.d.cts +45 -0
  389. package/dist/utils/marketDataTransform.d.cts.map +1 -0
  390. package/dist/utils/marketDataTransform.d.mts +45 -0
  391. package/dist/utils/marketDataTransform.d.mts.map +1 -0
  392. package/dist/utils/marketDataTransform.mjs +220 -0
  393. package/dist/utils/marketDataTransform.mjs.map +1 -0
  394. package/dist/utils/marketUtils.cjs +420 -0
  395. package/dist/utils/marketUtils.cjs.map +1 -0
  396. package/dist/utils/marketUtils.d.cts +227 -0
  397. package/dist/utils/marketUtils.d.cts.map +1 -0
  398. package/dist/utils/marketUtils.d.mts +227 -0
  399. package/dist/utils/marketUtils.d.mts.map +1 -0
  400. package/dist/utils/marketUtils.mjs +404 -0
  401. package/dist/utils/marketUtils.mjs.map +1 -0
  402. package/dist/utils/orderBookGrouping.cjs +151 -0
  403. package/dist/utils/orderBookGrouping.cjs.map +1 -0
  404. package/dist/utils/orderBookGrouping.d.cts +76 -0
  405. package/dist/utils/orderBookGrouping.d.cts.map +1 -0
  406. package/dist/utils/orderBookGrouping.d.mts +76 -0
  407. package/dist/utils/orderBookGrouping.d.mts.map +1 -0
  408. package/dist/utils/orderBookGrouping.mjs +143 -0
  409. package/dist/utils/orderBookGrouping.mjs.map +1 -0
  410. package/dist/utils/orderCalculations.cjs +283 -0
  411. package/dist/utils/orderCalculations.cjs.map +1 -0
  412. package/dist/utils/orderCalculations.d.cts +107 -0
  413. package/dist/utils/orderCalculations.d.cts.map +1 -0
  414. package/dist/utils/orderCalculations.d.mts +107 -0
  415. package/dist/utils/orderCalculations.d.mts.map +1 -0
  416. package/dist/utils/orderCalculations.mjs +274 -0
  417. package/dist/utils/orderCalculations.mjs.map +1 -0
  418. package/dist/utils/orderUtils.cjs +159 -0
  419. package/dist/utils/orderUtils.cjs.map +1 -0
  420. package/dist/utils/orderUtils.d.cts +66 -0
  421. package/dist/utils/orderUtils.d.cts.map +1 -0
  422. package/dist/utils/orderUtils.d.mts +66 -0
  423. package/dist/utils/orderUtils.d.mts.map +1 -0
  424. package/dist/utils/orderUtils.mjs +151 -0
  425. package/dist/utils/orderUtils.mjs.map +1 -0
  426. package/dist/utils/pnlCalculations.cjs +107 -0
  427. package/dist/utils/pnlCalculations.cjs.map +1 -0
  428. package/dist/utils/pnlCalculations.d.cts +79 -0
  429. package/dist/utils/pnlCalculations.d.cts.map +1 -0
  430. package/dist/utils/pnlCalculations.d.mts +79 -0
  431. package/dist/utils/pnlCalculations.d.mts.map +1 -0
  432. package/dist/utils/pnlCalculations.mjs +97 -0
  433. package/dist/utils/pnlCalculations.mjs.map +1 -0
  434. package/dist/utils/positionCalculations.cjs +176 -0
  435. package/dist/utils/positionCalculations.cjs.map +1 -0
  436. package/dist/utils/positionCalculations.d.cts +85 -0
  437. package/dist/utils/positionCalculations.d.cts.map +1 -0
  438. package/dist/utils/positionCalculations.d.mts +85 -0
  439. package/dist/utils/positionCalculations.d.mts.map +1 -0
  440. package/dist/utils/positionCalculations.mjs +165 -0
  441. package/dist/utils/positionCalculations.mjs.map +1 -0
  442. package/dist/utils/sortMarkets.cjs +88 -0
  443. package/dist/utils/sortMarkets.cjs.map +1 -0
  444. package/dist/utils/sortMarkets.d.cts +21 -0
  445. package/dist/utils/sortMarkets.d.cts.map +1 -0
  446. package/dist/utils/sortMarkets.d.mts +21 -0
  447. package/dist/utils/sortMarkets.d.mts.map +1 -0
  448. package/dist/utils/sortMarkets.mjs +84 -0
  449. package/dist/utils/sortMarkets.mjs.map +1 -0
  450. package/dist/utils/standaloneInfoClient.cjs +34 -0
  451. package/dist/utils/standaloneInfoClient.cjs.map +1 -0
  452. package/dist/utils/standaloneInfoClient.d.cts +31 -0
  453. package/dist/utils/standaloneInfoClient.d.cts.map +1 -0
  454. package/dist/utils/standaloneInfoClient.d.mts +31 -0
  455. package/dist/utils/standaloneInfoClient.d.mts.map +1 -0
  456. package/dist/utils/standaloneInfoClient.mjs +30 -0
  457. package/dist/utils/standaloneInfoClient.mjs.map +1 -0
  458. package/dist/utils/stringParseUtils.cjs +49 -0
  459. package/dist/utils/stringParseUtils.cjs.map +1 -0
  460. package/dist/utils/stringParseUtils.d.cts +35 -0
  461. package/dist/utils/stringParseUtils.d.cts.map +1 -0
  462. package/dist/utils/stringParseUtils.d.mts +35 -0
  463. package/dist/utils/stringParseUtils.d.mts.map +1 -0
  464. package/dist/utils/stringParseUtils.mjs +44 -0
  465. package/dist/utils/stringParseUtils.mjs.map +1 -0
  466. package/dist/utils/time.cjs +37 -0
  467. package/dist/utils/time.cjs.map +1 -0
  468. package/dist/utils/time.d.cts +17 -0
  469. package/dist/utils/time.d.cts.map +1 -0
  470. package/dist/utils/time.d.mts +17 -0
  471. package/dist/utils/time.d.mts.map +1 -0
  472. package/dist/utils/time.mjs +33 -0
  473. package/dist/utils/time.mjs.map +1 -0
  474. package/dist/utils/tpslValidation.cjs +505 -0
  475. package/dist/utils/tpslValidation.cjs.map +1 -0
  476. package/dist/utils/tpslValidation.d.cts +182 -0
  477. package/dist/utils/tpslValidation.d.cts.map +1 -0
  478. package/dist/utils/tpslValidation.d.mts +182 -0
  479. package/dist/utils/tpslValidation.d.mts.map +1 -0
  480. package/dist/utils/tpslValidation.mjs +482 -0
  481. package/dist/utils/tpslValidation.mjs.map +1 -0
  482. package/dist/utils/transactionUtils.cjs +36 -0
  483. package/dist/utils/transactionUtils.cjs.map +1 -0
  484. package/dist/utils/transactionUtils.d.cts +17 -0
  485. package/dist/utils/transactionUtils.d.cts.map +1 -0
  486. package/dist/utils/transactionUtils.d.mts +17 -0
  487. package/dist/utils/transactionUtils.d.mts.map +1 -0
  488. package/dist/utils/transactionUtils.mjs +32 -0
  489. package/dist/utils/transactionUtils.mjs.map +1 -0
  490. package/dist/utils/wait.cjs +12 -0
  491. package/dist/utils/wait.cjs.map +1 -0
  492. package/dist/utils/wait.d.cts +8 -0
  493. package/dist/utils/wait.d.cts.map +1 -0
  494. package/dist/utils/wait.d.mts +8 -0
  495. package/dist/utils/wait.d.mts.map +1 -0
  496. package/dist/utils/wait.mjs +8 -0
  497. package/dist/utils/wait.mjs.map +1 -0
  498. package/package.json +19 -4
@@ -0,0 +1,773 @@
1
+ /* eslint-disable no-restricted-syntax, @typescript-eslint/naming-convention, jsdoc/require-param, jsdoc/check-param-names, jsdoc/require-returns */
2
+ // TODO: Fix ESLint errors in this file - tracked for Phase 6 cleanup
3
+ /**
4
+ * AggregatedPerpsProvider - Multi-provider aggregation wrapper
5
+ *
6
+ * Implements PerpsProvider interface to enable seamless multi-provider support.
7
+ * Aggregates read operations from all providers, routes write operations to specific
8
+ * providers based on params.providerId or default provider.
9
+ *
10
+ * Phase 1 Implementation:
11
+ * - Read operations: Aggregate from all providers using Promise.allSettled()
12
+ * - Write operations: Route to params.providerId ?? defaultProvider
13
+ * - Subscriptions: Multiplex via SubscriptionMultiplexer
14
+ * - Lifecycle: Delegate to default provider
15
+ *
16
+ * All returned data includes providerId field for UI differentiation.
17
+ */
18
+ import { SubscriptionMultiplexer } from "../aggregation/SubscriptionMultiplexer.mjs";
19
+ import { ProviderRouter } from "../routing/ProviderRouter.mjs";
20
+ /**
21
+ * AggregatedPerpsProvider implements PerpsProvider by coordinating
22
+ * multiple backend providers.
23
+ *
24
+ * Design principles:
25
+ * 1. Read operations aggregate from all providers (parallel)
26
+ * 2. Write operations route to specific provider (explicit > default)
27
+ * 3. Lifecycle operations delegate to default provider
28
+ * 4. All returned data includes providerId for UI differentiation
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * const aggregated = new AggregatedPerpsProvider({
33
+ * providers: new Map([
34
+ * ['hyperliquid', hlProvider],
35
+ * ['myx', myxProvider],
36
+ * ]),
37
+ * defaultProvider: 'hyperliquid',
38
+ * infrastructure: deps,
39
+ * });
40
+ *
41
+ * // Read: returns positions from all providers
42
+ * const positions = await aggregated.getPositions();
43
+ *
44
+ * // Write: routes to specific or default provider
45
+ * await aggregated.placeOrder({ symbol: 'BTC', providerId: 'myx', ... });
46
+ * ```
47
+ */
48
+ export class AggregatedPerpsProvider {
49
+ /**
50
+ * Create a new AggregatedPerpsProvider.
51
+ *
52
+ * @param config - Configuration for the aggregated provider
53
+ */
54
+ constructor(config) {
55
+ this.protocolId = 'aggregated';
56
+ this.providers = config.providers;
57
+ this.defaultProvider = config.defaultProvider;
58
+ this.aggregationMode = config.aggregationMode ?? 'all';
59
+ this.deps = config.infrastructure;
60
+ // Initialize router with default provider
61
+ this.router = new ProviderRouter({
62
+ defaultProvider: this.defaultProvider,
63
+ });
64
+ // Initialize subscription multiplexer with logger for error reporting
65
+ this.subscriptionMux = new SubscriptionMultiplexer({
66
+ logger: this.deps.logger,
67
+ });
68
+ this.deps.debugLogger.log('[AggregatedPerpsProvider] Initialized', {
69
+ providers: Array.from(this.providers.keys()),
70
+ defaultProvider: this.defaultProvider,
71
+ aggregationMode: this.aggregationMode,
72
+ });
73
+ }
74
+ // ============================================================================
75
+ // Helper Methods
76
+ // ============================================================================
77
+ /**
78
+ * Get list of active providers as tuples for iteration.
79
+ * Returns array of [providerId, provider] pairs.
80
+ *
81
+ * @returns Array of provider tuples
82
+ */
83
+ getActiveProviders() {
84
+ return Array.from(this.providers.entries());
85
+ }
86
+ /**
87
+ * Get the default provider instance.
88
+ * Throws if default provider is not available.
89
+ *
90
+ * @returns Default provider instance
91
+ */
92
+ getDefaultProvider() {
93
+ const provider = this.providers.get(this.defaultProvider);
94
+ if (!provider) {
95
+ throw new Error(`[AggregatedPerpsProvider] Default provider '${this.defaultProvider}' not available`);
96
+ }
97
+ return provider;
98
+ }
99
+ /**
100
+ * Get provider by ID, falling back to default if not found.
101
+ *
102
+ * @param providerId - Optional provider ID
103
+ * @returns Tuple of [providerId, provider]
104
+ */
105
+ getProviderOrDefault(providerId) {
106
+ const id = providerId ?? this.defaultProvider;
107
+ const provider = this.providers.get(id);
108
+ if (!provider) {
109
+ this.deps.debugLogger.log(`[AggregatedPerpsProvider] Provider '${id}' not found, using default`);
110
+ return [this.defaultProvider, this.getDefaultProvider()];
111
+ }
112
+ return [id, provider];
113
+ }
114
+ /**
115
+ * Extract successful results from Promise.allSettled.
116
+ * Logs errors for failed promises.
117
+ *
118
+ * @param results - Results from Promise.allSettled
119
+ * @param context - Context string for logging
120
+ * @returns Array of successful values
121
+ */
122
+ extractSuccessfulResults(results, context) {
123
+ const successful = [];
124
+ results.forEach((result, index) => {
125
+ if (result.status === 'fulfilled') {
126
+ successful.push(result.value);
127
+ }
128
+ else {
129
+ this.deps.debugLogger.log(`[AggregatedPerpsProvider] ${context} failed for provider ${index}`, { error: result.reason });
130
+ }
131
+ });
132
+ return successful;
133
+ }
134
+ // ============================================================================
135
+ // Asset Routes (Synchronous - delegate to default provider)
136
+ // ============================================================================
137
+ /**
138
+ * Get deposit routes from default provider.
139
+ *
140
+ * @param params - Optional parameters
141
+ * @returns Array of asset routes
142
+ */
143
+ getDepositRoutes(params) {
144
+ return this.getDefaultProvider().getDepositRoutes(params);
145
+ }
146
+ /**
147
+ * Get withdrawal routes from default provider.
148
+ *
149
+ * @param params - Optional parameters
150
+ * @returns Array of asset routes
151
+ */
152
+ getWithdrawalRoutes(params) {
153
+ return this.getDefaultProvider().getWithdrawalRoutes(params);
154
+ }
155
+ // ============================================================================
156
+ // Read Operations (Aggregate from all providers)
157
+ // ============================================================================
158
+ /**
159
+ * Get positions from all providers.
160
+ *
161
+ * @param params - Optional parameters
162
+ * @returns Aggregated positions with providerId
163
+ */
164
+ async getPositions(params) {
165
+ const results = await Promise.allSettled(this.getActiveProviders().map(async ([id, provider]) => {
166
+ const positions = await provider.getPositions(params);
167
+ return positions.map((pos) => ({ ...pos, providerId: id }));
168
+ }));
169
+ return this.extractSuccessfulResults(results, 'getPositions').flat();
170
+ }
171
+ /**
172
+ * Get account state from default provider.
173
+ *
174
+ * @param params - Optional parameters
175
+ * @returns Account state with providerId
176
+ */
177
+ async getAccountState(params) {
178
+ // Return account state from default provider with providerId injected
179
+ const provider = this.getDefaultProvider();
180
+ const state = await provider.getAccountState(params);
181
+ return { ...state, providerId: this.defaultProvider };
182
+ }
183
+ /**
184
+ * Get markets from all providers.
185
+ *
186
+ * @param params - Optional parameters
187
+ * @returns Deduplicated markets with providerId
188
+ */
189
+ async getMarkets(params) {
190
+ const results = await Promise.allSettled(this.getActiveProviders().map(async ([id, provider]) => {
191
+ const markets = await provider.getMarkets(params);
192
+ return markets.map((market) => ({ ...market, providerId: id }));
193
+ }));
194
+ const allMarkets = this.extractSuccessfulResults(results, 'getMarkets').flat();
195
+ // Deduplicate markets by name (keep first occurrence)
196
+ const seen = new Set();
197
+ return allMarkets.filter((market) => {
198
+ // Use providerId:name as unique key to allow same market from different providers
199
+ const key = `${market.providerId}:${market.name}`;
200
+ if (seen.has(key)) {
201
+ return false;
202
+ }
203
+ seen.add(key);
204
+ return true;
205
+ });
206
+ }
207
+ /**
208
+ * Get market data with prices from all providers.
209
+ *
210
+ * @returns Aggregated market data with providerId
211
+ */
212
+ async getMarketDataWithPrices() {
213
+ const results = await Promise.allSettled(this.getActiveProviders().map(async ([id, provider]) => {
214
+ const data = await provider.getMarketDataWithPrices();
215
+ return data.map((item) => ({ ...item, providerId: id }));
216
+ }));
217
+ return this.extractSuccessfulResults(results, 'getMarketDataWithPrices').flat();
218
+ }
219
+ /**
220
+ * Get order fills from all providers.
221
+ *
222
+ * @param params - Optional parameters
223
+ * @returns Aggregated order fills with providerId
224
+ */
225
+ async getOrderFills(params) {
226
+ const results = await Promise.allSettled(this.getActiveProviders().map(async ([id, provider]) => {
227
+ const fills = await provider.getOrderFills(params);
228
+ return fills.map((fill) => ({ ...fill, providerId: id }));
229
+ }));
230
+ return this.extractSuccessfulResults(results, 'getOrderFills').flat();
231
+ }
232
+ /**
233
+ * Get orders from all providers.
234
+ *
235
+ * @param params - Optional parameters
236
+ * @returns Aggregated orders with providerId
237
+ */
238
+ async getOrders(params) {
239
+ const results = await Promise.allSettled(this.getActiveProviders().map(async ([id, provider]) => {
240
+ const orders = await provider.getOrders(params);
241
+ return orders.map((order) => ({ ...order, providerId: id }));
242
+ }));
243
+ return this.extractSuccessfulResults(results, 'getOrders').flat();
244
+ }
245
+ /**
246
+ * Get open orders from all providers.
247
+ *
248
+ * @param params - Optional parameters
249
+ * @returns Aggregated open orders with providerId
250
+ */
251
+ async getOpenOrders(params) {
252
+ const results = await Promise.allSettled(this.getActiveProviders().map(async ([id, provider]) => {
253
+ const orders = await provider.getOpenOrders(params);
254
+ return orders.map((order) => ({ ...order, providerId: id }));
255
+ }));
256
+ return this.extractSuccessfulResults(results, 'getOpenOrders').flat();
257
+ }
258
+ /**
259
+ * Get funding from all providers.
260
+ *
261
+ * @param params - Optional parameters
262
+ * @returns Aggregated funding data
263
+ */
264
+ async getFunding(params) {
265
+ const results = await Promise.allSettled(this.getActiveProviders().map(async ([_providerId, provider]) => {
266
+ const funding = await provider.getFunding(params);
267
+ // Funding type doesn't have providerId - we could add it if needed
268
+ return funding;
269
+ }));
270
+ return this.extractSuccessfulResults(results, 'getFunding').flat();
271
+ }
272
+ /**
273
+ * Get historical portfolio from default provider.
274
+ *
275
+ * @param params - Optional parameters
276
+ * @returns Historical portfolio result
277
+ */
278
+ async getHistoricalPortfolio(params) {
279
+ // Delegate to default provider
280
+ return this.getDefaultProvider().getHistoricalPortfolio(params);
281
+ }
282
+ /**
283
+ * Get user non-funding ledger updates from default provider.
284
+ *
285
+ * @param params - Optional parameters
286
+ * @returns Raw ledger updates
287
+ */
288
+ async getUserNonFundingLedgerUpdates(params) {
289
+ // Delegate to default provider (protocol-specific)
290
+ return this.getDefaultProvider().getUserNonFundingLedgerUpdates(params);
291
+ }
292
+ /**
293
+ * Get user history from all providers.
294
+ *
295
+ * @param params - Optional parameters
296
+ * @returns Aggregated user history with providerId
297
+ */
298
+ async getUserHistory(params) {
299
+ const results = await Promise.allSettled(this.getActiveProviders().map(async ([id, provider]) => {
300
+ const history = await provider.getUserHistory(params);
301
+ return history.map((item) => ({ ...item, providerId: id }));
302
+ }));
303
+ return this.extractSuccessfulResults(results, 'getUserHistory').flat();
304
+ }
305
+ // ============================================================================
306
+ // Write Operations (Route to specific provider)
307
+ // ============================================================================
308
+ /**
309
+ * Place an order via routed provider.
310
+ *
311
+ * @param params - Order parameters
312
+ * @returns Order result with providerId
313
+ */
314
+ async placeOrder(params) {
315
+ const [providerId, provider] = this.getProviderOrDefault(params.providerId);
316
+ this.deps.debugLogger.log('[AggregatedPerpsProvider] placeOrder routing', {
317
+ requestedProvider: params.providerId,
318
+ actualProvider: providerId,
319
+ symbol: params.symbol,
320
+ });
321
+ const result = await provider.placeOrder(params);
322
+ return { ...result, providerId };
323
+ }
324
+ /**
325
+ * Edit an order via routed provider.
326
+ *
327
+ * @param params - Edit order parameters
328
+ * @returns Order result with providerId
329
+ */
330
+ async editOrder(params) {
331
+ // EditOrderParams contains OrderParams in newOrder which may have providerId
332
+ const [providerId, provider] = this.getProviderOrDefault(params.newOrder.providerId);
333
+ const result = await provider.editOrder(params);
334
+ return { ...result, providerId };
335
+ }
336
+ /**
337
+ * Cancel an order via routed provider.
338
+ *
339
+ * @param params - Cancel order parameters
340
+ * @returns Cancel result with providerId
341
+ */
342
+ async cancelOrder(params) {
343
+ const [providerId, provider] = this.getProviderOrDefault(params.providerId);
344
+ const result = await provider.cancelOrder(params);
345
+ return { ...result, providerId };
346
+ }
347
+ /**
348
+ * Cancel multiple orders via default provider.
349
+ *
350
+ * @param params - Batch cancel parameters
351
+ * @returns Batch cancel result
352
+ */
353
+ async cancelOrders(params) {
354
+ // Batch cancel delegates to default provider
355
+ const provider = this.getDefaultProvider();
356
+ if (!provider.cancelOrders) {
357
+ return {
358
+ success: false,
359
+ successCount: 0,
360
+ failureCount: params.length,
361
+ results: params.map((param) => ({
362
+ orderId: param.orderId,
363
+ symbol: param.symbol,
364
+ success: false,
365
+ error: 'Batch cancel not supported',
366
+ })),
367
+ };
368
+ }
369
+ return provider.cancelOrders(params);
370
+ }
371
+ /**
372
+ * Close a position via routed provider.
373
+ *
374
+ * @param params - Close position parameters
375
+ * @returns Order result with providerId
376
+ */
377
+ async closePosition(params) {
378
+ const [providerId, provider] = this.getProviderOrDefault(params.providerId);
379
+ const result = await provider.closePosition(params);
380
+ return { ...result, providerId };
381
+ }
382
+ /**
383
+ * Close multiple positions via default provider.
384
+ *
385
+ * @param params - Close positions parameters
386
+ * @returns Batch close result
387
+ */
388
+ async closePositions(params) {
389
+ // Batch close delegates to default provider
390
+ const provider = this.getDefaultProvider();
391
+ if (!provider.closePositions) {
392
+ return {
393
+ success: false,
394
+ successCount: 0,
395
+ failureCount: 0,
396
+ results: [],
397
+ };
398
+ }
399
+ return provider.closePositions(params);
400
+ }
401
+ /**
402
+ * Update position TP/SL via routed provider.
403
+ *
404
+ * @param params - Update TP/SL parameters
405
+ * @returns Order result with providerId
406
+ */
407
+ async updatePositionTPSL(params) {
408
+ const [providerId, provider] = this.getProviderOrDefault(params.providerId);
409
+ const result = await provider.updatePositionTPSL(params);
410
+ return { ...result, providerId };
411
+ }
412
+ /**
413
+ * Update margin via routed provider.
414
+ *
415
+ * @param params - Update margin parameters
416
+ * @returns Margin result
417
+ */
418
+ async updateMargin(params) {
419
+ const [, provider] = this.getProviderOrDefault(params.providerId);
420
+ return provider.updateMargin(params);
421
+ }
422
+ /**
423
+ * Withdraw via routed provider.
424
+ *
425
+ * @param params - Withdraw parameters
426
+ * @returns Withdraw result
427
+ */
428
+ async withdraw(params) {
429
+ const [, provider] = this.getProviderOrDefault(params.providerId);
430
+ return provider.withdraw(params);
431
+ }
432
+ // ============================================================================
433
+ // Validation (Route to specific provider)
434
+ // ============================================================================
435
+ /**
436
+ * Validate deposit via default provider.
437
+ *
438
+ * @param params - Deposit parameters
439
+ * @returns Validation result
440
+ */
441
+ async validateDeposit(params) {
442
+ return this.getDefaultProvider().validateDeposit(params);
443
+ }
444
+ /**
445
+ * Validate order via routed provider.
446
+ *
447
+ * @param params - Order parameters
448
+ * @returns Validation result
449
+ */
450
+ async validateOrder(params) {
451
+ const [, provider] = this.getProviderOrDefault(params.providerId);
452
+ return provider.validateOrder(params);
453
+ }
454
+ /**
455
+ * Validate close position via routed provider.
456
+ *
457
+ * @param params - Close position parameters
458
+ * @returns Validation result
459
+ */
460
+ async validateClosePosition(params) {
461
+ const [, provider] = this.getProviderOrDefault(params.providerId);
462
+ return provider.validateClosePosition(params);
463
+ }
464
+ /**
465
+ * Validate withdrawal via routed provider.
466
+ *
467
+ * @param params - Withdraw parameters
468
+ * @returns Validation result
469
+ */
470
+ async validateWithdrawal(params) {
471
+ const [, provider] = this.getProviderOrDefault(params.providerId);
472
+ return provider.validateWithdrawal(params);
473
+ }
474
+ // ============================================================================
475
+ // Protocol Calculations (Delegate to default or route)
476
+ // ============================================================================
477
+ /**
478
+ * Calculate liquidation price via default provider.
479
+ *
480
+ * @param params - Liquidation price parameters
481
+ * @returns Liquidation price as string
482
+ */
483
+ async calculateLiquidationPrice(params) {
484
+ return this.getDefaultProvider().calculateLiquidationPrice(params);
485
+ }
486
+ /**
487
+ * Calculate maintenance margin via default provider.
488
+ *
489
+ * @param params - Maintenance margin parameters
490
+ * @returns Maintenance margin as number
491
+ */
492
+ async calculateMaintenanceMargin(params) {
493
+ return this.getDefaultProvider().calculateMaintenanceMargin(params);
494
+ }
495
+ /**
496
+ * Get max leverage for asset via default provider.
497
+ *
498
+ * @param asset - Asset symbol
499
+ * @returns Max leverage as number
500
+ */
501
+ async getMaxLeverage(asset) {
502
+ return this.getDefaultProvider().getMaxLeverage(asset);
503
+ }
504
+ /**
505
+ * Calculate fees via default provider.
506
+ *
507
+ * @param params - Fee calculation parameters
508
+ * @returns Fee calculation result
509
+ */
510
+ async calculateFees(params) {
511
+ return this.getDefaultProvider().calculateFees(params);
512
+ }
513
+ // ============================================================================
514
+ // Subscriptions (Multiplex via SubscriptionMultiplexer)
515
+ // ============================================================================
516
+ /**
517
+ * Subscribe to prices from all providers.
518
+ *
519
+ * @param params - Subscription parameters
520
+ * @returns Unsubscribe function
521
+ */
522
+ subscribeToPrices(params) {
523
+ return this.subscriptionMux.subscribeToPrices({
524
+ ...params,
525
+ providers: this.getActiveProviders(),
526
+ aggregationMode: 'merge',
527
+ });
528
+ }
529
+ /**
530
+ * Subscribe to positions from all providers.
531
+ *
532
+ * @param params - Subscription parameters
533
+ * @returns Unsubscribe function
534
+ */
535
+ subscribeToPositions(params) {
536
+ return this.subscriptionMux.subscribeToPositions({
537
+ ...params,
538
+ providers: this.getActiveProviders(),
539
+ });
540
+ }
541
+ /**
542
+ * Subscribe to order fills from all providers.
543
+ *
544
+ * @param params - Subscription parameters
545
+ * @returns Unsubscribe function
546
+ */
547
+ subscribeToOrderFills(params) {
548
+ return this.subscriptionMux.subscribeToOrderFills({
549
+ ...params,
550
+ providers: this.getActiveProviders(),
551
+ });
552
+ }
553
+ /**
554
+ * Subscribe to orders from all providers.
555
+ *
556
+ * @param params - Subscription parameters
557
+ * @returns Unsubscribe function
558
+ */
559
+ subscribeToOrders(params) {
560
+ return this.subscriptionMux.subscribeToOrders({
561
+ ...params,
562
+ providers: this.getActiveProviders(),
563
+ });
564
+ }
565
+ /**
566
+ * Subscribe to account from default provider.
567
+ *
568
+ * @param params - Subscription parameters
569
+ * @returns Unsubscribe function
570
+ */
571
+ subscribeToAccount(params) {
572
+ // For account subscriptions, we emit as array for multi-provider
573
+ // but the callback expects single AccountState
574
+ // Delegate to default provider for now
575
+ return this.getDefaultProvider().subscribeToAccount(params);
576
+ }
577
+ /**
578
+ * Subscribe to OI caps from default provider.
579
+ *
580
+ * @param params - Subscription parameters
581
+ * @returns Unsubscribe function
582
+ */
583
+ subscribeToOICaps(params) {
584
+ // Delegate to default provider
585
+ return this.getDefaultProvider().subscribeToOICaps(params);
586
+ }
587
+ /**
588
+ * Subscribe to candles from default provider.
589
+ *
590
+ * @param params - Subscription parameters
591
+ * @returns Unsubscribe function
592
+ */
593
+ subscribeToCandles(params) {
594
+ // Delegate to default provider
595
+ return this.getDefaultProvider().subscribeToCandles(params);
596
+ }
597
+ /**
598
+ * Subscribe to order book from default provider.
599
+ *
600
+ * @param params - Subscription parameters
601
+ * @returns Unsubscribe function
602
+ */
603
+ subscribeToOrderBook(params) {
604
+ // Delegate to default provider
605
+ return this.getDefaultProvider().subscribeToOrderBook(params);
606
+ }
607
+ // ============================================================================
608
+ // Configuration
609
+ // ============================================================================
610
+ /**
611
+ * Set live data config on all providers.
612
+ *
613
+ * @param config - Partial live data config
614
+ */
615
+ setLiveDataConfig(config) {
616
+ // Apply config to all providers
617
+ this.providers.forEach((provider) => {
618
+ provider.setLiveDataConfig(config);
619
+ });
620
+ }
621
+ /**
622
+ * Set user fee discount on all providers.
623
+ *
624
+ * @param discountBips - Discount in basis points
625
+ */
626
+ setUserFeeDiscount(discountBips) {
627
+ // Apply to all providers that support it
628
+ this.providers.forEach((provider) => {
629
+ if (provider.setUserFeeDiscount) {
630
+ provider.setUserFeeDiscount(discountBips);
631
+ }
632
+ });
633
+ }
634
+ // ============================================================================
635
+ // Lifecycle (Delegate to default provider)
636
+ // ============================================================================
637
+ /**
638
+ * Toggle testnet on default provider.
639
+ *
640
+ * @returns Toggle result
641
+ */
642
+ async toggleTestnet() {
643
+ return this.getDefaultProvider().toggleTestnet();
644
+ }
645
+ /**
646
+ * Initialize the default provider.
647
+ *
648
+ * @returns Initialize result
649
+ */
650
+ async initialize() {
651
+ // Initialize default provider
652
+ const result = await this.getDefaultProvider().initialize();
653
+ // Optionally initialize other providers in background
654
+ // For Phase 1, we only initialize default provider
655
+ return result;
656
+ }
657
+ /**
658
+ * Check if ready to trade via default provider.
659
+ *
660
+ * @returns Ready to trade result
661
+ */
662
+ async isReadyToTrade() {
663
+ return this.getDefaultProvider().isReadyToTrade();
664
+ }
665
+ /**
666
+ * Disconnect all providers.
667
+ *
668
+ * @returns Disconnect result
669
+ */
670
+ async disconnect() {
671
+ // Disconnect all providers
672
+ const results = await Promise.allSettled(this.getActiveProviders().map(([, provider]) => provider.disconnect()));
673
+ // Clear subscription cache
674
+ this.subscriptionMux.clearCache();
675
+ // Return success if at least one succeeded
676
+ const successCount = results.filter((res) => res.status === 'fulfilled' && res.value.success).length;
677
+ return {
678
+ success: successCount > 0,
679
+ };
680
+ }
681
+ /**
682
+ * Ping default provider.
683
+ *
684
+ * @param timeoutMs - Optional timeout in milliseconds
685
+ */
686
+ async ping(timeoutMs) {
687
+ return this.getDefaultProvider().ping(timeoutMs);
688
+ }
689
+ // ============================================================================
690
+ // Block Explorer
691
+ // ============================================================================
692
+ /**
693
+ * Get block explorer URL from default provider.
694
+ *
695
+ * @param address - Optional address
696
+ * @returns Block explorer URL
697
+ */
698
+ getBlockExplorerUrl(address) {
699
+ return this.getDefaultProvider().getBlockExplorerUrl(address);
700
+ }
701
+ // ============================================================================
702
+ // HIP-3 (Optional)
703
+ // ============================================================================
704
+ /**
705
+ * Get available DEXs from default provider.
706
+ *
707
+ * @param params - Optional parameters
708
+ * @returns Array of DEX names
709
+ */
710
+ async getAvailableDexs(params) {
711
+ const provider = this.getDefaultProvider();
712
+ if (!provider.getAvailableDexs) {
713
+ return [];
714
+ }
715
+ return provider.getAvailableDexs(params);
716
+ }
717
+ // ============================================================================
718
+ // Provider Management
719
+ // ============================================================================
720
+ /**
721
+ * Add a new provider to the aggregated provider.
722
+ *
723
+ * @param providerId - Unique identifier for the provider
724
+ * @param provider - Provider instance
725
+ */
726
+ addProvider(providerId, provider) {
727
+ this.providers.set(providerId, provider);
728
+ this.deps.debugLogger.log('[AggregatedPerpsProvider] Provider added', {
729
+ providerId,
730
+ });
731
+ }
732
+ /**
733
+ * Remove a provider from the aggregated provider.
734
+ *
735
+ * @param providerId - Provider to remove
736
+ * @returns true if removed, false if not found
737
+ */
738
+ removeProvider(providerId) {
739
+ const removed = this.providers.delete(providerId);
740
+ if (removed) {
741
+ this.deps.debugLogger.log('[AggregatedPerpsProvider] Provider removed', {
742
+ providerId,
743
+ });
744
+ }
745
+ return removed;
746
+ }
747
+ /**
748
+ * Get list of all registered provider IDs.
749
+ *
750
+ * @returns Array of provider IDs
751
+ */
752
+ getProviderIds() {
753
+ return Array.from(this.providers.keys());
754
+ }
755
+ /**
756
+ * Check if a provider is registered.
757
+ *
758
+ * @param providerId - Provider ID to check
759
+ * @returns true if registered
760
+ */
761
+ hasProvider(providerId) {
762
+ return this.providers.has(providerId);
763
+ }
764
+ /**
765
+ * Get the router instance for external configuration.
766
+ *
767
+ * @returns Provider router
768
+ */
769
+ getRouter() {
770
+ return this.router;
771
+ }
772
+ }
773
+ //# sourceMappingURL=AggregatedPerpsProvider.mjs.map