@lightconexyz/lightcone-sdk 0.1.0 → 0.2.1

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 (381) hide show
  1. package/README.md +33 -206
  2. package/dist/auth/client.d.ts +25 -0
  3. package/dist/auth/client.d.ts.map +1 -0
  4. package/dist/auth/client.js +120 -0
  5. package/dist/auth/client.js.map +1 -0
  6. package/dist/auth/index.d.ts +73 -0
  7. package/dist/auth/index.d.ts.map +1 -0
  8. package/dist/auth/index.js +42 -0
  9. package/dist/auth/index.js.map +1 -0
  10. package/dist/auth/native.d.ts +8 -0
  11. package/dist/auth/native.d.ts.map +1 -0
  12. package/dist/auth/native.js +19 -0
  13. package/dist/auth/native.js.map +1 -0
  14. package/dist/auth.d.ts +1 -79
  15. package/dist/auth.d.ts.map +1 -1
  16. package/dist/auth.js +15 -145
  17. package/dist/auth.js.map +1 -1
  18. package/dist/client.d.ts +69 -0
  19. package/dist/client.d.ts.map +1 -0
  20. package/dist/client.js +158 -0
  21. package/dist/client.js.map +1 -0
  22. package/dist/domain/admin/client.d.ts +17 -0
  23. package/dist/domain/admin/client.d.ts.map +1 -0
  24. package/dist/domain/admin/client.js +32 -0
  25. package/dist/domain/admin/client.js.map +1 -0
  26. package/dist/domain/admin/index.d.ts +7 -0
  27. package/dist/domain/admin/index.d.ts.map +1 -0
  28. package/dist/domain/admin/index.js +19 -0
  29. package/dist/domain/admin/index.js.map +1 -0
  30. package/dist/domain/admin/wire.d.ts +117 -0
  31. package/dist/domain/admin/wire.d.ts.map +1 -0
  32. package/dist/domain/admin/wire.js +3 -0
  33. package/dist/domain/admin/wire.js.map +1 -0
  34. package/dist/domain/index.d.ts +9 -0
  35. package/dist/domain/index.d.ts.map +1 -0
  36. package/dist/domain/index.js +45 -0
  37. package/dist/domain/index.js.map +1 -0
  38. package/dist/domain/market/client.d.ts +21 -0
  39. package/dist/domain/market/client.d.ts.map +1 -0
  40. package/dist/domain/market/client.js +70 -0
  41. package/dist/domain/market/client.js.map +1 -0
  42. package/dist/domain/market/convert.d.ts +8 -0
  43. package/dist/domain/market/convert.d.ts.map +1 -0
  44. package/dist/domain/market/convert.js +96 -0
  45. package/dist/domain/market/convert.js.map +1 -0
  46. package/dist/domain/market/index.d.ts +47 -0
  47. package/dist/domain/market/index.d.ts.map +1 -0
  48. package/dist/domain/market/index.js +58 -0
  49. package/dist/domain/market/index.js.map +1 -0
  50. package/dist/domain/market/outcome.d.ts +12 -0
  51. package/dist/domain/market/outcome.d.ts.map +1 -0
  52. package/dist/domain/market/outcome.js +28 -0
  53. package/dist/domain/market/outcome.js.map +1 -0
  54. package/dist/domain/market/tokens.d.ts +42 -0
  55. package/dist/domain/market/tokens.d.ts.map +1 -0
  56. package/dist/domain/market/tokens.js +106 -0
  57. package/dist/domain/market/tokens.js.map +1 -0
  58. package/dist/domain/market/wire.d.ts +116 -0
  59. package/dist/domain/market/wire.d.ts.map +1 -0
  60. package/dist/domain/market/wire.js +3 -0
  61. package/dist/domain/market/wire.js.map +1 -0
  62. package/dist/domain/order/client.d.ts +187 -0
  63. package/dist/domain/order/client.d.ts.map +1 -0
  64. package/dist/domain/order/client.js +122 -0
  65. package/dist/domain/order/client.js.map +1 -0
  66. package/dist/domain/order/convert.d.ts +8 -0
  67. package/dist/domain/order/convert.d.ts.map +1 -0
  68. package/dist/domain/order/convert.js +80 -0
  69. package/dist/domain/order/convert.js.map +1 -0
  70. package/dist/domain/order/index.d.ts +48 -0
  71. package/dist/domain/order/index.d.ts.map +1 -0
  72. package/dist/domain/order/index.js +41 -0
  73. package/dist/domain/order/index.js.map +1 -0
  74. package/dist/domain/order/state.d.ts +26 -0
  75. package/dist/domain/order/state.d.ts.map +1 -0
  76. package/dist/domain/order/state.js +85 -0
  77. package/dist/domain/order/state.js.map +1 -0
  78. package/dist/domain/order/wire.d.ts +123 -0
  79. package/dist/domain/order/wire.d.ts.map +1 -0
  80. package/dist/domain/order/wire.js +3 -0
  81. package/dist/domain/order/wire.js.map +1 -0
  82. package/dist/domain/orderbook/client.d.ts +20 -0
  83. package/dist/domain/orderbook/client.d.ts.map +1 -0
  84. package/dist/domain/orderbook/client.js +30 -0
  85. package/dist/domain/orderbook/client.js.map +1 -0
  86. package/dist/domain/orderbook/convert.d.ts +5 -0
  87. package/dist/domain/orderbook/convert.d.ts.map +1 -0
  88. package/dist/domain/orderbook/convert.js +34 -0
  89. package/dist/domain/orderbook/convert.js.map +1 -0
  90. package/dist/domain/orderbook/index.d.ts +36 -0
  91. package/dist/domain/orderbook/index.d.ts.map +1 -0
  92. package/dist/domain/orderbook/index.js +63 -0
  93. package/dist/domain/orderbook/index.js.map +1 -0
  94. package/dist/domain/orderbook/state.d.ts +19 -0
  95. package/dist/domain/orderbook/state.d.ts.map +1 -0
  96. package/dist/domain/orderbook/state.js +86 -0
  97. package/dist/domain/orderbook/state.js.map +1 -0
  98. package/dist/domain/orderbook/ticker.d.ts +8 -0
  99. package/dist/domain/orderbook/ticker.d.ts.map +1 -0
  100. package/dist/domain/orderbook/ticker.js +3 -0
  101. package/dist/domain/orderbook/ticker.js.map +1 -0
  102. package/dist/domain/orderbook/wire.d.ts +63 -0
  103. package/dist/domain/orderbook/wire.d.ts.map +1 -0
  104. package/dist/domain/orderbook/wire.js +3 -0
  105. package/dist/domain/orderbook/wire.js.map +1 -0
  106. package/dist/domain/position/client.d.ts +13 -0
  107. package/dist/domain/position/client.d.ts.map +1 -0
  108. package/dist/domain/position/client.js +20 -0
  109. package/dist/domain/position/client.js.map +1 -0
  110. package/dist/domain/position/index.d.ts +66 -0
  111. package/dist/domain/position/index.d.ts.map +1 -0
  112. package/dist/domain/position/index.js +19 -0
  113. package/dist/domain/position/index.js.map +1 -0
  114. package/dist/domain/position/wire.d.ts +29 -0
  115. package/dist/domain/position/wire.d.ts.map +1 -0
  116. package/dist/domain/position/wire.js +3 -0
  117. package/dist/domain/position/wire.js.map +1 -0
  118. package/dist/domain/price_history/client.d.ts +12 -0
  119. package/dist/domain/price_history/client.d.ts.map +1 -0
  120. package/dist/domain/price_history/client.js +24 -0
  121. package/dist/domain/price_history/client.js.map +1 -0
  122. package/dist/domain/price_history/index.d.ts +14 -0
  123. package/dist/domain/price_history/index.d.ts.map +1 -0
  124. package/dist/domain/price_history/index.js +27 -0
  125. package/dist/domain/price_history/index.js.map +1 -0
  126. package/dist/domain/price_history/state.d.ts +11 -0
  127. package/dist/domain/price_history/state.d.ts.map +1 -0
  128. package/dist/domain/price_history/state.js +35 -0
  129. package/dist/domain/price_history/state.js.map +1 -0
  130. package/dist/domain/price_history/wire.d.ts +45 -0
  131. package/dist/domain/price_history/wire.d.ts.map +1 -0
  132. package/dist/domain/price_history/wire.js +3 -0
  133. package/dist/domain/price_history/wire.js.map +1 -0
  134. package/dist/domain/referral/client.d.ts +13 -0
  135. package/dist/domain/referral/client.d.ts.map +1 -0
  136. package/dist/domain/referral/client.js +34 -0
  137. package/dist/domain/referral/client.js.map +1 -0
  138. package/dist/domain/referral/index.d.ts +17 -0
  139. package/dist/domain/referral/index.d.ts.map +1 -0
  140. package/dist/domain/referral/index.js +19 -0
  141. package/dist/domain/referral/index.js.map +1 -0
  142. package/dist/domain/referral/wire.d.ts +22 -0
  143. package/dist/domain/referral/wire.d.ts.map +1 -0
  144. package/dist/domain/referral/wire.js +3 -0
  145. package/dist/domain/referral/wire.js.map +1 -0
  146. package/dist/domain/trade/client.d.ts +12 -0
  147. package/dist/domain/trade/client.d.ts.map +1 -0
  148. package/dist/domain/trade/client.js +27 -0
  149. package/dist/domain/trade/client.js.map +1 -0
  150. package/dist/domain/trade/convert.d.ts +5 -0
  151. package/dist/domain/trade/convert.d.ts.map +1 -0
  152. package/dist/domain/trade/convert.js +25 -0
  153. package/dist/domain/trade/convert.js.map +1 -0
  154. package/dist/domain/trade/index.d.ts +19 -0
  155. package/dist/domain/trade/index.d.ts.map +1 -0
  156. package/dist/domain/trade/index.js +24 -0
  157. package/dist/domain/trade/index.js.map +1 -0
  158. package/dist/domain/trade/state.d.ts +16 -0
  159. package/dist/domain/trade/state.d.ts.map +1 -0
  160. package/dist/domain/trade/state.js +40 -0
  161. package/dist/domain/trade/state.js.map +1 -0
  162. package/dist/domain/trade/wire.d.ts +34 -0
  163. package/dist/domain/trade/wire.d.ts.map +1 -0
  164. package/dist/domain/trade/wire.js +3 -0
  165. package/dist/domain/trade/wire.js.map +1 -0
  166. package/dist/error.d.ts +44 -0
  167. package/dist/error.d.ts.map +1 -0
  168. package/dist/error.js +126 -0
  169. package/dist/error.js.map +1 -0
  170. package/dist/http/client.d.ts +16 -0
  171. package/dist/http/client.d.ts.map +1 -0
  172. package/dist/http/client.js +146 -0
  173. package/dist/http/client.js.map +1 -0
  174. package/dist/http/index.d.ts +3 -0
  175. package/dist/http/index.d.ts.map +1 -0
  176. package/dist/http/index.js +12 -0
  177. package/dist/http/index.js.map +1 -0
  178. package/dist/http/retry.d.ts +30 -0
  179. package/dist/http/retry.d.ts.map +1 -0
  180. package/dist/http/retry.js +48 -0
  181. package/dist/http/retry.js.map +1 -0
  182. package/dist/index.d.ts +13 -51
  183. package/dist/index.d.ts.map +1 -1
  184. package/dist/index.js +22 -68
  185. package/dist/index.js.map +1 -1
  186. package/dist/network.d.ts +4 -4
  187. package/dist/network.d.ts.map +1 -1
  188. package/dist/network.js +4 -4
  189. package/dist/network.js.map +1 -1
  190. package/dist/prelude.d.ts +41 -0
  191. package/dist/prelude.d.ts.map +1 -0
  192. package/dist/prelude.js +55 -0
  193. package/dist/prelude.js.map +1 -0
  194. package/dist/privy/client.d.ts +17 -0
  195. package/dist/privy/client.d.ts.map +1 -0
  196. package/dist/privy/client.js +66 -0
  197. package/dist/privy/client.js.map +1 -0
  198. package/dist/privy/index.d.ts +57 -0
  199. package/dist/privy/index.d.ts.map +1 -0
  200. package/dist/privy/index.js +80 -0
  201. package/dist/privy/index.js.map +1 -0
  202. package/dist/program/accounts.d.ts +16 -1
  203. package/dist/program/accounts.d.ts.map +1 -1
  204. package/dist/program/accounts.js +41 -0
  205. package/dist/program/accounts.js.map +1 -1
  206. package/dist/program/builder.d.ts +15 -11
  207. package/dist/program/builder.d.ts.map +1 -1
  208. package/dist/program/builder.js +30 -22
  209. package/dist/program/builder.js.map +1 -1
  210. package/dist/program/client.d.ts +37 -1
  211. package/dist/program/client.d.ts.map +1 -1
  212. package/dist/program/client.js +82 -2
  213. package/dist/program/client.js.map +1 -1
  214. package/dist/program/constants.d.ts +9 -1
  215. package/dist/program/constants.d.ts.map +1 -1
  216. package/dist/program/constants.js +9 -1
  217. package/dist/program/constants.js.map +1 -1
  218. package/dist/program/envelope.d.ts +94 -0
  219. package/dist/program/envelope.d.ts.map +1 -0
  220. package/dist/program/envelope.js +258 -0
  221. package/dist/program/envelope.js.map +1 -0
  222. package/dist/program/error.d.ts +8 -0
  223. package/dist/program/error.d.ts.map +1 -0
  224. package/dist/program/error.js +20 -0
  225. package/dist/program/error.js.map +1 -0
  226. package/dist/program/index.d.ts +8 -5
  227. package/dist/program/index.d.ts.map +1 -1
  228. package/dist/program/index.js +28 -3
  229. package/dist/program/index.js.map +1 -1
  230. package/dist/program/instructions.d.ts +78 -1
  231. package/dist/program/instructions.d.ts.map +1 -1
  232. package/dist/program/instructions.js +277 -3
  233. package/dist/program/instructions.js.map +1 -1
  234. package/dist/program/orders.d.ts +26 -8
  235. package/dist/program/orders.d.ts.map +1 -1
  236. package/dist/program/orders.js +58 -31
  237. package/dist/program/orders.js.map +1 -1
  238. package/dist/program/pda.d.ts +19 -0
  239. package/dist/program/pda.d.ts.map +1 -1
  240. package/dist/program/pda.js +28 -0
  241. package/dist/program/pda.js.map +1 -1
  242. package/dist/program/types.d.ts +72 -9
  243. package/dist/program/types.d.ts.map +1 -1
  244. package/dist/program/types.js.map +1 -1
  245. package/dist/shared/fmt/decimal.d.ts +5 -0
  246. package/dist/shared/fmt/decimal.d.ts.map +1 -0
  247. package/dist/shared/fmt/decimal.js +54 -0
  248. package/dist/shared/fmt/decimal.js.map +1 -0
  249. package/dist/shared/fmt/index.d.ts +3 -0
  250. package/dist/shared/fmt/index.d.ts.map +1 -0
  251. package/dist/shared/fmt/index.js +39 -0
  252. package/dist/shared/fmt/index.js.map +1 -0
  253. package/dist/shared/fmt/num.d.ts +6 -0
  254. package/dist/shared/fmt/num.d.ts.map +1 -0
  255. package/dist/shared/fmt/num.js +44 -0
  256. package/dist/shared/fmt/num.js.map +1 -0
  257. package/dist/shared/index.d.ts +4 -7
  258. package/dist/shared/index.d.ts.map +1 -1
  259. package/dist/shared/index.js +19 -7
  260. package/dist/shared/index.js.map +1 -1
  261. package/dist/shared/price.d.ts +5 -33
  262. package/dist/shared/price.d.ts.map +1 -1
  263. package/dist/shared/price.js +11 -39
  264. package/dist/shared/price.js.map +1 -1
  265. package/dist/shared/scaling.d.ts +17 -30
  266. package/dist/shared/scaling.d.ts.map +1 -1
  267. package/dist/shared/scaling.js +88 -57
  268. package/dist/shared/scaling.js.map +1 -1
  269. package/dist/shared/types.d.ts +66 -16
  270. package/dist/shared/types.d.ts.map +1 -1
  271. package/dist/shared/types.js +81 -17
  272. package/dist/shared/types.js.map +1 -1
  273. package/dist/ws/client.browser.d.ts +46 -0
  274. package/dist/ws/client.browser.d.ts.map +1 -0
  275. package/dist/ws/client.browser.js +245 -0
  276. package/dist/ws/client.browser.js.map +1 -0
  277. package/dist/ws/client.node.d.ts +36 -0
  278. package/dist/ws/client.node.d.ts.map +1 -0
  279. package/dist/ws/client.node.js +226 -0
  280. package/dist/ws/client.node.js.map +1 -0
  281. package/dist/ws/index.d.ts +110 -0
  282. package/dist/ws/index.d.ts.map +1 -0
  283. package/dist/ws/index.js +181 -0
  284. package/dist/ws/index.js.map +1 -0
  285. package/dist/ws/subscriptions.d.ts +51 -0
  286. package/dist/ws/subscriptions.d.ts.map +1 -0
  287. package/dist/ws/subscriptions.js +44 -0
  288. package/dist/ws/subscriptions.js.map +1 -0
  289. package/dist/ws/types.d.ts +23 -0
  290. package/dist/ws/types.d.ts.map +1 -0
  291. package/dist/ws/types.js +3 -0
  292. package/dist/ws/types.js.map +1 -0
  293. package/package.json +10 -13
  294. package/dist/api/client.d.ts +0 -225
  295. package/dist/api/client.d.ts.map +0 -1
  296. package/dist/api/client.js +0 -452
  297. package/dist/api/client.js.map +0 -1
  298. package/dist/api/error.d.ts +0 -58
  299. package/dist/api/error.d.ts.map +0 -1
  300. package/dist/api/error.js +0 -98
  301. package/dist/api/error.js.map +0 -1
  302. package/dist/api/index.d.ts +0 -23
  303. package/dist/api/index.d.ts.map +0 -1
  304. package/dist/api/index.js +0 -51
  305. package/dist/api/index.js.map +0 -1
  306. package/dist/api/types/admin.d.ts +0 -49
  307. package/dist/api/types/admin.d.ts.map +0 -1
  308. package/dist/api/types/admin.js +0 -13
  309. package/dist/api/types/admin.js.map +0 -1
  310. package/dist/api/types/index.d.ts +0 -14
  311. package/dist/api/types/index.d.ts.map +0 -1
  312. package/dist/api/types/index.js +0 -13
  313. package/dist/api/types/index.js.map +0 -1
  314. package/dist/api/types/market.d.ts +0 -186
  315. package/dist/api/types/market.d.ts.map +0 -1
  316. package/dist/api/types/market.js +0 -6
  317. package/dist/api/types/market.js.map +0 -1
  318. package/dist/api/types/order.d.ts +0 -190
  319. package/dist/api/types/order.d.ts.map +0 -1
  320. package/dist/api/types/order.js +0 -6
  321. package/dist/api/types/order.js.map +0 -1
  322. package/dist/api/types/orderbook.d.ts +0 -36
  323. package/dist/api/types/orderbook.d.ts.map +0 -1
  324. package/dist/api/types/orderbook.js +0 -6
  325. package/dist/api/types/orderbook.js.map +0 -1
  326. package/dist/api/types/position.d.ts +0 -60
  327. package/dist/api/types/position.d.ts.map +0 -1
  328. package/dist/api/types/position.js +0 -6
  329. package/dist/api/types/position.js.map +0 -1
  330. package/dist/api/types/price_history.d.ts +0 -68
  331. package/dist/api/types/price_history.d.ts.map +0 -1
  332. package/dist/api/types/price_history.js +0 -13
  333. package/dist/api/types/price_history.js.map +0 -1
  334. package/dist/api/types/trade.d.ts +0 -67
  335. package/dist/api/types/trade.d.ts.map +0 -1
  336. package/dist/api/types/trade.js +0 -13
  337. package/dist/api/types/trade.js.map +0 -1
  338. package/dist/api/validation.d.ts +0 -24
  339. package/dist/api/validation.d.ts.map +0 -1
  340. package/dist/api/validation.js +0 -53
  341. package/dist/api/validation.js.map +0 -1
  342. package/dist/websocket/client.d.ts +0 -238
  343. package/dist/websocket/client.d.ts.map +0 -1
  344. package/dist/websocket/client.js +0 -580
  345. package/dist/websocket/client.js.map +0 -1
  346. package/dist/websocket/error.d.ts +0 -47
  347. package/dist/websocket/error.d.ts.map +0 -1
  348. package/dist/websocket/error.js +0 -83
  349. package/dist/websocket/error.js.map +0 -1
  350. package/dist/websocket/handlers.d.ts +0 -97
  351. package/dist/websocket/handlers.d.ts.map +0 -1
  352. package/dist/websocket/handlers.js +0 -277
  353. package/dist/websocket/handlers.js.map +0 -1
  354. package/dist/websocket/index.d.ts +0 -38
  355. package/dist/websocket/index.d.ts.map +0 -1
  356. package/dist/websocket/index.js +0 -75
  357. package/dist/websocket/index.js.map +0 -1
  358. package/dist/websocket/state/index.d.ts +0 -7
  359. package/dist/websocket/state/index.d.ts.map +0 -1
  360. package/dist/websocket/state/index.js +0 -14
  361. package/dist/websocket/state/index.js.map +0 -1
  362. package/dist/websocket/state/orderbook.d.ts +0 -107
  363. package/dist/websocket/state/orderbook.d.ts.map +0 -1
  364. package/dist/websocket/state/orderbook.js +0 -293
  365. package/dist/websocket/state/orderbook.js.map +0 -1
  366. package/dist/websocket/state/price.d.ts +0 -108
  367. package/dist/websocket/state/price.d.ts.map +0 -1
  368. package/dist/websocket/state/price.js +0 -243
  369. package/dist/websocket/state/price.js.map +0 -1
  370. package/dist/websocket/state/user.d.ts +0 -83
  371. package/dist/websocket/state/user.d.ts.map +0 -1
  372. package/dist/websocket/state/user.js +0 -228
  373. package/dist/websocket/state/user.js.map +0 -1
  374. package/dist/websocket/subscriptions.d.ts +0 -143
  375. package/dist/websocket/subscriptions.d.ts.map +0 -1
  376. package/dist/websocket/subscriptions.js +0 -244
  377. package/dist/websocket/subscriptions.js.map +0 -1
  378. package/dist/websocket/types.d.ts +0 -417
  379. package/dist/websocket/types.d.ts.map +0 -1
  380. package/dist/websocket/types.js +0 -195
  381. package/dist/websocket/types.js.map +0 -1
