@lifi/perps-sdk 0.1.1-alpha.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 (368) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +54 -0
  3. package/dist/cjs/agent/AgentManager.d.ts +15 -0
  4. package/dist/cjs/agent/AgentManager.d.ts.map +1 -0
  5. package/dist/cjs/agent/AgentManager.js +80 -0
  6. package/dist/cjs/agent/AgentManager.js.map +1 -0
  7. package/dist/cjs/agent/storage.d.ts +4 -0
  8. package/dist/cjs/agent/storage.d.ts.map +1 -0
  9. package/dist/cjs/agent/storage.js +47 -0
  10. package/dist/cjs/agent/storage.js.map +1 -0
  11. package/dist/cjs/agent/types.d.ts +11 -0
  12. package/dist/cjs/agent/types.d.ts.map +1 -0
  13. package/dist/cjs/agent/types.js +3 -0
  14. package/dist/cjs/agent/types.js.map +1 -0
  15. package/dist/cjs/client/PerpsClient.d.ts +29 -0
  16. package/dist/cjs/client/PerpsClient.d.ts.map +1 -0
  17. package/dist/cjs/client/PerpsClient.js +328 -0
  18. package/dist/cjs/client/PerpsClient.js.map +1 -0
  19. package/dist/cjs/client/createPerpsClient.d.ts +30 -0
  20. package/dist/cjs/client/createPerpsClient.d.ts.map +1 -0
  21. package/dist/cjs/client/createPerpsClient.js +56 -0
  22. package/dist/cjs/client/createPerpsClient.js.map +1 -0
  23. package/dist/cjs/client/types.d.ts +61 -0
  24. package/dist/cjs/client/types.d.ts.map +1 -0
  25. package/dist/cjs/client/types.js +3 -0
  26. package/dist/cjs/client/types.js.map +1 -0
  27. package/dist/cjs/errors/AgentError.d.ts +10 -0
  28. package/dist/cjs/errors/AgentError.d.ts.map +1 -0
  29. package/dist/cjs/errors/AgentError.js +23 -0
  30. package/dist/cjs/errors/AgentError.js.map +1 -0
  31. package/dist/cjs/errors/HTTPError.d.ts +11 -0
  32. package/dist/cjs/errors/HTTPError.d.ts.map +1 -0
  33. package/dist/cjs/errors/HTTPError.js +62 -0
  34. package/dist/cjs/errors/HTTPError.js.map +1 -0
  35. package/dist/cjs/errors/PerpsError.d.ts +9 -0
  36. package/dist/cjs/errors/PerpsError.d.ts.map +1 -0
  37. package/dist/cjs/errors/PerpsError.js +27 -0
  38. package/dist/cjs/errors/PerpsError.js.map +1 -0
  39. package/dist/cjs/errors/PerpsSDKError.d.ts +9 -0
  40. package/dist/cjs/errors/PerpsSDKError.d.ts.map +1 -0
  41. package/dist/cjs/errors/PerpsSDKError.js +36 -0
  42. package/dist/cjs/errors/PerpsSDKError.js.map +1 -0
  43. package/dist/cjs/errors/ServerError.d.ts +10 -0
  44. package/dist/cjs/errors/ServerError.d.ts.map +1 -0
  45. package/dist/cjs/errors/ServerError.js +24 -0
  46. package/dist/cjs/errors/ServerError.js.map +1 -0
  47. package/dist/cjs/errors/ValidationError.d.ts +9 -0
  48. package/dist/cjs/errors/ValidationError.d.ts.map +1 -0
  49. package/dist/cjs/errors/ValidationError.js +23 -0
  50. package/dist/cjs/errors/ValidationError.js.map +1 -0
  51. package/dist/cjs/errors/constants.d.ts +15 -0
  52. package/dist/cjs/errors/constants.d.ts.map +1 -0
  53. package/dist/cjs/errors/constants.js +20 -0
  54. package/dist/cjs/errors/constants.js.map +1 -0
  55. package/dist/cjs/errors/utils/rootCause.d.ts +6 -0
  56. package/dist/cjs/errors/utils/rootCause.d.ts.map +1 -0
  57. package/dist/cjs/errors/utils/rootCause.js +41 -0
  58. package/dist/cjs/errors/utils/rootCause.js.map +1 -0
  59. package/dist/cjs/index.d.ts +46 -0
  60. package/dist/cjs/index.d.ts.map +1 -0
  61. package/dist/cjs/index.js +82 -0
  62. package/dist/cjs/index.js.map +1 -0
  63. package/dist/cjs/package.json +1 -0
  64. package/dist/cjs/services/cancelOrder.d.ts +10 -0
  65. package/dist/cjs/services/cancelOrder.d.ts.map +1 -0
  66. package/dist/cjs/services/cancelOrder.js +16 -0
  67. package/dist/cjs/services/cancelOrder.js.map +1 -0
  68. package/dist/cjs/services/createAuthorization.d.ts +10 -0
  69. package/dist/cjs/services/createAuthorization.d.ts.map +1 -0
  70. package/dist/cjs/services/createAuthorization.js +16 -0
  71. package/dist/cjs/services/createAuthorization.js.map +1 -0
  72. package/dist/cjs/services/createOrder.d.ts +21 -0
  73. package/dist/cjs/services/createOrder.d.ts.map +1 -0
  74. package/dist/cjs/services/createOrder.js +27 -0
  75. package/dist/cjs/services/createOrder.js.map +1 -0
  76. package/dist/cjs/services/getAccount.d.ts +8 -0
  77. package/dist/cjs/services/getAccount.d.ts.map +1 -0
  78. package/dist/cjs/services/getAccount.js +12 -0
  79. package/dist/cjs/services/getAccount.js.map +1 -0
  80. package/dist/cjs/services/getDexes.d.ts +4 -0
  81. package/dist/cjs/services/getDexes.d.ts.map +1 -0
  82. package/dist/cjs/services/getDexes.js +8 -0
  83. package/dist/cjs/services/getDexes.js.map +1 -0
  84. package/dist/cjs/services/getHistory.d.ts +10 -0
  85. package/dist/cjs/services/getHistory.d.ts.map +1 -0
  86. package/dist/cjs/services/getHistory.js +14 -0
  87. package/dist/cjs/services/getHistory.js.map +1 -0
  88. package/dist/cjs/services/getMarket.d.ts +8 -0
  89. package/dist/cjs/services/getMarket.d.ts.map +1 -0
  90. package/dist/cjs/services/getMarket.js +11 -0
  91. package/dist/cjs/services/getMarket.js.map +1 -0
  92. package/dist/cjs/services/getMarkets.d.ts +7 -0
  93. package/dist/cjs/services/getMarkets.d.ts.map +1 -0
  94. package/dist/cjs/services/getMarkets.js +9 -0
  95. package/dist/cjs/services/getMarkets.js.map +1 -0
  96. package/dist/cjs/services/getOhlcv.d.ts +12 -0
  97. package/dist/cjs/services/getOhlcv.d.ts.map +1 -0
  98. package/dist/cjs/services/getOhlcv.js +15 -0
  99. package/dist/cjs/services/getOhlcv.js.map +1 -0
  100. package/dist/cjs/services/getOrder.d.ts +9 -0
  101. package/dist/cjs/services/getOrder.d.ts.map +1 -0
  102. package/dist/cjs/services/getOrder.js +12 -0
  103. package/dist/cjs/services/getOrder.js.map +1 -0
  104. package/dist/cjs/services/getOrderbook.d.ts +9 -0
  105. package/dist/cjs/services/getOrderbook.d.ts.map +1 -0
  106. package/dist/cjs/services/getOrderbook.js +12 -0
  107. package/dist/cjs/services/getOrderbook.js.map +1 -0
  108. package/dist/cjs/services/getPrices.d.ts +8 -0
  109. package/dist/cjs/services/getPrices.d.ts.map +1 -0
  110. package/dist/cjs/services/getPrices.js +12 -0
  111. package/dist/cjs/services/getPrices.js.map +1 -0
  112. package/dist/cjs/services/submitAuthorization.d.ts +10 -0
  113. package/dist/cjs/services/submitAuthorization.d.ts.map +1 -0
  114. package/dist/cjs/services/submitAuthorization.js +16 -0
  115. package/dist/cjs/services/submitAuthorization.js.map +1 -0
  116. package/dist/cjs/services/submitOrder.d.ts +10 -0
  117. package/dist/cjs/services/submitOrder.d.ts.map +1 -0
  118. package/dist/cjs/services/submitOrder.js +16 -0
  119. package/dist/cjs/services/submitOrder.js.map +1 -0
  120. package/dist/cjs/utils/request.d.ts +7 -0
  121. package/dist/cjs/utils/request.d.ts.map +1 -0
  122. package/dist/cjs/utils/request.js +63 -0
  123. package/dist/cjs/utils/request.js.map +1 -0
  124. package/dist/cjs/utils/signTypedData.d.ts +3 -0
  125. package/dist/cjs/utils/signTypedData.d.ts.map +1 -0
  126. package/dist/cjs/utils/signTypedData.js +15 -0
  127. package/dist/cjs/utils/signTypedData.js.map +1 -0
  128. package/dist/cjs/utils/sleep.d.ts +2 -0
  129. package/dist/cjs/utils/sleep.d.ts.map +1 -0
  130. package/dist/cjs/utils/sleep.js +6 -0
  131. package/dist/cjs/utils/sleep.js.map +1 -0
  132. package/dist/cjs/version.d.ts +3 -0
  133. package/dist/cjs/version.d.ts.map +1 -0
  134. package/dist/cjs/version.js +6 -0
  135. package/dist/cjs/version.js.map +1 -0
  136. package/dist/esm/agent/AgentManager.d.ts +45 -0
  137. package/dist/esm/agent/AgentManager.d.ts.map +1 -0
  138. package/dist/esm/agent/AgentManager.js +110 -0
  139. package/dist/esm/agent/AgentManager.js.map +1 -0
  140. package/dist/esm/agent/storage.d.ts +12 -0
  141. package/dist/esm/agent/storage.d.ts.map +1 -0
  142. package/dist/esm/agent/storage.js +54 -0
  143. package/dist/esm/agent/storage.js.map +1 -0
  144. package/dist/esm/agent/types.d.ts +23 -0
  145. package/dist/esm/agent/types.d.ts.map +1 -0
  146. package/dist/esm/agent/types.js +2 -0
  147. package/dist/esm/agent/types.js.map +1 -0
  148. package/dist/esm/client/PerpsClient.d.ts +188 -0
  149. package/dist/esm/client/PerpsClient.d.ts.map +1 -0
  150. package/dist/esm/client/PerpsClient.js +512 -0
  151. package/dist/esm/client/PerpsClient.js.map +1 -0
  152. package/dist/esm/client/createPerpsClient.d.ts +82 -0
  153. package/dist/esm/client/createPerpsClient.d.ts.map +1 -0
  154. package/dist/esm/client/createPerpsClient.js +80 -0
  155. package/dist/esm/client/createPerpsClient.js.map +1 -0
  156. package/dist/esm/client/types.d.ts +131 -0
  157. package/dist/esm/client/types.d.ts.map +1 -0
  158. package/dist/esm/client/types.js +2 -0
  159. package/dist/esm/client/types.js.map +1 -0
  160. package/dist/esm/errors/AgentError.d.ts +25 -0
  161. package/dist/esm/errors/AgentError.d.ts.map +1 -0
  162. package/dist/esm/errors/AgentError.js +35 -0
  163. package/dist/esm/errors/AgentError.js.map +1 -0
  164. package/dist/esm/errors/HTTPError.d.ts +11 -0
  165. package/dist/esm/errors/HTTPError.d.ts.map +1 -0
  166. package/dist/esm/errors/HTTPError.js +61 -0
  167. package/dist/esm/errors/HTTPError.js.map +1 -0
  168. package/dist/esm/errors/PerpsError.d.ts +9 -0
  169. package/dist/esm/errors/PerpsError.d.ts.map +1 -0
  170. package/dist/esm/errors/PerpsError.js +23 -0
  171. package/dist/esm/errors/PerpsError.js.map +1 -0
  172. package/dist/esm/errors/PerpsSDKError.d.ts +40 -0
  173. package/dist/esm/errors/PerpsSDKError.d.ts.map +1 -0
  174. package/dist/esm/errors/PerpsSDKError.js +67 -0
  175. package/dist/esm/errors/PerpsSDKError.js.map +1 -0
  176. package/dist/esm/errors/ServerError.d.ts +23 -0
  177. package/dist/esm/errors/ServerError.d.ts.map +1 -0
  178. package/dist/esm/errors/ServerError.js +34 -0
  179. package/dist/esm/errors/ServerError.js.map +1 -0
  180. package/dist/esm/errors/ValidationError.d.ts +23 -0
  181. package/dist/esm/errors/ValidationError.d.ts.map +1 -0
  182. package/dist/esm/errors/ValidationError.js +34 -0
  183. package/dist/esm/errors/ValidationError.js.map +1 -0
  184. package/dist/esm/errors/constants.d.ts +15 -0
  185. package/dist/esm/errors/constants.d.ts.map +1 -0
  186. package/dist/esm/errors/constants.js +17 -0
  187. package/dist/esm/errors/constants.js.map +1 -0
  188. package/dist/esm/errors/utils/rootCause.d.ts +71 -0
  189. package/dist/esm/errors/utils/rootCause.d.ts.map +1 -0
  190. package/dist/esm/errors/utils/rootCause.js +99 -0
  191. package/dist/esm/errors/utils/rootCause.js.map +1 -0
  192. package/dist/esm/index.d.ts +46 -0
  193. package/dist/esm/index.d.ts.map +1 -0
  194. package/dist/esm/index.js +37 -0
  195. package/dist/esm/index.js.map +1 -0
  196. package/dist/esm/package.json +1 -0
  197. package/dist/esm/services/cancelOrder.d.ts +51 -0
  198. package/dist/esm/services/cancelOrder.d.ts.map +1 -0
  199. package/dist/esm/services/cancelOrder.js +50 -0
  200. package/dist/esm/services/cancelOrder.js.map +1 -0
  201. package/dist/esm/services/createAuthorization.d.ts +47 -0
  202. package/dist/esm/services/createAuthorization.d.ts.map +1 -0
  203. package/dist/esm/services/createAuthorization.js +46 -0
  204. package/dist/esm/services/createAuthorization.js.map +1 -0
  205. package/dist/esm/services/createOrder.d.ts +71 -0
  206. package/dist/esm/services/createOrder.d.ts.map +1 -0
  207. package/dist/esm/services/createOrder.js +59 -0
  208. package/dist/esm/services/createOrder.js.map +1 -0
  209. package/dist/esm/services/getAccount.d.ts +32 -0
  210. package/dist/esm/services/getAccount.d.ts.map +1 -0
  211. package/dist/esm/services/getAccount.js +31 -0
  212. package/dist/esm/services/getAccount.js.map +1 -0
  213. package/dist/esm/services/getDexes.d.ts +20 -0
  214. package/dist/esm/services/getDexes.d.ts.map +1 -0
  215. package/dist/esm/services/getDexes.js +21 -0
  216. package/dist/esm/services/getDexes.js.map +1 -0
  217. package/dist/esm/services/getHistory.d.ts +45 -0
  218. package/dist/esm/services/getHistory.d.ts.map +1 -0
  219. package/dist/esm/services/getHistory.js +42 -0
  220. package/dist/esm/services/getHistory.js.map +1 -0
  221. package/dist/esm/services/getMarket.d.ts +27 -0
  222. package/dist/esm/services/getMarket.d.ts.map +1 -0
  223. package/dist/esm/services/getMarket.js +25 -0
  224. package/dist/esm/services/getMarket.js.map +1 -0
  225. package/dist/esm/services/getMarkets.d.ts +25 -0
  226. package/dist/esm/services/getMarkets.d.ts.map +1 -0
  227. package/dist/esm/services/getMarkets.js +23 -0
  228. package/dist/esm/services/getMarkets.js.map +1 -0
  229. package/dist/esm/services/getOhlcv.d.ts +40 -0
  230. package/dist/esm/services/getOhlcv.d.ts.map +1 -0
  231. package/dist/esm/services/getOhlcv.js +34 -0
  232. package/dist/esm/services/getOhlcv.js.map +1 -0
  233. package/dist/esm/services/getOrder.d.ts +33 -0
  234. package/dist/esm/services/getOrder.d.ts.map +1 -0
  235. package/dist/esm/services/getOrder.js +30 -0
  236. package/dist/esm/services/getOrder.js.map +1 -0
  237. package/dist/esm/services/getOrderbook.d.ts +34 -0
  238. package/dist/esm/services/getOrderbook.d.ts.map +1 -0
  239. package/dist/esm/services/getOrderbook.js +31 -0
  240. package/dist/esm/services/getOrderbook.js.map +1 -0
  241. package/dist/esm/services/getPrices.d.ts +33 -0
  242. package/dist/esm/services/getPrices.d.ts.map +1 -0
  243. package/dist/esm/services/getPrices.js +32 -0
  244. package/dist/esm/services/getPrices.js.map +1 -0
  245. package/dist/esm/services/submitAuthorization.d.ts +42 -0
  246. package/dist/esm/services/submitAuthorization.d.ts.map +1 -0
  247. package/dist/esm/services/submitAuthorization.js +41 -0
  248. package/dist/esm/services/submitAuthorization.js.map +1 -0
  249. package/dist/esm/services/submitOrder.d.ts +44 -0
  250. package/dist/esm/services/submitOrder.d.ts.map +1 -0
  251. package/dist/esm/services/submitOrder.js +43 -0
  252. package/dist/esm/services/submitOrder.js.map +1 -0
  253. package/dist/esm/utils/request.d.ts +26 -0
  254. package/dist/esm/utils/request.d.ts.map +1 -0
  255. package/dist/esm/utils/request.js +82 -0
  256. package/dist/esm/utils/request.js.map +1 -0
  257. package/dist/esm/utils/signTypedData.d.ts +15 -0
  258. package/dist/esm/utils/signTypedData.d.ts.map +1 -0
  259. package/dist/esm/utils/signTypedData.js +25 -0
  260. package/dist/esm/utils/signTypedData.js.map +1 -0
  261. package/dist/esm/utils/sleep.d.ts +2 -0
  262. package/dist/esm/utils/sleep.d.ts.map +1 -0
  263. package/dist/esm/utils/sleep.js +2 -0
  264. package/dist/esm/utils/sleep.js.map +1 -0
  265. package/dist/esm/version.d.ts +3 -0
  266. package/dist/esm/version.d.ts.map +1 -0
  267. package/dist/esm/version.js +3 -0
  268. package/dist/esm/version.js.map +1 -0
  269. package/dist/types/agent/AgentManager.d.ts +45 -0
  270. package/dist/types/agent/AgentManager.d.ts.map +1 -0
  271. package/dist/types/agent/storage.d.ts +12 -0
  272. package/dist/types/agent/storage.d.ts.map +1 -0
  273. package/dist/types/agent/types.d.ts +23 -0
  274. package/dist/types/agent/types.d.ts.map +1 -0
  275. package/dist/types/client/PerpsClient.d.ts +188 -0
  276. package/dist/types/client/PerpsClient.d.ts.map +1 -0
  277. package/dist/types/client/createPerpsClient.d.ts +82 -0
  278. package/dist/types/client/createPerpsClient.d.ts.map +1 -0
  279. package/dist/types/client/types.d.ts +131 -0
  280. package/dist/types/client/types.d.ts.map +1 -0
  281. package/dist/types/errors/AgentError.d.ts +25 -0
  282. package/dist/types/errors/AgentError.d.ts.map +1 -0
  283. package/dist/types/errors/HTTPError.d.ts +11 -0
  284. package/dist/types/errors/HTTPError.d.ts.map +1 -0
  285. package/dist/types/errors/PerpsError.d.ts +9 -0
  286. package/dist/types/errors/PerpsError.d.ts.map +1 -0
  287. package/dist/types/errors/PerpsSDKError.d.ts +40 -0
  288. package/dist/types/errors/PerpsSDKError.d.ts.map +1 -0
  289. package/dist/types/errors/ServerError.d.ts +23 -0
  290. package/dist/types/errors/ServerError.d.ts.map +1 -0
  291. package/dist/types/errors/ValidationError.d.ts +23 -0
  292. package/dist/types/errors/ValidationError.d.ts.map +1 -0
  293. package/dist/types/errors/constants.d.ts +15 -0
  294. package/dist/types/errors/constants.d.ts.map +1 -0
  295. package/dist/types/errors/utils/rootCause.d.ts +71 -0
  296. package/dist/types/errors/utils/rootCause.d.ts.map +1 -0
  297. package/dist/types/index.d.ts +46 -0
  298. package/dist/types/index.d.ts.map +1 -0
  299. package/dist/types/services/cancelOrder.d.ts +51 -0
  300. package/dist/types/services/cancelOrder.d.ts.map +1 -0
  301. package/dist/types/services/createAuthorization.d.ts +47 -0
  302. package/dist/types/services/createAuthorization.d.ts.map +1 -0
  303. package/dist/types/services/createOrder.d.ts +71 -0
  304. package/dist/types/services/createOrder.d.ts.map +1 -0
  305. package/dist/types/services/getAccount.d.ts +32 -0
  306. package/dist/types/services/getAccount.d.ts.map +1 -0
  307. package/dist/types/services/getDexes.d.ts +20 -0
  308. package/dist/types/services/getDexes.d.ts.map +1 -0
  309. package/dist/types/services/getHistory.d.ts +45 -0
  310. package/dist/types/services/getHistory.d.ts.map +1 -0
  311. package/dist/types/services/getMarket.d.ts +27 -0
  312. package/dist/types/services/getMarket.d.ts.map +1 -0
  313. package/dist/types/services/getMarkets.d.ts +25 -0
  314. package/dist/types/services/getMarkets.d.ts.map +1 -0
  315. package/dist/types/services/getOhlcv.d.ts +40 -0
  316. package/dist/types/services/getOhlcv.d.ts.map +1 -0
  317. package/dist/types/services/getOrder.d.ts +33 -0
  318. package/dist/types/services/getOrder.d.ts.map +1 -0
  319. package/dist/types/services/getOrderbook.d.ts +34 -0
  320. package/dist/types/services/getOrderbook.d.ts.map +1 -0
  321. package/dist/types/services/getPrices.d.ts +33 -0
  322. package/dist/types/services/getPrices.d.ts.map +1 -0
  323. package/dist/types/services/submitAuthorization.d.ts +42 -0
  324. package/dist/types/services/submitAuthorization.d.ts.map +1 -0
  325. package/dist/types/services/submitOrder.d.ts +44 -0
  326. package/dist/types/services/submitOrder.d.ts.map +1 -0
  327. package/dist/types/utils/request.d.ts +26 -0
  328. package/dist/types/utils/request.d.ts.map +1 -0
  329. package/dist/types/utils/signTypedData.d.ts +15 -0
  330. package/dist/types/utils/signTypedData.d.ts.map +1 -0
  331. package/dist/types/utils/sleep.d.ts +2 -0
  332. package/dist/types/utils/sleep.d.ts.map +1 -0
  333. package/dist/types/version.d.ts +3 -0
  334. package/dist/types/version.d.ts.map +1 -0
  335. package/package.json +102 -0
  336. package/src/agent/AgentManager.ts +135 -0
  337. package/src/agent/storage.ts +58 -0
  338. package/src/agent/types.ts +24 -0
  339. package/src/client/PerpsClient.ts +654 -0
  340. package/src/client/createPerpsClient.ts +164 -0
  341. package/src/client/types.ts +156 -0
  342. package/src/errors/AgentError.ts +43 -0
  343. package/src/errors/HTTPError.ts +72 -0
  344. package/src/errors/PerpsError.ts +34 -0
  345. package/src/errors/PerpsSDKError.ts +79 -0
  346. package/src/errors/ServerError.ts +41 -0
  347. package/src/errors/ValidationError.ts +38 -0
  348. package/src/errors/constants.ts +15 -0
  349. package/src/errors/utils/rootCause.ts +112 -0
  350. package/src/index.ts +77 -0
  351. package/src/services/cancelOrder.ts +75 -0
  352. package/src/services/createAuthorization.ts +75 -0
  353. package/src/services/createOrder.ts +113 -0
  354. package/src/services/getAccount.ts +47 -0
  355. package/src/services/getDexes.ts +34 -0
  356. package/src/services/getHistory.ts +62 -0
  357. package/src/services/getMarket.ts +41 -0
  358. package/src/services/getMarkets.ts +37 -0
  359. package/src/services/getOhlcv.ts +58 -0
  360. package/src/services/getOrder.ts +48 -0
  361. package/src/services/getOrderbook.ts +49 -0
  362. package/src/services/getPrices.ts +48 -0
  363. package/src/services/submitAuthorization.ts +70 -0
  364. package/src/services/submitOrder.ts +72 -0
  365. package/src/utils/request.ts +121 -0
  366. package/src/utils/signTypedData.ts +31 -0
  367. package/src/utils/sleep.ts +2 -0
  368. package/src/version.ts +2 -0
