@metamask-previews/perps-controller 0.0.0-preview-e4aa1532 → 0.0.0-preview-6dfa4aeba

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 +1 -11
  2. package/dist/PerpsController.cjs +66 -2224
  3. package/dist/PerpsController.cjs.map +1 -1
  4. package/dist/PerpsController.d.cts +79 -933
  5. package/dist/PerpsController.d.cts.map +1 -1
  6. package/dist/PerpsController.d.mts +79 -933
  7. package/dist/PerpsController.d.mts.map +1 -1
  8. package/dist/PerpsController.mjs +64 -2221
  9. package/dist/PerpsController.mjs.map +1 -1
  10. package/dist/index.cjs +1 -32
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.d.cts +2 -6
  13. package/dist/index.d.cts.map +1 -1
  14. package/dist/index.d.mts +2 -6
  15. package/dist/index.d.mts.map +1 -1
  16. package/dist/index.mjs +1 -9
  17. package/dist/index.mjs.map +1 -1
  18. package/package.json +4 -19
  19. package/dist/__mocks__/hyperliquidMock.cjs +0 -68
  20. package/dist/__mocks__/hyperliquidMock.cjs.map +0 -1
  21. package/dist/__mocks__/hyperliquidMock.d.cts +0 -15
  22. package/dist/__mocks__/hyperliquidMock.d.cts.map +0 -1
  23. package/dist/__mocks__/hyperliquidMock.d.mts +0 -15
  24. package/dist/__mocks__/hyperliquidMock.d.mts.map +0 -1
  25. package/dist/__mocks__/hyperliquidMock.mjs +0 -65
  26. package/dist/__mocks__/hyperliquidMock.mjs.map +0 -1
  27. package/dist/__mocks__/providerMocks.cjs +0 -144
  28. package/dist/__mocks__/providerMocks.cjs.map +0 -1
  29. package/dist/__mocks__/providerMocks.d.cts +0 -44
  30. package/dist/__mocks__/providerMocks.d.cts.map +0 -1
  31. package/dist/__mocks__/providerMocks.d.mts +0 -44
  32. package/dist/__mocks__/providerMocks.d.mts.map +0 -1
  33. package/dist/__mocks__/providerMocks.mjs +0 -136
  34. package/dist/__mocks__/providerMocks.mjs.map +0 -1
  35. package/dist/__mocks__/serviceMocks.cjs +0 -187
  36. package/dist/__mocks__/serviceMocks.cjs.map +0 -1
  37. package/dist/__mocks__/serviceMocks.d.cts +0 -58
  38. package/dist/__mocks__/serviceMocks.d.cts.map +0 -1
  39. package/dist/__mocks__/serviceMocks.d.mts +0 -58
  40. package/dist/__mocks__/serviceMocks.d.mts.map +0 -1
  41. package/dist/__mocks__/serviceMocks.mjs +0 -180
  42. package/dist/__mocks__/serviceMocks.mjs.map +0 -1
  43. package/dist/aggregation/SubscriptionMultiplexer.cjs +0 -459
  44. package/dist/aggregation/SubscriptionMultiplexer.cjs.map +0 -1
  45. package/dist/aggregation/SubscriptionMultiplexer.d.cts +0 -222
  46. package/dist/aggregation/SubscriptionMultiplexer.d.cts.map +0 -1
  47. package/dist/aggregation/SubscriptionMultiplexer.d.mts +0 -222
  48. package/dist/aggregation/SubscriptionMultiplexer.d.mts.map +0 -1
  49. package/dist/aggregation/SubscriptionMultiplexer.mjs +0 -455
  50. package/dist/aggregation/SubscriptionMultiplexer.mjs.map +0 -1
  51. package/dist/aggregation/index.cjs +0 -9
  52. package/dist/aggregation/index.cjs.map +0 -1
  53. package/dist/aggregation/index.d.cts +0 -6
  54. package/dist/aggregation/index.d.cts.map +0 -1
  55. package/dist/aggregation/index.d.mts +0 -6
  56. package/dist/aggregation/index.d.mts.map +0 -1
  57. package/dist/aggregation/index.mjs +0 -5
  58. package/dist/aggregation/index.mjs.map +0 -1
  59. package/dist/constants/eventNames.cjs +0 -117
  60. package/dist/constants/eventNames.cjs.map +0 -1
  61. package/dist/constants/eventNames.d.cts +0 -106
  62. package/dist/constants/eventNames.d.cts.map +0 -1
  63. package/dist/constants/eventNames.d.mts +0 -106
  64. package/dist/constants/eventNames.d.mts.map +0 -1
  65. package/dist/constants/eventNames.mjs +0 -114
  66. package/dist/constants/eventNames.mjs.map +0 -1
  67. package/dist/constants/hyperLiquidConfig.cjs +0 -366
  68. package/dist/constants/hyperLiquidConfig.cjs.map +0 -1
  69. package/dist/constants/hyperLiquidConfig.d.cts +0 -276
  70. package/dist/constants/hyperLiquidConfig.d.cts.map +0 -1
  71. package/dist/constants/hyperLiquidConfig.d.mts +0 -276
  72. package/dist/constants/hyperLiquidConfig.d.mts.map +0 -1
  73. package/dist/constants/hyperLiquidConfig.mjs +0 -357
  74. package/dist/constants/hyperLiquidConfig.mjs.map +0 -1
  75. package/dist/constants/index.cjs +0 -23
  76. package/dist/constants/index.cjs.map +0 -1
  77. package/dist/constants/index.d.cts +0 -7
  78. package/dist/constants/index.d.cts.map +0 -1
  79. package/dist/constants/index.d.mts +0 -7
  80. package/dist/constants/index.d.mts.map +0 -1
  81. package/dist/constants/index.mjs +0 -7
  82. package/dist/constants/index.mjs.map +0 -1
  83. package/dist/constants/orderTypes.cjs +0 -31
  84. package/dist/constants/orderTypes.cjs.map +0 -1
  85. package/dist/constants/orderTypes.d.cts +0 -19
  86. package/dist/constants/orderTypes.d.cts.map +0 -1
  87. package/dist/constants/orderTypes.d.mts +0 -19
  88. package/dist/constants/orderTypes.d.mts.map +0 -1
  89. package/dist/constants/orderTypes.mjs +0 -27
  90. package/dist/constants/orderTypes.mjs.map +0 -1
  91. package/dist/constants/performanceMetrics.cjs +0 -61
  92. package/dist/constants/performanceMetrics.cjs.map +0 -1
  93. package/dist/constants/performanceMetrics.d.cts +0 -44
  94. package/dist/constants/performanceMetrics.d.cts.map +0 -1
  95. package/dist/constants/performanceMetrics.d.mts +0 -44
  96. package/dist/constants/performanceMetrics.d.mts.map +0 -1
  97. package/dist/constants/performanceMetrics.mjs +0 -58
  98. package/dist/constants/performanceMetrics.mjs.map +0 -1
  99. package/dist/constants/perpsConfig.cjs +0 -461
  100. package/dist/constants/perpsConfig.cjs.map +0 -1
  101. package/dist/constants/perpsConfig.d.cts +0 -343
  102. package/dist/constants/perpsConfig.d.cts.map +0 -1
  103. package/dist/constants/perpsConfig.d.mts +0 -343
  104. package/dist/constants/perpsConfig.d.mts.map +0 -1
  105. package/dist/constants/perpsConfig.mjs +0 -458
  106. package/dist/constants/perpsConfig.mjs.map +0 -1
  107. package/dist/constants/perpsErrorCodes.cjs +0 -79
  108. package/dist/constants/perpsErrorCodes.cjs.map +0 -1
  109. package/dist/constants/perpsErrorCodes.d.cts +0 -64
  110. package/dist/constants/perpsErrorCodes.d.cts.map +0 -1
  111. package/dist/constants/perpsErrorCodes.d.mts +0 -64
  112. package/dist/constants/perpsErrorCodes.d.mts.map +0 -1
  113. package/dist/constants/perpsErrorCodes.mjs +0 -76
  114. package/dist/constants/perpsErrorCodes.mjs.map +0 -1
  115. package/dist/platform-services/HyperLiquidClientService.cjs +0 -857
  116. package/dist/platform-services/HyperLiquidClientService.cjs.map +0 -1
  117. package/dist/platform-services/HyperLiquidClientService.d.cts +0 -263
  118. package/dist/platform-services/HyperLiquidClientService.d.cts.map +0 -1
  119. package/dist/platform-services/HyperLiquidClientService.d.mts +0 -263
  120. package/dist/platform-services/HyperLiquidClientService.d.mts.map +0 -1
  121. package/dist/platform-services/HyperLiquidClientService.mjs +0 -853
  122. package/dist/platform-services/HyperLiquidClientService.mjs.map +0 -1
  123. package/dist/platform-services/HyperLiquidSubscriptionService.cjs +0 -2170
  124. package/dist/platform-services/HyperLiquidSubscriptionService.cjs.map +0 -1
  125. package/dist/platform-services/HyperLiquidSubscriptionService.d.cts +0 -424
  126. package/dist/platform-services/HyperLiquidSubscriptionService.d.cts.map +0 -1
  127. package/dist/platform-services/HyperLiquidSubscriptionService.d.mts +0 -424
  128. package/dist/platform-services/HyperLiquidSubscriptionService.d.mts.map +0 -1
  129. package/dist/platform-services/HyperLiquidSubscriptionService.mjs +0 -2166
  130. package/dist/platform-services/HyperLiquidSubscriptionService.mjs.map +0 -1
  131. package/dist/platform-services/HyperLiquidWalletService.cjs +0 -140
  132. package/dist/platform-services/HyperLiquidWalletService.cjs.map +0 -1
  133. package/dist/platform-services/HyperLiquidWalletService.d.cts +0 -78
  134. package/dist/platform-services/HyperLiquidWalletService.d.cts.map +0 -1
  135. package/dist/platform-services/HyperLiquidWalletService.d.mts +0 -78
  136. package/dist/platform-services/HyperLiquidWalletService.d.mts.map +0 -1
  137. package/dist/platform-services/HyperLiquidWalletService.mjs +0 -136
  138. package/dist/platform-services/HyperLiquidWalletService.mjs.map +0 -1
  139. package/dist/providers/AggregatedPerpsProvider.cjs +0 -777
  140. package/dist/providers/AggregatedPerpsProvider.cjs.map +0 -1
  141. package/dist/providers/AggregatedPerpsProvider.d.cts +0 -466
  142. package/dist/providers/AggregatedPerpsProvider.d.cts.map +0 -1
  143. package/dist/providers/AggregatedPerpsProvider.d.mts +0 -466
  144. package/dist/providers/AggregatedPerpsProvider.d.mts.map +0 -1
  145. package/dist/providers/AggregatedPerpsProvider.mjs +0 -773
  146. package/dist/providers/AggregatedPerpsProvider.mjs.map +0 -1
  147. package/dist/providers/HyperLiquidProvider.cjs +0 -5172
  148. package/dist/providers/HyperLiquidProvider.cjs.map +0 -1
  149. package/dist/providers/HyperLiquidProvider.d.cts +0 -881
  150. package/dist/providers/HyperLiquidProvider.d.cts.map +0 -1
  151. package/dist/providers/HyperLiquidProvider.d.mts +0 -881
  152. package/dist/providers/HyperLiquidProvider.d.mts.map +0 -1
  153. package/dist/providers/HyperLiquidProvider.mjs +0 -5168
  154. package/dist/providers/HyperLiquidProvider.mjs.map +0 -1
  155. package/dist/providers/index.cjs +0 -11
  156. package/dist/providers/index.cjs.map +0 -1
  157. package/dist/providers/index.d.cts +0 -6
  158. package/dist/providers/index.d.cts.map +0 -1
  159. package/dist/providers/index.d.mts +0 -6
  160. package/dist/providers/index.d.mts.map +0 -1
  161. package/dist/providers/index.mjs +0 -6
  162. package/dist/providers/index.mjs.map +0 -1
  163. package/dist/routing/ProviderRouter.cjs +0 -148
  164. package/dist/routing/ProviderRouter.cjs.map +0 -1
  165. package/dist/routing/ProviderRouter.d.cts +0 -124
  166. package/dist/routing/ProviderRouter.d.cts.map +0 -1
  167. package/dist/routing/ProviderRouter.d.mts +0 -124
  168. package/dist/routing/ProviderRouter.d.mts.map +0 -1
  169. package/dist/routing/ProviderRouter.mjs +0 -144
  170. package/dist/routing/ProviderRouter.mjs.map +0 -1
  171. package/dist/routing/index.cjs +0 -9
  172. package/dist/routing/index.cjs.map +0 -1
  173. package/dist/routing/index.d.cts +0 -6
  174. package/dist/routing/index.d.cts.map +0 -1
  175. package/dist/routing/index.d.mts +0 -6
  176. package/dist/routing/index.d.mts.map +0 -1
  177. package/dist/routing/index.mjs +0 -5
  178. package/dist/routing/index.mjs.map +0 -1
  179. package/dist/selectors.cjs +0 -161
  180. package/dist/selectors.cjs.map +0 -1
  181. package/dist/selectors.d.cts +0 -345
  182. package/dist/selectors.d.cts.map +0 -1
  183. package/dist/selectors.d.mts +0 -345
  184. package/dist/selectors.d.mts.map +0 -1
  185. package/dist/selectors.mjs +0 -153
  186. package/dist/selectors.mjs.map +0 -1
  187. package/dist/services/AccountService.cjs +0 -313
  188. package/dist/services/AccountService.cjs.map +0 -1
  189. package/dist/services/AccountService.d.cts +0 -53
  190. package/dist/services/AccountService.d.cts.map +0 -1
  191. package/dist/services/AccountService.d.mts +0 -53
  192. package/dist/services/AccountService.d.mts.map +0 -1
  193. package/dist/services/AccountService.mjs +0 -309
  194. package/dist/services/AccountService.mjs.map +0 -1
  195. package/dist/services/DataLakeService.cjs +0 -219
  196. package/dist/services/DataLakeService.cjs.map +0 -1
  197. package/dist/services/DataLakeService.d.cts +0 -49
  198. package/dist/services/DataLakeService.d.cts.map +0 -1
  199. package/dist/services/DataLakeService.d.mts +0 -49
  200. package/dist/services/DataLakeService.d.mts.map +0 -1
  201. package/dist/services/DataLakeService.mjs +0 -215
  202. package/dist/services/DataLakeService.mjs.map +0 -1
  203. package/dist/services/DepositService.cjs +0 -96
  204. package/dist/services/DepositService.cjs.map +0 -1
  205. package/dist/services/DepositService.d.cts +0 -37
  206. package/dist/services/DepositService.d.cts.map +0 -1
  207. package/dist/services/DepositService.d.mts +0 -37
  208. package/dist/services/DepositService.d.mts.map +0 -1
  209. package/dist/services/DepositService.mjs +0 -92
  210. package/dist/services/DepositService.mjs.map +0 -1
  211. package/dist/services/EligibilityService.cjs +0 -156
  212. package/dist/services/EligibilityService.cjs.map +0 -1
  213. package/dist/services/EligibilityService.d.cts +0 -48
  214. package/dist/services/EligibilityService.d.cts.map +0 -1
  215. package/dist/services/EligibilityService.d.mts +0 -48
  216. package/dist/services/EligibilityService.d.mts.map +0 -1
  217. package/dist/services/EligibilityService.mjs +0 -152
  218. package/dist/services/EligibilityService.mjs.map +0 -1
  219. package/dist/services/FeatureFlagConfigurationService.cjs +0 -258
  220. package/dist/services/FeatureFlagConfigurationService.cjs.map +0 -1
  221. package/dist/services/FeatureFlagConfigurationService.d.cts +0 -100
  222. package/dist/services/FeatureFlagConfigurationService.d.cts.map +0 -1
  223. package/dist/services/FeatureFlagConfigurationService.d.mts +0 -100
  224. package/dist/services/FeatureFlagConfigurationService.d.mts.map +0 -1
  225. package/dist/services/FeatureFlagConfigurationService.mjs +0 -254
  226. package/dist/services/FeatureFlagConfigurationService.mjs.map +0 -1
  227. package/dist/services/MarketDataService.cjs +0 -875
  228. package/dist/services/MarketDataService.cjs.map +0 -1
  229. package/dist/services/MarketDataService.d.cts +0 -289
  230. package/dist/services/MarketDataService.d.cts.map +0 -1
  231. package/dist/services/MarketDataService.d.mts +0 -289
  232. package/dist/services/MarketDataService.d.mts.map +0 -1
  233. package/dist/services/MarketDataService.mjs +0 -871
  234. package/dist/services/MarketDataService.mjs.map +0 -1
  235. package/dist/services/RewardsIntegrationService.cjs +0 -94
  236. package/dist/services/RewardsIntegrationService.cjs.map +0 -1
  237. package/dist/services/RewardsIntegrationService.d.cts +0 -30
  238. package/dist/services/RewardsIntegrationService.d.cts.map +0 -1
  239. package/dist/services/RewardsIntegrationService.d.mts +0 -30
  240. package/dist/services/RewardsIntegrationService.d.mts.map +0 -1
  241. package/dist/services/RewardsIntegrationService.mjs +0 -90
  242. package/dist/services/RewardsIntegrationService.mjs.map +0 -1
  243. package/dist/services/ServiceContext.cjs +0 -3
  244. package/dist/services/ServiceContext.cjs.map +0 -1
  245. package/dist/services/ServiceContext.d.cts +0 -110
  246. package/dist/services/ServiceContext.d.cts.map +0 -1
  247. package/dist/services/ServiceContext.d.mts +0 -110
  248. package/dist/services/ServiceContext.d.mts.map +0 -1
  249. package/dist/services/ServiceContext.mjs +0 -2
  250. package/dist/services/ServiceContext.mjs.map +0 -1
  251. package/dist/services/TradingService.cjs +0 -1481
  252. package/dist/services/TradingService.cjs.map +0 -1
  253. package/dist/services/TradingService.d.cts +0 -308
  254. package/dist/services/TradingService.d.cts.map +0 -1
  255. package/dist/services/TradingService.d.mts +0 -308
  256. package/dist/services/TradingService.d.mts.map +0 -1
  257. package/dist/services/TradingService.mjs +0 -1477
  258. package/dist/services/TradingService.mjs.map +0 -1
  259. package/dist/services/index.cjs +0 -26
  260. package/dist/services/index.cjs.map +0 -1
  261. package/dist/services/index.d.cts +0 -11
  262. package/dist/services/index.d.cts.map +0 -1
  263. package/dist/services/index.d.mts +0 -11
  264. package/dist/services/index.d.mts.map +0 -1
  265. package/dist/services/index.mjs +0 -10
  266. package/dist/services/index.mjs.map +0 -1
  267. package/dist/services/utils.cjs +0 -16
  268. package/dist/services/utils.cjs.map +0 -1
  269. package/dist/services/utils.d.cts +0 -8
  270. package/dist/services/utils.d.cts.map +0 -1
  271. package/dist/services/utils.d.mts +0 -8
  272. package/dist/services/utils.d.mts.map +0 -1
  273. package/dist/services/utils.mjs +0 -12
  274. package/dist/services/utils.mjs.map +0 -1
  275. package/dist/types/chart.cjs +0 -42
  276. package/dist/types/chart.cjs.map +0 -1
  277. package/dist/types/chart.d.cts +0 -62
  278. package/dist/types/chart.d.cts.map +0 -1
  279. package/dist/types/chart.d.mts +0 -62
  280. package/dist/types/chart.d.mts.map +0 -1
  281. package/dist/types/chart.mjs +0 -39
  282. package/dist/types/chart.mjs.map +0 -1
  283. package/dist/types/hyperliquid-types.cjs +0 -3
  284. package/dist/types/hyperliquid-types.cjs.map +0 -1
  285. package/dist/types/hyperliquid-types.d.cts +0 -52
  286. package/dist/types/hyperliquid-types.d.cts.map +0 -1
  287. package/dist/types/hyperliquid-types.d.mts +0 -52
  288. package/dist/types/hyperliquid-types.d.mts.map +0 -1
  289. package/dist/types/hyperliquid-types.mjs +0 -2
  290. package/dist/types/hyperliquid-types.mjs.map +0 -1
  291. package/dist/types/index.cjs +0 -96
  292. package/dist/types/index.cjs.map +0 -1
  293. package/dist/types/index.d.cts +0 -1153
  294. package/dist/types/index.d.cts.map +0 -1
  295. package/dist/types/index.d.mts +0 -1153
  296. package/dist/types/index.d.mts.map +0 -1
  297. package/dist/types/index.mjs +0 -79
  298. package/dist/types/index.mjs.map +0 -1
  299. package/dist/types/transactionTypes.cjs +0 -28
  300. package/dist/types/transactionTypes.cjs.map +0 -1
  301. package/dist/types/transactionTypes.d.cts +0 -64
  302. package/dist/types/transactionTypes.d.cts.map +0 -1
  303. package/dist/types/transactionTypes.d.mts +0 -64
  304. package/dist/types/transactionTypes.d.mts.map +0 -1
  305. package/dist/types/transactionTypes.mjs +0 -23
  306. package/dist/types/transactionTypes.mjs.map +0 -1
  307. package/dist/utils/accountUtils.cjs +0 -65
  308. package/dist/utils/accountUtils.cjs.map +0 -1
  309. package/dist/utils/accountUtils.d.cts +0 -26
  310. package/dist/utils/accountUtils.d.cts.map +0 -1
  311. package/dist/utils/accountUtils.d.mts +0 -26
  312. package/dist/utils/accountUtils.d.mts.map +0 -1
  313. package/dist/utils/accountUtils.mjs +0 -61
  314. package/dist/utils/accountUtils.mjs.map +0 -1
  315. package/dist/utils/amountConversion.cjs +0 -61
  316. package/dist/utils/amountConversion.cjs.map +0 -1
  317. package/dist/utils/amountConversion.d.cts +0 -16
  318. package/dist/utils/amountConversion.d.cts.map +0 -1
  319. package/dist/utils/amountConversion.d.mts +0 -16
  320. package/dist/utils/amountConversion.d.mts.map +0 -1
  321. package/dist/utils/amountConversion.mjs +0 -54
  322. package/dist/utils/amountConversion.mjs.map +0 -1
  323. package/dist/utils/chartUtils.cjs +0 -98
  324. package/dist/utils/chartUtils.cjs.map +0 -1
  325. package/dist/utils/chartUtils.d.cts +0 -14
  326. package/dist/utils/chartUtils.d.cts.map +0 -1
  327. package/dist/utils/chartUtils.d.mts +0 -14
  328. package/dist/utils/chartUtils.d.mts.map +0 -1
  329. package/dist/utils/chartUtils.mjs +0 -94
  330. package/dist/utils/chartUtils.mjs.map +0 -1
  331. package/dist/utils/errorUtils.cjs +0 -22
  332. package/dist/utils/errorUtils.cjs.map +0 -1
  333. package/dist/utils/errorUtils.d.cts +0 -13
  334. package/dist/utils/errorUtils.d.cts.map +0 -1
  335. package/dist/utils/errorUtils.d.mts +0 -13
  336. package/dist/utils/errorUtils.d.mts.map +0 -1
  337. package/dist/utils/errorUtils.mjs +0 -18
  338. package/dist/utils/errorUtils.mjs.map +0 -1
  339. package/dist/utils/formatUtils.cjs +0 -987
  340. package/dist/utils/formatUtils.cjs.map +0 -1
  341. package/dist/utils/formatUtils.d.cts +0 -387
  342. package/dist/utils/formatUtils.d.cts.map +0 -1
  343. package/dist/utils/formatUtils.d.mts +0 -387
  344. package/dist/utils/formatUtils.d.mts.map +0 -1
  345. package/dist/utils/formatUtils.mjs +0 -966
  346. package/dist/utils/formatUtils.mjs.map +0 -1
  347. package/dist/utils/hyperLiquidAdapter.cjs +0 -454
  348. package/dist/utils/hyperLiquidAdapter.cjs.map +0 -1
  349. package/dist/utils/hyperLiquidAdapter.d.cts +0 -158
  350. package/dist/utils/hyperLiquidAdapter.d.cts.map +0 -1
  351. package/dist/utils/hyperLiquidAdapter.d.mts +0 -158
  352. package/dist/utils/hyperLiquidAdapter.d.mts.map +0 -1
  353. package/dist/utils/hyperLiquidAdapter.mjs +0 -439
  354. package/dist/utils/hyperLiquidAdapter.mjs.map +0 -1
  355. package/dist/utils/hyperLiquidOrderBookProcessor.cjs +0 -89
  356. package/dist/utils/hyperLiquidOrderBookProcessor.cjs.map +0 -1
  357. package/dist/utils/hyperLiquidOrderBookProcessor.d.cts +0 -58
  358. package/dist/utils/hyperLiquidOrderBookProcessor.d.cts.map +0 -1
  359. package/dist/utils/hyperLiquidOrderBookProcessor.d.mts +0 -58
  360. package/dist/utils/hyperLiquidOrderBookProcessor.d.mts.map +0 -1
  361. package/dist/utils/hyperLiquidOrderBookProcessor.mjs +0 -84
  362. package/dist/utils/hyperLiquidOrderBookProcessor.mjs.map +0 -1
  363. package/dist/utils/hyperLiquidValidation.cjs +0 -426
  364. package/dist/utils/hyperLiquidValidation.cjs.map +0 -1
  365. package/dist/utils/hyperLiquidValidation.d.cts +0 -143
  366. package/dist/utils/hyperLiquidValidation.d.cts.map +0 -1
  367. package/dist/utils/hyperLiquidValidation.d.mts +0 -143
  368. package/dist/utils/hyperLiquidValidation.d.mts.map +0 -1
  369. package/dist/utils/hyperLiquidValidation.mjs +0 -413
  370. package/dist/utils/hyperLiquidValidation.mjs.map +0 -1
  371. package/dist/utils/idUtils.cjs +0 -50
  372. package/dist/utils/idUtils.cjs.map +0 -1
  373. package/dist/utils/idUtils.d.cts +0 -38
  374. package/dist/utils/idUtils.d.cts.map +0 -1
  375. package/dist/utils/idUtils.d.mts +0 -38
  376. package/dist/utils/idUtils.d.mts.map +0 -1
  377. package/dist/utils/idUtils.mjs +0 -42
  378. package/dist/utils/idUtils.mjs.map +0 -1
  379. package/dist/utils/marginUtils.cjs +0 -137
  380. package/dist/utils/marginUtils.cjs.map +0 -1
  381. package/dist/utils/marginUtils.d.cts +0 -64
  382. package/dist/utils/marginUtils.d.cts.map +0 -1
  383. package/dist/utils/marginUtils.d.mts +0 -64
  384. package/dist/utils/marginUtils.d.mts.map +0 -1
  385. package/dist/utils/marginUtils.mjs +0 -131
  386. package/dist/utils/marginUtils.mjs.map +0 -1
  387. package/dist/utils/marketDataTransform.cjs +0 -227
  388. package/dist/utils/marketDataTransform.cjs.map +0 -1
  389. package/dist/utils/marketDataTransform.d.cts +0 -45
  390. package/dist/utils/marketDataTransform.d.cts.map +0 -1
  391. package/dist/utils/marketDataTransform.d.mts +0 -45
  392. package/dist/utils/marketDataTransform.d.mts.map +0 -1
  393. package/dist/utils/marketDataTransform.mjs +0 -220
  394. package/dist/utils/marketDataTransform.mjs.map +0 -1
  395. package/dist/utils/marketUtils.cjs +0 -420
  396. package/dist/utils/marketUtils.cjs.map +0 -1
  397. package/dist/utils/marketUtils.d.cts +0 -227
  398. package/dist/utils/marketUtils.d.cts.map +0 -1
  399. package/dist/utils/marketUtils.d.mts +0 -227
  400. package/dist/utils/marketUtils.d.mts.map +0 -1
  401. package/dist/utils/marketUtils.mjs +0 -404
  402. package/dist/utils/marketUtils.mjs.map +0 -1
  403. package/dist/utils/orderBookGrouping.cjs +0 -151
  404. package/dist/utils/orderBookGrouping.cjs.map +0 -1
  405. package/dist/utils/orderBookGrouping.d.cts +0 -76
  406. package/dist/utils/orderBookGrouping.d.cts.map +0 -1
  407. package/dist/utils/orderBookGrouping.d.mts +0 -76
  408. package/dist/utils/orderBookGrouping.d.mts.map +0 -1
  409. package/dist/utils/orderBookGrouping.mjs +0 -143
  410. package/dist/utils/orderBookGrouping.mjs.map +0 -1
  411. package/dist/utils/orderCalculations.cjs +0 -283
  412. package/dist/utils/orderCalculations.cjs.map +0 -1
  413. package/dist/utils/orderCalculations.d.cts +0 -107
  414. package/dist/utils/orderCalculations.d.cts.map +0 -1
  415. package/dist/utils/orderCalculations.d.mts +0 -107
  416. package/dist/utils/orderCalculations.d.mts.map +0 -1
  417. package/dist/utils/orderCalculations.mjs +0 -274
  418. package/dist/utils/orderCalculations.mjs.map +0 -1
  419. package/dist/utils/orderUtils.cjs +0 -159
  420. package/dist/utils/orderUtils.cjs.map +0 -1
  421. package/dist/utils/orderUtils.d.cts +0 -66
  422. package/dist/utils/orderUtils.d.cts.map +0 -1
  423. package/dist/utils/orderUtils.d.mts +0 -66
  424. package/dist/utils/orderUtils.d.mts.map +0 -1
  425. package/dist/utils/orderUtils.mjs +0 -151
  426. package/dist/utils/orderUtils.mjs.map +0 -1
  427. package/dist/utils/pnlCalculations.cjs +0 -107
  428. package/dist/utils/pnlCalculations.cjs.map +0 -1
  429. package/dist/utils/pnlCalculations.d.cts +0 -79
  430. package/dist/utils/pnlCalculations.d.cts.map +0 -1
  431. package/dist/utils/pnlCalculations.d.mts +0 -79
  432. package/dist/utils/pnlCalculations.d.mts.map +0 -1
  433. package/dist/utils/pnlCalculations.mjs +0 -97
  434. package/dist/utils/pnlCalculations.mjs.map +0 -1
  435. package/dist/utils/positionCalculations.cjs +0 -176
  436. package/dist/utils/positionCalculations.cjs.map +0 -1
  437. package/dist/utils/positionCalculations.d.cts +0 -85
  438. package/dist/utils/positionCalculations.d.cts.map +0 -1
  439. package/dist/utils/positionCalculations.d.mts +0 -85
  440. package/dist/utils/positionCalculations.d.mts.map +0 -1
  441. package/dist/utils/positionCalculations.mjs +0 -165
  442. package/dist/utils/positionCalculations.mjs.map +0 -1
  443. package/dist/utils/sortMarkets.cjs +0 -88
  444. package/dist/utils/sortMarkets.cjs.map +0 -1
  445. package/dist/utils/sortMarkets.d.cts +0 -21
  446. package/dist/utils/sortMarkets.d.cts.map +0 -1
  447. package/dist/utils/sortMarkets.d.mts +0 -21
  448. package/dist/utils/sortMarkets.d.mts.map +0 -1
  449. package/dist/utils/sortMarkets.mjs +0 -84
  450. package/dist/utils/sortMarkets.mjs.map +0 -1
  451. package/dist/utils/standaloneInfoClient.cjs +0 -34
  452. package/dist/utils/standaloneInfoClient.cjs.map +0 -1
  453. package/dist/utils/standaloneInfoClient.d.cts +0 -31
  454. package/dist/utils/standaloneInfoClient.d.cts.map +0 -1
  455. package/dist/utils/standaloneInfoClient.d.mts +0 -31
  456. package/dist/utils/standaloneInfoClient.d.mts.map +0 -1
  457. package/dist/utils/standaloneInfoClient.mjs +0 -30
  458. package/dist/utils/standaloneInfoClient.mjs.map +0 -1
  459. package/dist/utils/stringParseUtils.cjs +0 -49
  460. package/dist/utils/stringParseUtils.cjs.map +0 -1
  461. package/dist/utils/stringParseUtils.d.cts +0 -35
  462. package/dist/utils/stringParseUtils.d.cts.map +0 -1
  463. package/dist/utils/stringParseUtils.d.mts +0 -35
  464. package/dist/utils/stringParseUtils.d.mts.map +0 -1
  465. package/dist/utils/stringParseUtils.mjs +0 -44
  466. package/dist/utils/stringParseUtils.mjs.map +0 -1
  467. package/dist/utils/time.cjs +0 -37
  468. package/dist/utils/time.cjs.map +0 -1
  469. package/dist/utils/time.d.cts +0 -17
  470. package/dist/utils/time.d.cts.map +0 -1
  471. package/dist/utils/time.d.mts +0 -17
  472. package/dist/utils/time.d.mts.map +0 -1
  473. package/dist/utils/time.mjs +0 -33
  474. package/dist/utils/time.mjs.map +0 -1
  475. package/dist/utils/tpslValidation.cjs +0 -505
  476. package/dist/utils/tpslValidation.cjs.map +0 -1
  477. package/dist/utils/tpslValidation.d.cts +0 -182
  478. package/dist/utils/tpslValidation.d.cts.map +0 -1
  479. package/dist/utils/tpslValidation.d.mts +0 -182
  480. package/dist/utils/tpslValidation.d.mts.map +0 -1
  481. package/dist/utils/tpslValidation.mjs +0 -482
  482. package/dist/utils/tpslValidation.mjs.map +0 -1
  483. package/dist/utils/transactionUtils.cjs +0 -36
  484. package/dist/utils/transactionUtils.cjs.map +0 -1
  485. package/dist/utils/transactionUtils.d.cts +0 -17
  486. package/dist/utils/transactionUtils.d.cts.map +0 -1
  487. package/dist/utils/transactionUtils.d.mts +0 -17
  488. package/dist/utils/transactionUtils.d.mts.map +0 -1
  489. package/dist/utils/transactionUtils.mjs +0 -32
  490. package/dist/utils/transactionUtils.mjs.map +0 -1
  491. package/dist/utils/wait.cjs +0 -12
  492. package/dist/utils/wait.cjs.map +0 -1
  493. package/dist/utils/wait.d.cts +0 -8
  494. package/dist/utils/wait.d.cts.map +0 -1
  495. package/dist/utils/wait.d.mts +0 -8
  496. package/dist/utils/wait.d.mts.map +0 -1
  497. package/dist/utils/wait.mjs +0 -8
  498. package/dist/utils/wait.mjs.map +0 -1