package/README.md CHANGED
@@ -1,231 +1,58 @@
1
- # Lightcone TypeScript SDK
1
+ # Lightcone TypeScript SDK v2
2
2
 
3
- TypeScript SDK for the Lightcone protocol on Solana.
3
+ TypeScript SDK v2 for the Lightcone protocol, rebuilt to mirror the Rust v2 layered architecture.
4
4
 
5
5
  ## Installation
6
6
 
7
7
  ```bash
8
- npm install @lightcone/sdk
8
+ npm install @lightconexyz/lightcone-sdk
9
9
  ```
10
10
 
11
- ## Modules
11
+ ## Architecture
12
12
 
13
- | Module | Description |
14
- |--------|-------------|
15
- | [`program`](src/program/README.md) | On-chain Solana program interaction (accounts, transactions, orders, Ed25519 verification) |
16
- | [`api`](src/api/README.md) | REST API client for market data and order management |
17
- | [`websocket`](src/websocket/README.md) | Real-time data streaming via WebSocket |
18
- | [`shared`](src/shared/README.md) | Shared utilities (Resolution, constants, decimal helpers) |
13
+ The SDK is organized in 5 layers:
19
14
 
20
- ## Quick Start
21
-
22
- ```typescript
23
- import { LightconePinocchioClient, PROGRAM_ID, api, websocket } from "@lightcone/sdk";
24
- ```
25
-
26
- ### REST API
27
-
28
- Query markets, submit orders, and manage positions via the REST API.
29
-
30
- ```typescript
31
- import { api } from "@lightcone/sdk";
32
-
33
- const client = new api.LightconeApiClient();
34
-
35
- // Get markets
36
- const markets = await client.getMarkets();
37
- console.log(`Found ${markets.total} markets`);
38
-
39
- // Get orderbook depth
40
- const orderbook = await client.getOrderbook("orderbook_id", 10);
41
- console.log(`Best bid: ${orderbook.best_bid}`);
42
- console.log(`Best ask: ${orderbook.best_ask}`);
15
+ 1. `shared`, `domain`, `program`, `error`, `network`
16
+ 2. `auth`, `privy`
17
+ 3. `http`
18
+ 4. `ws`
19
+ 5. `client` (`LightconeClient`)
43
20
 
44
- // Get user positions
45
- const positions = await client.getUserPositions("user_pubkey");
46
- ```
47
-
48
- ### On-Chain Program
49
-
50
- Build transactions for on-chain operations: minting positions, matching orders, redeeming winnings.
51
-
52
- ```typescript
53
- import { Connection, Keypair } from "@solana/web3.js";
54
- import { LightconePinocchioClient, BidOrderParams } from "@lightcone/sdk";
55
-
56
- const connection = new Connection("https://api.devnet.solana.com");
57
- const client = new LightconePinocchioClient(connection);
58
-
59
- // Fetch account state
60
- const exchange = await client.getExchange();
61
- const market = await client.getMarket(0n);
62
- console.log(`Market status: ${market.status}`);
63
-
64
- // Create a signed order
65
- const keypair = Keypair.generate();
66
- const nonce = await client.getNextNonce(keypair.publicKey);
67
-
68
- const order = client.signFullOrder(
69
- client.createBidOrder({
70
- nonce,
71
- maker: keypair.publicKey,
72
- market: client.pda.getMarketPda(0n, client.programId)[0],
73
- baseMint: conditionalTokenMint,
74
- quoteMint: usdcMint,
75
- makerAmount: 1_000_000n, // 1 USDC
76
- takerAmount: 500_000n, // 0.5 outcome tokens
77
- expiration: 0n,
78
- }),
79
- keypair
80
- );
81
- ```
82
-
83
- ### WebSocket
84
-
85
- Stream real-time orderbook updates, trades, and user events.
86
-
87
- ```typescript
88
- import { websocket } from "@lightcone/sdk";
89
-
90
- const client = await websocket.LightconeWebSocketClient.connectDefault();
91
-
92
- // Subscribe to orderbook updates
93
- client.subscribeBookUpdates(["market:orderbook"]);
94
-
95
- // Register event handler
96
- client.on((event) => {
97
- if (event.type === "BookUpdate") {
98
- const book = client.getOrderbook(event.orderbookId);
99
- if (book) {
100
- console.log(`Best bid: ${book.bestBid()}`);
101
- console.log(`Best ask: ${book.bestAsk()}`);
102
- }
103
- } else if (event.type === "Trade") {
104
- console.log(`Trade: ${event.trade.size} @ ${event.trade.price}`);
105
- } else if (event.type === "Disconnected") {
106
- console.log(`Disconnected: ${event.reason}`);
107
- }
108
- });
109
- ```
110
-
111
- ## Module Overview
112
-
113
- ### Program Module
114
-
115
- Direct interaction with the Lightcone Solana program:
116
-
117
- - **Account Types**: Exchange, Market, Position, OrderStatus, UserNonce
118
- - **Transaction Builders**: All 14 instructions (mint, merge, match, settle, etc.)
119
- - **PDA Derivation**: 8 PDA functions with seeds
120
- - **Order Types**: FullOrder (225 bytes), CompactOrder (65 bytes)
121
- - **Ed25519 Verification**: Three strategies (individual, batch, cross-reference)
122
-
123
- ```typescript
124
- import {
125
- LightconePinocchioClient,
126
- createBidOrder,
127
- signOrderFull,
128
- hashOrder,
129
- } from "@lightcone/sdk";
130
-
131
- // Create and sign an order
132
- const order = signOrderFull(
133
- createBidOrder({
134
- nonce: 1n,
135
- maker: pubkey,
136
- market: marketPda,
137
- baseMint: yesToken,
138
- quoteMint: noToken,
139
- makerAmount: 100_000n,
140
- takerAmount: 50_000n,
141
- expiration: 0n,
142
- }),
143
- keypair
144
- );
145
- const orderHash = hashOrder(order);
146
- ```
147
-
148
- ### API Module
149
-
150
- REST API client with typed requests and responses:
151
-
152
- - **Markets**: getMarkets, getMarket, getMarketBySlug
153
- - **Orderbooks**: getOrderbook with depth parameter
154
- - **Orders**: submitOrder, cancelOrder, cancelAllOrders
155
- - **Positions**: getUserPositions, getUserMarketPositions
156
- - **Trades**: getTrades with filters
157
- - **Price History**: getPriceHistory with OHLCV
21
+ ## Quick Start
158
22
 
