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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (959) hide show
  1. package/README.md +157 -20
  2. package/dist/cjs/client/PerpsClient.d.ts +57 -24
  3. package/dist/cjs/client/PerpsClient.d.ts.map +1 -1
  4. package/dist/cjs/client/PerpsClient.js +218 -208
  5. package/dist/cjs/client/PerpsClient.js.map +1 -1
  6. package/dist/cjs/client/bindProvider.d.ts +3 -0
  7. package/dist/cjs/client/bindProvider.d.ts.map +1 -0
  8. package/dist/cjs/client/bindProvider.js +9 -0
  9. package/dist/cjs/client/bindProvider.js.map +1 -0
  10. package/dist/cjs/client/createPerpsClient.d.ts +7 -25
  11. package/dist/cjs/client/createPerpsClient.d.ts.map +1 -1
  12. package/dist/cjs/client/createPerpsClient.js +28 -8
  13. package/dist/cjs/client/createPerpsClient.js.map +1 -1
  14. package/dist/cjs/client/requireProvider.d.ts +3 -0
  15. package/dist/cjs/client/requireProvider.d.ts.map +1 -0
  16. package/dist/cjs/client/requireProvider.js +16 -0
  17. package/dist/cjs/client/requireProvider.js.map +1 -0
  18. package/dist/cjs/errors/PerpsError.d.ts +2 -3
  19. package/dist/cjs/errors/PerpsError.d.ts.map +1 -1
  20. package/dist/cjs/errors/PerpsError.js +3 -15
  21. package/dist/cjs/errors/PerpsError.js.map +1 -1
  22. package/dist/cjs/errors/constants.d.ts +2 -12
  23. package/dist/cjs/errors/constants.d.ts.map +1 -1
  24. package/dist/cjs/errors/constants.js +3 -14
  25. package/dist/cjs/errors/constants.js.map +1 -1
  26. package/dist/cjs/index.d.ts +58 -34
  27. package/dist/cjs/index.d.ts.map +1 -1
  28. package/dist/cjs/index.js +122 -45
  29. package/dist/cjs/index.js.map +1 -1
  30. package/dist/cjs/registry/assetRegistry.d.ts +11 -0
  31. package/dist/cjs/registry/assetRegistry.d.ts.map +1 -0
  32. package/dist/cjs/registry/assetRegistry.js +39 -0
  33. package/dist/cjs/registry/assetRegistry.js.map +1 -0
  34. package/dist/cjs/registry/marketRegistry.d.ts +13 -0
  35. package/dist/cjs/registry/marketRegistry.d.ts.map +1 -0
  36. package/dist/cjs/registry/marketRegistry.js +58 -0
  37. package/dist/cjs/registry/marketRegistry.js.map +1 -0
  38. package/dist/cjs/registry/referenceDataRegistry.d.ts +20 -0
  39. package/dist/cjs/registry/referenceDataRegistry.d.ts.map +1 -0
  40. package/dist/cjs/registry/referenceDataRegistry.js +59 -0
  41. package/dist/cjs/registry/referenceDataRegistry.js.map +1 -0
  42. package/dist/cjs/services/createAction.d.ts +13 -0
  43. package/dist/cjs/services/createAction.d.ts.map +1 -0
  44. package/dist/cjs/services/createAction.js +17 -0
  45. package/dist/cjs/services/createAction.js.map +1 -0
  46. package/dist/cjs/services/executeAction.d.ts +13 -0
  47. package/dist/cjs/services/executeAction.d.ts.map +1 -0
  48. package/dist/cjs/services/{submitAuthorization.js → executeAction.js} +8 -6
  49. package/dist/cjs/services/executeAction.js.map +1 -0
  50. package/dist/cjs/services/getAccount.d.ts +5 -3
  51. package/dist/cjs/services/getAccount.d.ts.map +1 -1
  52. package/dist/cjs/services/getAccount.js +2 -6
  53. package/dist/cjs/services/getAccount.js.map +1 -1
  54. package/dist/cjs/services/getActivity.d.ts +15 -0
  55. package/dist/cjs/services/getActivity.d.ts.map +1 -0
  56. package/dist/cjs/services/getActivity.js +15 -0
  57. package/dist/cjs/services/getActivity.js.map +1 -0
  58. package/dist/cjs/services/getAssets.d.ts +8 -0
  59. package/dist/cjs/services/getAssets.d.ts.map +1 -0
  60. package/dist/cjs/services/getAssets.js +11 -0
  61. package/dist/cjs/services/getAssets.js.map +1 -0
  62. package/dist/cjs/services/getFills.d.ts +14 -0
  63. package/dist/cjs/services/getFills.d.ts.map +1 -0
  64. package/dist/cjs/services/getFills.js +14 -0
  65. package/dist/cjs/services/getFills.js.map +1 -0
  66. package/dist/cjs/services/getMarket.d.ts +4 -3
  67. package/dist/cjs/services/getMarket.d.ts.map +1 -1
  68. package/dist/cjs/services/getMarket.js +6 -4
  69. package/dist/cjs/services/getMarket.js.map +1 -1
  70. package/dist/cjs/services/getMarkets.d.ts +4 -2
  71. package/dist/cjs/services/getMarkets.d.ts.map +1 -1
  72. package/dist/cjs/services/getMarkets.js +5 -2
  73. package/dist/cjs/services/getMarkets.js.map +1 -1
  74. package/dist/cjs/services/getMeta.d.ts +5 -0
  75. package/dist/cjs/services/getMeta.d.ts.map +1 -0
  76. package/dist/cjs/services/getMeta.js +8 -0
  77. package/dist/cjs/services/getMeta.js.map +1 -0
  78. package/dist/cjs/services/getOhlcv.d.ts +4 -3
  79. package/dist/cjs/services/getOhlcv.d.ts.map +1 -1
  80. package/dist/cjs/services/getOhlcv.js +4 -3
  81. package/dist/cjs/services/getOhlcv.js.map +1 -1
  82. package/dist/cjs/services/getOrder.d.ts +5 -3
  83. package/dist/cjs/services/getOrder.d.ts.map +1 -1
  84. package/dist/cjs/services/getOrder.js +2 -6
  85. package/dist/cjs/services/getOrder.js.map +1 -1
  86. package/dist/cjs/services/getOrderbook.d.ts +4 -3
  87. package/dist/cjs/services/getOrderbook.d.ts.map +1 -1
  88. package/dist/cjs/services/getOrderbook.js +4 -3
  89. package/dist/cjs/services/getOrderbook.js.map +1 -1
  90. package/dist/cjs/services/getOrders.d.ts +13 -0
  91. package/dist/cjs/services/getOrders.d.ts.map +1 -0
  92. package/dist/cjs/services/getOrders.js +13 -0
  93. package/dist/cjs/services/getOrders.js.map +1 -0
  94. package/dist/cjs/services/getPositions.d.ts +13 -0
  95. package/dist/cjs/services/getPositions.d.ts.map +1 -0
  96. package/dist/cjs/services/getPositions.js +13 -0
  97. package/dist/cjs/services/getPositions.js.map +1 -0
  98. package/dist/cjs/services/getPrices.d.ts +4 -3
  99. package/dist/cjs/services/getPrices.d.ts.map +1 -1
  100. package/dist/cjs/services/getPrices.js +3 -3
  101. package/dist/cjs/services/getPrices.js.map +1 -1
  102. package/dist/cjs/services/getProviders.d.ts +5 -0
  103. package/dist/cjs/services/getProviders.d.ts.map +1 -0
  104. package/dist/cjs/services/getProviders.js +8 -0
  105. package/dist/cjs/services/getProviders.js.map +1 -0
  106. package/dist/cjs/services/getQuote.d.ts +12 -0
  107. package/dist/cjs/services/getQuote.d.ts.map +1 -0
  108. package/dist/cjs/services/getQuote.js +13 -0
  109. package/dist/cjs/services/getQuote.js.map +1 -0
  110. package/dist/cjs/services/getTermsAcceptance.d.ts +6 -0
  111. package/dist/cjs/services/getTermsAcceptance.d.ts.map +1 -0
  112. package/dist/cjs/services/getTermsAcceptance.js +9 -0
  113. package/dist/cjs/services/getTermsAcceptance.js.map +1 -0
  114. package/dist/cjs/services/resolveQuote.d.ts +7 -0
  115. package/dist/cjs/services/resolveQuote.d.ts.map +1 -0
  116. package/dist/cjs/services/resolveQuote.js +50 -0
  117. package/dist/cjs/services/resolveQuote.js.map +1 -0
  118. package/dist/cjs/services/resolveSubscribeQuote.d.ts +6 -0
  119. package/dist/cjs/services/resolveSubscribeQuote.d.ts.map +1 -0
  120. package/dist/cjs/services/resolveSubscribeQuote.js +65 -0
  121. package/dist/cjs/services/resolveSubscribeQuote.js.map +1 -0
  122. package/dist/cjs/storage/parseStoredRecord.d.ts +4 -0
  123. package/dist/cjs/storage/parseStoredRecord.d.ts.map +1 -0
  124. package/dist/cjs/storage/parseStoredRecord.js +26 -0
  125. package/dist/cjs/storage/parseStoredRecord.js.map +1 -0
  126. package/dist/cjs/storage/storage.d.ts.map +1 -0
  127. package/dist/cjs/storage/storage.js.map +1 -0
  128. package/dist/cjs/{agent → storage}/types.d.ts +0 -5
  129. package/dist/cjs/storage/types.d.ts.map +1 -0
  130. package/dist/cjs/{agent → storage}/types.js.map +1 -1
  131. package/dist/cjs/transport/fetchWithRetry.d.ts +8 -0
  132. package/dist/cjs/transport/fetchWithRetry.d.ts.map +1 -0
  133. package/dist/cjs/transport/fetchWithRetry.js +81 -0
  134. package/dist/cjs/transport/fetchWithRetry.js.map +1 -0
  135. package/dist/cjs/{utils → transport}/request.d.ts +3 -2
  136. package/dist/cjs/transport/request.d.ts.map +1 -0
  137. package/dist/cjs/transport/request.js +75 -0
  138. package/dist/cjs/transport/request.js.map +1 -0
  139. package/dist/cjs/transport/retryPolicy.d.ts +37 -0
  140. package/dist/cjs/transport/retryPolicy.d.ts.map +1 -0
  141. package/dist/cjs/transport/retryPolicy.js +79 -0
  142. package/dist/cjs/transport/retryPolicy.js.map +1 -0
  143. package/dist/cjs/types/api.d.ts +85 -0
  144. package/dist/cjs/types/api.d.ts.map +1 -0
  145. package/dist/cjs/{dex/types.js → types/api.js} +1 -1
  146. package/dist/cjs/types/api.js.map +1 -0
  147. package/dist/cjs/types/config.d.ts +26 -0
  148. package/dist/cjs/types/config.d.ts.map +1 -0
  149. package/dist/cjs/{realtime/hyperliquid/types.js → types/config.js} +1 -1
  150. package/dist/cjs/types/config.js.map +1 -0
  151. package/dist/cjs/types/provider.d.ts +84 -0
  152. package/dist/cjs/types/provider.d.ts.map +1 -0
  153. package/dist/cjs/types/provider.js +3 -0
  154. package/dist/cjs/types/provider.js.map +1 -0
  155. package/dist/cjs/utils/accountSummary.d.ts +3 -0
  156. package/dist/cjs/utils/accountSummary.d.ts.map +1 -0
  157. package/dist/cjs/utils/accountSummary.js +25 -0
  158. package/dist/cjs/utils/accountSummary.js.map +1 -0
  159. package/dist/cjs/utils/assertNever.d.ts +2 -0
  160. package/dist/cjs/utils/assertNever.d.ts.map +1 -0
  161. package/dist/cjs/utils/assertNever.js +7 -0
  162. package/dist/cjs/utils/assertNever.js.map +1 -0
  163. package/dist/cjs/utils/calculations.d.ts +52 -0
  164. package/dist/cjs/utils/calculations.d.ts.map +1 -0
  165. package/dist/cjs/utils/calculations.js +148 -0
  166. package/dist/cjs/utils/calculations.js.map +1 -0
  167. package/dist/cjs/utils/depositChain.d.ts +6 -0
  168. package/dist/cjs/utils/depositChain.d.ts.map +1 -0
  169. package/dist/cjs/utils/depositChain.js +13 -0
  170. package/dist/cjs/utils/depositChain.js.map +1 -0
  171. package/dist/cjs/utils/explorer.d.ts +9 -0
  172. package/dist/cjs/utils/explorer.d.ts.map +1 -0
  173. package/dist/cjs/utils/explorer.js +23 -0
  174. package/dist/cjs/utils/explorer.js.map +1 -0
  175. package/dist/cjs/utils/fillClassification.d.ts +3 -0
  176. package/dist/cjs/utils/fillClassification.d.ts.map +1 -0
  177. package/dist/cjs/utils/fillClassification.js +37 -0
  178. package/dist/cjs/utils/fillClassification.js.map +1 -0
  179. package/dist/cjs/utils/format.d.ts +13 -0
  180. package/dist/cjs/utils/format.d.ts.map +1 -0
  181. package/dist/cjs/utils/format.js +117 -0
  182. package/dist/cjs/utils/format.js.map +1 -0
  183. package/dist/cjs/utils/orderClassification.d.ts +10 -0
  184. package/dist/cjs/utils/orderClassification.d.ts.map +1 -0
  185. package/dist/cjs/utils/orderClassification.js +49 -0
  186. package/dist/cjs/utils/orderClassification.js.map +1 -0
  187. package/dist/cjs/utils/orderMath.d.ts +6 -0
  188. package/dist/cjs/utils/orderMath.d.ts.map +1 -0
  189. package/dist/cjs/utils/orderMath.js +71 -0
  190. package/dist/cjs/utils/orderMath.js.map +1 -0
  191. package/dist/cjs/utils/parse.d.ts +2 -0
  192. package/dist/cjs/utils/parse.d.ts.map +1 -0
  193. package/dist/cjs/utils/parse.js +14 -0
  194. package/dist/cjs/utils/parse.js.map +1 -0
  195. package/dist/cjs/utils/positionMath.d.ts +32 -0
  196. package/dist/cjs/utils/positionMath.d.ts.map +1 -0
  197. package/dist/cjs/utils/positionMath.js +52 -0
  198. package/dist/cjs/utils/positionMath.js.map +1 -0
  199. package/dist/cjs/utils/signTypedData.d.ts +3 -1
  200. package/dist/cjs/utils/signTypedData.d.ts.map +1 -1
  201. package/dist/cjs/utils/signTypedData.js +11 -3
  202. package/dist/cjs/utils/signTypedData.js.map +1 -1
  203. package/dist/cjs/utils/sleep.d.ts.map +1 -1
  204. package/dist/cjs/utils/sleep.js.map +1 -1
  205. package/dist/cjs/utils/units.d.ts +3 -0
  206. package/dist/cjs/utils/units.d.ts.map +1 -0
  207. package/dist/cjs/utils/units.js +18 -0
  208. package/dist/cjs/utils/units.js.map +1 -0
  209. package/dist/cjs/utils/validation.d.ts +2 -0
  210. package/dist/cjs/utils/validation.d.ts.map +1 -0
  211. package/dist/cjs/utils/validation.js +16 -0
  212. package/dist/cjs/utils/validation.js.map +1 -0
  213. package/dist/cjs/version.d.ts +1 -1
  214. package/dist/cjs/version.d.ts.map +1 -1
  215. package/dist/cjs/version.js +1 -1
  216. package/dist/cjs/version.js.map +1 -1
  217. package/dist/cjs/websocket/PerpsWsClient.d.ts +27 -0
  218. package/dist/cjs/websocket/PerpsWsClient.d.ts.map +1 -0
  219. package/dist/cjs/websocket/PerpsWsClient.js +84 -0
  220. package/dist/cjs/websocket/PerpsWsClient.js.map +1 -0
  221. package/dist/{esm/realtime → cjs/websocket}/ReconnectingWebSocket.d.ts +23 -7
  222. package/dist/cjs/websocket/ReconnectingWebSocket.d.ts.map +1 -0
  223. package/dist/cjs/websocket/ReconnectingWebSocket.js +213 -0
  224. package/dist/cjs/websocket/ReconnectingWebSocket.js.map +1 -0
  225. package/dist/cjs/websocket/WsProviderBase.d.ts +31 -0
  226. package/dist/cjs/websocket/WsProviderBase.d.ts.map +1 -0
  227. package/dist/cjs/websocket/WsProviderBase.js +197 -0
  228. package/dist/cjs/websocket/WsProviderBase.js.map +1 -0
  229. package/dist/cjs/websocket/cachePromise.d.ts +2 -0
  230. package/dist/cjs/websocket/cachePromise.d.ts.map +1 -0
  231. package/dist/cjs/websocket/cachePromise.js +18 -0
  232. package/dist/cjs/websocket/cachePromise.js.map +1 -0
  233. package/dist/cjs/websocket/types.d.ts +15 -0
  234. package/dist/cjs/websocket/types.d.ts.map +1 -0
  235. package/dist/cjs/{dex → websocket}/types.js.map +1 -1
  236. package/dist/cjs/websocket/wsLog.d.ts +10 -0
  237. package/dist/cjs/websocket/wsLog.d.ts.map +1 -0
  238. package/dist/cjs/websocket/wsLog.js +31 -0
  239. package/dist/cjs/websocket/wsLog.js.map +1 -0
  240. package/dist/esm/client/PerpsClient.d.ts +223 -136
  241. package/dist/esm/client/PerpsClient.d.ts.map +1 -1
  242. package/dist/esm/client/PerpsClient.js +399 -339
  243. package/dist/esm/client/PerpsClient.js.map +1 -1
  244. package/dist/esm/client/bindProvider.d.ts +13 -0
  245. package/dist/esm/client/bindProvider.d.ts.map +1 -0
  246. package/dist/esm/client/bindProvider.js +16 -0
  247. package/dist/esm/client/bindProvider.js.map +1 -0
  248. package/dist/esm/client/createPerpsClient.d.ts +24 -64
  249. package/dist/esm/client/createPerpsClient.d.ts.map +1 -1
  250. package/dist/esm/client/createPerpsClient.js +45 -17
  251. package/dist/esm/client/createPerpsClient.js.map +1 -1
  252. package/dist/esm/client/requireProvider.d.ts +12 -0
  253. package/dist/esm/client/requireProvider.d.ts.map +1 -0
  254. package/dist/esm/client/requireProvider.js +22 -0
  255. package/dist/esm/client/requireProvider.js.map +1 -0
  256. package/dist/esm/errors/PerpsError.d.ts +10 -3
  257. package/dist/esm/errors/PerpsError.d.ts.map +1 -1
  258. package/dist/esm/errors/PerpsError.js +11 -15
  259. package/dist/esm/errors/PerpsError.js.map +1 -1
  260. package/dist/esm/errors/constants.d.ts +8 -12
  261. package/dist/esm/errors/constants.d.ts.map +1 -1
  262. package/dist/esm/errors/constants.js +8 -13
  263. package/dist/esm/errors/constants.js.map +1 -1
  264. package/dist/esm/index.d.ts +66 -34
  265. package/dist/esm/index.d.ts.map +1 -1
  266. package/dist/esm/index.js +49 -29
  267. package/dist/esm/index.js.map +1 -1
  268. package/dist/esm/registry/assetRegistry.d.ts +25 -0
  269. package/dist/esm/registry/assetRegistry.d.ts.map +1 -0
  270. package/dist/esm/registry/assetRegistry.js +48 -0
  271. package/dist/esm/registry/assetRegistry.js.map +1 -0
  272. package/dist/esm/registry/marketRegistry.d.ts +42 -0
  273. package/dist/esm/registry/marketRegistry.d.ts.map +1 -0
  274. package/dist/esm/registry/marketRegistry.js +81 -0
  275. package/dist/esm/registry/marketRegistry.js.map +1 -0
  276. package/dist/esm/registry/referenceDataRegistry.d.ts +44 -0
  277. package/dist/esm/registry/referenceDataRegistry.d.ts.map +1 -0
  278. package/dist/esm/registry/referenceDataRegistry.js +79 -0
  279. package/dist/esm/registry/referenceDataRegistry.js.map +1 -0
  280. package/dist/esm/services/createAction.d.ts +26 -0
  281. package/dist/esm/services/createAction.d.ts.map +1 -0
  282. package/dist/esm/services/createAction.js +22 -0
  283. package/dist/esm/services/createAction.js.map +1 -0
  284. package/dist/esm/services/executeAction.d.ts +26 -0
  285. package/dist/esm/services/executeAction.d.ts.map +1 -0
  286. package/dist/esm/services/executeAction.js +26 -0
  287. package/dist/esm/services/executeAction.js.map +1 -0
  288. package/dist/esm/services/getAccount.d.ts +21 -18
  289. package/dist/esm/services/getAccount.d.ts.map +1 -1
  290. package/dist/esm/services/getAccount.js +13 -19
  291. package/dist/esm/services/getAccount.js.map +1 -1
  292. package/dist/esm/services/getActivity.d.ts +39 -0
  293. package/dist/esm/services/getActivity.d.ts.map +1 -0
  294. package/dist/esm/services/getActivity.js +29 -0
  295. package/dist/esm/services/getActivity.js.map +1 -0
  296. package/dist/esm/services/getAssets.d.ts +27 -0
  297. package/dist/esm/services/getAssets.d.ts.map +1 -0
  298. package/dist/esm/services/getAssets.js +22 -0
  299. package/dist/esm/services/getAssets.js.map +1 -0
  300. package/dist/esm/services/getFills.d.ts +38 -0
  301. package/dist/esm/services/getFills.d.ts.map +1 -0
  302. package/dist/esm/services/getFills.js +28 -0
  303. package/dist/esm/services/getFills.js.map +1 -0
  304. package/dist/esm/services/getMarket.d.ts +22 -15
  305. package/dist/esm/services/getMarket.d.ts.map +1 -1
  306. package/dist/esm/services/getMarket.js +14 -14
  307. package/dist/esm/services/getMarket.js.map +1 -1
  308. package/dist/esm/services/getMarkets.d.ts +16 -13
  309. package/dist/esm/services/getMarkets.d.ts.map +1 -1
  310. package/dist/esm/services/getMarkets.js +11 -12
  311. package/dist/esm/services/getMarkets.js.map +1 -1
  312. package/dist/esm/services/getMeta.d.ts +19 -0
  313. package/dist/esm/services/getMeta.d.ts.map +1 -0
  314. package/dist/esm/services/getMeta.js +19 -0
  315. package/dist/esm/services/getMeta.js.map +1 -0
  316. package/dist/esm/services/getOhlcv.d.ts +17 -21
  317. package/dist/esm/services/getOhlcv.d.ts.map +1 -1
  318. package/dist/esm/services/getOhlcv.js +9 -15
  319. package/dist/esm/services/getOhlcv.js.map +1 -1
  320. package/dist/esm/services/getOrder.d.ts +18 -18
  321. package/dist/esm/services/getOrder.d.ts.map +1 -1
  322. package/dist/esm/services/getOrder.js +10 -18
  323. package/dist/esm/services/getOrder.js.map +1 -1
  324. package/dist/esm/services/getOrderbook.d.ts +14 -24
  325. package/dist/esm/services/getOrderbook.d.ts.map +1 -1
  326. package/dist/esm/services/getOrderbook.js +8 -22
  327. package/dist/esm/services/getOrderbook.js.map +1 -1
  328. package/dist/esm/services/getOrders.d.ts +35 -0
  329. package/dist/esm/services/getOrders.d.ts.map +1 -0
  330. package/dist/esm/services/getOrders.js +26 -0
  331. package/dist/esm/services/getOrders.js.map +1 -0
  332. package/dist/esm/services/getPositions.d.ts +35 -0
  333. package/dist/esm/services/getPositions.d.ts.map +1 -0
  334. package/dist/esm/services/getPositions.js +26 -0
  335. package/dist/esm/services/getPositions.js.map +1 -0
  336. package/dist/esm/services/getPrices.d.ts +13 -25
  337. package/dist/esm/services/getPrices.d.ts.map +1 -1
  338. package/dist/esm/services/getPrices.js +6 -23
  339. package/dist/esm/services/getPrices.js.map +1 -1
  340. package/dist/esm/services/getProviders.d.ts +20 -0
  341. package/dist/esm/services/getProviders.d.ts.map +1 -0
  342. package/dist/esm/services/getProviders.js +20 -0
  343. package/dist/esm/services/getProviders.js.map +1 -0
  344. package/dist/esm/services/getQuote.d.ts +42 -0
  345. package/dist/esm/services/getQuote.d.ts.map +1 -0
  346. package/dist/esm/services/getQuote.js +33 -0
  347. package/dist/esm/services/getQuote.js.map +1 -0
  348. package/dist/esm/services/getTermsAcceptance.d.ts +24 -0
  349. package/dist/esm/services/getTermsAcceptance.d.ts.map +1 -0
  350. package/dist/esm/services/getTermsAcceptance.js +24 -0
  351. package/dist/esm/services/getTermsAcceptance.js.map +1 -0
  352. package/dist/esm/services/resolveQuote.d.ts +36 -0
  353. package/dist/esm/services/resolveQuote.d.ts.map +1 -0
  354. package/dist/esm/services/resolveQuote.js +74 -0
  355. package/dist/esm/services/resolveQuote.js.map +1 -0
  356. package/dist/esm/services/resolveSubscribeQuote.d.ts +31 -0
  357. package/dist/esm/services/resolveSubscribeQuote.d.ts.map +1 -0
  358. package/dist/esm/services/resolveSubscribeQuote.js +86 -0
  359. package/dist/esm/services/resolveSubscribeQuote.js.map +1 -0
  360. package/dist/esm/storage/parseStoredRecord.d.ts +29 -0
  361. package/dist/esm/storage/parseStoredRecord.d.ts.map +1 -0
  362. package/dist/esm/storage/parseStoredRecord.js +47 -0
  363. package/dist/esm/storage/parseStoredRecord.js.map +1 -0
  364. package/dist/{types/agent → esm/storage}/storage.d.ts +6 -3
  365. package/dist/esm/storage/storage.d.ts.map +1 -0
  366. package/dist/esm/{agent → storage}/storage.js +6 -4
  367. package/dist/esm/storage/storage.js.map +1 -0
  368. package/dist/esm/storage/types.d.ts +14 -0
  369. package/dist/esm/storage/types.d.ts.map +1 -0
  370. package/dist/{cjs/client → esm/storage}/types.js.map +1 -1
  371. package/dist/esm/transport/fetchWithRetry.d.ts +22 -0
  372. package/dist/esm/transport/fetchWithRetry.d.ts.map +1 -0
  373. package/dist/esm/transport/fetchWithRetry.js +87 -0
  374. package/dist/esm/transport/fetchWithRetry.js.map +1 -0
  375. package/dist/esm/transport/request.d.ts +25 -0
  376. package/dist/esm/transport/request.d.ts.map +1 -0
  377. package/dist/esm/transport/request.js +82 -0
  378. package/dist/esm/transport/request.js.map +1 -0
  379. package/dist/esm/transport/retryPolicy.d.ts +106 -0
  380. package/dist/esm/transport/retryPolicy.d.ts.map +1 -0
  381. package/dist/esm/transport/retryPolicy.js +99 -0
  382. package/dist/esm/transport/retryPolicy.js.map +1 -0
  383. package/dist/esm/types/api.d.ts +214 -0
  384. package/dist/esm/types/api.d.ts.map +1 -0
  385. package/dist/esm/types/api.js +2 -0
  386. package/dist/esm/types/api.js.map +1 -0
  387. package/dist/esm/types/config.d.ts +70 -0
  388. package/dist/esm/types/config.d.ts.map +1 -0
  389. package/dist/esm/types/config.js +2 -0
  390. package/dist/esm/types/config.js.map +1 -0
  391. package/dist/esm/types/provider.d.ts +330 -0
  392. package/dist/esm/types/provider.d.ts.map +1 -0
  393. package/dist/esm/types/provider.js +2 -0
  394. package/dist/esm/types/provider.js.map +1 -0
  395. package/dist/esm/utils/accountSummary.d.ts +13 -0
  396. package/dist/esm/utils/accountSummary.d.ts.map +1 -0
  397. package/dist/esm/utils/accountSummary.js +32 -0
  398. package/dist/esm/utils/accountSummary.js.map +1 -0
  399. package/dist/esm/utils/assertNever.d.ts +20 -0
  400. package/dist/esm/utils/assertNever.d.ts.map +1 -0
  401. package/dist/esm/utils/assertNever.js +22 -0
  402. package/dist/esm/utils/assertNever.js.map +1 -0
  403. package/dist/esm/utils/calculations.d.ts +225 -0
  404. package/dist/esm/utils/calculations.d.ts.map +1 -0
  405. package/dist/esm/utils/calculations.js +291 -0
  406. package/dist/esm/utils/calculations.js.map +1 -0
  407. package/dist/esm/utils/depositChain.d.ts +25 -0
  408. package/dist/esm/utils/depositChain.d.ts.map +1 -0
  409. package/dist/esm/utils/depositChain.js +23 -0
  410. package/dist/esm/utils/depositChain.js.map +1 -0
  411. package/dist/esm/utils/explorer.d.ts +33 -0
  412. package/dist/esm/utils/explorer.d.ts.map +1 -0
  413. package/dist/esm/utils/explorer.js +38 -0
  414. package/dist/esm/utils/explorer.js.map +1 -0
  415. package/dist/esm/utils/fillClassification.d.ts +13 -0
  416. package/dist/esm/utils/fillClassification.d.ts.map +1 -0
  417. package/dist/esm/utils/fillClassification.js +44 -0
  418. package/dist/esm/utils/fillClassification.js.map +1 -0
  419. package/dist/esm/utils/format.d.ts +66 -0
  420. package/dist/esm/utils/format.d.ts.map +1 -0
  421. package/dist/esm/utils/format.js +171 -0
  422. package/dist/esm/utils/format.js.map +1 -0
  423. package/dist/esm/utils/orderClassification.d.ts +47 -0
  424. package/dist/esm/utils/orderClassification.d.ts.map +1 -0
  425. package/dist/esm/utils/orderClassification.js +78 -0
  426. package/dist/esm/utils/orderClassification.js.map +1 -0
  427. package/dist/esm/utils/orderMath.d.ts +44 -0
  428. package/dist/esm/utils/orderMath.d.ts.map +1 -0
  429. package/dist/esm/utils/orderMath.js +103 -0
  430. package/dist/esm/utils/orderMath.js.map +1 -0
  431. package/dist/esm/utils/parse.d.ts +21 -0
  432. package/dist/esm/utils/parse.d.ts.map +1 -0
  433. package/dist/esm/utils/parse.js +30 -0
  434. package/dist/esm/utils/parse.js.map +1 -0
  435. package/dist/esm/utils/positionMath.d.ts +107 -0
  436. package/dist/esm/utils/positionMath.d.ts.map +1 -0
  437. package/dist/esm/utils/positionMath.js +119 -0
  438. package/dist/esm/utils/positionMath.js.map +1 -0
  439. package/dist/esm/utils/signTypedData.d.ts +13 -10
  440. package/dist/esm/utils/signTypedData.d.ts.map +1 -1
  441. package/dist/esm/utils/signTypedData.js +20 -13
  442. package/dist/esm/utils/signTypedData.js.map +1 -1
  443. package/dist/esm/utils/sleep.d.ts +5 -0
  444. package/dist/esm/utils/sleep.d.ts.map +1 -1
  445. package/dist/esm/utils/sleep.js +5 -0
  446. package/dist/esm/utils/sleep.js.map +1 -1
  447. package/dist/esm/utils/units.d.ts +27 -0
  448. package/dist/esm/utils/units.d.ts.map +1 -0
  449. package/dist/esm/utils/units.js +38 -0
  450. package/dist/esm/utils/units.js.map +1 -0
  451. package/dist/esm/utils/validation.d.ts +18 -0
  452. package/dist/esm/utils/validation.d.ts.map +1 -0
  453. package/dist/esm/utils/validation.js +29 -0
  454. package/dist/esm/utils/validation.js.map +1 -0
  455. package/dist/esm/version.d.ts +1 -1
  456. package/dist/esm/version.d.ts.map +1 -1
  457. package/dist/esm/version.js +1 -1
  458. package/dist/esm/version.js.map +1 -1
  459. package/dist/esm/websocket/PerpsWsClient.d.ts +100 -0
  460. package/dist/esm/websocket/PerpsWsClient.d.ts.map +1 -0
  461. package/dist/esm/websocket/PerpsWsClient.js +121 -0
  462. package/dist/esm/websocket/PerpsWsClient.js.map +1 -0
  463. package/dist/esm/websocket/ReconnectingWebSocket.d.ts +130 -0
  464. package/dist/esm/websocket/ReconnectingWebSocket.d.ts.map +1 -0
  465. package/dist/esm/websocket/ReconnectingWebSocket.js +288 -0
  466. package/dist/esm/websocket/ReconnectingWebSocket.js.map +1 -0
  467. package/dist/esm/websocket/WsProviderBase.d.ts +89 -0
  468. package/dist/esm/websocket/WsProviderBase.d.ts.map +1 -0
  469. package/dist/esm/websocket/WsProviderBase.js +246 -0
  470. package/dist/esm/websocket/WsProviderBase.js.map +1 -0
  471. package/dist/esm/websocket/cachePromise.d.ts +14 -0
  472. package/dist/esm/websocket/cachePromise.d.ts.map +1 -0
  473. package/dist/esm/websocket/cachePromise.js +27 -0
  474. package/dist/esm/websocket/cachePromise.js.map +1 -0
  475. package/dist/esm/websocket/types.d.ts +60 -0
  476. package/dist/esm/websocket/types.d.ts.map +1 -0
  477. package/dist/{cjs/realtime → esm/websocket}/types.js.map +1 -1
  478. package/dist/esm/websocket/wsLog.d.ts +50 -0
  479. package/dist/esm/websocket/wsLog.d.ts.map +1 -0
  480. package/dist/esm/websocket/wsLog.js +68 -0
  481. package/dist/esm/websocket/wsLog.js.map +1 -0
  482. package/dist/types/client/PerpsClient.d.ts +223 -136
  483. package/dist/types/client/PerpsClient.d.ts.map +1 -1
  484. package/dist/types/client/bindProvider.d.ts +13 -0
  485. package/dist/types/client/bindProvider.d.ts.map +1 -0
  486. package/dist/types/client/createPerpsClient.d.ts +24 -64
  487. package/dist/types/client/createPerpsClient.d.ts.map +1 -1
  488. package/dist/types/client/requireProvider.d.ts +12 -0
  489. package/dist/types/client/requireProvider.d.ts.map +1 -0
  490. package/dist/types/errors/PerpsError.d.ts +10 -3
  491. package/dist/types/errors/PerpsError.d.ts.map +1 -1
  492. package/dist/types/errors/constants.d.ts +8 -12
  493. package/dist/types/errors/constants.d.ts.map +1 -1
  494. package/dist/types/index.d.ts +66 -34
  495. package/dist/types/index.d.ts.map +1 -1
  496. package/dist/types/registry/assetRegistry.d.ts +25 -0
  497. package/dist/types/registry/assetRegistry.d.ts.map +1 -0
  498. package/dist/types/registry/marketRegistry.d.ts +42 -0
  499. package/dist/types/registry/marketRegistry.d.ts.map +1 -0
  500. package/dist/types/registry/referenceDataRegistry.d.ts +44 -0
  501. package/dist/types/registry/referenceDataRegistry.d.ts.map +1 -0
  502. package/dist/types/services/createAction.d.ts +26 -0
  503. package/dist/types/services/createAction.d.ts.map +1 -0
  504. package/dist/types/services/executeAction.d.ts +26 -0
  505. package/dist/types/services/executeAction.d.ts.map +1 -0
  506. package/dist/types/services/getAccount.d.ts +21 -18
  507. package/dist/types/services/getAccount.d.ts.map +1 -1
  508. package/dist/types/services/getActivity.d.ts +39 -0
  509. package/dist/types/services/getActivity.d.ts.map +1 -0
  510. package/dist/types/services/getAssets.d.ts +27 -0
  511. package/dist/types/services/getAssets.d.ts.map +1 -0
  512. package/dist/types/services/getFills.d.ts +38 -0
  513. package/dist/types/services/getFills.d.ts.map +1 -0
  514. package/dist/types/services/getMarket.d.ts +22 -15
  515. package/dist/types/services/getMarket.d.ts.map +1 -1
  516. package/dist/types/services/getMarkets.d.ts +16 -13
  517. package/dist/types/services/getMarkets.d.ts.map +1 -1
  518. package/dist/types/services/getMeta.d.ts +19 -0
  519. package/dist/types/services/getMeta.d.ts.map +1 -0
  520. package/dist/types/services/getOhlcv.d.ts +17 -21
  521. package/dist/types/services/getOhlcv.d.ts.map +1 -1
  522. package/dist/types/services/getOrder.d.ts +18 -18
  523. package/dist/types/services/getOrder.d.ts.map +1 -1
  524. package/dist/types/services/getOrderbook.d.ts +14 -24
  525. package/dist/types/services/getOrderbook.d.ts.map +1 -1
  526. package/dist/types/services/getOrders.d.ts +35 -0
  527. package/dist/types/services/getOrders.d.ts.map +1 -0
  528. package/dist/types/services/getPositions.d.ts +35 -0
  529. package/dist/types/services/getPositions.d.ts.map +1 -0
  530. package/dist/types/services/getPrices.d.ts +13 -25
  531. package/dist/types/services/getPrices.d.ts.map +1 -1
  532. package/dist/types/services/getProviders.d.ts +20 -0
  533. package/dist/types/services/getProviders.d.ts.map +1 -0
  534. package/dist/types/services/getQuote.d.ts +42 -0
  535. package/dist/types/services/getQuote.d.ts.map +1 -0
  536. package/dist/types/services/getTermsAcceptance.d.ts +24 -0
  537. package/dist/types/services/getTermsAcceptance.d.ts.map +1 -0
  538. package/dist/types/services/resolveQuote.d.ts +36 -0
  539. package/dist/types/services/resolveQuote.d.ts.map +1 -0
  540. package/dist/types/services/resolveSubscribeQuote.d.ts +31 -0
  541. package/dist/types/services/resolveSubscribeQuote.d.ts.map +1 -0
  542. package/dist/types/storage/parseStoredRecord.d.ts +29 -0
  543. package/dist/types/storage/parseStoredRecord.d.ts.map +1 -0
  544. package/dist/{esm/agent → types/storage}/storage.d.ts +6 -3
  545. package/dist/types/storage/storage.d.ts.map +1 -0
  546. package/dist/types/storage/types.d.ts +14 -0
  547. package/dist/types/storage/types.d.ts.map +1 -0
  548. package/dist/types/transport/fetchWithRetry.d.ts +22 -0
  549. package/dist/types/transport/fetchWithRetry.d.ts.map +1 -0
  550. package/dist/types/transport/request.d.ts +25 -0
  551. package/dist/types/transport/request.d.ts.map +1 -0
  552. package/dist/types/transport/retryPolicy.d.ts +106 -0
  553. package/dist/types/transport/retryPolicy.d.ts.map +1 -0
  554. package/dist/types/types/api.d.ts +214 -0
  555. package/dist/types/types/api.d.ts.map +1 -0
  556. package/dist/types/types/config.d.ts +70 -0
  557. package/dist/types/types/config.d.ts.map +1 -0
  558. package/dist/types/types/provider.d.ts +330 -0
  559. package/dist/types/types/provider.d.ts.map +1 -0
  560. package/dist/types/utils/accountSummary.d.ts +13 -0
  561. package/dist/types/utils/accountSummary.d.ts.map +1 -0
  562. package/dist/types/utils/assertNever.d.ts +20 -0
  563. package/dist/types/utils/assertNever.d.ts.map +1 -0
  564. package/dist/types/utils/calculations.d.ts +225 -0
  565. package/dist/types/utils/calculations.d.ts.map +1 -0
  566. package/dist/types/utils/depositChain.d.ts +25 -0
  567. package/dist/types/utils/depositChain.d.ts.map +1 -0
  568. package/dist/types/utils/explorer.d.ts +33 -0
  569. package/dist/types/utils/explorer.d.ts.map +1 -0
  570. package/dist/types/utils/fillClassification.d.ts +13 -0
  571. package/dist/types/utils/fillClassification.d.ts.map +1 -0
  572. package/dist/types/utils/format.d.ts +66 -0
  573. package/dist/types/utils/format.d.ts.map +1 -0
  574. package/dist/types/utils/orderClassification.d.ts +47 -0
  575. package/dist/types/utils/orderClassification.d.ts.map +1 -0
  576. package/dist/types/utils/orderMath.d.ts +44 -0
  577. package/dist/types/utils/orderMath.d.ts.map +1 -0
  578. package/dist/types/utils/parse.d.ts +21 -0
  579. package/dist/types/utils/parse.d.ts.map +1 -0
  580. package/dist/types/utils/positionMath.d.ts +107 -0
  581. package/dist/types/utils/positionMath.d.ts.map +1 -0
  582. package/dist/types/utils/signTypedData.d.ts +13 -10
  583. package/dist/types/utils/signTypedData.d.ts.map +1 -1
  584. package/dist/types/utils/sleep.d.ts +5 -0
  585. package/dist/types/utils/sleep.d.ts.map +1 -1
  586. package/dist/types/utils/units.d.ts +27 -0
  587. package/dist/types/utils/units.d.ts.map +1 -0
  588. package/dist/types/utils/validation.d.ts +18 -0
  589. package/dist/types/utils/validation.d.ts.map +1 -0
  590. package/dist/types/version.d.ts +1 -1
  591. package/dist/types/version.d.ts.map +1 -1
  592. package/dist/types/websocket/PerpsWsClient.d.ts +100 -0
  593. package/dist/types/websocket/PerpsWsClient.d.ts.map +1 -0
  594. package/dist/types/websocket/ReconnectingWebSocket.d.ts +130 -0
  595. package/dist/types/websocket/ReconnectingWebSocket.d.ts.map +1 -0
  596. package/dist/types/websocket/WsProviderBase.d.ts +89 -0
  597. package/dist/types/websocket/WsProviderBase.d.ts.map +1 -0
  598. package/dist/types/websocket/cachePromise.d.ts +14 -0
  599. package/dist/types/websocket/cachePromise.d.ts.map +1 -0
  600. package/dist/types/websocket/types.d.ts +60 -0
  601. package/dist/types/websocket/types.d.ts.map +1 -0
  602. package/dist/types/websocket/wsLog.d.ts +50 -0
  603. package/dist/types/websocket/wsLog.d.ts.map +1 -0
  604. package/package.json +12 -50
  605. package/src/client/PerpsClient.ts +549 -435
  606. package/src/client/bindProvider.ts +24 -0
  607. package/src/client/createPerpsClient.ts +61 -80
  608. package/src/client/requireProvider.ts +29 -0
  609. package/src/errors/PerpsError.ts +11 -22
  610. package/src/errors/constants.ts +8 -13
  611. package/src/index.ts +189 -65
  612. package/src/registry/assetRegistry.ts +62 -0
  613. package/src/registry/marketRegistry.ts +100 -0
  614. package/src/registry/referenceDataRegistry.ts +95 -0
  615. package/src/services/createAction.ts +52 -0
  616. package/src/services/executeAction.ts +56 -0
  617. package/src/services/getAccount.ts +26 -27
  618. package/src/services/getActivity.ts +57 -0
  619. package/src/services/getAssets.ts +38 -0
  620. package/src/services/getFills.ts +55 -0
  621. package/src/services/getMarket.ts +34 -23
  622. package/src/services/getMarkets.ts +21 -18
  623. package/src/services/getMeta.ts +30 -0
  624. package/src/services/getOhlcv.ts +21 -27
  625. package/src/services/getOrder.ts +23 -27
  626. package/src/services/getOrderbook.ts +18 -30
  627. package/src/services/getOrders.ts +51 -0
  628. package/src/services/getPositions.ts +51 -0
  629. package/src/services/getPrices.ts +16 -31
  630. package/src/services/getProviders.ts +31 -0
  631. package/src/services/getQuote.ts +58 -0
  632. package/src/services/getTermsAcceptance.ts +32 -0
  633. package/src/services/resolveQuote.ts +122 -0
  634. package/src/services/resolveSubscribeQuote.ts +109 -0
  635. package/src/storage/parseStoredRecord.ts +55 -0
  636. package/src/{agent → storage}/storage.ts +6 -4
  637. package/src/storage/types.ts +13 -0
  638. package/src/transport/fetchWithRetry.ts +116 -0
  639. package/src/transport/request.ts +123 -0
  640. package/src/transport/retryPolicy.ts +202 -0
  641. package/src/types/api.ts +239 -0
  642. package/src/types/config.ts +79 -0
  643. package/src/types/provider.ts +429 -0
  644. package/src/utils/accountSummary.ts +46 -0
  645. package/src/utils/assertNever.ts +23 -0
  646. package/src/utils/calculations.ts +406 -0
  647. package/src/utils/depositChain.ts +37 -0
  648. package/src/utils/explorer.ts +51 -0
  649. package/src/utils/fillClassification.ts +51 -0
  650. package/src/utils/format.ts +212 -0
  651. package/src/utils/orderClassification.ts +96 -0
  652. package/src/utils/orderMath.ts +134 -0
  653. package/src/utils/parse.ts +29 -0
  654. package/src/utils/positionMath.ts +149 -0
  655. package/src/utils/signTypedData.ts +25 -15
  656. package/src/utils/sleep.ts +5 -0
  657. package/src/utils/units.ts +39 -0
  658. package/src/utils/validation.ts +38 -0
  659. package/src/version.ts +1 -1
  660. package/src/websocket/PerpsWsClient.ts +204 -0
  661. package/src/websocket/ReconnectingWebSocket.ts +353 -0
  662. package/src/websocket/WsProviderBase.ts +333 -0
  663. package/src/websocket/cachePromise.ts +30 -0
  664. package/src/websocket/types.ts +75 -0
  665. package/src/websocket/wsLog.ts +82 -0
  666. package/dist/cjs/agent/AgentManager.d.ts +0 -15
  667. package/dist/cjs/agent/AgentManager.d.ts.map +0 -1
  668. package/dist/cjs/agent/AgentManager.js +0 -80
  669. package/dist/cjs/agent/AgentManager.js.map +0 -1
  670. package/dist/cjs/agent/storage.d.ts.map +0 -1
  671. package/dist/cjs/agent/storage.js.map +0 -1
  672. package/dist/cjs/agent/types.d.ts.map +0 -1
  673. package/dist/cjs/client/types.d.ts +0 -62
  674. package/dist/cjs/client/types.d.ts.map +0 -1
  675. package/dist/cjs/dex/hyperliquid.d.ts +0 -3
  676. package/dist/cjs/dex/hyperliquid.d.ts.map +0 -1
  677. package/dist/cjs/dex/hyperliquid.js +0 -21
  678. package/dist/cjs/dex/hyperliquid.js.map +0 -1
  679. package/dist/cjs/dex/registry.d.ts +0 -3
  680. package/dist/cjs/dex/registry.d.ts.map +0 -1
  681. package/dist/cjs/dex/registry.js +0 -16
  682. package/dist/cjs/dex/registry.js.map +0 -1
  683. package/dist/cjs/dex/types.d.ts +0 -13
  684. package/dist/cjs/dex/types.d.ts.map +0 -1
  685. package/dist/cjs/errors/AgentError.d.ts +0 -10
  686. package/dist/cjs/errors/AgentError.d.ts.map +0 -1
  687. package/dist/cjs/errors/AgentError.js +0 -23
  688. package/dist/cjs/errors/AgentError.js.map +0 -1
  689. package/dist/cjs/errors/HTTPError.d.ts +0 -11
  690. package/dist/cjs/errors/HTTPError.d.ts.map +0 -1
  691. package/dist/cjs/errors/HTTPError.js +0 -62
  692. package/dist/cjs/errors/HTTPError.js.map +0 -1
  693. package/dist/cjs/errors/PerpsSDKError.d.ts +0 -9
  694. package/dist/cjs/errors/PerpsSDKError.d.ts.map +0 -1
  695. package/dist/cjs/errors/PerpsSDKError.js +0 -36
  696. package/dist/cjs/errors/PerpsSDKError.js.map +0 -1
  697. package/dist/cjs/errors/ServerError.d.ts +0 -10
  698. package/dist/cjs/errors/ServerError.d.ts.map +0 -1
  699. package/dist/cjs/errors/ServerError.js +0 -24
  700. package/dist/cjs/errors/ServerError.js.map +0 -1
  701. package/dist/cjs/errors/ValidationError.d.ts +0 -9
  702. package/dist/cjs/errors/ValidationError.d.ts.map +0 -1
  703. package/dist/cjs/errors/ValidationError.js +0 -23
  704. package/dist/cjs/errors/ValidationError.js.map +0 -1
  705. package/dist/cjs/errors/utils/rootCause.d.ts +0 -6
  706. package/dist/cjs/errors/utils/rootCause.d.ts.map +0 -1
  707. package/dist/cjs/errors/utils/rootCause.js +0 -41
  708. package/dist/cjs/errors/utils/rootCause.js.map +0 -1
  709. package/dist/cjs/realtime/PerpsWsClient.d.ts +0 -14
  710. package/dist/cjs/realtime/PerpsWsClient.d.ts.map +0 -1
  711. package/dist/cjs/realtime/PerpsWsClient.js +0 -56
  712. package/dist/cjs/realtime/PerpsWsClient.js.map +0 -1
  713. package/dist/cjs/realtime/ReconnectingWebSocket.d.ts +0 -36
  714. package/dist/cjs/realtime/ReconnectingWebSocket.d.ts.map +0 -1
  715. package/dist/cjs/realtime/ReconnectingWebSocket.js +0 -132
  716. package/dist/cjs/realtime/ReconnectingWebSocket.js.map +0 -1
  717. package/dist/cjs/realtime/hyperliquid/HyperliquidWsProvider.d.ts +0 -26
  718. package/dist/cjs/realtime/hyperliquid/HyperliquidWsProvider.d.ts.map +0 -1
  719. package/dist/cjs/realtime/hyperliquid/HyperliquidWsProvider.js +0 -225
  720. package/dist/cjs/realtime/hyperliquid/HyperliquidWsProvider.js.map +0 -1
  721. package/dist/cjs/realtime/hyperliquid/types.d.ts +0 -35
  722. package/dist/cjs/realtime/hyperliquid/types.d.ts.map +0 -1
  723. package/dist/cjs/realtime/hyperliquid/types.js.map +0 -1
  724. package/dist/cjs/realtime/types.d.ts +0 -10
  725. package/dist/cjs/realtime/types.d.ts.map +0 -1
  726. package/dist/cjs/realtime/types.js +0 -3
  727. package/dist/cjs/services/cancelOrder.d.ts +0 -10
  728. package/dist/cjs/services/cancelOrder.d.ts.map +0 -1
  729. package/dist/cjs/services/cancelOrder.js +0 -16
  730. package/dist/cjs/services/cancelOrder.js.map +0 -1
  731. package/dist/cjs/services/createAuthorization.d.ts +0 -10
  732. package/dist/cjs/services/createAuthorization.d.ts.map +0 -1
  733. package/dist/cjs/services/createAuthorization.js +0 -16
  734. package/dist/cjs/services/createAuthorization.js.map +0 -1
  735. package/dist/cjs/services/createOrder.d.ts +0 -21
  736. package/dist/cjs/services/createOrder.d.ts.map +0 -1
  737. package/dist/cjs/services/createOrder.js +0 -27
  738. package/dist/cjs/services/createOrder.js.map +0 -1
  739. package/dist/cjs/services/createWithdrawal.d.ts +0 -9
  740. package/dist/cjs/services/createWithdrawal.d.ts.map +0 -1
  741. package/dist/cjs/services/createWithdrawal.js +0 -15
  742. package/dist/cjs/services/createWithdrawal.js.map +0 -1
  743. package/dist/cjs/services/getDexes.d.ts +0 -4
  744. package/dist/cjs/services/getDexes.d.ts.map +0 -1
  745. package/dist/cjs/services/getDexes.js +0 -8
  746. package/dist/cjs/services/getDexes.js.map +0 -1
  747. package/dist/cjs/services/getHistory.d.ts +0 -10
  748. package/dist/cjs/services/getHistory.d.ts.map +0 -1
  749. package/dist/cjs/services/getHistory.js +0 -14
  750. package/dist/cjs/services/getHistory.js.map +0 -1
  751. package/dist/cjs/services/submitAuthorization.d.ts +0 -10
  752. package/dist/cjs/services/submitAuthorization.d.ts.map +0 -1
  753. package/dist/cjs/services/submitAuthorization.js.map +0 -1
  754. package/dist/cjs/services/submitOrder.d.ts +0 -10
  755. package/dist/cjs/services/submitOrder.d.ts.map +0 -1
  756. package/dist/cjs/services/submitOrder.js +0 -16
  757. package/dist/cjs/services/submitOrder.js.map +0 -1
  758. package/dist/cjs/services/submitWithdrawal.d.ts +0 -9
  759. package/dist/cjs/services/submitWithdrawal.d.ts.map +0 -1
  760. package/dist/cjs/services/submitWithdrawal.js +0 -15
  761. package/dist/cjs/services/submitWithdrawal.js.map +0 -1
  762. package/dist/cjs/utils/request.d.ts.map +0 -1
  763. package/dist/cjs/utils/request.js +0 -60
  764. package/dist/cjs/utils/request.js.map +0 -1
  765. package/dist/esm/agent/AgentManager.d.ts +0 -45
  766. package/dist/esm/agent/AgentManager.d.ts.map +0 -1
  767. package/dist/esm/agent/AgentManager.js +0 -110
  768. package/dist/esm/agent/AgentManager.js.map +0 -1
  769. package/dist/esm/agent/storage.d.ts.map +0 -1
  770. package/dist/esm/agent/storage.js.map +0 -1
  771. package/dist/esm/agent/types.d.ts +0 -23
  772. package/dist/esm/agent/types.d.ts.map +0 -1
  773. package/dist/esm/agent/types.js.map +0 -1
  774. package/dist/esm/client/types.d.ts +0 -134
  775. package/dist/esm/client/types.d.ts.map +0 -1
  776. package/dist/esm/client/types.js.map +0 -1
  777. package/dist/esm/dex/hyperliquid.d.ts +0 -3
  778. package/dist/esm/dex/hyperliquid.d.ts.map +0 -1
  779. package/dist/esm/dex/hyperliquid.js +0 -19
  780. package/dist/esm/dex/hyperliquid.js.map +0 -1
  781. package/dist/esm/dex/registry.d.ts +0 -3
  782. package/dist/esm/dex/registry.d.ts.map +0 -1
  783. package/dist/esm/dex/registry.js +0 -13
  784. package/dist/esm/dex/registry.js.map +0 -1
  785. package/dist/esm/dex/types.d.ts +0 -15
  786. package/dist/esm/dex/types.d.ts.map +0 -1
  787. package/dist/esm/dex/types.js +0 -2
  788. package/dist/esm/dex/types.js.map +0 -1
  789. package/dist/esm/errors/AgentError.d.ts +0 -25
  790. package/dist/esm/errors/AgentError.d.ts.map +0 -1
  791. package/dist/esm/errors/AgentError.js +0 -35
  792. package/dist/esm/errors/AgentError.js.map +0 -1
  793. package/dist/esm/errors/HTTPError.d.ts +0 -11
  794. package/dist/esm/errors/HTTPError.d.ts.map +0 -1
  795. package/dist/esm/errors/HTTPError.js +0 -61
  796. package/dist/esm/errors/HTTPError.js.map +0 -1
  797. package/dist/esm/errors/PerpsSDKError.d.ts +0 -40
  798. package/dist/esm/errors/PerpsSDKError.d.ts.map +0 -1
  799. package/dist/esm/errors/PerpsSDKError.js +0 -67
  800. package/dist/esm/errors/PerpsSDKError.js.map +0 -1
  801. package/dist/esm/errors/ServerError.d.ts +0 -23
  802. package/dist/esm/errors/ServerError.d.ts.map +0 -1
  803. package/dist/esm/errors/ServerError.js +0 -34
  804. package/dist/esm/errors/ServerError.js.map +0 -1
  805. package/dist/esm/errors/ValidationError.d.ts +0 -23
  806. package/dist/esm/errors/ValidationError.d.ts.map +0 -1
  807. package/dist/esm/errors/ValidationError.js +0 -34
  808. package/dist/esm/errors/ValidationError.js.map +0 -1
  809. package/dist/esm/errors/utils/rootCause.d.ts +0 -71
  810. package/dist/esm/errors/utils/rootCause.d.ts.map +0 -1
  811. package/dist/esm/errors/utils/rootCause.js +0 -99
  812. package/dist/esm/errors/utils/rootCause.js.map +0 -1
  813. package/dist/esm/realtime/PerpsWsClient.d.ts +0 -14
  814. package/dist/esm/realtime/PerpsWsClient.d.ts.map +0 -1
  815. package/dist/esm/realtime/PerpsWsClient.js +0 -52
  816. package/dist/esm/realtime/PerpsWsClient.js.map +0 -1
  817. package/dist/esm/realtime/ReconnectingWebSocket.d.ts.map +0 -1
  818. package/dist/esm/realtime/ReconnectingWebSocket.js +0 -128
  819. package/dist/esm/realtime/ReconnectingWebSocket.js.map +0 -1
  820. package/dist/esm/realtime/hyperliquid/HyperliquidWsProvider.d.ts +0 -26
  821. package/dist/esm/realtime/hyperliquid/HyperliquidWsProvider.d.ts.map +0 -1
  822. package/dist/esm/realtime/hyperliquid/HyperliquidWsProvider.js +0 -222
  823. package/dist/esm/realtime/hyperliquid/HyperliquidWsProvider.js.map +0 -1
  824. package/dist/esm/realtime/hyperliquid/types.d.ts +0 -35
  825. package/dist/esm/realtime/hyperliquid/types.d.ts.map +0 -1
  826. package/dist/esm/realtime/hyperliquid/types.js +0 -4
  827. package/dist/esm/realtime/hyperliquid/types.js.map +0 -1
  828. package/dist/esm/realtime/types.d.ts +0 -10
  829. package/dist/esm/realtime/types.d.ts.map +0 -1
  830. package/dist/esm/realtime/types.js +0 -2
  831. package/dist/esm/realtime/types.js.map +0 -1
  832. package/dist/esm/services/cancelOrder.d.ts +0 -51
  833. package/dist/esm/services/cancelOrder.d.ts.map +0 -1
  834. package/dist/esm/services/cancelOrder.js +0 -50
  835. package/dist/esm/services/cancelOrder.js.map +0 -1
  836. package/dist/esm/services/createAuthorization.d.ts +0 -51
  837. package/dist/esm/services/createAuthorization.d.ts.map +0 -1
  838. package/dist/esm/services/createAuthorization.js +0 -50
  839. package/dist/esm/services/createAuthorization.js.map +0 -1
  840. package/dist/esm/services/createOrder.d.ts +0 -74
  841. package/dist/esm/services/createOrder.d.ts.map +0 -1
  842. package/dist/esm/services/createOrder.js +0 -62
  843. package/dist/esm/services/createOrder.js.map +0 -1
  844. package/dist/esm/services/createWithdrawal.d.ts +0 -49
  845. package/dist/esm/services/createWithdrawal.d.ts.map +0 -1
  846. package/dist/esm/services/createWithdrawal.js +0 -49
  847. package/dist/esm/services/createWithdrawal.js.map +0 -1
  848. package/dist/esm/services/getDexes.d.ts +0 -20
  849. package/dist/esm/services/getDexes.d.ts.map +0 -1
  850. package/dist/esm/services/getDexes.js +0 -21
  851. package/dist/esm/services/getDexes.js.map +0 -1
  852. package/dist/esm/services/getHistory.d.ts +0 -45
  853. package/dist/esm/services/getHistory.d.ts.map +0 -1
  854. package/dist/esm/services/getHistory.js +0 -42
  855. package/dist/esm/services/getHistory.js.map +0 -1
  856. package/dist/esm/services/submitAuthorization.d.ts +0 -42
  857. package/dist/esm/services/submitAuthorization.d.ts.map +0 -1
  858. package/dist/esm/services/submitAuthorization.js +0 -41
  859. package/dist/esm/services/submitAuthorization.js.map +0 -1
  860. package/dist/esm/services/submitOrder.d.ts +0 -44
  861. package/dist/esm/services/submitOrder.d.ts.map +0 -1
  862. package/dist/esm/services/submitOrder.js +0 -43
  863. package/dist/esm/services/submitOrder.js.map +0 -1
  864. package/dist/esm/services/submitWithdrawal.d.ts +0 -40
  865. package/dist/esm/services/submitWithdrawal.d.ts.map +0 -1
  866. package/dist/esm/services/submitWithdrawal.js +0 -40
  867. package/dist/esm/services/submitWithdrawal.js.map +0 -1
  868. package/dist/esm/utils/request.d.ts +0 -26
  869. package/dist/esm/utils/request.d.ts.map +0 -1
  870. package/dist/esm/utils/request.js +0 -78
  871. package/dist/esm/utils/request.js.map +0 -1
  872. package/dist/types/agent/AgentManager.d.ts +0 -45
  873. package/dist/types/agent/AgentManager.d.ts.map +0 -1
  874. package/dist/types/agent/storage.d.ts.map +0 -1
  875. package/dist/types/agent/types.d.ts +0 -23
  876. package/dist/types/agent/types.d.ts.map +0 -1
  877. package/dist/types/client/types.d.ts +0 -134
  878. package/dist/types/client/types.d.ts.map +0 -1
  879. package/dist/types/dex/hyperliquid.d.ts +0 -3
  880. package/dist/types/dex/hyperliquid.d.ts.map +0 -1
  881. package/dist/types/dex/registry.d.ts +0 -3
  882. package/dist/types/dex/registry.d.ts.map +0 -1
  883. package/dist/types/dex/types.d.ts +0 -15
  884. package/dist/types/dex/types.d.ts.map +0 -1
  885. package/dist/types/errors/AgentError.d.ts +0 -25
  886. package/dist/types/errors/AgentError.d.ts.map +0 -1
  887. package/dist/types/errors/HTTPError.d.ts +0 -11
  888. package/dist/types/errors/HTTPError.d.ts.map +0 -1
  889. package/dist/types/errors/PerpsSDKError.d.ts +0 -40
  890. package/dist/types/errors/PerpsSDKError.d.ts.map +0 -1
  891. package/dist/types/errors/ServerError.d.ts +0 -23
  892. package/dist/types/errors/ServerError.d.ts.map +0 -1
  893. package/dist/types/errors/ValidationError.d.ts +0 -23
  894. package/dist/types/errors/ValidationError.d.ts.map +0 -1
  895. package/dist/types/errors/utils/rootCause.d.ts +0 -71
  896. package/dist/types/errors/utils/rootCause.d.ts.map +0 -1
  897. package/dist/types/realtime/PerpsWsClient.d.ts +0 -14
  898. package/dist/types/realtime/PerpsWsClient.d.ts.map +0 -1
  899. package/dist/types/realtime/ReconnectingWebSocket.d.ts +0 -36
  900. package/dist/types/realtime/ReconnectingWebSocket.d.ts.map +0 -1
  901. package/dist/types/realtime/hyperliquid/HyperliquidWsProvider.d.ts +0 -26
  902. package/dist/types/realtime/hyperliquid/HyperliquidWsProvider.d.ts.map +0 -1
  903. package/dist/types/realtime/hyperliquid/types.d.ts +0 -35
  904. package/dist/types/realtime/hyperliquid/types.d.ts.map +0 -1
  905. package/dist/types/realtime/types.d.ts +0 -10
  906. package/dist/types/realtime/types.d.ts.map +0 -1
  907. package/dist/types/services/cancelOrder.d.ts +0 -51
  908. package/dist/types/services/cancelOrder.d.ts.map +0 -1
  909. package/dist/types/services/createAuthorization.d.ts +0 -51
  910. package/dist/types/services/createAuthorization.d.ts.map +0 -1
  911. package/dist/types/services/createOrder.d.ts +0 -74
  912. package/dist/types/services/createOrder.d.ts.map +0 -1
  913. package/dist/types/services/createWithdrawal.d.ts +0 -49
  914. package/dist/types/services/createWithdrawal.d.ts.map +0 -1
  915. package/dist/types/services/getDexes.d.ts +0 -20
  916. package/dist/types/services/getDexes.d.ts.map +0 -1
  917. package/dist/types/services/getHistory.d.ts +0 -45
  918. package/dist/types/services/getHistory.d.ts.map +0 -1
  919. package/dist/types/services/submitAuthorization.d.ts +0 -42
  920. package/dist/types/services/submitAuthorization.d.ts.map +0 -1
  921. package/dist/types/services/submitOrder.d.ts +0 -44
  922. package/dist/types/services/submitOrder.d.ts.map +0 -1
  923. package/dist/types/services/submitWithdrawal.d.ts +0 -40
  924. package/dist/types/services/submitWithdrawal.d.ts.map +0 -1
  925. package/dist/types/utils/request.d.ts +0 -26
  926. package/dist/types/utils/request.d.ts.map +0 -1
  927. package/src/agent/AgentManager.ts +0 -135
  928. package/src/agent/types.ts +0 -24
  929. package/src/client/types.ts +0 -162
  930. package/src/dex/hyperliquid.ts +0 -20
  931. package/src/dex/registry.ts +0 -15
  932. package/src/dex/types.ts +0 -16
  933. package/src/errors/AgentError.ts +0 -43
  934. package/src/errors/HTTPError.ts +0 -72
  935. package/src/errors/PerpsSDKError.ts +0 -79
  936. package/src/errors/ServerError.ts +0 -41
  937. package/src/errors/ValidationError.ts +0 -38
  938. package/src/errors/utils/rootCause.ts +0 -112
  939. package/src/realtime/PerpsWsClient.ts +0 -73
  940. package/src/realtime/ReconnectingWebSocket.ts +0 -156
  941. package/src/realtime/hyperliquid/HyperliquidWsProvider.ts +0 -278
  942. package/src/realtime/hyperliquid/types.ts +0 -48
  943. package/src/realtime/types.ts +0 -16
  944. package/src/services/cancelOrder.ts +0 -75
  945. package/src/services/createAuthorization.ts +0 -79
  946. package/src/services/createOrder.ts +0 -116
  947. package/src/services/createWithdrawal.ts +0 -76
  948. package/src/services/getDexes.ts +0 -34
  949. package/src/services/getHistory.ts +0 -62
  950. package/src/services/submitAuthorization.ts +0 -70
  951. package/src/services/submitOrder.ts +0 -72
  952. package/src/services/submitWithdrawal.ts +0 -67
  953. package/src/utils/request.ts +0 -116
  954. /package/dist/cjs/{agent → storage}/storage.d.ts +0 -0
  955. /package/dist/cjs/{agent → storage}/storage.js +0 -0
  956. /package/dist/cjs/{agent → storage}/types.js +0 -0
  957. /package/dist/cjs/{client → websocket}/types.js +0 -0
  958. /package/dist/esm/{agent → storage}/types.js +0 -0
  959. /package/dist/esm/{client → websocket}/types.js +0 -0
