@lifi/perps-sdk-provider-lighter 0.2.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (405) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +176 -0
  3. package/dist/cjs/LighterProvider.d.ts +20 -0
  4. package/dist/cjs/LighterProvider.d.ts.map +1 -0
  5. package/dist/cjs/LighterProvider.js +592 -0
  6. package/dist/cjs/LighterProvider.js.map +1 -0
  7. package/dist/cjs/accountConfig.d.ts +3 -0
  8. package/dist/cjs/accountConfig.d.ts.map +1 -0
  9. package/dist/cjs/accountConfig.js +69 -0
  10. package/dist/cjs/accountConfig.js.map +1 -0
  11. package/dist/cjs/accountSummary.d.ts +3 -0
  12. package/dist/cjs/accountSummary.d.ts.map +1 -0
  13. package/dist/cjs/accountSummary.js +8 -0
  14. package/dist/cjs/accountSummary.js.map +1 -0
  15. package/dist/cjs/constants.d.ts +14 -0
  16. package/dist/cjs/constants.d.ts.map +1 -0
  17. package/dist/cjs/constants.js +18 -0
  18. package/dist/cjs/constants.js.map +1 -0
  19. package/dist/cjs/index.d.ts +11 -0
  20. package/dist/cjs/index.d.ts.map +1 -0
  21. package/dist/cjs/index.js +35 -0
  22. package/dist/cjs/index.js.map +1 -0
  23. package/dist/cjs/package.json +1 -0
  24. package/dist/cjs/signers/LighterKeyStore.d.ts +18 -0
  25. package/dist/cjs/signers/LighterKeyStore.d.ts.map +1 -0
  26. package/dist/cjs/signers/LighterKeyStore.js +54 -0
  27. package/dist/cjs/signers/LighterKeyStore.js.map +1 -0
  28. package/dist/cjs/signers/LighterReadOnlyTokenManager.d.ts +56 -0
  29. package/dist/cjs/signers/LighterReadOnlyTokenManager.d.ts.map +1 -0
  30. package/dist/cjs/signers/LighterReadOnlyTokenManager.js +127 -0
  31. package/dist/cjs/signers/LighterReadOnlyTokenManager.js.map +1 -0
  32. package/dist/cjs/signers/LighterSigner.d.ts +41 -0
  33. package/dist/cjs/signers/LighterSigner.d.ts.map +1 -0
  34. package/dist/cjs/signers/LighterSigner.js +175 -0
  35. package/dist/cjs/signers/LighterSigner.js.map +1 -0
  36. package/dist/cjs/signers/createAuthToken.d.ts +12 -0
  37. package/dist/cjs/signers/createAuthToken.d.ts.map +1 -0
  38. package/dist/cjs/signers/createAuthToken.js +28 -0
  39. package/dist/cjs/signers/createAuthToken.js.map +1 -0
  40. package/dist/cjs/signers/index.d.ts +11 -0
  41. package/dist/cjs/signers/index.d.ts.map +1 -0
  42. package/dist/cjs/signers/index.js +19 -0
  43. package/dist/cjs/signers/index.js.map +1 -0
  44. package/dist/cjs/signers/signActions.d.ts +15 -0
  45. package/dist/cjs/signers/signActions.d.ts.map +1 -0
  46. package/dist/cjs/signers/signActions.js +142 -0
  47. package/dist/cjs/signers/signActions.js.map +1 -0
  48. package/dist/cjs/signers/wasmLoader.d.ts +42 -0
  49. package/dist/cjs/signers/wasmLoader.d.ts.map +1 -0
  50. package/dist/cjs/signers/wasmLoader.js +166 -0
  51. package/dist/cjs/signers/wasmLoader.js.map +1 -0
  52. package/dist/cjs/types/account.d.ts +97 -0
  53. package/dist/cjs/types/account.d.ts.map +1 -0
  54. package/dist/cjs/types/account.js +3 -0
  55. package/dist/cjs/types/account.js.map +1 -0
  56. package/dist/cjs/types/action.d.ts +72 -0
  57. package/dist/cjs/types/action.d.ts.map +1 -0
  58. package/dist/cjs/types/action.js +23 -0
  59. package/dist/cjs/types/action.js.map +1 -0
  60. package/dist/cjs/types/activity.d.ts +73 -0
  61. package/dist/cjs/types/activity.d.ts.map +1 -0
  62. package/dist/cjs/types/activity.js +3 -0
  63. package/dist/cjs/types/activity.js.map +1 -0
  64. package/dist/cjs/types/asset.d.ts +122 -0
  65. package/dist/cjs/types/asset.d.ts.map +1 -0
  66. package/dist/cjs/types/asset.js +3 -0
  67. package/dist/cjs/types/asset.js.map +1 -0
  68. package/dist/cjs/types/fill.d.ts +29 -0
  69. package/dist/cjs/types/fill.d.ts.map +1 -0
  70. package/dist/cjs/types/fill.js +3 -0
  71. package/dist/cjs/types/fill.js.map +1 -0
  72. package/dist/cjs/types/index.d.ts +9 -0
  73. package/dist/cjs/types/index.d.ts.map +1 -0
  74. package/dist/cjs/types/index.js +25 -0
  75. package/dist/cjs/types/index.js.map +1 -0
  76. package/dist/cjs/types/order.d.ts +57 -0
  77. package/dist/cjs/types/order.d.ts.map +1 -0
  78. package/dist/cjs/types/order.js +3 -0
  79. package/dist/cjs/types/order.js.map +1 -0
  80. package/dist/cjs/types/submit.d.ts +39 -0
  81. package/dist/cjs/types/submit.d.ts.map +1 -0
  82. package/dist/cjs/types/submit.js +3 -0
  83. package/dist/cjs/types/submit.js.map +1 -0
  84. package/dist/cjs/types/ws.d.ts +84 -0
  85. package/dist/cjs/types/ws.d.ts.map +1 -0
  86. package/dist/cjs/types/ws.js +3 -0
  87. package/dist/cjs/types/ws.js.map +1 -0
  88. package/dist/cjs/utils/activityCursor.d.ts +12 -0
  89. package/dist/cjs/utils/activityCursor.d.ts.map +1 -0
  90. package/dist/cjs/utils/activityCursor.js +85 -0
  91. package/dist/cjs/utils/activityCursor.js.map +1 -0
  92. package/dist/cjs/utils/apiClient.d.ts +26 -0
  93. package/dist/cjs/utils/apiClient.d.ts.map +1 -0
  94. package/dist/cjs/utils/apiClient.js +94 -0
  95. package/dist/cjs/utils/apiClient.js.map +1 -0
  96. package/dist/cjs/utils/fetchDetailedAccount.d.ts +5 -0
  97. package/dist/cjs/utils/fetchDetailedAccount.d.ts.map +1 -0
  98. package/dist/cjs/utils/fetchDetailedAccount.js +22 -0
  99. package/dist/cjs/utils/fetchDetailedAccount.js.map +1 -0
  100. package/dist/cjs/utils/index.d.ts +16 -0
  101. package/dist/cjs/utils/index.d.ts.map +1 -0
  102. package/dist/cjs/utils/index.js +45 -0
  103. package/dist/cjs/utils/index.js.map +1 -0
  104. package/dist/cjs/utils/lighterAsset.d.ts +3 -0
  105. package/dist/cjs/utils/lighterAsset.d.ts.map +1 -0
  106. package/dist/cjs/utils/lighterAsset.js +12 -0
  107. package/dist/cjs/utils/lighterAsset.js.map +1 -0
  108. package/dist/cjs/utils/liquidation.d.ts +4 -0
  109. package/dist/cjs/utils/liquidation.d.ts.map +1 -0
  110. package/dist/cjs/utils/liquidation.js +16 -0
  111. package/dist/cjs/utils/liquidation.js.map +1 -0
  112. package/dist/cjs/utils/mapFill.d.ts +4 -0
  113. package/dist/cjs/utils/mapFill.d.ts.map +1 -0
  114. package/dist/cjs/utils/mapFill.js +61 -0
  115. package/dist/cjs/utils/mapFill.js.map +1 -0
  116. package/dist/cjs/utils/mapOpenPositions.d.ts +4 -0
  117. package/dist/cjs/utils/mapOpenPositions.d.ts.map +1 -0
  118. package/dist/cjs/utils/mapOpenPositions.js +9 -0
  119. package/dist/cjs/utils/mapOpenPositions.js.map +1 -0
  120. package/dist/cjs/utils/mapOrder.d.ts +15 -0
  121. package/dist/cjs/utils/mapOrder.d.ts.map +1 -0
  122. package/dist/cjs/utils/mapOrder.js +164 -0
  123. package/dist/cjs/utils/mapOrder.js.map +1 -0
  124. package/dist/cjs/utils/mapPosition.d.ts +4 -0
  125. package/dist/cjs/utils/mapPosition.d.ts.map +1 -0
  126. package/dist/cjs/utils/mapPosition.js +30 -0
  127. package/dist/cjs/utils/mapPosition.js.map +1 -0
  128. package/dist/cjs/utils/ohlcvInterval.d.ts +2 -0
  129. package/dist/cjs/utils/ohlcvInterval.d.ts.map +1 -0
  130. package/dist/cjs/utils/ohlcvInterval.js +26 -0
  131. package/dist/cjs/utils/ohlcvInterval.js.map +1 -0
  132. package/dist/cjs/utils/orderFormatting.d.ts +4 -0
  133. package/dist/cjs/utils/orderFormatting.d.ts.map +1 -0
  134. package/dist/cjs/utils/orderFormatting.js +23 -0
  135. package/dist/cjs/utils/orderFormatting.js.map +1 -0
  136. package/dist/cjs/utils/time.d.ts +3 -0
  137. package/dist/cjs/utils/time.d.ts.map +1 -0
  138. package/dist/cjs/utils/time.js +8 -0
  139. package/dist/cjs/utils/time.js.map +1 -0
  140. package/dist/cjs/utils/wireEncoding.d.ts +9 -0
  141. package/dist/cjs/utils/wireEncoding.d.ts.map +1 -0
  142. package/dist/cjs/utils/wireEncoding.js +87 -0
  143. package/dist/cjs/utils/wireEncoding.js.map +1 -0
  144. package/dist/cjs/websocket/LighterWsProvider.d.ts +45 -0
  145. package/dist/cjs/websocket/LighterWsProvider.d.ts.map +1 -0
  146. package/dist/cjs/websocket/LighterWsProvider.js +396 -0
  147. package/dist/cjs/websocket/LighterWsProvider.js.map +1 -0
  148. package/dist/esm/LighterProvider.d.ts +105 -0
  149. package/dist/esm/LighterProvider.d.ts.map +1 -0
  150. package/dist/esm/LighterProvider.js +684 -0
  151. package/dist/esm/LighterProvider.js.map +1 -0
  152. package/dist/esm/accountConfig.d.ts +14 -0
  153. package/dist/esm/accountConfig.d.ts.map +1 -0
  154. package/dist/esm/accountConfig.js +135 -0
  155. package/dist/esm/accountConfig.js.map +1 -0
  156. package/dist/esm/accountSummary.d.ts +12 -0
  157. package/dist/esm/accountSummary.d.ts.map +1 -0
  158. package/dist/esm/accountSummary.js +14 -0
  159. package/dist/esm/accountSummary.js.map +1 -0
  160. package/dist/esm/constants.d.ts +74 -0
  161. package/dist/esm/constants.d.ts.map +1 -0
  162. package/dist/esm/constants.js +73 -0
  163. package/dist/esm/constants.js.map +1 -0
  164. package/dist/esm/index.d.ts +22 -0
  165. package/dist/esm/index.d.ts.map +1 -0
  166. package/dist/esm/index.js +22 -0
  167. package/dist/esm/index.js.map +1 -0
  168. package/dist/esm/package.json +1 -0
  169. package/dist/esm/signers/LighterKeyStore.d.ts +24 -0
  170. package/dist/esm/signers/LighterKeyStore.d.ts.map +1 -0
  171. package/dist/esm/signers/LighterKeyStore.js +55 -0
  172. package/dist/esm/signers/LighterKeyStore.js.map +1 -0
  173. package/dist/esm/signers/LighterReadOnlyTokenManager.d.ts +157 -0
  174. package/dist/esm/signers/LighterReadOnlyTokenManager.d.ts.map +1 -0
  175. package/dist/esm/signers/LighterReadOnlyTokenManager.js +194 -0
  176. package/dist/esm/signers/LighterReadOnlyTokenManager.js.map +1 -0
  177. package/dist/esm/signers/LighterSigner.d.ts +94 -0
  178. package/dist/esm/signers/LighterSigner.d.ts.map +1 -0
  179. package/dist/esm/signers/LighterSigner.js +228 -0
  180. package/dist/esm/signers/LighterSigner.js.map +1 -0
  181. package/dist/esm/signers/createAuthToken.d.ts +36 -0
  182. package/dist/esm/signers/createAuthToken.d.ts.map +1 -0
  183. package/dist/esm/signers/createAuthToken.js +42 -0
  184. package/dist/esm/signers/createAuthToken.js.map +1 -0
  185. package/dist/esm/signers/index.d.ts +11 -0
  186. package/dist/esm/signers/index.d.ts.map +1 -0
  187. package/dist/esm/signers/index.js +7 -0
  188. package/dist/esm/signers/index.js.map +1 -0
  189. package/dist/esm/signers/signActions.d.ts +54 -0
  190. package/dist/esm/signers/signActions.d.ts.map +1 -0
  191. package/dist/esm/signers/signActions.js +193 -0
  192. package/dist/esm/signers/signActions.js.map +1 -0
  193. package/dist/esm/signers/wasmLoader.d.ts +79 -0
  194. package/dist/esm/signers/wasmLoader.d.ts.map +1 -0
  195. package/dist/esm/signers/wasmLoader.js +180 -0
  196. package/dist/esm/signers/wasmLoader.js.map +1 -0
  197. package/dist/esm/types/account.d.ts +113 -0
  198. package/dist/esm/types/account.d.ts.map +1 -0
  199. package/dist/esm/types/account.js +4 -0
  200. package/dist/esm/types/account.js.map +1 -0
  201. package/dist/esm/types/action.d.ts +146 -0
  202. package/dist/esm/types/action.d.ts.map +1 -0
  203. package/dist/esm/types/action.js +50 -0
  204. package/dist/esm/types/action.js.map +1 -0
  205. package/dist/esm/types/activity.d.ts +83 -0
  206. package/dist/esm/types/activity.d.ts.map +1 -0
  207. package/dist/esm/types/activity.js +4 -0
  208. package/dist/esm/types/activity.js.map +1 -0
  209. package/dist/esm/types/asset.d.ts +134 -0
  210. package/dist/esm/types/asset.d.ts.map +1 -0
  211. package/dist/esm/types/asset.js +3 -0
  212. package/dist/esm/types/asset.js.map +1 -0
  213. package/dist/esm/types/fill.d.ts +31 -0
  214. package/dist/esm/types/fill.d.ts.map +1 -0
  215. package/dist/esm/types/fill.js +3 -0
  216. package/dist/esm/types/fill.js.map +1 -0
  217. package/dist/esm/types/index.d.ts +9 -0
  218. package/dist/esm/types/index.d.ts.map +1 -0
  219. package/dist/esm/types/index.js +12 -0
  220. package/dist/esm/types/index.js.map +1 -0
  221. package/dist/esm/types/order.d.ts +61 -0
  222. package/dist/esm/types/order.d.ts.map +1 -0
  223. package/dist/esm/types/order.js +3 -0
  224. package/dist/esm/types/order.js.map +1 -0
  225. package/dist/esm/types/submit.d.ts +76 -0
  226. package/dist/esm/types/submit.d.ts.map +1 -0
  227. package/dist/esm/types/submit.js +3 -0
  228. package/dist/esm/types/submit.js.map +1 -0
  229. package/dist/esm/types/ws.d.ts +124 -0
  230. package/dist/esm/types/ws.d.ts.map +1 -0
  231. package/dist/esm/types/ws.js +11 -0
  232. package/dist/esm/types/ws.js.map +1 -0
  233. package/dist/esm/utils/activityCursor.d.ts +51 -0
  234. package/dist/esm/utils/activityCursor.d.ts.map +1 -0
  235. package/dist/esm/utils/activityCursor.js +99 -0
  236. package/dist/esm/utils/activityCursor.js.map +1 -0
  237. package/dist/esm/utils/apiClient.d.ts +65 -0
  238. package/dist/esm/utils/apiClient.d.ts.map +1 -0
  239. package/dist/esm/utils/apiClient.js +131 -0
  240. package/dist/esm/utils/apiClient.js.map +1 -0
  241. package/dist/esm/utils/fetchDetailedAccount.d.ts +11 -0
  242. package/dist/esm/utils/fetchDetailedAccount.d.ts.map +1 -0
  243. package/dist/esm/utils/fetchDetailedAccount.js +24 -0
  244. package/dist/esm/utils/fetchDetailedAccount.js.map +1 -0
  245. package/dist/esm/utils/index.d.ts +16 -0
  246. package/dist/esm/utils/index.d.ts.map +1 -0
  247. package/dist/esm/utils/index.js +17 -0
  248. package/dist/esm/utils/index.js.map +1 -0
  249. package/dist/esm/utils/lighterAsset.d.ts +4 -0
  250. package/dist/esm/utils/lighterAsset.d.ts.map +1 -0
  251. package/dist/esm/utils/lighterAsset.js +9 -0
  252. package/dist/esm/utils/lighterAsset.js.map +1 -0
  253. package/dist/esm/utils/liquidation.d.ts +22 -0
  254. package/dist/esm/utils/liquidation.d.ts.map +1 -0
  255. package/dist/esm/utils/liquidation.js +31 -0
  256. package/dist/esm/utils/liquidation.js.map +1 -0
  257. package/dist/esm/utils/mapFill.d.ts +10 -0
  258. package/dist/esm/utils/mapFill.d.ts.map +1 -0
  259. package/dist/esm/utils/mapFill.js +72 -0
  260. package/dist/esm/utils/mapFill.js.map +1 -0
  261. package/dist/esm/utils/mapOpenPositions.d.ts +11 -0
  262. package/dist/esm/utils/mapOpenPositions.d.ts.map +1 -0
  263. package/dist/esm/utils/mapOpenPositions.js +12 -0
  264. package/dist/esm/utils/mapOpenPositions.js.map +1 -0
  265. package/dist/esm/utils/mapOrder.d.ts +72 -0
  266. package/dist/esm/utils/mapOrder.d.ts.map +1 -0
  267. package/dist/esm/utils/mapOrder.js +219 -0
  268. package/dist/esm/utils/mapOrder.js.map +1 -0
  269. package/dist/esm/utils/mapPosition.d.ts +9 -0
  270. package/dist/esm/utils/mapPosition.d.ts.map +1 -0
  271. package/dist/esm/utils/mapPosition.js +34 -0
  272. package/dist/esm/utils/mapPosition.js.map +1 -0
  273. package/dist/esm/utils/ohlcvInterval.d.ts +3 -0
  274. package/dist/esm/utils/ohlcvInterval.d.ts.map +1 -0
  275. package/dist/esm/utils/ohlcvInterval.js +30 -0
  276. package/dist/esm/utils/ohlcvInterval.js.map +1 -0
  277. package/dist/esm/utils/orderFormatting.d.ts +29 -0
  278. package/dist/esm/utils/orderFormatting.d.ts.map +1 -0
  279. package/dist/esm/utils/orderFormatting.js +41 -0
  280. package/dist/esm/utils/orderFormatting.js.map +1 -0
  281. package/dist/esm/utils/time.d.ts +5 -0
  282. package/dist/esm/utils/time.d.ts.map +1 -0
  283. package/dist/esm/utils/time.js +5 -0
  284. package/dist/esm/utils/time.js.map +1 -0
  285. package/dist/esm/utils/wireEncoding.d.ts +72 -0
  286. package/dist/esm/utils/wireEncoding.d.ts.map +1 -0
  287. package/dist/esm/utils/wireEncoding.js +129 -0
  288. package/dist/esm/utils/wireEncoding.js.map +1 -0
  289. package/dist/esm/websocket/LighterWsProvider.d.ts +97 -0
  290. package/dist/esm/websocket/LighterWsProvider.d.ts.map +1 -0
  291. package/dist/esm/websocket/LighterWsProvider.js +489 -0
  292. package/dist/esm/websocket/LighterWsProvider.js.map +1 -0
  293. package/dist/types/LighterProvider.d.ts +105 -0
  294. package/dist/types/LighterProvider.d.ts.map +1 -0
  295. package/dist/types/accountConfig.d.ts +14 -0
  296. package/dist/types/accountConfig.d.ts.map +1 -0
  297. package/dist/types/accountSummary.d.ts +12 -0
  298. package/dist/types/accountSummary.d.ts.map +1 -0
  299. package/dist/types/constants.d.ts +74 -0
  300. package/dist/types/constants.d.ts.map +1 -0
  301. package/dist/types/index.d.ts +22 -0
  302. package/dist/types/index.d.ts.map +1 -0
  303. package/dist/types/signers/LighterKeyStore.d.ts +24 -0
  304. package/dist/types/signers/LighterKeyStore.d.ts.map +1 -0
  305. package/dist/types/signers/LighterReadOnlyTokenManager.d.ts +157 -0
  306. package/dist/types/signers/LighterReadOnlyTokenManager.d.ts.map +1 -0
  307. package/dist/types/signers/LighterSigner.d.ts +94 -0
  308. package/dist/types/signers/LighterSigner.d.ts.map +1 -0
  309. package/dist/types/signers/createAuthToken.d.ts +36 -0
  310. package/dist/types/signers/createAuthToken.d.ts.map +1 -0
  311. package/dist/types/signers/index.d.ts +11 -0
  312. package/dist/types/signers/index.d.ts.map +1 -0
  313. package/dist/types/signers/signActions.d.ts +54 -0
  314. package/dist/types/signers/signActions.d.ts.map +1 -0
  315. package/dist/types/signers/wasmLoader.d.ts +79 -0
  316. package/dist/types/signers/wasmLoader.d.ts.map +1 -0
  317. package/dist/types/types/account.d.ts +113 -0
  318. package/dist/types/types/account.d.ts.map +1 -0
  319. package/dist/types/types/action.d.ts +146 -0
  320. package/dist/types/types/action.d.ts.map +1 -0
  321. package/dist/types/types/activity.d.ts +83 -0
  322. package/dist/types/types/activity.d.ts.map +1 -0
  323. package/dist/types/types/asset.d.ts +134 -0
  324. package/dist/types/types/asset.d.ts.map +1 -0
  325. package/dist/types/types/fill.d.ts +31 -0
  326. package/dist/types/types/fill.d.ts.map +1 -0
  327. package/dist/types/types/index.d.ts +9 -0
  328. package/dist/types/types/index.d.ts.map +1 -0
  329. package/dist/types/types/order.d.ts +61 -0
  330. package/dist/types/types/order.d.ts.map +1 -0
  331. package/dist/types/types/submit.d.ts +76 -0
  332. package/dist/types/types/submit.d.ts.map +1 -0
  333. package/dist/types/types/ws.d.ts +124 -0
  334. package/dist/types/types/ws.d.ts.map +1 -0
  335. package/dist/types/utils/activityCursor.d.ts +51 -0
  336. package/dist/types/utils/activityCursor.d.ts.map +1 -0
  337. package/dist/types/utils/apiClient.d.ts +65 -0
  338. package/dist/types/utils/apiClient.d.ts.map +1 -0
  339. package/dist/types/utils/fetchDetailedAccount.d.ts +11 -0
  340. package/dist/types/utils/fetchDetailedAccount.d.ts.map +1 -0
  341. package/dist/types/utils/index.d.ts +16 -0
  342. package/dist/types/utils/index.d.ts.map +1 -0
  343. package/dist/types/utils/lighterAsset.d.ts +4 -0
  344. package/dist/types/utils/lighterAsset.d.ts.map +1 -0
  345. package/dist/types/utils/liquidation.d.ts +22 -0
  346. package/dist/types/utils/liquidation.d.ts.map +1 -0
  347. package/dist/types/utils/mapFill.d.ts +10 -0
  348. package/dist/types/utils/mapFill.d.ts.map +1 -0
  349. package/dist/types/utils/mapOpenPositions.d.ts +11 -0
  350. package/dist/types/utils/mapOpenPositions.d.ts.map +1 -0
  351. package/dist/types/utils/mapOrder.d.ts +72 -0
  352. package/dist/types/utils/mapOrder.d.ts.map +1 -0
  353. package/dist/types/utils/mapPosition.d.ts +9 -0
  354. package/dist/types/utils/mapPosition.d.ts.map +1 -0
  355. package/dist/types/utils/ohlcvInterval.d.ts +3 -0
  356. package/dist/types/utils/ohlcvInterval.d.ts.map +1 -0
  357. package/dist/types/utils/orderFormatting.d.ts +29 -0
  358. package/dist/types/utils/orderFormatting.d.ts.map +1 -0
  359. package/dist/types/utils/time.d.ts +5 -0
  360. package/dist/types/utils/time.d.ts.map +1 -0
  361. package/dist/types/utils/wireEncoding.d.ts +72 -0
  362. package/dist/types/utils/wireEncoding.d.ts.map +1 -0
  363. package/dist/types/websocket/LighterWsProvider.d.ts +97 -0
  364. package/dist/types/websocket/LighterWsProvider.d.ts.map +1 -0
  365. package/dist/wasm/lighter-signer.wasm +0 -0
  366. package/dist/wasm/wasm_exec.js +575 -0
  367. package/package.json +67 -0
  368. package/src/LighterProvider.ts +1167 -0
  369. package/src/accountConfig.ts +162 -0
  370. package/src/accountSummary.ts +22 -0
  371. package/src/constants.ts +89 -0
  372. package/src/index.ts +37 -0
  373. package/src/signers/LighterKeyStore.ts +79 -0
  374. package/src/signers/LighterReadOnlyTokenManager.ts +340 -0
  375. package/src/signers/LighterSigner.ts +400 -0
  376. package/src/signers/createAuthToken.ts +69 -0
  377. package/src/signers/index.ts +36 -0
  378. package/src/signers/signActions.ts +311 -0
  379. package/src/signers/wasmLoader.ts +293 -0
  380. package/src/types/account.ts +123 -0
  381. package/src/types/action.ts +163 -0
  382. package/src/types/activity.ts +94 -0
  383. package/src/types/asset.ts +146 -0
  384. package/src/types/fill.ts +42 -0
  385. package/src/types/index.ts +12 -0
  386. package/src/types/order.ts +65 -0
  387. package/src/types/submit.ts +83 -0
  388. package/src/types/ws.ts +136 -0
  389. package/src/utils/activityCursor.ts +150 -0
  390. package/src/utils/apiClient.ts +185 -0
  391. package/src/utils/fetchDetailedAccount.ts +46 -0
  392. package/src/utils/index.ts +38 -0
  393. package/src/utils/lighterAsset.ts +10 -0
  394. package/src/utils/liquidation.ts +39 -0
  395. package/src/utils/mapFill.ts +108 -0
  396. package/src/utils/mapOpenPositions.ts +18 -0
  397. package/src/utils/mapOrder.ts +258 -0
  398. package/src/utils/mapPosition.ts +42 -0
  399. package/src/utils/ohlcvInterval.ts +34 -0
  400. package/src/utils/orderFormatting.ts +46 -0
  401. package/src/utils/time.ts +6 -0
  402. package/src/utils/wireEncoding.ts +179 -0
  403. package/src/websocket/LighterWsProvider.ts +725 -0
  404. package/wasm/lighter-signer.wasm +0 -0
  405. package/wasm/wasm_exec.js +575 -0
