@lightconexyz/lightcone-sdk 0.8.1-rc.3 → 0.8.1-rc.4
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.
|
@@ -54,8 +54,14 @@ export interface TokenBalanceComputedBase {
|
|
|
54
54
|
}
|
|
55
55
|
export interface DepositAssetMetadata {
|
|
56
56
|
symbol: string;
|
|
57
|
+
short_symbol: string;
|
|
57
58
|
name: string;
|
|
58
|
-
|
|
59
|
+
deposit_asset: PubkeyStr;
|
|
60
|
+
icon_url_low: string;
|
|
61
|
+
icon_url_medium: string;
|
|
62
|
+
icon_url_high: string;
|
|
63
|
+
description: string | null;
|
|
64
|
+
decimals: number;
|
|
59
65
|
}
|
|
60
66
|
export interface DepositTokenBalance {
|
|
61
67
|
mint: PubkeyStr;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domain/position/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG3D,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AAEvB,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,SAAS,CAAC;IACvB,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,SAAS,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IACE,IAAI,EAAE,kBAAkB,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,SAAS,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEN,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,qBAAqB,CAAC;CAClC;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domain/position/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG3D,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AAEvB,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,SAAS,CAAC;IACvB,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,SAAS,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IACE,IAAI,EAAE,kBAAkB,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,SAAS,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEN,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,qBAAqB,CAAC;CAClC;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,SAAS,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,YAAY,EACrB,gBAAgB,EAAE,OAAO,GACxB,wBAAwB,CAQ1B;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAG3D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/position/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/position/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAsFA,oCAWC;AAED,sCAGC;AAtGD,4DAAiC;AAEjC,sDAAmD;AAEnD,6CAA2B;AAC3B,2CAAyB;AACzB,yCAAuB;AAgFvB,SAAgB,YAAY,CAC1B,OAAqB,EACrB,gBAAyB;IAEzB,MAAM,IAAI,GAAG,IAAI,oBAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACzC,OAAO;QACL,KAAK,EAAE,IAAA,iBAAO,EAAC,KAAK,CAAC;QACrB,IAAI,EAAE,IAAA,iBAAO,EAAC,IAAI,CAAC;QACnB,KAAK,EAAE,IAAA,iBAAO,EAAC,gBAAgB,CAAC;KACjC,CAAC;AACJ,CAAC;AAED,SAAgB,aAAa,CAAC,OAAqB;IACjD,MAAM,IAAI,GAAG,IAAI,oBAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5D,OAAO,IAAA,iBAAO,EAAC,IAAI,CAAC,CAAC;AACvB,CAAC","sourcesContent":["import Decimal from \"decimal.js\";\nimport type { OrderBookId, PubkeyStr } from \"../../shared\";\nimport { display } from \"../../shared/fmt/decimal\";\n\nexport * from \"./builders\";\nexport * from \"./client\";\nexport * from \"./wire\";\n\nexport interface Portfolio {\n userAddress: PubkeyStr;\n walletHoldings: WalletHolding[];\n positions: Position[];\n totalWalletValue: string;\n totalPositionsValue: string;\n}\n\nexport interface Position {\n eventPubkey: PubkeyStr;\n eventName: string;\n eventImgSrc: string;\n outcomes: PositionOutcome[];\n totalValue: string;\n createdAt: Date;\n}\n\nexport interface PositionOutcome {\n conditionId: number;\n conditionName: string;\n tokenMint: PubkeyStr;\n amount: string;\n usdValue: string;\n}\n\nexport interface WalletHolding {\n tokenMint: PubkeyStr;\n symbol: string;\n amount: string;\n decimals: number;\n usdValue: string;\n imgSrc: string;\n}\n\nexport type TokenBalanceTokenType =\n | { kind: \"DepositAsset\" }\n | {\n kind: \"ConditionalToken\";\n orderbookId: OrderBookId;\n marketPubkey: PubkeyStr;\n outcomeIndex: number;\n };\n\nexport interface TokenBalance {\n mint: PubkeyStr;\n idle: string;\n onBook: string;\n tokenType: TokenBalanceTokenType;\n}\n\nexport interface TokenBalanceComputedBase {\n value: string;\n size: string;\n price: string;\n}\n\nexport interface DepositAssetMetadata {\n symbol: string;\n short_symbol: string;\n name: string;\n deposit_asset: PubkeyStr;\n icon_url_low: string;\n icon_url_medium: string;\n icon_url_high: string;\n description: string | null;\n decimals: number;\n}\n\nexport interface DepositTokenBalance {\n mint: PubkeyStr;\n idle: string;\n symbol: string;\n name: string;\n icon_url_low?: string;\n icon_url_medium?: string;\n icon_url_high?: string;\n}\n\nexport function computedBase(\n balance: TokenBalance,\n conditionalPrice: Decimal\n): TokenBalanceComputedBase {\n const size = new Decimal(balance.idle).plus(balance.onBook);\n const value = size.mul(conditionalPrice);\n return {\n value: display(value),\n size: display(size),\n price: display(conditionalPrice),\n };\n}\n\nexport function computedQuote(balance: TokenBalance): string {\n const size = new Decimal(balance.idle).plus(balance.onBook);\n return display(size);\n}\n"]}
|
package/dist/ws/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ws/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ws/index.ts"],"names":[],"mappings":"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"}
|
package/dist/ws/index.js
CHANGED
|
@@ -82,12 +82,13 @@ function ping() {
|
|
|
82
82
|
* pre-aggregation message.
|
|
83
83
|
*/
|
|
84
84
|
function subscribeBooks(orderbookIds, aggregation = aggregation_1.FULL_PRECISION) {
|
|
85
|
+
const sorted = [...orderbookIds].sort();
|
|
85
86
|
const normalized = (0, aggregation_1.normalizeAggregation)(aggregation);
|
|
86
87
|
return {
|
|
87
88
|
method: "subscribe",
|
|
88
89
|
params: {
|
|
89
90
|
type: "book_update",
|
|
90
|
-
orderbook_ids:
|
|
91
|
+
orderbook_ids: sorted,
|
|
91
92
|
nSigFigs: normalized.nSigFigs,
|
|
92
93
|
mantissa: normalized.mantissa,
|
|
93
94
|
},
|
|
@@ -98,12 +99,13 @@ function subscribeBooks(orderbookIds, aggregation = aggregation_1.FULL_PRECISION
|
|
|
98
99
|
* subscribed (normalized) or the server removes nothing.
|
|
99
100
|
*/
|
|
100
101
|
function unsubscribeBooks(orderbookIds, aggregation = aggregation_1.FULL_PRECISION) {
|
|
102
|
+
const sorted = [...orderbookIds].sort();
|
|
101
103
|
const normalized = (0, aggregation_1.normalizeAggregation)(aggregation);
|
|
102
104
|
return {
|
|
103
105
|
method: "unsubscribe",
|
|
104
106
|
params: {
|
|
105
107
|
type: "book_update",
|
|
106
|
-
orderbook_ids:
|
|
108
|
+
orderbook_ids: sorted,
|
|
107
109
|
nSigFigs: normalized.nSigFigs,
|
|
108
110
|
mantissa: normalized.mantissa,
|
|
109
111
|
},
|
|
@@ -114,7 +116,7 @@ function subscribeTrades(orderbookIds) {
|
|
|
114
116
|
method: "subscribe",
|
|
115
117
|
params: {
|
|
116
118
|
type: "trades",
|
|
117
|
-
orderbook_ids: orderbookIds,
|
|
119
|
+
orderbook_ids: [...orderbookIds].sort(),
|
|
118
120
|
},
|
|
119
121
|
};
|
|
120
122
|
}
|
|
@@ -123,7 +125,7 @@ function unsubscribeTrades(orderbookIds) {
|
|
|
123
125
|
method: "unsubscribe",
|
|
124
126
|
params: {
|
|
125
127
|
type: "trades",
|
|
126
|
-
orderbook_ids: orderbookIds,
|
|
128
|
+
orderbook_ids: [...orderbookIds].sort(),
|
|
127
129
|
},
|
|
128
130
|
};
|
|
129
131
|
}
|
|
@@ -171,7 +173,7 @@ function subscribeTicker(orderbookIds) {
|
|
|
171
173
|
method: "subscribe",
|
|
172
174
|
params: {
|
|
173
175
|
type: "ticker",
|
|
174
|
-
orderbook_ids: orderbookIds,
|
|
176
|
+
orderbook_ids: [...orderbookIds].sort(),
|
|
175
177
|
},
|
|
176
178
|
};
|
|
177
179
|
}
|
|
@@ -180,7 +182,7 @@ function unsubscribeTicker(orderbookIds) {
|
|
|
180
182
|
method: "unsubscribe",
|
|
181
183
|
params: {
|
|
182
184
|
type: "ticker",
|
|
183
|
-
orderbook_ids: orderbookIds,
|
|
185
|
+
orderbook_ids: [...orderbookIds].sort(),
|
|
184
186
|
},
|
|
185
187
|
};
|
|
186
188
|
}
|
package/dist/ws/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ws/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MarketEvent } from \"../domain/market\";\nimport { normalizeUserUpdate, type AuthUpdate, type UserUpdate } from \"../domain/order/wire\";\nimport type { OrderBook, WsTickerData } from \"../domain/orderbook\";\nimport {\n FULL_PRECISION,\n normalizeAggregation,\n type BookAggregation,\n} from \"../domain/orderbook/aggregation\";\nimport type {\n DepositAssetPriceEvent,\n DepositPrice,\n PriceHistory,\n} from \"../domain/price_history\";\nimport type { WsTrade } from \"../domain/trade\";\nimport { WsError as WsErrorClass } from \"../error\";\nimport { LightconeEnv, wsUrl } from \"../env\";\nimport type { OrderBookId, PubkeyStr, Resolution } from \"../shared\";\n\nexport * from \"./client.node\";\nexport * from \"./subscriptions\";\nexport type { IWsClient } from \"./types\";\n\nexport type MessageOut =\n | { method: \"subscribe\"; params: import(\"./subscriptions\").SubscribeParams }\n | { method: \"unsubscribe\"; params: import(\"./subscriptions\").UnsubscribeParams }\n | { method: \"ping\" };\n\nexport type MessageIn =\n | { type: \"book_update\"; version: number; data: OrderBook }\n | { type: \"pong\"; version: number; data: Record<string, never> }\n | { type: \"user\"; version: number; data: UserUpdate }\n | { type: \"error\"; version: number; data: WsError }\n | { type: \"price_history\"; version: number; data: PriceHistory }\n | { type: \"trades\"; version: number; data: WsTrade }\n | { type: \"auth\"; version: number; data: AuthUpdate }\n | { type: \"ticker\"; version: number; data: WsTickerData }\n | { type: \"market\"; version: number; data: MarketEvent }\n | { type: \"deposit_price\"; version: number; data: DepositPrice }\n | { type: \"deposit_asset_price\"; version: number; data: DepositAssetPriceEvent };\n\nexport type Kind = MessageIn;\n\nexport interface WsError {\n error: string;\n code?: string;\n orderbook_id?: string;\n /**\n * Aggregation of the affected book subscription on book-scoped errors\n * (`ENGINE_UNAVAILABLE`, `SUBSCRIPTION_LIMIT_REACHED`,\n * `INVALID_ORDERBOOK_SUBSCRIPTION`). Absent = full precision; pass to\n * `aggregationFromFrame` to identify the `(orderbook, aggregation)` pair.\n */\n n_sig_figs?: number;\n mantissa?: number;\n wallet_address?: string;\n deposit_asset?: string;\n hint?: string;\n details?: string;\n}\n\nexport type WsEvent =\n | { type: \"Message\"; message: MessageIn }\n | { type: \"Connected\" }\n | { type: \"Disconnected\"; code?: number; reason: string }\n | { type: \"Error\"; error: string }\n | { type: \"MaxReconnectReached\" };\n\nexport interface WsConfig {\n url: string;\n reconnect: boolean;\n maxReconnectAttempts: number;\n baseReconnectDelayMs: number;\n pingIntervalMs: number;\n pongTimeoutMs: number;\n}\n\nexport const WS_DEFAULT_CONFIG: WsConfig = {\n url: wsUrl(LightconeEnv.Prod),\n reconnect: true,\n maxReconnectAttempts: 10,\n baseReconnectDelayMs: 1_000,\n pingIntervalMs: 30_000,\n pongTimeoutMs: 10_000,\n};\n\nexport enum ReadyState {\n Connecting = 0,\n Open = 1,\n Closing = 2,\n Closed = 3,\n}\n\nexport function readyStateFrom(value: number): ReadyState {\n switch (value) {\n case 0:\n return ReadyState.Connecting;\n case 1:\n return ReadyState.Open;\n case 2:\n return ReadyState.Closing;\n case 3:\n default:\n return ReadyState.Closed;\n }\n}\n\nexport function ping(): MessageOut {\n return { method: \"ping\" };\n}\n\n/**\n * Subscribe to book snapshots, optionally aggregated (Hyperliquid-style).\n *\n * Omit `aggregation` for the raw book. The aggregation is normalized before\n * sending ((5, none) → (5, 1)); validate with `validateAggregation` first —\n * invalid combinations are rejected server-side with\n * `INVALID_ORDERBOOK_SUBSCRIPTION`. `undefined` fields are dropped by\n * `JSON.stringify`, so full precision stays byte-identical to the\n * pre-aggregation message.\n */\nexport function subscribeBooks(\n orderbookIds: OrderBookId[],\n aggregation: BookAggregation = FULL_PRECISION\n): MessageOut {\n const normalized = normalizeAggregation(aggregation);\n return {\n method: \"subscribe\",\n params: {\n type: \"book_update\",\n orderbook_ids: orderbookIds,\n nSigFigs: normalized.nSigFigs,\n mantissa: normalized.mantissa,\n },\n };\n}\n\n/**\n * Unsubscribe a book subscription. The aggregation must match the one\n * subscribed (normalized) or the server removes nothing.\n */\nexport function unsubscribeBooks(\n orderbookIds: OrderBookId[],\n aggregation: BookAggregation = FULL_PRECISION\n): MessageOut {\n const normalized = normalizeAggregation(aggregation);\n return {\n method: \"unsubscribe\",\n params: {\n type: \"book_update\",\n orderbook_ids: orderbookIds,\n nSigFigs: normalized.nSigFigs,\n mantissa: normalized.mantissa,\n },\n };\n}\n\nexport function subscribeTrades(orderbookIds: OrderBookId[]): MessageOut {\n return {\n method: \"subscribe\",\n params: {\n type: \"trades\",\n orderbook_ids: orderbookIds,\n },\n };\n}\n\nexport function unsubscribeTrades(orderbookIds: OrderBookId[]): MessageOut {\n return {\n method: \"unsubscribe\",\n params: {\n type: \"trades\",\n orderbook_ids: orderbookIds,\n },\n };\n}\n\nexport function subscribeUser(walletAddress: PubkeyStr): MessageOut {\n return {\n method: \"subscribe\",\n params: {\n type: \"user\",\n wallet_address: walletAddress,\n },\n };\n}\n\nexport function unsubscribeUser(walletAddress: PubkeyStr): MessageOut {\n return {\n method: \"unsubscribe\",\n params: {\n type: \"user\",\n wallet_address: walletAddress,\n },\n };\n}\n\nexport function subscribePriceHistory(orderbookId: OrderBookId, resolution: Resolution): MessageOut {\n return {\n method: \"subscribe\",\n params: {\n type: \"price_history\",\n orderbook_id: orderbookId,\n resolution,\n include_ohlcv: false,\n },\n };\n}\n\nexport function unsubscribePriceHistory(orderbookId: OrderBookId, resolution: Resolution): MessageOut {\n return {\n method: \"unsubscribe\",\n params: {\n type: \"price_history\",\n orderbook_id: orderbookId,\n resolution,\n },\n };\n}\n\nexport function subscribeTicker(orderbookIds: OrderBookId[]): MessageOut {\n return {\n method: \"subscribe\",\n params: {\n type: \"ticker\",\n orderbook_ids: orderbookIds,\n },\n };\n}\n\nexport function unsubscribeTicker(orderbookIds: OrderBookId[]): MessageOut {\n return {\n method: \"unsubscribe\",\n params: {\n type: \"ticker\",\n orderbook_ids: orderbookIds,\n },\n };\n}\n\nexport function subscribeMarket(marketPubkey: PubkeyStr): MessageOut {\n return {\n method: \"subscribe\",\n params: {\n type: \"market\",\n market_pubkey: marketPubkey,\n },\n };\n}\n\nexport function unsubscribeMarket(marketPubkey: PubkeyStr): MessageOut {\n return {\n method: \"unsubscribe\",\n params: {\n type: \"market\",\n market_pubkey: marketPubkey,\n },\n };\n}\n\nexport function subscribeDepositPrice(depositAsset: string, resolution: Resolution): MessageOut {\n return {\n method: \"subscribe\",\n params: {\n type: \"deposit_price\",\n deposit_asset: depositAsset,\n resolution,\n },\n };\n}\n\nexport function unsubscribeDepositPrice(depositAsset: string, resolution: Resolution): MessageOut {\n return {\n method: \"unsubscribe\",\n params: {\n type: \"deposit_price\",\n deposit_asset: depositAsset,\n resolution,\n },\n };\n}\n\n/**\n * Subscribe to the live spot price for one deposit asset (snapshot +\n * per-asset price ticks). Distinct from `subscribeDepositPrice`, which\n * carries OHLCV candles per resolution.\n */\nexport function subscribeDepositAssetPrice(depositAsset: string): MessageOut {\n return {\n method: \"subscribe\",\n params: { type: \"deposit_asset_price\", deposit_asset: depositAsset },\n };\n}\n\nexport function unsubscribeDepositAssetPrice(depositAsset: string): MessageOut {\n return {\n method: \"unsubscribe\",\n params: { type: \"deposit_asset_price\", deposit_asset: depositAsset },\n };\n}\n\nconst VALID_MESSAGE_TYPES = new Set([\n \"book_update\",\n \"pong\",\n \"user\",\n \"error\",\n \"price_history\",\n \"trades\",\n \"auth\",\n \"ticker\",\n \"market\",\n \"deposit_price\",\n \"deposit_asset_price\",\n]);\n\nexport function parseMessageIn(input: string): MessageIn {\n const parsed: unknown = JSON.parse(input);\n if (typeof parsed !== \"object\" || parsed === null || !(\"type\" in parsed)) {\n throw new WsErrorClass(\"ProtocolError\", `Invalid WS message: missing \"type\" field`);\n }\n const obj = parsed as Record<string, unknown>;\n if (typeof obj.type !== \"string\" || !VALID_MESSAGE_TYPES.has(obj.type)) {\n throw new WsErrorClass(\"ProtocolError\", `Invalid WS message type: \"${String(obj.type)}\"`);\n }\n if (!(\"version\" in obj) || typeof obj.version !== \"number\") {\n throw new WsErrorClass(\"ProtocolError\", `Invalid WS message: missing or invalid \"version\" field`);\n }\n if (!(\"data\" in obj) || typeof obj.data !== \"object\" || obj.data === null) {\n throw new WsErrorClass(\"ProtocolError\", `Invalid WS message: missing or invalid \"data\" field`);\n }\n const message = parsed as MessageIn;\n if (message.type === \"user\") {\n return {\n ...message,\n data: normalizeUserUpdate(message.data as Parameters<typeof normalizeUserUpdate>[0]),\n };\n }\n return message;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ws/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MarketEvent } from \"../domain/market\";\nimport { normalizeUserUpdate, type AuthUpdate, type UserUpdate } from \"../domain/order/wire\";\nimport type { OrderBook, WsTickerData } from \"../domain/orderbook\";\nimport {\n FULL_PRECISION,\n normalizeAggregation,\n type BookAggregation,\n} from \"../domain/orderbook/aggregation\";\nimport type {\n DepositAssetPriceEvent,\n DepositPrice,\n PriceHistory,\n} from \"../domain/price_history\";\nimport type { WsTrade } from \"../domain/trade\";\nimport { WsError as WsErrorClass } from \"../error\";\nimport { LightconeEnv, wsUrl } from \"../env\";\nimport type { OrderBookId, PubkeyStr, Resolution } from \"../shared\";\n\nexport * from \"./client.node\";\nexport * from \"./subscriptions\";\nexport type { IWsClient } from \"./types\";\n\nexport type MessageOut =\n | { method: \"subscribe\"; params: import(\"./subscriptions\").SubscribeParams }\n | { method: \"unsubscribe\"; params: import(\"./subscriptions\").UnsubscribeParams }\n | { method: \"ping\" };\n\nexport type MessageIn =\n | { type: \"book_update\"; version: number; data: OrderBook }\n | { type: \"pong\"; version: number; data: Record<string, never> }\n | { type: \"user\"; version: number; data: UserUpdate }\n | { type: \"error\"; version: number; data: WsError }\n | { type: \"price_history\"; version: number; data: PriceHistory }\n | { type: \"trades\"; version: number; data: WsTrade }\n | { type: \"auth\"; version: number; data: AuthUpdate }\n | { type: \"ticker\"; version: number; data: WsTickerData }\n | { type: \"market\"; version: number; data: MarketEvent }\n | { type: \"deposit_price\"; version: number; data: DepositPrice }\n | { type: \"deposit_asset_price\"; version: number; data: DepositAssetPriceEvent };\n\nexport type Kind = MessageIn;\n\nexport interface WsError {\n error: string;\n code?: string;\n orderbook_id?: string;\n /**\n * Aggregation of the affected book subscription on book-scoped errors\n * (`ENGINE_UNAVAILABLE`, `SUBSCRIPTION_LIMIT_REACHED`,\n * `INVALID_ORDERBOOK_SUBSCRIPTION`). Absent = full precision; pass to\n * `aggregationFromFrame` to identify the `(orderbook, aggregation)` pair.\n */\n n_sig_figs?: number;\n mantissa?: number;\n wallet_address?: string;\n deposit_asset?: string;\n hint?: string;\n details?: string;\n}\n\nexport type WsEvent =\n | { type: \"Message\"; message: MessageIn }\n | { type: \"Connected\" }\n | { type: \"Disconnected\"; code?: number; reason: string }\n | { type: \"Error\"; error: string }\n | { type: \"MaxReconnectReached\" };\n\nexport interface WsConfig {\n url: string;\n reconnect: boolean;\n maxReconnectAttempts: number;\n baseReconnectDelayMs: number;\n pingIntervalMs: number;\n pongTimeoutMs: number;\n}\n\nexport const WS_DEFAULT_CONFIG: WsConfig = {\n url: wsUrl(LightconeEnv.Prod),\n reconnect: true,\n maxReconnectAttempts: 10,\n baseReconnectDelayMs: 1_000,\n pingIntervalMs: 30_000,\n pongTimeoutMs: 10_000,\n};\n\nexport enum ReadyState {\n Connecting = 0,\n Open = 1,\n Closing = 2,\n Closed = 3,\n}\n\nexport function readyStateFrom(value: number): ReadyState {\n switch (value) {\n case 0:\n return ReadyState.Connecting;\n case 1:\n return ReadyState.Open;\n case 2:\n return ReadyState.Closing;\n case 3:\n default:\n return ReadyState.Closed;\n }\n}\n\nexport function ping(): MessageOut {\n return { method: \"ping\" };\n}\n\n/**\n * Subscribe to book snapshots, optionally aggregated (Hyperliquid-style).\n *\n * Omit `aggregation` for the raw book. The aggregation is normalized before\n * sending ((5, none) → (5, 1)); validate with `validateAggregation` first —\n * invalid combinations are rejected server-side with\n * `INVALID_ORDERBOOK_SUBSCRIPTION`. `undefined` fields are dropped by\n * `JSON.stringify`, so full precision stays byte-identical to the\n * pre-aggregation message.\n */\nexport function subscribeBooks(\n orderbookIds: OrderBookId[],\n aggregation: BookAggregation = FULL_PRECISION\n): MessageOut {\n const sorted = [...orderbookIds].sort();\n const normalized = normalizeAggregation(aggregation);\n return {\n method: \"subscribe\",\n params: {\n type: \"book_update\",\n orderbook_ids: sorted,\n nSigFigs: normalized.nSigFigs,\n mantissa: normalized.mantissa,\n },\n };\n}\n\n/**\n * Unsubscribe a book subscription. The aggregation must match the one\n * subscribed (normalized) or the server removes nothing.\n */\nexport function unsubscribeBooks(\n orderbookIds: OrderBookId[],\n aggregation: BookAggregation = FULL_PRECISION\n): MessageOut {\n const sorted = [...orderbookIds].sort();\n const normalized = normalizeAggregation(aggregation);\n return {\n method: \"unsubscribe\",\n params: {\n type: \"book_update\",\n orderbook_ids: sorted,\n nSigFigs: normalized.nSigFigs,\n mantissa: normalized.mantissa,\n },\n };\n}\n\nexport function subscribeTrades(orderbookIds: OrderBookId[]): MessageOut {\n return {\n method: \"subscribe\",\n params: {\n type: \"trades\",\n orderbook_ids: [...orderbookIds].sort(),\n },\n };\n}\n\nexport function unsubscribeTrades(orderbookIds: OrderBookId[]): MessageOut {\n return {\n method: \"unsubscribe\",\n params: {\n type: \"trades\",\n orderbook_ids: [...orderbookIds].sort(),\n },\n };\n}\n\nexport function subscribeUser(walletAddress: PubkeyStr): MessageOut {\n return {\n method: \"subscribe\",\n params: {\n type: \"user\",\n wallet_address: walletAddress,\n },\n };\n}\n\nexport function unsubscribeUser(walletAddress: PubkeyStr): MessageOut {\n return {\n method: \"unsubscribe\",\n params: {\n type: \"user\",\n wallet_address: walletAddress,\n },\n };\n}\n\nexport function subscribePriceHistory(orderbookId: OrderBookId, resolution: Resolution): MessageOut {\n return {\n method: \"subscribe\",\n params: {\n type: \"price_history\",\n orderbook_id: orderbookId,\n resolution,\n include_ohlcv: false,\n },\n };\n}\n\nexport function unsubscribePriceHistory(orderbookId: OrderBookId, resolution: Resolution): MessageOut {\n return {\n method: \"unsubscribe\",\n params: {\n type: \"price_history\",\n orderbook_id: orderbookId,\n resolution,\n },\n };\n}\n\nexport function subscribeTicker(orderbookIds: OrderBookId[]): MessageOut {\n return {\n method: \"subscribe\",\n params: {\n type: \"ticker\",\n orderbook_ids: [...orderbookIds].sort(),\n },\n };\n}\n\nexport function unsubscribeTicker(orderbookIds: OrderBookId[]): MessageOut {\n return {\n method: \"unsubscribe\",\n params: {\n type: \"ticker\",\n orderbook_ids: [...orderbookIds].sort(),\n },\n };\n}\n\nexport function subscribeMarket(marketPubkey: PubkeyStr): MessageOut {\n return {\n method: \"subscribe\",\n params: {\n type: \"market\",\n market_pubkey: marketPubkey,\n },\n };\n}\n\nexport function unsubscribeMarket(marketPubkey: PubkeyStr): MessageOut {\n return {\n method: \"unsubscribe\",\n params: {\n type: \"market\",\n market_pubkey: marketPubkey,\n },\n };\n}\n\nexport function subscribeDepositPrice(depositAsset: string, resolution: Resolution): MessageOut {\n return {\n method: \"subscribe\",\n params: {\n type: \"deposit_price\",\n deposit_asset: depositAsset,\n resolution,\n },\n };\n}\n\nexport function unsubscribeDepositPrice(depositAsset: string, resolution: Resolution): MessageOut {\n return {\n method: \"unsubscribe\",\n params: {\n type: \"deposit_price\",\n deposit_asset: depositAsset,\n resolution,\n },\n };\n}\n\n/**\n * Subscribe to the live spot price for one deposit asset (snapshot +\n * per-asset price ticks). Distinct from `subscribeDepositPrice`, which\n * carries OHLCV candles per resolution.\n */\nexport function subscribeDepositAssetPrice(depositAsset: string): MessageOut {\n return {\n method: \"subscribe\",\n params: { type: \"deposit_asset_price\", deposit_asset: depositAsset },\n };\n}\n\nexport function unsubscribeDepositAssetPrice(depositAsset: string): MessageOut {\n return {\n method: \"unsubscribe\",\n params: { type: \"deposit_asset_price\", deposit_asset: depositAsset },\n };\n}\n\nconst VALID_MESSAGE_TYPES = new Set([\n \"book_update\",\n \"pong\",\n \"user\",\n \"error\",\n \"price_history\",\n \"trades\",\n \"auth\",\n \"ticker\",\n \"market\",\n \"deposit_price\",\n \"deposit_asset_price\",\n]);\n\nexport function parseMessageIn(input: string): MessageIn {\n const parsed: unknown = JSON.parse(input);\n if (typeof parsed !== \"object\" || parsed === null || !(\"type\" in parsed)) {\n throw new WsErrorClass(\"ProtocolError\", `Invalid WS message: missing \"type\" field`);\n }\n const obj = parsed as Record<string, unknown>;\n if (typeof obj.type !== \"string\" || !VALID_MESSAGE_TYPES.has(obj.type)) {\n throw new WsErrorClass(\"ProtocolError\", `Invalid WS message type: \"${String(obj.type)}\"`);\n }\n if (!(\"version\" in obj) || typeof obj.version !== \"number\") {\n throw new WsErrorClass(\"ProtocolError\", `Invalid WS message: missing or invalid \"version\" field`);\n }\n if (!(\"data\" in obj) || typeof obj.data !== \"object\" || obj.data === null) {\n throw new WsErrorClass(\"ProtocolError\", `Invalid WS message: missing or invalid \"data\" field`);\n }\n const message = parsed as MessageIn;\n if (message.type === \"user\") {\n return {\n ...message,\n data: normalizeUserUpdate(message.data as Parameters<typeof normalizeUserUpdate>[0]),\n };\n }\n return message;\n}\n"]}
|