@@ -1,572 +1,686 @@
1
1
  import type {
2
- Address,
3
- AuthorizationsResponse,
4
- CancelOrderPayloadResponse,
5
- CreateAuthorizationResponse,
6
- CreateOrderResponse,
7
- CreateWithdrawalResponse,
8
- OrderActionType,
9
- SignedAuthorization,
10
- SignedOrderAction,
11
- SubmitOrderResponse,
12
- SubmitWithdrawalResponse,
2
+ AccountResponse,
3
+ AccountSummary,
4
+ ActionParamsMap,
5
+ ActionStep,
6
+ CreateActionResponse,
7
+ ExecuteActionResponse,
8
+ MarketRef,
9
+ Position,
10
+ Provider,
11
+ ProviderAction,
12
+ SignedActionStep,
13
13
  } from '@lifi/perps-types'
14
- import { PerpsErrorCode } from '@lifi/perps-types'
15
- import { getDexAuthProvider } from '../dex/registry.js'
16
- import { PerpsErrorMessage } from '../errors/constants.js'
14
+ import { ActionType, PerpsErrorCode } from '@lifi/perps-types'
15
+ import type { Address } from 'viem'
17
16
  import { PerpsError } from '../errors/PerpsError.js'
18
- import { cancelOrder } from '../services/cancelOrder.js'
19
- import { createAuthorization } from '../services/createAuthorization.js'
20
- import { createOrder } from '../services/createOrder.js'
21
- import { createWithdrawal } from '../services/createWithdrawal.js'
22
- import type { SubmitAuthorizationParams } from '../services/submitAuthorization.js'
23
- import { submitAuthorization } from '../services/submitAuthorization.js'
24
- import type { SubmitOrderParams } from '../services/submitOrder.js'
25
- import { submitOrder } from '../services/submitOrder.js'
26
- import type { SubmitWithdrawalParams } from '../services/submitWithdrawal.js'
27
- import { submitWithdrawal } from '../services/submitWithdrawal.js'
28
- import { signTypedData } from '../utils/signTypedData.js'
29
- import { createPerpsClient, type PerpsSDKClient } from './createPerpsClient.js'
17
+ import { createAction } from '../services/createAction.js'
18
+ import { executeAction } from '../services/executeAction.js'
19
+ import { getAccount as fetchAccount } from '../services/getAccount.js'
20
+ import { getProviders } from '../services/getProviders.js'
30
21
  import type {
31
- BuildAuthorizationParams,
32
- BuildWithdrawalParams,
22
+ BuildProviderSetupParams,
33
23
  CancelOrdersParams,
34
- ExecuteAuthorizationsParams,
35
- ExecuteAuthorizationsResult,
36
- GetRequiredAuthorizationsParams,
24
+ ExecuteProviderSetupParams,
25
+ ExecuteProviderSetupResult,
26
+ GetAccountResult,
27
+ GetSetupParams,
28
+ ModifyOrdersParams,
37
29
  PerpsClientOptions,
38
30
  PlaceOrderParams,
39
- RequiredAuthorizationsResult,
40
- SigningMode,
41
- } from './types.js'
31
+ PlaceTriggerOrderParams,
32
+ ProviderSetup,
33
+ WithdrawParams,
34
+ } from '../types/api.js'
35
+ import type {
36
+ ActionSignerContribution,
37
+ PerpsProvider,
38
+ PerpsSDKClient,
39
+ SignActionsContext,
40
+ } from '../types/provider.js'
41
+ import { createPerpsClient } from './createPerpsClient.js'
42
+ import { requireProvider as resolveProvider } from './requireProvider.js'
42
43
 