@@ -0,0 +1,228 @@
1
+ import { ActionType } from '@lifi/perps-types';
2
+ import { loadLighterWasm, } from './wasmLoader.js';
3
+ const DEFAULT_API_URL = 'https://mainnet.zklighter.elliot.ai';
4
+ const DEFAULT_CHAIN_ID = 304;
5
+ /** @public */
6
+ export class LighterSigner {
7
+ apiUrl;
8
+ chainId;
9
+ loaderOptions;
10
+ wasm;
11
+ registeredClients = new Set();
12
+ constructor(config = {}) {
13
+ this.apiUrl = config.apiUrl ?? DEFAULT_API_URL;
14
+ this.chainId = config.chainId ?? DEFAULT_CHAIN_ID;
15
+ this.loaderOptions = {
16
+ wasmBinaryUrl: config.wasmBinaryUrl,
17
+ wasmExecJsUrl: config.wasmExecJsUrl,
18
+ wasmExecJsSource: config.wasmExecJsSource,
19
+ };
20
+ }
21
+ async initialize() {
22
+ if (!this.wasm) {
23
+ this.wasm = await loadLighterWasm(this.loaderOptions);
24
+ }
25
+ }
26
+ /**
27
+ * Generate a fresh Lighter API keypair. Pass an optional 32-byte hex seed
28
+ * for deterministic generation (used in tests); omit for a random key.
29
+ */
30
+ async generateAPIKey(seed) {
31
+ const wasm = await this.ensureLoaded();
32
+ const result = wasm.GenerateAPIKey(seed ?? '');
33
+ if (result.error) {
34
+ throw new Error(`Lighter GenerateAPIKey failed: ${result.error}`);
35
+ }
36
+ if (!result.publicKey || !result.privateKey) {
37
+ throw new Error('Lighter GenerateAPIKey returned an incomplete result');
38
+ }
39
+ return { publicKey: result.publicKey, privateKey: result.privateKey };
40
+ }
41
+ /**
42
+ * Sign an action blob with the provided (apiKeyPrivateKey, apiKeyIndex,
43
+ * accountIndex) context. `wasmSignParams` comes straight from the backend's
44
+ * `WasmBlobActionStep`. Returns the signed `{ txType, txInfo, txHash }`
45
+ * triple the backend forwards to Lighter's `sendTx` endpoint.
46
+ *
47
+ * For REGISTER_API_KEY use `signChangePubKey` instead — it returns an
48
+ * additional `messageToSign` the L1 wallet must countersign.
49
+ */
50
+ async sign(action, wasmSignParams, context) {
51
+ if (action === ActionType.REGISTER_API_KEY) {
52
+ throw new Error('Use signChangePubKey() for REGISTER_API_KEY — the L1 eth_sign hop ' +
53
+ 'must be coordinated by the caller.');
54
+ }
55
+ const wasm = await this.ensureLoaded();
56
+ await this.ensureClient(context);
57
+ const result = this.dispatch(wasm, action, wasmSignParams, context);
58
+ return unwrap(result, action);
59
+ }
60
+ /**
61
+ * Step 1 of the REGISTER_API_KEY flow. Generates the WASM blob for a
62
+ * ChangePubKey tx with `L1Sig` left empty, plus the canonical EIP-191
63
+ * message the L1 Ethereum wallet must sign next.
64
+ *
65
+ * Requires the freshly-generated `privateKey` (returned by
66
+ * {@link generateAPIKey}) — the Go WASM signer registers a per-slot client
67
+ * keyed on `(apiKeyIndex, accountIndex)` before it'll sign anything for
68
+ * that slot, including the ChangePubKey that's about to register the key
69
+ * on-chain. This is purely client-side bookkeeping; it does not touch the
70
+ * Lighter API.
71
+ */
72
+ async signChangePubKey(pubKeyHex, privateKey, nonce, apiKeyIndex, accountIndex, skipNonce = 0) {
73
+ const wasm = await this.ensureLoaded();
74
+ await this.ensureClient({
75
+ apiKeyPrivateKey: privateKey,
76
+ apiKeyIndex,
77
+ accountIndex,
78
+ });
79
+ // 5-arg call (matches lighter-python's signer wrapper). `skipNonce`:
80
+ // 0 — embed the supplied nonce and have Lighter enforce it on submit.
81
+ // 1 — embed the nonce but let Lighter pick / not enforce; used for
82
+ // ChangePubKey to sidestep `/nextNonce` vs `/sendTx` disagreement
83
+ // on slot re-claims.
84
+ const result = wasm.SignChangePubKey(pubKeyHex, skipNonce, nonce, apiKeyIndex, accountIndex);
85
+ if (result.error) {
86
+ throw new Error(`Lighter SignChangePubKey failed: ${result.error}`);
87
+ }
88
+ if (result.txType === undefined ||
89
+ result.txInfo === undefined ||
90
+ result.txHash === undefined ||
91
+ !result.messageToSign) {
92
+ throw new Error('Lighter SignChangePubKey returned incomplete result');
93
+ }
94
+ return {
95
+ txType: result.txType,
96
+ txInfo: result.txInfo,
97
+ txHash: result.txHash,
98
+ messageToSign: result.messageToSign,
99
+ };
100
+ }
101
+ /**
102
+ * Step 2 of REGISTER_API_KEY — inject the L1 signature produced by the
103
+ * user's Ethereum wallet into the ChangePubKey txInfo JSON. `L1Sig` is the
104
+ * only field in txInfo that depends on the L1 signature; txHash does NOT
105
+ * include it (so we do not recompute it).
106
+ */
107
+ embedL1Signature(txInfo, l1Signature) {
108
+ let parsed;
109
+ try {
110
+ parsed = JSON.parse(txInfo);
111
+ }
112
+ catch (err) {
113
+ throw new Error(`Failed to parse ChangePubKey txInfo as JSON: ${err.message}`);
114
+ }
115
+ parsed.L1Sig = l1Signature;
116
+ return JSON.stringify(parsed);
117
+ }
118
+ /**
119
+ * Create an auth token for authenticated WebSocket subscriptions.
120
+ * `deadline` is a Unix timestamp in seconds — tokens have an 8h hard cap.
121
+ */
122
+ async createAuthToken(deadline, context) {
123
+ const wasm = await this.ensureLoaded();
124
+ await this.ensureClient(context);
125
+ const result = wasm.CreateAuthToken(deadline, context.apiKeyIndex, context.accountIndex);
126
+ if (result.error) {
127
+ throw new Error(`Lighter CreateAuthToken failed: ${result.error}`);
128
+ }
129
+ if (!result.authToken) {
130
+ throw new Error('Lighter CreateAuthToken returned no token');
131
+ }
132
+ return result.authToken;
133
+ }
134
+ async ensureLoaded() {
135
+ if (!this.wasm) {
136
+ await this.initialize();
137
+ }
138
+ return this.wasm;
139
+ }
140
+ async ensureClient(context) {
141
+ const key = `${context.apiKeyIndex}:${context.accountIndex}:${context.apiKeyPrivateKey}`;
142
+ if (this.registeredClients.has(key)) {
143
+ return;
144
+ }
145
+ const wasm = await this.ensureLoaded();
146
+ const result = wasm.CreateClient(this.apiUrl, context.apiKeyPrivateKey, this.chainId, context.apiKeyIndex, context.accountIndex);
147
+ if (result.error) {
148
+ throw new Error(`Lighter CreateClient failed: ${result.error}`);
149
+ }
150
+ this.registeredClients.add(key);
151
+ }
152
+ /**
153
+ * Map an ActionType + backend-provided params object to the positional-arg
154
+ * WASM call. The Go signer exports take primitives in order, not an object
155
+ * — so we pick fields in the exact order the Go side expects. Unknown
156
+ * fields (e.g. backend's integrator_* hints) are ignored.
157
+ */
158
+ dispatch(wasm, action, p, ctx) {
159
+ const nonce = numberField(p, 'nonce');
160
+ switch (action) {
161
+ case ActionType.PLACE_ORDER:
162
+ case ActionType.PLACE_TRIGGER_ORDER:
163
+ return wasm.SignCreateOrder(numberField(p, 'market_index'), numberField(p, 'client_order_index'), numberField(p, 'base_amount'), numberField(p, 'price'), numberField(p, 'is_ask'), numberField(p, 'order_type'), numberField(p, 'time_in_force'),
164
+ // WASM's error message lists "reduceOnly" as bool-like, but Go
165
+ // actually calls Value.Int() on every arg — passing an actual bool
166
+ // panics. Coerce to 0/1.
167
+ numberField(p, 'reduce_only'), numberField(p, 'trigger_price'), numberField(p, 'order_expiry'), nonce, ctx.apiKeyIndex, ctx.accountIndex);
168
+ case ActionType.CANCEL_ORDER:
169
+ return wasm.SignCancelOrder(numberField(p, 'market_index'), numberField(p, 'order_index'), nonce, ctx.apiKeyIndex, ctx.accountIndex);
170
+ case ActionType.CANCEL_ALL_ORDERS:
171
+ return wasm.SignCancelAllOrders(numberField(p, 'time_in_force'), numberField(p, 'timestamp_ms'), nonce, ctx.apiKeyIndex, ctx.accountIndex);
172
+ case ActionType.MODIFY_ORDER:
173
+ return wasm.SignModifyOrder(numberField(p, 'market_index'), numberField(p, 'order_index'), numberField(p, 'base_amount'), numberField(p, 'price'), numberField(p, 'trigger_price'), nonce, ctx.apiKeyIndex, ctx.accountIndex);
174
+ case ActionType.UPDATE_LEVERAGE:
175
+ return wasm.SignUpdateLeverage(numberField(p, 'market_index'), numberField(p, 'fraction'), numberField(p, 'margin_mode'), nonce, ctx.apiKeyIndex, ctx.accountIndex);
176
+ case ActionType.UPDATE_POSITION_MARGIN:
177
+ return wasm.SignUpdateMargin(numberField(p, 'market_index'), numberField(p, 'usdc_amount'), numberField(p, 'direction'), nonce, ctx.apiKeyIndex, ctx.accountIndex);
178
+ case ActionType.WITHDRAWAL:
179
+ return wasm.SignWithdraw(numberField(p, 'amount'), nonce, ctx.apiKeyIndex, ctx.accountIndex);
180
+ case ActionType.TRANSFER:
181
+ // SignTransfer's 7 positional args follow the Go binding order:
182
+ // `toAccount, usdcAmount, fee, memo, nonce, apiKeyIndex,
183
+ // accountIndex`. `memo` is copied directly into a `[32]byte`, so the
184
+ // backend MUST send a JS string whose UTF-8 byte length is exactly
185
+ // 32 (in practice: 32 ASCII characters) — anything else fails with
186
+ // "memo expected to be 32 bytes long".
187
+ return wasm.SignTransfer(numberField(p, 'to_account'), numberField(p, 'usdc_amount'), numberField(p, 'fee'), stringField(p, 'memo'), nonce, ctx.apiKeyIndex, ctx.accountIndex);
188
+ default:
189
+ throw new Error(`Lighter WASM signer does not support action: ${action}`);
190
+ }
191
+ }
192
+ }
193
+ function unwrap(result, action) {
194
+ if (result.error) {
195
+ throw new Error(`Lighter sign(${action}) failed: ${result.error}`);
196
+ }
197
+ if (result.txType === undefined ||
198
+ result.txInfo === undefined ||
199
+ result.txHash === undefined) {
200
+ throw new Error(`Lighter sign(${action}) returned an incomplete signed blob`);
201
+ }
202
+ return {
203
+ txType: result.txType,
204
+ txInfo: result.txInfo,
205
+ txHash: result.txHash,
206
+ };
207
+ }
208
+ function numberField(p, key) {
209
+ const v = p[key];
210
+ if (typeof v === 'number') {
211
+ return v;
212
+ }
213
+ if (typeof v === 'boolean') {
214
+ return v ? 1 : 0;
215
+ }
216
+ if (typeof v === 'string' && v !== '' && !Number.isNaN(Number(v))) {
217
+ return Number(v);
218
+ }
219
+ throw new Error(`Lighter sign params missing numeric field '${key}' (got ${typeof v})`);
220
+ }
221
+ function stringField(p, key) {
222
+ const v = p[key];
223
+ if (typeof v === 'string' && v !== '') {
224
+ return v;
225
+ }
226
+ throw new Error(`Lighter sign params missing string field '${key}' (got ${typeof v})`);
227
+ }
228
+ //# sourceMappingURL=LighterSigner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LighterSigner.js","sourceRoot":"","sources":["../../../src/signers/LighterSigner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { LighterApiKey } from './LighterKeyStore.js';
2
+ import type { LighterReadOnlyToken } from './LighterReadOnlyTokenManager.js';
3
+ import type { LighterSigner } from './LighterSigner.js';
4
+ /** @public */
5
+ export interface CreateAuthTokenInputs {
6
+ signer: LighterSigner;
7
+ apiKey: Pick<LighterApiKey, 'apiKeyPrivateKey' | 'apiKeyIndex' | 'accountIndex'>;
8
+ /**
9
+ * Token lifetime in seconds. Lighter caps standard tokens at 8 hours.
10
+ * Defaults to 1 hour, matching the previous `PerpsClient` behaviour.
11
+ */
12
+ lifetimeSeconds?: number;
13
+ /** Optional clock injection for tests. */
14
+ now?: () => number;
15
+ }
16
+ /**
17
+ * Create a fresh Lighter standard auth token via the WASM signer. Returns the
18
+ * opaque bearer string Lighter will accept on its authenticated read
19
+ * endpoints (`getOrders`, `getOrder`, `getActivity`, etc.).
20
+ *
21
+ * This utility carries no SDK-wide coupling — pass an explicit `signer` +
22
+ * `apiKey` and consume the returned bearer however the caller likes
23
+ * (per-call `options.lighterAuthToken`, persisted cache, etc.).
24
+ * @public
25
+ */
26
+ export declare function createAuthToken(inputs: CreateAuthTokenInputs): Promise<string>;
27
+ /**
28
+ * True when `token` exists, has not already expired, and is within
29
+ * `thresholdSeconds` of its recorded `expiry`. Intended for widget renewal
30
+ * banners — `thresholdSeconds` defaults to 30 days. Returns `false` for an
31
+ * undefined or already-expired token, so callers may treat that as "no
32
+ * token / renewal not needed (yet)".
33
+ * @public
34
+ */
35
+ export declare function isReadOnlyTokenExpiringSoon(token: LighterReadOnlyToken | undefined | null, thresholdSeconds?: number, now?: () => number): boolean;
36
+ //# sourceMappingURL=createAuthToken.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createAuthToken.d.ts","sourceRoot":"","sources":["../../../src/signers/createAuthToken.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAKvD,cAAc;AACd,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,aAAa,CAAA;IACrB,MAAM,EAAE,IAAI,CACV,aAAa,EACb,kBAAkB,GAAG,aAAa,GAAG,cAAc,CACpD,CAAA;IACD;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,0CAA0C;IAC1C,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAED;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAUjB;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,oBAAoB,GAAG,SAAS,GAAG,IAAI,EAC9C,gBAAgB,GAAE,MAAkC,EACpD,GAAG,GAAE,MAAM,MAAyB,GACnC,OAAO,CAST"}
@@ -0,0 +1,42 @@
1
+ const DEFAULT_LIFETIME_SECONDS = 60 * 60;
2
+ const DEFAULT_THRESHOLD_SECONDS = 30 * 86_400;
3
+ /**
4
+ * Create a fresh Lighter standard auth token via the WASM signer. Returns the
5
+ * opaque bearer string Lighter will accept on its authenticated read
6
+ * endpoints (`getOrders`, `getOrder`, `getActivity`, etc.).
7
+ *
8
+ * This utility carries no SDK-wide coupling — pass an explicit `signer` +
9
+ * `apiKey` and consume the returned bearer however the caller likes
10
+ * (per-call `options.lighterAuthToken`, persisted cache, etc.).
11
+ * @public
12
+ */
13
+ export async function createAuthToken(inputs) {
14
+ const { signer, apiKey } = inputs;
15
+ const lifetime = inputs.lifetimeSeconds ?? DEFAULT_LIFETIME_SECONDS;
16
+ const now = inputs.now ?? (() => Date.now());
17
+ const deadline = Math.floor(now() / 1000) + lifetime;
18
+ return signer.createAuthToken(deadline, {
19
+ apiKeyPrivateKey: apiKey.apiKeyPrivateKey,
20
+ apiKeyIndex: apiKey.apiKeyIndex,
21
+ accountIndex: apiKey.accountIndex,
22
+ });
23
+ }
24
+ /**
25
+ * True when `token` exists, has not already expired, and is within
26
+ * `thresholdSeconds` of its recorded `expiry`. Intended for widget renewal
27
+ * banners — `thresholdSeconds` defaults to 30 days. Returns `false` for an
28
+ * undefined or already-expired token, so callers may treat that as "no
29
+ * token / renewal not needed (yet)".
30
+ * @public
31
+ */
32
+ export function isReadOnlyTokenExpiringSoon(token, thresholdSeconds = DEFAULT_THRESHOLD_SECONDS, now = () => Date.now()) {
33
+ if (!token) {
34
+ return false;
35
+ }
36
+ const remaining = token.expiry - Math.floor(now() / 1000);
37
+ if (remaining <= 0) {
38
+ return false;
39
+ }
40
+ return remaining <= thresholdSeconds;
41
+ }
42
+ //# sourceMappingURL=createAuthToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createAuthToken.js","sourceRoot":"","sources":["../../../src/signers/createAuthToken.ts"],"names":[],"mappings":"AAIA,MAAM,wBAAwB,GAAG,EAAE,GAAG,EAAE,CAAA;AACxC,MAAM,yBAAyB,GAAG,EAAE,GAAG,MAAM,CAAA;AAkB7C;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAA6B;IAE7B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;IACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,eAAe,IAAI,wBAAwB,CAAA;IACnE,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAA;IACpD,OAAO,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE;QACtC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;KAClC,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,2BAA2B,CACzC,KAA8C,EAC9C,mBAA2B,yBAAyB,EACpD,MAAoB,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;IAEpC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,KAAK,CAAA;IACd,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;IACzD,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACnB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,SAAS,IAAI,gBAAgB,CAAA;AACtC,CAAC"}
@@ -0,0 +1,11 @@
1
+ export type { CreateAuthTokenInputs } from './createAuthToken.js';
2
+ export { createAuthToken, isReadOnlyTokenExpiringSoon, } from './createAuthToken.js';
3
+ export type { LighterApiKey } from './LighterKeyStore.js';
4
+ export { LighterKeyStore } from './LighterKeyStore.js';
5
+ export type { ApproveReadOnlyTokenInputs, ApproveReadOnlyTokenResult, LighterCreateTokenResponse, LighterReadOnlyToken, LighterReadOnlyTokenManagerOptions, LighterTokenFetcher, } from './LighterReadOnlyTokenManager.js';
6
+ export { DEFAULT_LIGHTER_API_URL, DEFAULT_READ_ONLY_TOKEN_NAME, defaultLighterTokenFetcher, LighterReadOnlyTokenManager, } from './LighterReadOnlyTokenManager.js';
7
+ export type { ApiKeyPair, ChangePubKeyResult, LighterSignedBlob, LighterSignerConfig, LighterSignerContext, } from './LighterSigner.js';
8
+ export { LighterSigner } from './LighterSigner.js';
9
+ export type { LighterWasmExports, LoadLighterWasmOptions, } from './wasmLoader.js';
10
+ export { loadLighterWasm, resetLighterWasmCache } from './wasmLoader.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/signers/index.ts"],"names":[],"mappings":"AAEA,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,EACL,eAAe,EACf,2BAA2B,GAC5B,MAAM,sBAAsB,CAAA;AAC7B,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,YAAY,EACV,0BAA0B,EAC1B,0BAA0B,EAC1B,0BAA0B,EAC1B,oBAAoB,EACpB,kCAAkC,EAClC,mBAAmB,GACpB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EACL,uBAAuB,EACvB,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,kCAAkC,CAAA;AACzC,YAAY,EACV,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,YAAY,EACV,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1,7 @@
1
+ // biome-ignore-all lint/performance/noBarrelFile: package-internal barrel.
2
+ export { createAuthToken, isReadOnlyTokenExpiringSoon, } from './createAuthToken.js';
3
+ export { LighterKeyStore } from './LighterKeyStore.js';
4
+ export { DEFAULT_LIGHTER_API_URL, DEFAULT_READ_ONLY_TOKEN_NAME, defaultLighterTokenFetcher, LighterReadOnlyTokenManager, } from './LighterReadOnlyTokenManager.js';
5
+ export { LighterSigner } from './LighterSigner.js';
6
+ export { loadLighterWasm, resetLighterWasmCache } from './wasmLoader.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/signers/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAG3E,OAAO,EACL,eAAe,EACf,2BAA2B,GAC5B,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAStD,OAAO,EACL,uBAAuB,EACvB,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,kCAAkC,CAAA;AAQzC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAKlD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1,54 @@
1
+ import { type SignActionsContext } from '@lifi/perps-sdk';
2
+ import type { ActionStep, EvmTxActionStep, EvmTxSignedActionStep, SignedActionStep, WasmBlobActionStep, WasmBlobSignedActionStep } from '@lifi/perps-types';
3
+ import { SigningMethod } from '@lifi/perps-types';
4
+ import type { Address } from 'viem';
5
+ import type { LighterKeyStore } from './LighterKeyStore.js';
6
+ import type { LighterSigner } from './LighterSigner.js';
7
+ /**
8
+ * Per-batch dependencies the Lighter `signActions` implementation needs:
9
+ * a WASM signer (`LighterSigner`), the API-key store keyed on L1 address,
10
+ * and a reference to the host SDK client for descriptor/account fetches
11
+ * within the REGISTER_API_KEY hybrid flow.
12
+ * @internal
13
+ */
14
+ export interface LighterSignActionsDeps {
15
+ signer: LighterSigner;
16
+ keyStore: LighterKeyStore;
17
+ /**
18
+ * Resolve the user's Lighter `accountIndex` for an L1 address. Required
19
+ * by REGISTER_API_KEY so the ChangePubKey blob carries the right
20
+ * account. Implementations typically call Lighter's `/api/v1/account`
21
+ * with `by=l1_address`.
22
+ */
23
+ resolveAccountIndex(address: Address): Promise<number>;
24
+ }
25
+ /**
26
+ * Sign a `WASM_BLOB` batch (Lighter). Ensures the user's API keypair is
27
+ * registered first — generating one and running the REGISTER_API_KEY
28
+ * hybrid flow via the L1 signer if not — then feeds each subsequent step
29
+ * through the WASM signer.
30
+ *
31
+ * `ACCOUNT_TYPE` (Lighter `/changeAccountTier`) is a WASM_BLOB envelope
32
+ * authenticated with an auth token rather than a wasm tx signature —
33
+ * created via `LighterSigner.createAuthToken` and parked in `signedTx.txInfo`.
34
+ * @internal
35
+ */
36
+ export declare function signWasmBlobActions(deps: LighterSignActionsDeps, address: Address, steps: WasmBlobActionStep[], ctx: SignActionsContext | undefined): Promise<WasmBlobSignedActionStep[]>;
37
+ /**
38
+ * Sign and broadcast a sequence of `EVM_TX` actions via the user's wallet
39
+ * client. Steps are submitted serially so a later step (e.g. deposit) can
40
+ * rely on an earlier step (e.g. approve) having mined. Each step's
41
+ * `txParams` carries chainId, target, function name, args, and a
42
+ * human-readable abi from the backend.
43
+ * @internal
44
+ */
45
+ export declare function signEvmTxActions(steps: EvmTxActionStep[], ctx: SignActionsContext | undefined): Promise<EvmTxSignedActionStep[]>;
46
+ /**
47
+ * Top-level dispatch: pick the per-method signer based on the descriptor's
48
+ * `signingMethod` and forward. `EIP712` is rejected — Lighter declares no
49
+ * EIP712 actions (its user-consent step uses an EIP-191 `signMessage` inside
50
+ * the `WASM_BLOB` REGISTER_API_KEY flow).
51
+ * @internal
52
+ */
53
+ export declare function lighterSignActions(deps: LighterSignActionsDeps, method: SigningMethod, steps: ActionStep[], address: Address, ctx?: SignActionsContext): Promise<SignedActionStep[]>;
54
+ //# sourceMappingURL=signActions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signActions.d.ts","sourceRoot":"","sources":["../../../src/signers/signActions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EACf,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,EACzB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAA8B,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAC7E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAGnC,OAAO,KAAK,EAAiB,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEvD;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,aAAa,CAAA;IACrB,QAAQ,EAAE,eAAe,CAAA;IACzB;;;;;OAKG;IACH,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CACvD;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,sBAAsB,EAC5B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,kBAAkB,EAAE,EAC3B,GAAG,EAAE,kBAAkB,GAAG,SAAS,GAClC,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAYrC;AAkKD;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,eAAe,EAAE,EACxB,GAAG,EAAE,kBAAkB,GAAG,SAAS,GAClC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAqClC;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,sBAAsB,EAC5B,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,UAAU,EAAE,EACnB,OAAO,EAAE,OAAO,EAChB,GAAG,CAAC,EAAE,kBAAkB,GACvB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAsB7B"}
@@ -0,0 +1,193 @@
1
+ import { PerpsError } from '@lifi/perps-sdk';
2
+ import { ActionType, PerpsErrorCode, SigningMethod } from '@lifi/perps-types';
3
+ import { parseAbi } from 'viem';
4
+ import { DEFAULT_API_KEY_INDEX } from '../constants.js';
5
+ /**
6
+ * Sign a `WASM_BLOB` batch (Lighter). Ensures the user's API keypair is
7
+ * registered first — generating one and running the REGISTER_API_KEY
8
+ * hybrid flow via the L1 signer if not — then feeds each subsequent step
9
+ * through the WASM signer.
10
+ *
11
+ * `ACCOUNT_TYPE` (Lighter `/changeAccountTier`) is a WASM_BLOB envelope
12
+ * authenticated with an auth token rather than a wasm tx signature —
13
+ * created via `LighterSigner.createAuthToken` and parked in `signedTx.txInfo`.
14
+ * @internal
15
+ */
16
+ export async function signWasmBlobActions(deps, address, steps, ctx) {
17
+ const signed = [];
18
+ for (const step of steps) {
19
+ if (step.action === ActionType.REGISTER_API_KEY) {
20
+ signed.push(await signRegisterApiKey(deps, address, step, ctx));
21
+ }
22
+ else if (step.action === ActionType.ACCOUNT_TYPE) {
23
+ signed.push(await signAccountTierChange(deps, address, step));
24
+ }
25
+ else {
26
+ signed.push(await signStandardWasmAction(deps, address, step));
27
+ }
28
+ }
29
+ return signed;
30
+ }
31
+ async function signStandardWasmAction(deps, address, step) {
32
+ const apiKey = await requireApiKey(deps, address);
33
+ const signedTx = await deps.signer.sign(step.action, step.wasmSignParams, {
34
+ apiKeyPrivateKey: apiKey.apiKeyPrivateKey,
35
+ apiKeyIndex: apiKey.apiKeyIndex,
36
+ accountIndex: apiKey.accountIndex,
37
+ });
38
+ return {
39
+ action: step.action,
40
+ wasmSignParams: step.wasmSignParams,
41
+ signedTx,
42
+ };
43
+ }
44
+ /**
45
+ * REGISTER_API_KEY flow:
46
+ * 1. Look up the user's Lighter accountIndex (Lighter REST).
47
+ * 2. Generate a fresh Lighter API keypair via the WASM signer.
48
+ * 3. Call SignChangePubKey to produce the WASM blob + EIP-191 message.
49
+ * 4. Have the user's L1 Ethereum wallet sign the message.
50
+ * 5. Inject the L1 signature into the ChangePubKey txInfo JSON.
51
+ * 6. Persist the keypair and return the signed blob.
52
+ *
53
+ * Requires the end-user's wallet in `ctx.userWallet` — the L1 signature is the
54
+ * user's consent to rotate keys.
55
+ */
56
+ async function signRegisterApiKey(deps, address, step, ctx) {
57
+ const walletSigner = ctx?.userWallet;
58
+ if (!walletSigner) {
59
+ throw new PerpsError(PerpsErrorCode.SDKError, 'REGISTER_API_KEY requires the end-user wallet — pass `userWallet` to ' +
60
+ 'createPerpsClient or call setUserWallet(walletClient).');
61
+ }
62
+ const params = step.wasmSignParams;
63
+ const apiKeyIndex = params.api_key_index ?? DEFAULT_API_KEY_INDEX;
64
+ const nonce = params.nonce;
65
+ if (typeof nonce !== 'number') {
66
+ throw new PerpsError(PerpsErrorCode.SDKError, 'REGISTER_API_KEY wasmSignParams is missing `nonce`.');
67
+ }
68
+ const skipNonce = params.skip_nonce === 1 ? 1 : 0;
69
+ const accountIndex = await deps.resolveAccountIndex(address);
70
+ const keypair = await deps.signer.generateAPIKey();
71
+ const changePubKey = await deps.signer.signChangePubKey(keypair.publicKey, keypair.privateKey, nonce, apiKeyIndex, accountIndex, skipNonce);
72
+ const l1Signature = await walletSigner.signMessage({
73
+ account: walletSigner.account,
74
+ message: changePubKey.messageToSign,
75
+ });
76
+ const txInfoWithL1Sig = deps.signer.embedL1Signature(changePubKey.txInfo, l1Signature);
77
+ const apiKey = {
78
+ accountIndex,
79
+ apiKeyIndex,
80
+ apiKeyPrivateKey: keypair.privateKey,
81
+ apiKeyPublicKey: keypair.publicKey,
82
+ };
83
+ await deps.keyStore.set(address, apiKey);
84
+ return {
85
+ action: step.action,
86
+ wasmSignParams: {
87
+ ...step.wasmSignParams,
88
+ new_public_key: keypair.publicKey,
89
+ },
90
+ signedTx: {
91
+ txType: changePubKey.txType,
92
+ txInfo: txInfoWithL1Sig,
93
+ txHash: changePubKey.txHash,
94
+ },
95
+ };
96
+ }
97
+ /**
98
+ * Sign an `ACCOUNT_TYPE` step (Lighter `changeAccountTier`).
99
+ *
100
+ * Lighter's `/api/v1/changeAccountTier` is an HTTP-only mutation —
101
+ * Lighter does NOT consume a wasm-signed transaction here; it
102
+ * authenticates the request with the same auth token its read endpoints
103
+ * use, and enforces anti-replay business rules server-side. The backend
104
+ * declares the step as a `WasmBlobActionStep` with
105
+ * `wasmSignParams.kind = 'changeAccountTier'` and expects the SDK to create
106
+ * an auth token in lieu of a transaction signature; the executor reads
107
+ * `signedTx.txInfo` as the `auth` form parameter.
108
+ *
109
+ * The 1h deadline mirrors the previous behaviour — Lighter caps tokens at
110
+ * 8h hard, and the backend's executor runs `verifyPendingAction` then a
111
+ * single POST, which completes well inside an hour.
112
+ */
113
+ async function signAccountTierChange(deps, address, step) {
114
+ const apiKey = await requireApiKey(deps, address);
115
+ const deadline = Math.floor(Date.now() / 1000) + 60 * 60;
116
+ const authToken = await deps.signer.createAuthToken(deadline, {
117
+ apiKeyPrivateKey: apiKey.apiKeyPrivateKey,
118
+ apiKeyIndex: apiKey.apiKeyIndex,
119
+ accountIndex: apiKey.accountIndex,
120
+ });
121
+ return {
122
+ action: step.action,
123
+ wasmSignParams: step.wasmSignParams,
124
+ signedTx: {
125
+ // `/changeAccountTier` reads only `txInfo` (the auth token); `txType`
126
+ // and `txHash` are placeholders to satisfy the envelope shape.
127
+ txType: 0,
128
+ txInfo: authToken,
129
+ txHash: '',
130
+ },
131
+ };
132
+ }
133
+ async function requireApiKey(deps, address) {
134
+ const apiKey = await deps.keyStore.get(address);
135
+ if (!apiKey) {
136
+ throw new PerpsError(PerpsErrorCode.SDKError, `No Lighter API key registered for ${address}. ` +
137
+ 'Run prepareAccount / REGISTER_API_KEY first.');
138
+ }
139
+ return apiKey;
140
+ }
141
+ /**
142
+ * Sign and broadcast a sequence of `EVM_TX` actions via the user's wallet
143
+ * client. Steps are submitted serially so a later step (e.g. deposit) can
144
+ * rely on an earlier step (e.g. approve) having mined. Each step's
145
+ * `txParams` carries chainId, target, function name, args, and a
146
+ * human-readable abi from the backend.
147
+ * @internal
148
+ */
149
+ export async function signEvmTxActions(steps, ctx) {
150
+ const walletSigner = ctx?.userWallet;
151
+ if (!walletSigner) {
152
+ throw new PerpsError(PerpsErrorCode.SDKError, 'EVM_TX signing requires the end-user wallet. Pass `userWallet` to ' +
153
+ 'createPerpsClient or call setUserWallet(walletClient).');
154
+ }
155
+ const signed = [];
156
+ for (const step of steps) {
157
+ const params = step.txParams;
158
+ const txHash = await walletSigner.writeContract({
159
+ address: params.to,
160
+ abi: parseAbi(params.abi),
161
+ functionName: params.functionName,
162
+ args: params.args,
163
+ chain: walletSigner.chain,
164
+ account: walletSigner.account,
165
+ });
166
+ signed.push({
167
+ action: step.action,
168
+ txParams: step.txParams,
169
+ txHash,
170
+ });
171
+ }
172
+ return signed;
173
+ }
174
+ /**
175
+ * Top-level dispatch: pick the per-method signer based on the descriptor's
176
+ * `signingMethod` and forward. `EIP712` is rejected — Lighter declares no
177
+ * EIP712 actions (its user-consent step uses an EIP-191 `signMessage` inside
178
+ * the `WASM_BLOB` REGISTER_API_KEY flow).
179
+ * @internal
180
+ */
181
+ export async function lighterSignActions(deps, method, steps, address, ctx) {
182
+ switch (method) {
183
+ case SigningMethod.WASM_BLOB:
184
+ return signWasmBlobActions(deps, address, steps, ctx);
185
+ case SigningMethod.EVM_TX:
186
+ return signEvmTxActions(steps, ctx);
187
+ case SigningMethod.EIP712:
188
+ throw new PerpsError(PerpsErrorCode.SDKError, 'LighterProvider.signActions: Lighter declares no EIP712 actions.');
189
+ default:
190
+ throw new PerpsError(PerpsErrorCode.SDKError, `LighterProvider.signActions: unknown SigningMethod '${method}'.`);
191
+ }
192
+ }
193
+ //# sourceMappingURL=signActions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signActions.js","sourceRoot":"","sources":["../../../src/signers/signActions.ts"],"names":[],"mappings":"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"}