@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.
- package/README.md +33 -206
- package/dist/auth/client.d.ts +25 -0
- package/dist/auth/client.d.ts.map +1 -0
- package/dist/auth/client.js +120 -0
- package/dist/auth/client.js.map +1 -0
- package/dist/auth/index.d.ts +73 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +42 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/native.d.ts +8 -0
- package/dist/auth/native.d.ts.map +1 -0
- package/dist/auth/native.js +19 -0
- package/dist/auth/native.js.map +1 -0
- package/dist/auth.d.ts +1 -79
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +15 -145
- package/dist/auth.js.map +1 -1
- package/dist/client.d.ts +69 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +158 -0
- package/dist/client.js.map +1 -0
- package/dist/domain/admin/client.d.ts +17 -0
- package/dist/domain/admin/client.d.ts.map +1 -0
- package/dist/domain/admin/client.js +32 -0
- package/dist/domain/admin/client.js.map +1 -0
- package/dist/domain/admin/index.d.ts +7 -0
- package/dist/domain/admin/index.d.ts.map +1 -0
- package/dist/domain/admin/index.js +19 -0
- package/dist/domain/admin/index.js.map +1 -0
- package/dist/domain/admin/wire.d.ts +117 -0
- package/dist/domain/admin/wire.d.ts.map +1 -0
- package/dist/domain/admin/wire.js +3 -0
- package/dist/domain/admin/wire.js.map +1 -0
- package/dist/domain/index.d.ts +9 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +45 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/domain/market/client.d.ts +21 -0
- package/dist/domain/market/client.d.ts.map +1 -0
- package/dist/domain/market/client.js +70 -0
- package/dist/domain/market/client.js.map +1 -0
- package/dist/domain/market/convert.d.ts +8 -0
- package/dist/domain/market/convert.d.ts.map +1 -0
- package/dist/domain/market/convert.js +96 -0
- package/dist/domain/market/convert.js.map +1 -0
- package/dist/domain/market/index.d.ts +47 -0
- package/dist/domain/market/index.d.ts.map +1 -0
- package/dist/domain/market/index.js +58 -0
- package/dist/domain/market/index.js.map +1 -0
- package/dist/domain/market/outcome.d.ts +12 -0
- package/dist/domain/market/outcome.d.ts.map +1 -0
- package/dist/domain/market/outcome.js +28 -0
- package/dist/domain/market/outcome.js.map +1 -0
- package/dist/domain/market/tokens.d.ts +42 -0
- package/dist/domain/market/tokens.d.ts.map +1 -0
- package/dist/domain/market/tokens.js +106 -0
- package/dist/domain/market/tokens.js.map +1 -0
- package/dist/domain/market/wire.d.ts +116 -0
- package/dist/domain/market/wire.d.ts.map +1 -0
- package/dist/domain/market/wire.js +3 -0
- package/dist/domain/market/wire.js.map +1 -0
- package/dist/domain/order/client.d.ts +187 -0
- package/dist/domain/order/client.d.ts.map +1 -0
- package/dist/domain/order/client.js +122 -0
- package/dist/domain/order/client.js.map +1 -0
- package/dist/domain/order/convert.d.ts +8 -0
- package/dist/domain/order/convert.d.ts.map +1 -0
- package/dist/domain/order/convert.js +80 -0
- package/dist/domain/order/convert.js.map +1 -0
- package/dist/domain/order/index.d.ts +48 -0
- package/dist/domain/order/index.d.ts.map +1 -0
- package/dist/domain/order/index.js +41 -0
- package/dist/domain/order/index.js.map +1 -0
- package/dist/domain/order/state.d.ts +26 -0
- package/dist/domain/order/state.d.ts.map +1 -0
- package/dist/domain/order/state.js +85 -0
- package/dist/domain/order/state.js.map +1 -0
- package/dist/domain/order/wire.d.ts +123 -0
- package/dist/domain/order/wire.d.ts.map +1 -0
- package/dist/domain/order/wire.js +3 -0
- package/dist/domain/order/wire.js.map +1 -0
- package/dist/domain/orderbook/client.d.ts +20 -0
- package/dist/domain/orderbook/client.d.ts.map +1 -0
- package/dist/domain/orderbook/client.js +30 -0
- package/dist/domain/orderbook/client.js.map +1 -0
- package/dist/domain/orderbook/convert.d.ts +5 -0
- package/dist/domain/orderbook/convert.d.ts.map +1 -0
- package/dist/domain/orderbook/convert.js +34 -0
- package/dist/domain/orderbook/convert.js.map +1 -0
- package/dist/domain/orderbook/index.d.ts +36 -0
- package/dist/domain/orderbook/index.d.ts.map +1 -0
- package/dist/domain/orderbook/index.js +63 -0
- package/dist/domain/orderbook/index.js.map +1 -0
- package/dist/domain/orderbook/state.d.ts +19 -0
- package/dist/domain/orderbook/state.d.ts.map +1 -0
- package/dist/domain/orderbook/state.js +86 -0
- package/dist/domain/orderbook/state.js.map +1 -0
- package/dist/domain/orderbook/ticker.d.ts +8 -0
- package/dist/domain/orderbook/ticker.d.ts.map +1 -0
- package/dist/domain/orderbook/ticker.js +3 -0
- package/dist/domain/orderbook/ticker.js.map +1 -0
- package/dist/domain/orderbook/wire.d.ts +63 -0
- package/dist/domain/orderbook/wire.d.ts.map +1 -0
- package/dist/domain/orderbook/wire.js +3 -0
- package/dist/domain/orderbook/wire.js.map +1 -0
- package/dist/domain/position/client.d.ts +13 -0
- package/dist/domain/position/client.d.ts.map +1 -0
- package/dist/domain/position/client.js +20 -0
- package/dist/domain/position/client.js.map +1 -0
- package/dist/domain/position/index.d.ts +66 -0
- package/dist/domain/position/index.d.ts.map +1 -0
- package/dist/domain/position/index.js +19 -0
- package/dist/domain/position/index.js.map +1 -0
- package/dist/domain/position/wire.d.ts +29 -0
- package/dist/domain/position/wire.d.ts.map +1 -0
- package/dist/domain/position/wire.js +3 -0
- package/dist/domain/position/wire.js.map +1 -0
- package/dist/domain/price_history/client.d.ts +12 -0
- package/dist/domain/price_history/client.d.ts.map +1 -0
- package/dist/domain/price_history/client.js +24 -0
- package/dist/domain/price_history/client.js.map +1 -0
- package/dist/domain/price_history/index.d.ts +14 -0
- package/dist/domain/price_history/index.d.ts.map +1 -0
- package/dist/domain/price_history/index.js +27 -0
- package/dist/domain/price_history/index.js.map +1 -0
- package/dist/domain/price_history/state.d.ts +11 -0
- package/dist/domain/price_history/state.d.ts.map +1 -0
- package/dist/domain/price_history/state.js +35 -0
- package/dist/domain/price_history/state.js.map +1 -0
- package/dist/domain/price_history/wire.d.ts +45 -0
- package/dist/domain/price_history/wire.d.ts.map +1 -0
- package/dist/domain/price_history/wire.js +3 -0
- package/dist/domain/price_history/wire.js.map +1 -0
- package/dist/domain/referral/client.d.ts +13 -0
- package/dist/domain/referral/client.d.ts.map +1 -0
- package/dist/domain/referral/client.js +34 -0
- package/dist/domain/referral/client.js.map +1 -0
- package/dist/domain/referral/index.d.ts +17 -0
- package/dist/domain/referral/index.d.ts.map +1 -0
- package/dist/domain/referral/index.js +19 -0
- package/dist/domain/referral/index.js.map +1 -0
- package/dist/domain/referral/wire.d.ts +22 -0
- package/dist/domain/referral/wire.d.ts.map +1 -0
- package/dist/domain/referral/wire.js +3 -0
- package/dist/domain/referral/wire.js.map +1 -0
- package/dist/domain/trade/client.d.ts +12 -0
- package/dist/domain/trade/client.d.ts.map +1 -0
- package/dist/domain/trade/client.js +27 -0
- package/dist/domain/trade/client.js.map +1 -0
- package/dist/domain/trade/convert.d.ts +5 -0
- package/dist/domain/trade/convert.d.ts.map +1 -0
- package/dist/domain/trade/convert.js +25 -0
- package/dist/domain/trade/convert.js.map +1 -0
- package/dist/domain/trade/index.d.ts +19 -0
- package/dist/domain/trade/index.d.ts.map +1 -0
- package/dist/domain/trade/index.js +24 -0
- package/dist/domain/trade/index.js.map +1 -0
- package/dist/domain/trade/state.d.ts +16 -0
- package/dist/domain/trade/state.d.ts.map +1 -0
- package/dist/domain/trade/state.js +40 -0
- package/dist/domain/trade/state.js.map +1 -0
- package/dist/domain/trade/wire.d.ts +34 -0
- package/dist/domain/trade/wire.d.ts.map +1 -0
- package/dist/domain/trade/wire.js +3 -0
- package/dist/domain/trade/wire.js.map +1 -0
- package/dist/error.d.ts +44 -0
- package/dist/error.d.ts.map +1 -0
- package/dist/error.js +126 -0
- package/dist/error.js.map +1 -0
- package/dist/http/client.d.ts +16 -0
- package/dist/http/client.d.ts.map +1 -0
- package/dist/http/client.js +146 -0
- package/dist/http/client.js.map +1 -0
- package/dist/http/index.d.ts +3 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +12 -0
- package/dist/http/index.js.map +1 -0
- package/dist/http/retry.d.ts +30 -0
- package/dist/http/retry.d.ts.map +1 -0
- package/dist/http/retry.js +48 -0
- package/dist/http/retry.js.map +1 -0
- package/dist/index.d.ts +13 -51
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -68
- package/dist/index.js.map +1 -1
- package/dist/network.d.ts +4 -4
- package/dist/network.d.ts.map +1 -1
- package/dist/network.js +4 -4
- package/dist/network.js.map +1 -1
- package/dist/prelude.d.ts +41 -0
- package/dist/prelude.d.ts.map +1 -0
- package/dist/prelude.js +55 -0
- package/dist/prelude.js.map +1 -0
- package/dist/privy/client.d.ts +17 -0
- package/dist/privy/client.d.ts.map +1 -0
- package/dist/privy/client.js +66 -0
- package/dist/privy/client.js.map +1 -0
- package/dist/privy/index.d.ts +57 -0
- package/dist/privy/index.d.ts.map +1 -0
- package/dist/privy/index.js +80 -0
- package/dist/privy/index.js.map +1 -0
- package/dist/program/accounts.d.ts +16 -1
- package/dist/program/accounts.d.ts.map +1 -1
- package/dist/program/accounts.js +41 -0
- package/dist/program/accounts.js.map +1 -1
- package/dist/program/builder.d.ts +15 -11
- package/dist/program/builder.d.ts.map +1 -1
- package/dist/program/builder.js +30 -22
- package/dist/program/builder.js.map +1 -1
- package/dist/program/client.d.ts +37 -1
- package/dist/program/client.d.ts.map +1 -1
- package/dist/program/client.js +82 -2
- package/dist/program/client.js.map +1 -1
- package/dist/program/constants.d.ts +9 -1
- package/dist/program/constants.d.ts.map +1 -1
- package/dist/program/constants.js +9 -1
- package/dist/program/constants.js.map +1 -1
- package/dist/program/envelope.d.ts +94 -0
- package/dist/program/envelope.d.ts.map +1 -0
- package/dist/program/envelope.js +258 -0
- package/dist/program/envelope.js.map +1 -0
- package/dist/program/error.d.ts +8 -0
- package/dist/program/error.d.ts.map +1 -0
- package/dist/program/error.js +20 -0
- package/dist/program/error.js.map +1 -0
- package/dist/program/index.d.ts +8 -5
- package/dist/program/index.d.ts.map +1 -1
- package/dist/program/index.js +28 -3
- package/dist/program/index.js.map +1 -1
- package/dist/program/instructions.d.ts +78 -1
- package/dist/program/instructions.d.ts.map +1 -1
- package/dist/program/instructions.js +277 -3
- package/dist/program/instructions.js.map +1 -1
- package/dist/program/orders.d.ts +26 -8
- package/dist/program/orders.d.ts.map +1 -1
- package/dist/program/orders.js +58 -31
- package/dist/program/orders.js.map +1 -1
- package/dist/program/pda.d.ts +19 -0
- package/dist/program/pda.d.ts.map +1 -1
- package/dist/program/pda.js +28 -0
- package/dist/program/pda.js.map +1 -1
- package/dist/program/types.d.ts +72 -9
- package/dist/program/types.d.ts.map +1 -1
- package/dist/program/types.js.map +1 -1
- package/dist/shared/fmt/decimal.d.ts +5 -0
- package/dist/shared/fmt/decimal.d.ts.map +1 -0
- package/dist/shared/fmt/decimal.js +54 -0
- package/dist/shared/fmt/decimal.js.map +1 -0
- package/dist/shared/fmt/index.d.ts +3 -0
- package/dist/shared/fmt/index.d.ts.map +1 -0
- package/dist/shared/fmt/index.js +39 -0
- package/dist/shared/fmt/index.js.map +1 -0
- package/dist/shared/fmt/num.d.ts +6 -0
- package/dist/shared/fmt/num.d.ts.map +1 -0
- package/dist/shared/fmt/num.js +44 -0
- package/dist/shared/fmt/num.js.map +1 -0
- package/dist/shared/index.d.ts +4 -7
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +19 -7
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/price.d.ts +5 -33
- package/dist/shared/price.d.ts.map +1 -1
- package/dist/shared/price.js +11 -39
- package/dist/shared/price.js.map +1 -1
- package/dist/shared/scaling.d.ts +17 -30
- package/dist/shared/scaling.d.ts.map +1 -1
- package/dist/shared/scaling.js +88 -57
- package/dist/shared/scaling.js.map +1 -1
- package/dist/shared/types.d.ts +66 -16
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js +81 -17
- package/dist/shared/types.js.map +1 -1
- package/dist/ws/client.browser.d.ts +46 -0
- package/dist/ws/client.browser.d.ts.map +1 -0
- package/dist/ws/client.browser.js +245 -0
- package/dist/ws/client.browser.js.map +1 -0
- package/dist/ws/client.node.d.ts +36 -0
- package/dist/ws/client.node.d.ts.map +1 -0
- package/dist/ws/client.node.js +226 -0
- package/dist/ws/client.node.js.map +1 -0
- package/dist/ws/index.d.ts +110 -0
- package/dist/ws/index.d.ts.map +1 -0
- package/dist/ws/index.js +181 -0
- package/dist/ws/index.js.map +1 -0
- package/dist/ws/subscriptions.d.ts +51 -0
- package/dist/ws/subscriptions.d.ts.map +1 -0
- package/dist/ws/subscriptions.js +44 -0
- package/dist/ws/subscriptions.js.map +1 -0
- package/dist/ws/types.d.ts +23 -0
- package/dist/ws/types.d.ts.map +1 -0
- package/dist/ws/types.js +3 -0
- package/dist/ws/types.js.map +1 -0
- package/package.json +10 -13
- package/dist/api/client.d.ts +0 -225
- package/dist/api/client.d.ts.map +0 -1
- package/dist/api/client.js +0 -452
- package/dist/api/client.js.map +0 -1
- package/dist/api/error.d.ts +0 -58
- package/dist/api/error.d.ts.map +0 -1
- package/dist/api/error.js +0 -98
- package/dist/api/error.js.map +0 -1
- package/dist/api/index.d.ts +0 -23
- package/dist/api/index.d.ts.map +0 -1
- package/dist/api/index.js +0 -51
- package/dist/api/index.js.map +0 -1
- package/dist/api/types/admin.d.ts +0 -49
- package/dist/api/types/admin.d.ts.map +0 -1
- package/dist/api/types/admin.js +0 -13
- package/dist/api/types/admin.js.map +0 -1
- package/dist/api/types/index.d.ts +0 -14
- package/dist/api/types/index.d.ts.map +0 -1
- package/dist/api/types/index.js +0 -13
- package/dist/api/types/index.js.map +0 -1
- package/dist/api/types/market.d.ts +0 -186
- package/dist/api/types/market.d.ts.map +0 -1
- package/dist/api/types/market.js +0 -6
- package/dist/api/types/market.js.map +0 -1
- package/dist/api/types/order.d.ts +0 -190
- package/dist/api/types/order.d.ts.map +0 -1
- package/dist/api/types/order.js +0 -6
- package/dist/api/types/order.js.map +0 -1
- package/dist/api/types/orderbook.d.ts +0 -36
- package/dist/api/types/orderbook.d.ts.map +0 -1
- package/dist/api/types/orderbook.js +0 -6
- package/dist/api/types/orderbook.js.map +0 -1
- package/dist/api/types/position.d.ts +0 -60
- package/dist/api/types/position.d.ts.map +0 -1
- package/dist/api/types/position.js +0 -6
- package/dist/api/types/position.js.map +0 -1
- package/dist/api/types/price_history.d.ts +0 -68
- package/dist/api/types/price_history.d.ts.map +0 -1
- package/dist/api/types/price_history.js +0 -13
- package/dist/api/types/price_history.js.map +0 -1
- package/dist/api/types/trade.d.ts +0 -67
- package/dist/api/types/trade.d.ts.map +0 -1
- package/dist/api/types/trade.js +0 -13
- package/dist/api/types/trade.js.map +0 -1
- package/dist/api/validation.d.ts +0 -24
- package/dist/api/validation.d.ts.map +0 -1
- package/dist/api/validation.js +0 -53
- package/dist/api/validation.js.map +0 -1
- package/dist/websocket/client.d.ts +0 -238
- package/dist/websocket/client.d.ts.map +0 -1
- package/dist/websocket/client.js +0 -580
- package/dist/websocket/client.js.map +0 -1
- package/dist/websocket/error.d.ts +0 -47
- package/dist/websocket/error.d.ts.map +0 -1
- package/dist/websocket/error.js +0 -83
- package/dist/websocket/error.js.map +0 -1
- package/dist/websocket/handlers.d.ts +0 -97
- package/dist/websocket/handlers.d.ts.map +0 -1
- package/dist/websocket/handlers.js +0 -277
- package/dist/websocket/handlers.js.map +0 -1
- package/dist/websocket/index.d.ts +0 -38
- package/dist/websocket/index.d.ts.map +0 -1
- package/dist/websocket/index.js +0 -75
- package/dist/websocket/index.js.map +0 -1
- package/dist/websocket/state/index.d.ts +0 -7
- package/dist/websocket/state/index.d.ts.map +0 -1
- package/dist/websocket/state/index.js +0 -14
- package/dist/websocket/state/index.js.map +0 -1
- package/dist/websocket/state/orderbook.d.ts +0 -107
- package/dist/websocket/state/orderbook.d.ts.map +0 -1
- package/dist/websocket/state/orderbook.js +0 -293
- package/dist/websocket/state/orderbook.js.map +0 -1
- package/dist/websocket/state/price.d.ts +0 -108
- package/dist/websocket/state/price.d.ts.map +0 -1
- package/dist/websocket/state/price.js +0 -243
- package/dist/websocket/state/price.js.map +0 -1
- package/dist/websocket/state/user.d.ts +0 -83
- package/dist/websocket/state/user.d.ts.map +0 -1
- package/dist/websocket/state/user.js +0 -228
- package/dist/websocket/state/user.js.map +0 -1
- package/dist/websocket/subscriptions.d.ts +0 -143
- package/dist/websocket/subscriptions.d.ts.map +0 -1
- package/dist/websocket/subscriptions.js +0 -244
- package/dist/websocket/subscriptions.js.map +0 -1
- package/dist/websocket/types.d.ts +0 -417
- package/dist/websocket/types.d.ts.map +0 -1
- package/dist/websocket/types.js +0 -195
- 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
|
|
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
|
|
8
|
+
npm install @lightconexyz/lightcone-sdk
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## Architecture
|
|
12
12
|
|
|
13
|
-
|
|
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
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
26
|
+
const client = LightconeClient.builder()
|
|
27
|
+
.baseUrl("https://tapi.lightcone.xyz")
|
|
28
|
+
.wsUrl("wss://tws.lightcone.xyz/ws")
|
|
29
|
+
.build();
|
|
186
30
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
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
|
-
|
|
204
|
-
|
|
205
|
-
Common utilities used across modules:
|
|
37
|
+
## Main Entry Points
|
|
206
38
|
|
|
207
|
-
-
|
|
208
|
-
-
|
|
209
|
-
-
|
|
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
|
-
|
|
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
|
-
|
|
46
|
+
`program/` remains the on-chain toolkit (PDAs, instructions, account deserialization, order utilities), with v2 envelope builders now exposed:
|
|
219
47
|
|
|
220
|
-
-
|
|
221
|
-
-
|
|
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
|
-
##
|
|
51
|
+
## Notes
|
|
227
52
|
|
|
228
|
-
|
|
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"]}
|