43
44
  /**
44
- * Stateful client for managing signing modes and trading operations.
45
- *
46
- * The PerpsClient provides two signing modes:
47
- * - `USER`: User wallet signs each action (wallet popup per action)
48
- * - `USER_AGENT`: SDK-generated agent signs actions (no popups after setup)
49
- *
50
- * In `USER_AGENT` mode, the client:
51
- * - Generates an agent keypair stored in localStorage (or custom storage)
52
- * - Auto-injects agent address into authorization requests
53
- * - Auto-signs trading actions with the agent key
54
- *
55
- * @remarks
56
- * The example below uses Hyperliquid. Authorization keys and parameters are DEX-specific.
57
- *
58
- * @example
59
- * ```ts
60
- * const perps = new PerpsClient({ integrator: 'my-app' })
61
- *
62
- * // Set up agent signing for a user + DEX pair
63
- * await perps.setSigningMode(userAddress, 'hyperliquid', 'USER_AGENT')
64
- *
65
- * // Check and execute required authorizations
66
- * const required = await perps.getRequiredAuthorizations({
67
- * dex: 'hyperliquid',
68
- * address: userAddress,
69
- * })
70
- *
71
- * // ... sign actions with user wallet ...
45
+ * Look up an action's descriptor in the provider's metadata. Throws if the
46
+ * action isn't declared — defensive: better to fail loudly than to mis-sign.
47
+ */
48
+ function findActionDescriptor(
49
+ metadata: Provider,
50
+ action: ActionType
51
+ ): ProviderAction {
52
+ const descriptor = [
53
+ ...metadata.setup,
54
+ ...metadata.options,
55
+ ...metadata.actions,
56
+ ].find((d) => d.type === action)
57
+ if (!descriptor) {
58
+ throw new PerpsError(
59
+ PerpsErrorCode.SDKError,
60
+ `Provider '${metadata.key}' does not declare action '${action}'.`
61
+ )
62
+ }
63
+ return descriptor
64
+ }
65
+
66
+ /**
67
+ * The primary high-level perps API: wraps a {@link PerpsSDKClient} and owns the
68
+ * end-to-end signing pipeline for provider setup, orders, and account-level
69
+ * actions. Construct via `new PerpsClient(options)` or the SDK's higher-level
70
+ * wiring.
72
71
  *
73
- * // Place orders (agent signs automatically)
74
- * const result = await perps.placeOrder({
75
- * address: userAddress,
76
- * dex: 'hyperliquid',
77
- * symbol: 'BTC',
78
- * side: 'BUY',
79
- * type: 'MARKET',
80
- * size: '0.1',
81
- * price: '95000.00'
82
- * })
83
- * ```
72
+ * @public
84
73
  */