159
23
  ```typescript
160
- import { api } from "@lightcone/sdk";
161
-
162
- const client = new api.LightconeApiClient();
163
- const response = await client.submitOrder({
164
- maker: "pubkey",
165
- nonce: 1,
166
- market_pubkey: "market",
167
- base_token: "base",
168
- quote_token: "quote",
169
- side: 0, // BID
170
- maker_amount: 1000000,
171
- taker_amount: 500000,
172
- expiration: 0,
173
- signature: "hex_signature",
174
- orderbook_id: "orderbook",
175
- });
176
- ```
177
-
178
- ### WebSocket Module
179
-
180
- Real-time streaming with automatic state management:
24
+ import { LightconeClient, Resolution } from "@lightconexyz/lightcone-sdk";
181
25
 
182
- - **Subscriptions**: book_updates, trades, user, price_history, market
183
- - **State Management**: LocalOrderbook, UserState, PriceHistory
184
- - **Authentication**: Ed25519 sign-in for user streams
185
- - **Auto-Reconnect**: Configurable reconnection with exponential backoff and jitter
26
+ const client = LightconeClient.builder()
27
+ .baseUrl("https://tapi.lightcone.xyz")
28
+ .wsUrl("wss://tws.lightcone.xyz/ws")
29
+ .build();
186
30
 
