@lightconexyz/lightcone-sdk 0.1.0 → 0.2.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 (373) 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 +61 -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 +47 -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 +19 -2
  203. package/dist/program/accounts.d.ts.map +1 -1
  204. package/dist/program/accounts.js +52 -2
  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 +40 -1
  211. package/dist/program/client.d.ts.map +1 -1
  212. package/dist/program/client.js +87 -2
  213. package/dist/program/client.js.map +1 -1
  214. package/dist/program/constants.d.ts +10 -1
  215. package/dist/program/constants.d.ts.map +1 -1
  216. package/dist/program/constants.js +11 -2
  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 +29 -3
  229. package/dist/program/index.js.map +1 -1
  230. package/dist/program/instructions.d.ts +124 -1
  231. package/dist/program/instructions.d.ts.map +1 -1
  232. package/dist/program/instructions.js +439 -4
  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 +93 -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.d.ts +35 -0
  274. package/dist/ws/client.d.ts.map +1 -0
  275. package/dist/ws/client.js +226 -0
  276. package/dist/ws/client.js.map +1 -0
  277. package/dist/ws/index.d.ts +109 -0
  278. package/dist/ws/index.d.ts.map +1 -0
  279. package/dist/ws/index.js +181 -0
  280. package/dist/ws/index.js.map +1 -0
  281. package/dist/ws/subscriptions.d.ts +51 -0
  282. package/dist/ws/subscriptions.d.ts.map +1 -0
  283. package/dist/ws/subscriptions.js +44 -0
  284. package/dist/ws/subscriptions.js.map +1 -0
  285. package/package.json +3 -11
  286. package/dist/api/client.d.ts +0 -225
  287. package/dist/api/client.d.ts.map +0 -1
  288. package/dist/api/client.js +0 -452
  289. package/dist/api/client.js.map +0 -1
  290. package/dist/api/error.d.ts +0 -58
  291. package/dist/api/error.d.ts.map +0 -1
  292. package/dist/api/error.js +0 -98
  293. package/dist/api/error.js.map +0 -1
  294. package/dist/api/index.d.ts +0 -23
  295. package/dist/api/index.d.ts.map +0 -1
  296. package/dist/api/index.js +0 -51
  297. package/dist/api/index.js.map +0 -1
  298. package/dist/api/types/admin.d.ts +0 -49
  299. package/dist/api/types/admin.d.ts.map +0 -1
  300. package/dist/api/types/admin.js +0 -13
  301. package/dist/api/types/admin.js.map +0 -1
  302. package/dist/api/types/index.d.ts +0 -14
  303. package/dist/api/types/index.d.ts.map +0 -1
  304. package/dist/api/types/index.js +0 -13
  305. package/dist/api/types/index.js.map +0 -1
  306. package/dist/api/types/market.d.ts +0 -186
  307. package/dist/api/types/market.d.ts.map +0 -1
  308. package/dist/api/types/market.js +0 -6
  309. package/dist/api/types/market.js.map +0 -1
  310. package/dist/api/types/order.d.ts +0 -190
  311. package/dist/api/types/order.d.ts.map +0 -1
  312. package/dist/api/types/order.js +0 -6
  313. package/dist/api/types/order.js.map +0 -1
  314. package/dist/api/types/orderbook.d.ts +0 -36
  315. package/dist/api/types/orderbook.d.ts.map +0 -1
  316. package/dist/api/types/orderbook.js +0 -6
  317. package/dist/api/types/orderbook.js.map +0 -1
  318. package/dist/api/types/position.d.ts +0 -60
  319. package/dist/api/types/position.d.ts.map +0 -1
  320. package/dist/api/types/position.js +0 -6
  321. package/dist/api/types/position.js.map +0 -1
  322. package/dist/api/types/price_history.d.ts +0 -68
  323. package/dist/api/types/price_history.d.ts.map +0 -1
  324. package/dist/api/types/price_history.js +0 -13
  325. package/dist/api/types/price_history.js.map +0 -1
  326. package/dist/api/types/trade.d.ts +0 -67
  327. package/dist/api/types/trade.d.ts.map +0 -1
  328. package/dist/api/types/trade.js +0 -13
  329. package/dist/api/types/trade.js.map +0 -1
  330. package/dist/api/validation.d.ts +0 -24
  331. package/dist/api/validation.d.ts.map +0 -1
  332. package/dist/api/validation.js +0 -53
  333. package/dist/api/validation.js.map +0 -1
  334. package/dist/websocket/client.d.ts +0 -238
  335. package/dist/websocket/client.d.ts.map +0 -1
  336. package/dist/websocket/client.js +0 -580
  337. package/dist/websocket/client.js.map +0 -1
  338. package/dist/websocket/error.d.ts +0 -47
  339. package/dist/websocket/error.d.ts.map +0 -1
  340. package/dist/websocket/error.js +0 -83
  341. package/dist/websocket/error.js.map +0 -1
  342. package/dist/websocket/handlers.d.ts +0 -97
  343. package/dist/websocket/handlers.d.ts.map +0 -1
  344. package/dist/websocket/handlers.js +0 -277
  345. package/dist/websocket/handlers.js.map +0 -1
  346. package/dist/websocket/index.d.ts +0 -38
  347. package/dist/websocket/index.d.ts.map +0 -1
  348. package/dist/websocket/index.js +0 -75
  349. package/dist/websocket/index.js.map +0 -1
  350. package/dist/websocket/state/index.d.ts +0 -7
  351. package/dist/websocket/state/index.d.ts.map +0 -1
  352. package/dist/websocket/state/index.js +0 -14
  353. package/dist/websocket/state/index.js.map +0 -1
  354. package/dist/websocket/state/orderbook.d.ts +0 -107
  355. package/dist/websocket/state/orderbook.d.ts.map +0 -1
  356. package/dist/websocket/state/orderbook.js +0 -293
  357. package/dist/websocket/state/orderbook.js.map +0 -1
  358. package/dist/websocket/state/price.d.ts +0 -108
  359. package/dist/websocket/state/price.d.ts.map +0 -1
  360. package/dist/websocket/state/price.js +0 -243
  361. package/dist/websocket/state/price.js.map +0 -1
  362. package/dist/websocket/state/user.d.ts +0 -83
  363. package/dist/websocket/state/user.d.ts.map +0 -1
  364. package/dist/websocket/state/user.js +0 -228
  365. package/dist/websocket/state/user.js.map +0 -1
  366. package/dist/websocket/subscriptions.d.ts +0 -143
  367. package/dist/websocket/subscriptions.d.ts.map +0 -1
  368. package/dist/websocket/subscriptions.js +0 -244
  369. package/dist/websocket/subscriptions.js.map +0 -1
  370. package/dist/websocket/types.d.ts +0 -417
  371. package/dist/websocket/types.d.ts.map +0 -1
  372. package/dist/websocket/types.js +0 -195
  373. package/dist/websocket/types.js.map +0 -1