@@ -1,439 +0,0 @@
1
- import { isHexString } from "@metamask/utils";
2
- import { countSignificantFigures, roundToSignificantFigures } from "./formatUtils.mjs";
3
- import { HIP3_ASSET_ID_CONFIG } from "../constants/hyperLiquidConfig.mjs";
4
- import { DECIMAL_PRECISION_CONFIG } from "../constants/perpsConfig.mjs";
5
- /**
6
- * HyperLiquid SDK Adapter Utilities
7
- *
8
- * These functions transform between MetaMask Perps API types and HyperLiquid SDK types.
9
- * The SDK uses cryptic property names for efficiency, but our API uses descriptive names
10
- * to provide a consistent interface across different perps protocols.
11
- */
12
- /**
13
- * Transform MetaMask Perps API OrderParams to HyperLiquid SDK format
14
- *
15
- * @param order - MetaMask Perps order parameters
16
- * @param symbolToAssetId - Mapping from symbols to asset IDs
17
- * @returns HyperLiquid SDK-compatible order parameters
18
- */
19
- export function adaptOrderToSDK(order, symbolToAssetId) {
20
- const assetId = symbolToAssetId.get(order.symbol);
21
- if (assetId === undefined) {
22
- // Extract available DEX names from asset map for helpful error message
23
- const availableDexs = new Set();
24
- symbolToAssetId.forEach((_, symbol) => {
25
- if (symbol.includes(':')) {
26
- const dex = symbol.split(':')[0];
27
- availableDexs.add(dex);
28
- }
29
- });
30
- const dexHint = availableDexs.size > 0
31
- ? ` Available HIP-3 DEXs: ${Array.from(availableDexs).join(', ')}`
32
- : ' No HIP-3 DEXs currently available.';
33
- throw new Error(`Asset ${order.symbol} not found in asset mapping.${dexHint} Check console logs for "HyperLiquidProvider: Asset mapping built" to see available assets.`);
34
- }
35
- return {
36
- a: assetId,
37
- b: order.isBuy,
38
- p: order.price ?? '0',
39
- s: order.size,
40
- r: order.reduceOnly ?? false,
41
- t: order.orderType === 'limit'
42
- ? {
43
- limit: { tif: 'Gtc' },
44
- }
45
- : {
46
- limit: { tif: 'FrontendMarket' }, // Market orders use FrontendMarket
47
- },
48
- c: order.clientOrderId && isHexString(order.clientOrderId)
49
- ? order.clientOrderId
50
- : undefined,
51
- };
52
- }
53
- /**
54
- * Transform SDK AssetPosition to MetaMask Perps API format
55
- *
56
- * @param assetPosition - AssetPosition data from HyperLiquid SDK
57
- * @returns MetaMask Perps API position object
58
- */
59
- export function adaptPositionFromSDK(assetPosition) {
60
- const pos = assetPosition.position;
61
- return {
62
- symbol: pos.coin, // HyperLiquid API uses 'coin', we normalize to 'symbol'
63
- size: pos.szi,
64
- entryPrice: pos.entryPx,
65
- positionValue: pos.positionValue,
66
- unrealizedPnl: pos.unrealizedPnl,
67
- marginUsed: pos.marginUsed,
68
- leverage: {
69
- type: pos.leverage.type,
70
- value: pos.leverage.value,
71
- rawUsd: pos.leverage.type === 'isolated' ? pos.leverage.rawUsd : undefined,
72
- },
73
- liquidationPrice: pos.liquidationPx,
74
- maxLeverage: pos.maxLeverage,
75
- returnOnEquity: pos.returnOnEquity,
76
- cumulativeFunding: pos.cumFunding,
77
- takeProfitCount: 0, // Default value, will be updated by provider logic
78
- stopLossCount: 0, // Default value, will be updated by provider logic
79
- };
80
- }
81
- /**
82
- * Transform HyperLiquid SDK order to MetaMask Perps API format
83
- * Handles both REST API responses (FrontendOrder) and WebSocket data formats
84
- *
85
- * @param rawOrder - Raw order data from HyperLiquid SDK (frontendOpenOrders or webData2)
86
- * @param position - Optional position for size calculation on position TP/SL orders
87
- * @returns MetaMask Perps API order object
88
- */
89
- export function adaptOrderFromSDK(rawOrder, position) {
90
- // Extract basic fields with appropriate conversions
91
- const orderId = rawOrder.oid.toString();
92
- const symbol = rawOrder.coin;
93
- // Convert side: HyperLiquid uses 'B' for Buy and 'A' for Ask (Sell)
94
- const side = rawOrder.side === 'B' ? 'buy' : 'sell';
95
- // Get detailed order type from API
96
- const detailedOrderType = rawOrder.orderType;
97
- // Determine if this is a trigger order (TP/SL)
98
- const { isTrigger } = rawOrder;
99
- const { reduceOnly } = rawOrder;
100
- // Determine basic order type
101
- let orderType = 'market';
102
- if (detailedOrderType.toLowerCase().includes('limit') || rawOrder.limitPx) {
103
- orderType = 'limit';
104
- }
105
- // For trigger orders (TP/SL), use triggerPx as the price
106
- const price = rawOrder.limitPx ?? rawOrder.triggerPx ?? '0';
107
- // Sizes
108
- let size = rawOrder.sz;
109
- let originalSize = rawOrder.origSz ?? size;
110
- // Calculate filled and remaining size
111
- let currentSize = parseFloat(size);
112
- let origSize = parseFloat(originalSize);
113
- if (rawOrder.isPositionTpsl && origSize === 0 && position) {
114
- const absPositionSize = Math.abs(parseFloat(position.size));
115
- currentSize = absPositionSize;
116
- origSize = absPositionSize;
117
- size = absPositionSize.toString();
118
- originalSize = absPositionSize.toString();
119
- }
120
- const filledSize = origSize - currentSize;
121
- // Check for TP/SL in child orders (REST API feature)
122
- let takeProfitPrice;
123
- let stopLossPrice;
124
- let takeProfitOrderId;
125
- let stopLossOrderId;
126
- // TODO: We assume that there can only be 1 TP and 1 SL as children but there can be several TPSLs as children
127
- // We need to handle this properly in the future
128
- if (rawOrder.children && rawOrder.children.length > 0) {
129
- rawOrder.children.forEach((childUnknown) => {
130
- const child = childUnknown;
131
- if (child.isTrigger && child.orderType) {
132
- if (child.orderType.includes('Take Profit')) {
133
- takeProfitPrice = child.triggerPx ?? child.limitPx;
134
- takeProfitOrderId = child.oid.toString();
135
- }
136
- else if (child.orderType.includes('Stop')) {
137
- stopLossPrice = child.triggerPx ?? child.limitPx;
138
- stopLossOrderId = child.oid.toString();
139
- }
140
- }
141
- });
142
- }
143
- // Build the order object
144
- const order = {
145
- orderId,
146
- symbol,
147
- side,
148
- orderType,
149
- size,
150
- originalSize,
151
- price,
152
- filledSize: filledSize.toString(),
153
- remainingSize: size,
154
- status: 'open', // All orders from frontendOpenOrders/webData2 are open
155
- timestamp: rawOrder.timestamp,
156
- detailedOrderType,
157
- isTrigger,
158
- reduceOnly,
159
- };
160
- // Add optional fields if they exist
161
- if (takeProfitPrice) {
162
- order.takeProfitPrice = takeProfitPrice;
163
- order.takeProfitOrderId = takeProfitOrderId;
164
- }
165
- if (stopLossPrice) {
166
- order.stopLossPrice = stopLossPrice;
167
- order.stopLossOrderId = stopLossOrderId;
168
- }
169
- // Store trigger condition price for trigger orders (used for TP/SL display)
170
- if (rawOrder.triggerPx) {
171
- order.triggerPrice = rawOrder.triggerPx;
172
- }
173
- return order;
174
- }
175
- /**
176
- * Transform SDK market info to MetaMask Perps API format
177
- *
178
- * @param sdkMarket - Market metadata from HyperLiquid SDK
179
- * @returns MetaMask Perps API market info object
180
- */
181
- export function adaptMarketFromSDK(sdkMarket) {
182
- return {
183
- name: sdkMarket.name,
184
- szDecimals: sdkMarket.szDecimals,
185
- maxLeverage: sdkMarket.maxLeverage,
186
- marginTableId: sdkMarket.marginTableId,
187
- onlyIsolated: sdkMarket.onlyIsolated,
188
- isDelisted: sdkMarket.isDelisted,
189
- };
190
- }
191
- /**
192
- * Transform SDK clearinghouse state to MetaMask Perps API AccountState
193
- *
194
- * @param perpsState - ClearinghouseState from HyperLiquid SDK
195
- * @param spotState - SpotClearinghouseState from HyperLiquid SDK (optional)
196
- * @returns MetaMask Perps API account state object
197
- */
198
- export function adaptAccountStateFromSDK(perpsState, spotState) {
199
- // Calculate total unrealized PnL from all positions
200
- const { totalUnrealizedPnl, weightedReturnOnEquity } = perpsState.assetPositions.reduce((acc, assetPos) => {
201
- const unrealizedPnl = parseFloat(assetPos.position.unrealizedPnl || '0');
202
- const marginUsed = parseFloat(assetPos.position.marginUsed || '0');
203
- const returnOnEquity = parseFloat(assetPos.position.returnOnEquity || '0');
204
- acc.totalUnrealizedPnl += unrealizedPnl;
205
- acc.weightedReturnOnEquity += returnOnEquity * marginUsed;
206
- return acc;
207
- }, {
208
- totalUnrealizedPnl: 0,
209
- weightedReturnOnEquity: 0,
210
- });
211
- const totalMarginUsed = parseFloat(perpsState.marginSummary.totalMarginUsed || '0');
212
- const totalReturnOnEquityPercentage = totalMarginUsed > 0
213
- ? ((weightedReturnOnEquity / totalMarginUsed) * 100).toFixed(1)
214
- : '0.0';
215
- // marginSummary.accountValue includes both cross and isolated margin positions
216
- const perpsBalance = parseFloat(perpsState.marginSummary.accountValue);
217
- // Get Spot balance (if available)
218
- let spotBalance = 0;
219
- if (spotState?.balances && Array.isArray(spotState.balances)) {
220
- spotBalance = spotState.balances.reduce((sum, balance) => sum + parseFloat(balance.total ?? '0'), 0);
221
- }
222
- // Calculate total account value (Spot + Perps)
223
- const totalBalance = (spotBalance + perpsBalance).toString();
224
- const accountState = {
225
- availableBalance: perpsState.withdrawable || '0',
226
- totalBalance: totalBalance || '0',
227
- marginUsed: perpsState.marginSummary.totalMarginUsed || '0',
228
- unrealizedPnl: totalUnrealizedPnl.toString() || '0',
229
- returnOnEquity: totalReturnOnEquityPercentage || '0',
230
- };
231
- return accountState;
232
- }
233
- /**
234
- * Build asset symbol to ID mapping from HyperLiquid meta response
235
- * The API returns asset names already properly formatted (prefixed for HIP-3, unprefixed for main DEX)
236
- *
237
- * @param params - Configuration for asset mapping
238
- * @param params.metaUniverse - Array of asset metadata from HyperLiquid
239
- * @param params.dex - DEX name (kept for backward compatibility, but not used in mapping)
240
- * @param params.perpDexIndex - DEX index from perpDexs() array (required for HIP-3)
241
- * @returns Maps for bidirectional symbol/ID lookup
242
- *
243
- * @example Main DEX
244
- * buildAssetMapping({ metaUniverse: [{ name: "BTC" }, { name: "ETH" }], perpDexIndex: 0 })
245
- * // Returns: Map<"BTC", 0>, Map<"ETH", 1>
246
- *
247
- * @example HIP-3 DEX
248
- * buildAssetMapping({ metaUniverse: [{ name: "xyz:XYZ100" }, { name: "xyz:XYZ200" }], dex: "xyz", perpDexIndex: 1 })
249
- * // Returns: Map<"xyz:XYZ100", 110000>, Map<"xyz:XYZ200", 110001>
250
- * // Note: Uses global HIP-3 asset IDs via calculateHip3AssetId()
251
- */
252
- export function buildAssetMapping(params) {
253
- const { metaUniverse, perpDexIndex } = params;
254
- const symbolToAssetId = new Map();
255
- const assetIdToSymbol = new Map();
256
- metaUniverse.forEach((asset, index) => {
257
- // Calculate global asset ID using HIP-3 formula
258
- // Main DEX (perpDexIndex=0): returns index directly (0, 1, 2, ...)
259
- // HIP-3 DEX (perpDexIndex>0): returns 100000 + perpDexIndex*10000 + index
260
- const assetId = calculateHip3AssetId(perpDexIndex, index);
261
- // HyperLiquid API returns asset names already correctly formatted:
262
- // - Main DEX: asset.name = "BTC", "ETH", etc. (no prefix)
263
- // - HIP-3 DEX: asset.name = "xyz:XYZ100", "xyz:XYZ200", etc. (already prefixed!)
264
- // We use asset.name as-is - no manual prefixing needed
265
- symbolToAssetId.set(asset.name, assetId);
266
- assetIdToSymbol.set(assetId, asset.name);
267
- });
268
- return { symbolToAssetId, assetIdToSymbol };
269
- }
270
- /**
271
- * Format price according to HyperLiquid validation rules.
272
- * - Max 5 significant figures (uses MAX_SIGNIFICANT_FIGURES from config)
273
- * - Max (MAX_PRICE_DECIMALS - szDecimals) decimal places for perps
274
- * - Integer prices always allowed
275
- *
276
- * @param params - Price formatting parameters
277
- * @param params.price - The price value to format
278
- * @param params.szDecimals - The size decimals for the asset
279
- * @returns Properly formatted price string
280
- */
281
- export function formatHyperLiquidPrice(params) {
282
- const { price, szDecimals } = params;
283
- const priceNum = typeof price === 'string' ? parseFloat(price) : price;
284
- // Integer prices are always allowed
285
- if (Number.isInteger(priceNum)) {
286
- return priceNum.toString();
287
- }
288
- // Calculate max decimal places allowed
289
- const maxDecimalPlaces = DECIMAL_PRECISION_CONFIG.MaxPriceDecimals - szDecimals;
290
- // Format with proper decimal places
291
- let formattedPrice = priceNum.toFixed(maxDecimalPlaces);
292
- // Remove trailing zeros
293
- formattedPrice = parseFloat(formattedPrice).toString();
294
- // Check and enforce max significant figures using shared utility
295
- const significantDigits = countSignificantFigures(formattedPrice);
296
- if (significantDigits > DECIMAL_PRECISION_CONFIG.MaxSignificantFigures) {
297
- // Use shared utility to round to max significant figures
298
- formattedPrice = roundToSignificantFigures(formattedPrice);
299
- }
300
- return formattedPrice;
301
- }
302
- /**
303
- * Format order size with asset-specific decimal precision.
304
- *
305
- * @param params - Size formatting parameters
306
- * @param params.size - The size value to format
307
- * @param params.szDecimals - The size decimals for the asset
308
- * @returns Properly formatted size string with trailing zeros removed
309
- */
310
- export function formatHyperLiquidSize(params) {
311
- const { size, szDecimals } = params;
312
- const sizeNum = typeof size === 'string' ? parseFloat(size) : size;
313
- if (isNaN(sizeNum)) {
314
- return '0';
315
- }
316
- // Use asset-specific decimal precision and remove trailing zeros
317
- const formatted = sizeNum.toFixed(szDecimals);
318
- // Only strip trailing zeros after decimal point, not from integers
319
- // e.g., "10.000" -> "10", "10.5000" -> "10.5", but "10" stays "10"
320
- if (!formatted.includes('.')) {
321
- return formatted; // Integer, keep as-is
322
- }
323
- // Has decimal, strip trailing zeros and decimal if needed
324
- return formatted.replace(/\.?0+$/u, '');
325
- }
326
- /**
327
- * Calculate position size for a given USD value and leverage.
328
- *
329
- * @param params - Position size calculation parameters
330
- * @param params.usdValue - The USD value to invest
331
- * @param params.leverage - The leverage multiplier
332
- * @param params.assetPrice - The current asset price
333
- * @returns Raw position size (before formatting)
334
- */
335
- export function calculatePositionSize(params) {
336
- const { usdValue, leverage, assetPrice } = params;
337
- return (usdValue * leverage) / assetPrice;
338
- }
339
- /**
340
- * Calculate HIP-3 asset ID from perpDexIndex and market index
341
- * Formula: BASE_ASSET_ID + (perpDexIndex * DEX_MULTIPLIER) + index_in_meta
342
- *
343
- * @param perpDexIndex - DEX index from perpDexs() array (0=main, 1=xyz, 2=abc, etc.)
344
- * @param indexInMeta - Market index within the DEX's meta universe
345
- * @returns Global asset ID for HIP-3 order routing
346
- *
347
- * @example Main DEX
348
- * calculateHip3AssetId(0, 5) // Returns: 5 (main DEX uses index directly)
349
- *
350
- * @example xyz DEX
351
- * calculateHip3AssetId(1, 0) // Returns: 110000 (xyz:XYZ100)
352
- */
353
- export function calculateHip3AssetId(perpDexIndex, indexInMeta) {
354
- if (perpDexIndex === 0) {
355
- return indexInMeta;
356
- }
357
- return (HIP3_ASSET_ID_CONFIG.BaseAssetId +
358
- perpDexIndex * HIP3_ASSET_ID_CONFIG.DexMultiplier +
359
- indexInMeta);
360
- }
361
- /**
362
- * Parse asset name to extract DEX and symbol
363
- * HIP-3 assets are prefixed with "dex:" (e.g., "xyz:XYZ100")
364
- * Main DEX assets have no prefix (e.g., "BTC")
365
- *
366
- * @param assetName - Asset name from HyperLiquid API
367
- * @returns Object with dex (null for main DEX) and symbol
368
- *
369
- * @example Main DEX
370
- * parseAssetName("BTC") // Returns: { dex: null, symbol: "BTC" }
371
- *
372
- * @example HIP-3 DEX
373
- * parseAssetName("xyz:XYZ100") // Returns: { dex: "xyz", symbol: "XYZ100" }
374
- */
375
- export function parseAssetName(assetName) {
376
- const colonIndex = assetName.indexOf(':');
377
- if (colonIndex === -1) {
378
- return { dex: null, symbol: assetName };
379
- }
380
- return {
381
- dex: assetName.substring(0, colonIndex),
382
- symbol: assetName.substring(colonIndex + 1),
383
- };
384
- }
385
- /**
386
- * Transform raw HyperLiquid ledger updates to UserHistoryItem format
387
- * Filters for deposits, withdrawals, and internal transfers only, extracting amount and asset information
388
- *
389
- * @param rawLedgerUpdates - Array of raw ledger updates from HyperLiquid SDK
390
- * @returns Array of UserHistoryItem objects
391
- */
392
- export function adaptHyperLiquidLedgerUpdateToUserHistoryItem(rawLedgerUpdates) {
393
- return (rawLedgerUpdates || [])
394
- .filter((update) => {
395
- if (update.delta.type === 'deposit') {
396
- return true;
397
- }
398
- if (update.delta.type === 'withdraw') {
399
- return true;
400
- }
401
- if (update.delta.type === 'internalTransfer') {
402
- const usdc = Number.parseFloat(update.delta.usdc ?? '0');
403
- if (Number.isNaN(usdc)) {
404
- return false;
405
- }
406
- return usdc > 0;
407
- }
408
- return false;
409
- })
410
- .map((update) => {
411
- // Extract amount and asset based on delta type
412
- let amount = '0';
413
- let asset = 'USDC';
414
- if ('usdc' in update.delta && update.delta.usdc) {
415
- amount = Math.abs(parseFloat(update.delta.usdc)).toString();
416
- }
417
- if ('coin' in update.delta && typeof update.delta.coin === 'string') {
418
- asset = update.delta.coin;
419
- }
420
- return {
421
- id: `history-${update.hash}`,
422
- timestamp: update.time,
423
- amount,
424
- asset,
425
- txHash: update.hash,
426
- status: 'completed',
427
- type: update.delta.type === 'withdraw' ? 'withdrawal' : 'deposit',
428
- details: {
429
- source: '',
430
- bridgeContract: undefined,
431
- recipient: undefined,
432
- blockNumber: undefined,
433
- chainId: undefined,
434
- synthetic: undefined,
435
- },
436
- };
437
- });
438
- }
439
- //# sourceMappingURL=hyperLiquidAdapter.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hyperLiquidAdapter.mjs","sourceRoot":"","sources":["../../src/utils/hyperLiquidAdapter.ts"],"names":[],"mappings":"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","sourcesContent":["import { isHexString } from '@metamask/utils';\nimport type { Hex } from '@metamask/utils';\n\nimport {\n countSignificantFigures,\n roundToSignificantFigures,\n} from './formatUtils';\nimport { HIP3_ASSET_ID_CONFIG } from '../constants/hyperLiquidConfig';\nimport { DECIMAL_PRECISION_CONFIG } from '../constants/perpsConfig';\nimport type {\n AccountState,\n MarketInfo,\n Order,\n OrderParams as PerpsOrderParams,\n Position,\n UserHistoryItem,\n RawHyperLiquidLedgerUpdate,\n} from '../types';\nimport type {\n AssetPosition,\n FrontendOrder,\n ClearinghouseStateResponse,\n SpotClearinghouseStateResponse,\n MetaResponse,\n SDKOrderParams,\n} from '../types/hyperliquid-types';\n\n/**\n * HyperLiquid SDK Adapter Utilities\n *\n * These functions transform between MetaMask Perps API types and HyperLiquid SDK types.\n * The SDK uses cryptic property names for efficiency, but our API uses descriptive names\n * to provide a consistent interface across different perps protocols.\n */\n\n/**\n * Transform MetaMask Perps API OrderParams to HyperLiquid SDK format\n *\n * @param order - MetaMask Perps order parameters\n * @param symbolToAssetId - Mapping from symbols to asset IDs\n * @returns HyperLiquid SDK-compatible order parameters\n */\nexport function adaptOrderToSDK(\n order: PerpsOrderParams,\n symbolToAssetId: Map<string, number>,\n): SDKOrderParams {\n const assetId = symbolToAssetId.get(order.symbol);\n if (assetId === undefined) {\n // Extract available DEX names from asset map for helpful error message\n const availableDexs = new Set<string>();\n symbolToAssetId.forEach((_, symbol) => {\n if (symbol.includes(':')) {\n const dex = symbol.split(':')[0];\n availableDexs.add(dex);\n }\n });\n\n const dexHint =\n availableDexs.size > 0\n ? ` Available HIP-3 DEXs: ${Array.from(availableDexs).join(', ')}`\n : ' No HIP-3 DEXs currently available.';\n\n throw new Error(\n `Asset ${order.symbol} not found in asset mapping.${dexHint} Check console logs for \"HyperLiquidProvider: Asset mapping built\" to see available assets.`,\n );\n }\n\n return {\n a: assetId,\n b: order.isBuy,\n p: order.price ?? '0',\n s: order.size,\n r: order.reduceOnly ?? false,\n t:\n order.orderType === 'limit'\n ? {\n limit: { tif: 'Gtc' },\n }\n : {\n limit: { tif: 'FrontendMarket' }, // Market orders use FrontendMarket\n },\n c:\n order.clientOrderId && isHexString(order.clientOrderId)\n ? (order.clientOrderId as Hex)\n : undefined,\n };\n}\n\n/**\n * Transform SDK AssetPosition to MetaMask Perps API format\n *\n * @param assetPosition - AssetPosition data from HyperLiquid SDK\n * @returns MetaMask Perps API position object\n */\nexport function adaptPositionFromSDK(assetPosition: AssetPosition): Position {\n const pos = assetPosition.position;\n return {\n symbol: pos.coin, // HyperLiquid API uses 'coin', we normalize to 'symbol'\n size: pos.szi,\n entryPrice: pos.entryPx,\n positionValue: pos.positionValue,\n unrealizedPnl: pos.unrealizedPnl,\n marginUsed: pos.marginUsed,\n leverage: {\n type: pos.leverage.type,\n value: pos.leverage.value,\n rawUsd:\n pos.leverage.type === 'isolated' ? pos.leverage.rawUsd : undefined,\n },\n liquidationPrice: pos.liquidationPx,\n maxLeverage: pos.maxLeverage,\n returnOnEquity: pos.returnOnEquity,\n cumulativeFunding: pos.cumFunding,\n takeProfitCount: 0, // Default value, will be updated by provider logic\n stopLossCount: 0, // Default value, will be updated by provider logic\n };\n}\n\n/**\n * Transform HyperLiquid SDK order to MetaMask Perps API format\n * Handles both REST API responses (FrontendOrder) and WebSocket data formats\n *\n * @param rawOrder - Raw order data from HyperLiquid SDK (frontendOpenOrders or webData2)\n * @param position - Optional position for size calculation on position TP/SL orders\n * @returns MetaMask Perps API order object\n */\nexport function adaptOrderFromSDK(\n rawOrder: FrontendOrder,\n position?: Position,\n): Order {\n // Extract basic fields with appropriate conversions\n const orderId = rawOrder.oid.toString();\n const symbol = rawOrder.coin;\n\n // Convert side: HyperLiquid uses 'B' for Buy and 'A' for Ask (Sell)\n const side: 'buy' | 'sell' = rawOrder.side === 'B' ? 'buy' : 'sell';\n\n // Get detailed order type from API\n const detailedOrderType = rawOrder.orderType;\n\n // Determine if this is a trigger order (TP/SL)\n const { isTrigger } = rawOrder;\n const { reduceOnly } = rawOrder;\n\n // Determine basic order type\n let orderType: 'limit' | 'market' = 'market';\n if (detailedOrderType.toLowerCase().includes('limit') || rawOrder.limitPx) {\n orderType = 'limit';\n }\n\n // For trigger orders (TP/SL), use triggerPx as the price\n const price = rawOrder.limitPx ?? rawOrder.triggerPx ?? '0';\n\n // Sizes\n let size = rawOrder.sz;\n let originalSize = rawOrder.origSz ?? size;\n\n // Calculate filled and remaining size\n let currentSize = parseFloat(size);\n let origSize = parseFloat(originalSize);\n\n if (rawOrder.isPositionTpsl && origSize === 0 && position) {\n const absPositionSize = Math.abs(parseFloat(position.size));\n currentSize = absPositionSize;\n origSize = absPositionSize;\n size = absPositionSize.toString();\n originalSize = absPositionSize.toString();\n }\n\n const filledSize = origSize - currentSize;\n\n // Check for TP/SL in child orders (REST API feature)\n let takeProfitPrice: string | undefined;\n let stopLossPrice: string | undefined;\n let takeProfitOrderId: string | undefined;\n let stopLossOrderId: string | undefined;\n\n // TODO: We assume that there can only be 1 TP and 1 SL as children but there can be several TPSLs as children\n // We need to handle this properly in the future\n if (rawOrder.children && rawOrder.children.length > 0) {\n rawOrder.children.forEach((childUnknown) => {\n const child = childUnknown as FrontendOrder;\n if (child.isTrigger && child.orderType) {\n if (child.orderType.includes('Take Profit')) {\n takeProfitPrice = child.triggerPx ?? child.limitPx;\n takeProfitOrderId = child.oid.toString();\n } else if (child.orderType.includes('Stop')) {\n stopLossPrice = child.triggerPx ?? child.limitPx;\n stopLossOrderId = child.oid.toString();\n }\n }\n });\n }\n\n // Build the order object\n const order: Order = {\n orderId,\n symbol,\n side,\n orderType,\n size,\n originalSize,\n price,\n filledSize: filledSize.toString(),\n remainingSize: size,\n status: 'open' as const, // All orders from frontendOpenOrders/webData2 are open\n timestamp: rawOrder.timestamp,\n detailedOrderType,\n isTrigger,\n reduceOnly,\n };\n\n // Add optional fields if they exist\n if (takeProfitPrice) {\n order.takeProfitPrice = takeProfitPrice;\n order.takeProfitOrderId = takeProfitOrderId;\n }\n if (stopLossPrice) {\n order.stopLossPrice = stopLossPrice;\n order.stopLossOrderId = stopLossOrderId;\n }\n // Store trigger condition price for trigger orders (used for TP/SL display)\n if (rawOrder.triggerPx) {\n order.triggerPrice = rawOrder.triggerPx;\n }\n\n return order;\n}\n\n/**\n * Transform SDK market info to MetaMask Perps API format\n *\n * @param sdkMarket - Market metadata from HyperLiquid SDK\n * @returns MetaMask Perps API market info object\n */\nexport function adaptMarketFromSDK(\n sdkMarket: MetaResponse['universe'][number],\n): MarketInfo {\n return {\n name: sdkMarket.name,\n szDecimals: sdkMarket.szDecimals,\n maxLeverage: sdkMarket.maxLeverage,\n marginTableId: sdkMarket.marginTableId,\n onlyIsolated: sdkMarket.onlyIsolated,\n isDelisted: sdkMarket.isDelisted,\n };\n}\n\n/**\n * Transform SDK clearinghouse state to MetaMask Perps API AccountState\n *\n * @param perpsState - ClearinghouseState from HyperLiquid SDK\n * @param spotState - SpotClearinghouseState from HyperLiquid SDK (optional)\n * @returns MetaMask Perps API account state object\n */\nexport function adaptAccountStateFromSDK(\n perpsState: ClearinghouseStateResponse,\n spotState?: SpotClearinghouseStateResponse | null,\n): AccountState {\n // Calculate total unrealized PnL from all positions\n const { totalUnrealizedPnl, weightedReturnOnEquity } =\n perpsState.assetPositions.reduce(\n (acc, assetPos: AssetPosition) => {\n const unrealizedPnl = parseFloat(\n assetPos.position.unrealizedPnl || '0',\n );\n const marginUsed = parseFloat(assetPos.position.marginUsed || '0');\n const returnOnEquity = parseFloat(\n assetPos.position.returnOnEquity || '0',\n );\n acc.totalUnrealizedPnl += unrealizedPnl;\n acc.weightedReturnOnEquity += returnOnEquity * marginUsed;\n return acc;\n },\n {\n totalUnrealizedPnl: 0,\n weightedReturnOnEquity: 0,\n },\n );\n const totalMarginUsed = parseFloat(\n perpsState.marginSummary.totalMarginUsed || '0',\n );\n const totalReturnOnEquityPercentage =\n totalMarginUsed > 0\n ? ((weightedReturnOnEquity / totalMarginUsed) * 100).toFixed(1)\n : '0.0';\n\n // marginSummary.accountValue includes both cross and isolated margin positions\n const perpsBalance = parseFloat(perpsState.marginSummary.accountValue);\n\n // Get Spot balance (if available)\n let spotBalance = 0;\n if (spotState?.balances && Array.isArray(spotState.balances)) {\n spotBalance = spotState.balances.reduce(\n (sum: number, balance: { total?: string }) =>\n sum + parseFloat(balance.total ?? '0'),\n 0,\n );\n }\n\n // Calculate total account value (Spot + Perps)\n const totalBalance = (spotBalance + perpsBalance).toString();\n\n const accountState: AccountState = {\n availableBalance: perpsState.withdrawable || '0',\n totalBalance: totalBalance || '0',\n marginUsed: perpsState.marginSummary.totalMarginUsed || '0',\n unrealizedPnl: totalUnrealizedPnl.toString() || '0',\n returnOnEquity: totalReturnOnEquityPercentage || '0',\n };\n\n return accountState;\n}\n\n/**\n * Build asset symbol to ID mapping from HyperLiquid meta response\n * The API returns asset names already properly formatted (prefixed for HIP-3, unprefixed for main DEX)\n *\n * @param params - Configuration for asset mapping\n * @param params.metaUniverse - Array of asset metadata from HyperLiquid\n * @param params.dex - DEX name (kept for backward compatibility, but not used in mapping)\n * @param params.perpDexIndex - DEX index from perpDexs() array (required for HIP-3)\n * @returns Maps for bidirectional symbol/ID lookup\n *\n * @example Main DEX\n * buildAssetMapping({ metaUniverse: [{ name: \"BTC\" }, { name: \"ETH\" }], perpDexIndex: 0 })\n * // Returns: Map<\"BTC\", 0>, Map<\"ETH\", 1>\n *\n * @example HIP-3 DEX\n * buildAssetMapping({ metaUniverse: [{ name: \"xyz:XYZ100\" }, { name: \"xyz:XYZ200\" }], dex: \"xyz\", perpDexIndex: 1 })\n * // Returns: Map<\"xyz:XYZ100\", 110000>, Map<\"xyz:XYZ200\", 110001>\n * // Note: Uses global HIP-3 asset IDs via calculateHip3AssetId()\n */\nexport function buildAssetMapping(params: {\n metaUniverse: MetaResponse['universe'];\n dex?: string | null;\n perpDexIndex: number;\n}): {\n symbolToAssetId: Map<string, number>;\n assetIdToSymbol: Map<number, string>;\n} {\n const { metaUniverse, perpDexIndex } = params;\n const symbolToAssetId = new Map<string, number>();\n const assetIdToSymbol = new Map<number, string>();\n\n metaUniverse.forEach((asset, index) => {\n // Calculate global asset ID using HIP-3 formula\n // Main DEX (perpDexIndex=0): returns index directly (0, 1, 2, ...)\n // HIP-3 DEX (perpDexIndex>0): returns 100000 + perpDexIndex*10000 + index\n const assetId = calculateHip3AssetId(perpDexIndex, index);\n\n // HyperLiquid API returns asset names already correctly formatted:\n // - Main DEX: asset.name = \"BTC\", \"ETH\", etc. (no prefix)\n // - HIP-3 DEX: asset.name = \"xyz:XYZ100\", \"xyz:XYZ200\", etc. (already prefixed!)\n // We use asset.name as-is - no manual prefixing needed\n symbolToAssetId.set(asset.name, assetId);\n assetIdToSymbol.set(assetId, asset.name);\n });\n\n return { symbolToAssetId, assetIdToSymbol };\n}\n\n/**\n * Format price according to HyperLiquid validation rules.\n * - Max 5 significant figures (uses MAX_SIGNIFICANT_FIGURES from config)\n * - Max (MAX_PRICE_DECIMALS - szDecimals) decimal places for perps\n * - Integer prices always allowed\n *\n * @param params - Price formatting parameters\n * @param params.price - The price value to format\n * @param params.szDecimals - The size decimals for the asset\n * @returns Properly formatted price string\n */\nexport function formatHyperLiquidPrice(params: {\n price: string | number;\n szDecimals: number;\n}): string {\n const { price, szDecimals } = params;\n const priceNum = typeof price === 'string' ? parseFloat(price) : price;\n\n // Integer prices are always allowed\n if (Number.isInteger(priceNum)) {\n return priceNum.toString();\n }\n\n // Calculate max decimal places allowed\n const maxDecimalPlaces =\n DECIMAL_PRECISION_CONFIG.MaxPriceDecimals - szDecimals;\n\n // Format with proper decimal places\n let formattedPrice = priceNum.toFixed(maxDecimalPlaces);\n\n // Remove trailing zeros\n formattedPrice = parseFloat(formattedPrice).toString();\n\n // Check and enforce max significant figures using shared utility\n const significantDigits = countSignificantFigures(formattedPrice);\n\n if (significantDigits > DECIMAL_PRECISION_CONFIG.MaxSignificantFigures) {\n // Use shared utility to round to max significant figures\n formattedPrice = roundToSignificantFigures(formattedPrice);\n }\n\n return formattedPrice;\n}\n\n/**\n * Format order size with asset-specific decimal precision.\n *\n * @param params - Size formatting parameters\n * @param params.size - The size value to format\n * @param params.szDecimals - The size decimals for the asset\n * @returns Properly formatted size string with trailing zeros removed\n */\nexport function formatHyperLiquidSize(params: {\n size: string | number;\n szDecimals: number;\n}): string {\n const { size, szDecimals } = params;\n const sizeNum = typeof size === 'string' ? parseFloat(size) : size;\n\n if (isNaN(sizeNum)) {\n return '0';\n }\n\n // Use asset-specific decimal precision and remove trailing zeros\n const formatted = sizeNum.toFixed(szDecimals);\n\n // Only strip trailing zeros after decimal point, not from integers\n // e.g., \"10.000\" -> \"10\", \"10.5000\" -> \"10.5\", but \"10\" stays \"10\"\n if (!formatted.includes('.')) {\n return formatted; // Integer, keep as-is\n }\n\n // Has decimal, strip trailing zeros and decimal if needed\n return formatted.replace(/\\.?0+$/u, '');\n}\n\n/**\n * Calculate position size for a given USD value and leverage.\n *\n * @param params - Position size calculation parameters\n * @param params.usdValue - The USD value to invest\n * @param params.leverage - The leverage multiplier\n * @param params.assetPrice - The current asset price\n * @returns Raw position size (before formatting)\n */\nexport function calculatePositionSize(params: {\n usdValue: number;\n leverage: number;\n assetPrice: number;\n}): number {\n const { usdValue, leverage, assetPrice } = params;\n return (usdValue * leverage) / assetPrice;\n}\n\n/**\n * Calculate HIP-3 asset ID from perpDexIndex and market index\n * Formula: BASE_ASSET_ID + (perpDexIndex * DEX_MULTIPLIER) + index_in_meta\n *\n * @param perpDexIndex - DEX index from perpDexs() array (0=main, 1=xyz, 2=abc, etc.)\n * @param indexInMeta - Market index within the DEX's meta universe\n * @returns Global asset ID for HIP-3 order routing\n *\n * @example Main DEX\n * calculateHip3AssetId(0, 5) // Returns: 5 (main DEX uses index directly)\n *\n * @example xyz DEX\n * calculateHip3AssetId(1, 0) // Returns: 110000 (xyz:XYZ100)\n */\nexport function calculateHip3AssetId(\n perpDexIndex: number,\n indexInMeta: number,\n): number {\n if (perpDexIndex === 0) {\n return indexInMeta;\n }\n return (\n HIP3_ASSET_ID_CONFIG.BaseAssetId +\n perpDexIndex * HIP3_ASSET_ID_CONFIG.DexMultiplier +\n indexInMeta\n );\n}\n\n/**\n * Parse asset name to extract DEX and symbol\n * HIP-3 assets are prefixed with \"dex:\" (e.g., \"xyz:XYZ100\")\n * Main DEX assets have no prefix (e.g., \"BTC\")\n *\n * @param assetName - Asset name from HyperLiquid API\n * @returns Object with dex (null for main DEX) and symbol\n *\n * @example Main DEX\n * parseAssetName(\"BTC\") // Returns: { dex: null, symbol: \"BTC\" }\n *\n * @example HIP-3 DEX\n * parseAssetName(\"xyz:XYZ100\") // Returns: { dex: \"xyz\", symbol: \"XYZ100\" }\n */\nexport function parseAssetName(assetName: string): {\n dex: string | null;\n symbol: string;\n} {\n const colonIndex = assetName.indexOf(':');\n if (colonIndex === -1) {\n return { dex: null, symbol: assetName };\n }\n return {\n dex: assetName.substring(0, colonIndex),\n symbol: assetName.substring(colonIndex + 1),\n };\n}\n\n/**\n * Transform raw HyperLiquid ledger updates to UserHistoryItem format\n * Filters for deposits, withdrawals, and internal transfers only, extracting amount and asset information\n *\n * @param rawLedgerUpdates - Array of raw ledger updates from HyperLiquid SDK\n * @returns Array of UserHistoryItem objects\n */\nexport function adaptHyperLiquidLedgerUpdateToUserHistoryItem(\n rawLedgerUpdates: RawHyperLiquidLedgerUpdate[],\n): UserHistoryItem[] {\n return (rawLedgerUpdates || [])\n .filter((update) =>\n // Only include deposits, withdrawals, and positive internal transfers, skip other types\n {\n if (update.delta.type === 'deposit') {\n return true;\n }\n if (update.delta.type === 'withdraw') {\n return true;\n }\n if (update.delta.type === 'internalTransfer') {\n const usdc = Number.parseFloat(update.delta.usdc ?? '0');\n if (Number.isNaN(usdc)) {\n return false;\n }\n return usdc > 0;\n }\n return false;\n },\n )\n .map((update) => {\n // Extract amount and asset based on delta type\n let amount = '0';\n let asset = 'USDC';\n\n if ('usdc' in update.delta && update.delta.usdc) {\n amount = Math.abs(parseFloat(update.delta.usdc)).toString();\n }\n if ('coin' in update.delta && typeof update.delta.coin === 'string') {\n asset = update.delta.coin;\n }\n\n return {\n id: `history-${update.hash}`,\n timestamp: update.time,\n amount,\n asset,\n txHash: update.hash,\n status: 'completed' as const,\n type: update.delta.type === 'withdraw' ? 'withdrawal' : 'deposit',\n details: {\n source: '',\n bridgeContract: undefined,\n recipient: undefined,\n blockNumber: undefined,\n chainId: undefined,\n synthetic: undefined,\n },\n };\n });\n}\n"]}
@@ -1,89 +0,0 @@
1
- "use strict";
2
- /**
3
- * HyperLiquid Order Book Processor
4
- *
5
- * Utility functions for processing Level 2 order book data from HyperLiquid WebSocket.
6
- * Extracts best bid/ask prices, calculates spreads, and updates caches.
7
- */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.processBboData = exports.processL2BookData = void 0;
10
- /**
11
- * Process Level 2 order book data and update caches
12
- *
13
- * Extracts best bid/ask prices from order book levels, calculates spread,
14
- * and updates the order book cache and price data cache.
15
- *
16
- * @param params - Processing parameters
17
- */
18
- function processL2BookData(params) {
19
- const { symbol, data, orderBookCache, cachedPriceData, createPriceUpdate, notifySubscribers, } = params;
20
- if (data?.coin !== symbol || !data?.levels) {
21
- return;
22
- }
23
- // Extract best bid and ask from order book
24
- const bestBid = data.levels[0]?.[0]; // First bid level
25
- const bestAsk = data.levels[1]?.[0]; // First ask level
26
- if (!bestBid && !bestAsk) {
27
- return;
28
- }
29
- const bidPrice = bestBid ? parseFloat(bestBid.px) : 0;
30
- const askPrice = bestAsk ? parseFloat(bestAsk.px) : 0;
31
- const spread = bidPrice > 0 && askPrice > 0 ? (askPrice - bidPrice).toFixed(5) : undefined;
32
- // Update order book cache
33
- orderBookCache.set(symbol, {
34
- bestBid: bestBid?.px,
35
- bestAsk: bestAsk?.px,
36
- spread,
37
- lastUpdated: Date.now(),
38
- });
39
- // Update cached price data with new order book data
40
- const currentCachedPrice = cachedPriceData?.get(symbol);
41
- if (!currentCachedPrice) {
42
- return;
43
- }
44
- const updatedPrice = createPriceUpdate(symbol, currentCachedPrice.price);
45
- // Ensure cache exists before setting
46
- if (cachedPriceData) {
47
- cachedPriceData.set(symbol, updatedPrice);
48
- notifySubscribers();
49
- }
50
- }
51
- exports.processL2BookData = processL2BookData;
52
- /**
53
- * Process BBO (best bid/offer) data and update caches
54
- *
55
- * BBO is lightweight and independent from L2Book aggregation parameters,
56
- * making it ideal for spread / top-of-book display.
57
- *
58
- * @param params - Processing parameters
59
- */
60
- function processBboData(params) {
61
- const { symbol, data, orderBookCache, cachedPriceData, createPriceUpdate, notifySubscribers, } = params;
62
- if (data?.coin !== symbol || !Array.isArray(data?.bbo)) {
63
- return;
64
- }
65
- const [bestBid, bestAsk] = data.bbo;
66
- if (!bestBid && !bestAsk) {
67
- return;
68
- }
69
- const bidPrice = bestBid ? parseFloat(bestBid.px) : 0;
70
- const askPrice = bestAsk ? parseFloat(bestAsk.px) : 0;
71
- const spread = bidPrice > 0 && askPrice > 0 ? (askPrice - bidPrice).toFixed(5) : undefined;
72
- orderBookCache.set(symbol, {
73
- bestBid: bestBid?.px,
74
- bestAsk: bestAsk?.px,
75
- spread,
76
- lastUpdated: Date.now(),
77
- });
78
- const currentCachedPrice = cachedPriceData?.get(symbol);
79
- if (!currentCachedPrice) {
80
- return;
81
- }
82
- const updatedPrice = createPriceUpdate(symbol, currentCachedPrice.price);
83
- if (cachedPriceData) {
84
- cachedPriceData.set(symbol, updatedPrice);
85
- notifySubscribers();
86
- }
87
- }
88
- exports.processBboData = processBboData;
89
- //# sourceMappingURL=hyperLiquidOrderBookProcessor.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hyperLiquidOrderBookProcessor.cjs","sourceRoot":"","sources":["../../src/utils/hyperLiquidOrderBookProcessor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * HyperLiquid Order Book Processor\n *\n * Utility functions for processing Level 2 order book data from HyperLiquid WebSocket.\n * Extracts best bid/ask prices, calculates spreads, and updates caches.\n */\n\nimport type { BboWsEvent, L2BookResponse } from '@nktkas/hyperliquid';\n\nimport type { PriceUpdate } from '../types';\n\n/**\n * Order book cache entry structure\n */\nexport type OrderBookCacheEntry = {\n bestBid?: string;\n bestAsk?: string;\n spread?: string;\n lastUpdated: number;\n};\n\n/**\n * Parameters for processing L2 book data\n */\nexport type ProcessL2BookDataParams = {\n symbol: string;\n data: L2BookResponse;\n orderBookCache: Map<string, OrderBookCacheEntry>;\n cachedPriceData: Map<string, PriceUpdate> | null;\n createPriceUpdate: (symbol: string, price: string) => PriceUpdate;\n notifySubscribers: () => void;\n};\n\n/**\n * Parameters for processing BBO data\n */\nexport type ProcessBboDataParams = {\n symbol: string;\n data: BboWsEvent;\n orderBookCache: Map<string, OrderBookCacheEntry>;\n cachedPriceData: Map<string, PriceUpdate> | null;\n createPriceUpdate: (symbol: string, price: string) => PriceUpdate;\n notifySubscribers: () => void;\n};\n\n/**\n * Process Level 2 order book data and update caches\n *\n * Extracts best bid/ask prices from order book levels, calculates spread,\n * and updates the order book cache and price data cache.\n *\n * @param params - Processing parameters\n */\nexport function processL2BookData(params: ProcessL2BookDataParams): void {\n const {\n symbol,\n data,\n orderBookCache,\n cachedPriceData,\n createPriceUpdate,\n notifySubscribers,\n } = params;\n\n if (data?.coin !== symbol || !data?.levels) {\n return;\n }\n\n // Extract best bid and ask from order book\n const bestBid = data.levels[0]?.[0]; // First bid level\n const bestAsk = data.levels[1]?.[0]; // First ask level\n\n if (!bestBid && !bestAsk) {\n return;\n }\n\n const bidPrice = bestBid ? parseFloat(bestBid.px) : 0;\n const askPrice = bestAsk ? parseFloat(bestAsk.px) : 0;\n const spread =\n bidPrice > 0 && askPrice > 0 ? (askPrice - bidPrice).toFixed(5) : undefined;\n\n // Update order book cache\n orderBookCache.set(symbol, {\n bestBid: bestBid?.px,\n bestAsk: bestAsk?.px,\n spread,\n lastUpdated: Date.now(),\n });\n\n // Update cached price data with new order book data\n const currentCachedPrice = cachedPriceData?.get(symbol);\n if (!currentCachedPrice) {\n return;\n }\n\n const updatedPrice = createPriceUpdate(symbol, currentCachedPrice.price);\n\n // Ensure cache exists before setting\n if (cachedPriceData) {\n cachedPriceData.set(symbol, updatedPrice);\n notifySubscribers();\n }\n}\n\n/**\n * Process BBO (best bid/offer) data and update caches\n *\n * BBO is lightweight and independent from L2Book aggregation parameters,\n * making it ideal for spread / top-of-book display.\n *\n * @param params - Processing parameters\n */\nexport function processBboData(params: ProcessBboDataParams): void {\n const {\n symbol,\n data,\n orderBookCache,\n cachedPriceData,\n createPriceUpdate,\n notifySubscribers,\n } = params;\n\n if (data?.coin !== symbol || !Array.isArray(data?.bbo)) {\n return;\n }\n\n const [bestBid, bestAsk] = data.bbo;\n if (!bestBid && !bestAsk) {\n return;\n }\n\n const bidPrice = bestBid ? parseFloat(bestBid.px) : 0;\n const askPrice = bestAsk ? parseFloat(bestAsk.px) : 0;\n const spread =\n bidPrice > 0 && askPrice > 0 ? (askPrice - bidPrice).toFixed(5) : undefined;\n\n orderBookCache.set(symbol, {\n bestBid: bestBid?.px,\n bestAsk: bestAsk?.px,\n spread,\n lastUpdated: Date.now(),\n });\n\n const currentCachedPrice = cachedPriceData?.get(symbol);\n if (!currentCachedPrice) {\n return;\n }\n\n const updatedPrice = createPriceUpdate(symbol, currentCachedPrice.price);\n if (cachedPriceData) {\n cachedPriceData.set(symbol, updatedPrice);\n notifySubscribers();\n }\n}\n"]}