@lifi/perps-sdk 0.0.0-preview-64fca0d

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 (675) hide show
  1. package/LICENSE +201 -0
  2. package/dist/cjs/client/PerpsClient.d.ts +63 -0
  3. package/dist/cjs/client/PerpsClient.d.ts.map +1 -0
  4. package/dist/cjs/client/PerpsClient.js +269 -0
  5. package/dist/cjs/client/PerpsClient.js.map +1 -0
  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 +10 -0
  11. package/dist/cjs/client/createPerpsClient.d.ts.map +1 -0
  12. package/dist/cjs/client/createPerpsClient.js +54 -0
  13. package/dist/cjs/client/createPerpsClient.js.map +1 -0
  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 +8 -0
  19. package/dist/cjs/errors/PerpsError.d.ts.map +1 -0
  20. package/dist/cjs/errors/PerpsError.js +15 -0
  21. package/dist/cjs/errors/PerpsError.js.map +1 -0
  22. package/dist/cjs/errors/constants.d.ts +5 -0
  23. package/dist/cjs/errors/constants.d.ts.map +1 -0
  24. package/dist/cjs/errors/constants.js +9 -0
  25. package/dist/cjs/errors/constants.js.map +1 -0
  26. package/dist/cjs/index.d.ts +78 -0
  27. package/dist/cjs/index.d.ts.map +1 -0
  28. package/dist/cjs/index.js +168 -0
  29. package/dist/cjs/index.js.map +1 -0
  30. package/dist/cjs/package.json +1 -0
  31. package/dist/cjs/registry/assetRegistry.d.ts +11 -0
  32. package/dist/cjs/registry/assetRegistry.d.ts.map +1 -0
  33. package/dist/cjs/registry/assetRegistry.js +39 -0
  34. package/dist/cjs/registry/assetRegistry.js.map +1 -0
  35. package/dist/cjs/registry/marketRegistry.d.ts +13 -0
  36. package/dist/cjs/registry/marketRegistry.d.ts.map +1 -0
  37. package/dist/cjs/registry/marketRegistry.js +58 -0
  38. package/dist/cjs/registry/marketRegistry.js.map +1 -0
  39. package/dist/cjs/registry/referenceDataRegistry.d.ts +20 -0
  40. package/dist/cjs/registry/referenceDataRegistry.d.ts.map +1 -0
  41. package/dist/cjs/registry/referenceDataRegistry.js +59 -0
  42. package/dist/cjs/registry/referenceDataRegistry.js.map +1 -0
  43. package/dist/cjs/services/createAction.d.ts +13 -0
  44. package/dist/cjs/services/createAction.d.ts.map +1 -0
  45. package/dist/cjs/services/createAction.js +17 -0
  46. package/dist/cjs/services/createAction.js.map +1 -0
  47. package/dist/cjs/services/executeAction.d.ts +13 -0
  48. package/dist/cjs/services/executeAction.d.ts.map +1 -0
  49. package/dist/cjs/services/executeAction.js +18 -0
  50. package/dist/cjs/services/executeAction.js.map +1 -0
  51. package/dist/cjs/services/getAccount.d.ts +10 -0
  52. package/dist/cjs/services/getAccount.d.ts.map +1 -0
  53. package/dist/cjs/services/getAccount.js +8 -0
  54. package/dist/cjs/services/getAccount.js.map +1 -0
  55. package/dist/cjs/services/getActivity.d.ts +15 -0
  56. package/dist/cjs/services/getActivity.d.ts.map +1 -0
  57. package/dist/cjs/services/getActivity.js +15 -0
  58. package/dist/cjs/services/getActivity.js.map +1 -0
  59. package/dist/cjs/services/getAssets.d.ts +8 -0
  60. package/dist/cjs/services/getAssets.d.ts.map +1 -0
  61. package/dist/cjs/services/getAssets.js +11 -0
  62. package/dist/cjs/services/getAssets.js.map +1 -0
  63. package/dist/cjs/services/getFills.d.ts +14 -0
  64. package/dist/cjs/services/getFills.d.ts.map +1 -0
  65. package/dist/cjs/services/getFills.js +14 -0
  66. package/dist/cjs/services/getFills.js.map +1 -0
  67. package/dist/cjs/services/getMarket.d.ts +9 -0
  68. package/dist/cjs/services/getMarket.d.ts.map +1 -0
  69. package/dist/cjs/services/getMarket.js +13 -0
  70. package/dist/cjs/services/getMarket.js.map +1 -0
  71. package/dist/cjs/services/getMarkets.d.ts +9 -0
  72. package/dist/cjs/services/getMarkets.d.ts.map +1 -0
  73. package/dist/cjs/services/getMarkets.js +12 -0
  74. package/dist/cjs/services/getMarkets.js.map +1 -0
  75. package/dist/cjs/services/getMeta.d.ts +5 -0
  76. package/dist/cjs/services/getMeta.d.ts.map +1 -0
  77. package/dist/cjs/services/getMeta.js +8 -0
  78. package/dist/cjs/services/getMeta.js.map +1 -0
  79. package/dist/cjs/services/getOhlcv.d.ts +13 -0
  80. package/dist/cjs/services/getOhlcv.d.ts.map +1 -0
  81. package/dist/cjs/services/getOhlcv.js +16 -0
  82. package/dist/cjs/services/getOhlcv.js.map +1 -0
  83. package/dist/cjs/services/getOrder.d.ts +11 -0
  84. package/dist/cjs/services/getOrder.d.ts.map +1 -0
  85. package/dist/cjs/services/getOrder.js +8 -0
  86. package/dist/cjs/services/getOrder.js.map +1 -0
  87. package/dist/cjs/services/getOrderbook.d.ts +10 -0
  88. package/dist/cjs/services/getOrderbook.d.ts.map +1 -0
  89. package/dist/cjs/services/getOrderbook.js +13 -0
  90. package/dist/cjs/services/getOrderbook.js.map +1 -0
  91. package/dist/cjs/services/getOrders.d.ts +13 -0
  92. package/dist/cjs/services/getOrders.d.ts.map +1 -0
  93. package/dist/cjs/services/getOrders.js +13 -0
  94. package/dist/cjs/services/getOrders.js.map +1 -0
  95. package/dist/cjs/services/getPositions.d.ts +13 -0
  96. package/dist/cjs/services/getPositions.d.ts.map +1 -0
  97. package/dist/cjs/services/getPositions.js +13 -0
  98. package/dist/cjs/services/getPositions.js.map +1 -0
  99. package/dist/cjs/services/getPrices.d.ts +9 -0
  100. package/dist/cjs/services/getPrices.d.ts.map +1 -0
  101. package/dist/cjs/services/getPrices.js +12 -0
  102. package/dist/cjs/services/getPrices.js.map +1 -0
  103. package/dist/cjs/services/getProviders.d.ts +5 -0
  104. package/dist/cjs/services/getProviders.d.ts.map +1 -0
  105. package/dist/cjs/services/getProviders.js +8 -0
  106. package/dist/cjs/services/getProviders.js.map +1 -0
  107. package/dist/cjs/services/getQuote.d.ts +12 -0
  108. package/dist/cjs/services/getQuote.d.ts.map +1 -0
  109. package/dist/cjs/services/getQuote.js +13 -0
  110. package/dist/cjs/services/getQuote.js.map +1 -0
  111. package/dist/cjs/services/getTermsAcceptance.d.ts +6 -0
  112. package/dist/cjs/services/getTermsAcceptance.d.ts.map +1 -0
  113. package/dist/cjs/services/getTermsAcceptance.js +9 -0
  114. package/dist/cjs/services/getTermsAcceptance.js.map +1 -0
  115. package/dist/cjs/services/resolveQuote.d.ts +6 -0
  116. package/dist/cjs/services/resolveQuote.d.ts.map +1 -0
  117. package/dist/cjs/services/resolveQuote.js +36 -0
  118. package/dist/cjs/services/resolveQuote.js.map +1 -0
  119. package/dist/cjs/services/resolveSubscribeQuote.d.ts +6 -0
  120. package/dist/cjs/services/resolveSubscribeQuote.d.ts.map +1 -0
  121. package/dist/cjs/services/resolveSubscribeQuote.js +63 -0
  122. package/dist/cjs/services/resolveSubscribeQuote.js.map +1 -0
  123. package/dist/cjs/storage/parseStoredRecord.d.ts +4 -0
  124. package/dist/cjs/storage/parseStoredRecord.d.ts.map +1 -0
  125. package/dist/cjs/storage/parseStoredRecord.js +26 -0
  126. package/dist/cjs/storage/parseStoredRecord.js.map +1 -0
  127. package/dist/cjs/storage/storage.d.ts +4 -0
  128. package/dist/cjs/storage/storage.d.ts.map +1 -0
  129. package/dist/cjs/storage/storage.js +47 -0
  130. package/dist/cjs/storage/storage.js.map +1 -0
  131. package/dist/cjs/storage/types.d.ts +6 -0
  132. package/dist/cjs/storage/types.d.ts.map +1 -0
  133. package/dist/cjs/storage/types.js +3 -0
  134. package/dist/cjs/storage/types.js.map +1 -0
  135. package/dist/cjs/transport/fetchWithRetry.d.ts +8 -0
  136. package/dist/cjs/transport/fetchWithRetry.d.ts.map +1 -0
  137. package/dist/cjs/transport/fetchWithRetry.js +81 -0
  138. package/dist/cjs/transport/fetchWithRetry.js.map +1 -0
  139. package/dist/cjs/transport/request.d.ts +8 -0
  140. package/dist/cjs/transport/request.d.ts.map +1 -0
  141. package/dist/cjs/transport/request.js +75 -0
  142. package/dist/cjs/transport/request.js.map +1 -0
  143. package/dist/cjs/transport/retryPolicy.d.ts +37 -0
  144. package/dist/cjs/transport/retryPolicy.d.ts.map +1 -0
  145. package/dist/cjs/transport/retryPolicy.js +79 -0
  146. package/dist/cjs/transport/retryPolicy.js.map +1 -0
  147. package/dist/cjs/types/api.d.ts +85 -0
  148. package/dist/cjs/types/api.d.ts.map +1 -0
  149. package/dist/cjs/types/api.js +3 -0
  150. package/dist/cjs/types/api.js.map +1 -0
  151. package/dist/cjs/types/config.d.ts +26 -0
  152. package/dist/cjs/types/config.d.ts.map +1 -0
  153. package/dist/cjs/types/config.js +3 -0
  154. package/dist/cjs/types/config.js.map +1 -0
  155. package/dist/cjs/types/provider.d.ts +84 -0
  156. package/dist/cjs/types/provider.d.ts.map +1 -0
  157. package/dist/cjs/types/provider.js +3 -0
  158. package/dist/cjs/types/provider.js.map +1 -0
  159. package/dist/cjs/utils/accountSummary.d.ts +3 -0
  160. package/dist/cjs/utils/accountSummary.d.ts.map +1 -0
  161. package/dist/cjs/utils/accountSummary.js +25 -0
  162. package/dist/cjs/utils/accountSummary.js.map +1 -0
  163. package/dist/cjs/utils/assertNever.d.ts +2 -0
  164. package/dist/cjs/utils/assertNever.d.ts.map +1 -0
  165. package/dist/cjs/utils/assertNever.js +7 -0
  166. package/dist/cjs/utils/assertNever.js.map +1 -0
  167. package/dist/cjs/utils/calculations.d.ts +51 -0
  168. package/dist/cjs/utils/calculations.d.ts.map +1 -0
  169. package/dist/cjs/utils/calculations.js +149 -0
  170. package/dist/cjs/utils/calculations.js.map +1 -0
  171. package/dist/cjs/utils/depositChain.d.ts +6 -0
  172. package/dist/cjs/utils/depositChain.d.ts.map +1 -0
  173. package/dist/cjs/utils/depositChain.js +13 -0
  174. package/dist/cjs/utils/depositChain.js.map +1 -0
  175. package/dist/cjs/utils/explorer.d.ts +9 -0
  176. package/dist/cjs/utils/explorer.d.ts.map +1 -0
  177. package/dist/cjs/utils/explorer.js +23 -0
  178. package/dist/cjs/utils/explorer.js.map +1 -0
  179. package/dist/cjs/utils/fillClassification.d.ts +3 -0
  180. package/dist/cjs/utils/fillClassification.d.ts.map +1 -0
  181. package/dist/cjs/utils/fillClassification.js +37 -0
  182. package/dist/cjs/utils/fillClassification.js.map +1 -0
  183. package/dist/cjs/utils/format.d.ts +13 -0
  184. package/dist/cjs/utils/format.d.ts.map +1 -0
  185. package/dist/cjs/utils/format.js +117 -0
  186. package/dist/cjs/utils/format.js.map +1 -0
  187. package/dist/cjs/utils/orderClassification.d.ts +10 -0
  188. package/dist/cjs/utils/orderClassification.d.ts.map +1 -0
  189. package/dist/cjs/utils/orderClassification.js +49 -0
  190. package/dist/cjs/utils/orderClassification.js.map +1 -0
  191. package/dist/cjs/utils/orderMath.d.ts +6 -0
  192. package/dist/cjs/utils/orderMath.d.ts.map +1 -0
  193. package/dist/cjs/utils/orderMath.js +71 -0
  194. package/dist/cjs/utils/orderMath.js.map +1 -0
  195. package/dist/cjs/utils/parse.d.ts +2 -0
  196. package/dist/cjs/utils/parse.d.ts.map +1 -0
  197. package/dist/cjs/utils/parse.js +14 -0
  198. package/dist/cjs/utils/parse.js.map +1 -0
  199. package/dist/cjs/utils/positionMath.d.ts +32 -0
  200. package/dist/cjs/utils/positionMath.d.ts.map +1 -0
  201. package/dist/cjs/utils/positionMath.js +52 -0
  202. package/dist/cjs/utils/positionMath.js.map +1 -0
  203. package/dist/cjs/utils/signTypedData.d.ts +5 -0
  204. package/dist/cjs/utils/signTypedData.d.ts.map +1 -0
  205. package/dist/cjs/utils/signTypedData.js +23 -0
  206. package/dist/cjs/utils/signTypedData.js.map +1 -0
  207. package/dist/cjs/utils/sleep.d.ts +2 -0
  208. package/dist/cjs/utils/sleep.d.ts.map +1 -0
  209. package/dist/cjs/utils/sleep.js +6 -0
  210. package/dist/cjs/utils/sleep.js.map +1 -0
  211. package/dist/cjs/utils/units.d.ts +3 -0
  212. package/dist/cjs/utils/units.d.ts.map +1 -0
  213. package/dist/cjs/utils/units.js +18 -0
  214. package/dist/cjs/utils/units.js.map +1 -0
  215. package/dist/cjs/utils/validation.d.ts +2 -0
  216. package/dist/cjs/utils/validation.d.ts.map +1 -0
  217. package/dist/cjs/utils/validation.js +16 -0
  218. package/dist/cjs/utils/validation.js.map +1 -0
  219. package/dist/cjs/version.d.ts +3 -0
  220. package/dist/cjs/version.d.ts.map +1 -0
  221. package/dist/cjs/version.js +6 -0
  222. package/dist/cjs/version.js.map +1 -0
  223. package/dist/cjs/websocket/PerpsWsClient.d.ts +27 -0
  224. package/dist/cjs/websocket/PerpsWsClient.d.ts.map +1 -0
  225. package/dist/cjs/websocket/PerpsWsClient.js +84 -0
  226. package/dist/cjs/websocket/PerpsWsClient.js.map +1 -0
  227. package/dist/cjs/websocket/ReconnectingWebSocket.d.ts +52 -0
  228. package/dist/cjs/websocket/ReconnectingWebSocket.d.ts.map +1 -0
  229. package/dist/cjs/websocket/ReconnectingWebSocket.js +213 -0
  230. package/dist/cjs/websocket/ReconnectingWebSocket.js.map +1 -0
  231. package/dist/cjs/websocket/WsProviderBase.d.ts +31 -0
  232. package/dist/cjs/websocket/WsProviderBase.d.ts.map +1 -0
  233. package/dist/cjs/websocket/WsProviderBase.js +197 -0
  234. package/dist/cjs/websocket/WsProviderBase.js.map +1 -0
  235. package/dist/cjs/websocket/cachePromise.d.ts +2 -0
  236. package/dist/cjs/websocket/cachePromise.d.ts.map +1 -0
  237. package/dist/cjs/websocket/cachePromise.js +18 -0
  238. package/dist/cjs/websocket/cachePromise.js.map +1 -0
  239. package/dist/cjs/websocket/types.d.ts +15 -0
  240. package/dist/cjs/websocket/types.d.ts.map +1 -0
  241. package/dist/cjs/websocket/types.js +3 -0
  242. package/dist/cjs/websocket/types.js.map +1 -0
  243. package/dist/cjs/websocket/wsLog.d.ts +10 -0
  244. package/dist/cjs/websocket/wsLog.d.ts.map +1 -0
  245. package/dist/cjs/websocket/wsLog.js +31 -0
  246. package/dist/cjs/websocket/wsLog.js.map +1 -0
  247. package/dist/esm/client/PerpsClient.d.ts +285 -0
  248. package/dist/esm/client/PerpsClient.d.ts.map +1 -0
  249. package/dist/esm/client/PerpsClient.js +498 -0
  250. package/dist/esm/client/PerpsClient.js.map +1 -0
  251. package/dist/esm/client/bindProvider.d.ts +13 -0
  252. package/dist/esm/client/bindProvider.d.ts.map +1 -0
  253. package/dist/esm/client/bindProvider.js +16 -0
  254. package/dist/esm/client/bindProvider.js.map +1 -0
  255. package/dist/esm/client/createPerpsClient.d.ts +37 -0
  256. package/dist/esm/client/createPerpsClient.d.ts.map +1 -0
  257. package/dist/esm/client/createPerpsClient.js +76 -0
  258. package/dist/esm/client/createPerpsClient.js.map +1 -0
  259. package/dist/esm/client/requireProvider.d.ts +12 -0
  260. package/dist/esm/client/requireProvider.d.ts.map +1 -0
  261. package/dist/esm/client/requireProvider.js +22 -0
  262. package/dist/esm/client/requireProvider.js.map +1 -0
  263. package/dist/esm/errors/PerpsError.d.ts +16 -0
  264. package/dist/esm/errors/PerpsError.d.ts.map +1 -0
  265. package/dist/esm/errors/PerpsError.js +19 -0
  266. package/dist/esm/errors/PerpsError.js.map +1 -0
  267. package/dist/esm/errors/constants.d.ts +11 -0
  268. package/dist/esm/errors/constants.d.ts.map +1 -0
  269. package/dist/esm/errors/constants.js +12 -0
  270. package/dist/esm/errors/constants.js.map +1 -0
  271. package/dist/esm/index.d.ts +86 -0
  272. package/dist/esm/index.d.ts.map +1 -0
  273. package/dist/esm/index.js +63 -0
  274. package/dist/esm/index.js.map +1 -0
  275. package/dist/esm/package.json +1 -0
  276. package/dist/esm/registry/assetRegistry.d.ts +25 -0
  277. package/dist/esm/registry/assetRegistry.d.ts.map +1 -0
  278. package/dist/esm/registry/assetRegistry.js +48 -0
  279. package/dist/esm/registry/assetRegistry.js.map +1 -0
  280. package/dist/esm/registry/marketRegistry.d.ts +42 -0
  281. package/dist/esm/registry/marketRegistry.d.ts.map +1 -0
  282. package/dist/esm/registry/marketRegistry.js +81 -0
  283. package/dist/esm/registry/marketRegistry.js.map +1 -0
  284. package/dist/esm/registry/referenceDataRegistry.d.ts +44 -0
  285. package/dist/esm/registry/referenceDataRegistry.d.ts.map +1 -0
  286. package/dist/esm/registry/referenceDataRegistry.js +79 -0
  287. package/dist/esm/registry/referenceDataRegistry.js.map +1 -0
  288. package/dist/esm/services/createAction.d.ts +26 -0
  289. package/dist/esm/services/createAction.d.ts.map +1 -0
  290. package/dist/esm/services/createAction.js +22 -0
  291. package/dist/esm/services/createAction.js.map +1 -0
  292. package/dist/esm/services/executeAction.d.ts +26 -0
  293. package/dist/esm/services/executeAction.d.ts.map +1 -0
  294. package/dist/esm/services/executeAction.js +26 -0
  295. package/dist/esm/services/executeAction.js.map +1 -0
  296. package/dist/esm/services/getAccount.d.ts +35 -0
  297. package/dist/esm/services/getAccount.d.ts.map +1 -0
  298. package/dist/esm/services/getAccount.js +25 -0
  299. package/dist/esm/services/getAccount.js.map +1 -0
  300. package/dist/esm/services/getActivity.d.ts +39 -0
  301. package/dist/esm/services/getActivity.d.ts.map +1 -0
  302. package/dist/esm/services/getActivity.js +29 -0
  303. package/dist/esm/services/getActivity.js.map +1 -0
  304. package/dist/esm/services/getAssets.d.ts +27 -0
  305. package/dist/esm/services/getAssets.d.ts.map +1 -0
  306. package/dist/esm/services/getAssets.js +22 -0
  307. package/dist/esm/services/getAssets.js.map +1 -0
  308. package/dist/esm/services/getFills.d.ts +38 -0
  309. package/dist/esm/services/getFills.d.ts.map +1 -0
  310. package/dist/esm/services/getFills.js +28 -0
  311. package/dist/esm/services/getFills.js.map +1 -0
  312. package/dist/esm/services/getMarket.d.ts +34 -0
  313. package/dist/esm/services/getMarket.d.ts.map +1 -0
  314. package/dist/esm/services/getMarket.js +25 -0
  315. package/dist/esm/services/getMarket.js.map +1 -0
  316. package/dist/esm/services/getMarkets.d.ts +28 -0
  317. package/dist/esm/services/getMarkets.d.ts.map +1 -0
  318. package/dist/esm/services/getMarkets.js +22 -0
  319. package/dist/esm/services/getMarkets.js.map +1 -0
  320. package/dist/esm/services/getMeta.d.ts +21 -0
  321. package/dist/esm/services/getMeta.d.ts.map +1 -0
  322. package/dist/esm/services/getMeta.js +21 -0
  323. package/dist/esm/services/getMeta.js.map +1 -0
  324. package/dist/esm/services/getOhlcv.d.ts +36 -0
  325. package/dist/esm/services/getOhlcv.d.ts.map +1 -0
  326. package/dist/esm/services/getOhlcv.js +28 -0
  327. package/dist/esm/services/getOhlcv.js.map +1 -0
  328. package/dist/esm/services/getOrder.d.ts +33 -0
  329. package/dist/esm/services/getOrder.d.ts.map +1 -0
  330. package/dist/esm/services/getOrder.js +22 -0
  331. package/dist/esm/services/getOrder.js.map +1 -0
  332. package/dist/esm/services/getOrderbook.d.ts +24 -0
  333. package/dist/esm/services/getOrderbook.d.ts.map +1 -0
  334. package/dist/esm/services/getOrderbook.js +17 -0
  335. package/dist/esm/services/getOrderbook.js.map +1 -0
  336. package/dist/esm/services/getOrders.d.ts +35 -0
  337. package/dist/esm/services/getOrders.d.ts.map +1 -0
  338. package/dist/esm/services/getOrders.js +26 -0
  339. package/dist/esm/services/getOrders.js.map +1 -0
  340. package/dist/esm/services/getPositions.d.ts +35 -0
  341. package/dist/esm/services/getPositions.d.ts.map +1 -0
  342. package/dist/esm/services/getPositions.js +26 -0
  343. package/dist/esm/services/getPositions.js.map +1 -0
  344. package/dist/esm/services/getPrices.d.ts +21 -0
  345. package/dist/esm/services/getPrices.d.ts.map +1 -0
  346. package/dist/esm/services/getPrices.js +15 -0
  347. package/dist/esm/services/getPrices.js.map +1 -0
  348. package/dist/esm/services/getProviders.d.ts +22 -0
  349. package/dist/esm/services/getProviders.d.ts.map +1 -0
  350. package/dist/esm/services/getProviders.js +22 -0
  351. package/dist/esm/services/getProviders.js.map +1 -0
  352. package/dist/esm/services/getQuote.d.ts +42 -0
  353. package/dist/esm/services/getQuote.d.ts.map +1 -0
  354. package/dist/esm/services/getQuote.js +33 -0
  355. package/dist/esm/services/getQuote.js.map +1 -0
  356. package/dist/esm/services/getTermsAcceptance.d.ts +26 -0
  357. package/dist/esm/services/getTermsAcceptance.d.ts.map +1 -0
  358. package/dist/esm/services/getTermsAcceptance.js +26 -0
  359. package/dist/esm/services/getTermsAcceptance.js.map +1 -0
  360. package/dist/esm/services/resolveQuote.d.ts +26 -0
  361. package/dist/esm/services/resolveQuote.d.ts.map +1 -0
  362. package/dist/esm/services/resolveQuote.js +52 -0
  363. package/dist/esm/services/resolveQuote.js.map +1 -0
  364. package/dist/esm/services/resolveSubscribeQuote.d.ts +31 -0
  365. package/dist/esm/services/resolveSubscribeQuote.d.ts.map +1 -0
  366. package/dist/esm/services/resolveSubscribeQuote.js +84 -0
  367. package/dist/esm/services/resolveSubscribeQuote.js.map +1 -0
  368. package/dist/esm/storage/parseStoredRecord.d.ts +29 -0
  369. package/dist/esm/storage/parseStoredRecord.d.ts.map +1 -0
  370. package/dist/esm/storage/parseStoredRecord.js +47 -0
  371. package/dist/esm/storage/parseStoredRecord.js.map +1 -0
  372. package/dist/esm/storage/storage.d.ts +15 -0
  373. package/dist/esm/storage/storage.d.ts.map +1 -0
  374. package/dist/esm/storage/storage.js +56 -0
  375. package/dist/esm/storage/storage.js.map +1 -0
  376. package/dist/esm/storage/types.d.ts +14 -0
  377. package/dist/esm/storage/types.d.ts.map +1 -0
  378. package/dist/esm/storage/types.js +2 -0
  379. package/dist/esm/storage/types.js.map +1 -0
  380. package/dist/esm/transport/fetchWithRetry.d.ts +22 -0
  381. package/dist/esm/transport/fetchWithRetry.d.ts.map +1 -0
  382. package/dist/esm/transport/fetchWithRetry.js +87 -0
  383. package/dist/esm/transport/fetchWithRetry.js.map +1 -0
  384. package/dist/esm/transport/request.d.ts +25 -0
  385. package/dist/esm/transport/request.d.ts.map +1 -0
  386. package/dist/esm/transport/request.js +82 -0
  387. package/dist/esm/transport/request.js.map +1 -0
  388. package/dist/esm/transport/retryPolicy.d.ts +106 -0
  389. package/dist/esm/transport/retryPolicy.d.ts.map +1 -0
  390. package/dist/esm/transport/retryPolicy.js +99 -0
  391. package/dist/esm/transport/retryPolicy.js.map +1 -0
  392. package/dist/esm/types/api.d.ts +214 -0
  393. package/dist/esm/types/api.d.ts.map +1 -0
  394. package/dist/esm/types/api.js +2 -0
  395. package/dist/esm/types/api.js.map +1 -0
  396. package/dist/esm/types/config.d.ts +70 -0
  397. package/dist/esm/types/config.d.ts.map +1 -0
  398. package/dist/esm/types/config.js +2 -0
  399. package/dist/esm/types/config.js.map +1 -0
  400. package/dist/esm/types/provider.d.ts +330 -0
  401. package/dist/esm/types/provider.d.ts.map +1 -0
  402. package/dist/esm/types/provider.js +2 -0
  403. package/dist/esm/types/provider.js.map +1 -0
  404. package/dist/esm/utils/accountSummary.d.ts +13 -0
  405. package/dist/esm/utils/accountSummary.d.ts.map +1 -0
  406. package/dist/esm/utils/accountSummary.js +32 -0
  407. package/dist/esm/utils/accountSummary.js.map +1 -0
  408. package/dist/esm/utils/assertNever.d.ts +20 -0
  409. package/dist/esm/utils/assertNever.d.ts.map +1 -0
  410. package/dist/esm/utils/assertNever.js +22 -0
  411. package/dist/esm/utils/assertNever.js.map +1 -0
  412. package/dist/esm/utils/calculations.d.ts +223 -0
  413. package/dist/esm/utils/calculations.d.ts.map +1 -0
  414. package/dist/esm/utils/calculations.js +291 -0
  415. package/dist/esm/utils/calculations.js.map +1 -0
  416. package/dist/esm/utils/depositChain.d.ts +25 -0
  417. package/dist/esm/utils/depositChain.d.ts.map +1 -0
  418. package/dist/esm/utils/depositChain.js +23 -0
  419. package/dist/esm/utils/depositChain.js.map +1 -0
  420. package/dist/esm/utils/explorer.d.ts +33 -0
  421. package/dist/esm/utils/explorer.d.ts.map +1 -0
  422. package/dist/esm/utils/explorer.js +38 -0
  423. package/dist/esm/utils/explorer.js.map +1 -0
  424. package/dist/esm/utils/fillClassification.d.ts +13 -0
  425. package/dist/esm/utils/fillClassification.d.ts.map +1 -0
  426. package/dist/esm/utils/fillClassification.js +44 -0
  427. package/dist/esm/utils/fillClassification.js.map +1 -0
  428. package/dist/esm/utils/format.d.ts +66 -0
  429. package/dist/esm/utils/format.d.ts.map +1 -0
  430. package/dist/esm/utils/format.js +171 -0
  431. package/dist/esm/utils/format.js.map +1 -0
  432. package/dist/esm/utils/orderClassification.d.ts +47 -0
  433. package/dist/esm/utils/orderClassification.d.ts.map +1 -0
  434. package/dist/esm/utils/orderClassification.js +78 -0
  435. package/dist/esm/utils/orderClassification.js.map +1 -0
  436. package/dist/esm/utils/orderMath.d.ts +44 -0
  437. package/dist/esm/utils/orderMath.d.ts.map +1 -0
  438. package/dist/esm/utils/orderMath.js +103 -0
  439. package/dist/esm/utils/orderMath.js.map +1 -0
  440. package/dist/esm/utils/parse.d.ts +22 -0
  441. package/dist/esm/utils/parse.d.ts.map +1 -0
  442. package/dist/esm/utils/parse.js +31 -0
  443. package/dist/esm/utils/parse.js.map +1 -0
  444. package/dist/esm/utils/positionMath.d.ts +107 -0
  445. package/dist/esm/utils/positionMath.d.ts.map +1 -0
  446. package/dist/esm/utils/positionMath.js +119 -0
  447. package/dist/esm/utils/positionMath.js.map +1 -0
  448. package/dist/esm/utils/signTypedData.d.ts +18 -0
  449. package/dist/esm/utils/signTypedData.d.ts.map +1 -0
  450. package/dist/esm/utils/signTypedData.js +32 -0
  451. package/dist/esm/utils/signTypedData.js.map +1 -0
  452. package/dist/esm/utils/sleep.d.ts +7 -0
  453. package/dist/esm/utils/sleep.d.ts.map +1 -0
  454. package/dist/esm/utils/sleep.js +7 -0
  455. package/dist/esm/utils/sleep.js.map +1 -0
  456. package/dist/esm/utils/units.d.ts +27 -0
  457. package/dist/esm/utils/units.d.ts.map +1 -0
  458. package/dist/esm/utils/units.js +38 -0
  459. package/dist/esm/utils/units.js.map +1 -0
  460. package/dist/esm/utils/validation.d.ts +18 -0
  461. package/dist/esm/utils/validation.d.ts.map +1 -0
  462. package/dist/esm/utils/validation.js +29 -0
  463. package/dist/esm/utils/validation.js.map +1 -0
  464. package/dist/esm/version.d.ts +3 -0
  465. package/dist/esm/version.d.ts.map +1 -0
  466. package/dist/esm/version.js +3 -0
  467. package/dist/esm/version.js.map +1 -0
  468. package/dist/esm/websocket/PerpsWsClient.d.ts +100 -0
  469. package/dist/esm/websocket/PerpsWsClient.d.ts.map +1 -0
  470. package/dist/esm/websocket/PerpsWsClient.js +121 -0
  471. package/dist/esm/websocket/PerpsWsClient.js.map +1 -0
  472. package/dist/esm/websocket/ReconnectingWebSocket.d.ts +130 -0
  473. package/dist/esm/websocket/ReconnectingWebSocket.d.ts.map +1 -0
  474. package/dist/esm/websocket/ReconnectingWebSocket.js +288 -0
  475. package/dist/esm/websocket/ReconnectingWebSocket.js.map +1 -0
  476. package/dist/esm/websocket/WsProviderBase.d.ts +89 -0
  477. package/dist/esm/websocket/WsProviderBase.d.ts.map +1 -0
  478. package/dist/esm/websocket/WsProviderBase.js +246 -0
  479. package/dist/esm/websocket/WsProviderBase.js.map +1 -0
  480. package/dist/esm/websocket/cachePromise.d.ts +14 -0
  481. package/dist/esm/websocket/cachePromise.d.ts.map +1 -0
  482. package/dist/esm/websocket/cachePromise.js +27 -0
  483. package/dist/esm/websocket/cachePromise.js.map +1 -0
  484. package/dist/esm/websocket/types.d.ts +60 -0
  485. package/dist/esm/websocket/types.d.ts.map +1 -0
  486. package/dist/esm/websocket/types.js +2 -0
  487. package/dist/esm/websocket/types.js.map +1 -0
  488. package/dist/esm/websocket/wsLog.d.ts +50 -0
  489. package/dist/esm/websocket/wsLog.d.ts.map +1 -0
  490. package/dist/esm/websocket/wsLog.js +68 -0
  491. package/dist/esm/websocket/wsLog.js.map +1 -0
  492. package/dist/types/client/PerpsClient.d.ts +285 -0
  493. package/dist/types/client/PerpsClient.d.ts.map +1 -0
  494. package/dist/types/client/bindProvider.d.ts +13 -0
  495. package/dist/types/client/bindProvider.d.ts.map +1 -0
  496. package/dist/types/client/createPerpsClient.d.ts +37 -0
  497. package/dist/types/client/createPerpsClient.d.ts.map +1 -0
  498. package/dist/types/client/requireProvider.d.ts +12 -0
  499. package/dist/types/client/requireProvider.d.ts.map +1 -0
  500. package/dist/types/errors/PerpsError.d.ts +16 -0
  501. package/dist/types/errors/PerpsError.d.ts.map +1 -0
  502. package/dist/types/errors/constants.d.ts +11 -0
  503. package/dist/types/errors/constants.d.ts.map +1 -0
  504. package/dist/types/index.d.ts +86 -0
  505. package/dist/types/index.d.ts.map +1 -0
  506. package/dist/types/registry/assetRegistry.d.ts +25 -0
  507. package/dist/types/registry/assetRegistry.d.ts.map +1 -0
  508. package/dist/types/registry/marketRegistry.d.ts +42 -0
  509. package/dist/types/registry/marketRegistry.d.ts.map +1 -0
  510. package/dist/types/registry/referenceDataRegistry.d.ts +44 -0
  511. package/dist/types/registry/referenceDataRegistry.d.ts.map +1 -0
  512. package/dist/types/services/createAction.d.ts +26 -0
  513. package/dist/types/services/createAction.d.ts.map +1 -0
  514. package/dist/types/services/executeAction.d.ts +26 -0
  515. package/dist/types/services/executeAction.d.ts.map +1 -0
  516. package/dist/types/services/getAccount.d.ts +35 -0
  517. package/dist/types/services/getAccount.d.ts.map +1 -0
  518. package/dist/types/services/getActivity.d.ts +39 -0
  519. package/dist/types/services/getActivity.d.ts.map +1 -0
  520. package/dist/types/services/getAssets.d.ts +27 -0
  521. package/dist/types/services/getAssets.d.ts.map +1 -0
  522. package/dist/types/services/getFills.d.ts +38 -0
  523. package/dist/types/services/getFills.d.ts.map +1 -0
  524. package/dist/types/services/getMarket.d.ts +34 -0
  525. package/dist/types/services/getMarket.d.ts.map +1 -0
  526. package/dist/types/services/getMarkets.d.ts +28 -0
  527. package/dist/types/services/getMarkets.d.ts.map +1 -0
  528. package/dist/types/services/getMeta.d.ts +21 -0
  529. package/dist/types/services/getMeta.d.ts.map +1 -0
  530. package/dist/types/services/getOhlcv.d.ts +36 -0
  531. package/dist/types/services/getOhlcv.d.ts.map +1 -0
  532. package/dist/types/services/getOrder.d.ts +33 -0
  533. package/dist/types/services/getOrder.d.ts.map +1 -0
  534. package/dist/types/services/getOrderbook.d.ts +24 -0
  535. package/dist/types/services/getOrderbook.d.ts.map +1 -0
  536. package/dist/types/services/getOrders.d.ts +35 -0
  537. package/dist/types/services/getOrders.d.ts.map +1 -0
  538. package/dist/types/services/getPositions.d.ts +35 -0
  539. package/dist/types/services/getPositions.d.ts.map +1 -0
  540. package/dist/types/services/getPrices.d.ts +21 -0
  541. package/dist/types/services/getPrices.d.ts.map +1 -0
  542. package/dist/types/services/getProviders.d.ts +22 -0
  543. package/dist/types/services/getProviders.d.ts.map +1 -0
  544. package/dist/types/services/getQuote.d.ts +42 -0
  545. package/dist/types/services/getQuote.d.ts.map +1 -0
  546. package/dist/types/services/getTermsAcceptance.d.ts +26 -0
  547. package/dist/types/services/getTermsAcceptance.d.ts.map +1 -0
  548. package/dist/types/services/resolveQuote.d.ts +26 -0
  549. package/dist/types/services/resolveQuote.d.ts.map +1 -0
  550. package/dist/types/services/resolveSubscribeQuote.d.ts +31 -0
  551. package/dist/types/services/resolveSubscribeQuote.d.ts.map +1 -0
  552. package/dist/types/storage/parseStoredRecord.d.ts +29 -0
  553. package/dist/types/storage/parseStoredRecord.d.ts.map +1 -0
  554. package/dist/types/storage/storage.d.ts +15 -0
  555. package/dist/types/storage/storage.d.ts.map +1 -0
  556. package/dist/types/storage/types.d.ts +14 -0
  557. package/dist/types/storage/types.d.ts.map +1 -0
  558. package/dist/types/transport/fetchWithRetry.d.ts +22 -0
  559. package/dist/types/transport/fetchWithRetry.d.ts.map +1 -0
  560. package/dist/types/transport/request.d.ts +25 -0
  561. package/dist/types/transport/request.d.ts.map +1 -0
  562. package/dist/types/transport/retryPolicy.d.ts +106 -0
  563. package/dist/types/transport/retryPolicy.d.ts.map +1 -0
  564. package/dist/types/types/api.d.ts +214 -0
  565. package/dist/types/types/api.d.ts.map +1 -0
  566. package/dist/types/types/config.d.ts +70 -0
  567. package/dist/types/types/config.d.ts.map +1 -0
  568. package/dist/types/types/provider.d.ts +330 -0
  569. package/dist/types/types/provider.d.ts.map +1 -0
  570. package/dist/types/utils/accountSummary.d.ts +13 -0
  571. package/dist/types/utils/accountSummary.d.ts.map +1 -0
  572. package/dist/types/utils/assertNever.d.ts +20 -0
  573. package/dist/types/utils/assertNever.d.ts.map +1 -0
  574. package/dist/types/utils/calculations.d.ts +223 -0
  575. package/dist/types/utils/calculations.d.ts.map +1 -0
  576. package/dist/types/utils/depositChain.d.ts +25 -0
  577. package/dist/types/utils/depositChain.d.ts.map +1 -0
  578. package/dist/types/utils/explorer.d.ts +33 -0
  579. package/dist/types/utils/explorer.d.ts.map +1 -0
  580. package/dist/types/utils/fillClassification.d.ts +13 -0
  581. package/dist/types/utils/fillClassification.d.ts.map +1 -0
  582. package/dist/types/utils/format.d.ts +66 -0
  583. package/dist/types/utils/format.d.ts.map +1 -0
  584. package/dist/types/utils/orderClassification.d.ts +47 -0
  585. package/dist/types/utils/orderClassification.d.ts.map +1 -0
  586. package/dist/types/utils/orderMath.d.ts +44 -0
  587. package/dist/types/utils/orderMath.d.ts.map +1 -0
  588. package/dist/types/utils/parse.d.ts +22 -0
  589. package/dist/types/utils/parse.d.ts.map +1 -0
  590. package/dist/types/utils/positionMath.d.ts +107 -0
  591. package/dist/types/utils/positionMath.d.ts.map +1 -0
  592. package/dist/types/utils/signTypedData.d.ts +18 -0
  593. package/dist/types/utils/signTypedData.d.ts.map +1 -0
  594. package/dist/types/utils/sleep.d.ts +7 -0
  595. package/dist/types/utils/sleep.d.ts.map +1 -0
  596. package/dist/types/utils/units.d.ts +27 -0
  597. package/dist/types/utils/units.d.ts.map +1 -0
  598. package/dist/types/utils/validation.d.ts +18 -0
  599. package/dist/types/utils/validation.d.ts.map +1 -0
  600. package/dist/types/version.d.ts +3 -0
  601. package/dist/types/version.d.ts.map +1 -0
  602. package/dist/types/websocket/PerpsWsClient.d.ts +100 -0
  603. package/dist/types/websocket/PerpsWsClient.d.ts.map +1 -0
  604. package/dist/types/websocket/ReconnectingWebSocket.d.ts +130 -0
  605. package/dist/types/websocket/ReconnectingWebSocket.d.ts.map +1 -0
  606. package/dist/types/websocket/WsProviderBase.d.ts +89 -0
  607. package/dist/types/websocket/WsProviderBase.d.ts.map +1 -0
  608. package/dist/types/websocket/cachePromise.d.ts +14 -0
  609. package/dist/types/websocket/cachePromise.d.ts.map +1 -0
  610. package/dist/types/websocket/types.d.ts +60 -0
  611. package/dist/types/websocket/types.d.ts.map +1 -0
  612. package/dist/types/websocket/wsLog.d.ts +50 -0
  613. package/dist/types/websocket/wsLog.d.ts.map +1 -0
  614. package/package.json +63 -0
  615. package/src/client/PerpsClient.ts +686 -0
  616. package/src/client/bindProvider.ts +24 -0
  617. package/src/client/createPerpsClient.ts +100 -0
  618. package/src/client/requireProvider.ts +29 -0
  619. package/src/errors/PerpsError.ts +23 -0
  620. package/src/errors/constants.ts +10 -0
  621. package/src/index.ts +215 -0
  622. package/src/registry/assetRegistry.ts +62 -0
  623. package/src/registry/marketRegistry.ts +100 -0
  624. package/src/registry/referenceDataRegistry.ts +95 -0
  625. package/src/services/createAction.ts +52 -0
  626. package/src/services/executeAction.ts +56 -0
  627. package/src/services/getAccount.ts +46 -0
  628. package/src/services/getActivity.ts +57 -0
  629. package/src/services/getAssets.ts +38 -0
  630. package/src/services/getFills.ts +55 -0
  631. package/src/services/getMarket.ts +52 -0
  632. package/src/services/getMarkets.ts +40 -0
  633. package/src/services/getMeta.ts +32 -0
  634. package/src/services/getOhlcv.ts +52 -0
  635. package/src/services/getOrder.ts +44 -0
  636. package/src/services/getOrderbook.ts +37 -0
  637. package/src/services/getOrders.ts +51 -0
  638. package/src/services/getPositions.ts +51 -0
  639. package/src/services/getPrices.ts +33 -0
  640. package/src/services/getProviders.ts +33 -0
  641. package/src/services/getQuote.ts +58 -0
  642. package/src/services/getTermsAcceptance.ts +34 -0
  643. package/src/services/resolveQuote.ts +90 -0
  644. package/src/services/resolveSubscribeQuote.ts +107 -0
  645. package/src/storage/parseStoredRecord.ts +55 -0
  646. package/src/storage/storage.ts +60 -0
  647. package/src/storage/types.ts +13 -0
  648. package/src/transport/fetchWithRetry.ts +116 -0
  649. package/src/transport/request.ts +123 -0
  650. package/src/transport/retryPolicy.ts +202 -0
  651. package/src/types/api.ts +239 -0
  652. package/src/types/config.ts +79 -0
  653. package/src/types/provider.ts +429 -0
  654. package/src/utils/accountSummary.ts +46 -0
  655. package/src/utils/assertNever.ts +23 -0
  656. package/src/utils/calculations.ts +407 -0
  657. package/src/utils/depositChain.ts +37 -0
  658. package/src/utils/explorer.ts +51 -0
  659. package/src/utils/fillClassification.ts +51 -0
  660. package/src/utils/format.ts +212 -0
  661. package/src/utils/orderClassification.ts +96 -0
  662. package/src/utils/orderMath.ts +134 -0
  663. package/src/utils/parse.ts +30 -0
  664. package/src/utils/positionMath.ts +149 -0
  665. package/src/utils/signTypedData.ts +41 -0
  666. package/src/utils/sleep.ts +7 -0
  667. package/src/utils/units.ts +39 -0
  668. package/src/utils/validation.ts +38 -0
  669. package/src/version.ts +2 -0
  670. package/src/websocket/PerpsWsClient.ts +204 -0
  671. package/src/websocket/ReconnectingWebSocket.ts +353 -0
  672. package/src/websocket/WsProviderBase.ts +333 -0
  673. package/src/websocket/cachePromise.ts +30 -0
  674. package/src/websocket/types.ts +75 -0
  675. package/src/websocket/wsLog.ts +82 -0
