@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 @@
1
+ {"version":3,"file":"lighterAsset.d.ts","sourceRoot":"","sources":["../../../src/utils/lighterAsset.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAI9C,eAAO,MAAM,YAAY,GAAI,IAAI,MAAM,EAAE,eAAe,MAAM,KAAG,KAK/D,CAAA"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.lighterAsset = void 0;
4
+ const constants_js_1 = require("../constants.js");
5
+ const lighterAsset = (id, displaySymbol) => ({
6
+ providerId: constants_js_1.LIGHTER_PROVIDER_KEY,
7
+ id,
8
+ displaySymbol,
9
+ logoURI: '',
10
+ });
11
+ exports.lighterAsset = lighterAsset;
12
+ //# sourceMappingURL=lighterAsset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lighterAsset.js","sourceRoot":"","sources":["../../../src/utils/lighterAsset.ts"],"names":[],"mappings":";;;AACA,kDAAsD;AAG/C,MAAM,YAAY,GAAG,CAAC,EAAU,EAAE,aAAqB,EAAS,EAAE,CAAC,CAAC;IACzE,UAAU,EAAE,mCAAoB;IAChC,EAAE;IACF,aAAa;IACb,OAAO,EAAE,EAAE;CACZ,CAAC,CAAA;AALW,QAAA,YAAY,gBAKvB"}
@@ -0,0 +1,4 @@
1
+ import { type LiquidationEstimateParams } from '@lifi/perps-sdk';
2
+ import type { PerpsMarket } from '@lifi/perps-types';
3
+ export declare function estimateLiquidationPrice(market: PerpsMarket, params: LiquidationEstimateParams): number | undefined;
4
+ //# sourceMappingURL=liquidation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liquidation.d.ts","sourceRoot":"","sources":["../../../src/utils/liquidation.ts"],"names":[],"mappings":"AASA,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAYpD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,yBAAyB,GAChC,MAAM,GAAG,SAAS,CAUpB"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.estimateLiquidationPrice = estimateLiquidationPrice;
4
+ const perps_sdk_1 = require("@lifi/perps-sdk");
5
+ function estimateLiquidationPrice(market, params) {
6
+ if (market.maintenanceMarginRate === undefined) {
7
+ return undefined;
8
+ }
9
+ return (0, perps_sdk_1.estimateIsolatedLiquidationPrice)({
10
+ entryPrice: params.entryPrice,
11
+ leverage: params.leverage,
12
+ isLong: params.isLong,
13
+ maintenanceMarginRate: market.maintenanceMarginRate,
14
+ });
15
+ }
16
+ //# sourceMappingURL=liquidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liquidation.js","sourceRoot":"","sources":["../../../src/utils/liquidation.ts"],"names":[],"mappings":";;AAyBA,4DAaC;AA7BD,+CAGwB;AAaxB,SAAgB,wBAAwB,CACtC,MAAmB,EACnB,MAAiC;IAEjC,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;QAC/C,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,IAAA,4CAAgC,EAAC;QACtC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;KACpD,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Fill, MarketDisplay } from '@lifi/perps-types';
2
+ import type { LtTrade } from '../types/index.js';
3
+ export declare const mapFill: (trade: LtTrade, accountIndex: number, market: MarketDisplay) => Fill;
4
+ //# sourceMappingURL=mapFill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapFill.d.ts","sourceRoot":"","sources":["../../../src/utils/mapFill.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAQ5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AA+ChD,eAAO,MAAM,OAAO,GAClB,OAAO,OAAO,EACd,cAAc,MAAM,EACpB,QAAQ,aAAa,KACpB,IA2CF,CAAA"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.mapFill = void 0;
7
+ const perps_sdk_1 = require("@lifi/perps-sdk");
8
+ const perps_types_1 = require("@lifi/perps-types");
9
+ const big_js_1 = __importDefault(require("big.js"));
10
+ const deriveRealizedPnl = (startPosition, entryQuoteBefore, fillSize, fillPrice, isBuyer) => {
11
+ if (entryQuoteBefore === undefined) {
12
+ return undefined;
13
+ }
14
+ const start = new big_js_1.default(startPosition);
15
+ if (start.eq(0)) {
16
+ return undefined;
17
+ }
18
+ const isLong = start.gt(0);
19
+ const reducing = isLong ? !isBuyer : isBuyer;
20
+ if (!reducing) {
21
+ return undefined;
22
+ }
23
+ const absStart = start.abs();
24
+ const fill = new big_js_1.default(fillSize);
25
+ const closedSize = fill.gt(absStart) ? absStart : fill;
26
+ const avgEntry = new big_js_1.default(entryQuoteBefore).abs().div(absStart);
27
+ const price = new big_js_1.default(fillPrice);
28
+ const pnl = isLong
29
+ ? price.minus(avgEntry).times(closedSize)
30
+ : avgEntry.minus(price).times(closedSize);
31
+ return pnl.eq(0) ? null : pnl.toString();
32
+ };
33
+ const mapFill = (trade, accountIndex, market) => {
34
+ const isBuyer = trade.bid_account_id === accountIndex;
35
+ const isMaker = (trade.is_maker_ask && !isBuyer) || (!trade.is_maker_ask && isBuyer);
36
+ const startPosition = isMaker
37
+ ? trade.maker_position_size_before
38
+ : trade.taker_position_size_before;
39
+ const entryQuoteBefore = isMaker
40
+ ? trade.maker_entry_quote_before
41
+ : trade.taker_entry_quote_before;
42
+ return {
43
+ id: trade.trade_id.toString(),
44
+ orderId: String(isBuyer ? trade.bid_id : trade.ask_id),
45
+ market,
46
+ side: isBuyer ? perps_types_1.OrderSide.BUY : perps_types_1.OrderSide.SELL,
47
+ type: perps_types_1.OrderType.LIMIT,
48
+ size: trade.size,
49
+ price: trade.price,
50
+ status: perps_types_1.FillStatus.FILLED,
51
+ liquidity: isMaker ? perps_types_1.LiquidityRole.MAKER : perps_types_1.LiquidityRole.TAKER,
52
+ fee: isMaker ? trade.maker_fee?.toString() : trade.taker_fee?.toString(),
53
+ realizedPnl: deriveRealizedPnl(startPosition, entryQuoteBefore, trade.size, trade.price, isBuyer),
54
+ startPosition,
55
+ classification: (0, perps_sdk_1.classifyFillFromPosition)(startPosition, isBuyer ? 'B' : 'A', trade.size),
56
+ createdAt: new Date(trade.timestamp).toISOString(),
57
+ explorerLink: (0, perps_sdk_1.explorerTxUrl)(perps_sdk_1.ExplorerChainId.LIGHTER, trade.tx_hash),
58
+ };
59
+ };
60
+ exports.mapFill = mapFill;
61
+ //# sourceMappingURL=mapFill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapFill.js","sourceRoot":"","sources":["../../../src/utils/mapFill.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { MarketDisplay, Position } from '@lifi/perps-types';
2
+ import type { LtAccountPosition } from '../types/index.js';
3
+ export declare const mapOpenPositions: (positions: LtAccountPosition[], resolveMarket: (marketId: number) => MarketDisplay) => Position[];
4
+ //# sourceMappingURL=mapOpenPositions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapOpenPositions.d.ts","sourceRoot":"","sources":["../../../src/utils/mapOpenPositions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAU1D,eAAO,MAAM,gBAAgB,GAC3B,WAAW,iBAAiB,EAAE,EAC9B,eAAe,CAAC,QAAQ,EAAE,MAAM,KAAK,aAAa,KACjD,QAAQ,EAGgD,CAAA"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mapOpenPositions = void 0;
4
+ const mapPosition_js_1 = require("./mapPosition.js");
5
+ const mapOpenPositions = (positions, resolveMarket) => positions
6
+ .filter((p) => Number.parseFloat(p.position) !== 0)
7
+ .map((p) => (0, mapPosition_js_1.mapPosition)(p, resolveMarket(p.market_id)));
8
+ exports.mapOpenPositions = mapOpenPositions;
9
+ //# sourceMappingURL=mapOpenPositions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapOpenPositions.js","sourceRoot":"","sources":["../../../src/utils/mapOpenPositions.ts"],"names":[],"mappings":";;;AAEA,qDAA8C;AASvC,MAAM,gBAAgB,GAAG,CAC9B,SAA8B,EAC9B,aAAkD,EACtC,EAAE,CACd,SAAS;KACN,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KAClD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,4BAAW,EAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;AAN9C,QAAA,gBAAgB,oBAM8B"}
@@ -0,0 +1,15 @@
1
+ import type { MarketDisplay, OpenOrder, Order, TriggerOrder } from '@lifi/perps-types';
2
+ import { OrderType } from '@lifi/perps-types';
3
+ import type { LtOrder } from '../types/index.js';
4
+ export declare const mapStatusReason: (status: string) => string | undefined;
5
+ export declare const isTriggerType: (type: OrderType) => boolean;
6
+ export declare const isTriggerOrder: (raw: LtOrder) => boolean;
7
+ export declare const mapTriggerOrder: (order: LtOrder, market: MarketDisplay) => TriggerOrder;
8
+ export declare const mapOrder: (order: LtOrder, market: MarketDisplay) => OpenOrder;
9
+ export declare const classifyAndMapOrders: (orders: LtOrder[], resolveMarket: (marketIndex: number) => MarketDisplay | undefined) => {
10
+ openOrders: OpenOrder[];
11
+ triggerOrders: TriggerOrder[];
12
+ terminated: string[];
13
+ };
14
+ export declare const mapOrderDetail: (order: LtOrder, market: MarketDisplay) => Order;
15
+ //# sourceMappingURL=mapOrder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapOrder.d.ts","sourceRoot":"","sources":["../../../src/utils/mapOrder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,KAAK,EACL,YAAY,EACb,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAGL,SAAS,EAEV,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAyDhD,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,KAAG,MAAM,GAAG,SA+BzD,CAAA;AASD,eAAO,MAAM,aAAa,GAAI,MAAM,SAAS,KAAG,OAIjB,CAAA;AAmB/B,eAAO,MAAM,cAAc,GAAI,KAAK,OAAO,KAAG,OAY7C,CAAA;AASD,eAAO,MAAM,eAAe,GAC1B,OAAO,OAAO,EACd,QAAQ,aAAa,KACpB,YAkBF,CAAA;AAOD,eAAO,MAAM,QAAQ,GAAI,OAAO,OAAO,EAAE,QAAQ,aAAa,KAAG,SAU/D,CAAA;AAYF,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,OAAO,EAAE,EACjB,eAAe,CAAC,WAAW,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,KAChE;IACD,UAAU,EAAE,SAAS,EAAE,CAAA;IACvB,aAAa,EAAE,YAAY,EAAE,CAAA;IAC7B,UAAU,EAAE,MAAM,EAAE,CAAA;CAsBrB,CAAA;AAOD,eAAO,MAAM,cAAc,GACzB,OAAO,OAAO,EACd,QAAQ,aAAa,KACpB,KAeD,CAAA"}
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mapOrderDetail = exports.classifyAndMapOrders = exports.mapOrder = exports.mapTriggerOrder = exports.isTriggerOrder = exports.isTriggerType = exports.mapStatusReason = void 0;
4
+ const perps_sdk_1 = require("@lifi/perps-sdk");
5
+ const perps_types_1 = require("@lifi/perps-types");
6
+ const mapOrderType = (ltType) => {
7
+ const normalized = ltType.replace(/-/g, '_');
8
+ const map = {
9
+ limit: perps_types_1.OrderType.LIMIT,
10
+ market: perps_types_1.OrderType.MARKET,
11
+ stop_loss: perps_types_1.OrderType.STOP_MARKET,
12
+ stop_loss_limit: perps_types_1.OrderType.STOP_LIMIT,
13
+ take_profit: perps_types_1.OrderType.TAKE_PROFIT_MARKET,
14
+ take_profit_limit: perps_types_1.OrderType.TAKE_PROFIT_LIMIT,
15
+ };
16
+ return map[normalized] ?? perps_types_1.OrderType.LIMIT;
17
+ };
18
+ const mapTimeInForce = (tif) => {
19
+ switch (tif.replace(/-/g, '_')) {
20
+ case 'good_till_time':
21
+ return perps_types_1.TimeInForce.GTT;
22
+ case 'immediate_or_cancel':
23
+ return perps_types_1.TimeInForce.IOC;
24
+ case 'post_only':
25
+ return perps_types_1.TimeInForce.POST_ONLY;
26
+ default:
27
+ return undefined;
28
+ }
29
+ };
30
+ const mapOrderStatus = (status) => {
31
+ if (status === 'open' ||
32
+ status === 'in-progress' ||
33
+ status === 'in_progress') {
34
+ return perps_types_1.OrderStatus.OPEN;
35
+ }
36
+ if (status === 'pending') {
37
+ return perps_types_1.OrderStatus.PENDING;
38
+ }
39
+ if (status === 'filled') {
40
+ return perps_types_1.OrderStatus.FILLED;
41
+ }
42
+ if (status.startsWith('canceled')) {
43
+ return perps_types_1.OrderStatus.CANCELLED;
44
+ }
45
+ return perps_types_1.OrderStatus.OPEN;
46
+ };
47
+ const mapStatusReason = (status) => {
48
+ switch (status) {
49
+ case 'canceled':
50
+ return 'Order cancelled.';
51
+ case 'canceled-post-only':
52
+ return 'Order cancelled: post-only order would have crossed the book.';
53
+ case 'canceled-reduce-only':
54
+ return 'Order cancelled: would not reduce your position.';
55
+ case 'canceled-position-not-allowed':
56
+ return 'Order cancelled: position not allowed.';
57
+ case 'canceled-margin-not-allowed':
58
+ return 'Order cancelled: insufficient margin.';
59
+ case 'canceled-too-much-slippage':
60
+ return 'Order cancelled: slippage exceeded tolerance.';
61
+ case 'canceled-not-enough-liquidity':
62
+ return 'Order cancelled: not enough liquidity to fill.';
63
+ case 'canceled-self-trade':
64
+ return 'Order cancelled: would self-trade against your own resting order.';
65
+ case 'canceled-expired':
66
+ return 'Order expired.';
67
+ case 'canceled-oco':
68
+ return 'Order cancelled: sibling OCO order filled or cancelled first.';
69
+ case 'canceled-child':
70
+ return 'Order cancelled: parent order was cancelled.';
71
+ case 'canceled-liquidation':
72
+ return 'Order cancelled: account was liquidated.';
73
+ case 'canceled-invalid-balance':
74
+ return 'Order cancelled: invalid balance.';
75
+ default:
76
+ return undefined;
77
+ }
78
+ };
79
+ exports.mapStatusReason = mapStatusReason;
80
+ const isTriggerType = (type) => type === perps_types_1.OrderType.TAKE_PROFIT_MARKET ||
81
+ type === perps_types_1.OrderType.TAKE_PROFIT_LIMIT ||
82
+ type === perps_types_1.OrderType.STOP_MARKET ||
83
+ type === perps_types_1.OrderType.STOP_LIMIT;
84
+ exports.isTriggerType = isTriggerType;
85
+ const isTriggerOrder = (raw) => {
86
+ if (raw.trigger_status === 'ready' ||
87
+ raw.trigger_status === 'mark-price' ||
88
+ raw.trigger_status === 'parent-order') {
89
+ return true;
90
+ }
91
+ if (raw.trigger_price !== '' && parseFloat(raw.trigger_price) > 0) {
92
+ return true;
93
+ }
94
+ return (0, exports.isTriggerType)(mapOrderType(raw.type));
95
+ };
96
+ exports.isTriggerOrder = isTriggerOrder;
97
+ const mapTriggerOrder = (order, market) => {
98
+ const type = mapOrderType(order.type);
99
+ const isLimit = type === perps_types_1.OrderType.TAKE_PROFIT_LIMIT || type === perps_types_1.OrderType.STOP_LIMIT;
100
+ return {
101
+ orderId: String(order.order_index),
102
+ market,
103
+ type,
104
+ size: order.initial_base_amount,
105
+ triggerPrice: order.trigger_price,
106
+ ...(isLimit ? { limitPrice: order.price } : {}),
107
+ createdAt: new Date(order.created_at * 1000).toISOString(),
108
+ };
109
+ };
110
+ exports.mapTriggerOrder = mapTriggerOrder;
111
+ const mapOrder = (order, market) => ({
112
+ orderId: String(order.order_index),
113
+ market,
114
+ side: order.is_ask ? perps_types_1.OrderSide.SELL : perps_types_1.OrderSide.BUY,
115
+ type: mapOrderType(order.type),
116
+ size: order.initial_base_amount,
117
+ price: order.price,
118
+ filledSize: order.filled_base_amount,
119
+ reduceOnly: order.reduce_only,
120
+ createdAt: new Date(order.created_at * 1000).toISOString(),
121
+ });
122
+ exports.mapOrder = mapOrder;
123
+ const classifyAndMapOrders = (orders, resolveMarket) => {
124
+ const openOrders = [];
125
+ const triggerOrders = [];
126
+ const terminated = [];
127
+ for (const raw of orders) {
128
+ const orderId = String(raw.order_index);
129
+ if (!(0, perps_sdk_1.isActiveOrderStatus)(mapOrderStatus(raw.status))) {
130
+ terminated.push(orderId);
131
+ continue;
132
+ }
133
+ const market = resolveMarket(raw.market_index);
134
+ if (market === undefined) {
135
+ continue;
136
+ }
137
+ if ((0, exports.isTriggerOrder)(raw)) {
138
+ triggerOrders.push((0, exports.mapTriggerOrder)(raw, market));
139
+ }
140
+ else {
141
+ openOrders.push((0, exports.mapOrder)(raw, market));
142
+ }
143
+ }
144
+ return { openOrders, triggerOrders, terminated };
145
+ };
146
+ exports.classifyAndMapOrders = classifyAndMapOrders;
147
+ const mapOrderDetail = (order, market) => ({
148
+ orderId: String(order.order_index),
149
+ market,
150
+ side: order.is_ask ? perps_types_1.OrderSide.SELL : perps_types_1.OrderSide.BUY,
151
+ type: mapOrderType(order.type),
152
+ price: order.price,
153
+ originalSize: order.initial_base_amount,
154
+ remainingSize: order.remaining_base_amount,
155
+ filledSize: order.filled_base_amount,
156
+ timeInForce: mapTimeInForce(order.time_in_force),
157
+ reduceOnly: order.reduce_only,
158
+ status: mapOrderStatus(order.status),
159
+ statusReason: (0, exports.mapStatusReason)(order.status),
160
+ createdAt: new Date(order.created_at * 1000).toISOString(),
161
+ updatedAt: new Date(order.updated_at * 1000).toISOString(),
162
+ });
163
+ exports.mapOrderDetail = mapOrderDetail;
164
+ //# sourceMappingURL=mapOrder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapOrder.js","sourceRoot":"","sources":["../../../src/utils/mapOrder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { MarketDisplay, Position } from '@lifi/perps-types';
2
+ import type { LtAccountPosition } from '../types/index.js';
3
+ export declare const mapPosition: (pos: LtAccountPosition, market: MarketDisplay) => Position;
4
+ //# sourceMappingURL=mapPosition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapPosition.d.ts","sourceRoot":"","sources":["../../../src/utils/mapPosition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEhE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAQ1D,eAAO,MAAM,WAAW,GACtB,KAAK,iBAAiB,EACtB,QAAQ,aAAa,KACpB,QA4BF,CAAA"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mapPosition = void 0;
4
+ const perps_types_1 = require("@lifi/perps-types");
5
+ const index_js_1 = require("../types/index.js");
6
+ const mapPosition = (pos, market) => {
7
+ const size = parseFloat(pos.position);
8
+ const isIsolated = pos.margin_mode === index_js_1.LT_MARGIN_MODE_ISOLATED;
9
+ const positionValue = Math.abs(parseFloat(pos.position_value));
10
+ const imf = parseFloat(pos.initial_margin_fraction);
11
+ const marginUsed = isIsolated
12
+ ? pos.allocated_margin
13
+ : ((positionValue * imf) / 100).toString();
14
+ return {
15
+ market,
16
+ side: pos.sign >= 0 ? perps_types_1.PositionSide.LONG : perps_types_1.PositionSide.SHORT,
17
+ size: Math.abs(size).toString(),
18
+ entryPrice: pos.avg_entry_price,
19
+ markPrice: pos.position_value === '0' || size === 0
20
+ ? '0'
21
+ : (parseFloat(pos.position_value) / Math.abs(size)).toString(),
22
+ liquidationPrice: pos.liquidation_price,
23
+ unrealizedPnl: pos.unrealized_pnl,
24
+ leverage: imf > 0 ? Math.round(100 / imf) : 1,
25
+ marginUsed,
26
+ marginMode: isIsolated ? perps_types_1.MarginMode.ISOLATED : perps_types_1.MarginMode.CROSS,
27
+ };
28
+ };
29
+ exports.mapPosition = mapPosition;
30
+ //# sourceMappingURL=mapPosition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapPosition.js","sourceRoot":"","sources":["../../../src/utils/mapPosition.ts"],"names":[],"mappings":";;;AACA,mDAA4D;AAE5D,gDAA2D;AAOpD,MAAM,WAAW,GAAG,CACzB,GAAsB,EACtB,MAAqB,EACX,EAAE;IACZ,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACrC,MAAM,UAAU,GAAG,GAAG,CAAC,WAAW,KAAK,kCAAuB,CAAA;IAK9D,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAA;IAC9D,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;IACnD,MAAM,UAAU,GAAG,UAAU;QAC3B,CAAC,CAAC,GAAG,CAAC,gBAAgB;QACtB,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAA;IAE5C,OAAO;QACL,MAAM;QACN,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,0BAAY,CAAC,IAAI,CAAC,CAAC,CAAC,0BAAY,CAAC,KAAK;QAC5D,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;QAC/B,UAAU,EAAE,GAAG,CAAC,eAAe;QAC/B,SAAS,EACP,GAAG,CAAC,cAAc,KAAK,GAAG,IAAI,IAAI,KAAK,CAAC;YACtC,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE;QAClE,gBAAgB,EAAE,GAAG,CAAC,iBAAiB;QACvC,aAAa,EAAE,GAAG,CAAC,cAAc;QACjC,QAAQ,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,UAAU;QACV,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,wBAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,wBAAU,CAAC,KAAK;KAChE,CAAA;AACH,CAAC,CAAA;AA/BY,QAAA,WAAW,eA+BvB"}
@@ -0,0 +1,2 @@
1
+ export declare const mapInterval: (interval: string) => string;
2
+ //# sourceMappingURL=ohlcvInterval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ohlcvInterval.d.ts","sourceRoot":"","sources":["../../../src/utils/ohlcvInterval.ts"],"names":[],"mappings":"AAuBA,eAAO,MAAM,WAAW,GAAI,UAAU,MAAM,KAAG,MAU9C,CAAA"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mapInterval = void 0;
4
+ const perps_sdk_1 = require("@lifi/perps-sdk");
5
+ const perps_types_1 = require("@lifi/perps-types");
6
+ const LIGHTER_SUPPORTED_INTERVALS = {
7
+ '1m': '1m',
8
+ '5m': '5m',
9
+ '15m': '15m',
10
+ '30m': '30m',
11
+ '1h': '1h',
12
+ '4h': '4h',
13
+ '12h': '12h',
14
+ '1d': '1d',
15
+ '1w': '1w',
16
+ };
17
+ const mapInterval = (interval) => {
18
+ const resolution = LIGHTER_SUPPORTED_INTERVALS[interval];
19
+ if (!resolution) {
20
+ throw new perps_sdk_1.PerpsError(perps_types_1.PerpsErrorCode.ValidationError, `Lighter does not support OHLCV interval '${interval}'. ` +
21
+ `Supported: ${Object.keys(LIGHTER_SUPPORTED_INTERVALS).join(', ')}.`);
22
+ }
23
+ return resolution;
24
+ };
25
+ exports.mapInterval = mapInterval;
26
+ //# sourceMappingURL=ohlcvInterval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ohlcvInterval.js","sourceRoot":"","sources":["../../../src/utils/ohlcvInterval.ts"],"names":[],"mappings":";;;AAAA,+CAA4C;AAC5C,mDAAkD;AASlD,MAAM,2BAA2B,GAA2B;IAC1D,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,KAAK;IACZ,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;CACX,CAAA;AAGM,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAU,EAAE;IACtD,MAAM,UAAU,GAAG,2BAA2B,CAAC,QAAQ,CAAC,CAAA;IACxD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,sBAAU,CAClB,4BAAc,CAAC,eAAe,EAC9B,4CAA4C,QAAQ,KAAK;YACvD,cAAc,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACvE,CAAA;IACH,CAAC;IACD,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA;AAVY,QAAA,WAAW,eAUvB"}
@@ -0,0 +1,4 @@
1
+ import { type Market } from '@lifi/perps-types';
2
+ export declare function formatOrderPrice(market: Market, price: number): string;
3
+ export declare function formatOrderSize(market: Market, size: number): string;
4
+ //# sourceMappingURL=orderFormatting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orderFormatting.d.ts","sourceRoot":"","sources":["../../../src/utils/orderFormatting.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,MAAM,EAAkB,MAAM,mBAAmB,CAAA;AAY/D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAUtE;AAUD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGpE"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.formatOrderPrice = formatOrderPrice;
7
+ exports.formatOrderSize = formatOrderSize;
8
+ const perps_sdk_1 = require("@lifi/perps-sdk");
9
+ const perps_types_1 = require("@lifi/perps-types");
10
+ const big_js_1 = __importDefault(require("big.js"));
11
+ function formatOrderPrice(market, price) {
12
+ if (market.priceDecimals === undefined) {
13
+ throw new perps_sdk_1.PerpsError(perps_types_1.PerpsErrorCode.ValidationError, `Market '${market.id}' carries no priceDecimals; Lighter order prices ` +
14
+ `cannot be formatted without the market's tick grid.`);
15
+ }
16
+ const rounded = new big_js_1.default(price).round(market.priceDecimals, big_js_1.default.roundHalfUp);
17
+ return rounded.eq(0) ? '0' : rounded.toFixed();
18
+ }
19
+ function formatOrderSize(market, size) {
20
+ const truncated = new big_js_1.default(size).round(market.szDecimals, big_js_1.default.roundDown);
21
+ return truncated.eq(0) ? '0' : truncated.toFixed();
22
+ }
23
+ //# sourceMappingURL=orderFormatting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orderFormatting.js","sourceRoot":"","sources":["../../../src/utils/orderFormatting.ts"],"names":[],"mappings":";;;;;AAsBA,4CAUC;AAUD,0CAGC;AApCD,+CAA4C;AAC5C,mDAA+D;AAC/D,oDAAwB;AAWxB,SAAgB,gBAAgB,CAAC,MAAc,EAAE,KAAa;IAC5D,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACvC,MAAM,IAAI,sBAAU,CAClB,4BAAc,CAAC,eAAe,EAC9B,WAAW,MAAM,CAAC,EAAE,mDAAmD;YACrE,qDAAqD,CACxD,CAAA;IACH,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,gBAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,gBAAG,CAAC,WAAW,CAAC,CAAA;IAC3E,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;AAChD,CAAC;AAUD,SAAgB,eAAe,CAAC,MAAc,EAAE,IAAY;IAC1D,MAAM,SAAS,GAAG,IAAI,gBAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,gBAAG,CAAC,SAAS,CAAC,CAAA;IACvE,OAAO,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAA;AACpD,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const toIsoFromSeconds: (seconds: number) => string;
2
+ export declare const toIsoFromMs: (ms: number) => string;
3
+ //# sourceMappingURL=time.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../../src/utils/time.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM,KAAG,MACX,CAAA;AAGxC,eAAO,MAAM,WAAW,GAAI,IAAI,MAAM,KAAG,MAAoC,CAAA"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toIsoFromMs = exports.toIsoFromSeconds = void 0;
4
+ const toIsoFromSeconds = (seconds) => new Date(seconds * 1000).toISOString();
5
+ exports.toIsoFromSeconds = toIsoFromSeconds;
6
+ const toIsoFromMs = (ms) => new Date(ms).toISOString();
7
+ exports.toIsoFromMs = toIsoFromMs;
8
+ //# sourceMappingURL=time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.js","sourceRoot":"","sources":["../../../src/utils/time.ts"],"names":[],"mappings":";;;AACO,MAAM,gBAAgB,GAAG,CAAC,OAAe,EAAU,EAAE,CAC1D,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;AAD3B,QAAA,gBAAgB,oBACW;AAGjC,MAAM,WAAW,GAAG,CAAC,EAAU,EAAU,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;AAAhE,QAAA,WAAW,eAAqD"}
@@ -0,0 +1,9 @@
1
+ export declare const marginFractionToMaxLeverage: (fraction: number) => number;
2
+ export declare const leverageToFraction: (leverage: number) => number;
3
+ export type ScaleToIntegerPolicy = 'truncate' | 'round';
4
+ export declare const scaleToInteger: (value: string, decimals: number, policy: ScaleToIntegerPolicy) => number;
5
+ export declare const mapOrderTypeToInt: (type?: string) => number;
6
+ export declare const resolveTimeInForce: (orderTypeInt: number, tif?: string) => number;
7
+ export declare const mapTimeInForceToInt: (tif?: string) => number;
8
+ export declare const orderExpiryForTif: (tifInt: number) => number;
9
+ //# sourceMappingURL=wireEncoding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wireEncoding.d.ts","sourceRoot":"","sources":["../../../src/utils/wireEncoding.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,2BAA2B,GAAI,UAAU,MAAM,KAAG,MAK9D,CAAA;AAMD,eAAO,MAAM,kBAAkB,GAAI,UAAU,MAAM,KAAG,MAQrD,CAAA;AAUD,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG,OAAO,CAAA;AAcvD,eAAO,MAAM,cAAc,GACzB,OAAO,MAAM,EACb,UAAU,MAAM,EAChB,QAAQ,oBAAoB,KAC3B,MA0BF,CAAA;AAMD,eAAO,MAAM,iBAAiB,GAAI,OAAO,MAAM,KAAG,MAUjD,CAAA;AAYD,eAAO,MAAM,kBAAkB,GAC7B,cAAc,MAAM,EACpB,MAAM,MAAM,KACX,MAgBF,CAAA;AAMD,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,MAOlD,CAAA;AAaD,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,KAAG,MAKlD,CAAA"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.orderExpiryForTif = exports.mapTimeInForceToInt = exports.resolveTimeInForce = exports.mapOrderTypeToInt = exports.scaleToInteger = exports.leverageToFraction = exports.marginFractionToMaxLeverage = void 0;
7
+ const perps_sdk_1 = require("@lifi/perps-sdk");
8
+ const perps_types_1 = require("@lifi/perps-types");
9
+ const big_js_1 = __importDefault(require("big.js"));
10
+ const action_js_1 = require("../types/action.js");
11
+ const marginFractionToMaxLeverage = (fraction) => {
12
+ if (!Number.isFinite(fraction) || fraction <= 0) {
13
+ return 1;
14
+ }
15
+ return Math.floor(10_000 / fraction);
16
+ };
17
+ exports.marginFractionToMaxLeverage = marginFractionToMaxLeverage;
18
+ const leverageToFraction = (leverage) => {
19
+ if (leverage <= 0) {
20
+ throw new perps_sdk_1.PerpsError(perps_types_1.PerpsErrorCode.ValidationError, `Invalid leverage: ${leverage}`);
21
+ }
22
+ return Math.round(10_000 / leverage);
23
+ };
24
+ exports.leverageToFraction = leverageToFraction;
25
+ const scaleToInteger = (value, decimals, policy) => {
26
+ if (!Number.isInteger(decimals) || decimals < 0) {
27
+ throw new perps_sdk_1.PerpsError(perps_types_1.PerpsErrorCode.ValidationError, `Invalid decimals for Lighter integer scaling: ${decimals}`);
28
+ }
29
+ let parsed;
30
+ try {
31
+ parsed = new big_js_1.default(value);
32
+ }
33
+ catch {
34
+ throw new perps_sdk_1.PerpsError(perps_types_1.PerpsErrorCode.ValidationError, `Invalid decimal string for Lighter integer scaling: '${value}'`);
35
+ }
36
+ const scaled = parsed
37
+ .times(new big_js_1.default(10).pow(decimals))
38
+ .round(0, policy === 'truncate' ? big_js_1.default.roundDown : big_js_1.default.roundHalfUp);
39
+ if (scaled.abs().gt(Number.MAX_SAFE_INTEGER)) {
40
+ throw new perps_sdk_1.PerpsError(perps_types_1.PerpsErrorCode.ValidationError, `Scaled value ${scaled.toFixed()} exceeds Number.MAX_SAFE_INTEGER and cannot be encoded exactly.`);
41
+ }
42
+ return scaled.toNumber();
43
+ };
44
+ exports.scaleToInteger = scaleToInteger;
45
+ const mapOrderTypeToInt = (type) => {
46
+ const map = {
47
+ LIMIT: action_js_1.LT_ORDER_TYPE_LIMIT,
48
+ MARKET: action_js_1.LT_ORDER_TYPE_MARKET,
49
+ STOP_MARKET: action_js_1.LT_ORDER_TYPE_STOP_LOSS,
50
+ STOP_LIMIT: action_js_1.LT_ORDER_TYPE_STOP_LOSS_LIMIT,
51
+ TAKE_PROFIT_MARKET: action_js_1.LT_ORDER_TYPE_TAKE_PROFIT,
52
+ TAKE_PROFIT_LIMIT: action_js_1.LT_ORDER_TYPE_TAKE_PROFIT_LIMIT,
53
+ };
54
+ return map[type ?? 'LIMIT'] ?? action_js_1.LT_ORDER_TYPE_LIMIT;
55
+ };
56
+ exports.mapOrderTypeToInt = mapOrderTypeToInt;
57
+ const resolveTimeInForce = (orderTypeInt, tif) => {
58
+ const requested = tif === undefined ? undefined : (0, exports.mapTimeInForceToInt)(tif);
59
+ const isMarketStyle = orderTypeInt === action_js_1.LT_ORDER_TYPE_MARKET ||
60
+ orderTypeInt === action_js_1.LT_ORDER_TYPE_STOP_LOSS ||
61
+ orderTypeInt === action_js_1.LT_ORDER_TYPE_TAKE_PROFIT;
62
+ if (isMarketStyle) {
63
+ if (requested !== undefined && requested !== action_js_1.LT_TIME_IN_FORCE_IOC) {
64
+ throw new perps_sdk_1.PerpsError(perps_types_1.PerpsErrorCode.ValidationError, `Lighter market-style orders only accept IOC (got tif=${tif}).`);
65
+ }
66
+ return action_js_1.LT_TIME_IN_FORCE_IOC;
67
+ }
68
+ return requested ?? action_js_1.LT_TIME_IN_FORCE_GTC;
69
+ };
70
+ exports.resolveTimeInForce = resolveTimeInForce;
71
+ const mapTimeInForceToInt = (tif) => {
72
+ const map = {
73
+ IOC: action_js_1.LT_TIME_IN_FORCE_IOC,
74
+ GTC: action_js_1.LT_TIME_IN_FORCE_GTC,
75
+ POST_ONLY: action_js_1.LT_TIME_IN_FORCE_POST_ONLY,
76
+ };
77
+ return map[tif ?? 'GTC'] ?? action_js_1.LT_TIME_IN_FORCE_GTC;
78
+ };
79
+ exports.mapTimeInForceToInt = mapTimeInForceToInt;
80
+ const orderExpiryForTif = (tifInt) => {
81
+ if (tifInt === action_js_1.LT_TIME_IN_FORCE_IOC) {
82
+ return 0;
83
+ }
84
+ return action_js_1.LT_DEFAULT_ORDER_EXPIRY;
85
+ };
86
+ exports.orderExpiryForTif = orderExpiryForTif;
87
+ //# sourceMappingURL=wireEncoding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wireEncoding.js","sourceRoot":"","sources":["../../../src/utils/wireEncoding.ts"],"names":[],"mappings":"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"}