@lifi/perps-sdk 0.2.0-alpha.0 → 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 (908) hide show
  1. package/README.md +138 -24
  2. package/dist/cjs/client/PerpsClient.d.ts +27 -48
  3. package/dist/cjs/client/PerpsClient.d.ts.map +1 -1
  4. package/dist/cjs/client/PerpsClient.js +119 -578
  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 -38
  11. package/dist/cjs/client/createPerpsClient.d.ts.map +1 -1
  12. package/dist/cjs/client/createPerpsClient.js +25 -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.map +1 -1
  19. package/dist/cjs/errors/PerpsError.js.map +1 -1
  20. package/dist/cjs/errors/constants.d.ts +2 -2
  21. package/dist/cjs/errors/constants.d.ts.map +1 -1
  22. package/dist/cjs/errors/constants.js +2 -2
  23. package/dist/cjs/errors/constants.js.map +1 -1
  24. package/dist/cjs/index.d.ts +41 -23
  25. package/dist/cjs/index.d.ts.map +1 -1
  26. package/dist/cjs/index.js +73 -41
  27. package/dist/cjs/index.js.map +1 -1
  28. package/dist/cjs/registry/assetRegistry.d.ts +11 -0
  29. package/dist/cjs/registry/assetRegistry.d.ts.map +1 -0
  30. package/dist/cjs/registry/assetRegistry.js +39 -0
  31. package/dist/cjs/registry/assetRegistry.js.map +1 -0
  32. package/dist/cjs/registry/marketRegistry.d.ts +13 -0
  33. package/dist/cjs/registry/marketRegistry.d.ts.map +1 -0
  34. package/dist/cjs/registry/marketRegistry.js +58 -0
  35. package/dist/cjs/registry/marketRegistry.js.map +1 -0
  36. package/dist/cjs/registry/referenceDataRegistry.d.ts +20 -0
  37. package/dist/cjs/registry/referenceDataRegistry.d.ts.map +1 -0
  38. package/dist/cjs/registry/referenceDataRegistry.js +59 -0
  39. package/dist/cjs/registry/referenceDataRegistry.js.map +1 -0
  40. package/dist/cjs/services/createAction.d.ts +4 -2
  41. package/dist/cjs/services/createAction.d.ts.map +1 -1
  42. package/dist/cjs/services/createAction.js +1 -1
  43. package/dist/cjs/services/createAction.js.map +1 -1
  44. package/dist/cjs/services/executeAction.d.ts +4 -2
  45. package/dist/cjs/services/executeAction.d.ts.map +1 -1
  46. package/dist/cjs/services/executeAction.js +2 -1
  47. package/dist/cjs/services/executeAction.js.map +1 -1
  48. package/dist/cjs/services/getAccount.d.ts +4 -2
  49. package/dist/cjs/services/getAccount.d.ts.map +1 -1
  50. package/dist/cjs/services/getAccount.js +2 -6
  51. package/dist/cjs/services/getAccount.js.map +1 -1
  52. package/dist/cjs/services/getActivity.d.ts +4 -2
  53. package/dist/cjs/services/getActivity.d.ts.map +1 -1
  54. package/dist/cjs/services/getActivity.js +4 -10
  55. package/dist/cjs/services/getActivity.js.map +1 -1
  56. package/dist/cjs/services/getAssets.d.ts +2 -1
  57. package/dist/cjs/services/getAssets.d.ts.map +1 -1
  58. package/dist/cjs/services/getAssets.js +1 -1
  59. package/dist/cjs/services/getAssets.js.map +1 -1
  60. package/dist/cjs/services/getFills.d.ts +4 -2
  61. package/dist/cjs/services/getFills.d.ts.map +1 -1
  62. package/dist/cjs/services/getFills.js +3 -5
  63. package/dist/cjs/services/getFills.js.map +1 -1
  64. package/dist/cjs/services/getMarket.d.ts +9 -0
  65. package/dist/cjs/services/getMarket.d.ts.map +1 -0
  66. package/dist/cjs/services/getMarket.js +13 -0
  67. package/dist/cjs/services/getMarket.js.map +1 -0
  68. package/dist/cjs/services/getMarkets.d.ts +9 -0
  69. package/dist/cjs/services/getMarkets.d.ts.map +1 -0
  70. package/dist/cjs/services/{getAsset.js → getMarkets.js} +6 -5
  71. package/dist/cjs/services/getMarkets.js.map +1 -0
  72. package/dist/cjs/services/getMeta.d.ts +5 -0
  73. package/dist/cjs/services/getMeta.d.ts.map +1 -0
  74. package/dist/cjs/services/getMeta.js +8 -0
  75. package/dist/cjs/services/getMeta.js.map +1 -0
  76. package/dist/cjs/services/getOhlcv.d.ts +3 -2
  77. package/dist/cjs/services/getOhlcv.d.ts.map +1 -1
  78. package/dist/cjs/services/getOhlcv.js +3 -2
  79. package/dist/cjs/services/getOhlcv.js.map +1 -1
  80. package/dist/cjs/services/getOrder.d.ts +4 -2
  81. package/dist/cjs/services/getOrder.d.ts.map +1 -1
  82. package/dist/cjs/services/getOrder.js +2 -6
  83. package/dist/cjs/services/getOrder.js.map +1 -1
  84. package/dist/cjs/services/getOrderbook.d.ts +3 -2
  85. package/dist/cjs/services/getOrderbook.d.ts.map +1 -1
  86. package/dist/cjs/services/getOrderbook.js +3 -2
  87. package/dist/cjs/services/getOrderbook.js.map +1 -1
  88. package/dist/cjs/services/getOrders.d.ts +5 -3
  89. package/dist/cjs/services/getOrders.d.ts.map +1 -1
  90. package/dist/cjs/services/getOrders.js +6 -8
  91. package/dist/cjs/services/getOrders.js.map +1 -1
  92. package/dist/cjs/services/getPositions.d.ts +5 -3
  93. package/dist/cjs/services/getPositions.d.ts.map +1 -1
  94. package/dist/cjs/services/getPositions.js +6 -8
  95. package/dist/cjs/services/getPositions.js.map +1 -1
  96. package/dist/cjs/services/getPrices.d.ts +3 -2
  97. package/dist/cjs/services/getPrices.d.ts.map +1 -1
  98. package/dist/cjs/services/getPrices.js +2 -2
  99. package/dist/cjs/services/getPrices.js.map +1 -1
  100. package/dist/cjs/services/getProviders.d.ts +2 -1
  101. package/dist/cjs/services/getProviders.d.ts.map +1 -1
  102. package/dist/cjs/services/getProviders.js +1 -1
  103. package/dist/cjs/services/getProviders.js.map +1 -1
  104. package/dist/cjs/services/getQuote.d.ts +12 -0
  105. package/dist/cjs/services/getQuote.d.ts.map +1 -0
  106. package/dist/cjs/services/getQuote.js +13 -0
  107. package/dist/cjs/services/getQuote.js.map +1 -0
  108. package/dist/cjs/services/getTermsAcceptance.d.ts +6 -0
  109. package/dist/cjs/services/getTermsAcceptance.d.ts.map +1 -0
  110. package/dist/cjs/services/getTermsAcceptance.js +9 -0
  111. package/dist/cjs/services/getTermsAcceptance.js.map +1 -0
  112. package/dist/cjs/services/resolveQuote.d.ts +7 -0
  113. package/dist/cjs/services/resolveQuote.d.ts.map +1 -0
  114. package/dist/cjs/services/resolveQuote.js +50 -0
  115. package/dist/cjs/services/resolveQuote.js.map +1 -0
  116. package/dist/cjs/services/resolveSubscribeQuote.d.ts +6 -0
  117. package/dist/cjs/services/resolveSubscribeQuote.d.ts.map +1 -0
  118. package/dist/cjs/services/resolveSubscribeQuote.js +65 -0
  119. package/dist/cjs/services/resolveSubscribeQuote.js.map +1 -0
  120. package/dist/cjs/storage/parseStoredRecord.d.ts +4 -0
  121. package/dist/cjs/storage/parseStoredRecord.d.ts.map +1 -0
  122. package/dist/cjs/storage/parseStoredRecord.js +26 -0
  123. package/dist/cjs/storage/parseStoredRecord.js.map +1 -0
  124. package/dist/cjs/storage/storage.d.ts.map +1 -0
  125. package/dist/cjs/storage/storage.js.map +1 -0
  126. package/dist/cjs/{agent → storage}/types.d.ts +0 -5
  127. package/dist/cjs/storage/types.d.ts.map +1 -0
  128. package/dist/cjs/{agent → storage}/types.js.map +1 -1
  129. package/dist/cjs/transport/fetchWithRetry.d.ts +8 -0
  130. package/dist/cjs/transport/fetchWithRetry.d.ts.map +1 -0
  131. package/dist/cjs/transport/fetchWithRetry.js +81 -0
  132. package/dist/cjs/transport/fetchWithRetry.js.map +1 -0
  133. package/dist/cjs/{utils → transport}/request.d.ts +3 -2
  134. package/dist/cjs/transport/request.d.ts.map +1 -0
  135. package/dist/cjs/{utils → transport}/request.js +14 -14
  136. package/dist/cjs/transport/request.js.map +1 -0
  137. package/dist/cjs/transport/retryPolicy.d.ts +37 -0
  138. package/dist/cjs/transport/retryPolicy.d.ts.map +1 -0
  139. package/dist/cjs/transport/retryPolicy.js +79 -0
  140. package/dist/cjs/transport/retryPolicy.js.map +1 -0
  141. package/dist/cjs/types/api.d.ts +85 -0
  142. package/dist/cjs/types/api.d.ts.map +1 -0
  143. package/dist/cjs/{realtime/lighter/types.js → types/api.js} +1 -1
  144. package/dist/cjs/types/api.js.map +1 -0
  145. package/dist/cjs/types/config.d.ts +26 -0
  146. package/dist/cjs/types/config.d.ts.map +1 -0
  147. package/dist/cjs/{realtime/types.js → types/config.js} +1 -1
  148. package/dist/cjs/types/config.js.map +1 -0
  149. package/dist/cjs/types/provider.d.ts +84 -0
  150. package/dist/cjs/types/provider.d.ts.map +1 -0
  151. package/dist/cjs/types/provider.js +3 -0
  152. package/dist/cjs/types/provider.js.map +1 -0
  153. package/dist/cjs/utils/accountSummary.d.ts +2 -8
  154. package/dist/cjs/utils/accountSummary.d.ts.map +1 -1
  155. package/dist/cjs/utils/accountSummary.js +12 -70
  156. package/dist/cjs/utils/accountSummary.js.map +1 -1
  157. package/dist/cjs/utils/assertNever.d.ts.map +1 -1
  158. package/dist/cjs/utils/assertNever.js.map +1 -1
  159. package/dist/cjs/utils/calculations.d.ts +36 -0
  160. package/dist/cjs/utils/calculations.d.ts.map +1 -1
  161. package/dist/cjs/utils/calculations.js +77 -0
  162. package/dist/cjs/utils/calculations.js.map +1 -1
  163. package/dist/cjs/utils/depositChain.d.ts +6 -0
  164. package/dist/cjs/utils/depositChain.d.ts.map +1 -0
  165. package/dist/cjs/utils/depositChain.js +13 -0
  166. package/dist/cjs/utils/depositChain.js.map +1 -0
  167. package/dist/cjs/utils/explorer.d.ts +9 -0
  168. package/dist/cjs/utils/explorer.d.ts.map +1 -0
  169. package/dist/cjs/utils/explorer.js +23 -0
  170. package/dist/cjs/utils/explorer.js.map +1 -0
  171. package/dist/cjs/utils/fillClassification.d.ts +3 -0
  172. package/dist/cjs/utils/fillClassification.d.ts.map +1 -0
  173. package/dist/cjs/utils/fillClassification.js +37 -0
  174. package/dist/cjs/utils/fillClassification.js.map +1 -0
  175. package/dist/cjs/utils/format.d.ts +13 -0
  176. package/dist/cjs/utils/format.d.ts.map +1 -0
  177. package/dist/cjs/utils/format.js +117 -0
  178. package/dist/cjs/utils/format.js.map +1 -0
  179. package/dist/cjs/utils/orderClassification.d.ts +3 -1
  180. package/dist/cjs/utils/orderClassification.d.ts.map +1 -1
  181. package/dist/cjs/utils/orderClassification.js +11 -1
  182. package/dist/cjs/utils/orderClassification.js.map +1 -1
  183. package/dist/cjs/utils/orderMath.d.ts +1 -1
  184. package/dist/cjs/utils/orderMath.d.ts.map +1 -1
  185. package/dist/cjs/utils/orderMath.js +2 -2
  186. package/dist/cjs/utils/orderMath.js.map +1 -1
  187. package/dist/cjs/utils/parse.d.ts.map +1 -1
  188. package/dist/cjs/utils/parse.js.map +1 -1
  189. package/dist/cjs/utils/positionMath.d.ts +6 -0
  190. package/dist/cjs/utils/positionMath.d.ts.map +1 -1
  191. package/dist/cjs/utils/positionMath.js +14 -0
  192. package/dist/cjs/utils/positionMath.js.map +1 -1
  193. package/dist/cjs/utils/signTypedData.d.ts +3 -3
  194. package/dist/cjs/utils/signTypedData.d.ts.map +1 -1
  195. package/dist/cjs/utils/signTypedData.js +3 -2
  196. package/dist/cjs/utils/signTypedData.js.map +1 -1
  197. package/dist/cjs/utils/sleep.d.ts.map +1 -1
  198. package/dist/cjs/utils/sleep.js.map +1 -1
  199. package/dist/cjs/utils/units.d.ts.map +1 -1
  200. package/dist/cjs/utils/units.js.map +1 -1
  201. package/dist/cjs/utils/validation.d.ts.map +1 -1
  202. package/dist/cjs/utils/validation.js.map +1 -1
  203. package/dist/cjs/version.d.ts +1 -1
  204. package/dist/cjs/version.d.ts.map +1 -1
  205. package/dist/cjs/version.js +1 -1
  206. package/dist/cjs/version.js.map +1 -1
  207. package/dist/cjs/websocket/PerpsWsClient.d.ts +27 -0
  208. package/dist/cjs/websocket/PerpsWsClient.d.ts.map +1 -0
  209. package/dist/cjs/websocket/PerpsWsClient.js +84 -0
  210. package/dist/cjs/websocket/PerpsWsClient.js.map +1 -0
  211. package/dist/{types/realtime → cjs/websocket}/ReconnectingWebSocket.d.ts +23 -7
  212. package/dist/cjs/websocket/ReconnectingWebSocket.d.ts.map +1 -0
  213. package/dist/cjs/websocket/ReconnectingWebSocket.js +213 -0
  214. package/dist/cjs/websocket/ReconnectingWebSocket.js.map +1 -0
  215. package/dist/cjs/websocket/WsProviderBase.d.ts +31 -0
  216. package/dist/cjs/websocket/WsProviderBase.d.ts.map +1 -0
  217. package/dist/cjs/websocket/WsProviderBase.js +197 -0
  218. package/dist/cjs/websocket/WsProviderBase.js.map +1 -0
  219. package/dist/cjs/websocket/cachePromise.d.ts +2 -0
  220. package/dist/cjs/websocket/cachePromise.d.ts.map +1 -0
  221. package/dist/cjs/websocket/cachePromise.js +18 -0
  222. package/dist/cjs/websocket/cachePromise.js.map +1 -0
  223. package/dist/cjs/websocket/types.d.ts +15 -0
  224. package/dist/cjs/websocket/types.d.ts.map +1 -0
  225. package/dist/cjs/{realtime → websocket}/types.js.map +1 -1
  226. package/dist/cjs/websocket/wsLog.d.ts +10 -0
  227. package/dist/cjs/websocket/wsLog.d.ts.map +1 -0
  228. package/dist/cjs/websocket/wsLog.js +31 -0
  229. package/dist/cjs/websocket/wsLog.js.map +1 -0
  230. package/dist/esm/client/PerpsClient.d.ts +200 -195
  231. package/dist/esm/client/PerpsClient.d.ts.map +1 -1
  232. package/dist/esm/client/PerpsClient.js +305 -794
  233. package/dist/esm/client/PerpsClient.js.map +1 -1
  234. package/dist/esm/client/bindProvider.d.ts +13 -0
  235. package/dist/esm/client/bindProvider.d.ts.map +1 -0
  236. package/dist/esm/client/bindProvider.js +16 -0
  237. package/dist/esm/client/bindProvider.js.map +1 -0
  238. package/dist/esm/client/createPerpsClient.d.ts +34 -53
  239. package/dist/esm/client/createPerpsClient.d.ts.map +1 -1
  240. package/dist/esm/client/createPerpsClient.js +51 -8
  241. package/dist/esm/client/createPerpsClient.js.map +1 -1
  242. package/dist/esm/client/requireProvider.d.ts +12 -0
  243. package/dist/esm/client/requireProvider.d.ts.map +1 -0
  244. package/dist/esm/client/requireProvider.js +22 -0
  245. package/dist/esm/client/requireProvider.js.map +1 -0
  246. package/dist/esm/errors/PerpsError.d.ts +8 -0
  247. package/dist/esm/errors/PerpsError.d.ts.map +1 -1
  248. package/dist/esm/errors/PerpsError.js +8 -0
  249. package/dist/esm/errors/PerpsError.js.map +1 -1
  250. package/dist/esm/errors/constants.d.ts +8 -2
  251. package/dist/esm/errors/constants.d.ts.map +1 -1
  252. package/dist/esm/errors/constants.js +8 -2
  253. package/dist/esm/errors/constants.js.map +1 -1
  254. package/dist/esm/index.d.ts +49 -23
  255. package/dist/esm/index.d.ts.map +1 -1
  256. package/dist/esm/index.js +38 -23
  257. package/dist/esm/index.js.map +1 -1
  258. package/dist/esm/registry/assetRegistry.d.ts +25 -0
  259. package/dist/esm/registry/assetRegistry.d.ts.map +1 -0
  260. package/dist/esm/registry/assetRegistry.js +48 -0
  261. package/dist/esm/registry/assetRegistry.js.map +1 -0
  262. package/dist/esm/registry/marketRegistry.d.ts +42 -0
  263. package/dist/esm/registry/marketRegistry.d.ts.map +1 -0
  264. package/dist/esm/registry/marketRegistry.js +81 -0
  265. package/dist/esm/registry/marketRegistry.js.map +1 -0
  266. package/dist/esm/registry/referenceDataRegistry.d.ts +44 -0
  267. package/dist/esm/registry/referenceDataRegistry.d.ts.map +1 -0
  268. package/dist/esm/registry/referenceDataRegistry.js +79 -0
  269. package/dist/esm/registry/referenceDataRegistry.js.map +1 -0
  270. package/dist/esm/services/createAction.d.ts +17 -2
  271. package/dist/esm/services/createAction.d.ts.map +1 -1
  272. package/dist/esm/services/createAction.js +9 -1
  273. package/dist/esm/services/createAction.js.map +1 -1
  274. package/dist/esm/services/executeAction.d.ts +17 -2
  275. package/dist/esm/services/executeAction.d.ts.map +1 -1
  276. package/dist/esm/services/executeAction.js +13 -1
  277. package/dist/esm/services/executeAction.js.map +1 -1
  278. package/dist/esm/services/getAccount.d.ts +19 -16
  279. package/dist/esm/services/getAccount.d.ts.map +1 -1
  280. package/dist/esm/services/getAccount.js +12 -18
  281. package/dist/esm/services/getAccount.js.map +1 -1
  282. package/dist/esm/services/getActivity.d.ts +15 -25
  283. package/dist/esm/services/getActivity.d.ts.map +1 -1
  284. package/dist/esm/services/getActivity.js +10 -28
  285. package/dist/esm/services/getActivity.js.map +1 -1
  286. package/dist/esm/services/getAssets.d.ts +14 -5
  287. package/dist/esm/services/getAssets.d.ts.map +1 -1
  288. package/dist/esm/services/getAssets.js +8 -4
  289. package/dist/esm/services/getAssets.js.map +1 -1
  290. package/dist/esm/services/getFills.d.ts +18 -29
  291. package/dist/esm/services/getFills.d.ts.map +1 -1
  292. package/dist/esm/services/getFills.js +10 -26
  293. package/dist/esm/services/getFills.js.map +1 -1
  294. package/dist/esm/services/getMarket.d.ts +34 -0
  295. package/dist/esm/services/getMarket.d.ts.map +1 -0
  296. package/dist/esm/services/getMarket.js +25 -0
  297. package/dist/esm/services/getMarket.js.map +1 -0
  298. package/dist/esm/services/getMarkets.d.ts +28 -0
  299. package/dist/esm/services/getMarkets.d.ts.map +1 -0
  300. package/dist/esm/services/getMarkets.js +22 -0
  301. package/dist/esm/services/getMarkets.js.map +1 -0
  302. package/dist/esm/services/getMeta.d.ts +19 -0
  303. package/dist/esm/services/getMeta.d.ts.map +1 -0
  304. package/dist/esm/services/getMeta.js +19 -0
  305. package/dist/esm/services/getMeta.js.map +1 -0
  306. package/dist/esm/services/getOhlcv.d.ts +15 -19
  307. package/dist/esm/services/getOhlcv.d.ts.map +1 -1
  308. package/dist/esm/services/getOhlcv.js +7 -13
  309. package/dist/esm/services/getOhlcv.js.map +1 -1
  310. package/dist/esm/services/getOrder.d.ts +16 -16
  311. package/dist/esm/services/getOrder.d.ts.map +1 -1
  312. package/dist/esm/services/getOrder.js +9 -17
  313. package/dist/esm/services/getOrder.js.map +1 -1
  314. package/dist/esm/services/getOrderbook.d.ts +13 -23
  315. package/dist/esm/services/getOrderbook.d.ts.map +1 -1
  316. package/dist/esm/services/getOrderbook.js +7 -21
  317. package/dist/esm/services/getOrderbook.js.map +1 -1
  318. package/dist/esm/services/getOrders.d.ts +17 -9
  319. package/dist/esm/services/getOrders.d.ts.map +1 -1
  320. package/dist/esm/services/getOrders.js +12 -9
  321. package/dist/esm/services/getOrders.js.map +1 -1
  322. package/dist/esm/services/getPositions.d.ts +17 -9
  323. package/dist/esm/services/getPositions.d.ts.map +1 -1
  324. package/dist/esm/services/getPositions.js +12 -9
  325. package/dist/esm/services/getPositions.js.map +1 -1
  326. package/dist/esm/services/getPrices.d.ts +12 -24
  327. package/dist/esm/services/getPrices.d.ts.map +1 -1
  328. package/dist/esm/services/getPrices.js +5 -22
  329. package/dist/esm/services/getPrices.js.map +1 -1
  330. package/dist/esm/services/getProviders.d.ts +3 -3
  331. package/dist/esm/services/getProviders.d.ts.map +1 -1
  332. package/dist/esm/services/getProviders.js +2 -3
  333. package/dist/esm/services/getProviders.js.map +1 -1
  334. package/dist/esm/services/getQuote.d.ts +42 -0
  335. package/dist/esm/services/getQuote.d.ts.map +1 -0
  336. package/dist/esm/services/getQuote.js +33 -0
  337. package/dist/esm/services/getQuote.js.map +1 -0
  338. package/dist/esm/services/getTermsAcceptance.d.ts +24 -0
  339. package/dist/esm/services/getTermsAcceptance.d.ts.map +1 -0
  340. package/dist/esm/services/getTermsAcceptance.js +24 -0
  341. package/dist/esm/services/getTermsAcceptance.js.map +1 -0
  342. package/dist/esm/services/resolveQuote.d.ts +36 -0
  343. package/dist/esm/services/resolveQuote.d.ts.map +1 -0
  344. package/dist/esm/services/resolveQuote.js +74 -0
  345. package/dist/esm/services/resolveQuote.js.map +1 -0
  346. package/dist/esm/services/resolveSubscribeQuote.d.ts +31 -0
  347. package/dist/esm/services/resolveSubscribeQuote.d.ts.map +1 -0
  348. package/dist/esm/services/resolveSubscribeQuote.js +86 -0
  349. package/dist/esm/services/resolveSubscribeQuote.js.map +1 -0
  350. package/dist/esm/storage/parseStoredRecord.d.ts +29 -0
  351. package/dist/esm/storage/parseStoredRecord.d.ts.map +1 -0
  352. package/dist/esm/storage/parseStoredRecord.js +47 -0
  353. package/dist/esm/storage/parseStoredRecord.js.map +1 -0
  354. package/dist/{types/agent → esm/storage}/storage.d.ts +6 -3
  355. package/dist/esm/storage/storage.d.ts.map +1 -0
  356. package/dist/esm/{agent → storage}/storage.js +6 -4
  357. package/dist/esm/storage/storage.js.map +1 -0
  358. package/dist/esm/storage/types.d.ts +14 -0
  359. package/dist/esm/storage/types.d.ts.map +1 -0
  360. package/dist/esm/{agent → storage}/types.js.map +1 -1
  361. package/dist/esm/transport/fetchWithRetry.d.ts +22 -0
  362. package/dist/esm/transport/fetchWithRetry.d.ts.map +1 -0
  363. package/dist/esm/transport/fetchWithRetry.js +87 -0
  364. package/dist/esm/transport/fetchWithRetry.js.map +1 -0
  365. package/dist/esm/transport/request.d.ts +25 -0
  366. package/dist/esm/transport/request.d.ts.map +1 -0
  367. package/dist/esm/{utils → transport}/request.js +19 -31
  368. package/dist/esm/transport/request.js.map +1 -0
  369. package/dist/esm/transport/retryPolicy.d.ts +106 -0
  370. package/dist/esm/transport/retryPolicy.d.ts.map +1 -0
  371. package/dist/esm/transport/retryPolicy.js +99 -0
  372. package/dist/esm/transport/retryPolicy.js.map +1 -0
  373. package/dist/esm/types/api.d.ts +214 -0
  374. package/dist/esm/types/api.d.ts.map +1 -0
  375. package/dist/esm/types/api.js +2 -0
  376. package/dist/esm/types/api.js.map +1 -0
  377. package/dist/esm/types/config.d.ts +70 -0
  378. package/dist/esm/types/config.d.ts.map +1 -0
  379. package/dist/esm/types/config.js +2 -0
  380. package/dist/esm/types/config.js.map +1 -0
  381. package/dist/esm/types/provider.d.ts +330 -0
  382. package/dist/esm/types/provider.d.ts.map +1 -0
  383. package/dist/esm/types/provider.js +2 -0
  384. package/dist/esm/types/provider.js.map +1 -0
  385. package/dist/esm/utils/accountSummary.d.ts +12 -12
  386. package/dist/esm/utils/accountSummary.d.ts.map +1 -1
  387. package/dist/esm/utils/accountSummary.js +18 -83
  388. package/dist/esm/utils/accountSummary.js.map +1 -1
  389. package/dist/esm/utils/assertNever.d.ts +1 -0
  390. package/dist/esm/utils/assertNever.d.ts.map +1 -1
  391. package/dist/esm/utils/assertNever.js +1 -0
  392. package/dist/esm/utils/assertNever.js.map +1 -1
  393. package/dist/esm/utils/calculations.d.ts +116 -0
  394. package/dist/esm/utils/calculations.d.ts.map +1 -1
  395. package/dist/esm/utils/calculations.js +140 -3
  396. package/dist/esm/utils/calculations.js.map +1 -1
  397. package/dist/esm/utils/depositChain.d.ts +25 -0
  398. package/dist/esm/utils/depositChain.d.ts.map +1 -0
  399. package/dist/esm/utils/depositChain.js +23 -0
  400. package/dist/esm/utils/depositChain.js.map +1 -0
  401. package/dist/esm/utils/explorer.d.ts +33 -0
  402. package/dist/esm/utils/explorer.d.ts.map +1 -0
  403. package/dist/esm/utils/explorer.js +38 -0
  404. package/dist/esm/utils/explorer.js.map +1 -0
  405. package/dist/esm/utils/fillClassification.d.ts +13 -0
  406. package/dist/esm/utils/fillClassification.d.ts.map +1 -0
  407. package/dist/esm/utils/fillClassification.js +44 -0
  408. package/dist/esm/utils/fillClassification.js.map +1 -0
  409. package/dist/esm/utils/format.d.ts +66 -0
  410. package/dist/esm/utils/format.d.ts.map +1 -0
  411. package/dist/esm/utils/format.js +171 -0
  412. package/dist/esm/utils/format.js.map +1 -0
  413. package/dist/esm/utils/orderClassification.d.ts +19 -1
  414. package/dist/esm/utils/orderClassification.d.ts.map +1 -1
  415. package/dist/esm/utils/orderClassification.js +26 -1
  416. package/dist/esm/utils/orderClassification.js.map +1 -1
  417. package/dist/esm/utils/orderMath.d.ts +8 -4
  418. package/dist/esm/utils/orderMath.d.ts.map +1 -1
  419. package/dist/esm/utils/orderMath.js +9 -5
  420. package/dist/esm/utils/orderMath.js.map +1 -1
  421. package/dist/esm/utils/parse.d.ts +8 -5
  422. package/dist/esm/utils/parse.d.ts.map +1 -1
  423. package/dist/esm/utils/parse.js +8 -6
  424. package/dist/esm/utils/parse.js.map +1 -1
  425. package/dist/esm/utils/positionMath.d.ts +29 -0
  426. package/dist/esm/utils/positionMath.d.ts.map +1 -1
  427. package/dist/esm/utils/positionMath.js +36 -0
  428. package/dist/esm/utils/positionMath.js.map +1 -1
  429. package/dist/esm/utils/signTypedData.d.ts +9 -4
  430. package/dist/esm/utils/signTypedData.d.ts.map +1 -1
  431. package/dist/esm/utils/signTypedData.js +9 -3
  432. package/dist/esm/utils/signTypedData.js.map +1 -1
  433. package/dist/esm/utils/sleep.d.ts +5 -0
  434. package/dist/esm/utils/sleep.d.ts.map +1 -1
  435. package/dist/esm/utils/sleep.js +5 -0
  436. package/dist/esm/utils/sleep.js.map +1 -1
  437. package/dist/esm/utils/units.d.ts +8 -1
  438. package/dist/esm/utils/units.d.ts.map +1 -1
  439. package/dist/esm/utils/units.js +8 -1
  440. package/dist/esm/utils/units.js.map +1 -1
  441. package/dist/esm/utils/validation.d.ts +4 -1
  442. package/dist/esm/utils/validation.d.ts.map +1 -1
  443. package/dist/esm/utils/validation.js +4 -1
  444. package/dist/esm/utils/validation.js.map +1 -1
  445. package/dist/esm/version.d.ts +1 -1
  446. package/dist/esm/version.d.ts.map +1 -1
  447. package/dist/esm/version.js +1 -1
  448. package/dist/esm/version.js.map +1 -1
  449. package/dist/esm/websocket/PerpsWsClient.d.ts +100 -0
  450. package/dist/esm/websocket/PerpsWsClient.d.ts.map +1 -0
  451. package/dist/esm/websocket/PerpsWsClient.js +121 -0
  452. package/dist/esm/websocket/PerpsWsClient.js.map +1 -0
  453. package/dist/esm/websocket/ReconnectingWebSocket.d.ts +130 -0
  454. package/dist/esm/websocket/ReconnectingWebSocket.d.ts.map +1 -0
  455. package/dist/esm/websocket/ReconnectingWebSocket.js +288 -0
  456. package/dist/esm/websocket/ReconnectingWebSocket.js.map +1 -0
  457. package/dist/esm/websocket/WsProviderBase.d.ts +89 -0
  458. package/dist/esm/websocket/WsProviderBase.d.ts.map +1 -0
  459. package/dist/esm/websocket/WsProviderBase.js +246 -0
  460. package/dist/esm/websocket/WsProviderBase.js.map +1 -0
  461. package/dist/esm/websocket/cachePromise.d.ts +14 -0
  462. package/dist/esm/websocket/cachePromise.d.ts.map +1 -0
  463. package/dist/esm/websocket/cachePromise.js +27 -0
  464. package/dist/esm/websocket/cachePromise.js.map +1 -0
  465. package/dist/esm/websocket/types.d.ts +60 -0
  466. package/dist/esm/websocket/types.d.ts.map +1 -0
  467. package/dist/esm/{realtime → websocket}/types.js.map +1 -1
  468. package/dist/esm/websocket/wsLog.d.ts +50 -0
  469. package/dist/esm/websocket/wsLog.d.ts.map +1 -0
  470. package/dist/esm/websocket/wsLog.js +68 -0
  471. package/dist/esm/websocket/wsLog.js.map +1 -0
  472. package/dist/types/client/PerpsClient.d.ts +200 -195
  473. package/dist/types/client/PerpsClient.d.ts.map +1 -1
  474. package/dist/types/client/bindProvider.d.ts +13 -0
  475. package/dist/types/client/bindProvider.d.ts.map +1 -0
  476. package/dist/types/client/createPerpsClient.d.ts +34 -53
  477. package/dist/types/client/createPerpsClient.d.ts.map +1 -1
  478. package/dist/types/client/requireProvider.d.ts +12 -0
  479. package/dist/types/client/requireProvider.d.ts.map +1 -0
  480. package/dist/types/errors/PerpsError.d.ts +8 -0
  481. package/dist/types/errors/PerpsError.d.ts.map +1 -1
  482. package/dist/types/errors/constants.d.ts +8 -2
  483. package/dist/types/errors/constants.d.ts.map +1 -1
  484. package/dist/types/index.d.ts +49 -23
  485. package/dist/types/index.d.ts.map +1 -1
  486. package/dist/types/registry/assetRegistry.d.ts +25 -0
  487. package/dist/types/registry/assetRegistry.d.ts.map +1 -0
  488. package/dist/types/registry/marketRegistry.d.ts +42 -0
  489. package/dist/types/registry/marketRegistry.d.ts.map +1 -0
  490. package/dist/types/registry/referenceDataRegistry.d.ts +44 -0
  491. package/dist/types/registry/referenceDataRegistry.d.ts.map +1 -0
  492. package/dist/types/services/createAction.d.ts +17 -2
  493. package/dist/types/services/createAction.d.ts.map +1 -1
  494. package/dist/types/services/executeAction.d.ts +17 -2
  495. package/dist/types/services/executeAction.d.ts.map +1 -1
  496. package/dist/types/services/getAccount.d.ts +19 -16
  497. package/dist/types/services/getAccount.d.ts.map +1 -1
  498. package/dist/types/services/getActivity.d.ts +15 -25
  499. package/dist/types/services/getActivity.d.ts.map +1 -1
  500. package/dist/types/services/getAssets.d.ts +14 -5
  501. package/dist/types/services/getAssets.d.ts.map +1 -1
  502. package/dist/types/services/getFills.d.ts +18 -29
  503. package/dist/types/services/getFills.d.ts.map +1 -1
  504. package/dist/types/services/getMarket.d.ts +34 -0
  505. package/dist/types/services/getMarket.d.ts.map +1 -0
  506. package/dist/types/services/getMarkets.d.ts +28 -0
  507. package/dist/types/services/getMarkets.d.ts.map +1 -0
  508. package/dist/types/services/getMeta.d.ts +19 -0
  509. package/dist/types/services/getMeta.d.ts.map +1 -0
  510. package/dist/types/services/getOhlcv.d.ts +15 -19
  511. package/dist/types/services/getOhlcv.d.ts.map +1 -1
  512. package/dist/types/services/getOrder.d.ts +16 -16
  513. package/dist/types/services/getOrder.d.ts.map +1 -1
  514. package/dist/types/services/getOrderbook.d.ts +13 -23
  515. package/dist/types/services/getOrderbook.d.ts.map +1 -1
  516. package/dist/types/services/getOrders.d.ts +17 -9
  517. package/dist/types/services/getOrders.d.ts.map +1 -1
  518. package/dist/types/services/getPositions.d.ts +17 -9
  519. package/dist/types/services/getPositions.d.ts.map +1 -1
  520. package/dist/types/services/getPrices.d.ts +12 -24
  521. package/dist/types/services/getPrices.d.ts.map +1 -1
  522. package/dist/types/services/getProviders.d.ts +3 -3
  523. package/dist/types/services/getProviders.d.ts.map +1 -1
  524. package/dist/types/services/getQuote.d.ts +42 -0
  525. package/dist/types/services/getQuote.d.ts.map +1 -0
  526. package/dist/types/services/getTermsAcceptance.d.ts +24 -0
  527. package/dist/types/services/getTermsAcceptance.d.ts.map +1 -0
  528. package/dist/types/services/resolveQuote.d.ts +36 -0
  529. package/dist/types/services/resolveQuote.d.ts.map +1 -0
  530. package/dist/types/services/resolveSubscribeQuote.d.ts +31 -0
  531. package/dist/types/services/resolveSubscribeQuote.d.ts.map +1 -0
  532. package/dist/types/storage/parseStoredRecord.d.ts +29 -0
  533. package/dist/types/storage/parseStoredRecord.d.ts.map +1 -0
  534. package/dist/{esm/agent → types/storage}/storage.d.ts +6 -3
  535. package/dist/types/storage/storage.d.ts.map +1 -0
  536. package/dist/types/storage/types.d.ts +14 -0
  537. package/dist/types/storage/types.d.ts.map +1 -0
  538. package/dist/types/transport/fetchWithRetry.d.ts +22 -0
  539. package/dist/types/transport/fetchWithRetry.d.ts.map +1 -0
  540. package/dist/types/transport/request.d.ts +25 -0
  541. package/dist/types/transport/request.d.ts.map +1 -0
  542. package/dist/types/transport/retryPolicy.d.ts +106 -0
  543. package/dist/types/transport/retryPolicy.d.ts.map +1 -0
  544. package/dist/types/types/api.d.ts +214 -0
  545. package/dist/types/types/api.d.ts.map +1 -0
  546. package/dist/types/types/config.d.ts +70 -0
  547. package/dist/types/types/config.d.ts.map +1 -0
  548. package/dist/types/types/provider.d.ts +330 -0
  549. package/dist/types/types/provider.d.ts.map +1 -0
  550. package/dist/types/utils/accountSummary.d.ts +12 -12
  551. package/dist/types/utils/accountSummary.d.ts.map +1 -1
  552. package/dist/types/utils/assertNever.d.ts +1 -0
  553. package/dist/types/utils/assertNever.d.ts.map +1 -1
  554. package/dist/types/utils/calculations.d.ts +116 -0
  555. package/dist/types/utils/calculations.d.ts.map +1 -1
  556. package/dist/types/utils/depositChain.d.ts +25 -0
  557. package/dist/types/utils/depositChain.d.ts.map +1 -0
  558. package/dist/types/utils/explorer.d.ts +33 -0
  559. package/dist/types/utils/explorer.d.ts.map +1 -0
  560. package/dist/types/utils/fillClassification.d.ts +13 -0
  561. package/dist/types/utils/fillClassification.d.ts.map +1 -0
  562. package/dist/types/utils/format.d.ts +66 -0
  563. package/dist/types/utils/format.d.ts.map +1 -0
  564. package/dist/types/utils/orderClassification.d.ts +19 -1
  565. package/dist/types/utils/orderClassification.d.ts.map +1 -1
  566. package/dist/types/utils/orderMath.d.ts +8 -4
  567. package/dist/types/utils/orderMath.d.ts.map +1 -1
  568. package/dist/types/utils/parse.d.ts +8 -5
  569. package/dist/types/utils/parse.d.ts.map +1 -1
  570. package/dist/types/utils/positionMath.d.ts +29 -0
  571. package/dist/types/utils/positionMath.d.ts.map +1 -1
  572. package/dist/types/utils/signTypedData.d.ts +9 -4
  573. package/dist/types/utils/signTypedData.d.ts.map +1 -1
  574. package/dist/types/utils/sleep.d.ts +5 -0
  575. package/dist/types/utils/sleep.d.ts.map +1 -1
  576. package/dist/types/utils/units.d.ts +8 -1
  577. package/dist/types/utils/units.d.ts.map +1 -1
  578. package/dist/types/utils/validation.d.ts +4 -1
  579. package/dist/types/utils/validation.d.ts.map +1 -1
  580. package/dist/types/version.d.ts +1 -1
  581. package/dist/types/version.d.ts.map +1 -1
  582. package/dist/types/websocket/PerpsWsClient.d.ts +100 -0
  583. package/dist/types/websocket/PerpsWsClient.d.ts.map +1 -0
  584. package/dist/types/websocket/ReconnectingWebSocket.d.ts +130 -0
  585. package/dist/types/websocket/ReconnectingWebSocket.d.ts.map +1 -0
  586. package/dist/types/websocket/WsProviderBase.d.ts +89 -0
  587. package/dist/types/websocket/WsProviderBase.d.ts.map +1 -0
  588. package/dist/types/websocket/cachePromise.d.ts +14 -0
  589. package/dist/types/websocket/cachePromise.d.ts.map +1 -0
  590. package/dist/types/websocket/types.d.ts +60 -0
  591. package/dist/types/websocket/types.d.ts.map +1 -0
  592. package/dist/types/websocket/wsLog.d.ts +50 -0
  593. package/dist/types/websocket/wsLog.d.ts.map +1 -0
  594. package/package.json +13 -60
  595. package/src/client/PerpsClient.ts +404 -1115
  596. package/src/client/bindProvider.ts +24 -0
  597. package/src/client/createPerpsClient.ts +68 -72
  598. package/src/client/requireProvider.ts +29 -0
  599. package/src/errors/PerpsError.ts +8 -0
  600. package/src/errors/constants.ts +8 -2
  601. package/src/index.ts +138 -82
  602. package/src/registry/assetRegistry.ts +62 -0
  603. package/src/registry/marketRegistry.ts +100 -0
  604. package/src/registry/referenceDataRegistry.ts +95 -0
  605. package/src/services/createAction.ts +17 -6
  606. package/src/services/executeAction.ts +21 -6
  607. package/src/services/getAccount.ts +24 -25
  608. package/src/services/getActivity.ts +27 -47
  609. package/src/services/getAssets.ts +15 -9
  610. package/src/services/getFills.ts +29 -42
  611. package/src/services/getMarket.ts +52 -0
  612. package/src/services/getMarkets.ts +40 -0
  613. package/src/services/getMeta.ts +30 -0
  614. package/src/services/getOhlcv.ts +24 -33
  615. package/src/services/getOrder.ts +20 -27
  616. package/src/services/getOrderbook.ts +19 -34
  617. package/src/services/getOrders.ts +27 -21
  618. package/src/services/getPositions.ts +27 -21
  619. package/src/services/getPrices.ts +14 -29
  620. package/src/services/getProviders.ts +4 -7
  621. package/src/services/getQuote.ts +58 -0
  622. package/src/services/getTermsAcceptance.ts +32 -0
  623. package/src/services/resolveQuote.ts +122 -0
  624. package/src/services/resolveSubscribeQuote.ts +109 -0
  625. package/src/storage/parseStoredRecord.ts +55 -0
  626. package/src/{agent → storage}/storage.ts +6 -4
  627. package/src/storage/types.ts +13 -0
  628. package/src/transport/fetchWithRetry.ts +116 -0
  629. package/src/{utils → transport}/request.ts +33 -45
  630. package/src/transport/retryPolicy.ts +202 -0
  631. package/src/types/api.ts +239 -0
  632. package/src/types/config.ts +79 -0
  633. package/src/types/provider.ts +429 -0
  634. package/src/utils/accountSummary.ts +25 -109
  635. package/src/utils/assertNever.ts +1 -0
  636. package/src/utils/calculations.ts +204 -7
  637. package/src/utils/depositChain.ts +37 -0
  638. package/src/utils/explorer.ts +51 -0
  639. package/src/utils/fillClassification.ts +51 -0
  640. package/src/utils/format.ts +212 -0
  641. package/src/utils/orderClassification.ts +33 -1
  642. package/src/utils/orderMath.ts +9 -5
  643. package/src/utils/parse.ts +8 -7
  644. package/src/utils/positionMath.ts +42 -0
  645. package/src/utils/signTypedData.ts +11 -5
  646. package/src/utils/sleep.ts +5 -0
  647. package/src/utils/units.ts +8 -1
  648. package/src/utils/validation.ts +4 -1
  649. package/src/version.ts +1 -1
  650. package/src/websocket/PerpsWsClient.ts +204 -0
  651. package/src/websocket/ReconnectingWebSocket.ts +353 -0
  652. package/src/websocket/WsProviderBase.ts +333 -0
  653. package/src/websocket/cachePromise.ts +30 -0
  654. package/src/websocket/types.ts +75 -0
  655. package/src/websocket/wsLog.ts +82 -0
  656. package/dist/cjs/agent/AgentManager.d.ts +0 -15
  657. package/dist/cjs/agent/AgentManager.d.ts.map +0 -1
  658. package/dist/cjs/agent/AgentManager.js +0 -82
  659. package/dist/cjs/agent/AgentManager.js.map +0 -1
  660. package/dist/cjs/agent/storage.d.ts.map +0 -1
  661. package/dist/cjs/agent/storage.js.map +0 -1
  662. package/dist/cjs/agent/types.d.ts.map +0 -1
  663. package/dist/cjs/client/projectAccountConfigSettings.d.ts +0 -3
  664. package/dist/cjs/client/projectAccountConfigSettings.d.ts.map +0 -1
  665. package/dist/cjs/client/projectAccountConfigSettings.js +0 -17
  666. package/dist/cjs/client/projectAccountConfigSettings.js.map +0 -1
  667. package/dist/cjs/client/types.d.ts +0 -85
  668. package/dist/cjs/client/types.d.ts.map +0 -1
  669. package/dist/cjs/client/types.js +0 -9
  670. package/dist/cjs/client/types.js.map +0 -1
  671. package/dist/cjs/providers/hyperliquid/accountConfig.d.ts +0 -3
  672. package/dist/cjs/providers/hyperliquid/accountConfig.d.ts.map +0 -1
  673. package/dist/cjs/providers/hyperliquid/accountConfig.js +0 -41
  674. package/dist/cjs/providers/hyperliquid/accountConfig.js.map +0 -1
  675. package/dist/cjs/providers/lighter/accountConfig.d.ts +0 -3
  676. package/dist/cjs/providers/lighter/accountConfig.d.ts.map +0 -1
  677. package/dist/cjs/providers/lighter/accountConfig.js +0 -45
  678. package/dist/cjs/providers/lighter/accountConfig.js.map +0 -1
  679. package/dist/cjs/realtime/PerpsWsClient.d.ts +0 -20
  680. package/dist/cjs/realtime/PerpsWsClient.d.ts.map +0 -1
  681. package/dist/cjs/realtime/PerpsWsClient.js +0 -69
  682. package/dist/cjs/realtime/PerpsWsClient.js.map +0 -1
  683. package/dist/cjs/realtime/ReconnectingWebSocket.d.ts +0 -36
  684. package/dist/cjs/realtime/ReconnectingWebSocket.d.ts.map +0 -1
  685. package/dist/cjs/realtime/ReconnectingWebSocket.js +0 -132
  686. package/dist/cjs/realtime/ReconnectingWebSocket.js.map +0 -1
  687. package/dist/cjs/realtime/hyperliquid/HyperliquidWsProvider.d.ts +0 -30
  688. package/dist/cjs/realtime/hyperliquid/HyperliquidWsProvider.d.ts.map +0 -1
  689. package/dist/cjs/realtime/hyperliquid/HyperliquidWsProvider.js +0 -331
  690. package/dist/cjs/realtime/hyperliquid/HyperliquidWsProvider.js.map +0 -1
  691. package/dist/cjs/realtime/hyperliquid/types.d.ts +0 -37
  692. package/dist/cjs/realtime/hyperliquid/types.d.ts.map +0 -1
  693. package/dist/cjs/realtime/hyperliquid/types.js.map +0 -1
  694. package/dist/cjs/realtime/lighter/LighterWsProvider.d.ts +0 -48
  695. package/dist/cjs/realtime/lighter/LighterWsProvider.d.ts.map +0 -1
  696. package/dist/cjs/realtime/lighter/LighterWsProvider.js +0 -424
  697. package/dist/cjs/realtime/lighter/LighterWsProvider.js.map +0 -1
  698. package/dist/cjs/realtime/lighter/types.d.ts +0 -84
  699. package/dist/cjs/realtime/lighter/types.d.ts.map +0 -1
  700. package/dist/cjs/realtime/lighter/types.js.map +0 -1
  701. package/dist/cjs/realtime/types.d.ts +0 -10
  702. package/dist/cjs/realtime/types.d.ts.map +0 -1
  703. package/dist/cjs/services/getAsset.d.ts +0 -8
  704. package/dist/cjs/services/getAsset.d.ts.map +0 -1
  705. package/dist/cjs/services/getAsset.js.map +0 -1
  706. package/dist/cjs/signers/lighter/LighterKeyStore.d.ts +0 -20
  707. package/dist/cjs/signers/lighter/LighterKeyStore.d.ts.map +0 -1
  708. package/dist/cjs/signers/lighter/LighterKeyStore.js +0 -42
  709. package/dist/cjs/signers/lighter/LighterKeyStore.js.map +0 -1
  710. package/dist/cjs/signers/lighter/LighterReadOnlyTokenManager.d.ts +0 -66
  711. package/dist/cjs/signers/lighter/LighterReadOnlyTokenManager.d.ts.map +0 -1
  712. package/dist/cjs/signers/lighter/LighterReadOnlyTokenManager.js +0 -141
  713. package/dist/cjs/signers/lighter/LighterReadOnlyTokenManager.js.map +0 -1
  714. package/dist/cjs/signers/lighter/LighterSigner.d.ts +0 -41
  715. package/dist/cjs/signers/lighter/LighterSigner.d.ts.map +0 -1
  716. package/dist/cjs/signers/lighter/LighterSigner.js +0 -176
  717. package/dist/cjs/signers/lighter/LighterSigner.js.map +0 -1
  718. package/dist/cjs/signers/lighter/index.d.ts +0 -9
  719. package/dist/cjs/signers/lighter/index.d.ts.map +0 -1
  720. package/dist/cjs/signers/lighter/index.js +0 -20
  721. package/dist/cjs/signers/lighter/index.js.map +0 -1
  722. package/dist/cjs/signers/lighter/wasmLoader.d.ts +0 -42
  723. package/dist/cjs/signers/lighter/wasmLoader.d.ts.map +0 -1
  724. package/dist/cjs/signers/lighter/wasmLoader.js +0 -166
  725. package/dist/cjs/signers/lighter/wasmLoader.js.map +0 -1
  726. package/dist/cjs/utils/hyperliquid/index.d.ts +0 -3
  727. package/dist/cjs/utils/hyperliquid/index.d.ts.map +0 -1
  728. package/dist/cjs/utils/hyperliquid/index.js +0 -11
  729. package/dist/cjs/utils/hyperliquid/index.js.map +0 -1
  730. package/dist/cjs/utils/hyperliquid/liquidation.d.ts +0 -3
  731. package/dist/cjs/utils/hyperliquid/liquidation.d.ts.map +0 -1
  732. package/dist/cjs/utils/hyperliquid/liquidation.js +0 -24
  733. package/dist/cjs/utils/hyperliquid/liquidation.js.map +0 -1
  734. package/dist/cjs/utils/hyperliquid/orderFormatting.d.ts +0 -4
  735. package/dist/cjs/utils/hyperliquid/orderFormatting.d.ts.map +0 -1
  736. package/dist/cjs/utils/hyperliquid/orderFormatting.js +0 -33
  737. package/dist/cjs/utils/hyperliquid/orderFormatting.js.map +0 -1
  738. package/dist/cjs/utils/request.d.ts.map +0 -1
  739. package/dist/cjs/utils/request.js.map +0 -1
  740. package/dist/cjs/wasm/lighter-signer.wasm +0 -0
  741. package/dist/cjs/wasm/wasm_exec.js +0 -575
  742. package/dist/esm/agent/AgentManager.d.ts +0 -45
  743. package/dist/esm/agent/AgentManager.d.ts.map +0 -1
  744. package/dist/esm/agent/AgentManager.js +0 -112
  745. package/dist/esm/agent/AgentManager.js.map +0 -1
  746. package/dist/esm/agent/storage.d.ts.map +0 -1
  747. package/dist/esm/agent/storage.js.map +0 -1
  748. package/dist/esm/agent/types.d.ts +0 -23
  749. package/dist/esm/agent/types.d.ts.map +0 -1
  750. package/dist/esm/client/projectAccountConfigSettings.d.ts +0 -18
  751. package/dist/esm/client/projectAccountConfigSettings.d.ts.map +0 -1
  752. package/dist/esm/client/projectAccountConfigSettings.js +0 -29
  753. package/dist/esm/client/projectAccountConfigSettings.js.map +0 -1
  754. package/dist/esm/client/types.d.ts +0 -200
  755. package/dist/esm/client/types.d.ts.map +0 -1
  756. package/dist/esm/client/types.js +0 -12
  757. package/dist/esm/client/types.js.map +0 -1
  758. package/dist/esm/providers/hyperliquid/accountConfig.d.ts +0 -13
  759. package/dist/esm/providers/hyperliquid/accountConfig.d.ts.map +0 -1
  760. package/dist/esm/providers/hyperliquid/accountConfig.js +0 -69
  761. package/dist/esm/providers/hyperliquid/accountConfig.js.map +0 -1
  762. package/dist/esm/providers/lighter/accountConfig.d.ts +0 -13
  763. package/dist/esm/providers/lighter/accountConfig.d.ts.map +0 -1
  764. package/dist/esm/providers/lighter/accountConfig.js +0 -79
  765. package/dist/esm/providers/lighter/accountConfig.js.map +0 -1
  766. package/dist/esm/realtime/PerpsWsClient.d.ts +0 -26
  767. package/dist/esm/realtime/PerpsWsClient.d.ts.map +0 -1
  768. package/dist/esm/realtime/PerpsWsClient.js +0 -65
  769. package/dist/esm/realtime/PerpsWsClient.js.map +0 -1
  770. package/dist/esm/realtime/ReconnectingWebSocket.d.ts +0 -36
  771. package/dist/esm/realtime/ReconnectingWebSocket.d.ts.map +0 -1
  772. package/dist/esm/realtime/ReconnectingWebSocket.js +0 -128
  773. package/dist/esm/realtime/ReconnectingWebSocket.js.map +0 -1
  774. package/dist/esm/realtime/hyperliquid/HyperliquidWsProvider.d.ts +0 -32
  775. package/dist/esm/realtime/hyperliquid/HyperliquidWsProvider.d.ts.map +0 -1
  776. package/dist/esm/realtime/hyperliquid/HyperliquidWsProvider.js +0 -339
  777. package/dist/esm/realtime/hyperliquid/HyperliquidWsProvider.js.map +0 -1
  778. package/dist/esm/realtime/hyperliquid/types.d.ts +0 -37
  779. package/dist/esm/realtime/hyperliquid/types.d.ts.map +0 -1
  780. package/dist/esm/realtime/hyperliquid/types.js +0 -4
  781. package/dist/esm/realtime/hyperliquid/types.js.map +0 -1
  782. package/dist/esm/realtime/lighter/LighterWsProvider.d.ts +0 -68
  783. package/dist/esm/realtime/lighter/LighterWsProvider.d.ts.map +0 -1
  784. package/dist/esm/realtime/lighter/LighterWsProvider.js +0 -474
  785. package/dist/esm/realtime/lighter/LighterWsProvider.js.map +0 -1
  786. package/dist/esm/realtime/lighter/types.d.ts +0 -108
  787. package/dist/esm/realtime/lighter/types.d.ts.map +0 -1
  788. package/dist/esm/realtime/lighter/types.js +0 -14
  789. package/dist/esm/realtime/lighter/types.js.map +0 -1
  790. package/dist/esm/realtime/types.d.ts +0 -10
  791. package/dist/esm/realtime/types.d.ts.map +0 -1
  792. package/dist/esm/services/getAsset.d.ts +0 -20
  793. package/dist/esm/services/getAsset.d.ts.map +0 -1
  794. package/dist/esm/services/getAsset.js +0 -18
  795. package/dist/esm/services/getAsset.js.map +0 -1
  796. package/dist/esm/signers/lighter/LighterKeyStore.d.ts +0 -29
  797. package/dist/esm/signers/lighter/LighterKeyStore.d.ts.map +0 -1
  798. package/dist/esm/signers/lighter/LighterKeyStore.js +0 -53
  799. package/dist/esm/signers/lighter/LighterKeyStore.js.map +0 -1
  800. package/dist/esm/signers/lighter/LighterReadOnlyTokenManager.d.ts +0 -174
  801. package/dist/esm/signers/lighter/LighterReadOnlyTokenManager.d.ts.map +0 -1
  802. package/dist/esm/signers/lighter/LighterReadOnlyTokenManager.js +0 -214
  803. package/dist/esm/signers/lighter/LighterReadOnlyTokenManager.js.map +0 -1
  804. package/dist/esm/signers/lighter/LighterSigner.d.ts +0 -88
  805. package/dist/esm/signers/lighter/LighterSigner.d.ts.map +0 -1
  806. package/dist/esm/signers/lighter/LighterSigner.js +0 -226
  807. package/dist/esm/signers/lighter/LighterSigner.js.map +0 -1
  808. package/dist/esm/signers/lighter/index.d.ts +0 -9
  809. package/dist/esm/signers/lighter/index.d.ts.map +0 -1
  810. package/dist/esm/signers/lighter/index.js +0 -5
  811. package/dist/esm/signers/lighter/index.js.map +0 -1
  812. package/dist/esm/signers/lighter/wasmLoader.d.ts +0 -71
  813. package/dist/esm/signers/lighter/wasmLoader.d.ts.map +0 -1
  814. package/dist/esm/signers/lighter/wasmLoader.js +0 -181
  815. package/dist/esm/signers/lighter/wasmLoader.js.map +0 -1
  816. package/dist/esm/utils/hyperliquid/index.d.ts +0 -3
  817. package/dist/esm/utils/hyperliquid/index.d.ts.map +0 -1
  818. package/dist/esm/utils/hyperliquid/index.js +0 -3
  819. package/dist/esm/utils/hyperliquid/index.js.map +0 -1
  820. package/dist/esm/utils/hyperliquid/liquidation.d.ts +0 -46
  821. package/dist/esm/utils/hyperliquid/liquidation.d.ts.map +0 -1
  822. package/dist/esm/utils/hyperliquid/liquidation.js +0 -63
  823. package/dist/esm/utils/hyperliquid/liquidation.js.map +0 -1
  824. package/dist/esm/utils/hyperliquid/orderFormatting.d.ts +0 -44
  825. package/dist/esm/utils/hyperliquid/orderFormatting.d.ts.map +0 -1
  826. package/dist/esm/utils/hyperliquid/orderFormatting.js +0 -79
  827. package/dist/esm/utils/hyperliquid/orderFormatting.js.map +0 -1
  828. package/dist/esm/utils/request.d.ts +0 -25
  829. package/dist/esm/utils/request.d.ts.map +0 -1
  830. package/dist/esm/utils/request.js.map +0 -1
  831. package/dist/esm/wasm/lighter-signer.wasm +0 -0
  832. package/dist/esm/wasm/wasm_exec.js +0 -575
  833. package/dist/types/agent/AgentManager.d.ts +0 -45
  834. package/dist/types/agent/AgentManager.d.ts.map +0 -1
  835. package/dist/types/agent/storage.d.ts.map +0 -1
  836. package/dist/types/agent/types.d.ts +0 -23
  837. package/dist/types/agent/types.d.ts.map +0 -1
  838. package/dist/types/client/projectAccountConfigSettings.d.ts +0 -18
  839. package/dist/types/client/projectAccountConfigSettings.d.ts.map +0 -1
  840. package/dist/types/client/types.d.ts +0 -200
  841. package/dist/types/client/types.d.ts.map +0 -1
  842. package/dist/types/providers/hyperliquid/accountConfig.d.ts +0 -13
  843. package/dist/types/providers/hyperliquid/accountConfig.d.ts.map +0 -1
  844. package/dist/types/providers/lighter/accountConfig.d.ts +0 -13
  845. package/dist/types/providers/lighter/accountConfig.d.ts.map +0 -1
  846. package/dist/types/realtime/PerpsWsClient.d.ts +0 -26
  847. package/dist/types/realtime/PerpsWsClient.d.ts.map +0 -1
  848. package/dist/types/realtime/ReconnectingWebSocket.d.ts.map +0 -1
  849. package/dist/types/realtime/hyperliquid/HyperliquidWsProvider.d.ts +0 -32
  850. package/dist/types/realtime/hyperliquid/HyperliquidWsProvider.d.ts.map +0 -1
  851. package/dist/types/realtime/hyperliquid/types.d.ts +0 -37
  852. package/dist/types/realtime/hyperliquid/types.d.ts.map +0 -1
  853. package/dist/types/realtime/lighter/LighterWsProvider.d.ts +0 -68
  854. package/dist/types/realtime/lighter/LighterWsProvider.d.ts.map +0 -1
  855. package/dist/types/realtime/lighter/types.d.ts +0 -108
  856. package/dist/types/realtime/lighter/types.d.ts.map +0 -1
  857. package/dist/types/realtime/types.d.ts +0 -10
  858. package/dist/types/realtime/types.d.ts.map +0 -1
  859. package/dist/types/services/getAsset.d.ts +0 -20
  860. package/dist/types/services/getAsset.d.ts.map +0 -1
  861. package/dist/types/signers/lighter/LighterKeyStore.d.ts +0 -29
  862. package/dist/types/signers/lighter/LighterKeyStore.d.ts.map +0 -1
  863. package/dist/types/signers/lighter/LighterReadOnlyTokenManager.d.ts +0 -174
  864. package/dist/types/signers/lighter/LighterReadOnlyTokenManager.d.ts.map +0 -1
  865. package/dist/types/signers/lighter/LighterSigner.d.ts +0 -88
  866. package/dist/types/signers/lighter/LighterSigner.d.ts.map +0 -1
  867. package/dist/types/signers/lighter/index.d.ts +0 -9
  868. package/dist/types/signers/lighter/index.d.ts.map +0 -1
  869. package/dist/types/signers/lighter/wasmLoader.d.ts +0 -71
  870. package/dist/types/signers/lighter/wasmLoader.d.ts.map +0 -1
  871. package/dist/types/utils/hyperliquid/index.d.ts +0 -3
  872. package/dist/types/utils/hyperliquid/index.d.ts.map +0 -1
  873. package/dist/types/utils/hyperliquid/liquidation.d.ts +0 -46
  874. package/dist/types/utils/hyperliquid/liquidation.d.ts.map +0 -1
  875. package/dist/types/utils/hyperliquid/orderFormatting.d.ts +0 -44
  876. package/dist/types/utils/hyperliquid/orderFormatting.d.ts.map +0 -1
  877. package/dist/types/utils/request.d.ts +0 -25
  878. package/dist/types/utils/request.d.ts.map +0 -1
  879. package/src/agent/AgentManager.ts +0 -137
  880. package/src/agent/types.ts +0 -24
  881. package/src/client/projectAccountConfigSettings.ts +0 -39
  882. package/src/client/types.ts +0 -240
  883. package/src/providers/hyperliquid/accountConfig.ts +0 -92
  884. package/src/providers/lighter/accountConfig.ts +0 -103
  885. package/src/realtime/PerpsWsClient.ts +0 -108
  886. package/src/realtime/ReconnectingWebSocket.ts +0 -156
  887. package/src/realtime/hyperliquid/HyperliquidWsProvider.ts +0 -413
  888. package/src/realtime/hyperliquid/types.ts +0 -46
  889. package/src/realtime/lighter/LighterWsProvider.ts +0 -682
  890. package/src/realtime/lighter/types.ts +0 -121
  891. package/src/realtime/types.ts +0 -16
  892. package/src/services/getAsset.ts +0 -37
  893. package/src/signers/lighter/LighterKeyStore.ts +0 -74
  894. package/src/signers/lighter/LighterReadOnlyTokenManager.ts +0 -358
  895. package/src/signers/lighter/LighterSigner.ts +0 -396
  896. package/src/signers/lighter/index.ts +0 -36
  897. package/src/signers/lighter/wasmLoader.ts +0 -291
  898. package/src/utils/hyperliquid/index.ts +0 -9
  899. package/src/utils/hyperliquid/liquidation.ts +0 -71
  900. package/src/utils/hyperliquid/orderFormatting.ts +0 -96
  901. package/wasm/lighter-signer.wasm +0 -0
  902. package/wasm/wasm_exec.js +0 -575
  903. /package/dist/cjs/{agent → storage}/storage.d.ts +0 -0
  904. /package/dist/cjs/{agent → storage}/storage.js +0 -0
  905. /package/dist/cjs/{agent → storage}/types.js +0 -0
  906. /package/dist/cjs/{realtime/hyperliquid → websocket}/types.js +0 -0
  907. /package/dist/esm/{agent → storage}/types.js +0 -0
  908. /package/dist/esm/{realtime → websocket}/types.js +0 -0
