@lightconexyz/lightcone-sdk 0.8.1-rc.3 → 0.8.1-rc.5

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.
@@ -23,6 +23,8 @@ export interface UserOutcomeBalance {
23
23
  balance_idle: string;
24
24
  balance_on_book: string;
25
25
  }
26
+ /** True when the outcome holds nothing idle and nothing resting on the book. */
27
+ export declare function userOutcomeBalanceIsZero(balance: UserOutcomeBalance): boolean;
26
28
  export interface GlobalDepositBalance {
27
29
  mint: PubkeyStr;
28
30
  balance: string;
@@ -1 +1 @@
1
- {"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../../src/domain/order/wire.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../../src/domain/order/wire.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,9 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.userOutcomeBalanceIsZero = userOutcomeBalanceIsZero;
3
7
  exports.triggerUpdateToTriggerOrder = triggerUpdateToTriggerOrder;
4
8
  exports.normalizeConditionalBalance = normalizeConditionalBalance;
5
9
  exports.normalizeOrderUpdate = normalizeOrderUpdate;
@@ -9,7 +13,12 @@ exports.normalizeUserDepositAssetBalance = normalizeUserDepositAssetBalance;
9
13
  exports.normalizeUserMarketBalance = normalizeUserMarketBalance;
10
14
  exports.normalizeUserOrdersPayload = normalizeUserOrdersPayload;
11
15
  exports.normalizeUserUpdate = normalizeUserUpdate;
16
+ const decimal_js_1 = __importDefault(require("decimal.js"));
12
17
  const shared_1 = require("../../shared");
18
+ /** True when the outcome holds nothing idle and nothing resting on the book. */
19
+ function userOutcomeBalanceIsZero(balance) {
20
+ return !(new decimal_js_1.default(balance.balance_idle).gt(0) || new decimal_js_1.default(balance.balance_on_book).gt(0));
21
+ }
13
22
  function triggerUpdateToTriggerOrder(update) {
14
23
  const triggerType = update.trigger_above ? shared_1.TriggerType.TakeProfit : shared_1.TriggerType.StopLoss;
15
24
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"wire.js","sourceRoot":"","sources":["../../../src/domain/order/wire.ts"],"names":[],"mappings":"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","sourcesContent":["import { asPubkeyStr, TimeInForce, TriggerType } from \"../../shared\";\nimport type {\n OrderBookId,\n OrderUpdateType,\n PubkeyStr,\n Side,\n TriggerResultStatus,\n TriggerStatus,\n TriggerUpdateType,\n} from \"../../shared\";\nimport type { Notification } from \"../notification\";\nimport type { OrderStatus, TriggerOrder } from \"./index\";\n\nexport interface ConditionalBalance {\n outcome_index: number;\n conditional_token: PubkeyStr;\n idle: string;\n on_book: string;\n}\n\nexport interface UserMarketBalance {\n market_pubkey: PubkeyStr;\n deposit_assets: UserDepositAssetBalance[];\n}\n\nexport interface UserDepositAssetBalance {\n deposit_asset: PubkeyStr;\n outcomes: UserOutcomeBalance[];\n}\n\nexport interface UserOutcomeBalance {\n outcome_index: number;\n conditional_token: PubkeyStr;\n balance: string;\n balance_idle: string;\n balance_on_book: string;\n}\n\nexport interface GlobalDepositBalance {\n mint: PubkeyStr;\n balance: string;\n}\n\nexport interface GlobalDepositUpdate {\n mint: PubkeyStr;\n balance: string;\n timestamp: string;\n}\n\nexport interface NonceUpdate {\n user_pubkey: PubkeyStr;\n new_nonce: number;\n timestamp: string;\n}\n\nexport interface UserOrderUpdateBalance {\n outcomes: ConditionalBalance[];\n}\n\nexport interface WsOrder {\n order_hash: string;\n price: string;\n is_maker: boolean;\n remaining: string;\n filled: string;\n fill_amount: string;\n side: Side;\n created_at: number;\n base_mint: PubkeyStr;\n quote_mint: PubkeyStr;\n outcome_index: number;\n status: OrderStatus;\n balance?: UserOrderUpdateBalance;\n}\n\nexport interface OrderUpdate {\n market_pubkey: PubkeyStr;\n orderbook_id: OrderBookId;\n timestamp: string;\n tx_signature?: string;\n type?: OrderUpdateType;\n order: WsOrder;\n}\n\nexport interface UserSnapshotOrderCommon {\n order_hash: string;\n market_pubkey: PubkeyStr;\n orderbook_id: OrderBookId;\n side: Side;\n amount_in: string;\n amount_out: string;\n remaining: string;\n filled: string;\n price: string;\n created_at: number;\n expiration: number;\n base_mint: PubkeyStr;\n quote_mint: PubkeyStr;\n outcome_index: number;\n status: OrderStatus;\n}\n\nexport type UserSnapshotOrder =\n | ({ order_type: \"limit\"; tx_signature?: string } & UserSnapshotOrderCommon)\n | ({\n order_type: \"trigger\";\n trigger_order_id: string;\n trigger_price: string;\n trigger_type: TriggerType;\n time_in_force?: TimeInForce;\n } & UserSnapshotOrderCommon);\n\nexport interface UserSnapshot {\n orders: UserSnapshotOrder[];\n market_balances: UserMarketBalance[];\n global_deposits: GlobalDepositBalance[];\n notifications: Notification[];\n nonce?: number;\n}\n\nexport interface TriggerOrderUpdate {\n trigger_order_id: string;\n user_pubkey?: PubkeyStr;\n market_pubkey: PubkeyStr;\n orderbook_id: OrderBookId;\n trigger_price: string;\n trigger_above: boolean;\n status: TriggerStatus;\n type?: TriggerUpdateType;\n order_hash: string;\n side: Side;\n result_status?: TriggerResultStatus;\n result_filled?: string;\n result_remaining?: string;\n timestamp: string;\n maker_amount?: string;\n taker_amount?: string;\n tif?: TimeInForce;\n}\n\nexport function triggerUpdateToTriggerOrder(update: TriggerOrderUpdate): TriggerOrder {\n const triggerType = update.trigger_above ? TriggerType.TakeProfit : TriggerType.StopLoss;\n return {\n triggerOrderId: update.trigger_order_id,\n orderHash: update.order_hash,\n marketPubkey: update.market_pubkey,\n orderbookId: update.orderbook_id,\n triggerPrice: update.trigger_price,\n triggerType,\n side: update.side,\n amountIn: update.maker_amount ?? \"0\",\n amountOut: update.taker_amount ?? \"0\",\n timeInForce: update.tif ?? TimeInForce.Gtc,\n createdAt: new Date(update.timestamp),\n };\n}\n\nexport type OrderEvent =\n | ({ order_type: \"limit\" } & OrderUpdate)\n | ({ order_type: \"trigger\" } & TriggerOrderUpdate);\n\nexport interface NotificationUpdate {\n notification: Notification;\n}\n\nexport interface UserBalanceUpdate {\n market_pubkey: PubkeyStr;\n market_balance: UserMarketBalance;\n timestamp: string;\n}\n\nexport type UserUpdate =\n | ({ event_type: \"snapshot\" } & UserSnapshot)\n | ({ event_type: \"order\" } & OrderEvent)\n | ({ event_type: \"market_balance_update\" } & UserBalanceUpdate)\n | ({ event_type: \"global_deposit_update\" } & GlobalDepositUpdate)\n | ({ event_type: \"nonce\" } & NonceUpdate)\n | ({ event_type: \"notification\" } & NotificationUpdate);\n\nexport type AuthUpdate =\n | { status: \"authenticated\"; wallet: PubkeyStr }\n | { status: \"anonymous\"; reason?: string };\n\n// ─── User order fills (REST) ────────────────────────────────────────────────\n\nexport type Role = \"maker\" | \"taker\";\n\nexport type FillStatus = \"filled\" | \"cancelled\" | \"partially_filled\";\n\nexport interface OrderFillEvent {\n fill_amount: string;\n tx_signature: string;\n filled_at: number;\n}\n\nexport interface UserOrderFill {\n order_hash: string;\n market_pubkey: PubkeyStr;\n orderbook_id: OrderBookId;\n side: Side;\n role: Role;\n price: string;\n size: string;\n filled_size: string;\n remaining_size: string;\n base_mint: PubkeyStr;\n quote_mint: PubkeyStr;\n outcome_index: number;\n status: FillStatus;\n created_at: number;\n fills: OrderFillEvent[];\n}\n\nexport interface UserOrderFillsResponse {\n orders: UserOrderFill[];\n next_cursor?: string;\n has_more: boolean;\n}\n\ntype RawConditionalBalance = Omit<ConditionalBalance, \"conditional_token\"> & {\n conditional_token: string;\n};\n\ntype RawUserOutcomeBalance = Omit<UserOutcomeBalance, \"conditional_token\"> & {\n conditional_token: string;\n};\n\ntype RawUserDepositAssetBalance = Omit<UserDepositAssetBalance, \"deposit_asset\" | \"outcomes\"> & {\n deposit_asset: string;\n outcomes: RawUserOutcomeBalance[];\n};\n\ntype RawUserMarketBalance = Omit<UserMarketBalance, \"market_pubkey\" | \"deposit_assets\"> & {\n market_pubkey: string;\n deposit_assets: RawUserDepositAssetBalance[];\n};\n\ntype RawUserOrderUpdateBalance = {\n outcomes: RawConditionalBalance[];\n};\n\ntype RawWsOrder = Omit<WsOrder, \"balance\"> & {\n balance?: RawUserOrderUpdateBalance;\n};\n\ntype RawOrderUpdate = Omit<OrderUpdate, \"order\"> & {\n order: RawWsOrder;\n};\n\ntype RawUserSnapshotOrderCommon = Omit<UserSnapshotOrderCommon, \"amount_in\" | \"amount_out\"> & {\n amount_in?: string;\n amount_out?: string;\n maker_amount?: string;\n taker_amount?: string;\n};\n\ntype RawUserSnapshotOrder =\n | ({ order_type: \"limit\"; tx_signature?: string } & RawUserSnapshotOrderCommon)\n | ({\n order_type: \"trigger\";\n trigger_order_id: string;\n trigger_price: string;\n trigger_type: TriggerType;\n time_in_force?: TimeInForce;\n } & RawUserSnapshotOrderCommon);\n\ntype RawUserSnapshot = Omit<UserSnapshot, \"orders\" | \"market_balances\"> & {\n orders: RawUserSnapshotOrder[];\n market_balances: RawUserMarketBalance[];\n};\n\ntype RawUserBalanceUpdate = Omit<UserBalanceUpdate, \"market_pubkey\" | \"market_balance\"> & {\n market_pubkey: string;\n market_balance: RawUserMarketBalance;\n};\n\ntype RawUserUpdate =\n | ({ event_type: \"snapshot\" } & RawUserSnapshot)\n | ({ event_type: \"order\" } & ({ order_type: \"limit\" } & RawOrderUpdate))\n | ({ event_type: \"order\" } & ({ order_type: \"trigger\" } & TriggerOrderUpdate))\n | ({ event_type: \"market_balance_update\" } & RawUserBalanceUpdate)\n | ({ event_type: \"global_deposit_update\" } & GlobalDepositUpdate)\n | ({ event_type: \"nonce\" | \"nonce_update\" } & NonceUpdate)\n | ({ event_type: \"notification\" } & NotificationUpdate);\n\ntype RawUserOrdersPayload = {\n user_pubkey: PubkeyStr;\n orders?: RawUserSnapshotOrder[];\n market_balances: RawUserMarketBalance[];\n next_cursor?: string | null;\n has_more?: boolean;\n};\n\nexport function normalizeConditionalBalance(balance: RawConditionalBalance): ConditionalBalance {\n if (!balance.conditional_token) {\n throw new Error(\"Invalid conditional balance: missing conditional_token\");\n }\n\n return {\n outcome_index: balance.outcome_index,\n conditional_token: asPubkeyStr(balance.conditional_token),\n idle: balance.idle,\n on_book: balance.on_book,\n };\n}\n\nfunction normalizeUserOrderUpdateBalance(\n balance: RawUserOrderUpdateBalance\n): UserOrderUpdateBalance {\n return {\n outcomes: balance.outcomes.map(normalizeConditionalBalance),\n };\n}\n\nfunction normalizeWsOrder(order: RawWsOrder): WsOrder {\n return {\n ...order,\n balance: order.balance\n ? normalizeUserOrderUpdateBalance(order.balance)\n : undefined,\n };\n}\n\nexport function normalizeOrderUpdate(update: RawOrderUpdate): OrderUpdate {\n return {\n ...update,\n order: normalizeWsOrder(update.order),\n };\n}\n\nfunction normalizeUserSnapshotOrderCommon(\n order: RawUserSnapshotOrderCommon\n): UserSnapshotOrderCommon {\n const amountIn = order.amount_in ?? order.maker_amount;\n const amountOut = order.amount_out ?? order.taker_amount;\n\n if (amountIn === undefined) {\n throw new Error(\"Invalid user snapshot order: missing amount_in/maker_amount\");\n }\n if (amountOut === undefined) {\n throw new Error(\"Invalid user snapshot order: missing amount_out/taker_amount\");\n }\n\n return {\n ...order,\n amount_in: amountIn,\n amount_out: amountOut,\n };\n}\n\nexport function normalizeUserSnapshotOrder(\n order: RawUserSnapshotOrder\n): UserSnapshotOrder {\n const common = normalizeUserSnapshotOrderCommon(order);\n\n if (order.order_type === \"limit\") {\n return {\n ...common,\n order_type: \"limit\",\n tx_signature: order.tx_signature,\n };\n }\n\n if (order.order_type === \"trigger\") {\n return {\n ...common,\n order_type: \"trigger\",\n trigger_order_id: order.trigger_order_id,\n trigger_price: order.trigger_price,\n trigger_type: order.trigger_type,\n time_in_force: order.time_in_force,\n };\n }\n\n const rawOrderType = (order as { order_type: string }).order_type;\n throw new Error(`Invalid user snapshot order: unsupported order_type \"${rawOrderType}\"`);\n}\n\nfunction requireArray<T>(value: T[] | undefined, context: string): T[] {\n if (!Array.isArray(value)) {\n throw new Error(`Invalid ${context}: expected array`);\n }\n return value;\n}\n\nexport function normalizeUserOutcomeBalance(\n balance: RawUserOutcomeBalance\n): UserOutcomeBalance {\n if (!balance.conditional_token) {\n throw new Error(\"Invalid user outcome balance: missing conditional_token\");\n }\n\n return {\n outcome_index: balance.outcome_index,\n conditional_token: asPubkeyStr(balance.conditional_token),\n balance: balance.balance,\n balance_idle: balance.balance_idle,\n balance_on_book: balance.balance_on_book,\n };\n}\n\nexport function normalizeUserDepositAssetBalance(\n balance: RawUserDepositAssetBalance\n): UserDepositAssetBalance {\n if (!balance.deposit_asset) {\n throw new Error(\"Invalid user deposit asset balance: missing deposit_asset\");\n }\n\n return {\n deposit_asset: asPubkeyStr(balance.deposit_asset),\n outcomes: requireArray(balance.outcomes, \"user deposit asset balance outcomes\").map(\n normalizeUserOutcomeBalance\n ),\n };\n}\n\nexport function normalizeUserMarketBalance(\n balance: RawUserMarketBalance\n): UserMarketBalance {\n if (!balance.market_pubkey) {\n throw new Error(\"Invalid user market balance: missing market_pubkey\");\n }\n\n return {\n market_pubkey: asPubkeyStr(balance.market_pubkey),\n deposit_assets: requireArray(\n balance.deposit_assets,\n \"user market balance deposit_assets\"\n ).map(normalizeUserDepositAssetBalance),\n };\n}\n\nexport function normalizeUserOrdersPayload(\n response: RawUserOrdersPayload\n): {\n user_pubkey: PubkeyStr;\n orders: UserSnapshotOrder[];\n market_balances: UserMarketBalance[];\n next_cursor?: string;\n has_more: boolean;\n} {\n return {\n user_pubkey: response.user_pubkey,\n orders: (response.orders ?? []).map(normalizeUserSnapshotOrder),\n market_balances: requireArray(\n response.market_balances,\n \"user orders response market_balances\"\n ).map(normalizeUserMarketBalance),\n next_cursor: response.next_cursor ?? undefined,\n has_more: response.has_more ?? false,\n };\n}\n\nexport function normalizeUserUpdate(raw: RawUserUpdate): UserUpdate {\n switch (raw.event_type) {\n case \"snapshot\":\n return {\n ...raw,\n event_type: \"snapshot\",\n orders: raw.orders.map(normalizeUserSnapshotOrder),\n market_balances: requireArray(\n raw.market_balances,\n \"user snapshot market_balances\"\n ).map(normalizeUserMarketBalance),\n global_deposits: raw.global_deposits ?? [],\n notifications: raw.notifications ?? [],\n nonce: raw.nonce ?? 0,\n };\n case \"order\":\n if (raw.order_type === \"limit\") {\n return {\n ...normalizeOrderUpdate(raw),\n event_type: \"order\",\n order_type: \"limit\",\n };\n }\n if (raw.order_type === \"trigger\") {\n return {\n ...raw,\n event_type: \"order\",\n order_type: \"trigger\",\n };\n }\n throw new Error(\n `Invalid user order event: unsupported order_type \"${(raw as { order_type: string }).order_type}\"`\n );\n case \"market_balance_update\":\n return {\n ...raw,\n event_type: \"market_balance_update\",\n market_pubkey: asPubkeyStr(raw.market_pubkey),\n market_balance: normalizeUserMarketBalance(raw.market_balance),\n };\n case \"global_deposit_update\":\n return raw;\n case \"nonce\":\n case \"nonce_update\":\n return {\n ...raw,\n event_type: \"nonce\",\n };\n case \"notification\":\n return raw;\n default:\n throw new Error(\n `Invalid user update event_type \"${(raw as { event_type: string }).event_type}\"`\n );\n }\n}\n"]}
1
+ {"version":3,"file":"wire.js","sourceRoot":"","sources":["../../../src/domain/order/wire.ts"],"names":[],"mappings":"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","sourcesContent":["import Decimal from \"decimal.js\";\nimport { asPubkeyStr, TimeInForce, TriggerType } from \"../../shared\";\nimport type {\n OrderBookId,\n OrderUpdateType,\n PubkeyStr,\n Side,\n TriggerResultStatus,\n TriggerStatus,\n TriggerUpdateType,\n} from \"../../shared\";\nimport type { Notification } from \"../notification\";\nimport type { OrderStatus, TriggerOrder } from \"./index\";\n\nexport interface ConditionalBalance {\n outcome_index: number;\n conditional_token: PubkeyStr;\n idle: string;\n on_book: string;\n}\n\nexport interface UserMarketBalance {\n market_pubkey: PubkeyStr;\n deposit_assets: UserDepositAssetBalance[];\n}\n\nexport interface UserDepositAssetBalance {\n deposit_asset: PubkeyStr;\n outcomes: UserOutcomeBalance[];\n}\n\nexport interface UserOutcomeBalance {\n outcome_index: number;\n conditional_token: PubkeyStr;\n balance: string;\n balance_idle: string;\n balance_on_book: string;\n}\n\n/** True when the outcome holds nothing idle and nothing resting on the book. */\nexport function userOutcomeBalanceIsZero(balance: UserOutcomeBalance): boolean {\n return !(\n new Decimal(balance.balance_idle).gt(0) || new Decimal(balance.balance_on_book).gt(0)\n );\n}\n\nexport interface GlobalDepositBalance {\n mint: PubkeyStr;\n balance: string;\n}\n\nexport interface GlobalDepositUpdate {\n mint: PubkeyStr;\n balance: string;\n timestamp: string;\n}\n\nexport interface NonceUpdate {\n user_pubkey: PubkeyStr;\n new_nonce: number;\n timestamp: string;\n}\n\nexport interface UserOrderUpdateBalance {\n outcomes: ConditionalBalance[];\n}\n\nexport interface WsOrder {\n order_hash: string;\n price: string;\n is_maker: boolean;\n remaining: string;\n filled: string;\n fill_amount: string;\n side: Side;\n created_at: number;\n base_mint: PubkeyStr;\n quote_mint: PubkeyStr;\n outcome_index: number;\n status: OrderStatus;\n balance?: UserOrderUpdateBalance;\n}\n\nexport interface OrderUpdate {\n market_pubkey: PubkeyStr;\n orderbook_id: OrderBookId;\n timestamp: string;\n tx_signature?: string;\n type?: OrderUpdateType;\n order: WsOrder;\n}\n\nexport interface UserSnapshotOrderCommon {\n order_hash: string;\n market_pubkey: PubkeyStr;\n orderbook_id: OrderBookId;\n side: Side;\n amount_in: string;\n amount_out: string;\n remaining: string;\n filled: string;\n price: string;\n created_at: number;\n expiration: number;\n base_mint: PubkeyStr;\n quote_mint: PubkeyStr;\n outcome_index: number;\n status: OrderStatus;\n}\n\nexport type UserSnapshotOrder =\n | ({ order_type: \"limit\"; tx_signature?: string } & UserSnapshotOrderCommon)\n | ({\n order_type: \"trigger\";\n trigger_order_id: string;\n trigger_price: string;\n trigger_type: TriggerType;\n time_in_force?: TimeInForce;\n } & UserSnapshotOrderCommon);\n\nexport interface UserSnapshot {\n orders: UserSnapshotOrder[];\n market_balances: UserMarketBalance[];\n global_deposits: GlobalDepositBalance[];\n notifications: Notification[];\n nonce?: number;\n}\n\nexport interface TriggerOrderUpdate {\n trigger_order_id: string;\n user_pubkey?: PubkeyStr;\n market_pubkey: PubkeyStr;\n orderbook_id: OrderBookId;\n trigger_price: string;\n trigger_above: boolean;\n status: TriggerStatus;\n type?: TriggerUpdateType;\n order_hash: string;\n side: Side;\n result_status?: TriggerResultStatus;\n result_filled?: string;\n result_remaining?: string;\n timestamp: string;\n maker_amount?: string;\n taker_amount?: string;\n tif?: TimeInForce;\n}\n\nexport function triggerUpdateToTriggerOrder(update: TriggerOrderUpdate): TriggerOrder {\n const triggerType = update.trigger_above ? TriggerType.TakeProfit : TriggerType.StopLoss;\n return {\n triggerOrderId: update.trigger_order_id,\n orderHash: update.order_hash,\n marketPubkey: update.market_pubkey,\n orderbookId: update.orderbook_id,\n triggerPrice: update.trigger_price,\n triggerType,\n side: update.side,\n amountIn: update.maker_amount ?? \"0\",\n amountOut: update.taker_amount ?? \"0\",\n timeInForce: update.tif ?? TimeInForce.Gtc,\n createdAt: new Date(update.timestamp),\n };\n}\n\nexport type OrderEvent =\n | ({ order_type: \"limit\" } & OrderUpdate)\n | ({ order_type: \"trigger\" } & TriggerOrderUpdate);\n\nexport interface NotificationUpdate {\n notification: Notification;\n}\n\nexport interface UserBalanceUpdate {\n market_pubkey: PubkeyStr;\n market_balance: UserMarketBalance;\n timestamp: string;\n}\n\nexport type UserUpdate =\n | ({ event_type: \"snapshot\" } & UserSnapshot)\n | ({ event_type: \"order\" } & OrderEvent)\n | ({ event_type: \"market_balance_update\" } & UserBalanceUpdate)\n | ({ event_type: \"global_deposit_update\" } & GlobalDepositUpdate)\n | ({ event_type: \"nonce\" } & NonceUpdate)\n | ({ event_type: \"notification\" } & NotificationUpdate);\n\nexport type AuthUpdate =\n | { status: \"authenticated\"; wallet: PubkeyStr }\n | { status: \"anonymous\"; reason?: string };\n\n// ─── User order fills (REST) ────────────────────────────────────────────────\n\nexport type Role = \"maker\" | \"taker\";\n\nexport type FillStatus = \"filled\" | \"cancelled\" | \"partially_filled\";\n\nexport interface OrderFillEvent {\n fill_amount: string;\n tx_signature: string;\n filled_at: number;\n}\n\nexport interface UserOrderFill {\n order_hash: string;\n market_pubkey: PubkeyStr;\n orderbook_id: OrderBookId;\n side: Side;\n role: Role;\n price: string;\n size: string;\n filled_size: string;\n remaining_size: string;\n base_mint: PubkeyStr;\n quote_mint: PubkeyStr;\n outcome_index: number;\n status: FillStatus;\n created_at: number;\n fills: OrderFillEvent[];\n}\n\nexport interface UserOrderFillsResponse {\n orders: UserOrderFill[];\n next_cursor?: string;\n has_more: boolean;\n}\n\ntype RawConditionalBalance = Omit<ConditionalBalance, \"conditional_token\"> & {\n conditional_token: string;\n};\n\ntype RawUserOutcomeBalance = Omit<UserOutcomeBalance, \"conditional_token\"> & {\n conditional_token: string;\n};\n\ntype RawUserDepositAssetBalance = Omit<UserDepositAssetBalance, \"deposit_asset\" | \"outcomes\"> & {\n deposit_asset: string;\n outcomes: RawUserOutcomeBalance[];\n};\n\ntype RawUserMarketBalance = Omit<UserMarketBalance, \"market_pubkey\" | \"deposit_assets\"> & {\n market_pubkey: string;\n deposit_assets: RawUserDepositAssetBalance[];\n};\n\ntype RawUserOrderUpdateBalance = {\n outcomes: RawConditionalBalance[];\n};\n\ntype RawWsOrder = Omit<WsOrder, \"balance\"> & {\n balance?: RawUserOrderUpdateBalance;\n};\n\ntype RawOrderUpdate = Omit<OrderUpdate, \"order\"> & {\n order: RawWsOrder;\n};\n\ntype RawUserSnapshotOrderCommon = Omit<UserSnapshotOrderCommon, \"amount_in\" | \"amount_out\"> & {\n amount_in?: string;\n amount_out?: string;\n maker_amount?: string;\n taker_amount?: string;\n};\n\ntype RawUserSnapshotOrder =\n | ({ order_type: \"limit\"; tx_signature?: string } & RawUserSnapshotOrderCommon)\n | ({\n order_type: \"trigger\";\n trigger_order_id: string;\n trigger_price: string;\n trigger_type: TriggerType;\n time_in_force?: TimeInForce;\n } & RawUserSnapshotOrderCommon);\n\ntype RawUserSnapshot = Omit<UserSnapshot, \"orders\" | \"market_balances\"> & {\n orders: RawUserSnapshotOrder[];\n market_balances: RawUserMarketBalance[];\n};\n\ntype RawUserBalanceUpdate = Omit<UserBalanceUpdate, \"market_pubkey\" | \"market_balance\"> & {\n market_pubkey: string;\n market_balance: RawUserMarketBalance;\n};\n\ntype RawUserUpdate =\n | ({ event_type: \"snapshot\" } & RawUserSnapshot)\n | ({ event_type: \"order\" } & ({ order_type: \"limit\" } & RawOrderUpdate))\n | ({ event_type: \"order\" } & ({ order_type: \"trigger\" } & TriggerOrderUpdate))\n | ({ event_type: \"market_balance_update\" } & RawUserBalanceUpdate)\n | ({ event_type: \"global_deposit_update\" } & GlobalDepositUpdate)\n | ({ event_type: \"nonce\" | \"nonce_update\" } & NonceUpdate)\n | ({ event_type: \"notification\" } & NotificationUpdate);\n\ntype RawUserOrdersPayload = {\n user_pubkey: PubkeyStr;\n orders?: RawUserSnapshotOrder[];\n market_balances: RawUserMarketBalance[];\n next_cursor?: string | null;\n has_more?: boolean;\n};\n\nexport function normalizeConditionalBalance(balance: RawConditionalBalance): ConditionalBalance {\n if (!balance.conditional_token) {\n throw new Error(\"Invalid conditional balance: missing conditional_token\");\n }\n\n return {\n outcome_index: balance.outcome_index,\n conditional_token: asPubkeyStr(balance.conditional_token),\n idle: balance.idle,\n on_book: balance.on_book,\n };\n}\n\nfunction normalizeUserOrderUpdateBalance(\n balance: RawUserOrderUpdateBalance\n): UserOrderUpdateBalance {\n return {\n outcomes: balance.outcomes.map(normalizeConditionalBalance),\n };\n}\n\nfunction normalizeWsOrder(order: RawWsOrder): WsOrder {\n return {\n ...order,\n balance: order.balance\n ? normalizeUserOrderUpdateBalance(order.balance)\n : undefined,\n };\n}\n\nexport function normalizeOrderUpdate(update: RawOrderUpdate): OrderUpdate {\n return {\n ...update,\n order: normalizeWsOrder(update.order),\n };\n}\n\nfunction normalizeUserSnapshotOrderCommon(\n order: RawUserSnapshotOrderCommon\n): UserSnapshotOrderCommon {\n const amountIn = order.amount_in ?? order.maker_amount;\n const amountOut = order.amount_out ?? order.taker_amount;\n\n if (amountIn === undefined) {\n throw new Error(\"Invalid user snapshot order: missing amount_in/maker_amount\");\n }\n if (amountOut === undefined) {\n throw new Error(\"Invalid user snapshot order: missing amount_out/taker_amount\");\n }\n\n return {\n ...order,\n amount_in: amountIn,\n amount_out: amountOut,\n };\n}\n\nexport function normalizeUserSnapshotOrder(\n order: RawUserSnapshotOrder\n): UserSnapshotOrder {\n const common = normalizeUserSnapshotOrderCommon(order);\n\n if (order.order_type === \"limit\") {\n return {\n ...common,\n order_type: \"limit\",\n tx_signature: order.tx_signature,\n };\n }\n\n if (order.order_type === \"trigger\") {\n return {\n ...common,\n order_type: \"trigger\",\n trigger_order_id: order.trigger_order_id,\n trigger_price: order.trigger_price,\n trigger_type: order.trigger_type,\n time_in_force: order.time_in_force,\n };\n }\n\n const rawOrderType = (order as { order_type: string }).order_type;\n throw new Error(`Invalid user snapshot order: unsupported order_type \"${rawOrderType}\"`);\n}\n\nfunction requireArray<T>(value: T[] | undefined, context: string): T[] {\n if (!Array.isArray(value)) {\n throw new Error(`Invalid ${context}: expected array`);\n }\n return value;\n}\n\nexport function normalizeUserOutcomeBalance(\n balance: RawUserOutcomeBalance\n): UserOutcomeBalance {\n if (!balance.conditional_token) {\n throw new Error(\"Invalid user outcome balance: missing conditional_token\");\n }\n\n return {\n outcome_index: balance.outcome_index,\n conditional_token: asPubkeyStr(balance.conditional_token),\n balance: balance.balance,\n balance_idle: balance.balance_idle,\n balance_on_book: balance.balance_on_book,\n };\n}\n\nexport function normalizeUserDepositAssetBalance(\n balance: RawUserDepositAssetBalance\n): UserDepositAssetBalance {\n if (!balance.deposit_asset) {\n throw new Error(\"Invalid user deposit asset balance: missing deposit_asset\");\n }\n\n return {\n deposit_asset: asPubkeyStr(balance.deposit_asset),\n outcomes: requireArray(balance.outcomes, \"user deposit asset balance outcomes\").map(\n normalizeUserOutcomeBalance\n ),\n };\n}\n\nexport function normalizeUserMarketBalance(\n balance: RawUserMarketBalance\n): UserMarketBalance {\n if (!balance.market_pubkey) {\n throw new Error(\"Invalid user market balance: missing market_pubkey\");\n }\n\n return {\n market_pubkey: asPubkeyStr(balance.market_pubkey),\n deposit_assets: requireArray(\n balance.deposit_assets,\n \"user market balance deposit_assets\"\n ).map(normalizeUserDepositAssetBalance),\n };\n}\n\nexport function normalizeUserOrdersPayload(\n response: RawUserOrdersPayload\n): {\n user_pubkey: PubkeyStr;\n orders: UserSnapshotOrder[];\n market_balances: UserMarketBalance[];\n next_cursor?: string;\n has_more: boolean;\n} {\n return {\n user_pubkey: response.user_pubkey,\n orders: (response.orders ?? []).map(normalizeUserSnapshotOrder),\n market_balances: requireArray(\n response.market_balances,\n \"user orders response market_balances\"\n ).map(normalizeUserMarketBalance),\n next_cursor: response.next_cursor ?? undefined,\n has_more: response.has_more ?? false,\n };\n}\n\nexport function normalizeUserUpdate(raw: RawUserUpdate): UserUpdate {\n switch (raw.event_type) {\n case \"snapshot\":\n return {\n ...raw,\n event_type: \"snapshot\",\n orders: raw.orders.map(normalizeUserSnapshotOrder),\n market_balances: requireArray(\n raw.market_balances,\n \"user snapshot market_balances\"\n ).map(normalizeUserMarketBalance),\n global_deposits: raw.global_deposits ?? [],\n notifications: raw.notifications ?? [],\n nonce: raw.nonce ?? 0,\n };\n case \"order\":\n if (raw.order_type === \"limit\") {\n return {\n ...normalizeOrderUpdate(raw),\n event_type: \"order\",\n order_type: \"limit\",\n };\n }\n if (raw.order_type === \"trigger\") {\n return {\n ...raw,\n event_type: \"order\",\n order_type: \"trigger\",\n };\n }\n throw new Error(\n `Invalid user order event: unsupported order_type \"${(raw as { order_type: string }).order_type}\"`\n );\n case \"market_balance_update\":\n return {\n ...raw,\n event_type: \"market_balance_update\",\n market_pubkey: asPubkeyStr(raw.market_pubkey),\n market_balance: normalizeUserMarketBalance(raw.market_balance),\n };\n case \"global_deposit_update\":\n return raw;\n case \"nonce\":\n case \"nonce_update\":\n return {\n ...raw,\n event_type: \"nonce\",\n };\n case \"notification\":\n return raw;\n default:\n throw new Error(\n `Invalid user update event_type \"${(raw as { event_type: string }).event_type}\"`\n );\n }\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import Decimal from "decimal.js";
2
2
  import type { OrderBookId, PubkeyStr } from "../../shared";
3
+ import type { UserMarketBalance, UserOutcomeBalance } from "../order/wire";
3
4
  export * from "./builders";
4
5
  export * from "./client";
5
6
  export * from "./wire";
@@ -54,8 +55,14 @@ export interface TokenBalanceComputedBase {
54
55
  }
55
56
  export interface DepositAssetMetadata {
56
57
  symbol: string;
58
+ short_symbol: string;
57
59
  name: string;
58
- iconUrl: string;
60
+ deposit_asset: PubkeyStr;
61
+ icon_url_low: string;
62
+ icon_url_medium: string;
63
+ icon_url_high: string;
64
+ description: string | null;
65
+ decimals: number;
59
66
  }
60
67
  export interface DepositTokenBalance {
61
68
  mint: PubkeyStr;
@@ -68,4 +75,39 @@ export interface DepositTokenBalance {
68
75
  }
69
76
  export declare function computedBase(balance: TokenBalance, conditionalPrice: Decimal): TokenBalanceComputedBase;
70
77
  export declare function computedQuote(balance: TokenBalance): string;
78
+ /** An incremental change to a user's balance for one conditional token. */
79
+ export interface ConditionalBalanceDelta {
80
+ marketPubkey: PubkeyStr;
81
+ orderbookId?: OrderBookId;
82
+ outcomeIndex: number;
83
+ conditionalToken: PubkeyStr;
84
+ idle: string;
85
+ onBook: string;
86
+ }
87
+ /** Full-precision sum of idle + on-book (mirrors the `balance` field). */
88
+ export declare function conditionalDeltaTotal(delta: ConditionalBalanceDelta): string;
89
+ /** True when the delta holds nothing idle and nothing resting on the book. */
90
+ export declare function conditionalDeltaIsZero(delta: ConditionalBalanceDelta): boolean;
91
+ export declare function conditionalDeltaToTokenBalance(delta: ConditionalBalanceDelta): TokenBalance;
92
+ export declare function conditionalDeltaToOutcomeBalance(delta: ConditionalBalanceDelta): UserOutcomeBalance;
93
+ export type ConditionalTokenBalanceIndex = Map<PubkeyStr, UserOutcomeBalance>;
94
+ export type DepositAssetBalanceIndex = Map<PubkeyStr, ConditionalTokenBalanceIndex>;
95
+ /**
96
+ * Nested index of a user's conditional-token balances, keyed
97
+ * `market → deposit_asset → conditional_token`. Zero balances are dropped when
98
+ * building from wire records.
99
+ */
100
+ export declare class UserMarketBalanceIndex {
101
+ readonly index: Map<PubkeyStr, DepositAssetBalanceIndex>;
102
+ constructor();
103
+ get(marketPubkey: PubkeyStr): DepositAssetBalanceIndex | undefined;
104
+ insert(marketPubkey: PubkeyStr, marketEntry: DepositAssetBalanceIndex): void;
105
+ extend(other: UserMarketBalanceIndex): void;
106
+ remove(marketPubkey: PubkeyStr): void;
107
+ inner(): Map<PubkeyStr, DepositAssetBalanceIndex>;
108
+ marketPubkeys(): PubkeyStr[];
109
+ isEmpty(): boolean;
110
+ static fromUserMarketBalance(marketBalance: UserMarketBalance): UserMarketBalanceIndex | undefined;
111
+ static fromUserMarketBalances(marketBalances: UserMarketBalance[]): UserMarketBalanceIndex;
112
+ }
71
113
  //# sourceMappingURL=index.d.ts.map
@@ -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,OAAO,EAAE,MAAM,CAAC;CACjB;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
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domain/position/index.ts"],"names":[],"mappings":"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"}
@@ -17,10 +17,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
17
17
  return (mod && mod.__esModule) ? mod : { "default": mod };
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.UserMarketBalanceIndex = void 0;
20
21
  exports.computedBase = computedBase;
21
22
  exports.computedQuote = computedQuote;
23
+ exports.conditionalDeltaTotal = conditionalDeltaTotal;
24
+ exports.conditionalDeltaIsZero = conditionalDeltaIsZero;
25
+ exports.conditionalDeltaToTokenBalance = conditionalDeltaToTokenBalance;
26
+ exports.conditionalDeltaToOutcomeBalance = conditionalDeltaToOutcomeBalance;
22
27
  const decimal_js_1 = __importDefault(require("decimal.js"));
28
+ const shared_1 = require("../../shared");
23
29
  const decimal_1 = require("../../shared/fmt/decimal");
30
+ const wire_1 = require("../order/wire");
24
31
  __exportStar(require("./builders"), exports);
25
32
  __exportStar(require("./client"), exports);
26
33
  __exportStar(require("./wire"), exports);
@@ -37,4 +44,106 @@ function computedQuote(balance) {
37
44
  const size = new decimal_js_1.default(balance.idle).plus(balance.onBook);
38
45
  return (0, decimal_1.display)(size);
39
46
  }
47
+ /** Full-precision sum of idle + on-book (mirrors the `balance` field). */
48
+ function conditionalDeltaTotal(delta) {
49
+ return new decimal_js_1.default(delta.idle).plus(delta.onBook).toString();
50
+ }
51
+ /** True when the delta holds nothing idle and nothing resting on the book. */
52
+ function conditionalDeltaIsZero(delta) {
53
+ return !(new decimal_js_1.default(delta.idle).gt(0) || new decimal_js_1.default(delta.onBook).gt(0));
54
+ }
55
+ function conditionalDeltaToTokenBalance(delta) {
56
+ return {
57
+ mint: delta.conditionalToken,
58
+ idle: delta.idle,
59
+ onBook: delta.onBook,
60
+ tokenType: {
61
+ kind: "ConditionalToken",
62
+ orderbookId: delta.orderbookId ?? (0, shared_1.asOrderBookId)(""),
63
+ marketPubkey: delta.marketPubkey,
64
+ outcomeIndex: delta.outcomeIndex,
65
+ },
66
+ };
67
+ }
68
+ function conditionalDeltaToOutcomeBalance(delta) {
69
+ return {
70
+ outcome_index: delta.outcomeIndex,
71
+ conditional_token: delta.conditionalToken,
72
+ balance: conditionalDeltaTotal(delta),
73
+ balance_idle: delta.idle,
74
+ balance_on_book: delta.onBook,
75
+ };
76
+ }
77
+ /**
78
+ * Nested index of a user's conditional-token balances, keyed
79
+ * `market → deposit_asset → conditional_token`. Zero balances are dropped when
80
+ * building from wire records.
81
+ */
82
+ class UserMarketBalanceIndex {
83
+ index;
84
+ constructor() {
85
+ this.index = new Map();
86
+ }
87
+ get(marketPubkey) {
88
+ return this.index.get(marketPubkey);
89
+ }
90
+ insert(marketPubkey, marketEntry) {
91
+ this.index.set(marketPubkey, marketEntry);
92
+ }
93
+ extend(other) {
94
+ for (const [marketPubkey, marketEntry] of other.index.entries()) {
95
+ const existing = this.index.get(marketPubkey);
96
+ if (!existing) {
97
+ this.index.set(marketPubkey, marketEntry);
98
+ continue;
99
+ }
100
+ for (const [depositAsset, outcomes] of marketEntry.entries()) {
101
+ existing.set(depositAsset, outcomes);
102
+ }
103
+ }
104
+ }
105
+ remove(marketPubkey) {
106
+ this.index.delete(marketPubkey);
107
+ }
108
+ inner() {
109
+ return this.index;
110
+ }
111
+ marketPubkeys() {
112
+ return [...this.index.keys()].sort();
113
+ }
114
+ isEmpty() {
115
+ return this.index.size === 0;
116
+ }
117
+ static fromUserMarketBalance(marketBalance) {
118
+ const marketEntry = new Map();
119
+ for (const depositAssetBalance of marketBalance.deposit_assets) {
120
+ const outcomes = new Map();
121
+ for (const outcome of depositAssetBalance.outcomes) {
122
+ if (!(0, wire_1.userOutcomeBalanceIsZero)(outcome)) {
123
+ outcomes.set(outcome.conditional_token, outcome);
124
+ }
125
+ }
126
+ if (outcomes.size > 0) {
127
+ marketEntry.set(depositAssetBalance.deposit_asset, outcomes);
128
+ }
129
+ }
130
+ if (marketEntry.size === 0) {
131
+ return undefined;
132
+ }
133
+ const index = new UserMarketBalanceIndex();
134
+ index.insert(marketBalance.market_pubkey, marketEntry);
135
+ return index;
136
+ }
137
+ static fromUserMarketBalances(marketBalances) {
138
+ const index = new UserMarketBalanceIndex();
139
+ for (const marketBalance of marketBalances) {
140
+ const marketIndex = UserMarketBalanceIndex.fromUserMarketBalance(marketBalance);
141
+ if (marketIndex) {
142
+ index.extend(marketIndex);
143
+ }
144
+ }
145
+ return index;
146
+ }
147
+ }
148
+ exports.UserMarketBalanceIndex = UserMarketBalanceIndex;
40
149
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/position/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAgFA,oCAWC;AAED,sCAGC;AAhGD,4DAAiC;AAEjC,sDAAmD;AAEnD,6CAA2B;AAC3B,2CAAyB;AACzB,yCAAuB;AA0EvB,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 name: string;\n iconUrl: string;\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"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/position/index.ts"],"names":[],"mappings":"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","sourcesContent":["import Decimal from \"decimal.js\";\nimport { asOrderBookId } from \"../../shared\";\nimport type { OrderBookId, PubkeyStr } from \"../../shared\";\nimport { display } from \"../../shared/fmt/decimal\";\nimport { userOutcomeBalanceIsZero } from \"../order/wire\";\nimport type { UserMarketBalance, UserOutcomeBalance } from \"../order/wire\";\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\n// ─── ConditionalBalanceDelta ─────────────────────────────────────────────────\n\n/** An incremental change to a user's balance for one conditional token. */\nexport interface ConditionalBalanceDelta {\n marketPubkey: PubkeyStr;\n orderbookId?: OrderBookId;\n outcomeIndex: number;\n conditionalToken: PubkeyStr;\n idle: string;\n onBook: string;\n}\n\n/** Full-precision sum of idle + on-book (mirrors the `balance` field). */\nexport function conditionalDeltaTotal(delta: ConditionalBalanceDelta): string {\n return new Decimal(delta.idle).plus(delta.onBook).toString();\n}\n\n/** True when the delta holds nothing idle and nothing resting on the book. */\nexport function conditionalDeltaIsZero(delta: ConditionalBalanceDelta): boolean {\n return !(new Decimal(delta.idle).gt(0) || new Decimal(delta.onBook).gt(0));\n}\n\nexport function conditionalDeltaToTokenBalance(delta: ConditionalBalanceDelta): TokenBalance {\n return {\n mint: delta.conditionalToken,\n idle: delta.idle,\n onBook: delta.onBook,\n tokenType: {\n kind: \"ConditionalToken\",\n orderbookId: delta.orderbookId ?? asOrderBookId(\"\"),\n marketPubkey: delta.marketPubkey,\n outcomeIndex: delta.outcomeIndex,\n },\n };\n}\n\nexport function conditionalDeltaToOutcomeBalance(\n delta: ConditionalBalanceDelta\n): UserOutcomeBalance {\n return {\n outcome_index: delta.outcomeIndex,\n conditional_token: delta.conditionalToken,\n balance: conditionalDeltaTotal(delta),\n balance_idle: delta.idle,\n balance_on_book: delta.onBook,\n };\n}\n\n// ─── UserMarketBalanceIndex ──────────────────────────────────────────────────\n\nexport type ConditionalTokenBalanceIndex = Map<PubkeyStr, UserOutcomeBalance>;\nexport type DepositAssetBalanceIndex = Map<PubkeyStr, ConditionalTokenBalanceIndex>;\n\n/**\n * Nested index of a user's conditional-token balances, keyed\n * `market → deposit_asset → conditional_token`. Zero balances are dropped when\n * building from wire records.\n */\nexport class UserMarketBalanceIndex {\n readonly index: Map<PubkeyStr, DepositAssetBalanceIndex>;\n\n constructor() {\n this.index = new Map();\n }\n\n get(marketPubkey: PubkeyStr): DepositAssetBalanceIndex | undefined {\n return this.index.get(marketPubkey);\n }\n\n insert(marketPubkey: PubkeyStr, marketEntry: DepositAssetBalanceIndex): void {\n this.index.set(marketPubkey, marketEntry);\n }\n\n extend(other: UserMarketBalanceIndex): void {\n for (const [marketPubkey, marketEntry] of other.index.entries()) {\n const existing = this.index.get(marketPubkey);\n if (!existing) {\n this.index.set(marketPubkey, marketEntry);\n continue;\n }\n for (const [depositAsset, outcomes] of marketEntry.entries()) {\n existing.set(depositAsset, outcomes);\n }\n }\n }\n\n remove(marketPubkey: PubkeyStr): void {\n this.index.delete(marketPubkey);\n }\n\n inner(): Map<PubkeyStr, DepositAssetBalanceIndex> {\n return this.index;\n }\n\n marketPubkeys(): PubkeyStr[] {\n return [...this.index.keys()].sort();\n }\n\n isEmpty(): boolean {\n return this.index.size === 0;\n }\n\n static fromUserMarketBalance(\n marketBalance: UserMarketBalance\n ): UserMarketBalanceIndex | undefined {\n const marketEntry: DepositAssetBalanceIndex = new Map();\n\n for (const depositAssetBalance of marketBalance.deposit_assets) {\n const outcomes: ConditionalTokenBalanceIndex = new Map();\n for (const outcome of depositAssetBalance.outcomes) {\n if (!userOutcomeBalanceIsZero(outcome)) {\n outcomes.set(outcome.conditional_token, outcome);\n }\n }\n if (outcomes.size > 0) {\n marketEntry.set(depositAssetBalance.deposit_asset, outcomes);\n }\n }\n\n if (marketEntry.size === 0) {\n return undefined;\n }\n\n const index = new UserMarketBalanceIndex();\n index.insert(marketBalance.market_pubkey, marketEntry);\n return index;\n }\n\n static fromUserMarketBalances(\n marketBalances: UserMarketBalance[]\n ): UserMarketBalanceIndex {\n const index = new UserMarketBalanceIndex();\n for (const marketBalance of marketBalances) {\n const marketIndex = UserMarketBalanceIndex.fromUserMarketBalance(marketBalance);\n if (marketIndex) {\n index.extend(marketIndex);\n }\n }\n return index;\n }\n}\n"]}
@@ -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: orderbookIds,
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: orderbookIds,
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
  }
@@ -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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lightconexyz/lightcone-sdk",
3
- "version": "0.8.1-rc.3",
3
+ "version": "0.8.1-rc.5",
4
4
  "description": "TypeScript SDK for Lightcone",
5
5
  "author": "Lightcone",
6
6
  "license": "MIT",