@lifi/perps-sdk 0.1.1-alpha.9 → 1.0.0

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 (959) hide show
  1. package/README.md +157 -20
  2. package/dist/cjs/client/PerpsClient.d.ts +57 -24
  3. package/dist/cjs/client/PerpsClient.d.ts.map +1 -1
  4. package/dist/cjs/client/PerpsClient.js +218 -208
  5. package/dist/cjs/client/PerpsClient.js.map +1 -1
  6. package/dist/cjs/client/bindProvider.d.ts +3 -0
  7. package/dist/cjs/client/bindProvider.d.ts.map +1 -0
  8. package/dist/cjs/client/bindProvider.js +9 -0
  9. package/dist/cjs/client/bindProvider.js.map +1 -0
  10. package/dist/cjs/client/createPerpsClient.d.ts +7 -25
  11. package/dist/cjs/client/createPerpsClient.d.ts.map +1 -1
  12. package/dist/cjs/client/createPerpsClient.js +28 -8
  13. package/dist/cjs/client/createPerpsClient.js.map +1 -1
  14. package/dist/cjs/client/requireProvider.d.ts +3 -0
  15. package/dist/cjs/client/requireProvider.d.ts.map +1 -0
  16. package/dist/cjs/client/requireProvider.js +16 -0
  17. package/dist/cjs/client/requireProvider.js.map +1 -0
  18. package/dist/cjs/errors/PerpsError.d.ts +2 -3
  19. package/dist/cjs/errors/PerpsError.d.ts.map +1 -1
  20. package/dist/cjs/errors/PerpsError.js +3 -15
  21. package/dist/cjs/errors/PerpsError.js.map +1 -1
  22. package/dist/cjs/errors/constants.d.ts +2 -12
  23. package/dist/cjs/errors/constants.d.ts.map +1 -1
  24. package/dist/cjs/errors/constants.js +3 -14
  25. package/dist/cjs/errors/constants.js.map +1 -1
  26. package/dist/cjs/index.d.ts +58 -34
  27. package/dist/cjs/index.d.ts.map +1 -1
  28. package/dist/cjs/index.js +122 -45
  29. package/dist/cjs/index.js.map +1 -1
  30. package/dist/cjs/registry/assetRegistry.d.ts +11 -0
  31. package/dist/cjs/registry/assetRegistry.d.ts.map +1 -0
  32. package/dist/cjs/registry/assetRegistry.js +39 -0
  33. package/dist/cjs/registry/assetRegistry.js.map +1 -0
  34. package/dist/cjs/registry/marketRegistry.d.ts +13 -0
  35. package/dist/cjs/registry/marketRegistry.d.ts.map +1 -0
  36. package/dist/cjs/registry/marketRegistry.js +58 -0
  37. package/dist/cjs/registry/marketRegistry.js.map +1 -0
  38. package/dist/cjs/registry/referenceDataRegistry.d.ts +20 -0
  39. package/dist/cjs/registry/referenceDataRegistry.d.ts.map +1 -0
  40. package/dist/cjs/registry/referenceDataRegistry.js +59 -0
  41. package/dist/cjs/registry/referenceDataRegistry.js.map +1 -0
  42. package/dist/cjs/services/createAction.d.ts +13 -0
  43. package/dist/cjs/services/createAction.d.ts.map +1 -0
  44. package/dist/cjs/services/createAction.js +17 -0
  45. package/dist/cjs/services/createAction.js.map +1 -0
  46. package/dist/cjs/services/executeAction.d.ts +13 -0
  47. package/dist/cjs/services/executeAction.d.ts.map +1 -0
  48. package/dist/cjs/services/{submitAuthorization.js → executeAction.js} +8 -6
  49. package/dist/cjs/services/executeAction.js.map +1 -0
  50. package/dist/cjs/services/getAccount.d.ts +5 -3
  51. package/dist/cjs/services/getAccount.d.ts.map +1 -1
  52. package/dist/cjs/services/getAccount.js +2 -6
  53. package/dist/cjs/services/getAccount.js.map +1 -1
  54. package/dist/cjs/services/getActivity.d.ts +15 -0
  55. package/dist/cjs/services/getActivity.d.ts.map +1 -0
  56. package/dist/cjs/services/getActivity.js +15 -0
  57. package/dist/cjs/services/getActivity.js.map +1 -0
  58. package/dist/cjs/services/getAssets.d.ts +8 -0
  59. package/dist/cjs/services/getAssets.d.ts.map +1 -0
  60. package/dist/cjs/services/getAssets.js +11 -0
  61. package/dist/cjs/services/getAssets.js.map +1 -0
  62. package/dist/cjs/services/getFills.d.ts +14 -0
  63. package/dist/cjs/services/getFills.d.ts.map +1 -0
  64. package/dist/cjs/services/getFills.js +14 -0
  65. package/dist/cjs/services/getFills.js.map +1 -0
  66. package/dist/cjs/services/getMarket.d.ts +4 -3
  67. package/dist/cjs/services/getMarket.d.ts.map +1 -1
  68. package/dist/cjs/services/getMarket.js +6 -4
  69. package/dist/cjs/services/getMarket.js.map +1 -1
  70. package/dist/cjs/services/getMarkets.d.ts +4 -2
  71. package/dist/cjs/services/getMarkets.d.ts.map +1 -1
  72. package/dist/cjs/services/getMarkets.js +5 -2
  73. package/dist/cjs/services/getMarkets.js.map +1 -1
  74. package/dist/cjs/services/getMeta.d.ts +5 -0
  75. package/dist/cjs/services/getMeta.d.ts.map +1 -0
  76. package/dist/cjs/services/getMeta.js +8 -0
  77. package/dist/cjs/services/getMeta.js.map +1 -0
  78. package/dist/cjs/services/getOhlcv.d.ts +4 -3
  79. package/dist/cjs/services/getOhlcv.d.ts.map +1 -1
  80. package/dist/cjs/services/getOhlcv.js +4 -3
  81. package/dist/cjs/services/getOhlcv.js.map +1 -1
  82. package/dist/cjs/services/getOrder.d.ts +5 -3
  83. package/dist/cjs/services/getOrder.d.ts.map +1 -1
  84. package/dist/cjs/services/getOrder.js +2 -6
  85. package/dist/cjs/services/getOrder.js.map +1 -1
  86. package/dist/cjs/services/getOrderbook.d.ts +4 -3
  87. package/dist/cjs/services/getOrderbook.d.ts.map +1 -1
  88. package/dist/cjs/services/getOrderbook.js +4 -3
  89. package/dist/cjs/services/getOrderbook.js.map +1 -1
  90. package/dist/cjs/services/getOrders.d.ts +13 -0
  91. package/dist/cjs/services/getOrders.d.ts.map +1 -0
  92. package/dist/cjs/services/getOrders.js +13 -0
  93. package/dist/cjs/services/getOrders.js.map +1 -0
  94. package/dist/cjs/services/getPositions.d.ts +13 -0
  95. package/dist/cjs/services/getPositions.d.ts.map +1 -0
  96. package/dist/cjs/services/getPositions.js +13 -0
  97. package/dist/cjs/services/getPositions.js.map +1 -0
  98. package/dist/cjs/services/getPrices.d.ts +4 -3
  99. package/dist/cjs/services/getPrices.d.ts.map +1 -1
  100. package/dist/cjs/services/getPrices.js +3 -3
  101. package/dist/cjs/services/getPrices.js.map +1 -1
  102. package/dist/cjs/services/getProviders.d.ts +5 -0
  103. package/dist/cjs/services/getProviders.d.ts.map +1 -0
  104. package/dist/cjs/services/getProviders.js +8 -0
  105. package/dist/cjs/services/getProviders.js.map +1 -0
  106. package/dist/cjs/services/getQuote.d.ts +12 -0
  107. package/dist/cjs/services/getQuote.d.ts.map +1 -0
  108. package/dist/cjs/services/getQuote.js +13 -0
  109. package/dist/cjs/services/getQuote.js.map +1 -0
  110. package/dist/cjs/services/getTermsAcceptance.d.ts +6 -0
  111. package/dist/cjs/services/getTermsAcceptance.d.ts.map +1 -0
  112. package/dist/cjs/services/getTermsAcceptance.js +9 -0
  113. package/dist/cjs/services/getTermsAcceptance.js.map +1 -0
  114. package/dist/cjs/services/resolveQuote.d.ts +7 -0
  115. package/dist/cjs/services/resolveQuote.d.ts.map +1 -0
  116. package/dist/cjs/services/resolveQuote.js +50 -0
  117. package/dist/cjs/services/resolveQuote.js.map +1 -0
  118. package/dist/cjs/services/resolveSubscribeQuote.d.ts +6 -0
  119. package/dist/cjs/services/resolveSubscribeQuote.d.ts.map +1 -0
  120. package/dist/cjs/services/resolveSubscribeQuote.js +65 -0
  121. package/dist/cjs/services/resolveSubscribeQuote.js.map +1 -0
  122. package/dist/cjs/storage/parseStoredRecord.d.ts +4 -0
  123. package/dist/cjs/storage/parseStoredRecord.d.ts.map +1 -0
  124. package/dist/cjs/storage/parseStoredRecord.js +26 -0
  125. package/dist/cjs/storage/parseStoredRecord.js.map +1 -0
  126. package/dist/cjs/storage/storage.d.ts.map +1 -0
  127. package/dist/cjs/storage/storage.js.map +1 -0
  128. package/dist/cjs/{agent → storage}/types.d.ts +0 -5
  129. package/dist/cjs/storage/types.d.ts.map +1 -0
  130. package/dist/cjs/{agent → storage}/types.js.map +1 -1
  131. package/dist/cjs/transport/fetchWithRetry.d.ts +8 -0
  132. package/dist/cjs/transport/fetchWithRetry.d.ts.map +1 -0
  133. package/dist/cjs/transport/fetchWithRetry.js +81 -0
  134. package/dist/cjs/transport/fetchWithRetry.js.map +1 -0
  135. package/dist/cjs/{utils → transport}/request.d.ts +3 -2
  136. package/dist/cjs/transport/request.d.ts.map +1 -0
  137. package/dist/cjs/transport/request.js +75 -0
  138. package/dist/cjs/transport/request.js.map +1 -0
  139. package/dist/cjs/transport/retryPolicy.d.ts +37 -0
  140. package/dist/cjs/transport/retryPolicy.d.ts.map +1 -0
  141. package/dist/cjs/transport/retryPolicy.js +79 -0
  142. package/dist/cjs/transport/retryPolicy.js.map +1 -0
  143. package/dist/cjs/types/api.d.ts +85 -0
  144. package/dist/cjs/types/api.d.ts.map +1 -0
  145. package/dist/cjs/{dex/types.js → types/api.js} +1 -1
  146. package/dist/cjs/types/api.js.map +1 -0
  147. package/dist/cjs/types/config.d.ts +26 -0
  148. package/dist/cjs/types/config.d.ts.map +1 -0
  149. package/dist/cjs/{realtime/hyperliquid/types.js → types/config.js} +1 -1
  150. package/dist/cjs/types/config.js.map +1 -0
  151. package/dist/cjs/types/provider.d.ts +84 -0
  152. package/dist/cjs/types/provider.d.ts.map +1 -0
  153. package/dist/cjs/types/provider.js +3 -0
  154. package/dist/cjs/types/provider.js.map +1 -0
  155. package/dist/cjs/utils/accountSummary.d.ts +3 -0
  156. package/dist/cjs/utils/accountSummary.d.ts.map +1 -0
  157. package/dist/cjs/utils/accountSummary.js +25 -0
  158. package/dist/cjs/utils/accountSummary.js.map +1 -0
  159. package/dist/cjs/utils/assertNever.d.ts +2 -0
  160. package/dist/cjs/utils/assertNever.d.ts.map +1 -0
  161. package/dist/cjs/utils/assertNever.js +7 -0
  162. package/dist/cjs/utils/assertNever.js.map +1 -0
  163. package/dist/cjs/utils/calculations.d.ts +52 -0
  164. package/dist/cjs/utils/calculations.d.ts.map +1 -0
  165. package/dist/cjs/utils/calculations.js +148 -0
  166. package/dist/cjs/utils/calculations.js.map +1 -0
  167. package/dist/cjs/utils/depositChain.d.ts +6 -0
  168. package/dist/cjs/utils/depositChain.d.ts.map +1 -0
  169. package/dist/cjs/utils/depositChain.js +13 -0
  170. package/dist/cjs/utils/depositChain.js.map +1 -0
  171. package/dist/cjs/utils/explorer.d.ts +9 -0
  172. package/dist/cjs/utils/explorer.d.ts.map +1 -0
  173. package/dist/cjs/utils/explorer.js +23 -0
  174. package/dist/cjs/utils/explorer.js.map +1 -0
  175. package/dist/cjs/utils/fillClassification.d.ts +3 -0
  176. package/dist/cjs/utils/fillClassification.d.ts.map +1 -0
  177. package/dist/cjs/utils/fillClassification.js +37 -0
  178. package/dist/cjs/utils/fillClassification.js.map +1 -0
  179. package/dist/cjs/utils/format.d.ts +13 -0
  180. package/dist/cjs/utils/format.d.ts.map +1 -0
  181. package/dist/cjs/utils/format.js +117 -0
  182. package/dist/cjs/utils/format.js.map +1 -0
  183. package/dist/cjs/utils/orderClassification.d.ts +10 -0
  184. package/dist/cjs/utils/orderClassification.d.ts.map +1 -0
  185. package/dist/cjs/utils/orderClassification.js +49 -0
  186. package/dist/cjs/utils/orderClassification.js.map +1 -0
  187. package/dist/cjs/utils/orderMath.d.ts +6 -0
  188. package/dist/cjs/utils/orderMath.d.ts.map +1 -0
  189. package/dist/cjs/utils/orderMath.js +71 -0
  190. package/dist/cjs/utils/orderMath.js.map +1 -0
  191. package/dist/cjs/utils/parse.d.ts +2 -0
  192. package/dist/cjs/utils/parse.d.ts.map +1 -0
  193. package/dist/cjs/utils/parse.js +14 -0
  194. package/dist/cjs/utils/parse.js.map +1 -0
  195. package/dist/cjs/utils/positionMath.d.ts +32 -0
  196. package/dist/cjs/utils/positionMath.d.ts.map +1 -0
  197. package/dist/cjs/utils/positionMath.js +52 -0
  198. package/dist/cjs/utils/positionMath.js.map +1 -0
  199. package/dist/cjs/utils/signTypedData.d.ts +3 -1
  200. package/dist/cjs/utils/signTypedData.d.ts.map +1 -1
  201. package/dist/cjs/utils/signTypedData.js +11 -3
  202. package/dist/cjs/utils/signTypedData.js.map +1 -1
  203. package/dist/cjs/utils/sleep.d.ts.map +1 -1
  204. package/dist/cjs/utils/sleep.js.map +1 -1
  205. package/dist/cjs/utils/units.d.ts +3 -0
  206. package/dist/cjs/utils/units.d.ts.map +1 -0
  207. package/dist/cjs/utils/units.js +18 -0
  208. package/dist/cjs/utils/units.js.map +1 -0
  209. package/dist/cjs/utils/validation.d.ts +2 -0
  210. package/dist/cjs/utils/validation.d.ts.map +1 -0
  211. package/dist/cjs/utils/validation.js +16 -0
  212. package/dist/cjs/utils/validation.js.map +1 -0
  213. package/dist/cjs/version.d.ts +1 -1
  214. package/dist/cjs/version.d.ts.map +1 -1
  215. package/dist/cjs/version.js +1 -1
  216. package/dist/cjs/version.js.map +1 -1
  217. package/dist/cjs/websocket/PerpsWsClient.d.ts +27 -0
  218. package/dist/cjs/websocket/PerpsWsClient.d.ts.map +1 -0
  219. package/dist/cjs/websocket/PerpsWsClient.js +84 -0
  220. package/dist/cjs/websocket/PerpsWsClient.js.map +1 -0
  221. package/dist/{esm/realtime → cjs/websocket}/ReconnectingWebSocket.d.ts +23 -7
  222. package/dist/cjs/websocket/ReconnectingWebSocket.d.ts.map +1 -0
  223. package/dist/cjs/websocket/ReconnectingWebSocket.js +213 -0
  224. package/dist/cjs/websocket/ReconnectingWebSocket.js.map +1 -0
  225. package/dist/cjs/websocket/WsProviderBase.d.ts +31 -0
  226. package/dist/cjs/websocket/WsProviderBase.d.ts.map +1 -0
  227. package/dist/cjs/websocket/WsProviderBase.js +197 -0
  228. package/dist/cjs/websocket/WsProviderBase.js.map +1 -0
  229. package/dist/cjs/websocket/cachePromise.d.ts +2 -0
  230. package/dist/cjs/websocket/cachePromise.d.ts.map +1 -0
  231. package/dist/cjs/websocket/cachePromise.js +18 -0
  232. package/dist/cjs/websocket/cachePromise.js.map +1 -0
  233. package/dist/cjs/websocket/types.d.ts +15 -0
  234. package/dist/cjs/websocket/types.d.ts.map +1 -0
  235. package/dist/cjs/{dex → websocket}/types.js.map +1 -1
  236. package/dist/cjs/websocket/wsLog.d.ts +10 -0
  237. package/dist/cjs/websocket/wsLog.d.ts.map +1 -0
  238. package/dist/cjs/websocket/wsLog.js +31 -0
  239. package/dist/cjs/websocket/wsLog.js.map +1 -0
  240. package/dist/esm/client/PerpsClient.d.ts +223 -136
  241. package/dist/esm/client/PerpsClient.d.ts.map +1 -1
  242. package/dist/esm/client/PerpsClient.js +399 -339
  243. package/dist/esm/client/PerpsClient.js.map +1 -1
  244. package/dist/esm/client/bindProvider.d.ts +13 -0
  245. package/dist/esm/client/bindProvider.d.ts.map +1 -0
  246. package/dist/esm/client/bindProvider.js +16 -0
  247. package/dist/esm/client/bindProvider.js.map +1 -0
  248. package/dist/esm/client/createPerpsClient.d.ts +24 -64
  249. package/dist/esm/client/createPerpsClient.d.ts.map +1 -1
  250. package/dist/esm/client/createPerpsClient.js +45 -17
  251. package/dist/esm/client/createPerpsClient.js.map +1 -1
  252. package/dist/esm/client/requireProvider.d.ts +12 -0
  253. package/dist/esm/client/requireProvider.d.ts.map +1 -0
  254. package/dist/esm/client/requireProvider.js +22 -0
  255. package/dist/esm/client/requireProvider.js.map +1 -0
  256. package/dist/esm/errors/PerpsError.d.ts +10 -3
  257. package/dist/esm/errors/PerpsError.d.ts.map +1 -1
  258. package/dist/esm/errors/PerpsError.js +11 -15
  259. package/dist/esm/errors/PerpsError.js.map +1 -1
  260. package/dist/esm/errors/constants.d.ts +8 -12
  261. package/dist/esm/errors/constants.d.ts.map +1 -1
  262. package/dist/esm/errors/constants.js +8 -13
  263. package/dist/esm/errors/constants.js.map +1 -1
  264. package/dist/esm/index.d.ts +66 -34
  265. package/dist/esm/index.d.ts.map +1 -1
  266. package/dist/esm/index.js +49 -29
  267. package/dist/esm/index.js.map +1 -1
  268. package/dist/esm/registry/assetRegistry.d.ts +25 -0
  269. package/dist/esm/registry/assetRegistry.d.ts.map +1 -0
  270. package/dist/esm/registry/assetRegistry.js +48 -0
  271. package/dist/esm/registry/assetRegistry.js.map +1 -0
  272. package/dist/esm/registry/marketRegistry.d.ts +42 -0
  273. package/dist/esm/registry/marketRegistry.d.ts.map +1 -0
  274. package/dist/esm/registry/marketRegistry.js +81 -0
  275. package/dist/esm/registry/marketRegistry.js.map +1 -0
  276. package/dist/esm/registry/referenceDataRegistry.d.ts +44 -0
  277. package/dist/esm/registry/referenceDataRegistry.d.ts.map +1 -0
  278. package/dist/esm/registry/referenceDataRegistry.js +79 -0
  279. package/dist/esm/registry/referenceDataRegistry.js.map +1 -0
  280. package/dist/esm/services/createAction.d.ts +26 -0
  281. package/dist/esm/services/createAction.d.ts.map +1 -0
  282. package/dist/esm/services/createAction.js +22 -0
  283. package/dist/esm/services/createAction.js.map +1 -0
  284. package/dist/esm/services/executeAction.d.ts +26 -0
  285. package/dist/esm/services/executeAction.d.ts.map +1 -0
  286. package/dist/esm/services/executeAction.js +26 -0
  287. package/dist/esm/services/executeAction.js.map +1 -0
  288. package/dist/esm/services/getAccount.d.ts +21 -18
  289. package/dist/esm/services/getAccount.d.ts.map +1 -1
  290. package/dist/esm/services/getAccount.js +13 -19
  291. package/dist/esm/services/getAccount.js.map +1 -1
  292. package/dist/esm/services/getActivity.d.ts +39 -0
  293. package/dist/esm/services/getActivity.d.ts.map +1 -0
  294. package/dist/esm/services/getActivity.js +29 -0
  295. package/dist/esm/services/getActivity.js.map +1 -0
  296. package/dist/esm/services/getAssets.d.ts +27 -0
  297. package/dist/esm/services/getAssets.d.ts.map +1 -0
  298. package/dist/esm/services/getAssets.js +22 -0
  299. package/dist/esm/services/getAssets.js.map +1 -0
  300. package/dist/esm/services/getFills.d.ts +38 -0
  301. package/dist/esm/services/getFills.d.ts.map +1 -0
  302. package/dist/esm/services/getFills.js +28 -0
  303. package/dist/esm/services/getFills.js.map +1 -0
  304. package/dist/esm/services/getMarket.d.ts +22 -15
  305. package/dist/esm/services/getMarket.d.ts.map +1 -1
  306. package/dist/esm/services/getMarket.js +14 -14
  307. package/dist/esm/services/getMarket.js.map +1 -1
  308. package/dist/esm/services/getMarkets.d.ts +16 -13
  309. package/dist/esm/services/getMarkets.d.ts.map +1 -1
  310. package/dist/esm/services/getMarkets.js +11 -12
  311. package/dist/esm/services/getMarkets.js.map +1 -1
  312. package/dist/esm/services/getMeta.d.ts +19 -0
  313. package/dist/esm/services/getMeta.d.ts.map +1 -0
  314. package/dist/esm/services/getMeta.js +19 -0
  315. package/dist/esm/services/getMeta.js.map +1 -0
  316. package/dist/esm/services/getOhlcv.d.ts +17 -21
  317. package/dist/esm/services/getOhlcv.d.ts.map +1 -1
  318. package/dist/esm/services/getOhlcv.js +9 -15
  319. package/dist/esm/services/getOhlcv.js.map +1 -1
  320. package/dist/esm/services/getOrder.d.ts +18 -18
  321. package/dist/esm/services/getOrder.d.ts.map +1 -1
  322. package/dist/esm/services/getOrder.js +10 -18
  323. package/dist/esm/services/getOrder.js.map +1 -1
  324. package/dist/esm/services/getOrderbook.d.ts +14 -24
  325. package/dist/esm/services/getOrderbook.d.ts.map +1 -1
  326. package/dist/esm/services/getOrderbook.js +8 -22
  327. package/dist/esm/services/getOrderbook.js.map +1 -1
  328. package/dist/esm/services/getOrders.d.ts +35 -0
  329. package/dist/esm/services/getOrders.d.ts.map +1 -0
  330. package/dist/esm/services/getOrders.js +26 -0
  331. package/dist/esm/services/getOrders.js.map +1 -0
  332. package/dist/esm/services/getPositions.d.ts +35 -0
  333. package/dist/esm/services/getPositions.d.ts.map +1 -0
  334. package/dist/esm/services/getPositions.js +26 -0
  335. package/dist/esm/services/getPositions.js.map +1 -0
  336. package/dist/esm/services/getPrices.d.ts +13 -25
  337. package/dist/esm/services/getPrices.d.ts.map +1 -1
  338. package/dist/esm/services/getPrices.js +6 -23
  339. package/dist/esm/services/getPrices.js.map +1 -1
  340. package/dist/esm/services/getProviders.d.ts +20 -0
  341. package/dist/esm/services/getProviders.d.ts.map +1 -0
  342. package/dist/esm/services/getProviders.js +20 -0
  343. package/dist/esm/services/getProviders.js.map +1 -0
  344. package/dist/esm/services/getQuote.d.ts +42 -0
  345. package/dist/esm/services/getQuote.d.ts.map +1 -0
  346. package/dist/esm/services/getQuote.js +33 -0
  347. package/dist/esm/services/getQuote.js.map +1 -0
  348. package/dist/esm/services/getTermsAcceptance.d.ts +24 -0
  349. package/dist/esm/services/getTermsAcceptance.d.ts.map +1 -0
  350. package/dist/esm/services/getTermsAcceptance.js +24 -0
  351. package/dist/esm/services/getTermsAcceptance.js.map +1 -0
  352. package/dist/esm/services/resolveQuote.d.ts +36 -0
  353. package/dist/esm/services/resolveQuote.d.ts.map +1 -0
  354. package/dist/esm/services/resolveQuote.js +74 -0
  355. package/dist/esm/services/resolveQuote.js.map +1 -0
  356. package/dist/esm/services/resolveSubscribeQuote.d.ts +31 -0
  357. package/dist/esm/services/resolveSubscribeQuote.d.ts.map +1 -0
  358. package/dist/esm/services/resolveSubscribeQuote.js +86 -0
  359. package/dist/esm/services/resolveSubscribeQuote.js.map +1 -0
  360. package/dist/esm/storage/parseStoredRecord.d.ts +29 -0
  361. package/dist/esm/storage/parseStoredRecord.d.ts.map +1 -0
  362. package/dist/esm/storage/parseStoredRecord.js +47 -0
  363. package/dist/esm/storage/parseStoredRecord.js.map +1 -0
  364. package/dist/{types/agent → esm/storage}/storage.d.ts +6 -3
  365. package/dist/esm/storage/storage.d.ts.map +1 -0
  366. package/dist/esm/{agent → storage}/storage.js +6 -4
  367. package/dist/esm/storage/storage.js.map +1 -0
  368. package/dist/esm/storage/types.d.ts +14 -0
  369. package/dist/esm/storage/types.d.ts.map +1 -0
  370. package/dist/{cjs/client → esm/storage}/types.js.map +1 -1
  371. package/dist/esm/transport/fetchWithRetry.d.ts +22 -0
  372. package/dist/esm/transport/fetchWithRetry.d.ts.map +1 -0
  373. package/dist/esm/transport/fetchWithRetry.js +87 -0
  374. package/dist/esm/transport/fetchWithRetry.js.map +1 -0
  375. package/dist/esm/transport/request.d.ts +25 -0
  376. package/dist/esm/transport/request.d.ts.map +1 -0
  377. package/dist/esm/transport/request.js +82 -0
  378. package/dist/esm/transport/request.js.map +1 -0
  379. package/dist/esm/transport/retryPolicy.d.ts +106 -0
  380. package/dist/esm/transport/retryPolicy.d.ts.map +1 -0
  381. package/dist/esm/transport/retryPolicy.js +99 -0
  382. package/dist/esm/transport/retryPolicy.js.map +1 -0
  383. package/dist/esm/types/api.d.ts +214 -0
  384. package/dist/esm/types/api.d.ts.map +1 -0
  385. package/dist/esm/types/api.js +2 -0
  386. package/dist/esm/types/api.js.map +1 -0
  387. package/dist/esm/types/config.d.ts +70 -0
  388. package/dist/esm/types/config.d.ts.map +1 -0
  389. package/dist/esm/types/config.js +2 -0
  390. package/dist/esm/types/config.js.map +1 -0
  391. package/dist/esm/types/provider.d.ts +330 -0
  392. package/dist/esm/types/provider.d.ts.map +1 -0
  393. package/dist/esm/types/provider.js +2 -0
  394. package/dist/esm/types/provider.js.map +1 -0
  395. package/dist/esm/utils/accountSummary.d.ts +13 -0
  396. package/dist/esm/utils/accountSummary.d.ts.map +1 -0
  397. package/dist/esm/utils/accountSummary.js +32 -0
  398. package/dist/esm/utils/accountSummary.js.map +1 -0
  399. package/dist/esm/utils/assertNever.d.ts +20 -0
  400. package/dist/esm/utils/assertNever.d.ts.map +1 -0
  401. package/dist/esm/utils/assertNever.js +22 -0
  402. package/dist/esm/utils/assertNever.js.map +1 -0
  403. package/dist/esm/utils/calculations.d.ts +225 -0
  404. package/dist/esm/utils/calculations.d.ts.map +1 -0
  405. package/dist/esm/utils/calculations.js +291 -0
  406. package/dist/esm/utils/calculations.js.map +1 -0
  407. package/dist/esm/utils/depositChain.d.ts +25 -0
  408. package/dist/esm/utils/depositChain.d.ts.map +1 -0
  409. package/dist/esm/utils/depositChain.js +23 -0
  410. package/dist/esm/utils/depositChain.js.map +1 -0
  411. package/dist/esm/utils/explorer.d.ts +33 -0
  412. package/dist/esm/utils/explorer.d.ts.map +1 -0
  413. package/dist/esm/utils/explorer.js +38 -0
  414. package/dist/esm/utils/explorer.js.map +1 -0
  415. package/dist/esm/utils/fillClassification.d.ts +13 -0
  416. package/dist/esm/utils/fillClassification.d.ts.map +1 -0
  417. package/dist/esm/utils/fillClassification.js +44 -0
  418. package/dist/esm/utils/fillClassification.js.map +1 -0
  419. package/dist/esm/utils/format.d.ts +66 -0
  420. package/dist/esm/utils/format.d.ts.map +1 -0
  421. package/dist/esm/utils/format.js +171 -0
  422. package/dist/esm/utils/format.js.map +1 -0
  423. package/dist/esm/utils/orderClassification.d.ts +47 -0
  424. package/dist/esm/utils/orderClassification.d.ts.map +1 -0
  425. package/dist/esm/utils/orderClassification.js +78 -0
  426. package/dist/esm/utils/orderClassification.js.map +1 -0
  427. package/dist/esm/utils/orderMath.d.ts +44 -0
  428. package/dist/esm/utils/orderMath.d.ts.map +1 -0
  429. package/dist/esm/utils/orderMath.js +103 -0
  430. package/dist/esm/utils/orderMath.js.map +1 -0
  431. package/dist/esm/utils/parse.d.ts +21 -0
  432. package/dist/esm/utils/parse.d.ts.map +1 -0
  433. package/dist/esm/utils/parse.js +30 -0
  434. package/dist/esm/utils/parse.js.map +1 -0
  435. package/dist/esm/utils/positionMath.d.ts +107 -0
  436. package/dist/esm/utils/positionMath.d.ts.map +1 -0
  437. package/dist/esm/utils/positionMath.js +119 -0
  438. package/dist/esm/utils/positionMath.js.map +1 -0
  439. package/dist/esm/utils/signTypedData.d.ts +13 -10
  440. package/dist/esm/utils/signTypedData.d.ts.map +1 -1
  441. package/dist/esm/utils/signTypedData.js +20 -13
  442. package/dist/esm/utils/signTypedData.js.map +1 -1
  443. package/dist/esm/utils/sleep.d.ts +5 -0
  444. package/dist/esm/utils/sleep.d.ts.map +1 -1
  445. package/dist/esm/utils/sleep.js +5 -0
  446. package/dist/esm/utils/sleep.js.map +1 -1
  447. package/dist/esm/utils/units.d.ts +27 -0
  448. package/dist/esm/utils/units.d.ts.map +1 -0
  449. package/dist/esm/utils/units.js +38 -0
  450. package/dist/esm/utils/units.js.map +1 -0
  451. package/dist/esm/utils/validation.d.ts +18 -0
  452. package/dist/esm/utils/validation.d.ts.map +1 -0
  453. package/dist/esm/utils/validation.js +29 -0
  454. package/dist/esm/utils/validation.js.map +1 -0
  455. package/dist/esm/version.d.ts +1 -1
  456. package/dist/esm/version.d.ts.map +1 -1
  457. package/dist/esm/version.js +1 -1
  458. package/dist/esm/version.js.map +1 -1
  459. package/dist/esm/websocket/PerpsWsClient.d.ts +100 -0
  460. package/dist/esm/websocket/PerpsWsClient.d.ts.map +1 -0
  461. package/dist/esm/websocket/PerpsWsClient.js +121 -0
  462. package/dist/esm/websocket/PerpsWsClient.js.map +1 -0
  463. package/dist/esm/websocket/ReconnectingWebSocket.d.ts +130 -0
  464. package/dist/esm/websocket/ReconnectingWebSocket.d.ts.map +1 -0
  465. package/dist/esm/websocket/ReconnectingWebSocket.js +288 -0
  466. package/dist/esm/websocket/ReconnectingWebSocket.js.map +1 -0
  467. package/dist/esm/websocket/WsProviderBase.d.ts +89 -0
  468. package/dist/esm/websocket/WsProviderBase.d.ts.map +1 -0
  469. package/dist/esm/websocket/WsProviderBase.js +246 -0
  470. package/dist/esm/websocket/WsProviderBase.js.map +1 -0
  471. package/dist/esm/websocket/cachePromise.d.ts +14 -0
  472. package/dist/esm/websocket/cachePromise.d.ts.map +1 -0
  473. package/dist/esm/websocket/cachePromise.js +27 -0
  474. package/dist/esm/websocket/cachePromise.js.map +1 -0
  475. package/dist/esm/websocket/types.d.ts +60 -0
  476. package/dist/esm/websocket/types.d.ts.map +1 -0
  477. package/dist/{cjs/realtime → esm/websocket}/types.js.map +1 -1
  478. package/dist/esm/websocket/wsLog.d.ts +50 -0
  479. package/dist/esm/websocket/wsLog.d.ts.map +1 -0
  480. package/dist/esm/websocket/wsLog.js +68 -0
  481. package/dist/esm/websocket/wsLog.js.map +1 -0
  482. package/dist/types/client/PerpsClient.d.ts +223 -136
  483. package/dist/types/client/PerpsClient.d.ts.map +1 -1
  484. package/dist/types/client/bindProvider.d.ts +13 -0
  485. package/dist/types/client/bindProvider.d.ts.map +1 -0
  486. package/dist/types/client/createPerpsClient.d.ts +24 -64
  487. package/dist/types/client/createPerpsClient.d.ts.map +1 -1
  488. package/dist/types/client/requireProvider.d.ts +12 -0
  489. package/dist/types/client/requireProvider.d.ts.map +1 -0
  490. package/dist/types/errors/PerpsError.d.ts +10 -3
  491. package/dist/types/errors/PerpsError.d.ts.map +1 -1
  492. package/dist/types/errors/constants.d.ts +8 -12
  493. package/dist/types/errors/constants.d.ts.map +1 -1
  494. package/dist/types/index.d.ts +66 -34
  495. package/dist/types/index.d.ts.map +1 -1
  496. package/dist/types/registry/assetRegistry.d.ts +25 -0
  497. package/dist/types/registry/assetRegistry.d.ts.map +1 -0
  498. package/dist/types/registry/marketRegistry.d.ts +42 -0
  499. package/dist/types/registry/marketRegistry.d.ts.map +1 -0
  500. package/dist/types/registry/referenceDataRegistry.d.ts +44 -0
  501. package/dist/types/registry/referenceDataRegistry.d.ts.map +1 -0
  502. package/dist/types/services/createAction.d.ts +26 -0
  503. package/dist/types/services/createAction.d.ts.map +1 -0
  504. package/dist/types/services/executeAction.d.ts +26 -0
  505. package/dist/types/services/executeAction.d.ts.map +1 -0
  506. package/dist/types/services/getAccount.d.ts +21 -18
  507. package/dist/types/services/getAccount.d.ts.map +1 -1
  508. package/dist/types/services/getActivity.d.ts +39 -0
  509. package/dist/types/services/getActivity.d.ts.map +1 -0
  510. package/dist/types/services/getAssets.d.ts +27 -0
  511. package/dist/types/services/getAssets.d.ts.map +1 -0
  512. package/dist/types/services/getFills.d.ts +38 -0
  513. package/dist/types/services/getFills.d.ts.map +1 -0
  514. package/dist/types/services/getMarket.d.ts +22 -15
  515. package/dist/types/services/getMarket.d.ts.map +1 -1
  516. package/dist/types/services/getMarkets.d.ts +16 -13
  517. package/dist/types/services/getMarkets.d.ts.map +1 -1
  518. package/dist/types/services/getMeta.d.ts +19 -0
  519. package/dist/types/services/getMeta.d.ts.map +1 -0
  520. package/dist/types/services/getOhlcv.d.ts +17 -21
  521. package/dist/types/services/getOhlcv.d.ts.map +1 -1
  522. package/dist/types/services/getOrder.d.ts +18 -18
  523. package/dist/types/services/getOrder.d.ts.map +1 -1
  524. package/dist/types/services/getOrderbook.d.ts +14 -24
  525. package/dist/types/services/getOrderbook.d.ts.map +1 -1
  526. package/dist/types/services/getOrders.d.ts +35 -0
  527. package/dist/types/services/getOrders.d.ts.map +1 -0
  528. package/dist/types/services/getPositions.d.ts +35 -0
  529. package/dist/types/services/getPositions.d.ts.map +1 -0
  530. package/dist/types/services/getPrices.d.ts +13 -25
  531. package/dist/types/services/getPrices.d.ts.map +1 -1
  532. package/dist/types/services/getProviders.d.ts +20 -0
  533. package/dist/types/services/getProviders.d.ts.map +1 -0
  534. package/dist/types/services/getQuote.d.ts +42 -0
  535. package/dist/types/services/getQuote.d.ts.map +1 -0
  536. package/dist/types/services/getTermsAcceptance.d.ts +24 -0
  537. package/dist/types/services/getTermsAcceptance.d.ts.map +1 -0
  538. package/dist/types/services/resolveQuote.d.ts +36 -0
  539. package/dist/types/services/resolveQuote.d.ts.map +1 -0
  540. package/dist/types/services/resolveSubscribeQuote.d.ts +31 -0
  541. package/dist/types/services/resolveSubscribeQuote.d.ts.map +1 -0
  542. package/dist/types/storage/parseStoredRecord.d.ts +29 -0
  543. package/dist/types/storage/parseStoredRecord.d.ts.map +1 -0
  544. package/dist/{esm/agent → types/storage}/storage.d.ts +6 -3
  545. package/dist/types/storage/storage.d.ts.map +1 -0
  546. package/dist/types/storage/types.d.ts +14 -0
  547. package/dist/types/storage/types.d.ts.map +1 -0
  548. package/dist/types/transport/fetchWithRetry.d.ts +22 -0
  549. package/dist/types/transport/fetchWithRetry.d.ts.map +1 -0
  550. package/dist/types/transport/request.d.ts +25 -0
  551. package/dist/types/transport/request.d.ts.map +1 -0
  552. package/dist/types/transport/retryPolicy.d.ts +106 -0
  553. package/dist/types/transport/retryPolicy.d.ts.map +1 -0
  554. package/dist/types/types/api.d.ts +214 -0
  555. package/dist/types/types/api.d.ts.map +1 -0
  556. package/dist/types/types/config.d.ts +70 -0
  557. package/dist/types/types/config.d.ts.map +1 -0
  558. package/dist/types/types/provider.d.ts +330 -0
  559. package/dist/types/types/provider.d.ts.map +1 -0
  560. package/dist/types/utils/accountSummary.d.ts +13 -0
  561. package/dist/types/utils/accountSummary.d.ts.map +1 -0
  562. package/dist/types/utils/assertNever.d.ts +20 -0
  563. package/dist/types/utils/assertNever.d.ts.map +1 -0
  564. package/dist/types/utils/calculations.d.ts +225 -0
  565. package/dist/types/utils/calculations.d.ts.map +1 -0
  566. package/dist/types/utils/depositChain.d.ts +25 -0
  567. package/dist/types/utils/depositChain.d.ts.map +1 -0
  568. package/dist/types/utils/explorer.d.ts +33 -0
  569. package/dist/types/utils/explorer.d.ts.map +1 -0
  570. package/dist/types/utils/fillClassification.d.ts +13 -0
  571. package/dist/types/utils/fillClassification.d.ts.map +1 -0
  572. package/dist/types/utils/format.d.ts +66 -0
  573. package/dist/types/utils/format.d.ts.map +1 -0
  574. package/dist/types/utils/orderClassification.d.ts +47 -0
  575. package/dist/types/utils/orderClassification.d.ts.map +1 -0
  576. package/dist/types/utils/orderMath.d.ts +44 -0
  577. package/dist/types/utils/orderMath.d.ts.map +1 -0
  578. package/dist/types/utils/parse.d.ts +21 -0
  579. package/dist/types/utils/parse.d.ts.map +1 -0
  580. package/dist/types/utils/positionMath.d.ts +107 -0
  581. package/dist/types/utils/positionMath.d.ts.map +1 -0
  582. package/dist/types/utils/signTypedData.d.ts +13 -10
  583. package/dist/types/utils/signTypedData.d.ts.map +1 -1
  584. package/dist/types/utils/sleep.d.ts +5 -0
  585. package/dist/types/utils/sleep.d.ts.map +1 -1
  586. package/dist/types/utils/units.d.ts +27 -0
  587. package/dist/types/utils/units.d.ts.map +1 -0
  588. package/dist/types/utils/validation.d.ts +18 -0
  589. package/dist/types/utils/validation.d.ts.map +1 -0
  590. package/dist/types/version.d.ts +1 -1
  591. package/dist/types/version.d.ts.map +1 -1
  592. package/dist/types/websocket/PerpsWsClient.d.ts +100 -0
  593. package/dist/types/websocket/PerpsWsClient.d.ts.map +1 -0
  594. package/dist/types/websocket/ReconnectingWebSocket.d.ts +130 -0
  595. package/dist/types/websocket/ReconnectingWebSocket.d.ts.map +1 -0
  596. package/dist/types/websocket/WsProviderBase.d.ts +89 -0
  597. package/dist/types/websocket/WsProviderBase.d.ts.map +1 -0
  598. package/dist/types/websocket/cachePromise.d.ts +14 -0
  599. package/dist/types/websocket/cachePromise.d.ts.map +1 -0
  600. package/dist/types/websocket/types.d.ts +60 -0
  601. package/dist/types/websocket/types.d.ts.map +1 -0
  602. package/dist/types/websocket/wsLog.d.ts +50 -0
  603. package/dist/types/websocket/wsLog.d.ts.map +1 -0
  604. package/package.json +12 -50
  605. package/src/client/PerpsClient.ts +549 -435
  606. package/src/client/bindProvider.ts +24 -0
  607. package/src/client/createPerpsClient.ts +61 -80
  608. package/src/client/requireProvider.ts +29 -0
  609. package/src/errors/PerpsError.ts +11 -22
  610. package/src/errors/constants.ts +8 -13
  611. package/src/index.ts +189 -65
  612. package/src/registry/assetRegistry.ts +62 -0
  613. package/src/registry/marketRegistry.ts +100 -0
  614. package/src/registry/referenceDataRegistry.ts +95 -0
  615. package/src/services/createAction.ts +52 -0
  616. package/src/services/executeAction.ts +56 -0
  617. package/src/services/getAccount.ts +26 -27
  618. package/src/services/getActivity.ts +57 -0
  619. package/src/services/getAssets.ts +38 -0
  620. package/src/services/getFills.ts +55 -0
  621. package/src/services/getMarket.ts +34 -23
  622. package/src/services/getMarkets.ts +21 -18
  623. package/src/services/getMeta.ts +30 -0
  624. package/src/services/getOhlcv.ts +21 -27
  625. package/src/services/getOrder.ts +23 -27
  626. package/src/services/getOrderbook.ts +18 -30
  627. package/src/services/getOrders.ts +51 -0
  628. package/src/services/getPositions.ts +51 -0
  629. package/src/services/getPrices.ts +16 -31
  630. package/src/services/getProviders.ts +31 -0
  631. package/src/services/getQuote.ts +58 -0
  632. package/src/services/getTermsAcceptance.ts +32 -0
  633. package/src/services/resolveQuote.ts +122 -0
  634. package/src/services/resolveSubscribeQuote.ts +109 -0
  635. package/src/storage/parseStoredRecord.ts +55 -0
  636. package/src/{agent → storage}/storage.ts +6 -4
  637. package/src/storage/types.ts +13 -0
  638. package/src/transport/fetchWithRetry.ts +116 -0
  639. package/src/transport/request.ts +123 -0
  640. package/src/transport/retryPolicy.ts +202 -0
  641. package/src/types/api.ts +239 -0
  642. package/src/types/config.ts +79 -0
  643. package/src/types/provider.ts +429 -0
  644. package/src/utils/accountSummary.ts +46 -0
  645. package/src/utils/assertNever.ts +23 -0
  646. package/src/utils/calculations.ts +406 -0
  647. package/src/utils/depositChain.ts +37 -0
  648. package/src/utils/explorer.ts +51 -0
  649. package/src/utils/fillClassification.ts +51 -0
  650. package/src/utils/format.ts +212 -0
  651. package/src/utils/orderClassification.ts +96 -0
  652. package/src/utils/orderMath.ts +134 -0
  653. package/src/utils/parse.ts +29 -0
  654. package/src/utils/positionMath.ts +149 -0
  655. package/src/utils/signTypedData.ts +25 -15
  656. package/src/utils/sleep.ts +5 -0
  657. package/src/utils/units.ts +39 -0
  658. package/src/utils/validation.ts +38 -0
  659. package/src/version.ts +1 -1
  660. package/src/websocket/PerpsWsClient.ts +204 -0
  661. package/src/websocket/ReconnectingWebSocket.ts +353 -0
  662. package/src/websocket/WsProviderBase.ts +333 -0
  663. package/src/websocket/cachePromise.ts +30 -0
  664. package/src/websocket/types.ts +75 -0
  665. package/src/websocket/wsLog.ts +82 -0
  666. package/dist/cjs/agent/AgentManager.d.ts +0 -15
  667. package/dist/cjs/agent/AgentManager.d.ts.map +0 -1
  668. package/dist/cjs/agent/AgentManager.js +0 -80
  669. package/dist/cjs/agent/AgentManager.js.map +0 -1
  670. package/dist/cjs/agent/storage.d.ts.map +0 -1
  671. package/dist/cjs/agent/storage.js.map +0 -1
  672. package/dist/cjs/agent/types.d.ts.map +0 -1
  673. package/dist/cjs/client/types.d.ts +0 -62
  674. package/dist/cjs/client/types.d.ts.map +0 -1
  675. package/dist/cjs/dex/hyperliquid.d.ts +0 -3
  676. package/dist/cjs/dex/hyperliquid.d.ts.map +0 -1
  677. package/dist/cjs/dex/hyperliquid.js +0 -21
  678. package/dist/cjs/dex/hyperliquid.js.map +0 -1
  679. package/dist/cjs/dex/registry.d.ts +0 -3
  680. package/dist/cjs/dex/registry.d.ts.map +0 -1
  681. package/dist/cjs/dex/registry.js +0 -16
  682. package/dist/cjs/dex/registry.js.map +0 -1
  683. package/dist/cjs/dex/types.d.ts +0 -13
  684. package/dist/cjs/dex/types.d.ts.map +0 -1
  685. package/dist/cjs/errors/AgentError.d.ts +0 -10
  686. package/dist/cjs/errors/AgentError.d.ts.map +0 -1
  687. package/dist/cjs/errors/AgentError.js +0 -23
  688. package/dist/cjs/errors/AgentError.js.map +0 -1
  689. package/dist/cjs/errors/HTTPError.d.ts +0 -11
  690. package/dist/cjs/errors/HTTPError.d.ts.map +0 -1
  691. package/dist/cjs/errors/HTTPError.js +0 -62
  692. package/dist/cjs/errors/HTTPError.js.map +0 -1
  693. package/dist/cjs/errors/PerpsSDKError.d.ts +0 -9
  694. package/dist/cjs/errors/PerpsSDKError.d.ts.map +0 -1
  695. package/dist/cjs/errors/PerpsSDKError.js +0 -36
  696. package/dist/cjs/errors/PerpsSDKError.js.map +0 -1
  697. package/dist/cjs/errors/ServerError.d.ts +0 -10
  698. package/dist/cjs/errors/ServerError.d.ts.map +0 -1
  699. package/dist/cjs/errors/ServerError.js +0 -24
  700. package/dist/cjs/errors/ServerError.js.map +0 -1
  701. package/dist/cjs/errors/ValidationError.d.ts +0 -9
  702. package/dist/cjs/errors/ValidationError.d.ts.map +0 -1
  703. package/dist/cjs/errors/ValidationError.js +0 -23
  704. package/dist/cjs/errors/ValidationError.js.map +0 -1
  705. package/dist/cjs/errors/utils/rootCause.d.ts +0 -6
  706. package/dist/cjs/errors/utils/rootCause.d.ts.map +0 -1
  707. package/dist/cjs/errors/utils/rootCause.js +0 -41
  708. package/dist/cjs/errors/utils/rootCause.js.map +0 -1
  709. package/dist/cjs/realtime/PerpsWsClient.d.ts +0 -14
  710. package/dist/cjs/realtime/PerpsWsClient.d.ts.map +0 -1
  711. package/dist/cjs/realtime/PerpsWsClient.js +0 -56
  712. package/dist/cjs/realtime/PerpsWsClient.js.map +0 -1
  713. package/dist/cjs/realtime/ReconnectingWebSocket.d.ts +0 -36
  714. package/dist/cjs/realtime/ReconnectingWebSocket.d.ts.map +0 -1
  715. package/dist/cjs/realtime/ReconnectingWebSocket.js +0 -132
  716. package/dist/cjs/realtime/ReconnectingWebSocket.js.map +0 -1
  717. package/dist/cjs/realtime/hyperliquid/HyperliquidWsProvider.d.ts +0 -26
  718. package/dist/cjs/realtime/hyperliquid/HyperliquidWsProvider.d.ts.map +0 -1
  719. package/dist/cjs/realtime/hyperliquid/HyperliquidWsProvider.js +0 -225
  720. package/dist/cjs/realtime/hyperliquid/HyperliquidWsProvider.js.map +0 -1
  721. package/dist/cjs/realtime/hyperliquid/types.d.ts +0 -35
  722. package/dist/cjs/realtime/hyperliquid/types.d.ts.map +0 -1
  723. package/dist/cjs/realtime/hyperliquid/types.js.map +0 -1
  724. package/dist/cjs/realtime/types.d.ts +0 -10
  725. package/dist/cjs/realtime/types.d.ts.map +0 -1
  726. package/dist/cjs/realtime/types.js +0 -3
  727. package/dist/cjs/services/cancelOrder.d.ts +0 -10
  728. package/dist/cjs/services/cancelOrder.d.ts.map +0 -1
  729. package/dist/cjs/services/cancelOrder.js +0 -16
  730. package/dist/cjs/services/cancelOrder.js.map +0 -1
  731. package/dist/cjs/services/createAuthorization.d.ts +0 -10
  732. package/dist/cjs/services/createAuthorization.d.ts.map +0 -1
  733. package/dist/cjs/services/createAuthorization.js +0 -16
  734. package/dist/cjs/services/createAuthorization.js.map +0 -1
  735. package/dist/cjs/services/createOrder.d.ts +0 -21
  736. package/dist/cjs/services/createOrder.d.ts.map +0 -1
  737. package/dist/cjs/services/createOrder.js +0 -27
  738. package/dist/cjs/services/createOrder.js.map +0 -1
  739. package/dist/cjs/services/createWithdrawal.d.ts +0 -9
  740. package/dist/cjs/services/createWithdrawal.d.ts.map +0 -1
  741. package/dist/cjs/services/createWithdrawal.js +0 -15
  742. package/dist/cjs/services/createWithdrawal.js.map +0 -1
  743. package/dist/cjs/services/getDexes.d.ts +0 -4
  744. package/dist/cjs/services/getDexes.d.ts.map +0 -1
  745. package/dist/cjs/services/getDexes.js +0 -8
  746. package/dist/cjs/services/getDexes.js.map +0 -1
  747. package/dist/cjs/services/getHistory.d.ts +0 -10
  748. package/dist/cjs/services/getHistory.d.ts.map +0 -1
  749. package/dist/cjs/services/getHistory.js +0 -14
  750. package/dist/cjs/services/getHistory.js.map +0 -1
  751. package/dist/cjs/services/submitAuthorization.d.ts +0 -10
  752. package/dist/cjs/services/submitAuthorization.d.ts.map +0 -1
  753. package/dist/cjs/services/submitAuthorization.js.map +0 -1
  754. package/dist/cjs/services/submitOrder.d.ts +0 -10
  755. package/dist/cjs/services/submitOrder.d.ts.map +0 -1
  756. package/dist/cjs/services/submitOrder.js +0 -16
  757. package/dist/cjs/services/submitOrder.js.map +0 -1
  758. package/dist/cjs/services/submitWithdrawal.d.ts +0 -9
  759. package/dist/cjs/services/submitWithdrawal.d.ts.map +0 -1
  760. package/dist/cjs/services/submitWithdrawal.js +0 -15
  761. package/dist/cjs/services/submitWithdrawal.js.map +0 -1
  762. package/dist/cjs/utils/request.d.ts.map +0 -1
  763. package/dist/cjs/utils/request.js +0 -60
  764. package/dist/cjs/utils/request.js.map +0 -1
  765. package/dist/esm/agent/AgentManager.d.ts +0 -45
  766. package/dist/esm/agent/AgentManager.d.ts.map +0 -1
  767. package/dist/esm/agent/AgentManager.js +0 -110
  768. package/dist/esm/agent/AgentManager.js.map +0 -1
  769. package/dist/esm/agent/storage.d.ts.map +0 -1
  770. package/dist/esm/agent/storage.js.map +0 -1
  771. package/dist/esm/agent/types.d.ts +0 -23
  772. package/dist/esm/agent/types.d.ts.map +0 -1
  773. package/dist/esm/agent/types.js.map +0 -1
  774. package/dist/esm/client/types.d.ts +0 -134
  775. package/dist/esm/client/types.d.ts.map +0 -1
  776. package/dist/esm/client/types.js.map +0 -1
  777. package/dist/esm/dex/hyperliquid.d.ts +0 -3
  778. package/dist/esm/dex/hyperliquid.d.ts.map +0 -1
  779. package/dist/esm/dex/hyperliquid.js +0 -19
  780. package/dist/esm/dex/hyperliquid.js.map +0 -1
  781. package/dist/esm/dex/registry.d.ts +0 -3
  782. package/dist/esm/dex/registry.d.ts.map +0 -1
  783. package/dist/esm/dex/registry.js +0 -13
  784. package/dist/esm/dex/registry.js.map +0 -1
  785. package/dist/esm/dex/types.d.ts +0 -15
  786. package/dist/esm/dex/types.d.ts.map +0 -1
  787. package/dist/esm/dex/types.js +0 -2
  788. package/dist/esm/dex/types.js.map +0 -1
  789. package/dist/esm/errors/AgentError.d.ts +0 -25
  790. package/dist/esm/errors/AgentError.d.ts.map +0 -1
  791. package/dist/esm/errors/AgentError.js +0 -35
  792. package/dist/esm/errors/AgentError.js.map +0 -1
  793. package/dist/esm/errors/HTTPError.d.ts +0 -11
  794. package/dist/esm/errors/HTTPError.d.ts.map +0 -1
  795. package/dist/esm/errors/HTTPError.js +0 -61
  796. package/dist/esm/errors/HTTPError.js.map +0 -1
  797. package/dist/esm/errors/PerpsSDKError.d.ts +0 -40
  798. package/dist/esm/errors/PerpsSDKError.d.ts.map +0 -1
  799. package/dist/esm/errors/PerpsSDKError.js +0 -67
  800. package/dist/esm/errors/PerpsSDKError.js.map +0 -1
  801. package/dist/esm/errors/ServerError.d.ts +0 -23
  802. package/dist/esm/errors/ServerError.d.ts.map +0 -1
  803. package/dist/esm/errors/ServerError.js +0 -34
  804. package/dist/esm/errors/ServerError.js.map +0 -1
  805. package/dist/esm/errors/ValidationError.d.ts +0 -23
  806. package/dist/esm/errors/ValidationError.d.ts.map +0 -1
  807. package/dist/esm/errors/ValidationError.js +0 -34
  808. package/dist/esm/errors/ValidationError.js.map +0 -1
  809. package/dist/esm/errors/utils/rootCause.d.ts +0 -71
  810. package/dist/esm/errors/utils/rootCause.d.ts.map +0 -1
  811. package/dist/esm/errors/utils/rootCause.js +0 -99
  812. package/dist/esm/errors/utils/rootCause.js.map +0 -1
  813. package/dist/esm/realtime/PerpsWsClient.d.ts +0 -14
  814. package/dist/esm/realtime/PerpsWsClient.d.ts.map +0 -1
  815. package/dist/esm/realtime/PerpsWsClient.js +0 -52
  816. package/dist/esm/realtime/PerpsWsClient.js.map +0 -1
  817. package/dist/esm/realtime/ReconnectingWebSocket.d.ts.map +0 -1
  818. package/dist/esm/realtime/ReconnectingWebSocket.js +0 -128
  819. package/dist/esm/realtime/ReconnectingWebSocket.js.map +0 -1
  820. package/dist/esm/realtime/hyperliquid/HyperliquidWsProvider.d.ts +0 -26
  821. package/dist/esm/realtime/hyperliquid/HyperliquidWsProvider.d.ts.map +0 -1
  822. package/dist/esm/realtime/hyperliquid/HyperliquidWsProvider.js +0 -222
  823. package/dist/esm/realtime/hyperliquid/HyperliquidWsProvider.js.map +0 -1
  824. package/dist/esm/realtime/hyperliquid/types.d.ts +0 -35
  825. package/dist/esm/realtime/hyperliquid/types.d.ts.map +0 -1
  826. package/dist/esm/realtime/hyperliquid/types.js +0 -4
  827. package/dist/esm/realtime/hyperliquid/types.js.map +0 -1
  828. package/dist/esm/realtime/types.d.ts +0 -10
  829. package/dist/esm/realtime/types.d.ts.map +0 -1
  830. package/dist/esm/realtime/types.js +0 -2
  831. package/dist/esm/realtime/types.js.map +0 -1
  832. package/dist/esm/services/cancelOrder.d.ts +0 -51
  833. package/dist/esm/services/cancelOrder.d.ts.map +0 -1
  834. package/dist/esm/services/cancelOrder.js +0 -50
  835. package/dist/esm/services/cancelOrder.js.map +0 -1
  836. package/dist/esm/services/createAuthorization.d.ts +0 -51
  837. package/dist/esm/services/createAuthorization.d.ts.map +0 -1
  838. package/dist/esm/services/createAuthorization.js +0 -50
  839. package/dist/esm/services/createAuthorization.js.map +0 -1
  840. package/dist/esm/services/createOrder.d.ts +0 -74
  841. package/dist/esm/services/createOrder.d.ts.map +0 -1
  842. package/dist/esm/services/createOrder.js +0 -62
  843. package/dist/esm/services/createOrder.js.map +0 -1
  844. package/dist/esm/services/createWithdrawal.d.ts +0 -49
  845. package/dist/esm/services/createWithdrawal.d.ts.map +0 -1
  846. package/dist/esm/services/createWithdrawal.js +0 -49
  847. package/dist/esm/services/createWithdrawal.js.map +0 -1
  848. package/dist/esm/services/getDexes.d.ts +0 -20
  849. package/dist/esm/services/getDexes.d.ts.map +0 -1
  850. package/dist/esm/services/getDexes.js +0 -21
  851. package/dist/esm/services/getDexes.js.map +0 -1
  852. package/dist/esm/services/getHistory.d.ts +0 -45
  853. package/dist/esm/services/getHistory.d.ts.map +0 -1
  854. package/dist/esm/services/getHistory.js +0 -42
  855. package/dist/esm/services/getHistory.js.map +0 -1
  856. package/dist/esm/services/submitAuthorization.d.ts +0 -42
  857. package/dist/esm/services/submitAuthorization.d.ts.map +0 -1
  858. package/dist/esm/services/submitAuthorization.js +0 -41
  859. package/dist/esm/services/submitAuthorization.js.map +0 -1
  860. package/dist/esm/services/submitOrder.d.ts +0 -44
  861. package/dist/esm/services/submitOrder.d.ts.map +0 -1
  862. package/dist/esm/services/submitOrder.js +0 -43
  863. package/dist/esm/services/submitOrder.js.map +0 -1
  864. package/dist/esm/services/submitWithdrawal.d.ts +0 -40
  865. package/dist/esm/services/submitWithdrawal.d.ts.map +0 -1
  866. package/dist/esm/services/submitWithdrawal.js +0 -40
  867. package/dist/esm/services/submitWithdrawal.js.map +0 -1
  868. package/dist/esm/utils/request.d.ts +0 -26
  869. package/dist/esm/utils/request.d.ts.map +0 -1
  870. package/dist/esm/utils/request.js +0 -78
  871. package/dist/esm/utils/request.js.map +0 -1
  872. package/dist/types/agent/AgentManager.d.ts +0 -45
  873. package/dist/types/agent/AgentManager.d.ts.map +0 -1
  874. package/dist/types/agent/storage.d.ts.map +0 -1
  875. package/dist/types/agent/types.d.ts +0 -23
  876. package/dist/types/agent/types.d.ts.map +0 -1
  877. package/dist/types/client/types.d.ts +0 -134
  878. package/dist/types/client/types.d.ts.map +0 -1
  879. package/dist/types/dex/hyperliquid.d.ts +0 -3
  880. package/dist/types/dex/hyperliquid.d.ts.map +0 -1
  881. package/dist/types/dex/registry.d.ts +0 -3
  882. package/dist/types/dex/registry.d.ts.map +0 -1
  883. package/dist/types/dex/types.d.ts +0 -15
  884. package/dist/types/dex/types.d.ts.map +0 -1
  885. package/dist/types/errors/AgentError.d.ts +0 -25
  886. package/dist/types/errors/AgentError.d.ts.map +0 -1
  887. package/dist/types/errors/HTTPError.d.ts +0 -11
  888. package/dist/types/errors/HTTPError.d.ts.map +0 -1
  889. package/dist/types/errors/PerpsSDKError.d.ts +0 -40
  890. package/dist/types/errors/PerpsSDKError.d.ts.map +0 -1
  891. package/dist/types/errors/ServerError.d.ts +0 -23
  892. package/dist/types/errors/ServerError.d.ts.map +0 -1
  893. package/dist/types/errors/ValidationError.d.ts +0 -23
  894. package/dist/types/errors/ValidationError.d.ts.map +0 -1
  895. package/dist/types/errors/utils/rootCause.d.ts +0 -71
  896. package/dist/types/errors/utils/rootCause.d.ts.map +0 -1
  897. package/dist/types/realtime/PerpsWsClient.d.ts +0 -14
  898. package/dist/types/realtime/PerpsWsClient.d.ts.map +0 -1
  899. package/dist/types/realtime/ReconnectingWebSocket.d.ts +0 -36
  900. package/dist/types/realtime/ReconnectingWebSocket.d.ts.map +0 -1
  901. package/dist/types/realtime/hyperliquid/HyperliquidWsProvider.d.ts +0 -26
  902. package/dist/types/realtime/hyperliquid/HyperliquidWsProvider.d.ts.map +0 -1
  903. package/dist/types/realtime/hyperliquid/types.d.ts +0 -35
  904. package/dist/types/realtime/hyperliquid/types.d.ts.map +0 -1
  905. package/dist/types/realtime/types.d.ts +0 -10
  906. package/dist/types/realtime/types.d.ts.map +0 -1
  907. package/dist/types/services/cancelOrder.d.ts +0 -51
  908. package/dist/types/services/cancelOrder.d.ts.map +0 -1
  909. package/dist/types/services/createAuthorization.d.ts +0 -51
  910. package/dist/types/services/createAuthorization.d.ts.map +0 -1
  911. package/dist/types/services/createOrder.d.ts +0 -74
  912. package/dist/types/services/createOrder.d.ts.map +0 -1
  913. package/dist/types/services/createWithdrawal.d.ts +0 -49
  914. package/dist/types/services/createWithdrawal.d.ts.map +0 -1
  915. package/dist/types/services/getDexes.d.ts +0 -20
  916. package/dist/types/services/getDexes.d.ts.map +0 -1
  917. package/dist/types/services/getHistory.d.ts +0 -45
  918. package/dist/types/services/getHistory.d.ts.map +0 -1
  919. package/dist/types/services/submitAuthorization.d.ts +0 -42
  920. package/dist/types/services/submitAuthorization.d.ts.map +0 -1
  921. package/dist/types/services/submitOrder.d.ts +0 -44
  922. package/dist/types/services/submitOrder.d.ts.map +0 -1
  923. package/dist/types/services/submitWithdrawal.d.ts +0 -40
  924. package/dist/types/services/submitWithdrawal.d.ts.map +0 -1
  925. package/dist/types/utils/request.d.ts +0 -26
  926. package/dist/types/utils/request.d.ts.map +0 -1
  927. package/src/agent/AgentManager.ts +0 -135
  928. package/src/agent/types.ts +0 -24
  929. package/src/client/types.ts +0 -162
  930. package/src/dex/hyperliquid.ts +0 -20
  931. package/src/dex/registry.ts +0 -15
  932. package/src/dex/types.ts +0 -16
  933. package/src/errors/AgentError.ts +0 -43
  934. package/src/errors/HTTPError.ts +0 -72
  935. package/src/errors/PerpsSDKError.ts +0 -79
  936. package/src/errors/ServerError.ts +0 -41
  937. package/src/errors/ValidationError.ts +0 -38
  938. package/src/errors/utils/rootCause.ts +0 -112
  939. package/src/realtime/PerpsWsClient.ts +0 -73
  940. package/src/realtime/ReconnectingWebSocket.ts +0 -156
  941. package/src/realtime/hyperliquid/HyperliquidWsProvider.ts +0 -278
  942. package/src/realtime/hyperliquid/types.ts +0 -48
  943. package/src/realtime/types.ts +0 -16
  944. package/src/services/cancelOrder.ts +0 -75
  945. package/src/services/createAuthorization.ts +0 -79
  946. package/src/services/createOrder.ts +0 -116
  947. package/src/services/createWithdrawal.ts +0 -76
  948. package/src/services/getDexes.ts +0 -34
  949. package/src/services/getHistory.ts +0 -62
  950. package/src/services/submitAuthorization.ts +0 -70
  951. package/src/services/submitOrder.ts +0 -72
  952. package/src/services/submitWithdrawal.ts +0 -67
  953. package/src/utils/request.ts +0 -116
  954. /package/dist/cjs/{agent → storage}/storage.d.ts +0 -0
  955. /package/dist/cjs/{agent → storage}/storage.js +0 -0
  956. /package/dist/cjs/{agent → storage}/types.js +0 -0
  957. /package/dist/cjs/{client → websocket}/types.js +0 -0
  958. /package/dist/esm/{agent → storage}/types.js +0 -0
  959. /package/dist/esm/{client → websocket}/types.js +0 -0
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Token unit conversion utilities.
3
+ */
4
+
5
+ import { formatUnits } from 'viem'
6
+
7
+ /**
8
+ * Convert a base-unit amount (bigint string) to a human-readable decimal string.
9
+ *
10
+ * @param amount - Amount in base units (e.g. "1000000" for 1 USDC)
11
+ * @param decimals - Token decimals (e.g. 6 for USDC)
12
+ * @returns Decimal string (e.g. "1.0"); `"0"` when `amount` is not a valid
13
+ * bigint
14
+ * @example
15
+ * ```ts
16
+ * fromBaseUnits('1000000', 6) // '1'
17
+ * ```
18
+ * @public
19
+ */
20
+ export function fromBaseUnits(amount: string, decimals: number): string {
21
+ try {
22
+ return formatUnits(BigInt(amount), decimals)
23
+ } catch {
24
+ return '0'
25
+ }
26
+ }
27
+
28
+ /**
29
+ * Convert a base-unit amount to a number.
30
+ *
31
+ * @param amount - Amount in base units
32
+ * @param decimals - Token decimals
33
+ * @returns Numeric value, or 0 if parsing fails
34
+ * @public
35
+ */
36
+ export function fromBaseUnitsNumber(amount: string, decimals: number): number {
37
+ const value = Number(fromBaseUnits(amount, decimals))
38
+ return Number.isFinite(value) ? value : 0
39
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Order validation utilities.
3
+ */
4
+
5
+ /**
6
+ * Validate margin input against available balance and exchange minimums.
7
+ *
8
+ * @param margin - Margin amount in USD
9
+ * @param _leverage - Position leverage (reserved for future use)
10
+ * @param availableBalance - Available balance, or null if unknown
11
+ * @param _feeRate - Fee rate as decimal, or null if unknown (reserved for future use)
12
+ * @param minMarginUsd - Minimum margin requirement in USD (exchange-specific).
13
+ * Source this from the selected provider's `minOrderValueUsd` metadata
14
+ * (see `@lifi/perps-types` `Provider`) rather than a client-side constant.
15
+ * @returns Error code: 'insufficient' | 'below-minimum' | '' (valid)
16
+ * @public
17
+ */
18
+ export function validateMargin(
19
+ margin: number,
20
+ _leverage: number,
21
+ availableBalance: number | null,
22
+ _feeRate: number | null,
23
+ minMarginUsd: number
24
+ ): string {
25
+ if (margin <= 0) {
26
+ return ''
27
+ }
28
+
29
+ if (availableBalance !== null && margin > availableBalance) {
30
+ return 'insufficient'
31
+ }
32
+
33
+ if (margin < minMarginUsd) {
34
+ return 'below-minimum'
35
+ }
36
+
37
+ return ''
38
+ }
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  export const name = '@lifi/perps-sdk'
2
- export const version = '0.1.1-alpha.9'
2
+ export const version = '1.0.0'
@@ -0,0 +1,204 @@
1
+ import { PerpsErrorCode, type Subscription } from '@lifi/perps-types'
2
+ import { PerpsError } from '../errors/PerpsError.js'
3
+ import { getProviders } from '../services/getProviders.js'
4
+ import type { GetQuoteParams } from '../services/getQuote.js'
5
+ import type { PerpsSDKClient, QuoteListener } from '../types/provider.js'
6
+ import { cachePromise } from './cachePromise.js'
7
+ import type {
8
+ EventForSubscription,
9
+ SubscriptionListener,
10
+ WsProvider,
11
+ WsStatusListener,
12
+ } from './types.js'
13
+
14
+ /**
15
+ * Factory for a per-provider WS plugin. Invoked once per provider key the
16
+ * first time `subscribe(...)` is called against it.
17
+ *
18
+ * @public
19
+ */
20
+ export type WsProviderFactory = (params: {
21
+ /** Provider key (e.g. `'lighter'`, `'hyperliquid'`). */
22
+ provider: string
23
+ /** WS URL discovered from `/providers`. */
24
+ wsUrl: string
25
+ /**
26
+ * Markets visible to this provider via `/providers`, optionally filtered
27
+ * by the consumer's `createPerpsClient({ providers: { [key]: { markets } } })`
28
+ * config. Each provider interprets these its own way — Hyperliquid uses
29
+ * them to decide which sub-DEXes to subscribe to; Lighter ignores them.
30
+ */
31
+ markets: string[]
32
+ /**
33
+ * The SDK client. WS providers use it to call core services (e.g.
34
+ * `getAssets` to source the wire-id ↔ display-symbol map) without
35
+ * duplicating backend orchestration in the WS layer.
36
+ */
37
+ client: PerpsSDKClient
38
+ }) => WsProvider
39
+
40
+ /**
41
+ * Options for {@link PerpsWsClient}.
42
+ *
43
+ * @public
44
+ */
45
+ export interface PerpsWsClientOptions {
46
+ /**
47
+ * Per-provider WS factory map. Each key (e.g. `'hyperliquid'`,
48
+ * `'lighter'`) maps to a factory that returns a `WsProvider`. Concrete
49
+ * implementations ship with the provider packages — e.g.
50
+ * `@lifi/perps-sdk-provider-hyperliquid` exports `HyperliquidWsProvider`,
51
+ * `@lifi/perps-sdk-provider-lighter` exports `LighterWsProvider`.
52
+ * Subscribing to a provider key without a registered factory throws.
53
+ */
54
+ wsProviders?: Record<string, WsProviderFactory>
55
+ }
56
+
57
+ /**
58
+ * Realtime client: lazily instantiates a per-provider {@link WsProvider} on
59
+ * first subscription and fans subscriptions out to it.
60
+ *
61
+ * @public
62
+ */
63
+ export class PerpsWsClient {
64
+ private readonly client: PerpsSDKClient
65
+ private readonly options: PerpsWsClientOptions
66
+ private providers = new Map<string, WsProvider>()
67
+ private initPromises = new Map<string, Promise<WsProvider>>()
68
+
69
+ constructor(client: PerpsSDKClient, options: PerpsWsClientOptions = {}) {
70
+ this.client = client
71
+ this.options = options
72
+ }
73
+
74
+ /**
75
+ * Subscribe to a realtime channel, lazily creating the provider's WS
76
+ * connection. Returns an unsubscribe function.
77
+ *
78
+ * @param onStatus - Optional listener for the underlying connection's
79
+ * health. Fires `reconnecting` on a transient drop and the terminal
80
+ * `disconnected` once auto-reconnect is abandoned, so consumers can
81
+ * surface a reconnecting/disconnected state instead of silently showing
82
+ * stale data.
83
+ * @throws {PerpsError} When no WS provider factory is registered for the
84
+ * subscription's `dex`.
85
+ * @public
86
+ */
87
+ async subscribe<S extends Subscription>(
88
+ sub: S,
89
+ listener: (event: EventForSubscription<S>) => void,
90
+ onStatus?: WsStatusListener
91
+ ): Promise<() => void> {
92
+ const providerKey = sub.dex
93
+ const provider = await this.getOrCreateProvider(providerKey)
94
+ provider.reconnect()
95
+ return provider.subscribe(sub, listener as SubscriptionListener, onStatus)
96
+ }
97
+
98
+ /**
99
+ * Stream live fill quotes for `params.symbol` on `params.provider`, lazily
100
+ * creating the provider's WS connection. The provider's WS plugin layers the
101
+ * quote on its orderbook channel, so a concurrent orderbook subscription on
102
+ * the same market shares one wire subscription. Returns an unsubscribe
103
+ * function.
104
+ *
105
+ * @throws {PerpsError} When no WS provider factory is registered for
106
+ * `params.provider`, or no market matches the symbol+type.
107
+ * @public
108
+ */
109
+ async subscribeQuote(
110
+ params: GetQuoteParams,
111
+ onQuote: QuoteListener
112
+ ): Promise<() => void> {
113
+ const provider = await this.getOrCreateProvider(params.provider)
114
+ return provider.subscribeQuote(
115
+ {
116
+ symbol: params.symbol,
117
+ side: params.side,
118
+ size: params.size,
119
+ type: params.type,
120
+ },
121
+ onQuote
122
+ )
123
+ }
124
+
125
+ /**
126
+ * Close every open provider WS connection and drop all cached providers.
127
+ *
128
+ * @public
129
+ */
130
+ close() {
131
+ for (const p of this.providers.values()) {
132
+ p.close()
133
+ }
134
+ this.providers.clear()
135
+ this.initPromises.clear()
136
+ }
137
+
138
+ /**
139
+ * Reconnect an already-created provider when its socket reached terminal
140
+ * `disconnected`. Safe no-op when the provider is unknown or not terminal.
141
+ *
142
+ * @public
143
+ */
144
+ reconnect(provider: string): void {
145
+ this.providers.get(provider)?.reconnect()
146
+ }
147
+
148
+ private async getOrCreateProvider(provider: string): Promise<WsProvider> {
149
+ const existing = this.providers.get(provider)
150
+ if (existing) {
151
+ return existing
152
+ }
153
+
154
+ return cachePromise(
155
+ () => this.initPromises.get(provider),
156
+ (p) => {
157
+ if (p) {
158
+ this.initPromises.set(provider, p)
159
+ } else {
160
+ this.initPromises.delete(provider)
161
+ }
162
+ },
163
+ () => this.initProvider(provider)
164
+ )
165
+ }
166
+
167
+ private async initProvider(provider: string): Promise<WsProvider> {
168
+ const factory = this.options.wsProviders?.[provider]
169
+ if (factory === undefined) {
170
+ throw new PerpsError(
171
+ PerpsErrorCode.SDKError,
172
+ `No WS provider factory registered for '${provider}'. Pass one via ` +
173
+ 'new PerpsWsClient(client, { wsProviders: { [key]: factory } }).'
174
+ )
175
+ }
176
+
177
+ const { providers } = await getProviders(this.client)
178
+
179
+ const providerInfo = providers.find((d) => d.key === provider)
180
+ if (!providerInfo?.wsUrl) {
181
+ throw new Error(`No WebSocket URL found for provider: ${provider}`)
182
+ }
183
+
184
+ const allMarkets = (providerInfo.categories ?? []) as Array<{
185
+ id: string
186
+ }>
187
+ const providerConfig = this.client.config.providers?.[provider]
188
+ const configuredMarkets = providerConfig?.markets
189
+ const markets = (
190
+ configuredMarkets
191
+ ? allMarkets.filter((m) => configuredMarkets.includes(m.id))
192
+ : allMarkets
193
+ ).map((m) => m.id)
194
+
195
+ const wsProvider = factory({
196
+ provider,
197
+ wsUrl: providerInfo.wsUrl,
198
+ markets,
199
+ client: this.client,
200
+ })
201
+ this.providers.set(provider, wsProvider)
202
+ return wsProvider
203
+ }
204
+ }
@@ -0,0 +1,353 @@
1
+ import type {
2
+ CloseEvent as PartySocketCloseEvent,
3
+ ErrorEvent as PartySocketErrorEvent,
4
+ } from 'partysocket/ws'
5
+ import PartySocketWebSocket from 'partysocket/ws'
6
+ import type { WsConnectionStatus, WsStatusListener } from './types.js'
7
+ import { wsLog } from './wsLog.js'
8
+
9
+ type WsEventMap = {
10
+ open: () => void
11
+ close: (code: number, reason: string) => void
12
+ error: (error: Event) => void
13
+ message: (data: string) => void
14
+ }
15
+
16
+ type WsEvent = keyof WsEventMap
17
+
18
+ /**
19
+ * Default reconnect attempt cap. With the jittered backoff below, ten attempts
20
+ * span roughly 20–60s of retries before the socket is declared `disconnected`
21
+ * — long enough for a live trading feed to ride out a transient network blip.
22
+ */
23
+ const DEFAULT_MAX_RETRIES = 10
24
+
25
+ /** Default watchdog window: three keepalive intervals without inbound traffic. */
26
+ const DEFAULT_STALE_WINDOW_PING_INTERVALS = 3
27
+
28
+ const CONNECTION_TIMEOUT_MS = 4_000
29
+ /** Uptime below which an open does not reset the retry budget, so an accept-then-drop server still exhausts. */
30
+ const MIN_UPTIME_MS = 5_000
31
+ const MAX_ENQUEUED_MESSAGES = 1_000
32
+ /** First-retry delay is drawn once per socket from [500, 1500)ms to de-synchronize reconnect storms. */
33
+ const MIN_RECONNECTION_DELAY_MS = 500
34
+ const RECONNECTION_JITTER_MS = 1_000
35
+ const MAX_RECONNECTION_DELAY_MS = 10_000
36
+
37
+ const CLOSED_ERROR = 'WebSocket closed'
38
+ const EXHAUSTED_ERROR = 'WebSocket max reconnect attempts reached'
39
+ const WS_PROVIDER_KEY = 'reconnecting-websocket'
40
+
41
+ /**
42
+ * Options for {@link ReconnectingWebSocket}.
43
+ *
44
+ * @public
45
+ */
46
+ export interface ReconnectingWebSocketOptions {
47
+ maxRetries?: number
48
+ pingIntervalMs?: number
49
+ /**
50
+ * Keepalive frame sent every `pingIntervalMs` while the socket is open.
51
+ * Framing is venue-specific, so when omitted no keepalive is sent.
52
+ */
53
+ pingPayload?: string
54
+ /**
55
+ * Stale-stream watchdog window. With `pingPayload` configured, the socket is
56
+ * force-reconnected when no inbound frame arrives within this window.
57
+ * Defaults to 3× `pingIntervalMs`.
58
+ */
59
+ staleWindowMs?: number
60
+ }
61
+
62
+ /**
63
+ * A `WebSocket` transport that auto-reconnects with jittered exponential
64
+ * backoff (`partysocket` internals), buffers sends (bounded) while
65
+ * disconnected, keepalive-pings with the caller-supplied `pingPayload`, and
66
+ * force-reconnects a silently stale stream. Surfaces the
67
+ * {@link WsConnectionStatus} state machine: `reconnecting` on transient drops,
68
+ * terminal `disconnected` once the retry budget is exhausted.
69
+ *
70
+ * @public
71
+ */
72
+ export class ReconnectingWebSocket {
73
+ private readonly socket: PartySocketWebSocket
74
+ private readonly maxRetries: number
75
+ private readonly pingIntervalMs: number
76
+ private readonly pingPayload: string | undefined
77
+ private readonly staleWindowMs: number
78
+ private closed = false
79
+ private reconnectRequested = false
80
+ private lastCloseRetryCount: number
81
+ private pingTimer: ReturnType<typeof setInterval> | null = null
82
+ private staleTimer: ReturnType<typeof setTimeout> | null = null
83
+ private listeners = {
84
+ open: new Set<WsEventMap['open']>(),
85
+ close: new Set<WsEventMap['close']>(),
86
+ error: new Set<WsEventMap['error']>(),
87
+ message: new Set<WsEventMap['message']>(),
88
+ }
89
+ private statusListeners = new Set<WsStatusListener>()
90
+ private status: WsConnectionStatus = 'reconnecting'
91
+ private readyResolvers: Array<{
92
+ resolve: () => void
93
+ reject: (e: Error) => void
94
+ }> = []
95
+
96
+ constructor(url: string, options?: ReconnectingWebSocketOptions) {
97
+ this.maxRetries = options?.maxRetries ?? DEFAULT_MAX_RETRIES
98
+ this.pingIntervalMs = options?.pingIntervalMs ?? 30_000
99
+ this.pingPayload = options?.pingPayload
100
+ this.staleWindowMs =
101
+ options?.staleWindowMs ??
102
+ this.pingIntervalMs * DEFAULT_STALE_WINDOW_PING_INTERVALS
103
+ this.socket = new PartySocketWebSocket(url, undefined, {
104
+ maxRetries: this.maxRetries,
105
+ connectionTimeout: CONNECTION_TIMEOUT_MS,
106
+ minUptime: MIN_UPTIME_MS,
107
+ maxEnqueuedMessages: MAX_ENQUEUED_MESSAGES,
108
+ minReconnectionDelay:
109
+ MIN_RECONNECTION_DELAY_MS + Math.random() * RECONNECTION_JITTER_MS,
110
+ maxReconnectionDelay: MAX_RECONNECTION_DELAY_MS,
111
+ })
112
+ this.lastCloseRetryCount = this.socket.retryCount
113
+ // The onX handlers receive the raw events; addEventListener would hand out
114
+ // partysocket's clones, which rewrite an empty close reason in Node.
115
+ this.socket.onopen = this.handleOpen
116
+ this.socket.onclose = this.handleClose
117
+ this.socket.onerror = this.handleError
118
+ this.socket.onmessage = this.handleMessage
119
+ }
120
+
121
+ private handleOpen = () => {
122
+ this.startPing()
123
+ this.armWatchdog()
124
+ this.setStatus('connected')
125
+ for (const fn of this.listeners.open) {
126
+ this.callListener('open', fn)
127
+ }
128
+ for (const { resolve } of this.readyResolvers) {
129
+ resolve()
130
+ }
131
+ this.readyResolvers = []
132
+ }
133
+
134
+ private handleClose = (event: PartySocketCloseEvent) => {
135
+ this.stopPing()
136
+ this.clearWatchdog()
137
+ if (this.closed) {
138
+ return
139
+ }
140
+ for (const fn of this.listeners.close) {
141
+ this.callListener('close', fn, event.code, event.reason)
142
+ }
143
+ // partysocket schedules the next attempt — incrementing retryCount —
144
+ // before dispatching close, and exhausts silently: a retryCount at the cap
145
+ // that did not move since the previous close means no attempt was
146
+ // scheduled, i.e. the retry budget is spent.
147
+ const retryCount = this.socket.retryCount
148
+ const exhausted =
149
+ !this.reconnectRequested &&
150
+ retryCount >= this.maxRetries &&
151
+ retryCount === this.lastCloseRetryCount
152
+ this.lastCloseRetryCount = retryCount
153
+ if (exhausted) {
154
+ for (const { reject } of this.readyResolvers) {
155
+ reject(new Error(EXHAUSTED_ERROR))
156
+ }
157
+ this.readyResolvers = []
158
+ this.setStatus('disconnected')
159
+ } else {
160
+ this.setStatus('reconnecting')
161
+ }
162
+ }
163
+
164
+ private handleError = (event: PartySocketErrorEvent) => {
165
+ for (const fn of this.listeners.error) {
166
+ this.callListener('error', fn, event)
167
+ }
168
+ }
169
+
170
+ private handleMessage = (event: MessageEvent) => {
171
+ this.armWatchdog()
172
+ const data =
173
+ typeof event.data === 'string' ? event.data : String(event.data)
174
+ for (const fn of this.listeners.message) {
175
+ this.callListener('message', fn, data)
176
+ }
177
+ }
178
+
179
+ private setStatus(status: WsConnectionStatus) {
180
+ if (this.status === status) {
181
+ return
182
+ }
183
+ this.status = status
184
+ for (const fn of this.statusListeners) {
185
+ this.callListener('status', fn, status)
186
+ }
187
+ }
188
+
189
+ private callListener<TArgs extends unknown[]>(
190
+ listenerType: string,
191
+ listener: (...args: TArgs) => void,
192
+ ...args: TArgs
193
+ ) {
194
+ try {
195
+ listener(...args)
196
+ } catch (error) {
197
+ wsLog.listenerFailure(WS_PROVIDER_KEY, listenerType, error)
198
+ }
199
+ }
200
+
201
+ private startPing() {
202
+ const payload = this.pingPayload
203
+ if (payload === undefined) {
204
+ return
205
+ }
206
+ this.pingTimer = setInterval(() => {
207
+ if (this.socket.readyState === PartySocketWebSocket.OPEN) {
208
+ this.socket.send(payload)
209
+ }
210
+ }, this.pingIntervalMs)
211
+ }
212
+
213
+ private stopPing() {
214
+ if (this.pingTimer) {
215
+ clearInterval(this.pingTimer)
216
+ this.pingTimer = null
217
+ }
218
+ }
219
+
220
+ private armWatchdog() {
221
+ if (this.pingPayload === undefined || this.closed) {
222
+ return
223
+ }
224
+ this.clearWatchdog()
225
+ this.staleTimer = setTimeout(() => {
226
+ // The keepalive went unanswered for the whole window: the connection is
227
+ // half-open and serving stale data — tear it down and reconnect.
228
+ this.reconnect()
229
+ }, this.staleWindowMs)
230
+ }
231
+
232
+ private clearWatchdog() {
233
+ if (this.staleTimer) {
234
+ clearTimeout(this.staleTimer)
235
+ this.staleTimer = null
236
+ }
237
+ }
238
+
239
+ /**
240
+ * Send `data`, buffering it (bounded) for replay when the socket is not yet
241
+ * open.
242
+ *
243
+ * @public
244
+ */
245
+ send(data: string) {
246
+ this.socket.send(data)
247
+ }
248
+
249
+ /**
250
+ * Permanently close the socket and suppress further reconnection.
251
+ *
252
+ * @public
253
+ */
254
+ close() {
255
+ this.closed = true
256
+ this.stopPing()
257
+ this.clearWatchdog()
258
+ this.socket.close()
259
+ for (const { reject } of this.readyResolvers) {
260
+ reject(new Error(CLOSED_ERROR))
261
+ }
262
+ this.readyResolvers = []
263
+ }
264
+
265
+ /**
266
+ * Drop the current connection (if any) and reconnect with a fresh retry
267
+ * budget. Recovers a socket that reached terminal `disconnected`: status
268
+ * returns to `reconnecting` and the normal backoff cycle restarts.
269
+ *
270
+ * @public
271
+ */
272
+ reconnect() {
273
+ this.closed = false
274
+ // Suppress the exhaustion check for the synchronous teardown close the
275
+ // underlying reconnect dispatches — a fresh attempt is always scheduled.
276
+ this.reconnectRequested = true
277
+ this.socket.reconnect()
278
+ this.reconnectRequested = false
279
+ this.lastCloseRetryCount = this.socket.retryCount
280
+ this.setStatus('reconnecting')
281
+ }
282
+
283
+ /**
284
+ * Register a listener for a socket lifecycle event.
285
+ *
286
+ * @public
287
+ */
288
+ on<E extends WsEvent>(event: E, fn: WsEventMap[E]) {
289
+ ;(this.listeners[event] as Set<WsEventMap[E]>).add(fn)
290
+ }
291
+
292
+ /**
293
+ * Remove a previously registered lifecycle-event listener.
294
+ *
295
+ * @public
296
+ */
297
+ off<E extends WsEvent>(event: E, fn: WsEventMap[E]) {
298
+ ;(this.listeners[event] as Set<WsEventMap[E]>).delete(fn)
299
+ }
300
+
301
+ /**
302
+ * Current connection health. `reconnecting` until the first open;
303
+ * `disconnected` once auto-reconnect is abandoned (terminal until
304
+ * {@link ReconnectingWebSocket.reconnect} is called).
305
+ *
306
+ * @public
307
+ */
308
+ getStatus(): WsConnectionStatus {
309
+ return this.status
310
+ }
311
+
312
+ /**
313
+ * Register a connection-health listener. Fires on every status transition,
314
+ * including the terminal `disconnected` emitted on reconnect exhaustion.
315
+ *
316
+ * @public
317
+ */
318
+ onStatus(fn: WsStatusListener) {
319
+ this.statusListeners.add(fn)
320
+ }
321
+
322
+ /**
323
+ * Remove a previously registered connection-health listener.
324
+ *
325
+ * @public
326
+ */
327
+ offStatus(fn: WsStatusListener) {
328
+ this.statusListeners.delete(fn)
329
+ }
330
+
331
+ /**
332
+ * Resolve once the socket is open; reject if it closes or exhausts retries
333
+ * before opening. When the socket is already terminally dead — `close()`d or
334
+ * reconnect-exhausted (`disconnected`) — rejects immediately rather than
335
+ * queuing a waiter nothing would ever settle.
336
+ *
337
+ * @public
338
+ */
339
+ ready(): Promise<void> {
340
+ if (this.socket.readyState === PartySocketWebSocket.OPEN) {
341
+ return Promise.resolve()
342
+ }
343
+ if (this.closed) {
344
+ return Promise.reject(new Error(CLOSED_ERROR))
345
+ }
346
+ if (this.status === 'disconnected') {
347
+ return Promise.reject(new Error(EXHAUSTED_ERROR))
348
+ }
349
+ return new Promise((resolve, reject) => {
350
+ this.readyResolvers.push({ resolve, reject })
351
+ })
352
+ }
353
+ }