@@ -1,17 +1,11 @@
1
- import { ActionType, PerpsErrorCode, PerpsSigner, SigningMethod, } from '@lifi/perps-types';
2
- import { parseAbi } from 'viem';
3
- import { localStorageAdapter } from '../agent/storage.js';
1
+ import { ActionType, PerpsErrorCode } from '@lifi/perps-types';
4
2
  import { PerpsError } from '../errors/PerpsError.js';
5
3
  import { createAction } from '../services/createAction.js';
6
4
  import { executeAction } from '../services/executeAction.js';
7
- import { getAccount } from '../services/getAccount.js';
5
+ import { getAccount as fetchAccount } from '../services/getAccount.js';
8
6
  import { getProviders } from '../services/getProviders.js';
9
- import { DEFAULT_API_KEY_INDEX, LighterKeyStore, LighterReadOnlyTokenManager, LighterSigner, walletClientSigner, } from '../signers/lighter/index.js';
10
- import { signTypedData, signTypedDataWithSigner, } from '../utils/signTypedData.js';
11
7
  import { createPerpsClient } from './createPerpsClient.js';
12
- import { projectAccountConfigSettings } from './projectAccountConfigSettings.js';
13
- import { SigningMode, } from './types.js';
14
- const MAX_NONCE_RETRIES = 3;
8
+ import { requireProvider as resolveProvider } from './requireProvider.js';
15
9
  /**
16
10
  * Look up an action's descriptor in the provider's metadata. Throws if the
17
11
  * action isn't declared — defensive: better to fail loudly than to mis-sign.
@@ -27,71 +21,48 @@ function findActionDescriptor(metadata, action) {
27
21
  }
28
22
  return descriptor;
29
23
  }
24
+ /**
25
+ * The primary high-level perps API: wraps a {@link PerpsSDKClient} and owns the
26
+ * end-to-end signing pipeline for provider setup, orders, and account-level
27
+ * actions. Construct via `new PerpsClient(options)` or the SDK's higher-level
28
+ * wiring.
29
+ *
30
+ * @public
31
+ */
30
32
  export class PerpsClient {
31
33
  sdkClient;
32
- storage;
33
- signingModes = new Map();
34
34
  providerMetadataCache = new Map();
35
- _signer;
36
- lighterConfig;
37
- lighterReadOnlyTokenOptions;
38
- _lighterSigner;
39
- _lighterKeyStore;
40
- _lighterReadOnlyTokenManager;
35
+ _userWallet;
41
36
  constructor(options) {
42
- this.storage = options.storage ?? localStorageAdapter;
43
- this.lighterConfig = options.lighter;
44
- this.lighterReadOnlyTokenOptions = options.lighterReadOnlyToken;
45
37
  this.sdkClient = createPerpsClient({
46
38
  integrator: options.integrator,
47
39
  apiKey: options.apiKey,
48
40
  apiUrl: options.apiUrl,
49
- storage: this.storage,
50
41
  providers: options.providers,
51
42
  });
52
43
  }
53
- getLighterSigner() {
54
- if (!this._lighterSigner) {
55
- this._lighterSigner = new LighterSigner(this.lighterConfig);
56
- }
57
- return this._lighterSigner;
58
- }
59
- getLighterKeyStore() {
60
- if (!this._lighterKeyStore) {
61
- this._lighterKeyStore = new LighterKeyStore(this.storage);
62
- }
63
- return this._lighterKeyStore;
64
- }
65
- getLighterReadOnlyTokenManager() {
66
- if (!this._lighterReadOnlyTokenManager) {
67
- this._lighterReadOnlyTokenManager = new LighterReadOnlyTokenManager({
68
- storage: this.storage,
69
- ...this.lighterReadOnlyTokenOptions,
70
- });
71
- }
72
- return this._lighterReadOnlyTokenManager;
73
- }
74
44
  /**
75
- * Set or update the wallet signer. Used whenever an action's descriptor
45
+ * Set or update the end-user's wallet. Used whenever an action's descriptor
76
46
  * names the user wallet in its `signers` list. Pass undefined to clear.
47
+ *
48
+ * @public
77
49
  */
78
- setSigner(signer) {
79
- this._signer = signer;
80
- // Override the signer on the sdkClient
81
- Object.defineProperty(this.sdkClient, 'signer', {
82
- get: () => this._signer,
50
+ setUserWallet(userWallet) {
51
+ this._userWallet = userWallet;
52
+ Object.defineProperty(this.sdkClient, 'userWallet', {
53
+ get: () => this._userWallet,
83
54
  configurable: true,
84
55
  });
85
56
  }
57
+ /**
58
+ * The underlying low-level {@link PerpsSDKClient} (config, user wallet,
59
+ * provider registry) backing this instance.
60
+ *
61
+ * @public
62
+ */
86
63
  get client() {
87
64
  return this.sdkClient;
88
65
  }
89
- modeKey(address, provider) {
90
- return `${address.toLowerCase()}:${provider.toLowerCase()}`;
91
- }
92
- signingModeStorageKey(address, provider) {
93
- return `lifi-perps-mode:${address.toLowerCase()}:${provider.toLowerCase()}`;
94
- }
95
66
  async getProviderMetadata(provider) {
96
67
  const cached = this.providerMetadataCache.get(provider);
97
68
  if (cached) {
@@ -110,524 +81,134 @@ export class PerpsClient {
110
81
  return metadata;
111
82
  }
112
83
  /**
113
- * Action types that require explicit user input (a chosen mode or tier)
114
- * and therefore cannot be bulk-staged through `buildPrerequisites` with
115
- * empty params. Callers must dispatch these via `execute(...)` once a
116
- * value is picked. The post-`APPROVE_AGENT` auto-upgrade path also
117
- * dispatches `ACCOUNT_MODE` directly with `mode: 'unifiedAccount'`.
84
+ * Resolve the registered provider plugin for `provider`, throwing a
85
+ * `PerpsError` when the caller has not registered one via the SDK's
86
+ * `providers` option. The plugin owns signer identity and write-side signing.
118
87
  */
119
- static EXPLICIT_INPUT_PREREQUISITES = new Set([ActionType.ACCOUNT_MODE, ActionType.ACCOUNT_TYPE]);
120
- buildPrerequisiteInputs(prerequisites, mode, agentAddress) {
121
- return prerequisites
122
- .filter((p) => {
123
- // ACCOUNT_MODE / ACCOUNT_TYPE require explicit params; they're
124
- // dispatched separately via `execute(...)` (or the post-APPROVE_AGENT
125
- // auto-upgrade chain) rather than bulk-staged.
126
- if (PerpsClient.EXPLICIT_INPUT_PREREQUISITES.has(p.type)) {
127
- return false;
128
- }
129
- if (mode === SigningMode.USER) {
130
- // USER mode: only items the user can sign, and never APPROVE_AGENT
131
- // (no agent is created in this mode).
132
- if (!p.signers.includes(PerpsSigner.USER)) {
133
- return false;
134
- }
135
- if (p.type === ActionType.APPROVE_AGENT) {
136
- return false;
137
- }
138
- return true;
139
- }
140
- // USER_AGENT mode: include every remaining declared prerequisite.
141
- return true;
142
- })
143
- .map((p) => {
144
- const params = {};
145
- if (p.type === ActionType.APPROVE_AGENT && agentAddress) {
146
- params.agentAddress = agentAddress;
147
- }
148
- return {
149
- key: p.type,
150
- ...(Object.keys(params).length > 0 ? { params } : {}),
151
- };
152
- });
153
- }
154
- async resolveSignerForAction(action, address, provider) {
155
- const mode = await this.loadSigningMode(address, provider);
156
- if (mode !== SigningMode.USER_AGENT) {
157
- return undefined;
158
- }
159
- // Only AGENT-signed actions surface a distinct signerAddress on the wire.
160
- // API_KEY signers (e.g. Lighter's LighterKeyStore) are managed per-provider
161
- // and don't have an EVM address — the backend identifies the action by the
162
- // L1 `address` instead.
163
- const metadata = await this.getProviderMetadata(provider);
164
- const allActions = [
165
- ...metadata.setup,
166
- ...metadata.options,
167
- ...metadata.actions,
168
- ];
169
- const descriptor = allActions.find((d) => d.type === action);
170
- if (!descriptor?.signers.includes(PerpsSigner.AGENT)) {
171
- return undefined;
172
- }
173
- const agent = await this.sdkClient.agentManager.getAgent(address, provider);
174
- return agent.address;
88
+ requireProvider(provider) {
89
+ return resolveProvider(this.sdkClient, provider);
175
90
  }
176
91
  /**
177
- * True if any descriptor for the provider lists `PerpsSigner.AGENT`.
178
- * Providers like Lighter sign with their own keystore and never need an
179
- * AgentManager-managed agent.
92
+ * Ask the provider plugin for the signer-bearing wire fields of `action` —
93
+ * the on-wire `signerAddress` and any signer-derived params (e.g.
94
+ * Hyperliquid's `agentAddress` for `APPROVE_AGENT`). Forwards the descriptor's
95
+ * `signers` so the plugin can branch on signer role. Returns empty when the
96
+ * plugin signs as the user or with a non-EVM credential. Core constructs no
97
+ * `signerAddress` itself; signer identity is plugin-owned.
180
98
  */
181
- async providerUsesAgent(provider) {
182
- const metadata = await this.getProviderMetadata(provider);
183
- const all = [...metadata.setup, ...metadata.options, ...metadata.actions];
184
- return all.some((d) => d.signers.includes(PerpsSigner.AGENT));
185
- }
186
- async autoSignAndExecute(provider, address, action, actions, descriptor) {
187
- switch (descriptor.signingMethod) {
188
- case SigningMethod.EIP712: {
189
- const eip712Actions = actions;
190
- if (descriptor.signers.includes(PerpsSigner.AGENT)) {
191
- const agent = await this.sdkClient.agentManager.getAgent(address, provider);
192
- const signedActions = await Promise.all(eip712Actions.map(async (a) => ({
193
- action: a.action,
194
- typedData: a.typedData,
195
- signature: await signTypedData(agent.privateKey, a.typedData),
196
- })));
197
- return executeAction(this.sdkClient, {
198
- provider,
199
- address,
200
- signerAddress: agent.address,
201
- action,
202
- actions: signedActions,
203
- });
204
- }
205
- if (descriptor.signers.includes(PerpsSigner.USER)) {
206
- const signer = this.sdkClient.signer;
207
- if (!signer) {
208
- throw new PerpsError(PerpsErrorCode.SDKError, `Action '${action}' requires a user-wallet signature, but no signer was configured. Pass a WalletClient to createPerpsClient({ signer }).`);
209
- }
210
- const signedActions = await Promise.all(eip712Actions.map(async (a) => ({
211
- action: a.action,
212
- typedData: a.typedData,
213
- signature: await signTypedDataWithSigner(signer, a.typedData),
214
- })));
215
- return executeAction(this.sdkClient, {
216
- provider,
217
- address,
218
- signerAddress: address,
219
- action,
220
- actions: signedActions,
221
- });
222
- }
223
- throw new PerpsError(PerpsErrorCode.SDKError, `Action '${action}' descriptor names no supported signer (signers=[${descriptor.signers.join(', ')}]).`);
224
- }
225
- case SigningMethod.WASM_BLOB: {
226
- const wasmActions = actions;
227
- const signedActions = await this.signWasmBlobActions(provider, address, wasmActions);
228
- return executeAction(this.sdkClient, {
229
- provider,
230
- address,
231
- signerAddress: address,
232
- action,
233
- actions: signedActions,
234
- });
235
- }
236
- case SigningMethod.EVM_TX: {
237
- const evmActions = actions;
238
- const signedActions = await this.signEvmTxActions(evmActions);
239
- return executeAction(this.sdkClient, {
240
- provider,
241
- address,
242
- signerAddress: address,
243
- action,
244
- actions: signedActions,
245
- });
246
- }
247
- default:
248
- throw new Error(`Unknown signingMethod: ${descriptor.signingMethod}`);
99
+ async resolveActionRequest(provider, descriptor, address) {
100
+ const plugin = this.requireProvider(provider);
101
+ if (typeof plugin.resolveActionRequest !== 'function') {
102
+ return {};
249
103
  }
104
+ return plugin.resolveActionRequest(descriptor.type, address, descriptor.signers);
250
105
  }
251
106
  /**
252
- * Sign a single prerequisite step using whichever signing path matches the
253
- * step's shape EIP-712 typed data, WASM blob (with the hybrid EIP-191 +
254
- * WASM flow for REGISTER_API_KEY), or EVM transaction. Lets consumers
255
- * collect signed prereqs without embedding per-method signing logic.
107
+ * Delegate signing of `actions` to the provider plugin. The plugin owns
108
+ * every signing arm and branches on the descriptor's `signers` internally,
109
+ * reading the end-user's wallet from the {@link SignActionsContext} when an
110
+ * arm signs as the user.
256
111
  */
257
- async signPrerequisite(provider, address, step) {
258
- if ('typedData' in step) {
259
- if (!this.sdkClient.signer) {
260
- throw new PerpsError(PerpsErrorCode.SDKError, 'EIP-712 prerequisite signing requires a wallet signer. Pass ' +
261
- '`signer` to createPerpsClient or call setSigner(walletClient).');
262
- }
263
- return {
264
- action: step.action,
265
- typedData: step.typedData,
266
- signature: await signTypedDataWithSigner(this.sdkClient.signer, step.typedData),
267
- };
268
- }
269
- if ('wasmSignParams' in step) {
270
- const [signed] = await this.signWasmBlobActions(provider, address, [step]);
271
- return signed;
112
+ async delegateSignActions(provider, address, descriptor, actions) {
113
+ const plugin = this.requireProvider(provider);
114
+ if (typeof plugin.signActions !== 'function') {
115
+ throw new PerpsError(PerpsErrorCode.SDKError, `Provider '${provider}' does not implement signActions for ` +
116
+ `signingMethod '${descriptor.signingMethod}'.`);
272
117
  }
273
- if ('txParams' in step) {
274
- const [signed] = await this.signEvmTxActions([step]);
275
- return signed;
276
- }
277
- throw new PerpsError(PerpsErrorCode.SDKError, 'Unknown ActionStep shape — expected typedData, wasmSignParams, or txParams.');
118
+ return plugin.signActions(descriptor.signingMethod, actions, address, this.buildSignActionsContext(descriptor));
278
119
  }
279
120
  /**
280
- * Sign and broadcast a sequence of EVM transactions via the user's wallet
281
- * client. Steps are submitted serially so a later step (e.g. deposit) can
282
- * rely on an earlier step (e.g. approve) having mined. Each step's
283
- * `txParams` carries chainId, target, function name, args, and a
284
- * human-readable abi from the backend.
121
+ * Assemble the per-call context the provider plugin needs in order to sign:
122
+ * the end-user's wallet and the descriptor's declared `signers`. Core
123
+ * forwards `signers` as data so the plugin can pick WHO signs; it does not
124
+ * branch on them. Provider-owned session credentials (the Hyperliquid agent
125
+ * keypair, Lighter's API key) are resolved inside the provider's
126
+ * `signActions`, not threaded through here.
285
127
  */
286
- async signEvmTxActions(actions) {
287
- if (!this.sdkClient.signer) {
288
- throw new PerpsError(PerpsErrorCode.SDKError, 'EVM_TX signing requires a wallet signer. Pass `signer` to ' +
289
- 'createPerpsClient or call setSigner(walletClient).');
290
- }
291
- const { signer } = this.sdkClient;
292
- const signed = [];
293
- for (const step of actions) {
294
- const params = step.txParams;
295
- const txHash = await signer.writeContract({
296
- address: params.to,
297
- abi: parseAbi(params.abi),
298
- functionName: params.functionName,
299
- args: params.args,
300
- chain: signer.chain,
301
- account: signer.account,
302
- });
303
- signed.push({
304
- action: step.action,
305
- txParams: step.txParams,
306
- txHash,
307
- });
128
+ buildSignActionsContext(descriptor) {
129
+ const ctx = { signers: descriptor.signers };
130
+ if (this.sdkClient.userWallet !== undefined) {
131
+ ctx.userWallet = this.sdkClient.userWallet;
308
132
  }
309
- return signed;
133
+ return ctx;
310
134
  }
311
135
  /**
312
- * Sign a batch of WASM_BLOB action steps (Lighter). Ensures the user's
313
- * Lighter API keypair is registered first generating one and running the
314
- * REGISTER_API_KEY hybrid flow via the L1 signer if not — then feeds each
315
- * subsequent step through the WASM signer and returns signed blobs.
136
+ * Sign a single provider setup action step by delegating to the provider
137
+ * plugin, which branches on the step's signing scheme internally. Lets
138
+ * consumers collect signed setup actions without embedding per-method
139
+ * signing logic.
316
140
  *
317
- * `ACCOUNT_TYPE` (Lighter `/api/v1/changeAccountTier`) is dispatched as a
318
- * WASM_BLOB envelope by the backend but is NOT a wasm-signed transaction —
319
- * Lighter authenticates the endpoint with an auth token and enforces
320
- * anti-replay server-side (24h cooldown, no open positions). The signer
321
- * mints a Lighter auth token via the same WASM `CreateAuthToken` the read
322
- * endpoints use and parks it in `signedTx.txInfo`; the backend's
323
- * `executeChangeAccountTier` consumes that field as the `auth` form
324
- * parameter. `txType`/`txHash` are unused for this action — they carry
325
- * placeholder values to satisfy the `WasmBlobSignedActionStep` shape.
141
+ * @throws {PerpsError} When the step's action is not declared by the provider.
142
+ * @public
326
143
  */
327
- async signWasmBlobActions(provider, address, actions) {
328
- const signed = [];
329
- for (const step of actions) {
330
- if (step.action === ActionType.REGISTER_API_KEY) {
331
- signed.push(await this.signRegisterApiKey(provider, address, step));
332
- }
333
- else if (step.action === ActionType.ACCOUNT_TYPE) {
334
- signed.push(await this.signAccountTierChange(address, step));
335
- }
336
- else {
337
- signed.push(await this.signStandardWasmAction(provider, address, step));
338
- }
339
- }
144
+ async signProviderSetupAction(provider, address, step) {
145
+ const metadata = await this.getProviderMetadata(provider);
146
+ const descriptor = findActionDescriptor(metadata, step.action);
147
+ const [signed] = await this.delegateSignActions(provider, address, descriptor, [step]);
340
148
  return signed;
341
149
  }
342
- async signStandardWasmAction(provider, address, step) {
343
- const apiKey = await this.getLighterKeyStore().get(address);
344
- if (!apiKey) {
345
- throw new PerpsError(PerpsErrorCode.SDKError, `No Lighter API key registered for ${address}. ` +
346
- 'Run prepareAccount / REGISTER_API_KEY first.');
347
- }
348
- const signer = this.getLighterSigner();
349
- const signedTx = await signer.sign(step.action, step.wasmSignParams, {
350
- apiKeyPrivateKey: apiKey.apiKeyPrivateKey,
351
- apiKeyIndex: apiKey.apiKeyIndex,
352
- accountIndex: apiKey.accountIndex,
353
- });
354
- void provider;
355
- return {
356
- action: step.action,
357
- wasmSignParams: step.wasmSignParams,
358
- signedTx,
359
- };
360
- }
361
- /**
362
- * REGISTER_API_KEY flow:
363
- * 1. Look up the user's Lighter accountIndex from getAccount()
364
- * 2. Generate a fresh Lighter API keypair via the WASM signer
365
- * 3. Call SignChangePubKey to produce the WASM blob + EIP-191 message
366
- * 4. Have the user's L1 Ethereum wallet sign the message
367
- * 5. Inject the L1 signature into the ChangePubKey txInfo JSON
368
- * 6. Persist the keypair and return the signed blob
369
- *
370
- * Requires a USER wallet signer to be set via `setSigner` or passed at
371
- * construction — the L1 signature is the user's consent to rotate keys.
372
- */
373
- async signRegisterApiKey(provider, address, step) {
374
- if (!this.sdkClient.signer) {
375
- throw new PerpsError(PerpsErrorCode.SDKError, 'REGISTER_API_KEY requires a wallet signer — pass `signer` to ' +
376
- 'createPerpsClient or call setSigner(walletClient).');
377
- }
378
- const params = step.wasmSignParams;
379
- const apiKeyIndex = params.api_key_index ?? DEFAULT_API_KEY_INDEX;
380
- const nonce = params.nonce;
381
- if (typeof nonce !== 'number') {
382
- throw new PerpsError(PerpsErrorCode.SDKError, 'REGISTER_API_KEY wasmSignParams is missing `nonce`.');
383
- }
384
- const account = await getAccount(this.sdkClient, { provider, address });
385
- if (account.config.provider !== 'lighter') {
386
- throw new PerpsError(PerpsErrorCode.SDKError, `REGISTER_API_KEY requires a Lighter account, but getAccount ` +
387
- `returned config for provider '${account.config.provider}'.`);
388
- }
389
- const accountIndex = account.config.accountIndex;
390
- const signer = this.getLighterSigner();
391
- const keypair = await signer.generateAPIKey();
392
- const changePubKey = await signer.signChangePubKey(keypair.publicKey, keypair.privateKey, nonce, apiKeyIndex, accountIndex);
393
- const l1Signature = await this.sdkClient.signer.signMessage({
394
- account: this.sdkClient.signer.account,
395
- message: changePubKey.messageToSign,
396
- });
397
- const txInfoWithL1Sig = signer.embedL1Signature(changePubKey.txInfo, l1Signature);
398
- const apiKey = {
399
- accountIndex,
400
- apiKeyIndex,
401
- apiKeyPrivateKey: keypair.privateKey,
402
- apiKeyPublicKey: keypair.publicKey,
403
- };
404
- await this.getLighterKeyStore().set(address, apiKey);
405
- return {
406
- action: step.action,
407
- wasmSignParams: {
408
- ...step.wasmSignParams,
409
- new_public_key: keypair.publicKey,
410
- },
411
- signedTx: {
412
- txType: changePubKey.txType,
413
- txInfo: txInfoWithL1Sig,
414
- txHash: changePubKey.txHash,
415
- },
416
- };
417
- }
418
- /**
419
- * Sign an `ACCOUNT_TYPE` step (Lighter `changeAccountTier`).
420
- *
421
- * Lighter's `/api/v1/changeAccountTier` is an HTTP-only mutation —
422
- * Lighter does NOT consume a wasm-signed transaction here; it
423
- * authenticates the request with the same auth token its read endpoints
424
- * use, and enforces anti-replay business rules server-side. The backend
425
- * therefore declares the step as a `WasmBlobActionStep` with
426
- * `wasmSignParams.kind = 'changeAccountTier'` and expects the SDK to
427
- * mint an auth token in lieu of a transaction signature. That contract
428
- * is documented in `lifi-perps-backend/src/providers/lighter/actions/
429
- * lighter.actions.accountType.ts` and consumed by `executeChangeAccountTier`.
430
- *
431
- * The auth-token deadline mirrors {@link createLighterAuthToken}'s 1h
432
- * default — Lighter caps tokens at 8h hard, and the backend's executor
433
- * runs `verifyPendingAction` then a single `/changeAccountTier` POST,
434
- * which completes well inside an hour.
435
- */
436
- async signAccountTierChange(address, step) {
437
- const apiKey = await this.getLighterKeyStore().get(address);
438
- if (!apiKey) {
439
- throw new PerpsError(PerpsErrorCode.SDKError, `No Lighter API key registered for ${address}. ` +
440
- 'Run prepareAccount / REGISTER_API_KEY first.');
441
- }
442
- const signer = this.getLighterSigner();
443
- const deadline = Math.floor(Date.now() / 1000) + 60 * 60;
444
- const authToken = await signer.createAuthToken(deadline, {
445
- apiKeyPrivateKey: apiKey.apiKeyPrivateKey,
446
- apiKeyIndex: apiKey.apiKeyIndex,
447
- accountIndex: apiKey.accountIndex,
448
- });
449
- return {
450
- action: step.action,
451
- wasmSignParams: step.wasmSignParams,
452
- signedTx: {
453
- // `/changeAccountTier` reads only `txInfo` (the auth token); `txType`
454
- // and `txHash` are placeholders to satisfy the envelope shape.
455
- txType: 0,
456
- txInfo: authToken,
457
- txHash: '',
458
- },
459
- };
460
- }
461
150
  /**
462
- * Return a bearer token that authenticates Lighter's read endpoints
463
- * (getOrders, getOrder, getActivity, getFills).
151
+ * Build (but do not sign or submit) the unsigned action steps for `action`,
152
+ * letting the provider plugin contribute any signer-bearing request fields.
464
153
  *
465
- * Resolution order:
466
- * 1. The long-lived read-only token persisted by `approveReadOnlyToken`,
467
- * when one is stored for this `(address, accountIndex)` AND has not
468
- * passed its recorded `expiry`. The SDK never returns an expired
469
- * stored token.
470
- * 2. A freshly minted 8h Lighter auth token, signed off the user's
471
- * Lighter API key. Requires `REGISTER_API_KEY` to have completed.
472
- * 3. `undefined` — caller falls back to public reads.
473
- *
474
- * `accountIndex` lets callers in pure read-only mode (no API key
475
- * registered) target the RO token. When omitted, the SDK derives it from
476
- * the user's registered API key.
477
- *
478
- * `deadlineSeconds` only affects the standard-token fallback (Lighter caps
479
- * those tokens at 8h). Read-only tokens carry their own mint-time expiry
480
- * recorded by {@link approveReadOnlyToken}.
154
+ * @public
481
155
  */
482
- async createLighterAuthToken(address, deadlineSeconds, accountIndex) {
483
- const apiKey = await this.getLighterKeyStore().get(address);
484
- const resolvedAccountIndex = accountIndex ?? apiKey?.accountIndex;
485
- if (resolvedAccountIndex !== undefined) {
486
- const stored = await this.getLighterReadOnlyTokenManager().get(address, resolvedAccountIndex);
487
- if (stored) {
488
- return stored.token;
489
- }
490
- }
491
- if (!apiKey) {
492
- return undefined;
493
- }
494
- const deadline = deadlineSeconds ?? Math.floor(Date.now() / 1000) + 60 * 60;
495
- const signer = this.getLighterSigner();
496
- return signer.createAuthToken(deadline, {
497
- apiKeyPrivateKey: apiKey.apiKeyPrivateKey,
498
- apiKeyIndex: apiKey.apiKeyIndex,
499
- accountIndex: apiKey.accountIndex,
500
- });
501
- }
502
- /**
503
- * Mint a long-lived Lighter read-only token via Lighter's
504
- * `tokens/create` endpoint and persist it through the configured
505
- * `StorageAdapter`, keyed by `(L1 address, accountIndex)`.
506
- *
507
- * The user's connected wallet signs an EIP-191 message describing the
508
- * mint request; the resulting `Authorization` header authenticates the
509
- * Lighter HTTP call. The bearer string Lighter returns is persisted
510
- * alongside its `expiry` and `scope`; subsequent calls to
511
- * {@link createLighterAuthToken} prefer it over the 8h standard token.
512
- *
513
- * `expirySeconds` is the absolute unix-seconds expiry recorded on
514
- * Lighter's row. Lighter enforces 1 day ≤ lifetime ≤ 10 years
515
- * server-side; the SDK does NOT pre-validate and surfaces Lighter's 400
516
- * verbatim. `scope` defaults to `'all'`; the `'single'` variant is wired
517
- * through but only useful when the caller has a specific reason to scope
518
- * the token to one account.
519
- *
520
- * Requires a USER wallet signer to be set via {@link setSigner} or
521
- * passed at construction — the L1 signature is the user's consent.
522
- */
523
- async approveReadOnlyToken(address, params) {
524
- if (!this.sdkClient.signer) {
525
- throw new PerpsError(PerpsErrorCode.SDKError, 'approveReadOnlyToken requires a wallet signer — pass `signer` to ' +
526
- 'createPerpsClient or call setSigner(walletClient).');
527
- }
528
- const signer = walletClientSigner(this.sdkClient.signer);
529
- return this.getLighterReadOnlyTokenManager().approve(signer, {
530
- address,
531
- ...params,
532
- });
533
- }
534
- /**
535
- * Whether the stored Lighter read-only token for `(address, accountIndex)`
536
- * falls within `thresholdDays` of its `expiry`. Returns `false` when no
537
- * token is stored, when the stored token has already expired, or when
538
- * more than `thresholdDays` of life remain. Intended for widget renewal
539
- * banners (default threshold: 30 days).
540
- */
541
- async isLighterReadOnlyTokenExpiringSoon(address, accountIndex, thresholdDays) {
542
- return this.getLighterReadOnlyTokenManager().isReadOnlyTokenExpiringSoon(address, accountIndex, thresholdDays);
543
- }
544
- // ---------------------------------------------------------------------------
545
- // Generic action helpers
546
- // ---------------------------------------------------------------------------
547
156
  async buildAction(action, params) {
548
- const signerAddress = await this.resolveSignerForAction(action, params.address, params.provider);
157
+ const metadata = await this.getProviderMetadata(params.provider);
158
+ const descriptor = findActionDescriptor(metadata, action);
159
+ const { signerAddress, params: signerParams } = await this.resolveActionRequest(params.provider, descriptor, params.address);
549
160
  return createAction(this.sdkClient, {
550
161
  provider: params.provider,
551
162
  address: params.address,
552
163
  signerAddress,
553
164
  action,
554
- params: params.params,
165
+ params: {
166
+ ...params.params,
167
+ ...signerParams,
168
+ },
555
169
  });
556
170
  }
557
- // ---------------------------------------------------------------------------
558
- // Signing mode management
559
- // ---------------------------------------------------------------------------
560
- async setSigningMode(address, provider, mode) {
561
- const key = this.modeKey(address, provider);
562
- this.signingModes.set(key, mode);
563
- await this.storage.set(this.signingModeStorageKey(address, provider), mode);
564
- if (mode === SigningMode.USER_AGENT &&
565
- (await this.providerUsesAgent(provider))) {
566
- await this.sdkClient.agentManager.getOrCreateAgent(address, provider);
567
- }
568
- }
569
- getSigningMode(address, provider) {
570
- return (this.signingModes.get(this.modeKey(address, provider)) ??
571
- SigningMode.USER_AGENT);
572
- }
573
- async loadSigningMode(address, provider) {
574
- const key = this.modeKey(address, provider);
575
- if (this.signingModes.has(key)) {
576
- return this.signingModes.get(key);
577
- }
578
- const stored = await this.storage.get(this.signingModeStorageKey(address, provider));
579
- const mode = stored === SigningMode.USER_AGENT || stored === SigningMode.USER
580
- ? stored
581
- : SigningMode.USER_AGENT;
582
- this.signingModes.set(key, mode);
583
- return mode;
584
- }
585
- async loadAgentMode(address, provider) {
586
- const mode = await this.loadSigningMode(address, provider);
587
- return mode === SigningMode.USER_AGENT;
588
- }
589
- async setAgentMode(address, provider, useAgent) {
590
- await this.setSigningMode(address, provider, useAgent ? SigningMode.USER_AGENT : SigningMode.USER);
591
- }
592
- async getAgentAddress(address, provider) {
593
- const agent = await this.sdkClient.agentManager.getAgent(address, provider);
594
- return agent.address;
595
- }
596
- async hasAgent(address, provider) {
597
- return this.sdkClient.agentManager.hasAgent(address, provider);
598
- }
599
- async removeAgent(address, provider) {
600
- await this.sdkClient.agentManager.removeAgent(address, provider);
601
- this.signingModes.delete(this.modeKey(address, provider));
602
- await this.storage.remove(this.signingModeStorageKey(address, provider));
603
- }
604
- // ---------------------------------------------------------------------------
605
- // Account
606
- // ---------------------------------------------------------------------------
607
171
  /**
608
172
  * Fetch the user's account state from the backend and attach the
609
173
  * SDK-projected `settings` array — one `AccountConfigSetting` per
610
174
  * descriptor on `Provider.setup` + `Provider.options`. Callers read
611
175
  * `result.settings` directly without re-deriving values from the typed
612
176
  * `AccountConfig`.
177
+ *
178
+ * @throws {PerpsError} When the provider plugin is not registered, or the
179
+ * backend account fetch fails.
180
+ * @public
613
181
  */
614
182
  async getAccount(params) {
183
+ const plugin = this.requireProvider(params.provider);
615
184
  const [response, metadata] = await Promise.all([
616
- getAccount(this.sdkClient, params),
185
+ fetchAccount(this.sdkClient, params),
617
186
  this.getProviderMetadata(params.provider),
618
187
  ]);
619
- const settings = projectAccountConfigSettings(response.config, metadata.setup, metadata.options);
188
+ const settings = plugin.projectConfig(response.config, metadata.setup, metadata.options);
620
189
  return { ...response, settings };
621
190
  }
191
+ /**
192
+ * Roll an already-fetched {@link AccountResponse} (plus its positions) up
193
+ * into an {@link AccountSummary}, delegating to the owning provider so the
194
+ * venue-specific collateral and margin semantics are applied correctly.
195
+ */
196
+ getAccountSummary(account, positions) {
197
+ return this.requireProvider(account.provider).getAccountSummary(account, positions);
198
+ }
622
199
  /**
623
200
  * Thin existence check for a provider account at `address`. Returns
624
201
  * `true` when `getAccount` resolves, `false` when the backend reports
625
202
  * `PerpsErrorCode.AccountNotFound`, and re-throws on any other error
626
203
  * (transport failures, validation errors, server errors).
204
+ *
205
+ * @throws {PerpsError} On any backend error other than
206
+ * `PerpsErrorCode.AccountNotFound`.
207
+ * @public
627
208
  */
628
209
  async accountExists(provider, address) {
629
210
  try {
630
- await getAccount(this.sdkClient, { provider, address });
211
+ await fetchAccount(this.sdkClient, { provider, address });
631
212
  return true;
632
213
  }
633
214
  catch (err) {
@@ -638,292 +219,185 @@ export class PerpsClient {
638
219
  throw err;
639
220
  }
640
221
  }
641
- // ---------------------------------------------------------------------------
642
- // Setup
643
- // ---------------------------------------------------------------------------
644
222
  /**
645
- * Return the unsatisfied entries on `Provider.setup` for this account,
646
- * split by signer role. Trading is gated on `isReady === true`.
223
+ * Return the unsatisfied entries on `Provider.setup` for this account as a
224
+ * flat, self-describing list. Trading is gated on `isReady === true`.
647
225
  *
648
226
  * `Provider.options` descriptors are NEVER returned here — options are
649
227
  * post-setup tunables and never gate trading. Option state is surfaced
650
228
  * separately via `getAccount().settings`.
229
+ *
230
+ * @public
651
231
  */
652
232
  async checkSetup(params) {
653
233
  const { provider, address } = params;
654
- const mode = await this.loadSigningMode(address, provider);
655
- const metadata = await this.getProviderMetadata(provider);
656
- const usesAgent = [
657
- ...metadata.setup,
658
- ...metadata.options,
659
- ...metadata.actions,
660
- ].some((d) => d.signers.includes(PerpsSigner.AGENT));
661
- let agentAddress;
662
- if (mode === SigningMode.USER_AGENT && usesAgent) {
663
- const agent = await this.sdkClient.agentManager.getOrCreateAgent(address, provider);
664
- agentAddress = agent.address;
665
- }
666
- const allInputs = this.buildPrerequisiteInputs(metadata.setup, mode, agentAddress);
667
- if (allInputs.length === 0) {
668
- return { userPrerequisites: [], agentPrerequisites: [], isReady: true };
669
- }
670
- // Build a signer lookup from setup descriptors.
671
- const signersByAction = new Map();
672
- for (const desc of metadata.setup) {
673
- signersByAction.set(desc.type, desc.signers);
674
- }
675
- // Send all to backend via createAction for the first prerequisite type
676
- // The backend filters already-satisfied ones and returns typed data
677
- const { actions } = await this.buildPrerequisites({
678
- provider,
679
- address,
680
- signerAddress: agentAddress,
681
- });
682
- if (actions.length === 0) {
683
- return { userPrerequisites: [], agentPrerequisites: [], isReady: true };
684
- }
685
- const userPrerequisites = actions.filter((a) => {
686
- const signers = signersByAction.get(a.action) ?? [];
687
- return signers.includes(PerpsSigner.USER);
688
- });
689
- const agentPrerequisites = actions.filter((a) => {
690
- const signers = signersByAction.get(a.action) ?? [];
691
- return signers.includes(PerpsSigner.AGENT);
692
- });
234
+ // The backend filters already-satisfied setup actions and returns typed
235
+ // data for those still outstanding; each plugin contributes its own
236
+ // signer-bearing request fields.
237
+ const { actions } = await this.buildProviderSetup({ provider, address });
693
238
  return {
694
- userPrerequisites,
695
- agentPrerequisites,
696
- isReady: false,
239
+ setup: actions,
240
+ isReady: actions.length === 0,
697
241
  };
698
242
  }
699
- async buildPrerequisites(params) {
700
- const mode = await this.loadSigningMode(params.address, params.provider);
701
- let { signerAddress } = params;
702
- if (mode === SigningMode.USER_AGENT && !signerAddress) {
703
- const agent = await this.sdkClient.agentManager.getAgent(params.address, params.provider);
704
- signerAddress = agent.address;
705
- }
706
- const metadata = await this.getProviderMetadata(params.provider);
707
- const allInputs = this.buildPrerequisiteInputs(metadata.setup, mode, signerAddress);
708
- // Use the first prerequisite type as the action type for the batch
709
- // The backend handles all prerequisites in a single createPrerequisite call
243
+ /**
244
+ * Build the unsigned setup `ActionStep`s still outstanding for an account,
245
+ * ordered by descriptor `sequence`. The backend filters already-satisfied
246
+ * setup; each plugin contributes its own signer-bearing request fields and
247
+ * any local-state params (e.g. Lighter's known pubkey).
248
+ *
249
+ * @public
250
+ */
251
+ async buildProviderSetup(params) {
252
+ const { provider, address } = params;
253
+ const metadata = await this.getProviderMetadata(provider);
254
+ const orderedSetup = [...metadata.setup].sort((a, b) => (a.sequence ?? Number.MAX_SAFE_INTEGER) -
255
+ (b.sequence ?? Number.MAX_SAFE_INTEGER));
256
+ const plugin = this.sdkClient.getProvider(provider);
710
257
  const allActions = [];
711
- for (const input of allInputs) {
258
+ for (const descriptor of orderedSetup) {
259
+ const action = descriptor.type;
260
+ const { signerAddress, params: signerParams } = await this.resolveActionRequest(provider, descriptor, address);
261
+ const localParams = plugin?.resolveSetupParams
262
+ ? await plugin.resolveSetupParams(action, address)
263
+ : {};
712
264
  const { actions } = await createAction(this.sdkClient, {
713
- provider: params.provider,
714
- address: params.address,
265
+ provider,
266
+ address,
715
267
  signerAddress,
716
- action: input.key,
717
- params: (input.params ?? {}),
268
+ action,
269
+ params: {
270
+ ...signerParams,
271
+ ...localParams,
272
+ },
718
273
  });
719
274
  allActions.push(...actions);
720
275
  }
721
276
  return { actions: allActions };
722
277
  }
723
278
  /**
724
- * Default mode the SDK auto-applies after `APPROVE_AGENT` on a provider
725
- * whose `options` array exposes a writable `ACCOUNT_MODE` (today
726
- * Hyperliquid). Callers can override this through a subsequent
727
- * `ACCOUNT_MODE` dispatch.
279
+ * Submit the signed setup steps returned by `checkSetup` (and signed by the
280
+ * caller / `signProviderSetupAction`). Routes the batch on the first step's
281
+ * action and lets the plugin contribute that action's `signerAddress`.
282
+ * Throws on any per-step venue rejection.
283
+ *
284
+ * @public
728
285
  */
729
- static DEFAULT_ACCOUNT_MODE = 'unifiedAccount';
286
+ async executeProviderSetup(params) {
287
+ const { provider, address, setup, signedActions } = params;
288
+ if (signedActions.length === 0) {
289
+ return { results: { results: [] } };
290
+ }
291
+ const action = setup[0]?.action ?? signedActions[0].action;
292
+ const metadata = await this.getProviderMetadata(provider);
293
+ const descriptor = findActionDescriptor(metadata, action);
294
+ const { signerAddress } = await this.resolveActionRequest(provider, descriptor, address);
295
+ const results = await executeAction(this.sdkClient, {
296
+ provider,
297
+ address,
298
+ // The submitting account: the plugin-resolved signer (Hyperliquid's
299
+ // agent) when present, else the end-user's address.
300
+ signerAddress: signerAddress ?? address,
301
+ action,
302
+ actions: signedActions,
303
+ });
304
+ const failure = results.results.find((r) => !r.success);
305
+ if (failure) {
306
+ throw new PerpsError(PerpsErrorCode.ExchangeRejected, failure.error);
307
+ }
308
+ return { results };
309
+ }
730
310
  /**
731
- * Prepare an `ACCOUNT_MODE` change by proactively reading the account's
732
- * current `config.abstractionMode` and routing to the correct signer:
311
+ * Sign and submit one pre-staged setup `ActionStep` end-to-end.
733
312
  *
734
- * - `abstractionMode == null` (never set, e.g. a fresh HL account):
735
- * the change MAY be performed by the agent signer. Build, sign with
736
- * the agent key, and dispatch. Returns `{ results }`.
737
- * - `abstractionMode === mode`: idempotent no-op. Returns an empty
738
- * results envelope without contacting `/createAction` or `/executeAction`.
739
- * - `abstractionMode` set to any other value: HL requires a user-wallet
740
- * signature to change the abstraction once it has been set. Build the
741
- * action unsigned and return it as `{ fallback }` so the caller can
742
- * surface a wallet prompt via `fallbackUserPrerequisites`.
313
+ * The caller is expected to have already obtained the step from a prior
314
+ * {@link checkSetup} call (typically cached by the widget's react-query)
315
+ * we do NOT refetch. This avoids the double `createAction` round-trip and
316
+ * keeps the nonce that was allocated at staging time committed all the way
317
+ * through submit. If the cached step has gone stale (Lighter's `/nextNonce`
318
+ * advanced underneath us), `executeProviderSetup` will surface a nonce
319
+ * conflict that the caller invalidates on, refetches `checkSetup`, and
320
+ * retries with a fresh step.
743
321
  *
744
- * Network errors from `/account` propagate we never guess the signer.
745
- * `account.config.provider !== 'hyperliquid'` also throws: this helper
746
- * is HL-specific and the dispatcher should never reach it for another
747
- * provider (gated by `hasWritableAccountMode`).
322
+ * @throws {PerpsError} When the step's action is not in the provider's
323
+ * `setup` descriptors.
324
+ * @public
748
325
  */
749
- async prepareAccountModeChange(provider, address, mode) {
750
- const account = await getAccount(this.sdkClient, { provider, address });
751
- if (account.config.provider !== 'hyperliquid') {
752
- throw new PerpsError(PerpsErrorCode.SDKError, `prepareAccountModeChange is Hyperliquid-specific, but ` +
753
- `getAccount returned config for provider ` +
754
- `'${account.config.provider}'.`);
755
- }
756
- const currentStatus = account.config.abstractionMode;
757
- // Idempotent short-circuit: already in the requested mode.
758
- if (currentStatus === mode) {
759
- return {};
760
- }
761
- // Never set → the agent is authorised to perform the change.
762
- if (currentStatus == null) {
763
- const agent = await this.sdkClient.agentManager.getAgent(address, provider);
764
- const { actions } = await createAction(this.sdkClient, {
765
- provider,
766
- address,
767
- signerAddress: agent.address,
768
- action: ActionType.ACCOUNT_MODE,
769
- params: { mode },
770
- });
771
- if (actions.length === 0) {
772
- // Backend's per-mode early-exit (defensive — shouldn't fire given
773
- // the short-circuit above, but covers a race between our /account
774
- // read and the backend's view of the current status).
775
- return { results: { results: [] } };
776
- }
777
- const signedActions = await Promise.all(actions.map(async (a) => ({
778
- action: a.action,
779
- typedData: a.typedData,
780
- signature: await signTypedData(agent.privateKey, a.typedData),
781
- })));
782
- const results = await executeAction(this.sdkClient, {
783
- provider,
784
- address,
785
- signerAddress: agent.address,
786
- action: ActionType.ACCOUNT_MODE,
787
- actions: signedActions,
788
- });
789
- return { results };
326
+ async executeProviderSetupAction(params) {
327
+ const { provider, address, step } = params;
328
+ const metadata = await this.getProviderMetadata(provider);
329
+ const descriptor = metadata.setup.find((d) => d.type === step.action);
330
+ if (!descriptor) {
331
+ throw new PerpsError(PerpsErrorCode.SDKError, `Action '${step.action}' is not in '${provider}'.setup`);
790
332
  }
791
- // Already set to a different mode → HL requires a user-wallet signature.
792
- // Build the action unsigned and surface it as a fallback to the caller.
793
- const { actions: fallbackActions } = await createAction(this.sdkClient, {
333
+ const signed = await this.signProviderSetupAction(provider, address, step);
334
+ await this.executeProviderSetup({
794
335
  provider,
795
336
  address,
796
- action: ActionType.ACCOUNT_MODE,
797
- params: { mode },
337
+ setup: [step],
338
+ signedActions: [signed],
798
339
  });
799
- return {
800
- fallback: fallbackActions.length > 0 ? fallbackActions : undefined,
801
- };
802
340
  }
803
341
  /**
804
- * True when the provider exposes an `ACCOUNT_MODE` descriptor (in `setup`
805
- * or `options`) whose `mode` Param has a writable enumeration of values.
806
- * Providers that omit `ACCOUNT_MODE` or expose it as read-only / free-form
807
- * input return false.
342
+ * Sign and submit a single provider-option change (a `Provider.options`
343
+ * tunable such as Lighter `ACCOUNT_TYPE` or Hyperliquid `ACCOUNT_MODE`)
344
+ * end-to-end, throwing on a venue rejection.
345
+ *
346
+ * Options are dispatched through the same {@link execute} pipeline as
347
+ * trades, but unlike a trade an option change is a single mandatory action:
348
+ * a per-action `success: false` (returned as a 200 OK) means the user's
349
+ * selection was rejected and must surface, not be silently dropped. This
350
+ * wrapper inspects the result and throws a {@link PerpsError} carrying the
351
+ * venue `error`, giving options the same throw contract that setup has via
352
+ * {@link executeProviderSetupAction}. The only structural difference is that
353
+ * an option carries `params` (the selected value) rather than a pre-staged
354
+ * step.
355
+ *
356
+ * `execute` itself is unchanged — it still returns results without throwing,
357
+ * which the trade hooks rely on for partial-fill handling.
358
+ *
359
+ * @throws {PerpsError} `PerpsErrorCode.ExchangeRejected` carrying the venue
360
+ * error when any returned result has `success: false`; also the errors
361
+ * `execute` itself can throw (unregistered provider, no signer, signing
362
+ * failure).
363
+ * @public
808
364
  */
809
- static hasWritableAccountMode(metadata) {
810
- const item = [...metadata.setup, ...metadata.options].find((i) => i.type === ActionType.ACCOUNT_MODE);
811
- if (!item) {
812
- return false;
813
- }
814
- const modeParam = item.params.find((p) => p.name === 'mode');
815
- if (!modeParam) {
816
- return false;
365
+ async executeProviderOption(params) {
366
+ const { results } = await this.execute(params);
367
+ const failure = results.find((r) => !r.success);
368
+ if (failure) {
369
+ throw new PerpsError(PerpsErrorCode.ExchangeRejected, failure.error);
817
370
  }
818
- // Writable multi-option: `values` enumerates choices and `readOnly`
819
- // is not set (treat absence as writable, matching the descriptor
820
- // contract in `Param`).
821
- if (!modeParam.values || modeParam.values.length === 0) {
822
- return false;
823
- }
824
- return !modeParam.readOnly;
825
371
  }
826
372
  /**
827
- * Submit the signed setup steps returned by `checkSetup` (and seeded
828
- * with user-wallet signatures by the caller). Internally splits into:
373
+ * Place a market or limit order. Convenience wrapper over {@link execute}
374
+ * with `ActionType.PLACE_ORDER`.
829
375
  *
830
- * 1. Submit user-signed setup actions.
831
- * 2. After a successful `APPROVE_AGENT`, auto-upgrade `ACCOUNT_MODE`
832
- * to the SDK's default when the provider exposes a writable
833
- * `ACCOUNT_MODE` Param (Hyperliquid today). The SDK reads
834
- * `account.config.abstractionMode` to choose the signer: `null` →
835
- * agent dispatch; non-null → wallet fallback returned in
836
- * `fallbackUserPrerequisites`.
837
- * 3. Sign and submit any pre-staged agent-side setup actions the
838
- * backend returned alongside the user-signed ones.
376
+ * @throws {PerpsError} When the provider is unregistered or the action
377
+ * cannot be signed/submitted.
378
+ * @example
379
+ * ```ts
380
+ * await client.placeOrder({
381
+ * provider: 'hyperliquid',
382
+ * address: '0xUser',
383
+ * market: { symbol: 'ETH' },
384
+ * side: 'buy',
385
+ * size: '0.1',
386
+ * })
387
+ * ```
388
+ * @public
839
389
  */
840
- async satisfySetup(params) {
841
- const { provider, address, required, userSignedActions } = params;
842
- const mode = await this.loadSigningMode(address, provider);
843
- // 1. Submit user-signed prerequisites
844
- let userResults = { results: [] };
845
- if (userSignedActions.length > 0) {
846
- const signerAddress = mode === SigningMode.USER_AGENT
847
- ? (await this.sdkClient.agentManager.getAgent(address, provider))
848
- .address
849
- : address;
850
- // Submit all user-signed actions — use first action's type for routing
851
- const firstAction = required.userPrerequisites[0]?.action;
852
- userResults = await executeAction(this.sdkClient, {
853
- provider,
854
- address,
855
- signerAddress,
856
- action: (firstAction ?? ActionType.APPROVE_AGENT),
857
- actions: userSignedActions,
858
- });
859
- const mandatoryFailure = userResults.results.find((r) => !r.success);
860
- if (mandatoryFailure) {
861
- return { userResults };
862
- }
863
- }
864
- // 2. Auto-upgrade ACCOUNT_MODE after APPROVE_AGENT.
865
- //
866
- // When the user-signed setup included a successful APPROVE_AGENT, the
867
- // freshly approved agent is now authorised to sign account-level
868
- // actions for accounts whose abstraction has never been set. If the
869
- // provider exposes a writable `ACCOUNT_MODE` descriptor (Hyperliquid
870
- // today), the SDK reads `account.config.abstractionMode` to decide
871
- // the signer: `null` → agent-dispatch silently to the SDK's preferred
872
- // default; non-null → return a wallet-signing fallback step. Either
873
- // way the chain does NOT abort onboarding — `ACCOUNT_MODE` lives on
874
- // `Provider.options`, not `Provider.setup`, and so does not gate
875
- // trading.
876
- let agentResults;
877
- let fallbackUserPrerequisites;
878
- if (mode === SigningMode.USER_AGENT) {
879
- const justApprovedAgent = userResults.results.some((r) => r.success && r.action === ActionType.APPROVE_AGENT);
880
- if (justApprovedAgent) {
881
- const metadata = await this.getProviderMetadata(provider);
882
- if (PerpsClient.hasWritableAccountMode(metadata)) {
883
- const upgrade = await this.prepareAccountModeChange(provider, address, PerpsClient.DEFAULT_ACCOUNT_MODE);
884
- agentResults = upgrade.results;
885
- fallbackUserPrerequisites = upgrade.fallback;
886
- }
887
- }
888
- }
889
- // 3. Sign and submit any pre-staged agent prerequisites returned by the
890
- // backend's `buildPrerequisites` call. ACCOUNT_MODE is filtered out of
891
- // bulk staging (it requires explicit `mode` params), so this block
892
- // today only runs for future agent-signed steps the backend chooses
893
- // to stage.
894
- if (required.agentPrerequisites.length > 0 &&
895
- mode === SigningMode.USER_AGENT) {
896
- const agent = await this.sdkClient.agentManager.getAgent(address, provider);
897
- const signedAgentActions = await Promise.all(required.agentPrerequisites.map(async (action) => ({
898
- action: action.action,
899
- typedData: action.typedData,
900
- signature: await signTypedData(agent.privateKey, action.typedData),
901
- })));
902
- const firstAction = required.agentPrerequisites[0]?.action;
903
- const stagedResults = await executeAction(this.sdkClient, {
904
- provider,
905
- address,
906
- signerAddress: agent.address,
907
- action: (firstAction ?? ActionType.ACCOUNT_MODE),
908
- actions: signedAgentActions,
909
- });
910
- // Merge staged-prereq results with any auto-upgrade results from step 2.
911
- agentResults = {
912
- results: [...(agentResults?.results ?? []), ...stagedResults.results],
913
- };
914
- }
915
- return {
916
- userResults,
917
- ...(agentResults ? { agentResults } : {}),
918
- ...(fallbackUserPrerequisites ? { fallbackUserPrerequisites } : {}),
919
- };
920
- }
921
- // ---------------------------------------------------------------------------
922
- // Typed action helpers
923
- // ---------------------------------------------------------------------------
924
390
  async placeOrder(params) {
925
391
  return this.execute({ ...params, action: ActionType.PLACE_ORDER, params });
926
392
  }
393
+ /**
394
+ * Place a trigger (take-profit / stop-loss) order. Convenience wrapper over
395
+ * {@link execute} with `ActionType.PLACE_TRIGGER_ORDER`.
396
+ *
397
+ * @throws {PerpsError} When the provider is unregistered or the action
398
+ * cannot be signed/submitted.
399
+ * @public
400
+ */
927
401
  async placeTriggerOrder(params) {
928
402
  return this.execute({
929
403
  ...params,
@@ -931,12 +405,36 @@ export class PerpsClient {
931
405
  params,
932
406
  });
933
407
  }
408
+ /**
409
+ * Cancel one or more open orders. Convenience wrapper over {@link execute}
410
+ * with `ActionType.CANCEL_ORDER`.
411
+ *
412
+ * @throws {PerpsError} When the provider is unregistered or the action
413
+ * cannot be signed/submitted.
414
+ * @public
415
+ */
934
416
  async cancelOrders(params) {
935
417
  return this.execute({ ...params, action: ActionType.CANCEL_ORDER, params });
936
418
  }
419
+ /**
420
+ * Modify one or more open orders. Convenience wrapper over {@link execute}
421
+ * with `ActionType.MODIFY_ORDER`.
422
+ *
423
+ * @throws {PerpsError} When the provider is unregistered or the action
424
+ * cannot be signed/submitted.
425
+ * @public
426
+ */
937
427
  async modifyOrders(params) {
938
428
  return this.execute({ ...params, action: ActionType.MODIFY_ORDER, params });
939
429
  }
430
+ /**
431
+ * Add or remove isolated-position margin. Convenience wrapper over
432
+ * {@link execute} with `ActionType.UPDATE_POSITION_MARGIN`.
433
+ *
434
+ * @throws {PerpsError} When the provider is unregistered or the action
435
+ * cannot be signed/submitted.
436
+ * @public
437
+ */
940
438
  async updatePositionMargin(params) {
941
439
  return this.execute({
942
440
  ...params,
@@ -944,6 +442,14 @@ export class PerpsClient {
944
442
  params,
945
443
  });
946
444
  }
445
+ /**
446
+ * Withdraw funds from the provider account. Convenience wrapper over
447
+ * {@link execute} with `ActionType.WITHDRAWAL`.
448
+ *
449
+ * @throws {PerpsError} When the provider is unregistered or the action
450
+ * cannot be signed/submitted.
451
+ * @public
452
+ */
947
453
  async withdraw(params) {
948
454
  return this.execute({
949
455
  provider: params.provider,
@@ -953,35 +459,40 @@ export class PerpsClient {
953
459
  });
954
460
  }
955
461
  /**
956
- * Execute any action through the SDK's signing pipeline. Signing is routed
957
- * by the action's descriptor in provider metadata the agent keypair, the
958
- * configured WalletClient signer, the Lighter API key, or an EVM tx — as
959
- * the descriptor's `signers` and `signingMethod` dictate.
462
+ * Execute any action through the SDK's signing pipeline: fetch the unsigned
463
+ * steps, delegate signing to the provider plugin (which branches on the
464
+ * descriptor's scheme and signer internally), and submit. Core stays
465
+ * signer-agnostic — the plugin owns WHO signs and HOW.
466
+ *
467
+ * @throws {PerpsError} When the action is not declared by the provider,
468
+ * the plugin cannot sign it, or submission fails.
469
+ * @public
960
470
  */
961
471
  async execute(params) {
962
- await this.loadSigningMode(params.address, params.provider);
963
- const metadata = await this.getProviderMetadata(params.provider);
964
- const descriptor = findActionDescriptor(metadata, params.action);
965
- let lastError;
966
- for (let attempt = 0; attempt < MAX_NONCE_RETRIES; attempt++) {
967
- const { actions } = await this.buildAction(params.action, {
968
- provider: params.provider,
969
- address: params.address,
970
- params: params.params,
971
- });
972
- try {
973
- return await this.autoSignAndExecute(params.provider, params.address, params.action, actions, descriptor);
974
- }
975
- catch (err) {
976
- if (err instanceof PerpsError &&
977
- err.code === PerpsErrorCode.InvalidNonce) {
978
- lastError = err;
979
- continue;
980
- }
981
- throw err;
982
- }
983
- }
984
- throw lastError;
472
+ const { provider, address, action } = params;
473
+ const metadata = await this.getProviderMetadata(provider);
474
+ const descriptor = findActionDescriptor(metadata, action);
475
+ const { signerAddress, params: signerParams } = await this.resolveActionRequest(provider, descriptor, address);
476
+ const { actions } = await createAction(this.sdkClient, {
477
+ provider,
478
+ address,
479
+ signerAddress,
480
+ action,
481
+ params: {
482
+ ...params.params,
483
+ ...signerParams,
484
+ },
485
+ });
486
+ const signedActions = await this.delegateSignActions(provider, address, descriptor, actions);
487
+ return executeAction(this.sdkClient, {
488
+ provider,
489
+ address,
490
+ // The submitting account: the plugin-resolved signer (Hyperliquid's
491
+ // agent) when present, else the end-user's address.
492
+ signerAddress: signerAddress ?? address,
493
+ action,
494
+ actions: signedActions,
495
+ });
985
496
  }
986
497
  }
987
498
  //# sourceMappingURL=PerpsClient.js.map