@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,867 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _HyperLiquidClientService_instances, _HyperLiquidClientService_exchangeClient, _HyperLiquidClientService_infoClient, _HyperLiquidClientService_infoClientHttp, _HyperLiquidClientService_subscriptionClient, _HyperLiquidClientService_wsTransport, _HyperLiquidClientService_httpTransport, _HyperLiquidClientService_isTestnet, _HyperLiquidClientService_connectionState, _HyperLiquidClientService_disconnectionPromise, _HyperLiquidClientService_onTerminateCallback, _HyperLiquidClientService_onReconnectCallback, _HyperLiquidClientService_reconnectionAttempt, _HyperLiquidClientService_connectionStateListeners, _HyperLiquidClientService_reconnectionRetryTimeout, _HyperLiquidClientService_deps, _HyperLiquidClientService_createTransports, _HyperLiquidClientService_getIntervalMilliseconds, _HyperLiquidClientService_performDisconnection, _HyperLiquidClientService_updateConnectionState, _HyperLiquidClientService_notifyConnectionStateListeners, _HyperLiquidClientService_isReconnecting, _HyperLiquidClientService_handleConnectionDrop;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.HyperLiquidClientService = exports.WebSocketConnectionState = void 0;
16
+ const hyperliquid_1 = require("@nktkas/hyperliquid");
17
+ const chartConfig_1 = require("../constants/chartConfig.cjs");
18
+ const hyperLiquidConfig_1 = require("../constants/hyperLiquidConfig.cjs");
19
+ const perpsConfig_1 = require("../constants/perpsConfig.cjs");
20
+ const perpsErrorCodes_1 = require("../perpsErrorCodes.cjs");
21
+ const types_1 = require("../types/index.cjs");
22
+ const errorUtils_1 = require("../utils/errorUtils.cjs");
23
+ /**
24
+ * Maximum number of reconnection attempts before giving up.
25
+ */
26
+ const maxReconnectionAttempts = 10;
27
+ // WebSocketConnectionState is now imported from controllers/types
28
+ // Re-export for backward compatibility with existing consumers
29
+ var types_2 = require("../types/index.cjs");
30
+ Object.defineProperty(exports, "WebSocketConnectionState", { enumerable: true, get: function () { return types_2.WebSocketConnectionState; } });
31
+ /**
32
+ * Service for managing HyperLiquid SDK clients
33
+ * Handles initialization, transport creation, and client lifecycle
34
+ */
35
+ class HyperLiquidClientService {
36
+ constructor(deps, options = {}) {
37
+ _HyperLiquidClientService_instances.add(this);
38
+ _HyperLiquidClientService_exchangeClient.set(this, void 0);
39
+ _HyperLiquidClientService_infoClient.set(this, void 0); // WebSocket transport (default)
40
+ _HyperLiquidClientService_infoClientHttp.set(this, void 0); // HTTP transport (fallback)
41
+ _HyperLiquidClientService_subscriptionClient.set(this, void 0);
42
+ _HyperLiquidClientService_wsTransport.set(this, void 0);
43
+ _HyperLiquidClientService_httpTransport.set(this, void 0);
44
+ _HyperLiquidClientService_isTestnet.set(this, void 0);
45
+ _HyperLiquidClientService_connectionState.set(this, types_1.WebSocketConnectionState.Disconnected);
46
+ _HyperLiquidClientService_disconnectionPromise.set(this, null);
47
+ // Callback for SDK terminate event (fired when all reconnection attempts exhausted)
48
+ _HyperLiquidClientService_onTerminateCallback.set(this, null);
49
+ _HyperLiquidClientService_onReconnectCallback.set(this, void 0);
50
+ // Reconnection attempt counter
51
+ _HyperLiquidClientService_reconnectionAttempt.set(this, 0);
52
+ // Connection state change listeners for event-based notifications
53
+ _HyperLiquidClientService_connectionStateListeners.set(this, new Set());
54
+ // Timeout reference for reconnection retry, tracked to enable cancellation on disconnect
55
+ _HyperLiquidClientService_reconnectionRetryTimeout.set(this, null);
56
+ // Platform dependencies for logging
57
+ _HyperLiquidClientService_deps.set(this, void 0);
58
+ // Flag to prevent concurrent reconnection attempts
59
+ _HyperLiquidClientService_isReconnecting.set(this, false);
60
+ __classPrivateFieldSet(this, _HyperLiquidClientService_deps, deps, "f");
61
+ __classPrivateFieldSet(this, _HyperLiquidClientService_isTestnet, options.isTestnet ?? false, "f");
62
+ }
63
+ /**
64
+ * Initialize all HyperLiquid SDK clients
65
+ *
66
+ * IMPORTANT: This method awaits transport.ready() to ensure the WebSocket is
67
+ * in OPEN state before marking initialization complete. This prevents race
68
+ * conditions where subscriptions are attempted before the WebSocket handshake
69
+ * completes (which would cause "subscribe error: undefined" errors).
70
+ *
71
+ * @param wallet - The wallet parameters for signing typed data.
72
+ */
73
+ async initialize(wallet) {
74
+ try {
75
+ __classPrivateFieldGet(this, _HyperLiquidClientService_instances, "m", _HyperLiquidClientService_updateConnectionState).call(this, types_1.WebSocketConnectionState.Connecting);
76
+ __classPrivateFieldGet(this, _HyperLiquidClientService_instances, "m", _HyperLiquidClientService_createTransports).call(this);
77
+ // Ensure transports are created
78
+ if (!__classPrivateFieldGet(this, _HyperLiquidClientService_httpTransport, "f") || !__classPrivateFieldGet(this, _HyperLiquidClientService_wsTransport, "f")) {
79
+ throw new Error('Failed to create transports');
80
+ }
81
+ // Wallet adapter implements AbstractViemJsonRpcAccount interface with signTypedData method
82
+ // ExchangeClient uses HTTP transport for write operations (orders, approvals, etc.)
83
+ __classPrivateFieldSet(this, _HyperLiquidClientService_exchangeClient, new hyperliquid_1.ExchangeClient({
84
+ wallet: wallet, // eslint-disable-line @typescript-eslint/no-explicit-any -- Type widening for SDK compatibility
85
+ transport: __classPrivateFieldGet(this, _HyperLiquidClientService_httpTransport, "f"),
86
+ }), "f");
87
+ // InfoClient with WebSocket transport (default) - multiplexed requests over single connection
88
+ __classPrivateFieldSet(this, _HyperLiquidClientService_infoClient, new hyperliquid_1.InfoClient({ transport: __classPrivateFieldGet(this, _HyperLiquidClientService_wsTransport, "f") }), "f");
89
+ // InfoClient with HTTP transport (fallback) - for specific calls if WebSocket has issues
90
+ __classPrivateFieldSet(this, _HyperLiquidClientService_infoClientHttp, new hyperliquid_1.InfoClient({ transport: __classPrivateFieldGet(this, _HyperLiquidClientService_httpTransport, "f") }), "f");
91
+ // SubscriptionClient uses WebSocket transport for real-time pub/sub (price feeds, position updates)
92
+ __classPrivateFieldSet(this, _HyperLiquidClientService_subscriptionClient, new hyperliquid_1.SubscriptionClient({
93
+ transport: __classPrivateFieldGet(this, _HyperLiquidClientService_wsTransport, "f"),
94
+ }), "f");
95
+ // Wait for WebSocket to actually be ready before setting CONNECTED
96
+ // This ensures we have a real connection, not just client objects
97
+ await __classPrivateFieldGet(this, _HyperLiquidClientService_wsTransport, "f").ready();
98
+ __classPrivateFieldGet(this, _HyperLiquidClientService_instances, "m", _HyperLiquidClientService_updateConnectionState).call(this, types_1.WebSocketConnectionState.Connected);
99
+ __classPrivateFieldGet(this, _HyperLiquidClientService_deps, "f").debugLogger.log('HyperLiquid SDK clients initialized', {
100
+ testnet: __classPrivateFieldGet(this, _HyperLiquidClientService_isTestnet, "f"),
101
+ timestamp: new Date().toISOString(),
102
+ connectionState: __classPrivateFieldGet(this, _HyperLiquidClientService_connectionState, "f"),
103
+ note: 'Using WebSocket for InfoClient (default), HTTP fallback available',
104
+ });
105
+ }
106
+ catch (error) {
107
+ // Cleanup on failure to prevent leaks and ensure isInitialized() returns false
108
+ // Clear clients first, then transports
109
+ __classPrivateFieldSet(this, _HyperLiquidClientService_subscriptionClient, undefined, "f");
110
+ __classPrivateFieldSet(this, _HyperLiquidClientService_infoClient, undefined, "f");
111
+ __classPrivateFieldSet(this, _HyperLiquidClientService_infoClientHttp, undefined, "f");
112
+ __classPrivateFieldSet(this, _HyperLiquidClientService_exchangeClient, undefined, "f");
113
+ // Close WebSocket transport to release resources and event listeners
114
+ if (__classPrivateFieldGet(this, _HyperLiquidClientService_wsTransport, "f")) {
115
+ try {
116
+ await __classPrivateFieldGet(this, _HyperLiquidClientService_wsTransport, "f").close();
117
+ }
118
+ catch {
119
+ // Ignore cleanup errors
120
+ }
121
+ __classPrivateFieldSet(this, _HyperLiquidClientService_wsTransport, undefined, "f");
122
+ }
123
+ __classPrivateFieldSet(this, _HyperLiquidClientService_httpTransport, undefined, "f");
124
+ const errorInstance = (0, errorUtils_1.ensureError)(error, 'HyperLiquidClientService.initialize');
125
+ __classPrivateFieldGet(this, _HyperLiquidClientService_instances, "m", _HyperLiquidClientService_updateConnectionState).call(this, types_1.WebSocketConnectionState.Disconnected);
126
+ // Log to Sentry: initialization failure blocks all Perps functionality
127
+ __classPrivateFieldGet(this, _HyperLiquidClientService_deps, "f").logger.error(errorInstance, {
128
+ tags: {
129
+ feature: perpsConfig_1.PERPS_CONSTANTS.FeatureName,
130
+ service: 'HyperLiquidClientService',
131
+ network: __classPrivateFieldGet(this, _HyperLiquidClientService_isTestnet, "f") ? 'testnet' : 'mainnet',
132
+ },
133
+ context: {
134
+ name: 'sdk_initialization',
135
+ data: {
136
+ operation: 'initialize',
137
+ isTestnet: __classPrivateFieldGet(this, _HyperLiquidClientService_isTestnet, "f"),
138
+ },
139
+ },
140
+ });
141
+ throw error;
142
+ }
143
+ }
144
+ /**
145
+ * Toggle testnet mode and reinitialize clients
146
+ *
147
+ * @param wallet - The wallet parameters for signing typed data.
148
+ * @returns The new network name after toggling.
149
+ */
150
+ async toggleTestnet(wallet) {
151
+ __classPrivateFieldSet(this, _HyperLiquidClientService_isTestnet, !__classPrivateFieldGet(this, _HyperLiquidClientService_isTestnet, "f"), "f");
152
+ await this.initialize(wallet);
153
+ return __classPrivateFieldGet(this, _HyperLiquidClientService_isTestnet, "f") ? 'testnet' : 'mainnet';
154
+ }
155
+ /**
156
+ * Check if clients are properly initialized
157
+ *
158
+ * @returns True if all SDK clients are initialized.
159
+ */
160
+ isInitialized() {
161
+ return Boolean(__classPrivateFieldGet(this, _HyperLiquidClientService_exchangeClient, "f") &&
162
+ __classPrivateFieldGet(this, _HyperLiquidClientService_infoClient, "f") &&
163
+ __classPrivateFieldGet(this, _HyperLiquidClientService_infoClientHttp, "f") &&
164
+ __classPrivateFieldGet(this, _HyperLiquidClientService_subscriptionClient, "f"));
165
+ }
166
+ /**
167
+ * Ensure clients are initialized, throw if not
168
+ */
169
+ ensureInitialized() {
170
+ if (!this.isInitialized()) {
171
+ throw new Error(perpsErrorCodes_1.PERPS_ERROR_CODES.CLIENT_NOT_INITIALIZED);
172
+ }
173
+ }
174
+ /**
175
+ * Recreate subscription client if needed (for reconnection scenarios)
176
+ *
177
+ * @param wallet - The wallet parameters for signing typed data.
178
+ */
179
+ async ensureSubscriptionClient(wallet) {
180
+ if (!__classPrivateFieldGet(this, _HyperLiquidClientService_subscriptionClient, "f")) {
181
+ __classPrivateFieldGet(this, _HyperLiquidClientService_deps, "f").debugLogger.log('HyperLiquid: Recreating subscription client after disconnect');
182
+ await this.initialize(wallet);
183
+ }
184
+ }
185
+ /**
186
+ * Get the exchange client
187
+ *
188
+ * @returns The initialized ExchangeClient instance.
189
+ */
190
+ getExchangeClient() {
191
+ this.ensureInitialized();
192
+ if (!__classPrivateFieldGet(this, _HyperLiquidClientService_exchangeClient, "f")) {
193
+ throw new Error(perpsErrorCodes_1.PERPS_ERROR_CODES.EXCHANGE_CLIENT_NOT_AVAILABLE);
194
+ }
195
+ return __classPrivateFieldGet(this, _HyperLiquidClientService_exchangeClient, "f");
196
+ }
197
+ /**
198
+ * Get the info client
199
+ *
200
+ * @param options - The options for selecting the transport.
201
+ * @param options.useHttp - Force HTTP transport instead of WebSocket (default: false).
202
+ * @returns InfoClient instance with the selected transport.
203
+ */
204
+ getInfoClient(options) {
205
+ this.ensureInitialized();
206
+ if (options?.useHttp) {
207
+ if (!__classPrivateFieldGet(this, _HyperLiquidClientService_infoClientHttp, "f")) {
208
+ throw new Error(perpsErrorCodes_1.PERPS_ERROR_CODES.INFO_CLIENT_NOT_AVAILABLE);
209
+ }
210
+ return __classPrivateFieldGet(this, _HyperLiquidClientService_infoClientHttp, "f");
211
+ }
212
+ if (!__classPrivateFieldGet(this, _HyperLiquidClientService_infoClient, "f")) {
213
+ throw new Error(perpsErrorCodes_1.PERPS_ERROR_CODES.INFO_CLIENT_NOT_AVAILABLE);
214
+ }
215
+ return __classPrivateFieldGet(this, _HyperLiquidClientService_infoClient, "f");
216
+ }
217
+ /**
218
+ * Get the subscription client
219
+ *
220
+ * @returns The SubscriptionClient instance, or undefined if not initialized.
221
+ */
222
+ getSubscriptionClient() {
223
+ if (!__classPrivateFieldGet(this, _HyperLiquidClientService_subscriptionClient, "f")) {
224
+ __classPrivateFieldGet(this, _HyperLiquidClientService_deps, "f").debugLogger.log('SubscriptionClient not initialized');
225
+ return undefined;
226
+ }
227
+ return __classPrivateFieldGet(this, _HyperLiquidClientService_subscriptionClient, "f");
228
+ }
229
+ /**
230
+ * Ensures the WebSocket transport is in OPEN state and ready for subscriptions.
231
+ * This MUST be called before any subscription operations to prevent race conditions.
232
+ *
233
+ * The SDK's `transport.ready()` method:
234
+ * - Returns immediately if WebSocket is already in OPEN state
235
+ * - Waits for the "open" event if WebSocket is in CONNECTING state
236
+ * - Supports AbortSignal for timeout/cancellation
237
+ *
238
+ * @param options - The options for transport readiness check.
239
+ * @param options.timeoutMs - Maximum time to wait for transport ready (default 5000ms).
240
+ * @throws Error if transport not ready within timeout or subscription client unavailable.
241
+ */
242
+ async ensureTransportReady(options = {}) {
243
+ const { timeoutMs = 5000 } = options;
244
+ const subscriptionClient = this.getSubscriptionClient();
245
+ if (!subscriptionClient) {
246
+ throw new Error('Subscription client not initialized');
247
+ }
248
+ const controller = new AbortController();
249
+ const timeoutId = setTimeout(() => controller.abort(new Error(`WebSocket transport ready timeout after ${timeoutMs}ms`)), timeoutMs);
250
+ try {
251
+ await subscriptionClient.config_.transport.ready(controller.signal);
252
+ }
253
+ catch (error) {
254
+ if (controller.signal.aborted) {
255
+ throw new Error(`WebSocket transport ready timeout after ${timeoutMs}ms`);
256
+ }
257
+ throw (0, errorUtils_1.ensureError)(error, 'HyperLiquidClientService.ensureTransportReady');
258
+ }
259
+ finally {
260
+ clearTimeout(timeoutId);
261
+ }
262
+ }
263
+ /**
264
+ * Get current network state
265
+ *
266
+ * @returns The current HyperLiquid network (mainnet or testnet).
267
+ */
268
+ getNetwork() {
269
+ return __classPrivateFieldGet(this, _HyperLiquidClientService_isTestnet, "f") ? 'testnet' : 'mainnet';
270
+ }
271
+ /**
272
+ * Check if running on testnet
273
+ *
274
+ * @returns True if the service is in testnet mode.
275
+ */
276
+ isTestnetMode() {
277
+ return __classPrivateFieldGet(this, _HyperLiquidClientService_isTestnet, "f");
278
+ }
279
+ /**
280
+ * Update testnet mode
281
+ *
282
+ * @param isTestnet - Whether to enable testnet mode.
283
+ */
284
+ setTestnetMode(isTestnet) {
285
+ __classPrivateFieldSet(this, _HyperLiquidClientService_isTestnet, isTestnet, "f");
286
+ }
287
+ /**
288
+ * Fetch historical candle data using the HyperLiquid SDK
289
+ *
290
+ * @param options - The candle fetch configuration.
291
+ * @param options.symbol - The asset symbol (e.g., "BTC", "ETH").
292
+ * @param options.interval - The candle interval (e.g., "1m", "5m", "15m", "1h", "1d").
293
+ * @param options.limit - Number of candles to fetch (default: 100).
294
+ * @param options.endTime - End timestamp in milliseconds (default: now).
295
+ * @returns The historical candle data, or null if no data is available.
296
+ */
297
+ async fetchHistoricalCandles(options) {
298
+ const { symbol, interval, limit = 100, endTime } = options;
299
+ this.ensureInitialized();
300
+ try {
301
+ // Calculate start and end times based on interval and limit
302
+ const now = endTime ?? Date.now();
303
+ const intervalMs = __classPrivateFieldGet(this, _HyperLiquidClientService_instances, "m", _HyperLiquidClientService_getIntervalMilliseconds).call(this, interval);
304
+ const startTime = now - limit * intervalMs;
305
+ // Use the SDK's InfoClient to fetch candle data
306
+ // HyperLiquid SDK uses 'coin' terminology
307
+ const infoClient = this.getInfoClient();
308
+ const data = await infoClient.candleSnapshot({
309
+ coin: symbol, // Map to HyperLiquid SDK's 'coin' parameter
310
+ interval,
311
+ startTime,
312
+ endTime: now,
313
+ });
314
+ // Transform API response to match expected format
315
+ if (Array.isArray(data) && data.length > 0) {
316
+ const candles = data.map((candle) => ({
317
+ time: candle.t, // open time
318
+ open: candle.o.toString(),
319
+ high: candle.h.toString(),
320
+ low: candle.l.toString(),
321
+ close: candle.c.toString(),
322
+ volume: candle.v.toString(),
323
+ }));
324
+ return {
325
+ symbol,
326
+ interval,
327
+ candles,
328
+ };
329
+ }
330
+ return {
331
+ symbol,
332
+ interval,
333
+ candles: [],
334
+ };
335
+ }
336
+ catch (error) {
337
+ const errorInstance = (0, errorUtils_1.ensureError)(error, 'HyperLiquidClientService.fetchHistoricalCandles');
338
+ // Log to Sentry: prevents initial chart data load
339
+ __classPrivateFieldGet(this, _HyperLiquidClientService_deps, "f").logger.error(errorInstance, {
340
+ tags: {
341
+ feature: perpsConfig_1.PERPS_CONSTANTS.FeatureName,
342
+ service: 'HyperLiquidClientService',
343
+ network: __classPrivateFieldGet(this, _HyperLiquidClientService_isTestnet, "f") ? 'testnet' : 'mainnet',
344
+ },
345
+ context: {
346
+ name: 'historical_candles_api',
347
+ data: {
348
+ operation: 'fetchHistoricalCandles',
349
+ symbol,
350
+ interval,
351
+ limit,
352
+ hasEndTime: endTime !== undefined,
353
+ },
354
+ },
355
+ });
356
+ throw error;
357
+ }
358
+ }
359
+ /**
360
+ * Subscribe to candle updates via WebSocket
361
+ *
362
+ * @param root0 - The subscription parameters.
363
+ * @param root0.symbol - The asset symbol (e.g., "BTC", "ETH").
364
+ * @param root0.interval - The candle interval (e.g., "1m", "5m", "15m").
365
+ * @param root0.duration - Optional time duration for calculating initial fetch size.
366
+ * @param root0.callback - Function called with updated candle data.
367
+ * @param root0.onError - Optional function called if subscription initialization fails.
368
+ * @returns Cleanup function to unsubscribe.
369
+ */
370
+ subscribeToCandles({ symbol, interval, duration, callback, onError, }) {
371
+ this.ensureInitialized();
372
+ const subscriptionClient = this.getSubscriptionClient();
373
+ if (!subscriptionClient) {
374
+ throw new Error(perpsErrorCodes_1.PERPS_ERROR_CODES.SUBSCRIPTION_CLIENT_NOT_AVAILABLE);
375
+ }
376
+ let currentCandleData = null;
377
+ let wsUnsubscribe = null;
378
+ let isUnsubscribed = false;
379
+ // Store the subscription promise to enable cleanup even when pending
380
+ // This fixes a race condition where component unmounts before subscription resolves
381
+ let subscriptionPromise = null;
382
+ // Calculate initial fetch size dynamically based on duration and interval
383
+ // Match main branch behavior: up to 500 candles initially
384
+ const initialLimit = duration
385
+ ? Math.min((0, chartConfig_1.calculateCandleCount)(duration, interval), 500)
386
+ : 100; // Default to 100 if no duration provided
387
+ // 1. Fetch initial historical data, then subscribe to WebSocket updates
388
+ // Using an async IIFE to avoid nested promises and callback-in-promise issues
389
+ const initAndSubscribe = async () => {
390
+ try {
391
+ const initialData = await this.fetchHistoricalCandles({
392
+ symbol,
393
+ interval,
394
+ limit: initialLimit,
395
+ });
396
+ // Don't proceed if already unsubscribed
397
+ if (isUnsubscribed) {
398
+ return;
399
+ }
400
+ currentCandleData = initialData;
401
+ if (currentCandleData) {
402
+ callback(currentCandleData);
403
+ }
404
+ // 2. Subscribe to WebSocket for new candles
405
+ // HyperLiquid SDK uses 'coin' terminology
406
+ // Store the promise so cleanup can wait for it if needed
407
+ subscriptionPromise = subscriptionClient.candle({ coin: symbol, interval }, // Map to HyperLiquid SDK's 'coin' parameter
408
+ (candleEvent) => {
409
+ // Don't process events if already unsubscribed
410
+ if (isUnsubscribed) {
411
+ return;
412
+ }
413
+ // Transform SDK CandleEvent to our Candle format
414
+ const newCandle = {
415
+ time: candleEvent.t,
416
+ open: candleEvent.o.toString(),
417
+ high: candleEvent.h.toString(),
418
+ low: candleEvent.l.toString(),
419
+ close: candleEvent.c.toString(),
420
+ volume: candleEvent.v.toString(),
421
+ };
422
+ if (currentCandleData) {
423
+ // Check if this is an update to the last candle or a new candle
424
+ const { candles } = currentCandleData;
425
+ const lastCandle = candles[candles.length - 1];
426
+ if (lastCandle?.time === newCandle.time) {
427
+ // Update existing candle (live candle update)
428
+ // Create new array with updated last element to trigger React re-render
429
+ currentCandleData = {
430
+ ...currentCandleData,
431
+ candles: [...candles.slice(0, -1), newCandle],
432
+ };
433
+ }
434
+ else {
435
+ // New candle (completed candle)
436
+ // Create new array with added element to trigger React re-render
437
+ currentCandleData = {
438
+ ...currentCandleData,
439
+ candles: [...candles, newCandle],
440
+ };
441
+ }
442
+ }
443
+ else {
444
+ currentCandleData = {
445
+ symbol,
446
+ interval,
447
+ candles: [newCandle],
448
+ };
449
+ }
450
+ callback(currentCandleData);
451
+ });
452
+ // Store cleanup function when subscription resolves
453
+ try {
454
+ const sub = await subscriptionPromise;
455
+ wsUnsubscribe = () => sub.unsubscribe();
456
+ // If already unsubscribed while waiting, clean up immediately
457
+ if (isUnsubscribed) {
458
+ wsUnsubscribe();
459
+ wsUnsubscribe = null;
460
+ }
461
+ }
462
+ catch (error) {
463
+ const errorInstance = (0, errorUtils_1.ensureError)(error, 'HyperLiquidClientService.subscribeToCandles');
464
+ // Log to Sentry: WebSocket subscription failure prevents live updates
465
+ __classPrivateFieldGet(this, _HyperLiquidClientService_deps, "f").logger.error(errorInstance, {
466
+ tags: {
467
+ feature: perpsConfig_1.PERPS_CONSTANTS.FeatureName,
468
+ service: 'HyperLiquidClientService',
469
+ network: __classPrivateFieldGet(this, _HyperLiquidClientService_isTestnet, "f") ? 'testnet' : 'mainnet',
470
+ },
471
+ context: {
472
+ name: 'websocket_subscription',
473
+ data: {
474
+ operation: 'subscribeToCandles',
475
+ symbol,
476
+ interval,
477
+ phase: 'ws_subscription',
478
+ },
479
+ },
480
+ });
481
+ // Notify caller of error
482
+ onError?.(errorInstance);
483
+ }
484
+ }
485
+ catch (error) {
486
+ const errorInstance = (0, errorUtils_1.ensureError)(error, 'HyperLiquidClientService.subscribeToCandles');
487
+ // Log to Sentry: initial fetch failure blocks chart completely
488
+ __classPrivateFieldGet(this, _HyperLiquidClientService_deps, "f").logger.error(errorInstance, {
489
+ tags: {
490
+ feature: perpsConfig_1.PERPS_CONSTANTS.FeatureName,
491
+ service: 'HyperLiquidClientService',
492
+ network: __classPrivateFieldGet(this, _HyperLiquidClientService_isTestnet, "f") ? 'testnet' : 'mainnet',
493
+ },
494
+ context: {
495
+ name: 'initial_candles_fetch',
496
+ data: {
497
+ operation: 'subscribeToCandles',
498
+ symbol,
499
+ interval,
500
+ phase: 'initial_fetch',
501
+ initialLimit,
502
+ },
503
+ },
504
+ });
505
+ // Notify caller of error
506
+ onError?.(errorInstance);
507
+ }
508
+ };
509
+ // Fire-and-forget the async initialization
510
+ initAndSubscribe().catch(() => {
511
+ // Error already handled inside initAndSubscribe
512
+ });
513
+ // Return cleanup function
514
+ return () => {
515
+ isUnsubscribed = true;
516
+ if (wsUnsubscribe) {
517
+ // Subscription already resolved - unsubscribe directly
518
+ wsUnsubscribe();
519
+ wsUnsubscribe = null;
520
+ }
521
+ else if (subscriptionPromise) {
522
+ // Subscription promise still pending - wait for it and clean up
523
+ // This prevents WebSocket subscription leaks when component unmounts
524
+ // before the subscription promise resolves
525
+ subscriptionPromise
526
+ .then((sub) => sub.unsubscribe())
527
+ .catch(() => {
528
+ // Ignore errors during cleanup - subscription may have failed
529
+ });
530
+ subscriptionPromise = null;
531
+ }
532
+ };
533
+ }
534
+ /**
535
+ * Disconnect and cleanup all clients
536
+ *
537
+ * @returns A promise that resolves when disconnection is complete.
538
+ */
539
+ async disconnect() {
540
+ // Await existing promise if already disconnecting
541
+ if (__classPrivateFieldGet(this, _HyperLiquidClientService_disconnectionPromise, "f")) {
542
+ await __classPrivateFieldGet(this, _HyperLiquidClientService_disconnectionPromise, "f");
543
+ return;
544
+ }
545
+ // If already disconnected, return immediately
546
+ if (__classPrivateFieldGet(this, _HyperLiquidClientService_connectionState, "f") === types_1.WebSocketConnectionState.Disconnected) {
547
+ return;
548
+ }
549
+ // Create and store the disconnection promise
550
+ __classPrivateFieldSet(this, _HyperLiquidClientService_disconnectionPromise, __classPrivateFieldGet(this, _HyperLiquidClientService_instances, "m", _HyperLiquidClientService_performDisconnection).call(this), "f");
551
+ try {
552
+ await __classPrivateFieldGet(this, _HyperLiquidClientService_disconnectionPromise, "f");
553
+ }
554
+ finally {
555
+ __classPrivateFieldSet(this, _HyperLiquidClientService_disconnectionPromise, null, "f");
556
+ }
557
+ }
558
+ /**
559
+ * Get current WebSocket connection state
560
+ *
561
+ * @returns The current WebSocket connection state.
562
+ */
563
+ getConnectionState() {
564
+ return __classPrivateFieldGet(this, _HyperLiquidClientService_connectionState, "f");
565
+ }
566
+ /**
567
+ * Check if WebSocket is fully disconnected
568
+ *
569
+ * @returns True if the WebSocket is in disconnected state.
570
+ */
571
+ isDisconnected() {
572
+ return __classPrivateFieldGet(this, _HyperLiquidClientService_connectionState, "f") === types_1.WebSocketConnectionState.Disconnected;
573
+ }
574
+ /**
575
+ * Set callback to be invoked when reconnection is needed
576
+ * This allows the service to notify external components (like PerpsConnectionManager)
577
+ * when a connection drop is detected
578
+ *
579
+ * @param callback - The async callback to invoke when reconnection is needed.
580
+ */
581
+ setOnReconnectCallback(callback) {
582
+ __classPrivateFieldSet(this, _HyperLiquidClientService_onReconnectCallback, callback, "f");
583
+ }
584
+ /**
585
+ * Set callback for WebSocket termination events
586
+ * Called when the SDK exhausts all reconnection attempts
587
+ *
588
+ * @param callback - The callback to invoke on termination, or null to clear.
589
+ */
590
+ setOnTerminateCallback(callback) {
591
+ __classPrivateFieldSet(this, _HyperLiquidClientService_onTerminateCallback, callback, "f");
592
+ }
593
+ /**
594
+ * Subscribe to connection state changes.
595
+ * The listener will be called immediately with the current state and whenever the state changes.
596
+ *
597
+ * @param listener - Callback function that receives the new connection state and reconnection attempt
598
+ * @returns Unsubscribe function to remove the listener
599
+ */
600
+ subscribeToConnectionState(listener) {
601
+ __classPrivateFieldGet(this, _HyperLiquidClientService_connectionStateListeners, "f").add(listener);
602
+ // Immediately notify with current state
603
+ // Wrap in try-catch to match notifyConnectionStateListeners behavior
604
+ // This ensures the unsubscribe function is always returned even if listener throws
605
+ try {
606
+ listener(__classPrivateFieldGet(this, _HyperLiquidClientService_connectionState, "f"), __classPrivateFieldGet(this, _HyperLiquidClientService_reconnectionAttempt, "f"));
607
+ }
608
+ catch {
609
+ // Ignore errors in listeners to prevent breaking subscription mechanism
610
+ // If listener throws, it will be removed when unsubscribe is called
611
+ }
612
+ // Return unsubscribe function
613
+ return () => {
614
+ __classPrivateFieldGet(this, _HyperLiquidClientService_connectionStateListeners, "f").delete(listener);
615
+ };
616
+ }
617
+ /**
618
+ * Manually trigger a reconnection attempt.
619
+ * This is exposed for UI retry buttons when user wants to force reconnection.
620
+ * Resets the reconnection attempt counter to allow retrying after max attempts.
621
+ */
622
+ async reconnect() {
623
+ __classPrivateFieldGet(this, _HyperLiquidClientService_deps, "f").debugLogger.log('[HyperLiquidClientService] reconnect() called', {
624
+ previousAttempt: __classPrivateFieldGet(this, _HyperLiquidClientService_reconnectionAttempt, "f"),
625
+ currentState: __classPrivateFieldGet(this, _HyperLiquidClientService_connectionState, "f"),
626
+ });
627
+ // Reset attempt counter when user manually triggers retry
628
+ __classPrivateFieldSet(this, _HyperLiquidClientService_reconnectionAttempt, 0, "f");
629
+ await __classPrivateFieldGet(this, _HyperLiquidClientService_instances, "m", _HyperLiquidClientService_handleConnectionDrop).call(this);
630
+ __classPrivateFieldGet(this, _HyperLiquidClientService_deps, "f").debugLogger.log('[HyperLiquidClientService] reconnect() completed', {
631
+ newState: __classPrivateFieldGet(this, _HyperLiquidClientService_connectionState, "f"),
632
+ });
633
+ }
634
+ }
635
+ exports.HyperLiquidClientService = HyperLiquidClientService;
636
+ _HyperLiquidClientService_exchangeClient = new WeakMap(), _HyperLiquidClientService_infoClient = new WeakMap(), _HyperLiquidClientService_infoClientHttp = new WeakMap(), _HyperLiquidClientService_subscriptionClient = new WeakMap(), _HyperLiquidClientService_wsTransport = new WeakMap(), _HyperLiquidClientService_httpTransport = new WeakMap(), _HyperLiquidClientService_isTestnet = new WeakMap(), _HyperLiquidClientService_connectionState = new WeakMap(), _HyperLiquidClientService_disconnectionPromise = new WeakMap(), _HyperLiquidClientService_onTerminateCallback = new WeakMap(), _HyperLiquidClientService_onReconnectCallback = new WeakMap(), _HyperLiquidClientService_reconnectionAttempt = new WeakMap(), _HyperLiquidClientService_connectionStateListeners = new WeakMap(), _HyperLiquidClientService_reconnectionRetryTimeout = new WeakMap(), _HyperLiquidClientService_deps = new WeakMap(), _HyperLiquidClientService_isReconnecting = new WeakMap(), _HyperLiquidClientService_instances = new WeakSet(), _HyperLiquidClientService_createTransports = function _HyperLiquidClientService_createTransports() {
637
+ // Prevent duplicate transport creation and listener accumulation
638
+ // This guards against re-entry if initialize() is called multiple times
639
+ // (e.g., after a failed initialization attempt that didn't properly clean up)
640
+ if (__classPrivateFieldGet(this, _HyperLiquidClientService_wsTransport, "f") && __classPrivateFieldGet(this, _HyperLiquidClientService_httpTransport, "f")) {
641
+ __classPrivateFieldGet(this, _HyperLiquidClientService_deps, "f").debugLogger.log('HyperLiquid: Transports already exist, skipping creation');
642
+ return __classPrivateFieldGet(this, _HyperLiquidClientService_wsTransport, "f");
643
+ }
644
+ __classPrivateFieldGet(this, _HyperLiquidClientService_deps, "f").debugLogger.log('HyperLiquid: Creating transports', {
645
+ isTestnet: __classPrivateFieldGet(this, _HyperLiquidClientService_isTestnet, "f"),
646
+ timestamp: new Date().toISOString(),
647
+ note: 'SDK will auto-select endpoints based on isTestnet flag',
648
+ });
649
+ // HTTP transport for request/response operations (InfoClient, ExchangeClient)
650
+ // SDK automatically selects: mainnet (https://api.hyperliquid.xyz) or testnet (https://api.hyperliquid-testnet.xyz)
651
+ __classPrivateFieldSet(this, _HyperLiquidClientService_httpTransport, new hyperliquid_1.HttpTransport({
652
+ isTestnet: __classPrivateFieldGet(this, _HyperLiquidClientService_isTestnet, "f"),
653
+ timeout: hyperLiquidConfig_1.HYPERLIQUID_TRANSPORT_CONFIG.timeout,
654
+ }), "f");
655
+ // WebSocket transport for real-time subscriptions (SubscriptionClient)
656
+ // SDK automatically selects: mainnet (wss://api.hyperliquid.xyz/ws) or testnet (wss://api.hyperliquid-testnet.xyz/ws)
657
+ __classPrivateFieldSet(this, _HyperLiquidClientService_wsTransport, new hyperliquid_1.WebSocketTransport({
658
+ isTestnet: __classPrivateFieldGet(this, _HyperLiquidClientService_isTestnet, "f"),
659
+ ...hyperLiquidConfig_1.HYPERLIQUID_TRANSPORT_CONFIG,
660
+ reconnect: {
661
+ ...hyperLiquidConfig_1.HYPERLIQUID_TRANSPORT_CONFIG.reconnect,
662
+ WebSocket: globalThis.WebSocket, // Use React Native's global WebSocket
663
+ },
664
+ }), "f");
665
+ // Listen for WebSocket termination (fired when SDK exhausts all reconnection attempts)
666
+ __classPrivateFieldGet(this, _HyperLiquidClientService_wsTransport, "f").socket.addEventListener('terminate', (event) => {
667
+ const customEvent = event;
668
+ __classPrivateFieldGet(this, _HyperLiquidClientService_deps, "f").debugLogger.log('HyperLiquid: WebSocket terminated', {
669
+ reason: customEvent.detail?.code,
670
+ timestamp: new Date().toISOString(),
671
+ });
672
+ __classPrivateFieldGet(this, _HyperLiquidClientService_instances, "m", _HyperLiquidClientService_updateConnectionState).call(this, types_1.WebSocketConnectionState.Disconnected);
673
+ if (__classPrivateFieldGet(this, _HyperLiquidClientService_onTerminateCallback, "f")) {
674
+ const error = customEvent.detail instanceof Error
675
+ ? customEvent.detail
676
+ : new Error(`WebSocket terminated: ${customEvent.detail?.code ?? 'unknown'}`);
677
+ __classPrivateFieldGet(this, _HyperLiquidClientService_onTerminateCallback, "f").call(this, error);
678
+ }
679
+ });
680
+ return __classPrivateFieldGet(this, _HyperLiquidClientService_wsTransport, "f");
681
+ }, _HyperLiquidClientService_getIntervalMilliseconds = function _HyperLiquidClientService_getIntervalMilliseconds(interval) {
682
+ const intervalMap = {
683
+ [chartConfig_1.CandlePeriod.OneMinute]: 1 * 60 * 1000,
684
+ [chartConfig_1.CandlePeriod.ThreeMinutes]: 3 * 60 * 1000,
685
+ [chartConfig_1.CandlePeriod.FiveMinutes]: 5 * 60 * 1000,
686
+ [chartConfig_1.CandlePeriod.FifteenMinutes]: 15 * 60 * 1000,
687
+ [chartConfig_1.CandlePeriod.ThirtyMinutes]: 30 * 60 * 1000,
688
+ [chartConfig_1.CandlePeriod.OneHour]: 60 * 60 * 1000,
689
+ [chartConfig_1.CandlePeriod.TwoHours]: 2 * 60 * 60 * 1000,
690
+ [chartConfig_1.CandlePeriod.FourHours]: 4 * 60 * 60 * 1000,
691
+ [chartConfig_1.CandlePeriod.EightHours]: 8 * 60 * 60 * 1000,
692
+ [chartConfig_1.CandlePeriod.TwelveHours]: 12 * 60 * 60 * 1000,
693
+ [chartConfig_1.CandlePeriod.OneDay]: 24 * 60 * 60 * 1000,
694
+ [chartConfig_1.CandlePeriod.ThreeDays]: 3 * 24 * 60 * 60 * 1000,
695
+ [chartConfig_1.CandlePeriod.OneWeek]: 7 * 24 * 60 * 60 * 1000,
696
+ [chartConfig_1.CandlePeriod.OneMonth]: 30 * 24 * 60 * 60 * 1000, // Approximate
697
+ };
698
+ return intervalMap[interval];
699
+ }, _HyperLiquidClientService_performDisconnection = async function _HyperLiquidClientService_performDisconnection() {
700
+ try {
701
+ __classPrivateFieldGet(this, _HyperLiquidClientService_instances, "m", _HyperLiquidClientService_updateConnectionState).call(this, types_1.WebSocketConnectionState.Disconnecting);
702
+ __classPrivateFieldGet(this, _HyperLiquidClientService_deps, "f").debugLogger.log('HyperLiquid: Disconnecting SDK clients', {
703
+ isTestnet: __classPrivateFieldGet(this, _HyperLiquidClientService_isTestnet, "f"),
704
+ timestamp: new Date().toISOString(),
705
+ connectionState: __classPrivateFieldGet(this, _HyperLiquidClientService_connectionState, "f"),
706
+ });
707
+ // Clear callbacks
708
+ __classPrivateFieldSet(this, _HyperLiquidClientService_onReconnectCallback, undefined, "f");
709
+ __classPrivateFieldSet(this, _HyperLiquidClientService_onTerminateCallback, null, "f");
710
+ // Cancel any pending reconnection retry timeout
711
+ if (__classPrivateFieldGet(this, _HyperLiquidClientService_reconnectionRetryTimeout, "f")) {
712
+ clearTimeout(__classPrivateFieldGet(this, _HyperLiquidClientService_reconnectionRetryTimeout, "f"));
713
+ __classPrivateFieldSet(this, _HyperLiquidClientService_reconnectionRetryTimeout, null, "f");
714
+ }
715
+ // Clear connection state listeners to prevent stale callbacks
716
+ __classPrivateFieldGet(this, _HyperLiquidClientService_connectionStateListeners, "f").clear();
717
+ // Reset reconnection flag to allow future manual retries
718
+ // This prevents a race condition where disconnecting during an active
719
+ // reconnection attempt could leave the flag stuck, blocking subsequent retries
720
+ __classPrivateFieldSet(this, _HyperLiquidClientService_isReconnecting, false, "f");
721
+ // Close WebSocket transport only (HTTP is stateless)
722
+ if (__classPrivateFieldGet(this, _HyperLiquidClientService_wsTransport, "f")) {
723
+ try {
724
+ await __classPrivateFieldGet(this, _HyperLiquidClientService_wsTransport, "f").close();
725
+ __classPrivateFieldGet(this, _HyperLiquidClientService_deps, "f").debugLogger.log('HyperLiquid: Closed WebSocket transport', {
726
+ timestamp: new Date().toISOString(),
727
+ });
728
+ }
729
+ catch (error) {
730
+ __classPrivateFieldGet(this, _HyperLiquidClientService_deps, "f").logger.error((0, errorUtils_1.ensureError)(error, 'HyperLiquidClientService.performDisconnection'), {
731
+ tags: { feature: perpsConfig_1.PERPS_CONSTANTS.FeatureName },
732
+ context: {
733
+ name: 'HyperLiquidClientService.performDisconnection',
734
+ data: { action: 'close_transport' },
735
+ },
736
+ });
737
+ }
738
+ }
739
+ // Clear client references
740
+ __classPrivateFieldSet(this, _HyperLiquidClientService_subscriptionClient, undefined, "f");
741
+ __classPrivateFieldSet(this, _HyperLiquidClientService_exchangeClient, undefined, "f");
742
+ __classPrivateFieldSet(this, _HyperLiquidClientService_infoClient, undefined, "f");
743
+ __classPrivateFieldSet(this, _HyperLiquidClientService_infoClientHttp, undefined, "f");
744
+ __classPrivateFieldSet(this, _HyperLiquidClientService_wsTransport, undefined, "f");
745
+ __classPrivateFieldSet(this, _HyperLiquidClientService_httpTransport, undefined, "f");
746
+ __classPrivateFieldGet(this, _HyperLiquidClientService_instances, "m", _HyperLiquidClientService_updateConnectionState).call(this, types_1.WebSocketConnectionState.Disconnected);
747
+ __classPrivateFieldGet(this, _HyperLiquidClientService_deps, "f").debugLogger.log('HyperLiquid: SDK clients fully disconnected', {
748
+ timestamp: new Date().toISOString(),
749
+ connectionState: __classPrivateFieldGet(this, _HyperLiquidClientService_connectionState, "f"),
750
+ });
751
+ }
752
+ catch (error) {
753
+ __classPrivateFieldGet(this, _HyperLiquidClientService_instances, "m", _HyperLiquidClientService_updateConnectionState).call(this, types_1.WebSocketConnectionState.Disconnected);
754
+ __classPrivateFieldGet(this, _HyperLiquidClientService_deps, "f").logger.error((0, errorUtils_1.ensureError)(error, 'HyperLiquidClientService.performDisconnection'), {
755
+ tags: { feature: perpsConfig_1.PERPS_CONSTANTS.FeatureName },
756
+ context: {
757
+ name: 'HyperLiquidClientService.performDisconnection',
758
+ data: { action: 'outer_catch' },
759
+ },
760
+ });
761
+ throw error;
762
+ }
763
+ }, _HyperLiquidClientService_updateConnectionState = function _HyperLiquidClientService_updateConnectionState(newState) {
764
+ const previousState = __classPrivateFieldGet(this, _HyperLiquidClientService_connectionState, "f");
765
+ const stateChanged = previousState !== newState;
766
+ const isReconnectionAttempt = newState === types_1.WebSocketConnectionState.Connecting &&
767
+ __classPrivateFieldGet(this, _HyperLiquidClientService_reconnectionAttempt, "f") > 0;
768
+ __classPrivateFieldSet(this, _HyperLiquidClientService_connectionState, newState, "f");
769
+ // Reset reconnection attempt counter when successfully connected
770
+ if (newState === types_1.WebSocketConnectionState.Connected) {
771
+ __classPrivateFieldSet(this, _HyperLiquidClientService_reconnectionAttempt, 0, "f");
772
+ }
773
+ // Notify if state changed OR if this is a reconnection attempt (to update attempt count)
774
+ if (stateChanged || isReconnectionAttempt) {
775
+ __classPrivateFieldGet(this, _HyperLiquidClientService_instances, "m", _HyperLiquidClientService_notifyConnectionStateListeners).call(this);
776
+ }
777
+ }, _HyperLiquidClientService_notifyConnectionStateListeners = function _HyperLiquidClientService_notifyConnectionStateListeners() {
778
+ __classPrivateFieldGet(this, _HyperLiquidClientService_connectionStateListeners, "f").forEach((listener) => {
779
+ try {
780
+ listener(__classPrivateFieldGet(this, _HyperLiquidClientService_connectionState, "f"), __classPrivateFieldGet(this, _HyperLiquidClientService_reconnectionAttempt, "f"));
781
+ }
782
+ catch {
783
+ // Ignore errors in listeners to prevent breaking other listeners
784
+ }
785
+ });
786
+ }, _HyperLiquidClientService_handleConnectionDrop =
787
+ /**
788
+ * Handle detected connection drop
789
+ * Recreates WebSocket transport and notifies callback to restore subscriptions
790
+ * Will give up after maxReconnectionAttempts and mark status as disconnected
791
+ */
792
+ async function _HyperLiquidClientService_handleConnectionDrop() {
793
+ // Prevent multiple simultaneous reconnection attempts
794
+ if (__classPrivateFieldGet(this, _HyperLiquidClientService_isReconnecting, "f")) {
795
+ return;
796
+ }
797
+ __classPrivateFieldSet(this, _HyperLiquidClientService_isReconnecting, true, "f");
798
+ // Increment reconnection attempt counter
799
+ __classPrivateFieldSet(this, _HyperLiquidClientService_reconnectionAttempt, __classPrivateFieldGet(this, _HyperLiquidClientService_reconnectionAttempt, "f") + 1, "f");
800
+ // Check if we've exceeded max retry attempts
801
+ if (__classPrivateFieldGet(this, _HyperLiquidClientService_reconnectionAttempt, "f") > maxReconnectionAttempts) {
802
+ __classPrivateFieldSet(this, _HyperLiquidClientService_isReconnecting, false, "f");
803
+ __classPrivateFieldGet(this, _HyperLiquidClientService_instances, "m", _HyperLiquidClientService_updateConnectionState).call(this, types_1.WebSocketConnectionState.Disconnected);
804
+ return;
805
+ }
806
+ try {
807
+ __classPrivateFieldGet(this, _HyperLiquidClientService_instances, "m", _HyperLiquidClientService_updateConnectionState).call(this, types_1.WebSocketConnectionState.Connecting);
808
+ // Close existing WebSocket transport and clear references
809
+ // so createTransports() will create fresh ones
810
+ if (__classPrivateFieldGet(this, _HyperLiquidClientService_wsTransport, "f")) {
811
+ try {
812
+ await __classPrivateFieldGet(this, _HyperLiquidClientService_wsTransport, "f").close();
813
+ }
814
+ catch {
815
+ // Ignore errors during close - transport may already be dead
816
+ }
817
+ }
818
+ __classPrivateFieldSet(this, _HyperLiquidClientService_wsTransport, undefined, "f");
819
+ __classPrivateFieldSet(this, _HyperLiquidClientService_httpTransport, undefined, "f");
820
+ // Recreate WebSocket transport - returns the new transport for type safety
821
+ const newWsTransport = __classPrivateFieldGet(this, _HyperLiquidClientService_instances, "m", _HyperLiquidClientService_createTransports).call(this);
822
+ // Recreate clients that use WebSocket transport
823
+ __classPrivateFieldSet(this, _HyperLiquidClientService_infoClient, new hyperliquid_1.InfoClient({ transport: newWsTransport }), "f");
824
+ __classPrivateFieldSet(this, _HyperLiquidClientService_subscriptionClient, new hyperliquid_1.SubscriptionClient({
825
+ transport: newWsTransport,
826
+ }), "f");
827
+ await newWsTransport.ready();
828
+ __classPrivateFieldGet(this, _HyperLiquidClientService_deps, "f").debugLogger.log('HyperLiquid: Transport ready, restoring subscriptions', { timestamp: new Date().toISOString() });
829
+ // NOW safe to restore subscriptions
830
+ if (__classPrivateFieldGet(this, _HyperLiquidClientService_onReconnectCallback, "f")) {
831
+ await __classPrivateFieldGet(this, _HyperLiquidClientService_onReconnectCallback, "f").call(this);
832
+ }
833
+ // Cancel any pending retry timeout from previous failed attempts
834
+ if (__classPrivateFieldGet(this, _HyperLiquidClientService_reconnectionRetryTimeout, "f")) {
835
+ clearTimeout(__classPrivateFieldGet(this, _HyperLiquidClientService_reconnectionRetryTimeout, "f"));
836
+ __classPrivateFieldSet(this, _HyperLiquidClientService_reconnectionRetryTimeout, null, "f");
837
+ }
838
+ __classPrivateFieldGet(this, _HyperLiquidClientService_instances, "m", _HyperLiquidClientService_updateConnectionState).call(this, types_1.WebSocketConnectionState.Connected);
839
+ __classPrivateFieldSet(this, _HyperLiquidClientService_isReconnecting, false, "f");
840
+ }
841
+ catch {
842
+ // Reset flag before scheduling retry so the next attempt can proceed
843
+ __classPrivateFieldSet(this, _HyperLiquidClientService_isReconnecting, false, "f");
844
+ // Check if we've exceeded max retry attempts
845
+ if (__classPrivateFieldGet(this, _HyperLiquidClientService_reconnectionAttempt, "f") >= maxReconnectionAttempts) {
846
+ __classPrivateFieldGet(this, _HyperLiquidClientService_instances, "m", _HyperLiquidClientService_updateConnectionState).call(this, types_1.WebSocketConnectionState.Disconnected);
847
+ return;
848
+ }
849
+ // Reconnection failed - schedule a retry after a delay
850
+ // Store timeout reference so it can be cancelled on intentional disconnect
851
+ __classPrivateFieldSet(this, _HyperLiquidClientService_reconnectionRetryTimeout, setTimeout(() => {
852
+ __classPrivateFieldSet(this, _HyperLiquidClientService_reconnectionRetryTimeout, null, "f"); // Clear reference after execution
853
+ // Only retry if we haven't been intentionally disconnected
854
+ // and no manual reconnect() is already in progress
855
+ // Note: State may be CONNECTING or DISCONNECTED (if terminate event fired during reconnect)
856
+ if ((__classPrivateFieldGet(this, _HyperLiquidClientService_connectionState, "f") === types_1.WebSocketConnectionState.Connecting ||
857
+ __classPrivateFieldGet(this, _HyperLiquidClientService_connectionState, "f") === types_1.WebSocketConnectionState.Disconnected) &&
858
+ !__classPrivateFieldGet(this, _HyperLiquidClientService_disconnectionPromise, "f") &&
859
+ !__classPrivateFieldGet(this, _HyperLiquidClientService_isReconnecting, "f")) {
860
+ __classPrivateFieldGet(this, _HyperLiquidClientService_instances, "m", _HyperLiquidClientService_handleConnectionDrop).call(this).catch(() => {
861
+ // Error already handled inside #handleConnectionDrop
862
+ });
863
+ }
864
+ }, perpsConfig_1.PERPS_CONSTANTS.ReconnectionRetryDelayMs), "f");
865
+ }
866
+ };
867
+ //# sourceMappingURL=HyperLiquidClientService.cjs.map