187
- ```typescript
188
- import { websocket } from "@lightcone/sdk";
189
- import { Keypair } from "@solana/web3.js";
190
-
191
- // Authenticated connection for user streams
192
- const keypair = Keypair.generate();
193
- const client = await websocket.LightconeWebSocketClient.connectAuthenticated(keypair);
194
- client.subscribeUser(keypair.publicKey.toBase58());
195
-
196
- // Access maintained state
197
- const state = client.getUserState(keypair.publicKey.toBase58());
198
- if (state) {
199
- console.log(`Open orders: ${state.orderCount()}`);
200
- }
31
+ const markets = await client.markets().get(undefined, 20);
32
+ const orderbook = await client.orderbooks().get("orderbook_id", 20);
33
+ const trades = await client.trades().get("orderbook_id", 50);
34
+ const candles = await client.priceHistory().get("orderbook_id", Resolution.Minute1);
201
35
  ```
202
36
 
203
- ### Shared Module
204
-
205
- Common utilities used across modules:
37
+ ## Main Entry Points
206
38
 
207
- - **Resolution**: Candle intervals (1m, 5m, 15m, 1h, 4h, 1d)
208
- - **Constants**: Program IDs, seeds, discriminators, sizes
209
- - **Types**: MarketStatus, OrderSide, account data interfaces
39
+ - `LightconeClient` + `LightconeClientBuilder`
40
+ - `client.markets()`, `client.orderbooks()`, `client.orders()`, `client.positions()`
41
+ - `client.trades()`, `client.priceHistory()`, `client.admin()`, `client.auth()`, `client.privy()`, `client.referrals()`
42
+ - `client.ws()` for WebSocket streaming with typed subscribe/unsubscribe payloads
210
43
 