package/dist/error.js ADDED
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SdkError = exports.AuthError = exports.WsError = exports.HttpError = void 0;
4
+ class HttpError extends Error {
5
+ variant;
6
+ status;
7
+ body;
8
+ retryAfterMs;
9
+ attempts;
10
+ constructor(params) {
11
+ super(params.message);
12
+ this.name = "HttpError";
13
+ this.variant = params.variant;
14
+ this.status = params.status;
15
+ this.body = params.body;
16
+ this.retryAfterMs = params.retryAfterMs;
17
+ this.attempts = params.attempts;
18
+ }
19
+ static request(message) {
20
+ return new HttpError({ variant: "Request", message: `Request failed: ${message}` });
21
+ }
22
+ static timeout() {
23
+ return new HttpError({ variant: "Timeout", message: "Timeout" });
24
+ }
25
+ static unauthorized() {
26
+ return new HttpError({ variant: "Unauthorized", message: "Unauthorized", status: 401 });
27
+ }
28
+ static notFound(body) {
29
+ return new HttpError({
30
+ variant: "NotFound",
31
+ message: `Not found: ${body || "resource"}`,
32
+ status: 404,
33
+ body,
34
+ });
35
+ }
36
+ static badRequest(body) {
37
+ return new HttpError({
38
+ variant: "BadRequest",
39
+ message: `Bad request: ${body || "invalid request"}`,
40
+ status: 400,
41
+ body,
42
+ });
43
+ }
44
+ static rateLimited(retryAfterMs) {
45
+ return new HttpError({
46
+ variant: "RateLimited",
47
+ message: retryAfterMs !== undefined
48
+ ? `Rate limited (retry after ${retryAfterMs}ms)`
49
+ : "Rate limited",
50
+ status: 429,
51
+ retryAfterMs,
52
+ });
53
+ }
54
+ static serverError(status, body) {
55
+ return new HttpError({
56
+ variant: "ServerError",
57
+ message: `Server error ${status}: ${body}`,
58
+ status,
59
+ body,
60
+ });
61
+ }
62
+ static maxRetriesExceeded(attempts, lastError) {
63
+ return new HttpError({
64
+ variant: "MaxRetriesExceeded",
65
+ message: `Max retries exceeded after ${attempts} attempts: ${lastError}`,
66
+ attempts,
67
+ });
68
+ }
69
+ }
70
+ exports.HttpError = HttpError;
71
+ class WsError extends Error {
72
+ variant;
73
+ code;
74
+ constructor(variant, message, code) {
75
+ super(message);
76
+ this.name = "WsError";
77
+ this.variant = variant;
78
+ this.code = code;
79
+ }
80
+ }
81
+ exports.WsError = WsError;
82
+ class AuthError extends Error {
83
+ variant;
84
+ constructor(variant, message) {
85
+ super(message);
86
+ this.name = "AuthError";
87
+ this.variant = variant;
88
+ }
89
+ }
90
+ exports.AuthError = AuthError;
91
+ class SdkError extends Error {
92
+ variant;
93
+ causeError;
94
+ constructor(variant, message, causeError) {
95
+ super(message);
96
+ this.name = "SdkError";
97
+ this.variant = variant;
98
+ this.causeError = causeError;
99
+ }
100
+ static from(error) {
101
+ if (error instanceof SdkError) {
102
+ return error;
103
+ }
104
+ if (error instanceof HttpError) {
105
+ return new SdkError("Http", error.message, error);
106
+ }
107
+ if (error instanceof WsError) {
108
+ return new SdkError("Ws", error.message, error);
109
+ }
110
+ if (error instanceof AuthError) {
111
+ return new SdkError("Auth", error.message, error);
112
+ }
113
+ if (error instanceof SyntaxError) {
114
+ return new SdkError("Serde", error.message, error);
115
+ }
116
+ if (error instanceof Error) {
117
+ return new SdkError("Other", error.message, error);
118
+ }
119
+ return new SdkError("Other", String(error));
120
+ }
121
+ static validation(message) {
122
+ return new SdkError("Validation", message);
123
+ }
124
+ }
125
+ exports.SdkError = SdkError;
126
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"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","sourcesContent":["export type HttpErrorVariant =\n | \"Request\"\n | \"ServerError\"\n | \"RateLimited\"\n | \"Unauthorized\"\n | \"NotFound\"\n | \"BadRequest\"\n | \"Timeout\"\n | \"MaxRetriesExceeded\";\n\nexport class HttpError extends Error {\n readonly variant: HttpErrorVariant;\n readonly status?: number;\n readonly body?: string;\n readonly retryAfterMs?: number;\n readonly attempts?: number;\n\n constructor(params: {\n variant: HttpErrorVariant;\n message: string;\n status?: number;\n body?: string;\n retryAfterMs?: number;\n attempts?: number;\n }) {\n super(params.message);\n this.name = \"HttpError\";\n this.variant = params.variant;\n this.status = params.status;\n this.body = params.body;\n this.retryAfterMs = params.retryAfterMs;\n this.attempts = params.attempts;\n }\n\n static request(message: string): HttpError {\n return new HttpError({ variant: \"Request\", message: `Request failed: ${message}` });\n }\n\n static timeout(): HttpError {\n return new HttpError({ variant: \"Timeout\", message: \"Timeout\" });\n }\n\n static unauthorized(): HttpError {\n return new HttpError({ variant: \"Unauthorized\", message: \"Unauthorized\", status: 401 });\n }\n\n static notFound(body: string): HttpError {\n return new HttpError({\n variant: \"NotFound\",\n message: `Not found: ${body || \"resource\"}`,\n status: 404,\n body,\n });\n }\n\n static badRequest(body: string): HttpError {\n return new HttpError({\n variant: \"BadRequest\",\n message: `Bad request: ${body || \"invalid request\"}`,\n status: 400,\n body,\n });\n }\n\n static rateLimited(retryAfterMs?: number): HttpError {\n return new HttpError({\n variant: \"RateLimited\",\n message:\n retryAfterMs !== undefined\n ? `Rate limited (retry after ${retryAfterMs}ms)`\n : \"Rate limited\",\n status: 429,\n retryAfterMs,\n });\n }\n\n static serverError(status: number, body: string): HttpError {\n return new HttpError({\n variant: \"ServerError\",\n message: `Server error ${status}: ${body}`,\n status,\n body,\n });\n }\n\n static maxRetriesExceeded(attempts: number, lastError: string): HttpError {\n return new HttpError({\n variant: \"MaxRetriesExceeded\",\n message: `Max retries exceeded after ${attempts} attempts: ${lastError}`,\n attempts,\n });\n }\n}\n\nexport type WsErrorVariant =\n | \"NotConnected\"\n | \"ConnectionFailed\"\n | \"SendFailed\"\n | \"DeserializationError\"\n | \"ProtocolError\"\n | \"Closed\";\n\nexport class WsError extends Error {\n readonly variant: WsErrorVariant;\n readonly code?: number;\n\n constructor(variant: WsErrorVariant, message: string, code?: number) {\n super(message);\n this.name = \"WsError\";\n this.variant = variant;\n this.code = code;\n }\n}\n\nexport type AuthErrorVariant =\n | \"NotAuthenticated\"\n | \"LoginFailed\"\n | \"SignatureVerificationFailed\"\n | \"TokenExpired\";\n\nexport class AuthError extends Error {\n readonly variant: AuthErrorVariant;\n\n constructor(variant: AuthErrorVariant, message: string) {\n super(message);\n this.name = \"AuthError\";\n this.variant = variant;\n }\n}\n\nexport type SdkErrorVariant = \"Http\" | \"Ws\" | \"Auth\" | \"Validation\" | \"Serde\" | \"Other\";\n\nexport class SdkError extends Error {\n readonly variant: SdkErrorVariant;\n readonly causeError?: Error;\n\n constructor(variant: SdkErrorVariant, message: string, causeError?: Error) {\n super(message);\n this.name = \"SdkError\";\n this.variant = variant;\n this.causeError = causeError;\n }\n\n static from(error: unknown): SdkError {\n if (error instanceof SdkError) {\n return error;\n }\n if (error instanceof HttpError) {\n return new SdkError(\"Http\", error.message, error);\n }\n if (error instanceof WsError) {\n return new SdkError(\"Ws\", error.message, error);\n }\n if (error instanceof AuthError) {\n return new SdkError(\"Auth\", error.message, error);\n }\n if (error instanceof SyntaxError) {\n return new SdkError(\"Serde\", error.message, error);\n }\n if (error instanceof Error) {\n return new SdkError(\"Other\", error.message, error);\n }\n return new SdkError(\"Other\", String(error));\n }\n\n static validation(message: string): SdkError {\n return new SdkError(\"Validation\", message);\n }\n}\n"]}
@@ -0,0 +1,16 @@
1
+ import { type RetryPolicy } from "./retry";
2
+ export declare class LightconeHttp {
3
+ private readonly normalizedBaseUrl;
4
+ private authToken;
5
+ constructor(baseUrl: string);
6
+ baseUrl(): string;
7
+ setAuthToken(token: string | undefined): Promise<void>;
8
+ clearAuthToken(): Promise<void>;
9
+ authTokenRef(): () => Promise<string | undefined>;
10
+ get<T>(url: string, retry: RetryPolicy): Promise<T>;
11
+ post<T, B extends object>(url: string, body: B, retry: RetryPolicy): Promise<T>;
12
+ private requestWithRetry;
13
+ private shouldRetry;
14
+ private doRequest;
15
+ }
16
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/http/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAyC,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAElF,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,SAAS,CAAqB;gBAE1B,OAAO,EAAE,MAAM;IAI3B,OAAO,IAAI,MAAM;IAIX,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrC,YAAY,IAAI,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAI3C,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;IAInD,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;YAIvE,gBAAgB;IAsC9B,OAAO,CAAC,WAAW;YAaL,SAAS;CA0DxB"}
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LightconeHttp = void 0;
4
+ const error_1 = require("../error");
5
+ const retry_1 = require("./retry");
6
+ class LightconeHttp {
7
+ normalizedBaseUrl;
8
+ authToken;
9
+ constructor(baseUrl) {
10
+ this.normalizedBaseUrl = baseUrl.replace(/\/+$/, "");
11
+ }
12
+ baseUrl() {
13
+ return this.normalizedBaseUrl;
14
+ }
15
+ async setAuthToken(token) {
16
+ this.authToken = token;
17
+ }
18
+ async clearAuthToken() {
19
+ this.authToken = undefined;
20
+ }
21
+ authTokenRef() {
22
+ return async () => this.authToken;
23
+ }
24
+ async get(url, retry) {
25
+ return this.requestWithRetry("GET", url, undefined, retry);
26
+ }
27
+ async post(url, body, retry) {
28
+ return this.requestWithRetry("POST", url, body, retry);
29
+ }
30
+ async requestWithRetry(method, url, body, policy) {
31
+ const config = (0, retry_1.retryConfigForPolicy)(policy);
32
+ if (!config) {
33
+ return this.doRequest(method, url, body);
34
+ }
35
+ let lastError;
36
+ for (let attempt = 0; attempt <= config.maxRetries; attempt += 1) {
37
+ try {
38
+ return await this.doRequest(method, url, body);
39
+ }
40
+ catch (error) {
41
+ if (!(error instanceof error_1.HttpError)) {
42
+ throw error;
43
+ }
44
+ const shouldRetry = this.shouldRetry(error, config.retryableStatuses);
45
+ if (!shouldRetry || attempt >= config.maxRetries) {
46
+ throw error;
47
+ }
48
+ lastError = error;
49
+ const delay = error.variant === "RateLimited" && error.retryAfterMs !== undefined
50
+ ? error.retryAfterMs
51
+ : (0, retry_1.delayForAttempt)(config, attempt);
52
+ await sleep(delay);
53
+ }
54
+ }
55
+ throw error_1.HttpError.maxRetriesExceeded(config.maxRetries + 1, lastError?.message ?? "unknown");
56
+ }
57
+ shouldRetry(error, retryableStatuses) {
58
+ switch (error.variant) {
59
+ case "Timeout":
60
+ case "Request":
61
+ case "RateLimited":
62
+ return true;
63
+ case "ServerError":
64
+ return error.status !== undefined && retryableStatuses.includes(error.status);
65
+ default:
66
+ return false;
67
+ }
68
+ }
69
+ async doRequest(method, url, body) {
70
+ const headers = {
71
+ "Content-Type": "application/json",
72
+ };
73
+ if (this.authToken && !hasBrowserWindow()) {
74
+ headers.Cookie = `auth_token=${this.authToken}`;
75
+ }
76
+ const controller = new AbortController();
77
+ const timeoutId = setTimeout(() => controller.abort(), 30_000);
78
+ let response;
79
+ try {
80
+ response = await fetch(url, {
81
+ method,
82
+ headers,
83
+ body: body ? JSON.stringify(body) : undefined,
84
+ signal: controller.signal,
85
+ credentials: "include",
86
+ });
87
+ }
88
+ catch (error) {
89
+ clearTimeout(timeoutId);
90
+ if (error instanceof Error && error.name === "AbortError") {
91
+ throw error_1.HttpError.timeout();
92
+ }
93
+ throw error_1.HttpError.request(error instanceof Error ? error.message : String(error));
94
+ }
95
+ finally {
96
+ clearTimeout(timeoutId);
97
+ }
98
+ if (response.ok) {
99
+ const text = await response.text();
100
+ if (!text) {
101
+ return undefined;
102
+ }
103
+ return JSON.parse(text);
104
+ }
105
+ const bodyText = await response.text().catch(() => "");
106
+ switch (response.status) {
107
+ case 400:
108
+ throw error_1.HttpError.badRequest(bodyText);
109
+ case 401:
110
+ throw error_1.HttpError.unauthorized();
111
+ case 404:
112
+ throw error_1.HttpError.notFound(bodyText);
113
+ case 429:
114
+ throw error_1.HttpError.rateLimited(parseRetryAfterMs(response.headers.get("retry-after")));
115
+ default:
116
+ if (response.status >= 500) {
117
+ throw error_1.HttpError.serverError(response.status, bodyText);
118
+ }
119
+ throw error_1.HttpError.badRequest(bodyText || `HTTP ${response.status}`);
120
+ }
121
+ }
122
+ }
123
+ exports.LightconeHttp = LightconeHttp;
124
+ function parseRetryAfterMs(header) {
125
+ if (!header) {
126
+ return undefined;
127
+ }
128
+ const seconds = Number.parseFloat(header);
129
+ if (Number.isFinite(seconds) && seconds >= 0) {
130
+ return Math.floor(seconds * 1000);
131
+ }
132
+ const retryDate = Date.parse(header);
133
+ if (Number.isFinite(retryDate)) {
134
+ return Math.max(0, retryDate - Date.now());
135
+ }
136
+ return undefined;
137
+ }
138
+ function sleep(ms) {
139
+ return new Promise((resolve) => {
140
+ setTimeout(resolve, ms);
141
+ });
142
+ }
143
+ function hasBrowserWindow() {
144
+ return typeof globalThis !== "undefined" && "window" in globalThis;
145
+ }
146
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/http/client.ts"],"names":[],"mappings":"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","sourcesContent":["import { HttpError } from \"../error\";\nimport { delayForAttempt, retryConfigForPolicy, type RetryPolicy } from \"./retry\";\n\nexport class LightconeHttp {\n private readonly normalizedBaseUrl: string;\n private authToken: string | undefined;\n\n constructor(baseUrl: string) {\n this.normalizedBaseUrl = baseUrl.replace(/\\/+$/, \"\");\n }\n\n baseUrl(): string {\n return this.normalizedBaseUrl;\n }\n\n async setAuthToken(token: string | undefined): Promise<void> {\n this.authToken = token;\n }\n\n async clearAuthToken(): Promise<void> {\n this.authToken = undefined;\n }\n\n authTokenRef(): () => Promise<string | undefined> {\n return async () => this.authToken;\n }\n\n async get<T>(url: string, retry: RetryPolicy): Promise<T> {\n return this.requestWithRetry<T>(\"GET\", url, undefined, retry);\n }\n\n async post<T, B extends object>(url: string, body: B, retry: RetryPolicy): Promise<T> {\n return this.requestWithRetry<T>(\"POST\", url, body, retry);\n }\n\n private async requestWithRetry<T>(\n method: \"GET\" | \"POST\",\n url: string,\n body: object | undefined,\n policy: RetryPolicy\n ): Promise<T> {\n const config = retryConfigForPolicy(policy);\n if (!config) {\n return this.doRequest<T>(method, url, body);\n }\n\n let lastError: HttpError | undefined;\n\n for (let attempt = 0; attempt <= config.maxRetries; attempt += 1) {\n try {\n return await this.doRequest<T>(method, url, body);\n } catch (error) {\n if (!(error instanceof HttpError)) {\n throw error;\n }\n\n const shouldRetry = this.shouldRetry(error, config.retryableStatuses);\n if (!shouldRetry || attempt >= config.maxRetries) {\n throw error;\n }\n\n lastError = error;\n const delay = error.variant === \"RateLimited\" && error.retryAfterMs !== undefined\n ? error.retryAfterMs\n : delayForAttempt(config, attempt);\n\n await sleep(delay);\n }\n }\n\n throw HttpError.maxRetriesExceeded(config.maxRetries + 1, lastError?.message ?? \"unknown\");\n }\n\n private shouldRetry(error: HttpError, retryableStatuses: readonly number[]): boolean {\n switch (error.variant) {\n case \"Timeout\":\n case \"Request\":\n case \"RateLimited\":\n return true;\n case \"ServerError\":\n return error.status !== undefined && retryableStatuses.includes(error.status);\n default:\n return false;\n }\n }\n\n private async doRequest<T>(method: \"GET\" | \"POST\", url: string, body?: object): Promise<T> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n\n if (this.authToken && !hasBrowserWindow()) {\n headers.Cookie = `auth_token=${this.authToken}`;\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 30_000);\n\n let response: Response;\n\n try {\n response = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n credentials: \"include\",\n });\n } catch (error) {\n clearTimeout(timeoutId);\n if (error instanceof Error && error.name === \"AbortError\") {\n throw HttpError.timeout();\n }\n throw HttpError.request(error instanceof Error ? error.message : String(error));\n } finally {\n clearTimeout(timeoutId);\n }\n\n if (response.ok) {\n const text = await response.text();\n if (!text) {\n return undefined as T;\n }\n return JSON.parse(text) as T;\n }\n\n const bodyText = await response.text().catch(() => \"\");\n\n switch (response.status) {\n case 400:\n throw HttpError.badRequest(bodyText);\n case 401:\n throw HttpError.unauthorized();\n case 404:\n throw HttpError.notFound(bodyText);\n case 429:\n throw HttpError.rateLimited(parseRetryAfterMs(response.headers.get(\"retry-after\")));\n default:\n if (response.status >= 500) {\n throw HttpError.serverError(response.status, bodyText);\n }\n throw HttpError.badRequest(bodyText || `HTTP ${response.status}`);\n }\n }\n}\n\nfunction parseRetryAfterMs(header: string | null): number | undefined {\n if (!header) {\n return undefined;\n }\n\n const seconds = Number.parseFloat(header);\n if (Number.isFinite(seconds) && seconds >= 0) {\n return Math.floor(seconds * 1000);\n }\n\n const retryDate = Date.parse(header);\n if (Number.isFinite(retryDate)) {\n return Math.max(0, retryDate - Date.now());\n }\n\n return undefined;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nfunction hasBrowserWindow(): boolean {\n return typeof globalThis !== \"undefined\" && \"window\" in globalThis;\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export { LightconeHttp } from "./client";
2
+ export { DEFAULT_RETRY_CONFIG, RetryPolicy, delayForAttempt, idempotentRetryConfig, retryConfigForPolicy, type RetryConfig, type RetryPolicy as RetryPolicyType, } from "./retry";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/http/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,KAAK,WAAW,EAChB,KAAK,WAAW,IAAI,eAAe,GACpC,MAAM,SAAS,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.retryConfigForPolicy = exports.idempotentRetryConfig = exports.delayForAttempt = exports.RetryPolicy = exports.DEFAULT_RETRY_CONFIG = exports.LightconeHttp = void 0;
4
+ var client_1 = require("./client");
5
+ Object.defineProperty(exports, "LightconeHttp", { enumerable: true, get: function () { return client_1.LightconeHttp; } });
6
+ var retry_1 = require("./retry");
7
+ Object.defineProperty(exports, "DEFAULT_RETRY_CONFIG", { enumerable: true, get: function () { return retry_1.DEFAULT_RETRY_CONFIG; } });
8
+ Object.defineProperty(exports, "RetryPolicy", { enumerable: true, get: function () { return retry_1.RetryPolicy; } });
9
+ Object.defineProperty(exports, "delayForAttempt", { enumerable: true, get: function () { return retry_1.delayForAttempt; } });
10
+ Object.defineProperty(exports, "idempotentRetryConfig", { enumerable: true, get: function () { return retry_1.idempotentRetryConfig; } });
11
+ Object.defineProperty(exports, "retryConfigForPolicy", { enumerable: true, get: function () { return retry_1.retryConfigForPolicy; } });
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/http/index.ts"],"names":[],"mappings":";;;AAAA,mCAAyC;AAAhC,uGAAA,aAAa,OAAA;AACtB,iCAQiB;AAPf,6GAAA,oBAAoB,OAAA;AACpB,oGAAA,WAAW,OAAA;AACX,wGAAA,eAAe,OAAA;AACf,8GAAA,qBAAqB,OAAA;AACrB,6GAAA,oBAAoB,OAAA","sourcesContent":["export { LightconeHttp } from \"./client\";\nexport {\n DEFAULT_RETRY_CONFIG,\n RetryPolicy,\n delayForAttempt,\n idempotentRetryConfig,\n retryConfigForPolicy,\n type RetryConfig,\n type RetryPolicy as RetryPolicyType,\n} from \"./retry\";\n"]}
@@ -0,0 +1,30 @@
1
+ export interface RetryConfig {
2
+ maxRetries: number;
3
+ initialDelayMs: number;
4
+ maxDelayMs: number;
5
+ backoffFactor: number;
6
+ jitter: boolean;
7
+ retryableStatuses: readonly number[];
8
+ }
9
+ export type RetryPolicy = {
10
+ kind: "none";
11
+ } | {
12
+ kind: "idempotent";
13
+ } | {
14
+ kind: "custom";
15
+ config: RetryConfig;
16
+ };
17
+ export declare const RetryPolicy: {
18
+ None: {
19
+ readonly kind: "none";
20
+ };
21
+ Idempotent: {
22
+ readonly kind: "idempotent";
23
+ };
24
+ custom(config: RetryConfig): RetryPolicy;
25
+ };
26
+ export declare const DEFAULT_RETRY_CONFIG: RetryConfig;
27
+ export declare function idempotentRetryConfig(): RetryConfig;
28
+ export declare function retryConfigForPolicy(policy: RetryPolicy): RetryConfig | null;
29
+ export declare function delayForAttempt(config: RetryConfig, attempt: number): number;
30
+ //# sourceMappingURL=retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/http/retry.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,CAAC;AAE5C,eAAO,MAAM,WAAW;;;;;;;mBAGP,WAAW,GAAG,WAAW;CAGzC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,WAOlC,CAAC;AAEF,wBAAgB,qBAAqB,IAAI,WAAW,CAKnD;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,GAAG,IAAI,CAS5E;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAU5E"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_RETRY_CONFIG = exports.RetryPolicy = void 0;
4
+ exports.idempotentRetryConfig = idempotentRetryConfig;
5
+ exports.retryConfigForPolicy = retryConfigForPolicy;
6
+ exports.delayForAttempt = delayForAttempt;
7
+ exports.RetryPolicy = {
8
+ None: { kind: "none" },
9
+ Idempotent: { kind: "idempotent" },
10
+ custom(config) {
11
+ return { kind: "custom", config };
12
+ },
13
+ };
14
+ exports.DEFAULT_RETRY_CONFIG = {
15
+ maxRetries: 3,
16
+ initialDelayMs: 200,
17
+ maxDelayMs: 10_000,
18
+ backoffFactor: 2,
19
+ jitter: true,
20
+ retryableStatuses: [502, 503, 504],
21
+ };
22
+ function idempotentRetryConfig() {
23
+ return {
24
+ ...exports.DEFAULT_RETRY_CONFIG,
25
+ retryableStatuses: [429, 502, 503, 504],
26
+ };
27
+ }
28
+ function retryConfigForPolicy(policy) {
29
+ switch (policy.kind) {
30
+ case "none":
31
+ return null;
32
+ case "idempotent":
33
+ return idempotentRetryConfig();
34
+ case "custom":
35
+ return policy.config;
36
+ }
37
+ }
38
+ function delayForAttempt(config, attempt) {
39
+ const base = config.initialDelayMs * config.backoffFactor ** attempt;
40
+ const capped = Math.min(base, config.maxDelayMs);
41
+ if (!config.jitter) {
42
+ return Math.max(0, Math.floor(capped));
43
+ }
44
+ const jitterRange = capped * 0.25;
45
+ const jitter = (Math.random() - 0.5) * 2 * jitterRange;
46
+ return Math.max(0, Math.floor(capped + jitter));
47
+ }
48
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/http/retry.ts"],"names":[],"mappings":";;;AA+BA,sDAKC;AAED,oDASC;AAED,0CAUC;AA7CY,QAAA,WAAW,GAAG;IACzB,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAW;IAC/B,UAAU,EAAE,EAAE,IAAI,EAAE,YAAY,EAAW;IAC3C,MAAM,CAAC,MAAmB;QACxB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACpC,CAAC;CACF,CAAC;AAEW,QAAA,oBAAoB,GAAgB;IAC/C,UAAU,EAAE,CAAC;IACb,cAAc,EAAE,GAAG;IACnB,UAAU,EAAE,MAAM;IAClB,aAAa,EAAE,CAAC;IAChB,MAAM,EAAE,IAAI;IACZ,iBAAiB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;CACnC,CAAC;AAEF,SAAgB,qBAAqB;IACnC,OAAO;QACL,GAAG,4BAAoB;QACvB,iBAAiB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;KACxC,CAAC;AACJ,CAAC;AAED,SAAgB,oBAAoB,CAAC,MAAmB;IACtD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,MAAM;YACT,OAAO,IAAI,CAAC;QACd,KAAK,YAAY;YACf,OAAO,qBAAqB,EAAE,CAAC;QACjC,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,MAAM,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAgB,eAAe,CAAC,MAAmB,EAAE,OAAe;IAClE,MAAM,IAAI,GAAG,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,aAAa,IAAI,OAAO,CAAC;IACrE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,GAAG,IAAI,CAAC;IAClC,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;IACvD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;AAClD,CAAC","sourcesContent":["export interface RetryConfig {\n maxRetries: number;\n initialDelayMs: number;\n maxDelayMs: number;\n backoffFactor: number;\n jitter: boolean;\n retryableStatuses: readonly number[];\n}\n\nexport type RetryPolicy =\n | { kind: \"none\" }\n | { kind: \"idempotent\" }\n | { kind: \"custom\"; config: RetryConfig };\n\nexport const RetryPolicy = {\n None: { kind: \"none\" } as const,\n Idempotent: { kind: \"idempotent\" } as const,\n custom(config: RetryConfig): RetryPolicy {\n return { kind: \"custom\", config };\n },\n};\n\nexport const DEFAULT_RETRY_CONFIG: RetryConfig = {\n maxRetries: 3,\n initialDelayMs: 200,\n maxDelayMs: 10_000,\n backoffFactor: 2,\n jitter: true,\n retryableStatuses: [502, 503, 504],\n};\n\nexport function idempotentRetryConfig(): RetryConfig {\n return {\n ...DEFAULT_RETRY_CONFIG,\n retryableStatuses: [429, 502, 503, 504],\n };\n}\n\nexport function retryConfigForPolicy(policy: RetryPolicy): RetryConfig | null {\n switch (policy.kind) {\n case \"none\":\n return null;\n case \"idempotent\":\n return idempotentRetryConfig();\n case \"custom\":\n return policy.config;\n }\n}\n\nexport function delayForAttempt(config: RetryConfig, attempt: number): number {\n const base = config.initialDelayMs * config.backoffFactor ** attempt;\n const capped = Math.min(base, config.maxDelayMs);\n if (!config.jitter) {\n return Math.max(0, Math.floor(capped));\n }\n\n const jitterRange = capped * 0.25;\n const jitter = (Math.random() - 0.5) * 2 * jitterRange;\n return Math.max(0, Math.floor(capped + jitter));\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -1,55 +1,17 @@
1
1
  /**
2
- * Lightcone SDK - TypeScript SDK for the Lightcone protocol on Solana.
3
- *
4
- * This SDK provides three main modules:
5
- * - `program`: On-chain program interaction (smart contract)
6
- * - `api`: REST API client for market data, orders, and positions
7
- * - `websocket`: Real-time data streaming for orderbooks, trades, and user events
8
- *
9
- * @example
10
- * ```typescript
11
- * import { LightconePinocchioClient, PROGRAM_ID, api, websocket } from "@lightcone/sdk";
12
- *
13
- * // On-chain program interaction
14
- * const programClient = new LightconePinocchioClient(connection, payer);
15
- *
16
- * // REST API client
17
- * const apiClient = new api.LightconeApiClient();
18
- * const markets = await apiClient.getMarkets();
19
- *
20
- * // WebSocket client for real-time data
21
- * const wsClient = await websocket.LightconeWebSocketClient.connectDefault();
22
- * await wsClient.subscribeBookUpdates(["market1:ob1"]);
23
- * ```
24
- */
25
- /**
26
- * On-chain program interaction module.
27
- * Contains the client and utilities for interacting with the Lightcone smart contract.
28
- */
29
- export * from "./program";
30
- /**
31
- * Network URL constants (API and WebSocket endpoints).
32
- */
33
- export { DEFAULT_API_URL, DEFAULT_WS_URL } from "./network";
34
- /**
35
- * Shared utilities, types, and constants.
36
- * Used across all SDK modules.
37
- */
38
- export * from "./shared";
39
- /**
40
- * REST API client module.
41
- * Provides HTTP client functionality for market data, orders, and positions.
42
- */
43
- export * as api from "./api";
44
- /**
45
- * WebSocket client module.
46
- * Provides real-time data streaming for orderbooks, trades, and user events.
47
- */
48
- export * as websocket from "./websocket";
49
- /**
50
- * Authentication module.
51
- * Provides authentication functionality shared by API and WebSocket clients.
2
+ * Lightcone SDK v2 - TypeScript implementation mirroring Rust SDK v2 layers.
52
3
  */
4
+ export * as shared from "./shared";
5
+ export * as domain from "./domain";
6
+ export * as program from "./program";
7
+ export * from "./error";
8
+ export * from "./network";
53
9
  export * as auth from "./auth";
54
- export { PublicKey, Connection, Keypair, Transaction, TransactionInstruction, } from "@solana/web3.js";
10
+ export * as privy from "./privy";
11
+ export * as http from "./http";
12
+ export * as ws from "./ws";
13
+ export { LightconeClient, LightconeClientBuilder } from "./client";
14
+ export type { AuthCredentials, ChainType, EmbeddedWallet, LinkedAccount, LinkedAccountType, User, } from "./auth";
15
+ export type { AdminClient, MarketsClient, MarketsResult, OrdersClient, OrderbooksClient, PositionsClient, PriceHistorySubClient, ReferralsClient, TradesClient, } from "./prelude";
16
+ export * from "./prelude";
55
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAMH;;;GAGG;AACH,cAAc,WAAW,CAAC;AAE1B;;GAEG;AACH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE5D;;;GAGG;AACH,cAAc,UAAU,CAAC;AAEzB;;;GAGG;AACH,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAE7B;;;GAGG;AACH,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AAEzC;;;GAGG;AACH,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAK/B,OAAO,EACL,SAAS,EACT,UAAU,EACV,OAAO,EACP,WAAW,EACX,sBAAsB,GACvB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAG1B,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AAGjC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAG/B,OAAO,KAAK,EAAE,MAAM,MAAM,CAAC;AAG3B,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAGnE,YAAY,EACV,eAAe,EACf,SAAS,EACT,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,IAAI,GACL,MAAM,QAAQ,CAAC;AAEhB,YAAY,EACV,WAAW,EACX,aAAa,EACb,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,eAAe,EACf,YAAY,GACb,MAAM,WAAW,CAAC;AAEnB,cAAc,WAAW,CAAC"}
package/dist/index.js CHANGED
@@ -1,27 +1,6 @@
1
1
  "use strict";
2
2
  /**
3
- * Lightcone SDK - TypeScript SDK for the Lightcone protocol on Solana.
4
- *
5
- * This SDK provides three main modules:
6
- * - `program`: On-chain program interaction (smart contract)
7
- * - `api`: REST API client for market data, orders, and positions
8
- * - `websocket`: Real-time data streaming for orderbooks, trades, and user events
9
- *
10
- * @example
11
- * ```typescript
12
- * import { LightconePinocchioClient, PROGRAM_ID, api, websocket } from "@lightcone/sdk";
13
- *
14
- * // On-chain program interaction
15
- * const programClient = new LightconePinocchioClient(connection, payer);
16
- *
17
- * // REST API client
18
- * const apiClient = new api.LightconeApiClient();
19
- * const markets = await apiClient.getMarkets();
20
- *
21
- * // WebSocket client for real-time data
22
- * const wsClient = await websocket.LightconeWebSocketClient.connectDefault();
23
- * await wsClient.subscribeBookUpdates(["market1:ob1"]);
24
- * ```
3
+ * Lightcone SDK v2 - TypeScript implementation mirroring Rust SDK v2 layers.
25
4
  */
26
5
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
27
6
  if (k2 === undefined) k2 = k;
@@ -39,9 +18,6 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
39
18
  }) : function(o, v) {
40
19
  o["default"] = v;
41
20
  });
