@lightconexyz/lightcone-sdk 0.8.1-rc.4 → 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.
- package/dist/domain/order/wire.d.ts +2 -0
- package/dist/domain/order/wire.d.ts.map +1 -1
- package/dist/domain/order/wire.js +9 -0
- package/dist/domain/order/wire.js.map +1 -1
- package/dist/domain/position/index.d.ts +36 -0
- package/dist/domain/position/index.d.ts.map +1 -1
- package/dist/domain/position/index.js +109 -0
- package/dist/domain/position/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -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":"
|
|
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";
|
|
@@ -74,4 +75,39 @@ export interface DepositTokenBalance {
|
|
|
74
75
|
}
|
|
75
76
|
export declare function computedBase(balance: TokenBalance, conditionalPrice: Decimal): TokenBalanceComputedBase;
|
|
76
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
|
+
}
|
|
77
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;
|
|
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":";;;;;;;;;;;;;;;;;;;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"]}
|
|
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"]}
|