211
- ```typescript
212
- import { Resolution, PROGRAM_ID } from "@lightcone/sdk";
213
-
214
- const res = Resolution.OneHour; // "1h"
215
- console.log(res); // "1h"
216
- ```
44
+ ## Program Module
217
45
 
218
- ## Features
46
+ `program/` remains the on-chain toolkit (PDAs, instructions, account deserialization, order utilities), with v2 envelope builders now exposed:
219
47
 
220
- - **Full TypeScript support**: Comprehensive types for all APIs
221
- - **Zero-copy serialization**: Efficient binary order formats
222
- - **Cross-instruction Ed25519**: Optimized transaction sizes
223
- - **Automatic reconnection**: Jittered exponential backoff
224
- - **State management**: Local orderbook and user state tracking
48
+ - `LimitOrderEnvelope`
49
+ - `TriggerOrderEnvelope`
225
50
 
226
- ## Program ID
51
+ ## Notes
227
52
 
228
- **Mainnet/Devnet**: `EfRvELrn4b5aJRwddD1VUrqzsfm1pewBLPebq3iMPDp2`
53
+ - Browser cookie-based auth is supported via `credentials: "include"`.
54
+ - Native/Node auth token injection uses `Cookie: auth_token=...` internally.
55
+ - Orderbook decimals are memoized in the high-level client cache.
229
56
 
230
57
  ## License
231
58
 