@@ -0,0 +1,58 @@
1
+ import type { Quote, QuoteSide, TradeType } from '@lifi/perps-types'
2
+ import { requireProvider } from '../client/requireProvider.js'
3
+ import type { SDKRequestOptions } from '../types/config.js'
4
+ import type { PerpsSDKClient } from '../types/provider.js'
5
+
6
+ /**
7
+ * Parameters for {@link getQuote}.
8
+ *
9
+ * @public
10
+ */
11
+ export interface GetQuoteParams {
12
+ provider: string
13
+ /** Human `displaySymbol`, e.g. `"BTC"`. */
14
+ symbol: string
15
+ side: QuoteSide
16
+ /** USD notional to fill. */
17
+ size: number
18
+ type: TradeType
19
+ }
20
+
21
+ /**
22
+ * Get a one-shot fill quote for `size` USD notional of `symbol` on a single
23
+ * venue: VWAP expected fill, price impact (bps), base-tier taker fee, and
24
+ * funding (perps only). Delegates to the registered venue plugin, which
25
+ * resolves the symbol against its own markets (scoped by `type`) and walks its
26
+ * orderbook. Cross-venue comparison is a consumer-side loop over
27
+ * `client.providers`.
28
+ *
29
+ * @throws {PerpsError} When the provider plugin is not registered, no market
30
+ * matches the symbol+type, or on network / parsing errors.
31
+ * @example
32
+ * ```ts
33
+ * const quote = await getQuote(client, {
34
+ * provider: 'hyperliquid',
35
+ * symbol: 'BTC',
36
+ * side: 'buy',
37
+ * size: 10_000,
38
+ * type: 'perps',
39
+ * })
40
+ * console.log(quote.expectedFillPrice, quote.priceImpactBps)
41
+ * ```
42
+ * @public
43
+ */
44
+ export async function getQuote(
45
+ client: PerpsSDKClient,
46
+ params: GetQuoteParams,
47
+ options?: SDKRequestOptions
48
+ ): Promise<Quote> {
49
+ return requireProvider(client, params.provider).getQuote(
50
+ {
51
+ symbol: params.symbol,
52
+ side: params.side,
53
+ size: params.size,
54
+ type: params.type,
55
+ },
56
+ options
57
+ )
58
+ }
@@ -0,0 +1,34 @@
1
+ import type { TermsAcceptanceStatus } from '@lifi/perps-types'
2
+ import type { Address } from 'viem'
3
+ import { buildUrl, request } from '../transport/request.js'
4
+ import type { SDKRequestOptions } from '../types/config.js'
5
+ import type { PerpsSDKClient } from '../types/provider.js'
6
+
7
+ /**
8
+ * Get the current Terms of Service (version + full content) and whether the
9
+ * given address has accepted them. Provider-independent — reads from the
10
+ * platform `meta` surface, not a venue plugin.
11
+ *
12
+ * @param client - The SDK client instance
13
+ * @param address - Address whose acceptance status to resolve
14
+ * @param options - Request options (e.g., AbortSignal)
15
+ * @throws {PerpsError} On backend error responses, network, or parsing errors.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * const client = createPerpsClient({ integrator: 'my-app' })
20
+ * const terms = await getTermsAcceptance(client, '0x1234...')
21
+ * if (!terms.accepted) {
22
+ * // prompt the user to accept terms.content (version terms.termsVersion)
23
+ * }
24
+ * ```
25
+ * @public
26
+ */
27
+ export async function getTermsAcceptance(
28
+ client: PerpsSDKClient,
29
+ address: Address,
30
+ options?: SDKRequestOptions
31
+ ): Promise<TermsAcceptanceStatus> {
32
+ const url = buildUrl(`${client.config.apiUrl}/meta/terms`, { address })
33
+ return request<TermsAcceptanceStatus>(client.config, url, {}, options)
34
+ }
@@ -0,0 +1,90 @@
1
+ import {
2
+ type FeeTier,
3
+ type Market,
4
+ PerpsErrorCode,
5
+ type Quote,
6
+ } from '@lifi/perps-types'
7
+ import { PerpsError } from '../errors/PerpsError.js'
8
+ import type { SDKRequestOptions } from '../types/config.js'
9
+ import type {
10
+ PerpsSDKClient,
11
+ ProviderGetQuoteParams,
12
+ } from '../types/provider.js'
13
+ import { buildQuote } from '../utils/calculations.js'
14
+ import { getMarkets } from './getMarkets.js'
15
+ import { getOrderbook } from './getOrderbook.js'
16
+
17
+ /**
18
+ * Shared provider-side `getQuote` implementation: resolve `params.symbol` to a
19
+ * market on `provider` (matching `baseAsset.displaySymbol`, scoped by
20
+ * `params.type`), fetch the orderbook snapshot, and build the {@link Quote}
21
+ * with the provider's public base `feeTier`. Both venue plugins delegate here
22
+ * so symbol resolution and the book walk live in one place; each plugin only
23
+ * supplies its own base tier.
24
+ *
25
+ * @throws {PerpsError} `MarketNotFound` when no market matches symbol+type.
26
+ * @internal
27
+ */
28
+ export async function resolveQuote(
29
+ client: PerpsSDKClient,
30
+ provider: string,
31
+ params: ProviderGetQuoteParams,
32
+ feeTier: FeeTier,
33
+ options?: SDKRequestOptions
34
+ ): Promise<Quote> {
35
+ const market = await resolveQuoteMarket(client, provider, params, options)
36
+
37
+ const { bids, asks } = await getOrderbook(
38
+ client,
39
+ { provider, marketId: market.id },
40
+ options
41
+ )
42
+
43
+ return buildQuote({
44
+ provider,
45
+ symbol: params.symbol,
46
+ type: params.type,
47
+ side: params.side,
48
+ sizeUsd: params.size,
49
+ market,
50
+ bids,
51
+ asks,
52
+ feeTier,
53
+ timestamp: Date.now(),
54
+ })
55
+ }
56
+
57
+ /**
58
+ * Resolve `params.symbol` to a market on `provider` (matching
59
+ * `baseAsset.displaySymbol`, scoped by `params.type`). Shared by the one-shot
60
+ * {@link resolveQuote} and the streaming quote subscription so both quote the
61
+ * same market for a given symbol+type.
62
+ *
63
+ * @throws {PerpsError} `MarketNotFound` when no market matches symbol+type.
64
+ * @internal
65
+ */
66
+ export async function resolveQuoteMarket(
67
+ client: PerpsSDKClient,
68
+ provider: string,
69
+ params: Pick<ProviderGetQuoteParams, 'symbol' | 'type'>,
70
+ options?: SDKRequestOptions
71
+ ): Promise<Market> {
72
+ const { markets } = await getMarkets(client, { provider }, options)
73
+ const market = markets.find(
74
+ (m) =>
75
+ m.baseAsset.displaySymbol === params.symbol &&
76
+ isMarketOfType(m, params.type)
77
+ )
78
+ if (market === undefined) {
79
+ throw new PerpsError(
80
+ PerpsErrorCode.MarketNotFound,
81
+ `No ${params.type} market found on '${provider}' for symbol '${params.symbol}'.`
82
+ )
83
+ }
84
+ return market
85
+ }
86
+
87
+ const isMarketOfType = (
88
+ market: Market,
89
+ type: ProviderGetQuoteParams['type']
90
+ ): boolean => ('funding' in market ? type === 'perps' : type === 'spot')
@@ -0,0 +1,107 @@
1
+ import type { FeeTier, OrderbookResponse } from '@lifi/perps-types'
2
+ import type {
3
+ PerpsSDKClient,
4
+ ProviderGetQuoteParams,
5
+ QuoteListener,
6
+ } from '../types/provider.js'
7
+ import { buildQuote } from '../utils/calculations.js'
8
+ import type { WsProvider } from '../websocket/types.js'
9
+ import { resolveQuoteMarket } from './resolveQuote.js'
10
+
11
+ /**
12
+ * Minimum gap between successive streamed {@link Quote} emissions — the same
13
+ * 100 ms pacing applied to streamed orderbook rendering, so a quote ticks no
14
+ * faster than the book it derives from.
15
+ *
16
+ * @public
17
+ */
18
+ export const QUOTE_THROTTLE_MS = 100
19
+
20
+ /**
21
+ * Shared provider-side `subscribeQuote` implementation: resolve
22
+ * `params.symbol` to a market on `provider` (via {@link resolveQuoteMarket}),
23
+ * subscribe to that market's orderbook channel on `ws`, and on each book
24
+ * update rebuild the {@link Quote} with the provider's public base `feeTier` —
25
+ * the same transform the one-shot `resolveQuote` applies to a REST snapshot.
26
+ * Emissions are throttled to {@link QUOTE_THROTTLE_MS}: the first book update
27
+ * emits immediately, then at most one (trailing, latest-book) emission per
28
+ * interval. Both venue WS plugins delegate here; each only supplies its own
29
+ * base tier.
30
+ *
31
+ * The returned unsubscribe is idempotent — it releases the underlying
32
+ * orderbook listener once and cancels any pending trailing emission, so the
33
+ * wire subscription's ref count cannot be double-decremented.
34
+ *
35
+ * @throws {PerpsError} `MarketNotFound` when no market matches symbol+type.
36
+ * @internal
37
+ */
38
+ export async function resolveSubscribeQuote(
39
+ client: PerpsSDKClient,
40
+ provider: string,
41
+ ws: Pick<WsProvider, 'subscribe'>,
42
+ params: ProviderGetQuoteParams,
43
+ feeTier: FeeTier,
44
+ onQuote: QuoteListener
45
+ ): Promise<() => void> {
46
+ const market = await resolveQuoteMarket(client, provider, params)
47
+
48
+ let latestBook: OrderbookResponse | undefined
49
+ let lastEmitAt = Number.NEGATIVE_INFINITY
50
+ let trailing: ReturnType<typeof setTimeout> | undefined
51
+
52
+ const emit = () => {
53
+ if (latestBook === undefined) {
54
+ return
55
+ }
56
+ lastEmitAt = Date.now()
57
+ onQuote(
58
+ buildQuote({
59
+ provider,
60
+ symbol: params.symbol,
61
+ type: params.type,
62
+ side: params.side,
63
+ sizeUsd: params.size,
64
+ market,
65
+ bids: latestBook.bids,
66
+ asks: latestBook.asks,
67
+ feeTier,
68
+ timestamp: Date.now(),
69
+ })
70
+ )
71
+ }
72
+
73
+ const unsubscribe = await ws.subscribe(
74
+ { channel: 'orderbook', dex: provider, marketId: market.id },
75
+ (event) => {
76
+ if (event.channel !== 'orderbook') {
77
+ return
78
+ }
79
+ latestBook = event.data
80
+ if (trailing !== undefined) {
81
+ return
82
+ }
83
+ const wait = QUOTE_THROTTLE_MS - (Date.now() - lastEmitAt)
84
+ if (wait <= 0) {
85
+ emit()
86
+ } else {
87
+ trailing = setTimeout(() => {
88
+ trailing = undefined
89
+ emit()
90
+ }, wait)
91
+ }
92
+ }
93
+ )
94
+
95
+ let released = false
96
+ return () => {
97
+ if (released) {
98
+ return
99
+ }
100
+ released = true
101
+ if (trailing !== undefined) {
102
+ clearTimeout(trailing)
103
+ trailing = undefined
104
+ }
105
+ unsubscribe()
106
+ }
107
+ }
@@ -0,0 +1,55 @@
1
+ import type { StorageAdapter } from './types.js'
2
+
3
+ /**
4
+ * Parse a persisted (browser-writable) JSON record and validate it against a
5
+ * caller-supplied shape guard. localStorage is user-writable, so a stored value
6
+ * may be truncated, hand-edited, or written by an older schema; `JSON.parse(...)
7
+ * as T` would type-check such a record yet carry missing/invalid fields that
8
+ * fail far from here.
9
+ *
10
+ * Returns the parsed value when `isValid` accepts it; returns `null` when the
11
+ * record is absent, unparseable, or fails validation (i.e. poisoned). A `null`
12
+ * result is the "malformed-or-absent" signal — callers decide whether that
13
+ * means "regenerate deliberately" or "surface an error", but they never get a
14
+ * structurally-invalid `T`.
15
+ *
16
+ * @param raw Stored string, or `null` when the key is absent.
17
+ * @param isValid Shape guard run against the parsed value.
18
+ */
19
+ export function parseStoredRecord<T>(
20
+ raw: string | null,
21
+ isValid: (value: unknown) => value is T
22
+ ): T | null {
23
+ if (raw === null) {
24
+ return null
25
+ }
26
+ let parsed: unknown
27
+ try {
28
+ parsed = JSON.parse(raw)
29
+ } catch {
30
+ return null
31
+ }
32
+ return isValid(parsed) ? parsed : null
33
+ }
34
+
35
+ /**
36
+ * Read and validate a persisted record in one step, evicting the key when the
37
+ * stored value is present but poisoned (unparseable or failing `isValid`) so a
38
+ * later read does not keep tripping over the same corrupt entry.
39
+ *
40
+ * Returns `null` for both the genuine-absence and the evicted-poison cases;
41
+ * callers that must distinguish them should compare against the pre-read
42
+ * presence of the key themselves.
43
+ */
44
+ export async function readValidatedRecord<T>(
45
+ storage: StorageAdapter,
46
+ key: string,
47
+ isValid: (value: unknown) => value is T
48
+ ): Promise<T | null> {
49
+ const raw = await storage.get(key)
50
+ const parsed = parseStoredRecord(raw, isValid)
51
+ if (parsed === null && raw !== null) {
52
+ await storage.remove(key)
53
+ }
54
+ return parsed
55
+ }
@@ -0,0 +1,60 @@
1
+ import type { StorageAdapter } from './types.js'
2
+
3
+ /**
4
+ * localStorage adapter for browser environments. Falls back to a no-op when
5
+ * `localStorage` is unavailable (e.g. SSR).
6
+ *
7
+ * @public
8
+ */
9
+ export const localStorageAdapter: StorageAdapter = {
10
+ get: (key: string): Promise<string | null> => {
11
+ try {
12
+ return Promise.resolve(localStorage.getItem(key))
13
+ } catch {
14
+ return Promise.resolve(null)
15
+ }
16
+ },
17
+
18
+ set: (key: string, value: string): Promise<void> => {
19
+ try {
20
+ localStorage.setItem(key, value)
21
+ } catch {
22
+ // localStorage not available
23
+ }
24
+ return Promise.resolve()
25
+ },
26
+
27
+ remove: (key: string): Promise<void> => {
28
+ try {
29
+ localStorage.removeItem(key)
30
+ } catch {
31
+ // localStorage not available
32
+ }
33
+ return Promise.resolve()
34
+ },
35
+ }
36
+
37
+ /**
38
+ * In-memory storage adapter for testing or server-side use.
39
+ *
40
+ * @public
41
+ */
42
+ export function createMemoryStorage(): StorageAdapter {
43
+ const store = new Map<string, string>()
44
+
45
+ return {
46
+ get: (key: string): Promise<string | null> => {
47
+ return Promise.resolve(store.get(key) ?? null)
48
+ },
49
+
50
+ set: (key: string, value: string): Promise<void> => {
51
+ store.set(key, value)
52
+ return Promise.resolve()
53
+ },
54
+
55
+ remove: (key: string): Promise<void> => {
56
+ store.delete(key)
57
+ return Promise.resolve()
58
+ },
59
+ }
60
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Storage adapter interface for persisting SDK session credentials (provider
3
+ * agent keypairs, API keys, read-only tokens). Implement this to use custom
4
+ * storage (e.g. encrypted storage, a database, async key-value stores).
5
+ */
6
+ export interface StorageAdapter {
7
+ /** Get a value by key. */
8
+ get(key: string): Promise<string | null>
9
+ /** Set a value by key. */
10
+ set(key: string, value: string): Promise<void>
11
+ /** Remove a value by key. */
12
+ remove(key: string): Promise<void>
13
+ }
@@ -0,0 +1,116 @@
1
+ import { sleep } from '../utils/sleep.js'
2
+ import type { ResolvedRetryPolicy, RetryClassification } from './retryPolicy.js'
3
+
4
+ /**
5
+ * Options for {@link fetchWithRetry}.
6
+ *
7
+ * @public
8
+ */
9
+ export interface FetchWithRetryOptions {
10
+ policy: ResolvedRetryPolicy
11
+ fetchImpl?: typeof fetch
12
+ signal?: AbortSignal
13
+ }
14
+
15
+ /**
16
+ * Wrap `fetch` with policy-driven retry. Honors `Retry-After` (when present
17
+ * and `respectRetryAfter` is true), otherwise falls back to exponential
18
+ * backoff with full jitter, capped by `maxDelayMs`. Network errors (thrown
19
+ * `fetch` rejections) are treated as `retry-network` — same retry budget as
20
+ * 5xx. An aborted signal short-circuits without further attempts.
21
+ *
22
+ * @public
23
+ */
24
+ export async function fetchWithRetry(
25
+ input: RequestInfo | URL,
26
+ init: RequestInit | undefined,
27
+ options: FetchWithRetryOptions
28
+ ): Promise<Response> {
29
+ const { policy, fetchImpl = fetch, signal } = options
30
+ const mergedInit: RequestInit = signal ? { ...init, signal } : (init ?? {})
31
+
32
+ let attempt = 0
33
+ while (true) {
34
+ if (signal?.aborted) {
35
+ throw signal.reason ?? new DOMException('Aborted', 'AbortError')
36
+ }
37
+
38
+ let response: Response | undefined
39
+ let networkError: unknown
40
+ try {
41
+ response = await fetchImpl(input, mergedInit)
42
+ } catch (error) {
43
+ networkError = error
44
+ }
45
+
46
+ if (response?.ok) {
47
+ return response
48
+ }
49
+
50
+ const classification: RetryClassification = response
51
+ ? policy.classify({ response })
52
+ : 'retry-network'
53
+
54
+ const attemptsRemaining = policy.maxAttempts - attempt - 1
55
+ const isRetriable = classification !== 'fail' && attemptsRemaining > 0
56
+
57
+ if (!isRetriable) {
58
+ if (response) {
59
+ return response
60
+ }
61
+ throw networkError
62
+ }
63
+
64
+ if (policy.shouldRetry) {
65
+ const ok = await policy.shouldRetry({
66
+ attempt,
67
+ response,
68
+ error: networkError,
69
+ classification,
70
+ })
71
+ if (!ok) {
72
+ if (response) {
73
+ return response
74
+ }
75
+ throw networkError
76
+ }
77
+ }
78
+
79
+ const delayMs = computeDelay(policy, attempt, response)
80
+ if (delayMs > 0) {
81
+ await sleep(delayMs)
82
+ }
83
+ attempt++
84
+ }
85
+ }
86
+
87
+ function computeDelay(
88
+ policy: ResolvedRetryPolicy,
89
+ attempt: number,
90
+ response: Response | undefined
91
+ ): number {
92
+ if (policy.respectRetryAfter && response) {
93
+ const header = response.headers.get('Retry-After')
94
+ if (header) {
95
+ const parsed = parseRetryAfter(header)
96
+ if (parsed !== undefined) {
97
+ return Math.min(parsed, policy.maxDelayMs)
98
+ }
99
+ }
100
+ }
101
+ const exp = policy.baseDelayMs * 2 ** attempt
102
+ const capped = Math.min(exp, policy.maxDelayMs)
103
+ return Math.floor(Math.random() * capped)
104
+ }
105
+
106
+ function parseRetryAfter(header: string): number | undefined {
107
+ const seconds = Number(header)
108
+ if (Number.isFinite(seconds) && seconds >= 0) {
109
+ return seconds * 1000
110
+ }
111
+ const dateMs = Date.parse(header)
112
+ if (!Number.isNaN(dateMs)) {
113
+ return Math.max(0, dateMs - Date.now())
114
+ }
115
+ return undefined
116
+ }
@@ -0,0 +1,123 @@
1
+ import type { PerpsErrorBody } from '@lifi/perps-types'
2
+ import { PerpsErrorCode } from '@lifi/perps-types'
3
+ import { PerpsError } from '../errors/PerpsError.js'
4
+ import type { PerpsBaseConfig, SDKRequestOptions } from '../types/config.js'
5
+ import { version } from '../version.js'
6
+ import { fetchWithRetry } from './fetchWithRetry.js'
7
+ import {
8
+ LIFI_REQUEST_KEY,
9
+ LIFI_RETRY_DEFAULTS,
10
+ type RetryPolicy,
11
+ resolveRetryPolicy,
12
+ } from './retryPolicy.js'
13
+
14
+ /**
15
+ * `RequestInit` plus a per-call retry override.
16
+ *
17
+ * @internal
18
+ */
19
+ export interface RequestOptions extends RequestInit {
20
+ /** Per-call retry override. Falls back to the resolved client-level policy. */
21
+ retry?: RetryPolicy | false
22
+ }
23
+
24
+ /**
25
+ * Internal HTTP helper: applies SDK headers, retry policy, and the request
26
+ * interceptor, then normalizes failures into {@link PerpsError}.
27
+ *
28
+ * @internal
29
+ */
30
+ export async function request<T>(
31
+ config: PerpsBaseConfig,
32
+ url: string,
33
+ options: RequestOptions = {},
34
+ sdkOptions?: SDKRequestOptions
35
+ ): Promise<T> {
36
+ const { retry, ...fetchInit } = options
37
+ const policy =
38
+ retry !== undefined
39
+ ? resolveRetryPolicy(LIFI_RETRY_DEFAULTS, retry, LIFI_REQUEST_KEY)
40
+ : resolveRetryPolicy(LIFI_RETRY_DEFAULTS, config.retry, LIFI_REQUEST_KEY)
41
+
42
+ const headers: Record<string, string> = {
43
+ 'Content-Type': 'application/json',
44
+ 'x-lifi-integrator': config.integrator,
45
+ 'x-lifi-perps-sdk': version,
46
+ ...(fetchInit.headers as Record<string, string>),
47
+ }
48
+
49
+ if (config.apiKey) {
50
+ headers['x-lifi-api-key'] = config.apiKey
51
+ }
52
+
53
+ let finalOptions: RequestInit = {
54
+ ...fetchInit,
55
+ headers,
56
+ signal: sdkOptions?.signal ?? fetchInit.signal,
57
+ }
58
+
59
+ if (config.requestInterceptor) {
60
+ finalOptions = await config.requestInterceptor(url, finalOptions)
61
+ }
62
+
63
+ try {
64
+ const response = await fetchWithRetry(url, finalOptions, {
65
+ policy,
66
+ fetchImpl: config.fetch,
67
+ signal: sdkOptions?.signal ?? finalOptions.signal ?? undefined,
68
+ })
69
+
70
+ if (!response.ok) {
71
+ let body: PerpsErrorBody | undefined
72
+ try {
73
+ body = await response.json()
74
+ } catch {}
75
+
76
+ const fallbackMessage = `Request failed with status code ${response.status}`
77
+ if (
78
+ body &&
79
+ typeof body.code === 'number' &&
80
+ typeof body.message === 'string'
81
+ ) {
82
+ const error = new PerpsError(body.code, body.message)
83
+ error.tool = body.tool ?? 'unknown'
84
+ throw error
85
+ }
86
+ const error = new PerpsError(PerpsErrorCode.DefaultError, fallbackMessage)
87
+ error.tool = 'unknown'
88
+ throw error
89
+ }
90
+
91
+ return (await response.json()) as T
92
+ } catch (error) {
93
+ if (error instanceof PerpsError) {
94
+ throw error
95
+ }
96
+
97
+ throw new PerpsError(
98
+ PerpsErrorCode.ServerError,
99
+ error instanceof Error ? error.message : 'Request failed'
100
+ )
101
+ }
102
+ }
103
+
104
+ /**
105
+ * Build a URL with a query string from defined params (skips `undefined`).
106
+ *
107
+ * @internal
108
+ */
109
+ export function buildUrl(
110
+ baseUrl: string,
111
+ params: Record<string, string | number | boolean | undefined>
112
+ ): string {
113
+ const searchParams = new URLSearchParams()
114
+
115
+ for (const [key, value] of Object.entries(params)) {
116
+ if (value !== undefined) {
117
+ searchParams.set(key, String(value))
118
+ }
119
+ }
120
+
121
+ const queryString = searchParams.toString()
122
+ return queryString ? `${baseUrl}?${queryString}` : baseUrl
123
+ }