@@ -0,0 +1,654 @@
1
+ import type {
2
+ Address,
3
+ AuthorizationInput,
4
+ AuthorizationsResponse,
5
+ CancelOrderPayloadResponse,
6
+ CreateAuthorizationResponse,
7
+ CreateOrderResponse,
8
+ OrderActionType,
9
+ SignedAuthorization,
10
+ SignedOrderAction,
11
+ SubmitOrderResponse,
12
+ } from '@lifi/perps-types'
13
+ import { PerpsErrorCode } from '@lifi/perps-types'
14
+ import { PerpsErrorMessage } from '../errors/constants.js'
15
+ import { PerpsError } from '../errors/PerpsError.js'
16
+ import { cancelOrder } from '../services/cancelOrder.js'
17
+ import { createAuthorization } from '../services/createAuthorization.js'
18
+ import { createOrder } from '../services/createOrder.js'
19
+ import { getAccount } from '../services/getAccount.js'
20
+ import { getDexes } from '../services/getDexes.js'
21
+ import type { SubmitAuthorizationParams } from '../services/submitAuthorization.js'
22
+ import { submitAuthorization } from '../services/submitAuthorization.js'
23
+ import type { SubmitOrderParams } from '../services/submitOrder.js'
24
+ import { submitOrder } from '../services/submitOrder.js'
25
+ import { signTypedData } from '../utils/signTypedData.js'
26
+ import { createPerpsClient, type PerpsSDKClient } from './createPerpsClient.js'
27
+ import type {
28
+ BuildAuthorizationParams,
29
+ CancelOrdersParams,
30
+ ExecuteAuthorizationsParams,
31
+ ExecuteAuthorizationsResult,
32
+ GetRequiredAuthorizationsParams,
33
+ PerpsClientOptions,
34
+ PlaceOrderParams,
35
+ RequiredAuthorizationsResult,
36
+ SigningMode,
37
+ } from './types.js'
38
+
39
+ /**
40
+ * Stateful client for managing signing modes and trading operations.
41
+ *
42
+ * The PerpsClient provides two signing modes:
43
+ * - `USER`: User wallet signs each action (wallet popup per action)
44
+ * - `USER_AGENT`: SDK-generated agent signs actions (no popups after setup)
45
+ *
46
+ * In `USER_AGENT` mode, the client:
47
+ * - Generates an agent keypair stored in localStorage (or custom storage)
48
+ * - Auto-injects agent address into authorization requests
49
+ * - Auto-signs trading actions with the agent key
50
+ *
51
+ * @example
52
+ * ```ts
53
+ * const perps = new PerpsClient({ integrator: 'my-app' })
54
+ *
55
+ * // Set up agent signing for a user + DEX pair
56
+ * await perps.setSigningMode(userAddress, 'hyperliquid', 'USER_AGENT')
57
+ *
58
+ * // Build authorization (agent address auto-injected)
59
+ * const { actions } = await perps.buildAuthorization({
60
+ * dex: 'hyperliquid',
61
+ * address: userAddress,
62
+ * authorizations: [
63
+ * { key: 'ApproveAgent' },
64
+ * { key: 'ApproveBuilderFee' }
65
+ * ]
66
+ * })
67
+ *
68
+ * // ... sign actions with user wallet ...
69
+ *
70
+ * // Place orders (agent signs automatically)
71
+ * const result = await perps.placeOrder({
72
+ * address: userAddress,
73
+ * dex: 'hyperliquid',
74
+ * symbol: 'BTC',
75
+ * side: 'BUY',
76
+ * type: 'MARKET',
77
+ * size: '0.1',
78
+ * price: '95000.00'
79
+ * })
80
+ * ```
81
+ */
82
+ export class PerpsClient {
83
+ private sdkClient: PerpsSDKClient
84
+ private signingModes: Map<string, SigningMode> = new Map()
85
+
86
+ constructor(options: PerpsClientOptions) {
87
+ this.sdkClient = createPerpsClient({
88
+ integrator: options.integrator,
89
+ apiKey: options.apiKey,
90
+ apiUrl: options.apiUrl,
91
+ storage: options.storage,
92
+ healthCheck: options.healthCheck,
93
+ })
94
+ }
95
+
96
+ /**
97
+ * Get the underlying SDK client for use with service functions.
98
+ */
99
+ get client(): PerpsSDKClient {
100
+ return this.sdkClient
101
+ }
102
+
103
+ /**
104
+ * Promise that resolves when the API health check passes.
105
+ * Await this before making requests if you need to handle readiness explicitly.
106
+ */
107
+ get ready(): Promise<void> {
108
+ return this.sdkClient.ready
109
+ }
110
+
111
+ /**
112
+ * Get the storage key for a user + DEX pair.
113
+ */
114
+ private modeKey(address: Address, dex: string): string {
115
+ return `${address.toLowerCase()}:${dex.toLowerCase()}`
116
+ }
117
+
118
+ /**
119
+ * Set the signing mode for a user + DEX pair.
120
+ *
121
+ * In `USER_AGENT` mode, generates an agent keypair if one doesn't exist.
122
+ *
123
+ * @param address - User wallet address
124
+ * @param dex - DEX identifier
125
+ * @param mode - Signing mode to set
126
+ */
127
+ async setSigningMode(
128
+ address: Address,
129
+ dex: string,
130
+ mode: SigningMode
131
+ ): Promise<void> {
132
+ const key = this.modeKey(address, dex)
133
+ this.signingModes.set(key, mode)
134
+
135
+ if (mode === 'USER_AGENT') {
136
+ // Generate agent keypair if not exists
137
+ await this.sdkClient.agentManager.getOrCreateAgent(address, dex)
138
+ }
139
+ }
140
+
141
+ /**
142
+ * Get the current signing mode for a user + DEX pair.
143
+ * Defaults to `USER` if not set.
144
+ */
145
+ getSigningMode(address: Address, dex: string): SigningMode {
146
+ return this.signingModes.get(this.modeKey(address, dex)) ?? 'USER'
147
+ }
148
+
149
+ /**
150
+ * Get the agent address for a user + DEX pair.
151
+ *
152
+ * @throws {PerpsError} If in USER mode or agent not found
153
+ */
154
+ async getAgentAddress(address: Address, dex: string): Promise<Address> {
155
+ const agent = await this.sdkClient.agentManager.getAgent(address, dex)
156
+ return agent.address
157
+ }
158
+
159
+ /**
160
+ * Check if an agent exists for a user + DEX pair.
161
+ */
162
+ async hasAgent(address: Address, dex: string): Promise<boolean> {
163
+ return this.sdkClient.agentManager.hasAgent(address, dex)
164
+ }
165
+
166
+ /**
167
+ * Remove the agent for a user + DEX pair.
168
+ * Also resets signing mode to USER.
169
+ */
170
+ async removeAgent(address: Address, dex: string): Promise<void> {
171
+ await this.sdkClient.agentManager.removeAgent(address, dex)
172
+ this.signingModes.delete(this.modeKey(address, dex))
173
+ }
174
+
175
+ /**
176
+ * Build authorization payloads for signing.
177
+ *
178
+ * In `USER` mode, `signerAddress` is omitted (backend defaults to `address`).
179
+ * In `USER_AGENT` mode, auto-injects the agent address as `signerAddress`
180
+ * and `agentAddress` param for `ApproveAgent` authorization.
181
+ *
182
+ * @param params - Authorization parameters
183
+ * @returns Authorization actions with typed data for signing
184
+ */
185
+ async buildAuthorization(
186
+ params: BuildAuthorizationParams
187
+ ): Promise<CreateAuthorizationResponse> {
188
+ const mode = this.getSigningMode(params.address, params.dex)
189
+ let { signerAddress, authorizations } = params
190
+
191
+ if (mode === 'USER_AGENT') {
192
+ const agent = await this.sdkClient.agentManager.getAgent(
193
+ params.address,
194
+ params.dex
195
+ )
196
+ signerAddress = signerAddress ?? agent.address
197
+
198
+ // Auto-inject agentAddress for ApproveAgent authorization
199
+ authorizations = authorizations.map((auth) => {
200
+ if (auth.key === 'ApproveAgent' && !auth.params?.agentAddress) {
201
+ return {
202
+ ...auth,
203
+ params: { ...auth.params, agentAddress: agent.address },
204
+ }
205
+ }
206
+ return auth
207
+ })
208
+ }
209
+
210
+ return createAuthorization(this.sdkClient, {
211
+ ...params,
212
+ signerAddress,
213
+ authorizations,
214
+ })
215
+ }
216
+
217
+ /**
218
+ * Submit signed authorizations.
219
+ *
220
+ * In `USER` mode, `signerAddress` is omitted (backend defaults to `address`).
221
+ * In `USER_AGENT` mode, auto-injects the agent address as `signerAddress`.
222
+ *
223
+ * @param params - Signed authorization parameters
224
+ */
225
+ async submitAuthorizations(
226
+ params: SubmitAuthorizationParams
227
+ ): Promise<AuthorizationsResponse> {
228
+ const mode = this.getSigningMode(params.address, params.dex)
229
+ let { signerAddress } = params
230
+
231
+ if (mode === 'USER_AGENT') {
232
+ const agent = await this.sdkClient.agentManager.getAgent(
233
+ params.address,
234
+ params.dex
235
+ )
236
+ signerAddress = signerAddress ?? agent.address
237
+ }
238
+
239
+ return submitAuthorization(this.sdkClient, { ...params, signerAddress })
240
+ }
241
+
242
+ /**
243
+ * Build order payloads for signing.
244
+ *
245
+ * In `USER` mode, `signerAddress` is omitted (backend defaults to `address`).
246
+ * In `USER_AGENT` mode, auto-injects the agent address as `signerAddress`.
247
+ *
248
+ * @param params - Order parameters
249
+ * @returns Order actions with typed data for signing
250
+ */
251
+ async buildOrder(params: PlaceOrderParams): Promise<CreateOrderResponse> {
252
+ const mode = this.getSigningMode(params.address, params.dex)
253
+ let signerAddress: Address | undefined
254
+
255
+ if (mode === 'USER_AGENT') {
256
+ const agent = await this.sdkClient.agentManager.getAgent(
257
+ params.address,
258
+ params.dex
259
+ )
260
+ signerAddress = agent.address
261
+ }
262
+
263
+ return createOrder(this.sdkClient, {
264
+ dex: params.dex,
265
+ address: params.address,
266
+ signerAddress,
267
+ clientOrderId: params.clientOrderId,
268
+ symbol: params.symbol,
269
+ side: params.side,
270
+ type: params.type,
271
+ size: params.size,
272
+ price: params.price,
273
+ leverage: params.leverage,
274
+ reduceOnly: params.reduceOnly,
275
+ timeInForce: params.timeInForce,
276
+ expiresAt: params.expiresAt,
277
+ takeProfit: params.takeProfit,
278
+ stopLoss: params.stopLoss,
279
+ })
280
+ }
281
+
282
+ /**
283
+ * Build cancel order payloads for signing.
284
+ *
285
+ * In `USER` mode, `signerAddress` is omitted (backend defaults to `address`).
286
+ * In `USER_AGENT` mode, auto-injects the agent address as `signerAddress`.
287
+ *
288
+ * @param params - Cancel parameters
289
+ * @returns Cancel actions with typed data for signing
290
+ */
291
+ async buildCancelOrder(
292
+ params: CancelOrdersParams
293
+ ): Promise<CancelOrderPayloadResponse> {
294
+ const mode = this.getSigningMode(params.address, params.dex)
295
+ let signerAddress: Address | undefined
296
+
297
+ if (mode === 'USER_AGENT') {
298
+ const agent = await this.sdkClient.agentManager.getAgent(
299
+ params.address,
300
+ params.dex
301
+ )
302
+ signerAddress = agent.address
303
+ }
304
+
305
+ return cancelOrder(this.sdkClient, {
306
+ dex: params.dex,
307
+ address: params.address,
308
+ signerAddress,
309
+ ids: params.ids,
310
+ })
311
+ }
312
+
313
+ /**
314
+ * Place an order with automatic agent signing.
315
+ *
316
+ * **Requires USER_AGENT mode.** For USER mode, use `buildOrder()` + `submitSignedOrder()`.
317
+ *
318
+ * @param params - Order parameters
319
+ * @returns Order submission results
320
+ * @throws {PerpsError} If not in USER_AGENT mode
321
+ */
322
+ async placeOrder(params: PlaceOrderParams): Promise<SubmitOrderResponse> {
323
+ const mode = this.getSigningMode(params.address, params.dex)
324
+
325
+ if (mode !== 'USER_AGENT') {
326
+ throw new PerpsError(
327
+ PerpsErrorCode.ValidationError,
328
+ `${PerpsErrorMessage.InvalidSigningMode} placeOrder() requires USER_AGENT mode. Use createOrder() + submitOrder() for USER mode.`
329
+ )
330
+ }
331
+
332
+ const agent = await this.sdkClient.agentManager.getAgent(
333
+ params.address,
334
+ params.dex
335
+ )
336
+
337
+ // 1. Create order payloads
338
+ const { actions } = await createOrder(this.sdkClient, {
339
+ dex: params.dex,
340
+ address: params.address,
341
+ signerAddress: agent.address,
342
+ clientOrderId: params.clientOrderId,
343
+ symbol: params.symbol,
344
+ side: params.side,
345
+ type: params.type,
346
+ size: params.size,
347
+ price: params.price,
348
+ leverage: params.leverage,
349
+ reduceOnly: params.reduceOnly,
350
+ timeInForce: params.timeInForce,
351
+ expiresAt: params.expiresAt,
352
+ takeProfit: params.takeProfit,
353
+ stopLoss: params.stopLoss,
354
+ })
355
+
356
+ // 2. Sign each action with agent key
357
+ const signedActions: SignedOrderAction[] = await Promise.all(
358
+ actions.map(async (a) => ({
359
+ action: a.action,
360
+ typedData: a.typedData,
361
+ signature: await signTypedData(agent.privateKey, a.typedData),
362
+ }))
363
+ )
364
+
365
+ // 3. Submit
366
+ return submitOrder(this.sdkClient, {
367
+ dex: params.dex,
368
+ address: params.address,
369
+ signerAddress: agent.address,
370
+ actions: signedActions,
371
+ })
372
+ }
373
+
374
+ /**
375
+ * Cancel orders with automatic agent signing.
376
+ *
377
+ * **Requires USER_AGENT mode.** For USER mode, use `buildCancelOrder()` + `submitSignedOrder()`.
378
+ *
379
+ * @param params - Cancel parameters
380
+ * @returns Cancel submission results
381
+ * @throws {PerpsError} If not in USER_AGENT mode
382
+ */
383
+ async cancelOrders(params: CancelOrdersParams): Promise<SubmitOrderResponse> {
384
+ const mode = this.getSigningMode(params.address, params.dex)
385
+
386
+ if (mode !== 'USER_AGENT') {
387
+ throw new PerpsError(
388
+ PerpsErrorCode.ValidationError,
389
+ `${PerpsErrorMessage.InvalidSigningMode} cancelOrders() requires USER_AGENT mode. Use cancelOrder() + submitOrder() for USER mode.`
390
+ )
391
+ }
392
+
393
+ const agent = await this.sdkClient.agentManager.getAgent(
394
+ params.address,
395
+ params.dex
396
+ )
397
+
398
+ // 1. Create cancel payloads
399
+ const { actions } = await cancelOrder(this.sdkClient, {
400
+ dex: params.dex,
401
+ address: params.address,
402
+ signerAddress: agent.address,
403
+ ids: params.ids,
404
+ })
405
+
406
+ // 2. Sign each action with agent key
407
+ const signedActions: SignedOrderAction[] = await Promise.all(
408
+ actions.map(async (a) => ({
409
+ action: a.action as OrderActionType,
410
+ typedData: a.typedData,
411
+ signature: await signTypedData(agent.privateKey, a.typedData),
412
+ }))
413
+ )
414
+
415
+ // 3. Submit
416
+ return submitOrder(this.sdkClient, {
417
+ dex: params.dex,
418
+ address: params.address,
419
+ signerAddress: agent.address,
420
+ actions: signedActions,
421
+ })
422
+ }
423
+
424
+ /**
425
+ * Submit pre-signed order actions.
426
+ *
427
+ * Use this for USER mode when you've already signed the actions with the user's wallet.
428
+ * Auto-injects `signerAddress` if not provided (defaults to `address`).
429
+ *
430
+ * @param params - Signed order parameters
431
+ */
432
+ async submitSignedOrder(
433
+ params: SubmitOrderParams
434
+ ): Promise<SubmitOrderResponse> {
435
+ return submitOrder(this.sdkClient, params)
436
+ }
437
+
438
+ /**
439
+ * Determine which authorizations (if any) the user needs to sign before trading.
440
+ *
441
+ * Fetches account state and checks the current signing mode to build
442
+ * a precise list of required authorizations.
443
+ *
444
+ * @param params - Parameters including dex, address, and asset requirements
445
+ * @returns Which authorizations are needed and whether the user is ready to trade
446
+ */
447
+ async getRequiredAuthorizations(
448
+ params: GetRequiredAuthorizationsParams
449
+ ): Promise<RequiredAuthorizationsResult> {
450
+ const { dex, address, requireAbstraction = false } = params
451
+ const mode = this.getSigningMode(address, dex)
452
+
453
+ // Fetch account state and dex config in parallel
454
+ const [account, dexesResponse] = await Promise.all([
455
+ getAccount(this.sdkClient, { dex, address }),
456
+ getDexes(this.sdkClient),
457
+ ])
458
+ const dexConfig = dexesResponse.dexes.find((d) => d.key === dex)
459
+ const hasBuilderFee =
460
+ dexConfig?.authorizations.some((a) => a.key === 'ApproveBuilderFee') ??
461
+ false
462
+ const rawAbstraction = account.config.abstractionStatus as
463
+ | string
464
+ | null
465
+ | undefined
466
+ const abstractionStatus = rawAbstraction ?? null
467
+ const agents = account.config.agents as
468
+ | Array<{ address: string; validUntil: number }>
469
+ | undefined
470
+
471
+ const userAuthorizations: AuthorizationInput[] = []
472
+ const agentAuthorizations: AuthorizationInput[] = []
473
+
474
+ if (mode === 'USER') {
475
+ // USER mode: no agent-related authorizations
476
+ if (requireAbstraction && !isAbstractionEnabled(abstractionStatus)) {
477
+ userAuthorizations.push({
478
+ key: 'UserSetAbstraction',
479
+ params: { abstraction: 'unifiedAccount' },
480
+ })
481
+ }
482
+
483
+ return {
484
+ userAuthorizations,
485
+ agentAuthorizations,
486
+ agentValid: false,
487
+ abstractionStatus,
488
+ isReady: userAuthorizations.length === 0,
489
+ }
490
+ }
491
+
492
+ // USER_AGENT mode: check agent validity
493
+ const agentValid = await this.validateAgent(address, dex, agents)
494
+
495
+ if (!agentValid) {
496
+ // Need to approve agent (+ builder fee if configured)
497
+ userAuthorizations.push({ key: 'ApproveAgent' })
498
+ if (hasBuilderFee) {
499
+ userAuthorizations.push({ key: 'ApproveBuilderFee' })
500
+ }
501
+
502
+ // Abstraction handling when agent is not yet valid
503
+ if (requireAbstraction && !isAbstractionEnabled(abstractionStatus)) {
504
+ if (abstractionStatus === null) {
505
+ // null → agent can't auto-enable yet (not approved), user must set it
506
+ userAuthorizations.push({
507
+ key: 'UserSetAbstraction',
508
+ params: { abstraction: 'unifiedAccount' },
509
+ })
510
+ } else {
511
+ // 'disabled' → user must re-enable
512
+ userAuthorizations.push({
513
+ key: 'UserSetAbstraction',
514
+ params: { abstraction: 'unifiedAccount' },
515
+ })
516
+ }
517
+ }
518
+ } else {
519
+ // Agent is valid - check abstraction only
520
+ if (requireAbstraction && !isAbstractionEnabled(abstractionStatus)) {
521
+ if (abstractionStatus === null) {
522
+ // null → agent can auto-enable (no user signature needed)
523
+ agentAuthorizations.push({
524
+ key: 'AgentSetAbstraction',
525
+ params: { abstraction: 'unifiedAccount' },
526
+ })
527
+ } else {
528
+ // 'disabled' → user must re-enable
529
+ userAuthorizations.push({
530
+ key: 'UserSetAbstraction',
531
+ params: { abstraction: 'unifiedAccount' },
532
+ })
533
+ }
534
+ }
535
+ }
536
+
537
+ const isReady =
538
+ userAuthorizations.length === 0 && agentAuthorizations.length === 0
539
+
540
+ return {
541
+ userAuthorizations,
542
+ agentAuthorizations,
543
+ agentValid,
544
+ abstractionStatus,
545
+ isReady,
546
+ }
547
+ }
548
+
549
+ /**
550
+ * Execute authorizations: submit user-signed actions, then auto-sign and submit
551
+ * any agent authorizations.
552
+ *
553
+ * @param params - User-signed actions and the required authorizations result
554
+ * @returns Combined results from user and agent submissions
555
+ */
556
+ async executeAuthorizations(
557
+ params: ExecuteAuthorizationsParams
558
+ ): Promise<ExecuteAuthorizationsResult> {
559
+ const { dex, address, required, userSignedActions } = params
560
+ const mode = this.getSigningMode(address, dex)
561
+
562
+ // 1. Submit user-signed actions (if any)
563
+ let userResults: AuthorizationsResponse = { results: [] }
564
+ if (userSignedActions.length > 0) {
565
+ const signerAddress =
566
+ mode === 'USER_AGENT'
567
+ ? (await this.sdkClient.agentManager.getAgent(address, dex)).address
568
+ : address
569
+ userResults = await submitAuthorization(this.sdkClient, {
570
+ dex,
571
+ address,
572
+ signerAddress,
573
+ actions: userSignedActions,
574
+ })
575
+
576
+ // Check for failures - return early if any user auth failed
577
+ const failed = userResults.results.find((r) => !r.success)
578
+ if (failed) {
579
+ return { userResults }
580
+ }
581
+ }
582
+
583
+ // 2. Auto-sign and submit agent authorizations (if any)
584
+ if (required.agentAuthorizations.length > 0 && mode === 'USER_AGENT') {
585
+ const agent = await this.sdkClient.agentManager.getAgent(address, dex)
586
+
587
+ // Build typed data for agent authorizations
588
+ const { actions } = await createAuthorization(this.sdkClient, {
589
+ dex,
590
+ address,
591
+ signerAddress: agent.address,
592
+ authorizations: required.agentAuthorizations,
593
+ })
594
+
595
+ // Sign with agent key
596
+ const signedAgentActions: SignedAuthorization[] = await Promise.all(
597
+ actions.map(async (action) => ({
598
+ action: action.action,
599
+ typedData: action.typedData,
600
+ signature: await signTypedData(agent.privateKey, action.typedData),
601
+ }))
602
+ )
603
+
604
+ // Submit agent-signed actions
605
+ const agentResults = await submitAuthorization(this.sdkClient, {
606
+ dex,
607
+ address,
608
+ signerAddress: agent.address,
609
+ actions: signedAgentActions,
610
+ })
611
+
612
+ return { userResults, agentResults }
613
+ }
614
+
615
+ return { userResults }
616
+ }
617
+
618
+ /**
619
+ * Check if the local agent is registered and valid on the backend.
620
+ */
621
+ private async validateAgent(
622
+ address: Address,
623
+ dex: string,
624
+ backendAgents?: Array<{ address: string; validUntil: number }>
625
+ ): Promise<boolean> {
626
+ const hasLocal = await this.sdkClient.agentManager.hasAgent(address, dex)
627
+ if (!hasLocal) {
628
+ return false
629
+ }
630
+
631
+ const agent = await this.sdkClient.agentManager.getAgent(address, dex)
632
+ if (!backendAgents) {
633
+ return false
634
+ }
635
+
636
+ const match = backendAgents.find(
637
+ (a) => a.address.toLowerCase() === agent.address.toLowerCase()
638
+ )
639
+ if (!match) {
640
+ return false
641
+ }
642
+
643
+ return match.validUntil > Date.now()
644
+ }
645
+ }
646
+
647
+ /**
648
+ * Check if abstraction is enabled based on the status string.
649
+ * Enabled statuses: 'unifiedAccount', 'portfolioMargin'
650
+ * Not enabled: null (never set), 'disabled'
651
+ */
652
+ function isAbstractionEnabled(status: string | null): boolean {
653
+ return status !== null && status !== 'disabled'
654
+ }