@@ -0,0 +1,25 @@
1
+ import { type LightconeHttp } from "../http";
2
+ import type { AuthCredentials, User } from "./index";
3
+ interface AuthState {
4
+ getCredentials(): AuthCredentials | undefined;
5
+ setCredentials(credentials: AuthCredentials | undefined): void;
6
+ clearCaches(): Promise<void>;
7
+ }
8
+ interface ClientContext {
9
+ http: LightconeHttp;
10
+ authState: AuthState;
11
+ }
12
+ export declare class Auth {
13
+ private readonly client;
14
+ constructor(client: ClientContext);
15
+ getNonce(): Promise<string>;
16
+ loginWithMessage(message: string, signatureBs58: string, pubkeyBytes: Uint8Array, useEmbeddedWallet?: boolean): Promise<User>;
17
+ checkSession(): Promise<User>;
18
+ logout(): Promise<void>;
19
+ disconnectX(): Promise<void>;
20
+ connectX(xUserId: string, xUsername: string, xDisplayName?: string): Promise<void>;
21
+ credentials(): AuthCredentials | undefined;
22
+ isAuthenticated(): boolean;
23
+ }
24
+ export {};
25
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/auth/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAE1D,OAAO,KAAK,EAAE,eAAe,EAA0D,IAAI,EAAE,MAAM,SAAS,CAAC;AAE7G,UAAU,SAAS;IACjB,cAAc,IAAI,eAAe,GAAG,SAAS,CAAC;IAC9C,cAAc,CAAC,WAAW,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI,CAAC;IAC/D,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,UAAU,aAAa;IACrB,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,qBAAa,IAAI;IACH,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,aAAa;IAE5C,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;IAM3B,gBAAgB,CACpB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,UAAU,EACvB,iBAAiB,CAAC,EAAE,OAAO,GAC1B,OAAO,CAAC,IAAI,CAAC;IA2CV,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IA6B7B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAavB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,QAAQ,CACZ,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC;IAahB,WAAW,IAAI,eAAe,GAAG,SAAS;IAI1C,eAAe,IAAI,OAAO;CAO3B"}
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Auth = void 0;
4
+ const error_1 = require("../error");
5
+ const http_1 = require("../http");
6
+ const shared_1 = require("../shared");
7
+ class Auth {
8
+ client;
9
+ constructor(client) {
10
+ this.client = client;
11
+ }
12
+ async getNonce() {
13
+ const url = `${this.client.http.baseUrl()}/api/auth/nonce`;
14
+ const response = await this.client.http.get(url, http_1.RetryPolicy.None);
15
+ return response.nonce;
16
+ }
17
+ async loginWithMessage(message, signatureBs58, pubkeyBytes, useEmbeddedWallet) {
18
+ const url = `${this.client.http.baseUrl()}/api/auth/login_or_register_with_message`;
19
+ const body = {
20
+ message,
21
+ signature_bs58: signatureBs58,
22
+ pubkey_bytes: Array.from(pubkeyBytes),
23
+ use_embedded_wallet: useEmbeddedWallet,
24
+ };
25
+ let response;
26
+ try {
27
+ response = await this.client.http.post(url, body, http_1.RetryPolicy.None);
28
+ }
29
+ catch (error) {
30
+ throw error_1.SdkError.from(new error_1.AuthError("LoginFailed", error instanceof Error ? error.message : String(error)));
31
+ }
32
+ if (response.token) {
33
+ await this.client.http.setAuthToken(response.token);
34
+ }
35
+ const credentials = {
36
+ user_id: response.user_id,
37
+ wallet_address: (0, shared_1.asPubkeyStr)(response.wallet_address),
38
+ expires_at: parseExpiry(response.expires_at),
39
+ };
40
+ this.client.authState.setCredentials(credentials);
41
+ return {
42
+ id: response.user_id,
43
+ wallet_address: response.wallet_address,
44
+ linked_account: response.linked_account,
45
+ privy_id: response.privy_id,
46
+ embedded_wallet: response.embedded_wallet,
47
+ x_username: response.x_username,
48
+ x_user_id: response.x_user_id,
49
+ x_display_name: response.x_display_name,
50
+ };
51
+ }
52
+ async checkSession() {
53
+ const url = `${this.client.http.baseUrl()}/api/auth/me`;
54
+ let response;
55
+ try {
56
+ response = await this.client.http.get(url, http_1.RetryPolicy.Idempotent);
57
+ }
58
+ catch (error) {
59
+ this.client.authState.setCredentials(undefined);
60
+ throw error_1.SdkError.from(error);
61
+ }
62
+ this.client.authState.setCredentials({
63
+ user_id: response.user_id,
64
+ wallet_address: (0, shared_1.asPubkeyStr)(response.wallet_address),
65
+ expires_at: parseExpiry(response.expires_at),
66
+ });
67
+ return {
68
+ id: response.user_id,
69
+ wallet_address: response.wallet_address,
70
+ linked_account: response.linked_account,
71
+ privy_id: response.privy_id,
72
+ embedded_wallet: response.embedded_wallet,
73
+ x_username: response.x_username,
74
+ x_user_id: response.x_user_id,
75
+ x_display_name: response.x_display_name,
76
+ };
77
+ }
78
+ async logout() {
79
+ const url = `${this.client.http.baseUrl()}/api/auth/logout`;
80
+ try {
81
+ await this.client.http.post(url, {}, http_1.RetryPolicy.None);
82
+ }
83
+ catch {
84
+ // Backend cookie clear can fail in local/dev setups; still clear local state.
85
+ }
86
+ await this.client.http.clearAuthToken();
87
+ this.client.authState.setCredentials(undefined);
88
+ await this.client.authState.clearCaches();
89
+ }
90
+ async disconnectX() {
91
+ const url = `${this.client.http.baseUrl()}/api/auth/disconnect_x`;
92
+ await this.client.http.post(url, {}, http_1.RetryPolicy.None);
93
+ }
94
+ async connectX(xUserId, xUsername, xDisplayName) {
95
+ const url = `${this.client.http.baseUrl()}/api/auth/connect_x`;
96
+ await this.client.http.post(url, {
97
+ x_user_id: xUserId,
98
+ x_username: xUsername,
99
+ x_display_name: xDisplayName,
100
+ }, http_1.RetryPolicy.None);
101
+ }
102
+ credentials() {
103
+ return this.client.authState.getCredentials();
104
+ }
105
+ isAuthenticated() {
106
+ const credentials = this.credentials();
107
+ if (!credentials) {
108
+ return false;
109
+ }
110
+ return Date.now() < credentials.expires_at.getTime();
111
+ }
112
+ }
113
+ exports.Auth = Auth;
114
+ function parseExpiry(timestamp) {
115
+ if (timestamp > 1_000_000_000_000) {
116
+ return new Date(timestamp);
117
+ }
118
+ return new Date(timestamp * 1000);
119
+ }
120
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/auth/client.ts"],"names":[],"mappings":"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","sourcesContent":["import { AuthError, SdkError } from \"../error\";\nimport { RetryPolicy, type LightconeHttp } from \"../http\";\nimport { asPubkeyStr } from \"../shared\";\nimport type { AuthCredentials, LoginRequest, LoginResponse, MeResponse, NonceResponse, User } from \"./index\";\n\ninterface AuthState {\n getCredentials(): AuthCredentials | undefined;\n setCredentials(credentials: AuthCredentials | undefined): void;\n clearCaches(): Promise<void>;\n}\n\ninterface ClientContext {\n http: LightconeHttp;\n authState: AuthState;\n}\n\nexport class Auth {\n constructor(private readonly client: ClientContext) {}\n\n async getNonce(): Promise<string> {\n const url = `${this.client.http.baseUrl()}/api/auth/nonce`;\n const response = await this.client.http.get<NonceResponse>(url, RetryPolicy.None);\n return response.nonce;\n }\n\n async loginWithMessage(\n message: string,\n signatureBs58: string,\n pubkeyBytes: Uint8Array,\n useEmbeddedWallet?: boolean\n ): Promise<User> {\n const url = `${this.client.http.baseUrl()}/api/auth/login_or_register_with_message`;\n const body: LoginRequest = {\n message,\n signature_bs58: signatureBs58,\n pubkey_bytes: Array.from(pubkeyBytes),\n use_embedded_wallet: useEmbeddedWallet,\n };\n\n let response: LoginResponse;\n try {\n response = await this.client.http.post<LoginResponse, LoginRequest>(\n url,\n body,\n RetryPolicy.None\n );\n } catch (error) {\n throw SdkError.from(new AuthError(\"LoginFailed\", error instanceof Error ? error.message : String(error)));\n }\n\n if (response.token) {\n await this.client.http.setAuthToken(response.token);\n }\n\n const credentials: AuthCredentials = {\n user_id: response.user_id,\n wallet_address: asPubkeyStr(response.wallet_address),\n expires_at: parseExpiry(response.expires_at),\n };\n this.client.authState.setCredentials(credentials);\n\n return {\n id: response.user_id,\n wallet_address: response.wallet_address,\n linked_account: response.linked_account,\n privy_id: response.privy_id,\n embedded_wallet: response.embedded_wallet,\n x_username: response.x_username,\n x_user_id: response.x_user_id,\n x_display_name: response.x_display_name,\n };\n }\n\n async checkSession(): Promise<User> {\n const url = `${this.client.http.baseUrl()}/api/auth/me`;\n\n let response: MeResponse;\n try {\n response = await this.client.http.get<MeResponse>(url, RetryPolicy.Idempotent);\n } catch (error) {\n this.client.authState.setCredentials(undefined);\n throw SdkError.from(error);\n }\n\n this.client.authState.setCredentials({\n user_id: response.user_id,\n wallet_address: asPubkeyStr(response.wallet_address),\n expires_at: parseExpiry(response.expires_at),\n });\n\n return {\n id: response.user_id,\n wallet_address: response.wallet_address,\n linked_account: response.linked_account,\n privy_id: response.privy_id,\n embedded_wallet: response.embedded_wallet,\n x_username: response.x_username,\n x_user_id: response.x_user_id,\n x_display_name: response.x_display_name,\n };\n }\n\n async logout(): Promise<void> {\n const url = `${this.client.http.baseUrl()}/api/auth/logout`;\n try {\n await this.client.http.post<unknown, Record<string, never>>(url, {}, RetryPolicy.None);\n } catch {\n // Backend cookie clear can fail in local/dev setups; still clear local state.\n }\n\n await this.client.http.clearAuthToken();\n this.client.authState.setCredentials(undefined);\n await this.client.authState.clearCaches();\n }\n\n async disconnectX(): Promise<void> {\n const url = `${this.client.http.baseUrl()}/api/auth/disconnect_x`;\n await this.client.http.post<unknown, Record<string, never>>(url, {}, RetryPolicy.None);\n }\n\n async connectX(\n xUserId: string,\n xUsername: string,\n xDisplayName?: string\n ): Promise<void> {\n const url = `${this.client.http.baseUrl()}/api/auth/connect_x`;\n await this.client.http.post<unknown, { x_user_id: string; x_username: string; x_display_name?: string }>(\n url,\n {\n x_user_id: xUserId,\n x_username: xUsername,\n x_display_name: xDisplayName,\n },\n RetryPolicy.None\n );\n }\n\n credentials(): AuthCredentials | undefined {\n return this.client.authState.getCredentials();\n }\n\n isAuthenticated(): boolean {\n const credentials = this.credentials();\n if (!credentials) {\n return false;\n }\n return Date.now() < credentials.expires_at.getTime();\n }\n}\n\nfunction parseExpiry(timestamp: number): Date {\n if (timestamp > 1_000_000_000_000) {\n return new Date(timestamp);\n }\n return new Date(timestamp * 1000);\n}\n"]}
@@ -0,0 +1,73 @@
1
+ import type { PubkeyStr } from "../shared";
2
+ export * from "./client";
3
+ export * from "./native";
4
+ export interface User {
5
+ id: string;
6
+ wallet_address: string;
7
+ linked_account: LinkedAccount;
8
+ privy_id?: string;
9
+ embedded_wallet?: EmbeddedWallet;
10
+ x_username?: string;
11
+ x_user_id?: string;
12
+ x_display_name?: string;
13
+ }
14
+ export interface LinkedAccount {
15
+ id: string;
16
+ type: LinkedAccountType;
17
+ chain?: ChainType;
18
+ address: string;
19
+ }
20
+ export declare enum LinkedAccountType {
21
+ Wallet = "wallet",
22
+ TwitterOauth = "twitter_oauth",
23
+ GoogleOauth = "google_oauth"
24
+ }
25
+ export declare enum ChainType {
26
+ Solana = "solana",
27
+ Ethereum = "ethereum"
28
+ }
29
+ export interface EmbeddedWallet {
30
+ privy_id: string;
31
+ chain: ChainType;
32
+ address: string;
33
+ }
34
+ export interface AuthCredentials {
35
+ user_id: string;
36
+ wallet_address: PubkeyStr;
37
+ expires_at: Date;
38
+ }
39
+ export declare function isAuthenticated(credentials?: AuthCredentials): boolean;
40
+ export declare function generateSigninMessage(nonce: string): Uint8Array;
41
+ export interface LoginRequest {
42
+ message: string;
43
+ signature_bs58: string;
44
+ pubkey_bytes: number[];
45
+ use_embedded_wallet?: boolean;
46
+ }
47
+ export interface LoginResponse {
48
+ token: string;
49
+ user_id: string;
50
+ wallet_address: string;
51
+ expires_at: number;
52
+ linked_account: LinkedAccount;
53
+ privy_id?: string;
54
+ embedded_wallet?: EmbeddedWallet;
55
+ x_username?: string;
56
+ x_user_id?: string;
57
+ x_display_name?: string;
58
+ }
59
+ export interface MeResponse {
60
+ user_id: string;
61
+ wallet_address: string;
62
+ linked_account: LinkedAccount;
63
+ privy_id?: string;
64
+ embedded_wallet?: EmbeddedWallet;
65
+ x_username?: string;
66
+ x_user_id?: string;
67
+ x_display_name?: string;
68
+ expires_at: number;
69
+ }
70
+ export interface NonceResponse {
71
+ nonce: string;
72
+ }
73
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AAEzB,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,iBAAiB,CAAC;IACxB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,oBAAY,iBAAiB;IAC3B,MAAM,WAAW;IACjB,YAAY,kBAAkB;IAC9B,WAAW,iBAAiB;CAC7B;AAED,oBAAY,SAAS;IACnB,MAAM,WAAW;IACjB,QAAQ,aAAa;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,SAAS,CAAC;IAC1B,UAAU,EAAE,IAAI,CAAC;CAClB;AAED,wBAAgB,eAAe,CAAC,WAAW,CAAC,EAAE,eAAe,GAAG,OAAO,CAKtE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAE/D;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;CACf"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.ChainType = exports.LinkedAccountType = void 0;
18
+ exports.isAuthenticated = isAuthenticated;
19
+ exports.generateSigninMessage = generateSigninMessage;
20
+ __exportStar(require("./client"), exports);
21
+ __exportStar(require("./native"), exports);
22
+ var LinkedAccountType;
23
+ (function (LinkedAccountType) {
24
+ LinkedAccountType["Wallet"] = "wallet";
25
+ LinkedAccountType["TwitterOauth"] = "twitter_oauth";
26
+ LinkedAccountType["GoogleOauth"] = "google_oauth";
27
+ })(LinkedAccountType || (exports.LinkedAccountType = LinkedAccountType = {}));
28
+ var ChainType;
29
+ (function (ChainType) {
30
+ ChainType["Solana"] = "solana";
31
+ ChainType["Ethereum"] = "ethereum";
32
+ })(ChainType || (exports.ChainType = ChainType = {}));
33
+ function isAuthenticated(credentials) {
34
+ if (!credentials) {
35
+ return false;
36
+ }
37
+ return Date.now() < credentials.expires_at.getTime();
38
+ }
39
+ function generateSigninMessage(nonce) {
40
+ return new TextEncoder().encode(`Sign in to Lightcone\nNonce: ${nonce}`);
41
+ }
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AA8CA,0CAKC;AAED,sDAEC;AArDD,2CAAyB;AACzB,2CAAyB;AAoBzB,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IAC3B,sCAAiB,CAAA;IACjB,mDAA8B,CAAA;IAC9B,iDAA4B,CAAA;AAC9B,CAAC,EAJW,iBAAiB,iCAAjB,iBAAiB,QAI5B;AAED,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,8BAAiB,CAAA;IACjB,kCAAqB,CAAA;AACvB,CAAC,EAHW,SAAS,yBAAT,SAAS,QAGpB;AAcD,SAAgB,eAAe,CAAC,WAA6B;IAC3D,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;AACvD,CAAC;AAED,SAAgB,qBAAqB,CAAC,KAAa;IACjD,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,gCAAgC,KAAK,EAAE,CAAC,CAAC;AAC3E,CAAC","sourcesContent":["import type { PubkeyStr } from \"../shared\";\n\nexport * from \"./client\";\nexport * from \"./native\";\n\nexport interface User {\n id: string;\n wallet_address: string;\n linked_account: LinkedAccount;\n privy_id?: string;\n embedded_wallet?: EmbeddedWallet;\n x_username?: string;\n x_user_id?: string;\n x_display_name?: string;\n}\n\nexport interface LinkedAccount {\n id: string;\n type: LinkedAccountType;\n chain?: ChainType;\n address: string;\n}\n\nexport enum LinkedAccountType {\n Wallet = \"wallet\",\n TwitterOauth = \"twitter_oauth\",\n GoogleOauth = \"google_oauth\",\n}\n\nexport enum ChainType {\n Solana = \"solana\",\n Ethereum = \"ethereum\",\n}\n\nexport interface EmbeddedWallet {\n privy_id: string;\n chain: ChainType;\n address: string;\n}\n\nexport interface AuthCredentials {\n user_id: string;\n wallet_address: PubkeyStr;\n expires_at: Date;\n}\n\nexport function isAuthenticated(credentials?: AuthCredentials): boolean {\n if (!credentials) {\n return false;\n }\n return Date.now() < credentials.expires_at.getTime();\n}\n\nexport function generateSigninMessage(nonce: string): Uint8Array {\n return new TextEncoder().encode(`Sign in to Lightcone\\nNonce: ${nonce}`);\n}\n\nexport interface LoginRequest {\n message: string;\n signature_bs58: string;\n pubkey_bytes: number[];\n use_embedded_wallet?: boolean;\n}\n\nexport interface LoginResponse {\n token: string;\n user_id: string;\n wallet_address: string;\n expires_at: number;\n linked_account: LinkedAccount;\n privy_id?: string;\n embedded_wallet?: EmbeddedWallet;\n x_username?: string;\n x_user_id?: string;\n x_display_name?: string;\n}\n\nexport interface MeResponse {\n user_id: string;\n wallet_address: string;\n linked_account: LinkedAccount;\n privy_id?: string;\n embedded_wallet?: EmbeddedWallet;\n x_username?: string;\n x_user_id?: string;\n x_display_name?: string;\n expires_at: number;\n}\n\nexport interface NonceResponse {\n nonce: string;\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import { Keypair } from "@solana/web3.js";
2
+ export interface SignedLogin {
3
+ message: string;
4
+ signature_bs58: string;
5
+ pubkey_bytes: Uint8Array;
6
+ }
7
+ export declare function signLoginMessage(keypair: Keypair, nonce: string): SignedLogin;
8
+ //# sourceMappingURL=native.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/auth/native.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAK1C,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,UAAU,CAAC;CAC1B;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAS7E"}
@@ -0,0 +1,19 @@
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.signLoginMessage = signLoginMessage;
7
+ const bs58_1 = __importDefault(require("bs58"));
8
+ const tweetnacl_1 = __importDefault(require("tweetnacl"));
9
+ const index_1 = require("./index");
10
+ function signLoginMessage(keypair, nonce) {
11
+ const messageBytes = (0, index_1.generateSigninMessage)(nonce);
12
+ const signature = tweetnacl_1.default.sign.detached(messageBytes, keypair.secretKey);
13
+ return {
14
+ message: new TextDecoder().decode(messageBytes),
15
+ signature_bs58: bs58_1.default.encode(signature),
16
+ pubkey_bytes: keypair.publicKey.toBytes(),
17
+ };
18
+ }
19
+ //# sourceMappingURL=native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/auth/native.ts"],"names":[],"mappings":";;;;;AAWA,4CASC;AAnBD,gDAAwB;AACxB,0DAA6B;AAC7B,mCAAgD;AAQhD,SAAgB,gBAAgB,CAAC,OAAgB,EAAE,KAAa;IAC9D,MAAM,YAAY,GAAG,IAAA,6BAAqB,EAAC,KAAK,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,mBAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAEtE,OAAO;QACL,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;QAC/C,cAAc,EAAE,cAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QACtC,YAAY,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE;KAC1C,CAAC;AACJ,CAAC","sourcesContent":["import { Keypair } from \"@solana/web3.js\";\nimport bs58 from \"bs58\";\nimport nacl from \"tweetnacl\";\nimport { generateSigninMessage } from \"./index\";\n\nexport interface SignedLogin {\n message: string;\n signature_bs58: string;\n pubkey_bytes: Uint8Array;\n}\n\nexport function signLoginMessage(keypair: Keypair, nonce: string): SignedLogin {\n const messageBytes = generateSigninMessage(nonce);\n const signature = nacl.sign.detached(messageBytes, keypair.secretKey);\n\n return {\n message: new TextDecoder().decode(messageBytes),\n signature_bs58: bs58.encode(signature),\n pubkey_bytes: keypair.publicKey.toBytes(),\n };\n}\n"]}