42
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
43
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
44
- };
45
21
  var __importStar = (this && this.__importStar) || (function () {
46
22
  var ownKeys = function(o) {
47
23
  ownKeys = Object.getOwnPropertyNames || function (o) {
@@ -59,49 +35,27 @@ var __importStar = (this && this.__importStar) || (function () {
59
35
  return result;
60
36
  };
61
37
  })();
38
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
39
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
40
+ };
62
41
  Object.defineProperty(exports, "__esModule", { value: true });
63
- exports.TransactionInstruction = exports.Transaction = exports.Keypair = exports.Connection = exports.PublicKey = exports.auth = exports.websocket = exports.api = exports.DEFAULT_WS_URL = exports.DEFAULT_API_URL = void 0;
64
- // ============================================================================
65
- // MODULE EXPORTS
66
- // ============================================================================
67
- /**
68
- * On-chain program interaction module.
69
- * Contains the client and utilities for interacting with the Lightcone smart contract.
70
- */
71
- __exportStar(require("./program"), exports);
72
- /**
73
- * Network URL constants (API and WebSocket endpoints).
74
- */
75
- var network_1 = require("./network");
76
- Object.defineProperty(exports, "DEFAULT_API_URL", { enumerable: true, get: function () { return network_1.DEFAULT_API_URL; } });
77
- Object.defineProperty(exports, "DEFAULT_WS_URL", { enumerable: true, get: function () { return network_1.DEFAULT_WS_URL; } });
78
- /**
79
- * Shared utilities, types, and constants.
80
- * Used across all SDK modules.
81
- */
82
- __exportStar(require("./shared"), exports);
83
- /**
84
- * REST API client module.
85
- * Provides HTTP client functionality for market data, orders, and positions.
86
- */
87
- exports.api = __importStar(require("./api"));
88
- /**
89
- * WebSocket client module.
90
- * Provides real-time data streaming for orderbooks, trades, and user events.
91
- */
92
- exports.websocket = __importStar(require("./websocket"));
93
- /**
94
- * Authentication module.
95
- * Provides authentication functionality shared by API and WebSocket clients.
96
- */
42
+ exports.LightconeClientBuilder = exports.LightconeClient = exports.ws = exports.http = exports.privy = exports.auth = exports.program = exports.domain = exports.shared = void 0;
43
+ // Layer 1: Core
44
+ exports.shared = __importStar(require("./shared"));
45
+ exports.domain = __importStar(require("./domain"));
46
+ exports.program = __importStar(require("./program"));
47
+ __exportStar(require("./error"), exports);
48
+ __exportStar(require("./network"), exports);
49
+ // Layer 2: Auth + Privy
97
50
  exports.auth = __importStar(require("./auth"));
98
- // ============================================================================
99
- // RE-EXPORTS FROM DEPENDENCIES
100
- // ============================================================================
101
- var web3_js_1 = require("@solana/web3.js");
102
- Object.defineProperty(exports, "PublicKey", { enumerable: true, get: function () { return web3_js_1.PublicKey; } });
103
- Object.defineProperty(exports, "Connection", { enumerable: true, get: function () { return web3_js_1.Connection; } });
104
- Object.defineProperty(exports, "Keypair", { enumerable: true, get: function () { return web3_js_1.Keypair; } });
105
- Object.defineProperty(exports, "Transaction", { enumerable: true, get: function () { return web3_js_1.Transaction; } });
106
- Object.defineProperty(exports, "TransactionInstruction", { enumerable: true, get: function () { return web3_js_1.TransactionInstruction; } });
51
+ exports.privy = __importStar(require("./privy"));
52
+ // Layer 3: HTTP
53
+ exports.http = __importStar(require("./http"));
54
+ // Layer 4: WebSocket
55
+ exports.ws = __importStar(require("./ws"));
56
+ // Layer 5: High-level client
57
+ var client_1 = require("./client");
58
+ Object.defineProperty(exports, "LightconeClient", { enumerable: true, get: function () { return client_1.LightconeClient; } });
59
+ Object.defineProperty(exports, "LightconeClientBuilder", { enumerable: true, get: function () { return client_1.LightconeClientBuilder; } });
60
+ __exportStar(require("./prelude"), exports);
107
61
  //# sourceMappingURL=index.js.map