85
74
  export class PerpsClient {
86
75
  private sdkClient: PerpsSDKClient
87
- private signingModes: Map<string, SigningMode> = new Map()
76
+ private providerMetadataCache: Map<string, Provider> = new Map()
77
+ private _userWallet: PerpsSDKClient['userWallet'] | undefined
88
78
 
89
79
  constructor(options: PerpsClientOptions) {
90
80
  this.sdkClient = createPerpsClient({
91
81
  integrator: options.integrator,
92
82
  apiKey: options.apiKey,
93
83
  apiUrl: options.apiUrl,
94
- storage: options.storage,
84
+ providers: options.providers,
95
85
  })
96
86
  }
97
87
 
98
88
  /**
99
- * Get the underlying SDK client for use with service functions.
89
+ * Set or update the end-user's wallet. Used whenever an action's descriptor
90
+ * names the user wallet in its `signers` list. Pass undefined to clear.
91
+ *
92
+ * @public
100
93
  */
101
- get client(): PerpsSDKClient {
102
- return this.sdkClient
94
+ setUserWallet(userWallet: PerpsSDKClient['userWallet']): void {
95
+ this._userWallet = userWallet
96
+ Object.defineProperty(this.sdkClient, 'userWallet', {
97
+ get: () => this._userWallet,
98
+ configurable: true,
99
+ })
103
100
  }
104
101
 
105
102
  /**
106
- * Get the storage key for a user + DEX pair.
103
+ * The underlying low-level {@link PerpsSDKClient} (config, user wallet,
104
+ * provider registry) backing this instance.
105
+ *
106
+ * @public
107
107
  */
108
- private modeKey(address: Address, dex: string): string {
109
- return `${address.toLowerCase()}:${dex.toLowerCase()}`
108
+ get client(): PerpsSDKClient {
109
+ return this.sdkClient
110
110
  }
111
111
 
112
- /**
113
- * Set the signing mode for a user + DEX pair.
114
- *
115
- * In `USER_AGENT` mode, generates an agent keypair if one doesn't exist.
116
- *
117
- * @param address - User wallet address
118
- * @param dex - DEX identifier
119
- * @param mode - Signing mode to set
120
- */
121
- async setSigningMode(
122
- address: Address,
123
- dex: string,
124
- mode: SigningMode
125
- ): Promise<void> {
126
- const key = this.modeKey(address, dex)
127
- this.signingModes.set(key, mode)
128
-
129
- if (mode === 'USER_AGENT') {
130
- // Generate agent keypair if not exists
131
- await this.sdkClient.agentManager.getOrCreateAgent(address, dex)
112
+ private async getProviderMetadata(provider: string): Promise<Provider> {
113
+ const cached = this.providerMetadataCache.get(provider)
114
+ if (cached) {
115
+ return cached
116
+ }
117
+
118
+ const { providers } = await getProviders(this.sdkClient)
119
+ for (const d of providers) {
120
+ this.providerMetadataCache.set(d.key, d)
121
+ }
122
+
123
+ const metadata = this.providerMetadataCache.get(provider)
124
+ if (!metadata) {
125
+ const error = new PerpsError(
126
+ PerpsErrorCode.SDKError,
127
+ `Unsupported provider: ${provider}`
128
+ )
129
+ error.tool = '@lifi/perps-sdk'
130
+ throw error
132
131
  }
132
+ return metadata
133
133
  }
134
134
 
135
135
  /**
136
- * Get the current signing mode for a user + DEX pair.
137
- * Defaults to `USER` if not set.
136
+ * Resolve the registered provider plugin for `provider`, throwing a
137
+ * `PerpsError` when the caller has not registered one via the SDK's
138
+ * `providers` option. The plugin owns signer identity and write-side signing.
138
139
  */
139
- getSigningMode(address: Address, dex: string): SigningMode {
140
- return this.signingModes.get(this.modeKey(address, dex)) ?? 'USER'
140
+ private requireProvider(provider: string): PerpsProvider {
141
+ return resolveProvider(this.sdkClient, provider)
141
142
  }
142
143
 
143
144
  /**
144
- * Get the agent address for a user + DEX pair.
145
- *
146
- * @throws {PerpsError} If in USER mode or agent not found
145
+ * Ask the provider plugin for the signer-bearing wire fields of `action` —
146
+ * the on-wire `signerAddress` and any signer-derived params (e.g.
147
+ * Hyperliquid's `agentAddress` for `APPROVE_AGENT`). Forwards the descriptor's
148
+ * `signers` so the plugin can branch on signer role. Returns empty when the
149
+ * plugin signs as the user or with a non-EVM credential. Core constructs no
150
+ * `signerAddress` itself; signer identity is plugin-owned.
147
151
  */
148
- async getAgentAddress(address: Address, dex: string): Promise<Address> {
149
- const agent = await this.sdkClient.agentManager.getAgent(address, dex)
150
- return agent.address
152
+ private async resolveActionRequest(
153
+ provider: string,
154
+ descriptor: ProviderAction,
155
+ address: Address
156
+ ): Promise<ActionSignerContribution> {
157
+ const plugin = this.requireProvider(provider)
158
+ if (typeof plugin.resolveActionRequest !== 'function') {
159
+ return {}
160
+ }
161
+ return plugin.resolveActionRequest(
162
+ descriptor.type,
163
+ address,
164
+ descriptor.signers
165
+ )
151
166
  }
152
167
 
153
168
  /**
154
- * Check if an agent exists for a user + DEX pair.
169
+ * Delegate signing of `actions` to the provider plugin. The plugin owns
170
+ * every signing arm and branches on the descriptor's `signers` internally,
171
+ * reading the end-user's wallet from the {@link SignActionsContext} when an
172
+ * arm signs as the user.
155
173
  */
156
- async hasAgent(address: Address, dex: string): Promise<boolean> {
157
- return this.sdkClient.agentManager.hasAgent(address, dex)
174
+ private async delegateSignActions(
175
+ provider: string,
176
+ address: Address,
177
+ descriptor: ProviderAction,
178
+ actions: ActionStep[]
179
+ ): Promise<SignedActionStep[]> {
180
+ const plugin = this.requireProvider(provider)
181
+ if (typeof plugin.signActions !== 'function') {
182
+ throw new PerpsError(
183
+ PerpsErrorCode.SDKError,
184
+ `Provider '${provider}' does not implement signActions for ` +
185
+ `signingMethod '${descriptor.signingMethod}'.`
186
+ )
187
+ }
188
+ return plugin.signActions(
189
+ descriptor.signingMethod,
190
+ actions,
191
+ address,
192
+ this.buildSignActionsContext(descriptor)
193
+ )
158
194
  }
159
195
 
160
196
  /**
161
- * Remove the agent for a user + DEX pair.
162
- * Also resets signing mode to USER.
197
+ * Assemble the per-call context the provider plugin needs in order to sign:
198
+ * the end-user's wallet and the descriptor's declared `signers`. Core
199
+ * forwards `signers` as data so the plugin can pick WHO signs; it does not
200
+ * branch on them. Provider-owned session credentials (the Hyperliquid agent
201
+ * keypair, Lighter's API key) are resolved inside the provider's
202
+ * `signActions`, not threaded through here.
163
203
  */
164
- async removeAgent(address: Address, dex: string): Promise<void> {
165
- await this.sdkClient.agentManager.removeAgent(address, dex)
166
- this.signingModes.delete(this.modeKey(address, dex))
204
+ private buildSignActionsContext(
205
+ descriptor: ProviderAction
206
+ ): SignActionsContext {
207
+ const ctx: SignActionsContext = { signers: descriptor.signers }
208
+ if (this.sdkClient.userWallet !== undefined) {
209
+ ctx.userWallet = this.sdkClient.userWallet
210
+ }
211
+ return ctx
167
212
  }
168
213
 
169
214
  /**
170
- * Build authorization payloads for signing.
215
+ * Sign a single provider setup action step by delegating to the provider
216
+ * plugin, which branches on the step's signing scheme internally. Lets
217
+ * consumers collect signed setup actions without embedding per-method
218
+ * signing logic.
171
219
  *
172
- * In `USER` mode, `signerAddress` is omitted (backend defaults to `address`).
173
- * In `USER_AGENT` mode, auto-injects the agent address as `signerAddress`.
220
+ * @throws {PerpsError} When the step's action is not declared by the provider.
221
+ * @public
222
+ */
223
+ async signProviderSetupAction(
224
+ provider: string,
225
+ address: Address,
226
+ step: ActionStep
227
+ ): Promise<SignedActionStep> {
228
+ const metadata = await this.getProviderMetadata(provider)
229
+ const descriptor = findActionDescriptor(metadata, step.action)
230
+ const [signed] = await this.delegateSignActions(
231
+ provider,
232
+ address,
233
+ descriptor,
234
+ [step]
235
+ )
236
+ return signed
237
+ }
238
+
239
+ /**
240
+ * Build (but do not sign or submit) the unsigned action steps for `action`,
241
+ * letting the provider plugin contribute any signer-bearing request fields.
174
242
  *
175
- * @param params - Authorization parameters
176
- * @returns Authorization actions with typed data for signing
243
+ * @public
177
244
  */
178
- async buildAuthorization(
179
- params: BuildAuthorizationParams
180
- ): Promise<CreateAuthorizationResponse> {
181
- const mode = this.getSigningMode(params.address, params.dex)
182
- let { signerAddress } = params
183
-
184
- if (mode === 'USER_AGENT') {
185
- const agent = await this.sdkClient.agentManager.getAgent(
186
- params.address,
187
- params.dex
245
+ async buildAction<T extends ActionType>(
246
+ action: T,
247
+ params: { provider: string; address: Address; params: ActionParamsMap[T] }
248
+ ): Promise<CreateActionResponse> {
249
+ const metadata = await this.getProviderMetadata(params.provider)
250
+ const descriptor = findActionDescriptor(metadata, action)
251
+ const { signerAddress, params: signerParams } =
252
+ await this.resolveActionRequest(
253
+ params.provider,
254
+ descriptor,
255
+ params.address
188
256
  )
189
- signerAddress = signerAddress ?? agent.address
190
- }
191
-
192
- return createAuthorization(this.sdkClient, {
193
- ...params,
257
+ return createAction(this.sdkClient, {
258
+ provider: params.provider,
259
+ address: params.address,
194
260
  signerAddress,
261
+ action,
262
+ params: {
263
+ ...params.params,
264
+ ...signerParams,
265
+ } as ActionParamsMap[T],
195
266
  })
196
267
  }
197
268
 
198
269
  /**
199
- * Submit signed authorizations.
270
+ * Fetch the user's account state from the backend and attach the
271
+ * SDK-projected `settings` array — one `AccountConfigSetting` per
272
+ * descriptor on `Provider.setup` + `Provider.options`. Callers read
273
+ * `result.settings` directly without re-deriving values from the typed
274
+ * `AccountConfig`.
200
275
  *
201
- * In `USER` mode, `signerAddress` is omitted (backend defaults to `address`).
202
- * In `USER_AGENT` mode, auto-injects the agent address as `signerAddress`.
276
+ * @throws {PerpsError} When the provider plugin is not registered, or the
277
+ * backend account fetch fails.
278
+ * @public
279
+ */
280
+ async getAccount(params: {
281
+ provider: string
282
+ address: Address
283
+ }): Promise<GetAccountResult> {
284
+ const plugin = this.requireProvider(params.provider)
285
+ const [response, metadata] = await Promise.all([
286
+ fetchAccount(this.sdkClient, params),
287
+ this.getProviderMetadata(params.provider),
288
+ ])
289
+ const settings = plugin.projectConfig(
290
+ response.config,
291
+ metadata.setup,
292
+ metadata.options
293
+ )
294
+ return { ...response, settings }
295
+ }
296
+
297
+ /**
298
+ * Roll an already-fetched {@link AccountResponse} (plus its positions) up
299
+ * into an {@link AccountSummary}, delegating to the owning provider so the
300
+ * venue-specific collateral and margin semantics are applied correctly.
301
+ */
302
+ getAccountSummary(
303
+ account: AccountResponse,
304
+ positions: Position[]
305
+ ): AccountSummary {
306
+ return this.requireProvider(account.provider).getAccountSummary(
307
+ account,
308
+ positions
309
+ )
310
+ }
311
+
312
+ /**
313
+ * Thin existence check for a provider account at `address`. Returns
314
+ * `true` when `getAccount` resolves, `false` when the backend reports
315
+ * `PerpsErrorCode.AccountNotFound`, and re-throws on any other error
316
+ * (transport failures, validation errors, server errors).
203
317
  *
204
- * @param params - Signed authorization parameters
318
+ * @throws {PerpsError} On any backend error other than
319
+ * `PerpsErrorCode.AccountNotFound`.
320
+ * @public
205
321
  */
206
- async submitAuthorizations(
207
- params: SubmitAuthorizationParams
208
- ): Promise<AuthorizationsResponse> {
209
- const mode = this.getSigningMode(params.address, params.dex)
210
- let { signerAddress } = params
211
-
212
- if (mode === 'USER_AGENT') {
213
- const agent = await this.sdkClient.agentManager.getAgent(
214
- params.address,
215
- params.dex
216
- )
217
- signerAddress = signerAddress ?? agent.address
322
+ async accountExists(provider: string, address: Address): Promise<boolean> {
323
+ try {
324
+ await fetchAccount(this.sdkClient, { provider, address })
325
+ return true
326
+ } catch (err) {
327
+ if (
328
+ err instanceof PerpsError &&
329
+ err.code === PerpsErrorCode.AccountNotFound
330
+ ) {
331
+ return false
332
+ }
333
+ throw err
218
334
  }
219
-
220
- return submitAuthorization(this.sdkClient, { ...params, signerAddress })
221
335
  }
222
336
 
223
337
  /**
224
- * Build order payloads for signing.
338
+ * Return the unsatisfied entries on `Provider.setup` for this account as a
339
+ * flat, self-describing list. Trading is gated on `isReady === true`.
225
340
  *
226
- * In `USER` mode, `signerAddress` is omitted (backend defaults to `address`).
227
- * In `USER_AGENT` mode, auto-injects the agent address as `signerAddress`.
341
+ * `Provider.options` descriptors are NEVER returned here options are
342
+ * post-setup tunables and never gate trading. Option state is surfaced
343
+ * separately via `getAccount().settings`.
228
344
  *
229
- * @param params - Order parameters
230
- * @returns Order actions with typed data for signing
345
+ * @public
231
346
  */
232
- async buildOrder(params: PlaceOrderParams): Promise<CreateOrderResponse> {
233
- const mode = this.getSigningMode(params.address, params.dex)
234
- let signerAddress: Address | undefined
235
-
236
- if (mode === 'USER_AGENT') {
237
- const agent = await this.sdkClient.agentManager.getAgent(
238
- params.address,
239
- params.dex
240
- )
241
- signerAddress = agent.address
242
- }
347
+ async checkSetup(params: GetSetupParams): Promise<ProviderSetup> {
348
+ const { provider, address } = params
243
349
 
244
- return createOrder(this.sdkClient, {
245
- dex: params.dex,
246
- address: params.address,
247
- signerAddress,
248
- clientOrderId: params.clientOrderId,
249
- symbol: params.symbol,
250
- side: params.side,
251
- type: params.type,
252
- size: params.size,
253
- price: params.price,
254
- leverage: params.leverage,
255
- reduceOnly: params.reduceOnly,
256
- timeInForce: params.timeInForce,
257
- expiresAt: params.expiresAt,
258
- takeProfit: params.takeProfit,
259
- stopLoss: params.stopLoss,
260
- })
350
+ // The backend filters already-satisfied setup actions and returns typed
351
+ // data for those still outstanding; each plugin contributes its own
352
+ // signer-bearing request fields.
353
+ const { actions } = await this.buildProviderSetup({ provider, address })
354
+
355
+ return {
356
+ setup: actions,
357
+ isReady: actions.length === 0,
358
+ }
261
359
  }
262
360
 
263
361
  /**
264
- * Build cancel order payloads for signing.
265
- *
266
- * In `USER` mode, `signerAddress` is omitted (backend defaults to `address`).
267
- * In `USER_AGENT` mode, auto-injects the agent address as `signerAddress`.
362
+ * Build the unsigned setup `ActionStep`s still outstanding for an account,
363
+ * ordered by descriptor `sequence`. The backend filters already-satisfied
364
+ * setup; each plugin contributes its own signer-bearing request fields and
365
+ * any local-state params (e.g. Lighter's known pubkey).
268
366
  *
269
- * @param params - Cancel parameters
270
- * @returns Cancel actions with typed data for signing
367
+ * @public
271
368
  */
272
- async buildCancelOrder(
273
- params: CancelOrdersParams
274
- ): Promise<CancelOrderPayloadResponse> {
275
- const mode = this.getSigningMode(params.address, params.dex)
276
- let signerAddress: Address | undefined
277
-
278
- if (mode === 'USER_AGENT') {
279
- const agent = await this.sdkClient.agentManager.getAgent(
280
- params.address,
281
- params.dex
282
- )
283
- signerAddress = agent.address
369
+ async buildProviderSetup(
370
+ params: BuildProviderSetupParams
371
+ ): Promise<CreateActionResponse> {
372
+ const { provider, address } = params
373
+
374
+ const metadata = await this.getProviderMetadata(provider)
375
+ const orderedSetup = [...metadata.setup].sort(
376
+ (a, b) =>
377
+ (a.sequence ?? Number.MAX_SAFE_INTEGER) -
378
+ (b.sequence ?? Number.MAX_SAFE_INTEGER)
379
+ )
380
+
381
+ const plugin = this.sdkClient.getProvider(provider)
382
+ const allActions: ActionStep[] = []
383
+ for (const descriptor of orderedSetup) {
384
+ const action = descriptor.type
385
+ const { signerAddress, params: signerParams } =
386
+ await this.resolveActionRequest(provider, descriptor, address)
387
+ const localParams = plugin?.resolveSetupParams
388
+ ? await plugin.resolveSetupParams(action, address)
389
+ : {}
390
+ const { actions } = await createAction(this.sdkClient, {
391
+ provider,
392
+ address,
393
+ signerAddress,
394
+ action,
395
+ params: {
396
+ ...signerParams,
397
+ ...localParams,
398
+ } as Record<string, never>,
399
+ })
400
+ allActions.push(...actions)
284
401
  }
285
402
 
286
- return cancelOrder(this.sdkClient, {
287
- dex: params.dex,
288
- address: params.address,
289
- signerAddress,
290
- ids: params.ids,
291
- })
403
+ return { actions: allActions }
292
404
  }
293
405
 
294
406
  /**
295
- * Place an order with automatic agent signing.
407
+ * Submit the signed setup steps returned by `checkSetup` (and signed by the
408
+ * caller / `signProviderSetupAction`). Routes the batch on the first step's
409
+ * action and lets the plugin contribute that action's `signerAddress`.
410
+ * Throws on any per-step venue rejection.
296
411
  *
297
- * **Requires USER_AGENT mode.** For USER mode, use `buildOrder()` + `submitSignedOrder()`.
298
- *
299
- * @param params - Order parameters
300
- * @returns Order submission results
301
- * @throws {PerpsError} If not in USER_AGENT mode
412
+ * @public
302
413
  */
303
- async placeOrder(params: PlaceOrderParams): Promise<SubmitOrderResponse> {
304
- const mode = this.getSigningMode(params.address, params.dex)
414
+ async executeProviderSetup(
415
+ params: ExecuteProviderSetupParams
416
+ ): Promise<ExecuteProviderSetupResult> {
417
+ const { provider, address, setup, signedActions } = params
305
418
 
306
- if (mode !== 'USER_AGENT') {
307
- throw new PerpsError(
308
- PerpsErrorCode.ValidationError,
309
- `${PerpsErrorMessage.InvalidSigningMode} placeOrder() requires USER_AGENT mode. Use createOrder() + submitOrder() for USER mode.`
310
- )
419
+ if (signedActions.length === 0) {
420
+ return { results: { results: [] } }
311
421
  }
312
422
 
313
- const agent = await this.sdkClient.agentManager.getAgent(
314
- params.address,
315
- params.dex
423
+ const action = setup[0]?.action ?? signedActions[0].action
424
+ const metadata = await this.getProviderMetadata(provider)
425
+ const descriptor = findActionDescriptor(metadata, action)
426
+ const { signerAddress } = await this.resolveActionRequest(
427
+ provider,
428
+ descriptor,
429
+ address
316
430
  )
317
431
 
318
- // 1. Create order payloads
319
- const { actions } = await createOrder(this.sdkClient, {
320
- dex: params.dex,
321
- address: params.address,
322
- signerAddress: agent.address,
323
- clientOrderId: params.clientOrderId,
324
- symbol: params.symbol,
325
- side: params.side,
326
- type: params.type,
327
- size: params.size,
328
- price: params.price,
329
- leverage: params.leverage,
330
- reduceOnly: params.reduceOnly,
331
- timeInForce: params.timeInForce,
332
- expiresAt: params.expiresAt,
333
- takeProfit: params.takeProfit,
334
- stopLoss: params.stopLoss,
432
+ const results = await executeAction(this.sdkClient, {
433
+ provider,
434
+ address,
435
+ // The submitting account: the plugin-resolved signer (Hyperliquid's
436
+ // agent) when present, else the end-user's address.
437
+ signerAddress: signerAddress ?? address,
438
+ action,
439
+ actions: signedActions,
335
440
  })
336
441
 
337
- // 2. Sign each action with agent key
338
- const signedActions: SignedOrderAction[] = await Promise.all(
339
- actions.map(async (a) => ({
340
- action: a.action,
341
- typedData: a.typedData,
342
- signature: await signTypedData(agent.privateKey, a.typedData),
343
- }))
344
- )
442
+ const failure = results.results.find((r) => !r.success)
443
+ if (failure) {
444
+ throw new PerpsError(PerpsErrorCode.ExchangeRejected, failure.error)
445
+ }
345
446
 
346
- // 3. Submit
347
- return submitOrder(this.sdkClient, {
348
- dex: params.dex,
349
- address: params.address,
350
- signerAddress: agent.address,
351
- actions: signedActions,
352
- })
447
+ return { results }
353
448
  }
354
449
 
355
450
  /**
356
- * Cancel orders with automatic agent signing.
451
+ * Sign and submit one pre-staged setup `ActionStep` end-to-end.
357
452
  *
358
- * **Requires USER_AGENT mode.** For USER mode, use `buildCancelOrder()` + `submitSignedOrder()`.
453
+ * The caller is expected to have already obtained the step from a prior
454
+ * {@link checkSetup} call (typically cached by the widget's react-query) —
455
+ * we do NOT refetch. This avoids the double `createAction` round-trip and
456
+ * keeps the nonce that was allocated at staging time committed all the way
457
+ * through submit. If the cached step has gone stale (Lighter's `/nextNonce`
458
+ * advanced underneath us), `executeProviderSetup` will surface a nonce
459
+ * conflict that the caller invalidates on, refetches `checkSetup`, and
460
+ * retries with a fresh step.
359
461
  *
360
- * @param params - Cancel parameters
361
- * @returns Cancel submission results
362
- * @throws {PerpsError} If not in USER_AGENT mode
462
+ * @throws {PerpsError} When the step's action is not in the provider's
463
+ * `setup` descriptors.
464
+ * @public
363
465
  */
364
- async cancelOrders(params: CancelOrdersParams): Promise<SubmitOrderResponse> {
365
- const mode = this.getSigningMode(params.address, params.dex)
366
-
367
- if (mode !== 'USER_AGENT') {
466
+ async executeProviderSetupAction(params: {
467
+ provider: string
468
+ address: Address
469
+ step: ActionStep
470
+ }): Promise<void> {
471
+ const { provider, address, step } = params
472
+
473
+ const metadata = await this.getProviderMetadata(provider)
474
+ const descriptor = metadata.setup.find((d) => d.type === step.action)
475
+ if (!descriptor) {
368
476
  throw new PerpsError(
369
- PerpsErrorCode.ValidationError,
370
- `${PerpsErrorMessage.InvalidSigningMode} cancelOrders() requires USER_AGENT mode. Use cancelOrder() + submitOrder() for USER mode.`
477
+ PerpsErrorCode.SDKError,
478
+ `Action '${step.action}' is not in '${provider}'.setup`
371
479
  )
372
480
  }
373
481
 
374
- const agent = await this.sdkClient.agentManager.getAgent(
375
- params.address,
376
- params.dex
377
- )
378
-
379
- // 1. Create cancel payloads
380
- const { actions } = await cancelOrder(this.sdkClient, {
381
- dex: params.dex,
382
- address: params.address,
383
- signerAddress: agent.address,
384
- ids: params.ids,
385
- })
386
-
387
- // 2. Sign each action with agent key
388
- const signedActions: SignedOrderAction[] = await Promise.all(
389
- actions.map(async (a) => ({
390
- action: a.action as OrderActionType,
391
- typedData: a.typedData,
392
- signature: await signTypedData(agent.privateKey, a.typedData),
393
- }))
394
- )
395
-
396
- // 3. Submit
397
- return submitOrder(this.sdkClient, {
398
- dex: params.dex,
399
- address: params.address,
400
- signerAddress: agent.address,
401
- actions: signedActions,
482
+ const signed = await this.signProviderSetupAction(provider, address, step)
483
+ await this.executeProviderSetup({
484
+ provider,
485
+ address,
486
+ setup: [step],
487
+ signedActions: [signed],
402
488
  })
403
489
  }
404
490
 
405
491
  /**
406
- * Submit pre-signed order actions.
492
+ * Sign and submit a single provider-option change (a `Provider.options`
493
+ * tunable such as Lighter `ACCOUNT_TYPE` or Hyperliquid `ACCOUNT_MODE`)
494
+ * end-to-end, throwing on a venue rejection.
495
+ *
496
+ * Options are dispatched through the same {@link execute} pipeline as
497
+ * trades, but unlike a trade an option change is a single mandatory action:
498
+ * a per-action `success: false` (returned as a 200 OK) means the user's
499
+ * selection was rejected and must surface, not be silently dropped. This
500
+ * wrapper inspects the result and throws a {@link PerpsError} carrying the
501
+ * venue `error`, giving options the same throw contract that setup has via
502
+ * {@link executeProviderSetupAction}. The only structural difference is that
503
+ * an option carries `params` (the selected value) rather than a pre-staged
504
+ * step.
407
505
  *
408
- * Use this for USER mode when you've already signed the actions with the user's wallet.
409
- * Auto-injects `signerAddress` if not provided (defaults to `address`).
506
+ * `execute` itself is unchanged it still returns results without throwing,
507
+ * which the trade hooks rely on for partial-fill handling.
410
508
  *
411
- * @param params - Signed order parameters
509
+ * @throws {PerpsError} `PerpsErrorCode.ExchangeRejected` carrying the venue
510
+ * error when any returned result has `success: false`; also the errors
511
+ * `execute` itself can throw (unregistered provider, no signer, signing
512
+ * failure).
513
+ * @public
412
514
  */
413
- async submitSignedOrder(
414
- params: SubmitOrderParams
415
- ): Promise<SubmitOrderResponse> {
416
- return submitOrder(this.sdkClient, params)
515
+ async executeProviderOption<T extends ActionType>(params: {
516
+ provider: string
517
+ address: Address
518
+ action: T
519
+ params: ActionParamsMap[T]
520
+ }): Promise<void> {
521
+ const { results } = await this.execute(params)
522
+ const failure = results.find((r) => !r.success)
523
+ if (failure) {
524
+ throw new PerpsError(PerpsErrorCode.ExchangeRejected, failure.error)
525
+ }
417
526
  }
418
527
 
419
528
  /**
420
- * Build a withdrawal payload for the user to sign.
529
+ * Place a market or limit order. Convenience wrapper over {@link execute}
530
+ * with `ActionType.PLACE_ORDER`.
421
531
  *
422
- * Withdrawals are user-signed only agents cannot initiate withdrawals.
423
- * No agent injection is performed regardless of signing mode.
532
+ * @throws {PerpsError} When the provider is unregistered or the action
533
+ * cannot be signed/submitted.
534
+ * @example
535
+ * ```ts
536
+ * await client.placeOrder({
537
+ * provider: 'hyperliquid',
538
+ * address: '0xUser',
539
+ * market: { symbol: 'ETH' },
540
+ * side: 'buy',
541
+ * size: '0.1',
542
+ * })
543
+ * ```
544
+ * @public
545
+ */
546
+ async placeOrder(params: PlaceOrderParams): Promise<ExecuteActionResponse> {
547
+ return this.execute({ ...params, action: ActionType.PLACE_ORDER, params })
548
+ }
549
+
550
+ /**
551
+ * Place a trigger (take-profit / stop-loss) order. Convenience wrapper over
552
+ * {@link execute} with `ActionType.PLACE_TRIGGER_ORDER`.
424
553
  *
425
- * @param params - Withdrawal parameters
426
- * @returns Withdrawal action with typed data for signing
554
+ * @throws {PerpsError} When the provider is unregistered or the action
555
+ * cannot be signed/submitted.
556
+ * @public
427
557
  */
428
- async buildWithdrawal(
429
- params: BuildWithdrawalParams
430
- ): Promise<CreateWithdrawalResponse> {
431
- return createWithdrawal(this.sdkClient, {
432
- dex: params.dex,
433
- address: params.address,
434
- withdrawal: params.withdrawal,
558
+ async placeTriggerOrder(
559
+ params: PlaceTriggerOrderParams
560
+ ): Promise<ExecuteActionResponse> {
561
+ return this.execute({
562
+ ...params,
563
+ action: ActionType.PLACE_TRIGGER_ORDER,
564
+ params,
435
565
  })
436
566
  }
437
567
 
438
568
  /**
439
- * Submit a signed withdrawal.
569
+ * Cancel one or more open orders. Convenience wrapper over {@link execute}
570
+ * with `ActionType.CANCEL_ORDER`.
440
571
  *
441
- * Withdrawals are user-signed only agents cannot initiate withdrawals.
442
- *
443
- * @param params - Signed withdrawal parameters
444
- * @returns Withdrawal result
572
+ * @throws {PerpsError} When the provider is unregistered or the action
573
+ * cannot be signed/submitted.
574
+ * @public
445
575
  */
446
- async submitWithdrawal(
447
- params: SubmitWithdrawalParams
448
- ): Promise<SubmitWithdrawalResponse> {
449
- return submitWithdrawal(this.sdkClient, params)
576
+ async cancelOrders(
577
+ params: CancelOrdersParams
578
+ ): Promise<ExecuteActionResponse> {
579
+ return this.execute({ ...params, action: ActionType.CANCEL_ORDER, params })
450
580
  }
451
581
 
452
582
  /**
453
- * Determine which authorizations (if any) the user needs to sign before trading.
454
- *
455
- * Uses the dex auth provider to determine what authorizations to request,
456
- * then calls buildAuthorization — the backend filters already-valid auths
457
- * and returns only what's needed.
583
+ * Modify one or more open orders. Convenience wrapper over {@link execute}
584
+ * with `ActionType.MODIFY_ORDER`.
458
585
  *
459
- * @param params - Parameters including dex, address, and dex-specific config
460
- * @returns Which authorizations are needed and whether the user is ready to trade
586
+ * @throws {PerpsError} When the provider is unregistered or the action
587
+ * cannot be signed/submitted.
588
+ * @public
461
589
  */
462
- async getRequiredAuthorizations(
463
- params: GetRequiredAuthorizationsParams
464
- ): Promise<RequiredAuthorizationsResult> {
465
- const { dex, address } = params
466
- const mode = this.getSigningMode(address, dex)
467
- const provider = getDexAuthProvider(dex)
468
-
469
- // Ensure agent exists in USER_AGENT mode
470
- let agentAddress: Address | undefined
471
- if (mode === 'USER_AGENT') {
472
- const agent = await this.sdkClient.agentManager.getOrCreateAgent(
473
- address,
474
- dex
475
- )
476
- agentAddress = agent.address
477
- }
590
+ async modifyOrders(
591
+ params: ModifyOrdersParams
592
+ ): Promise<ExecuteActionResponse> {
593
+ return this.execute({ ...params, action: ActionType.MODIFY_ORDER, params })
594
+ }
478
595
 
479
- // Provider declares auth inputs categorized as user/agent
480
- const authInputs = provider.getAuthorizationInputs({
481
- signingMode: mode,
482
- agentAddress,
596
+ /**
597
+ * Add or remove isolated-position margin. Convenience wrapper over
598
+ * {@link execute} with `ActionType.UPDATE_POSITION_MARGIN`.
599
+ *
600
+ * @throws {PerpsError} When the provider is unregistered or the action
601
+ * cannot be signed/submitted.
602
+ * @public
603
+ */
604
+ async updatePositionMargin(params: {
605
+ provider: string
606
+ address: Address
607
+ market: MarketRef
608
+ action: 'add' | 'remove'
609
+ amount: string
610
+ }): Promise<ExecuteActionResponse> {
611
+ return this.execute({
612
+ ...params,
613
+ action: ActionType.UPDATE_POSITION_MARGIN,
614
+ params,
483
615
  })
616
+ }
484
617
 
485
- const allInputs = [...authInputs.user, ...authInputs.agent]
486
- if (allInputs.length === 0) {
487
- return { userAuthorizations: [], agentAuthorizations: [], isReady: true }
488
- }
489
-
490
- // Send ALL to backend — it filters already-satisfied ones and returns typed data
491
- const { actions } = await this.buildAuthorization({
492
- dex,
493
- address,
494
- authorizations: allInputs,
618
+ /**
619
+ * Withdraw funds from the provider account. Convenience wrapper over
620
+ * {@link execute} with `ActionType.WITHDRAWAL`.
621
+ *
622
+ * @throws {PerpsError} When the provider is unregistered or the action
623
+ * cannot be signed/submitted.
624
+ * @public
625
+ */
626
+ async withdraw(params: WithdrawParams): Promise<ExecuteActionResponse> {
627
+ return this.execute({
628
+ provider: params.provider,
629
+ address: params.address,
630
+ action: ActionType.WITHDRAWAL,
631
+ params: params.withdrawal,
495
632
  })
496
-
497
- if (actions.length === 0) {
498
- return { userAuthorizations: [], agentAuthorizations: [], isReady: true }
499
- }
500
-
501
- // Categorize backend results using provider's original key sets
502
- const agentKeys = new Set(authInputs.agent.map((a) => a.key))
503
- const userAuthorizations = actions.filter((a) => !agentKeys.has(a.action))
504
- const agentAuthorizations = actions.filter((a) => agentKeys.has(a.action))
505
-
506
- return {
507
- userAuthorizations,
508
- agentAuthorizations,
509
- isReady: false,
510
- }
511
633
  }
512
634
 
513
635
  /**
514
- * Execute authorizations: submit user-signed actions, then auto-sign and submit
515
- * any agent authorizations.
636
+ * Execute any action through the SDK's signing pipeline: fetch the unsigned
637
+ * steps, delegate signing to the provider plugin (which branches on the
638
+ * descriptor's scheme and signer internally), and submit. Core stays
639
+ * signer-agnostic — the plugin owns WHO signs and HOW.
516
640
  *
517
- * @param params - User-signed actions and the required authorizations result
518
- * @returns Combined results from user and agent submissions
641
+ * @throws {PerpsError} When the action is not declared by the provider,
642
+ * the plugin cannot sign it, or submission fails.
643
+ * @public
519
644
  */
520
- async executeAuthorizations(
521
- params: ExecuteAuthorizationsParams
522
- ): Promise<ExecuteAuthorizationsResult> {
523
- const { dex, address, required, userSignedActions } = params
524
- const mode = this.getSigningMode(address, dex)
525
-
526
- // 1. Submit user-signed actions (if any)
527
- let userResults: AuthorizationsResponse = { results: [] }
528
- if (userSignedActions.length > 0) {
529
- const signerAddress =
530
- mode === 'USER_AGENT'
531
- ? (await this.sdkClient.agentManager.getAgent(address, dex)).address
532
- : address
533
- userResults = await submitAuthorization(this.sdkClient, {
534
- dex,
535
- address,
536
- signerAddress,
537
- actions: userSignedActions,
538
- })
539
-
540
- // Check for failures - return early if any user auth failed
541
- const failed = userResults.results.find((r) => !r.success)
542
- if (failed) {
543
- return { userResults }
544
- }
545
- }
546
-
547
- // 2. Auto-sign and submit agent authorizations (if any)
548
- // Typed data already built by getRequiredAuthorizations — just sign and submit
549
- if (required.agentAuthorizations.length > 0 && mode === 'USER_AGENT') {
550
- const agent = await this.sdkClient.agentManager.getAgent(address, dex)
551
-
552
- const signedAgentActions: SignedAuthorization[] = await Promise.all(
553
- required.agentAuthorizations.map(async (action) => ({
554
- action: action.action,
555
- typedData: action.typedData,
556
- signature: await signTypedData(agent.privateKey, action.typedData),
557
- }))
558
- )
559
-
560
- const agentResults = await submitAuthorization(this.sdkClient, {
561
- dex,
562
- address,
563
- signerAddress: agent.address,
564
- actions: signedAgentActions,
565
- })
645
+ async execute<T extends ActionType>(params: {
646
+ provider: string
647
+ address: Address
648
+ action: T
649
+ params: ActionParamsMap[T]
650
+ }): Promise<ExecuteActionResponse> {
651
+ const { provider, address, action } = params
652
+ const metadata = await this.getProviderMetadata(provider)
653
+ const descriptor = findActionDescriptor(metadata, action)
654
+
655
+ const { signerAddress, params: signerParams } =
656
+ await this.resolveActionRequest(provider, descriptor, address)
657
+
658
+ const { actions } = await createAction(this.sdkClient, {
659
+ provider,
660
+ address,
661
+ signerAddress,
662
+ action,
663
+ params: {
664
+ ...params.params,
665
+ ...signerParams,
666
+ } as ActionParamsMap[T],
667
+ })
566
668
 
567
- return { userResults, agentResults }
568
- }
669
+ const signedActions = await this.delegateSignActions(
670
+ provider,
671
+ address,
672
+ descriptor,
673
+ actions
674
+ )
569
675
 
570
- return { userResults }
676
+ return executeAction(this.sdkClient, {
677
+ provider,
678
+ address,
679
+ // The submitting account: the plugin-resolved signer (Hyperliquid's
680
+ // agent) when present, else the end-user's address.
681
+ signerAddress: signerAddress ?? address,
682
+ action,
683
+ actions: signedActions,
684
+ })
571
685
  }
572
686
  }