@lightconexyz/lightcone-sdk 0.4.16 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +173 -44
- package/dist/auth/client.d.ts +1 -1
- package/dist/auth/client.d.ts.map +1 -1
- package/dist/auth/client.js +2 -7
- package/dist/auth/client.js.map +1 -1
- package/dist/domain/admin/client.d.ts +11 -8
- package/dist/domain/admin/client.d.ts.map +1 -1
- package/dist/domain/admin/client.js +33 -14
- package/dist/domain/admin/client.js.map +1 -1
- package/dist/domain/admin/index.d.ts +12 -3
- package/dist/domain/admin/index.d.ts.map +1 -1
- package/dist/domain/admin/index.js.map +1 -1
- package/dist/domain/admin/wire.d.ts +1 -2
- package/dist/domain/admin/wire.d.ts.map +1 -1
- package/dist/domain/admin/wire.js.map +1 -1
- package/dist/domain/market/tokens.js +4 -6
- package/dist/domain/market/tokens.js.map +1 -1
- package/dist/domain/market/wire.d.ts +1 -3
- package/dist/domain/market/wire.d.ts.map +1 -1
- package/dist/domain/market/wire.js.map +1 -1
- package/dist/domain/order/client.d.ts +1 -115
- package/dist/domain/order/client.d.ts.map +1 -1
- package/dist/domain/order/client.js +12 -71
- package/dist/domain/order/client.js.map +1 -1
- package/dist/domain/order/index.d.ts +2 -9
- package/dist/domain/order/index.d.ts.map +1 -1
- package/dist/domain/order/index.js +2 -9
- package/dist/domain/order/index.js.map +1 -1
- package/dist/domain/order/wire.d.ts +80 -2
- package/dist/domain/order/wire.d.ts.map +1 -1
- package/dist/domain/order/wire.js +141 -0
- package/dist/domain/order/wire.js.map +1 -1
- package/dist/domain/orderbook/state.d.ts +21 -2
- package/dist/domain/orderbook/state.d.ts.map +1 -1
- package/dist/domain/orderbook/state.js +38 -4
- package/dist/domain/orderbook/state.js.map +1 -1
- package/dist/domain/orderbook/wire.d.ts +1 -0
- package/dist/domain/orderbook/wire.d.ts.map +1 -1
- package/dist/domain/orderbook/wire.js.map +1 -1
- package/dist/domain/trade/convert.d.ts.map +1 -1
- package/dist/domain/trade/convert.js +5 -1
- package/dist/domain/trade/convert.js.map +1 -1
- package/dist/domain/trade/index.d.ts +4 -0
- package/dist/domain/trade/index.d.ts.map +1 -1
- package/dist/domain/trade/index.js.map +1 -1
- package/dist/domain/trade/state.d.ts +7 -0
- package/dist/domain/trade/state.d.ts.map +1 -1
- package/dist/domain/trade/state.js +36 -1
- package/dist/domain/trade/state.js.map +1 -1
- package/dist/domain/trade/wire.d.ts +3 -0
- package/dist/domain/trade/wire.d.ts.map +1 -1
- package/dist/domain/trade/wire.js.map +1 -1
- package/dist/error.d.ts +5 -2
- package/dist/error.d.ts.map +1 -1
- package/dist/error.js +10 -1
- package/dist/error.js.map +1 -1
- package/dist/http/client.d.ts +9 -1
- package/dist/http/client.d.ts.map +1 -1
- package/dist/http/client.js +126 -31
- package/dist/http/client.js.map +1 -1
- package/dist/prelude.d.ts +2 -2
- package/dist/prelude.d.ts.map +1 -1
- package/dist/prelude.js +5 -2
- package/dist/prelude.js.map +1 -1
- package/dist/privy/client.d.ts +3 -3
- package/dist/privy/client.d.ts.map +1 -1
- package/dist/privy/client.js.map +1 -1
- package/dist/privy/index.d.ts +1 -6
- package/dist/privy/index.d.ts.map +1 -1
- package/dist/privy/index.js.map +1 -1
- package/dist/program/accounts.d.ts +2 -1
- package/dist/program/accounts.d.ts.map +1 -1
- package/dist/program/accounts.js +6 -2
- package/dist/program/accounts.js.map +1 -1
- package/dist/program/instructions.d.ts +1 -1
- package/dist/program/instructions.d.ts.map +1 -1
- package/dist/program/instructions.js +2 -1
- package/dist/program/instructions.js.map +1 -1
- package/dist/program/types.d.ts +2 -0
- package/dist/program/types.d.ts.map +1 -1
- package/dist/program/types.js.map +1 -1
- package/dist/shared/api_response.d.ts +32 -0
- package/dist/shared/api_response.d.ts.map +1 -0
- package/dist/shared/api_response.js +61 -0
- package/dist/shared/api_response.js.map +1 -0
- package/dist/shared/index.d.ts +2 -0
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +6 -1
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/rejection.d.ts +9 -0
- package/dist/shared/rejection.d.ts.map +1 -0
- package/dist/shared/rejection.js +48 -0
- package/dist/shared/rejection.js.map +1 -0
- package/dist/shared/types.d.ts +4 -2
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js +2 -0
- package/dist/shared/types.js.map +1 -1
- package/dist/ws/index.d.ts +1 -1
- package/dist/ws/index.d.ts.map +1 -1
- package/dist/ws/index.js +9 -1
- package/dist/ws/index.js.map +1 -1
- package/package.json +2 -1
|
@@ -5,15 +5,8 @@ export * from "./wire";
|
|
|
5
5
|
export * from "./state";
|
|
6
6
|
export { limitSnapshotToOrder, splitSnapshotOrders, triggerSnapshotToOrder, orderFromUpdate } from "./convert";
|
|
7
7
|
export declare enum OrderType {
|
|
8
|
-
Limit = "
|
|
9
|
-
|
|
10
|
-
Deposit = "Deposit",
|
|
11
|
-
Merge = "Merge",
|
|
12
|
-
Withdraw = "Withdraw",
|
|
13
|
-
StopMarket = "StopMarket",
|
|
14
|
-
StopLimit = "StopLimit",
|
|
15
|
-
TakeProfitMarket = "TakeProfitMarket",
|
|
16
|
-
TakeProfitLimit = "TakeProfitLimit"
|
|
8
|
+
Limit = "limit",
|
|
9
|
+
Trigger = "trigger"
|
|
17
10
|
}
|
|
18
11
|
export declare enum OrderStatus {
|
|
19
12
|
Open = "OPEN",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domain/order/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAE1G,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE/G,oBAAY,SAAS;IACnB,KAAK,UAAU;IACf,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domain/order/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAE1G,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE/G,oBAAY,SAAS;IACnB,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED,oBAAY,WAAW;IACrB,IAAI,SAAS;IACb,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,KAAK;IACpB,YAAY,EAAE,SAAS,CAAC;IACxB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,IAAI,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,SAAS,CAAC;IACxB,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,GAAG,SAAS,CAW/E"}
|
|
@@ -31,15 +31,8 @@ Object.defineProperty(exports, "triggerSnapshotToOrder", { enumerable: true, get
|
|
|
31
31
|
Object.defineProperty(exports, "orderFromUpdate", { enumerable: true, get: function () { return convert_1.orderFromUpdate; } });
|
|
32
32
|
var OrderType;
|
|
33
33
|
(function (OrderType) {
|
|
34
|
-
OrderType["Limit"] = "
|
|
35
|
-
OrderType["
|
|
36
|
-
OrderType["Deposit"] = "Deposit";
|
|
37
|
-
OrderType["Merge"] = "Merge";
|
|
38
|
-
OrderType["Withdraw"] = "Withdraw";
|
|
39
|
-
OrderType["StopMarket"] = "StopMarket";
|
|
40
|
-
OrderType["StopLimit"] = "StopLimit";
|
|
41
|
-
OrderType["TakeProfitMarket"] = "TakeProfitMarket";
|
|
42
|
-
OrderType["TakeProfitLimit"] = "TakeProfitLimit";
|
|
34
|
+
OrderType["Limit"] = "limit";
|
|
35
|
+
OrderType["Trigger"] = "trigger";
|
|
43
36
|
})(OrderType || (exports.OrderType = OrderType = {}));
|
|
44
37
|
var OrderStatus;
|
|
45
38
|
(function (OrderStatus) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/order/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/order/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AA8DA,wDAWC;AAzED,4DAAiC;AACjC,yCAA0G;AAE1G,2CAAyB;AACzB,yCAAuB;AACvB,0CAAwB;AACxB,qCAA+G;AAAtG,+GAAA,oBAAoB,OAAA;AAAE,8GAAA,mBAAmB,OAAA;AAAE,iHAAA,sBAAsB,OAAA;AAAE,0GAAA,eAAe,OAAA;AAE3F,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,4BAAe,CAAA;IACf,gCAAmB,CAAA;AACrB,CAAC,EAHW,SAAS,yBAAT,SAAS,QAGpB;AAED,IAAY,WAMX;AAND,WAAY,WAAW;IACrB,4BAAa,CAAA;IACb,oCAAqB,CAAA;IACrB,sCAAuB,CAAA;IACvB,gCAAiB,CAAA;IACjB,kCAAmB,CAAA;AACrB,CAAC,EANW,WAAW,2BAAX,WAAW,QAMtB;AAiCD;;;;;;;;;GASG;AACH,SAAgB,sBAAsB,CAAC,KAAmB;IACxD,MAAM,QAAQ,GAAG,IAAI,oBAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAI,oBAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAE/C,IAAI,KAAK,CAAC,IAAI,KAAK,aAAI,CAAC,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,OAAO,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,aAAI,CAAC,GAAG,IAAI,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,OAAO,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["import Decimal from \"decimal.js\";\nimport { Side, type OrderBookId, type PubkeyStr, type TimeInForce, type TriggerType } from \"../../shared\";\n\nexport * from \"./client\";\nexport * from \"./wire\";\nexport * from \"./state\";\nexport { limitSnapshotToOrder, splitSnapshotOrders, triggerSnapshotToOrder, orderFromUpdate } from \"./convert\";\n\nexport enum OrderType {\n Limit = \"limit\",\n Trigger = \"trigger\",\n}\n\nexport enum OrderStatus {\n Open = \"OPEN\",\n Matching = \"MATCHING\",\n Cancelled = \"CANCELLED\",\n Filled = \"FILLED\",\n Pending = \"PENDING\",\n}\n\nexport interface Order {\n marketPubkey: PubkeyStr;\n orderbookId: OrderBookId;\n txSignature?: string;\n baseMint: PubkeyStr;\n quoteMint: PubkeyStr;\n orderHash: string;\n side: Side;\n size: string;\n price: string;\n filledSize: string;\n remainingSize: string;\n createdAt: Date;\n status: OrderStatus;\n outcomeIndex: number;\n}\n\nexport interface TriggerOrder {\n triggerOrderId: string;\n orderHash: string;\n marketPubkey: PubkeyStr;\n orderbookId: OrderBookId;\n triggerPrice: string;\n triggerType: TriggerType;\n side: Side;\n amountIn: string;\n amountOut: string;\n timeInForce: TimeInForce;\n createdAt: Date;\n}\n\n/**\n * Derive the limit price from pre-scaled amounts.\n *\n * `amountIn` and `amountOut` are already human-readable decimals\n * (scaled by the snapshot/websocket layer), so no further decimal\n * conversion is needed.\n *\n * For Ask: maker gives base, receives quote -> price = quote / base\n * For Bid: maker gives quote, receives base -> price = quote / base\n */\nexport function triggerOrderLimitPrice(order: TriggerOrder): Decimal | undefined {\n const amountIn = new Decimal(order.amountIn);\n const amountOut = new Decimal(order.amountOut);\n\n if (order.side === Side.Ask && amountIn.greaterThan(0)) {\n return amountOut.div(amountIn);\n }\n if (order.side === Side.Bid && amountOut.greaterThan(0)) {\n return amountIn.div(amountOut);\n }\n return undefined;\n}\n"]}
|
|
@@ -4,7 +4,7 @@ import type { Notification } from "../notification";
|
|
|
4
4
|
import type { OrderStatus, TriggerOrder } from "./index";
|
|
5
5
|
export interface ConditionalBalance {
|
|
6
6
|
outcome_index: number;
|
|
7
|
-
|
|
7
|
+
mint: PubkeyStr;
|
|
8
8
|
idle: string;
|
|
9
9
|
on_book: string;
|
|
10
10
|
}
|
|
@@ -132,7 +132,7 @@ export type UserUpdate = ({
|
|
|
132
132
|
} & UserBalanceUpdate) | ({
|
|
133
133
|
event_type: "global_deposit_update";
|
|
134
134
|
} & GlobalDepositUpdate) | ({
|
|
135
|
-
event_type: "
|
|
135
|
+
event_type: "nonce";
|
|
136
136
|
} & NonceUpdate) | ({
|
|
137
137
|
event_type: "notification";
|
|
138
138
|
} & NotificationUpdate);
|
|
@@ -172,4 +172,82 @@ export interface UserOrderFillsResponse {
|
|
|
172
172
|
next_cursor?: string;
|
|
173
173
|
has_more: boolean;
|
|
174
174
|
}
|
|
175
|
+
type RawConditionalBalance = Omit<ConditionalBalance, "mint"> & {
|
|
176
|
+
mint?: string;
|
|
177
|
+
conditional_token?: string;
|
|
178
|
+
};
|
|
179
|
+
type RawUserOrderUpdateBalance = {
|
|
180
|
+
outcomes: RawConditionalBalance[];
|
|
181
|
+
};
|
|
182
|
+
type RawWsOrder = Omit<WsOrder, "balance"> & {
|
|
183
|
+
balance?: RawUserOrderUpdateBalance;
|
|
184
|
+
};
|
|
185
|
+
type RawOrderUpdate = Omit<OrderUpdate, "order"> & {
|
|
186
|
+
order: RawWsOrder;
|
|
187
|
+
};
|
|
188
|
+
type RawUserSnapshotOrderCommon = Omit<UserSnapshotOrderCommon, "amount_in" | "amount_out"> & {
|
|
189
|
+
amount_in?: string;
|
|
190
|
+
amount_out?: string;
|
|
191
|
+
maker_amount?: string;
|
|
192
|
+
taker_amount?: string;
|
|
193
|
+
};
|
|
194
|
+
type RawUserSnapshotOrder = ({
|
|
195
|
+
order_type: "limit";
|
|
196
|
+
tx_signature?: string;
|
|
197
|
+
} & RawUserSnapshotOrderCommon) | ({
|
|
198
|
+
order_type: "trigger";
|
|
199
|
+
trigger_order_id: string;
|
|
200
|
+
trigger_price: string;
|
|
201
|
+
trigger_type: TriggerType;
|
|
202
|
+
time_in_force?: TimeInForce;
|
|
203
|
+
} & RawUserSnapshotOrderCommon);
|
|
204
|
+
type RawUserSnapshotBalance = Omit<UserSnapshotBalance, "outcomes"> & {
|
|
205
|
+
outcomes: RawConditionalBalance[];
|
|
206
|
+
};
|
|
207
|
+
type RawUserSnapshot = Omit<UserSnapshot, "orders" | "balances"> & {
|
|
208
|
+
orders: RawUserSnapshotOrder[];
|
|
209
|
+
balances: Record<string, RawUserSnapshotBalance>;
|
|
210
|
+
};
|
|
211
|
+
type RawUserBalanceUpdate = Omit<UserBalanceUpdate, "balance"> & {
|
|
212
|
+
balance: RawUserOrderUpdateBalance;
|
|
213
|
+
};
|
|
214
|
+
type RawUserUpdate = ({
|
|
215
|
+
event_type: "snapshot";
|
|
216
|
+
} & RawUserSnapshot) | ({
|
|
217
|
+
event_type: "order";
|
|
218
|
+
} & ({
|
|
219
|
+
order_type: "limit";
|
|
220
|
+
} & RawOrderUpdate)) | ({
|
|
221
|
+
event_type: "order";
|
|
222
|
+
} & ({
|
|
223
|
+
order_type: "trigger";
|
|
224
|
+
} & TriggerOrderUpdate)) | ({
|
|
225
|
+
event_type: "balance_update";
|
|
226
|
+
} & RawUserBalanceUpdate) | ({
|
|
227
|
+
event_type: "global_deposit_update";
|
|
228
|
+
} & GlobalDepositUpdate) | ({
|
|
229
|
+
event_type: "nonce" | "nonce_update";
|
|
230
|
+
} & NonceUpdate) | ({
|
|
231
|
+
event_type: "notification";
|
|
232
|
+
} & NotificationUpdate);
|
|
233
|
+
type RawUserOrdersPayload = {
|
|
234
|
+
user_pubkey: PubkeyStr;
|
|
235
|
+
orders?: RawUserSnapshotOrder[];
|
|
236
|
+
balances?: RawUserSnapshotBalance[];
|
|
237
|
+
next_cursor?: string | null;
|
|
238
|
+
has_more?: boolean;
|
|
239
|
+
};
|
|
240
|
+
export declare function normalizeConditionalBalance(balance: RawConditionalBalance): ConditionalBalance;
|
|
241
|
+
export declare function normalizeOrderUpdate(update: RawOrderUpdate): OrderUpdate;
|
|
242
|
+
export declare function normalizeUserSnapshotOrder(order: RawUserSnapshotOrder): UserSnapshotOrder;
|
|
243
|
+
export declare function normalizeUserSnapshotBalance(balance: RawUserSnapshotBalance): UserSnapshotBalance;
|
|
244
|
+
export declare function normalizeUserOrdersPayload(response: RawUserOrdersPayload): {
|
|
245
|
+
user_pubkey: PubkeyStr;
|
|
246
|
+
orders: UserSnapshotOrder[];
|
|
247
|
+
balances: UserSnapshotBalance[];
|
|
248
|
+
next_cursor?: string;
|
|
249
|
+
has_more: boolean;
|
|
250
|
+
};
|
|
251
|
+
export declare function normalizeUserUpdate(raw: RawUserUpdate): UserUpdate;
|
|
252
|
+
export {};
|
|
175
253
|
//# sourceMappingURL=wire.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../../src/domain/order/wire.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../../src/domain/order/wire.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.triggerUpdateToTriggerOrder = triggerUpdateToTriggerOrder;
|
|
4
|
+
exports.normalizeConditionalBalance = normalizeConditionalBalance;
|
|
5
|
+
exports.normalizeOrderUpdate = normalizeOrderUpdate;
|
|
6
|
+
exports.normalizeUserSnapshotOrder = normalizeUserSnapshotOrder;
|
|
7
|
+
exports.normalizeUserSnapshotBalance = normalizeUserSnapshotBalance;
|
|
8
|
+
exports.normalizeUserOrdersPayload = normalizeUserOrdersPayload;
|
|
9
|
+
exports.normalizeUserUpdate = normalizeUserUpdate;
|
|
4
10
|
const shared_1 = require("../../shared");
|
|
5
11
|
function triggerUpdateToTriggerOrder(update) {
|
|
6
12
|
const triggerType = update.trigger_above ? shared_1.TriggerType.TakeProfit : shared_1.TriggerType.StopLoss;
|
|
@@ -18,4 +24,139 @@ function triggerUpdateToTriggerOrder(update) {
|
|
|
18
24
|
createdAt: new Date(update.timestamp),
|
|
19
25
|
};
|
|
20
26
|
}
|
|
27
|
+
function normalizeConditionalBalance(balance) {
|
|
28
|
+
const mint = balance.mint ?? balance.conditional_token;
|
|
29
|
+
if (!mint) {
|
|
30
|
+
throw new Error("Invalid conditional balance: missing mint");
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
outcome_index: balance.outcome_index,
|
|
34
|
+
mint: (0, shared_1.asPubkeyStr)(mint),
|
|
35
|
+
idle: balance.idle,
|
|
36
|
+
on_book: balance.on_book,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function normalizeUserOrderUpdateBalance(balance) {
|
|
40
|
+
return {
|
|
41
|
+
outcomes: balance.outcomes.map(normalizeConditionalBalance),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function normalizeWsOrder(order) {
|
|
45
|
+
return {
|
|
46
|
+
...order,
|
|
47
|
+
balance: order.balance
|
|
48
|
+
? normalizeUserOrderUpdateBalance(order.balance)
|
|
49
|
+
: undefined,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function normalizeOrderUpdate(update) {
|
|
53
|
+
return {
|
|
54
|
+
...update,
|
|
55
|
+
order: normalizeWsOrder(update.order),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function normalizeUserSnapshotOrderCommon(order) {
|
|
59
|
+
const amountIn = order.amount_in ?? order.maker_amount;
|
|
60
|
+
const amountOut = order.amount_out ?? order.taker_amount;
|
|
61
|
+
if (amountIn === undefined) {
|
|
62
|
+
throw new Error("Invalid user snapshot order: missing amount_in/maker_amount");
|
|
63
|
+
}
|
|
64
|
+
if (amountOut === undefined) {
|
|
65
|
+
throw new Error("Invalid user snapshot order: missing amount_out/taker_amount");
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
...order,
|
|
69
|
+
amount_in: amountIn,
|
|
70
|
+
amount_out: amountOut,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function normalizeUserSnapshotOrder(order) {
|
|
74
|
+
const common = normalizeUserSnapshotOrderCommon(order);
|
|
75
|
+
if (order.order_type === "limit") {
|
|
76
|
+
return {
|
|
77
|
+
...common,
|
|
78
|
+
order_type: "limit",
|
|
79
|
+
tx_signature: order.tx_signature,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
if (order.order_type === "trigger") {
|
|
83
|
+
return {
|
|
84
|
+
...common,
|
|
85
|
+
order_type: "trigger",
|
|
86
|
+
trigger_order_id: order.trigger_order_id,
|
|
87
|
+
trigger_price: order.trigger_price,
|
|
88
|
+
trigger_type: order.trigger_type,
|
|
89
|
+
time_in_force: order.time_in_force,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
const rawOrderType = order.order_type;
|
|
93
|
+
throw new Error(`Invalid user snapshot order: unsupported order_type "${rawOrderType}"`);
|
|
94
|
+
}
|
|
95
|
+
function normalizeUserSnapshotBalance(balance) {
|
|
96
|
+
return {
|
|
97
|
+
...balance,
|
|
98
|
+
outcomes: balance.outcomes.map(normalizeConditionalBalance),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
function normalizeUserSnapshotBalancesRecord(balances) {
|
|
102
|
+
return Object.fromEntries(Object.entries(balances).map(([orderbookId, balance]) => [
|
|
103
|
+
orderbookId,
|
|
104
|
+
normalizeUserSnapshotBalance(balance),
|
|
105
|
+
]));
|
|
106
|
+
}
|
|
107
|
+
function normalizeUserOrdersPayload(response) {
|
|
108
|
+
return {
|
|
109
|
+
user_pubkey: response.user_pubkey,
|
|
110
|
+
orders: (response.orders ?? []).map(normalizeUserSnapshotOrder),
|
|
111
|
+
balances: (response.balances ?? []).map(normalizeUserSnapshotBalance),
|
|
112
|
+
next_cursor: response.next_cursor ?? undefined,
|
|
113
|
+
has_more: response.has_more ?? false,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
function normalizeUserUpdate(raw) {
|
|
117
|
+
switch (raw.event_type) {
|
|
118
|
+
case "snapshot":
|
|
119
|
+
return {
|
|
120
|
+
...raw,
|
|
121
|
+
event_type: "snapshot",
|
|
122
|
+
orders: raw.orders.map(normalizeUserSnapshotOrder),
|
|
123
|
+
balances: normalizeUserSnapshotBalancesRecord(raw.balances),
|
|
124
|
+
global_deposits: raw.global_deposits ?? [],
|
|
125
|
+
notifications: raw.notifications ?? [],
|
|
126
|
+
nonce: raw.nonce ?? 0,
|
|
127
|
+
};
|
|
128
|
+
case "order":
|
|
129
|
+
if (raw.order_type === "limit") {
|
|
130
|
+
return {
|
|
131
|
+
...normalizeOrderUpdate(raw),
|
|
132
|
+
event_type: "order",
|
|
133
|
+
order_type: "limit",
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
if (raw.order_type === "trigger") {
|
|
137
|
+
return {
|
|
138
|
+
...raw,
|
|
139
|
+
event_type: "order",
|
|
140
|
+
order_type: "trigger",
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
throw new Error(`Invalid user order event: unsupported order_type "${raw.order_type}"`);
|
|
144
|
+
case "balance_update":
|
|
145
|
+
return {
|
|
146
|
+
...raw,
|
|
147
|
+
event_type: "balance_update",
|
|
148
|
+
balance: normalizeUserOrderUpdateBalance(raw.balance),
|
|
149
|
+
};
|
|
150
|
+
case "global_deposit_update":
|
|
151
|
+
return raw;
|
|
152
|
+
case "nonce":
|
|
153
|
+
case "nonce_update":
|
|
154
|
+
return {
|
|
155
|
+
...raw,
|
|
156
|
+
event_type: "nonce",
|
|
157
|
+
};
|
|
158
|
+
case "notification":
|
|
159
|
+
return raw;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
21
162
|
//# sourceMappingURL=wire.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wire.js","sourceRoot":"","sources":["../../../src/domain/order/wire.ts"],"names":[],"mappings":";;AAgIA,kEAeC;AA/ID,yCAAwD;AAgIxD,SAAgB,2BAA2B,CAAC,MAA0B;IACpE,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,oBAAW,CAAC,UAAU,CAAC,CAAC,CAAC,oBAAW,CAAC,QAAQ,CAAC;IACzF,OAAO;QACL,cAAc,EAAE,MAAM,CAAC,gBAAgB;QACvC,SAAS,EAAE,MAAM,CAAC,UAAU;QAC5B,YAAY,EAAE,MAAM,CAAC,aAAa;QAClC,WAAW,EAAE,MAAM,CAAC,YAAY;QAChC,YAAY,EAAE,MAAM,CAAC,aAAa;QAClC,WAAW;QACX,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,QAAQ,EAAE,MAAM,CAAC,YAAY,IAAI,GAAG;QACpC,SAAS,EAAE,MAAM,CAAC,YAAY,IAAI,GAAG;QACrC,WAAW,EAAE,MAAM,CAAC,GAAG,IAAI,oBAAW,CAAC,GAAG;QAC1C,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;KACtC,CAAC;AACJ,CAAC","sourcesContent":["import { 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 UserSnapshotBalance {\n market_pubkey: PubkeyStr;\n orderbook_id: OrderBookId;\n outcomes: ConditionalBalance[];\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 balances: Record<string, UserSnapshotBalance>;\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 orderbook_id: OrderBookId;\n balance: { outcomes: ConditionalBalance[] };\n timestamp: string;\n}\n\nexport type UserUpdate =\n | ({ event_type: \"snapshot\" } & UserSnapshot)\n | ({ event_type: \"order\" } & OrderEvent)\n | ({ event_type: \"balance_update\" } & UserBalanceUpdate)\n | ({ event_type: \"global_deposit_update\" } & GlobalDepositUpdate)\n | ({ event_type: \"nonce_update\" } & 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"]}
|
|
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 mint: PubkeyStr;\n idle: string;\n on_book: string;\n}\n\nexport interface UserSnapshotBalance {\n market_pubkey: PubkeyStr;\n orderbook_id: OrderBookId;\n outcomes: ConditionalBalance[];\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 balances: Record<string, UserSnapshotBalance>;\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 orderbook_id: OrderBookId;\n balance: { outcomes: ConditionalBalance[] };\n timestamp: string;\n}\n\nexport type UserUpdate =\n | ({ event_type: \"snapshot\" } & UserSnapshot)\n | ({ event_type: \"order\" } & OrderEvent)\n | ({ event_type: \"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, \"mint\"> & {\n mint?: string;\n conditional_token?: string;\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 RawUserSnapshotBalance = Omit<UserSnapshotBalance, \"outcomes\"> & {\n outcomes: RawConditionalBalance[];\n};\n\ntype RawUserSnapshot = Omit<UserSnapshot, \"orders\" | \"balances\"> & {\n orders: RawUserSnapshotOrder[];\n balances: Record<string, RawUserSnapshotBalance>;\n};\n\ntype RawUserBalanceUpdate = Omit<UserBalanceUpdate, \"balance\"> & {\n balance: RawUserOrderUpdateBalance;\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: \"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 balances?: RawUserSnapshotBalance[];\n next_cursor?: string | null;\n has_more?: boolean;\n};\n\nexport function normalizeConditionalBalance(balance: RawConditionalBalance): ConditionalBalance {\n const mint = balance.mint ?? balance.conditional_token;\n if (!mint) {\n throw new Error(\"Invalid conditional balance: missing mint\");\n }\n\n return {\n outcome_index: balance.outcome_index,\n mint: asPubkeyStr(mint),\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\nexport function normalizeUserSnapshotBalance(\n balance: RawUserSnapshotBalance\n): UserSnapshotBalance {\n return {\n ...balance,\n outcomes: balance.outcomes.map(normalizeConditionalBalance),\n };\n}\n\nfunction normalizeUserSnapshotBalancesRecord(\n balances: Record<string, RawUserSnapshotBalance>\n): Record<string, UserSnapshotBalance> {\n return Object.fromEntries(\n Object.entries(balances).map(([orderbookId, balance]) => [\n orderbookId,\n normalizeUserSnapshotBalance(balance),\n ])\n );\n}\n\nexport function normalizeUserOrdersPayload(\n response: RawUserOrdersPayload\n): {\n user_pubkey: PubkeyStr;\n orders: UserSnapshotOrder[];\n balances: UserSnapshotBalance[];\n next_cursor?: string;\n has_more: boolean;\n} {\n return {\n user_pubkey: response.user_pubkey,\n orders: (response.orders ?? []).map(normalizeUserSnapshotOrder),\n balances: (response.balances ?? []).map(normalizeUserSnapshotBalance),\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 balances: normalizeUserSnapshotBalancesRecord(raw.balances),\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 \"balance_update\":\n return {\n ...raw,\n event_type: \"balance_update\",\n balance: normalizeUserOrderUpdateBalance(raw.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 }\n}\n"]}
|
|
@@ -1,14 +1,33 @@
|
|
|
1
1
|
import type { OrderBookId } from "../../shared";
|
|
2
2
|
import type { OrderBook } from "./wire";
|
|
3
|
-
export
|
|
3
|
+
export type OrderbookApplyResult = {
|
|
4
|
+
kind: "applied";
|
|
5
|
+
} | {
|
|
6
|
+
kind: "stale";
|
|
7
|
+
} | {
|
|
8
|
+
kind: "gap_detected";
|
|
9
|
+
expected: number;
|
|
10
|
+
got: number;
|
|
11
|
+
};
|
|
12
|
+
export declare class OrderbookState {
|
|
4
13
|
readonly orderbookId: OrderBookId;
|
|
5
14
|
seq: number;
|
|
6
15
|
private readonly bidsMap;
|
|
7
16
|
private readonly asksMap;
|
|
8
17
|
private cachedBestBid;
|
|
9
18
|
private cachedBestAsk;
|
|
19
|
+
private hasSnapshot;
|
|
10
20
|
constructor(orderbookId: OrderBookId);
|
|
11
|
-
|
|
21
|
+
/**
|
|
22
|
+
* Apply a WS orderbook message (snapshot replaces, delta merges).
|
|
23
|
+
*
|
|
24
|
+
* Snapshots are always applied. Deltas with a `seq` at or below the
|
|
25
|
+
* current value are silently dropped to prevent stale updates. Deltas
|
|
26
|
+
* that skip one or more expected sequence values are rejected so callers
|
|
27
|
+
* can refresh from a fresh snapshot instead of mutating a corrupted book.
|
|
28
|
+
* Server resync messages leave the book unchanged and return `stale`.
|
|
29
|
+
*/
|
|
30
|
+
apply(book: OrderBook): OrderbookApplyResult;
|
|
12
31
|
bids(): ReadonlyMap<string, string>;
|
|
13
32
|
asks(): ReadonlyMap<string, string>;
|
|
14
33
|
bestBid(): string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/domain/orderbook/state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,qBAAa,
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/domain/orderbook/state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5D,qBAAa,cAAc;IACzB,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,WAAW,CAAU;gBAEjB,WAAW,EAAE,WAAW;IAUpC;;;;;;;;OAQG;IACH,KAAK,CAAC,IAAI,EAAE,SAAS,GAAG,oBAAoB;IAuD5C,IAAI,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;IAInC,IAAI,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;IAInC,OAAO,IAAI,MAAM,GAAG,SAAS;IAe7B,OAAO,IAAI,MAAM,GAAG,SAAS;IAc7B,QAAQ,IAAI,MAAM,GAAG,SAAS;IAU9B,MAAM,IAAI,MAAM,GAAG,SAAS;IAU5B,OAAO,IAAI,OAAO;IAIlB,KAAK,IAAI,IAAI;CAQd"}
|
|
@@ -3,15 +3,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.OrderbookState = void 0;
|
|
7
7
|
const decimal_js_1 = __importDefault(require("decimal.js"));
|
|
8
|
-
class
|
|
8
|
+
class OrderbookState {
|
|
9
9
|
orderbookId;
|
|
10
10
|
seq;
|
|
11
11
|
bidsMap;
|
|
12
12
|
asksMap;
|
|
13
13
|
cachedBestBid;
|
|
14
14
|
cachedBestAsk;
|
|
15
|
+
hasSnapshot;
|
|
15
16
|
constructor(orderbookId) {
|
|
16
17
|
this.orderbookId = orderbookId;
|
|
17
18
|
this.seq = 0;
|
|
@@ -19,13 +20,44 @@ class OrderbookSnapshot {
|
|
|
19
20
|
this.asksMap = new Map();
|
|
20
21
|
this.cachedBestBid = null;
|
|
21
22
|
this.cachedBestAsk = null;
|
|
23
|
+
this.hasSnapshot = false;
|
|
22
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Apply a WS orderbook message (snapshot replaces, delta merges).
|
|
27
|
+
*
|
|
28
|
+
* Snapshots are always applied. Deltas with a `seq` at or below the
|
|
29
|
+
* current value are silently dropped to prevent stale updates. Deltas
|
|
30
|
+
* that skip one or more expected sequence values are rejected so callers
|
|
31
|
+
* can refresh from a fresh snapshot instead of mutating a corrupted book.
|
|
32
|
+
* Server resync messages leave the book unchanged and return `stale`.
|
|
33
|
+
*/
|
|
23
34
|
apply(book) {
|
|
35
|
+
if (book.resync) {
|
|
36
|
+
return { kind: "stale" };
|
|
37
|
+
}
|
|
38
|
+
const seq = book.seq ?? 0;
|
|
24
39
|
if (book.is_snapshot) {
|
|
25
40
|
this.bidsMap.clear();
|
|
26
41
|
this.asksMap.clear();
|
|
42
|
+
this.hasSnapshot = true;
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
// The backend sends snapshots with seq=0 and starts delta seq at 1.
|
|
46
|
+
// A delta with seq=0 means it has no valid sequence, so drop it.
|
|
47
|
+
if (seq <= 0) {
|
|
48
|
+
return { kind: "stale" };
|
|
49
|
+
}
|
|
50
|
+
if (!this.hasSnapshot) {
|
|
51
|
+
return { kind: "gap_detected", expected: 0, got: seq };
|
|
52
|
+
}
|
|
53
|
+
if (seq <= this.seq) {
|
|
54
|
+
return { kind: "stale" };
|
|
55
|
+
}
|
|
56
|
+
if (seq !== this.seq + 1) {
|
|
57
|
+
return { kind: "gap_detected", expected: this.seq + 1, got: seq };
|
|
58
|
+
}
|
|
27
59
|
}
|
|
28
|
-
this.seq =
|
|
60
|
+
this.seq = seq;
|
|
29
61
|
for (const level of book.bids) {
|
|
30
62
|
if (new decimal_js_1.default(level.size).isZero()) {
|
|
31
63
|
this.bidsMap.delete(level.price);
|
|
@@ -44,6 +76,7 @@ class OrderbookSnapshot {
|
|
|
44
76
|
}
|
|
45
77
|
this.cachedBestBid = null;
|
|
46
78
|
this.cachedBestAsk = null;
|
|
79
|
+
return { kind: "applied" };
|
|
47
80
|
}
|
|
48
81
|
bids() {
|
|
49
82
|
return this.bidsMap;
|
|
@@ -103,7 +136,8 @@ class OrderbookSnapshot {
|
|
|
103
136
|
this.seq = 0;
|
|
104
137
|
this.cachedBestBid = null;
|
|
105
138
|
this.cachedBestAsk = null;
|
|
139
|
+
this.hasSnapshot = false;
|
|
106
140
|
}
|
|
107
141
|
}
|
|
108
|
-
exports.
|
|
142
|
+
exports.OrderbookState = OrderbookState;
|
|
109
143
|
//# sourceMappingURL=state.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/domain/orderbook/state.ts"],"names":[],"mappings":";;;;;;AAAA,4DAAiC;
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/domain/orderbook/state.ts"],"names":[],"mappings":"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","sourcesContent":["import Decimal from \"decimal.js\";\nimport type { OrderBookId } from \"../../shared\";\nimport type { OrderBook } from \"./wire\";\n\nexport type OrderbookApplyResult =\n | { kind: \"applied\" }\n | { kind: \"stale\" }\n | { kind: \"gap_detected\"; expected: number; got: number };\n\nexport class OrderbookState {\n readonly orderbookId: OrderBookId;\n seq: number;\n private readonly bidsMap: Map<string, string>;\n private readonly asksMap: Map<string, string>;\n private cachedBestBid: string | undefined | null;\n private cachedBestAsk: string | undefined | null;\n private hasSnapshot: boolean;\n\n constructor(orderbookId: OrderBookId) {\n this.orderbookId = orderbookId;\n this.seq = 0;\n this.bidsMap = new Map();\n this.asksMap = new Map();\n this.cachedBestBid = null;\n this.cachedBestAsk = null;\n this.hasSnapshot = false;\n }\n\n /**\n * Apply a WS orderbook message (snapshot replaces, delta merges).\n *\n * Snapshots are always applied. Deltas with a `seq` at or below the\n * current value are silently dropped to prevent stale updates. Deltas\n * that skip one or more expected sequence values are rejected so callers\n * can refresh from a fresh snapshot instead of mutating a corrupted book.\n * Server resync messages leave the book unchanged and return `stale`.\n */\n apply(book: OrderBook): OrderbookApplyResult {\n if (book.resync) {\n return { kind: \"stale\" };\n }\n\n const seq = book.seq ?? 0;\n\n if (book.is_snapshot) {\n this.bidsMap.clear();\n this.asksMap.clear();\n this.hasSnapshot = true;\n } else {\n // The backend sends snapshots with seq=0 and starts delta seq at 1.\n // A delta with seq=0 means it has no valid sequence, so drop it.\n if (seq <= 0) {\n return { kind: \"stale\" };\n }\n\n if (!this.hasSnapshot) {\n return { kind: \"gap_detected\", expected: 0, got: seq };\n }\n\n if (seq <= this.seq) {\n return { kind: \"stale\" };\n }\n\n if (seq !== this.seq + 1) {\n return { kind: \"gap_detected\", expected: this.seq + 1, got: seq };\n }\n }\n\n this.seq = seq;\n\n for (const level of book.bids) {\n if (new Decimal(level.size).isZero()) {\n this.bidsMap.delete(level.price);\n } else {\n this.bidsMap.set(level.price, level.size);\n }\n }\n\n for (const level of book.asks) {\n if (new Decimal(level.size).isZero()) {\n this.asksMap.delete(level.price);\n } else {\n this.asksMap.set(level.price, level.size);\n }\n }\n\n this.cachedBestBid = null;\n this.cachedBestAsk = null;\n\n return { kind: \"applied\" };\n }\n\n bids(): ReadonlyMap<string, string> {\n return this.bidsMap;\n }\n\n asks(): ReadonlyMap<string, string> {\n return this.asksMap;\n }\n\n bestBid(): string | undefined {\n if (this.cachedBestBid !== null) {\n return this.cachedBestBid;\n }\n if (this.bidsMap.size === 0) {\n this.cachedBestBid = undefined;\n return undefined;\n }\n const result = Array.from(this.bidsMap.keys())\n .sort((a, b) => new Decimal(a).cmp(new Decimal(b)))\n .at(-1);\n this.cachedBestBid = result;\n return result;\n }\n\n bestAsk(): string | undefined {\n if (this.cachedBestAsk !== null) {\n return this.cachedBestAsk;\n }\n if (this.asksMap.size === 0) {\n this.cachedBestAsk = undefined;\n return undefined;\n }\n const result = Array.from(this.asksMap.keys())\n .sort((a, b) => new Decimal(a).cmp(new Decimal(b)))[0];\n this.cachedBestAsk = result;\n return result;\n }\n\n midPrice(): string | undefined {\n const bid = this.bestBid();\n const ask = this.bestAsk();\n if (!bid || !ask) {\n return undefined;\n }\n\n return new Decimal(bid).plus(ask).div(2).toString();\n }\n\n spread(): string | undefined {\n const bid = this.bestBid();\n const ask = this.bestAsk();\n if (!bid || !ask) {\n return undefined;\n }\n\n return new Decimal(ask).minus(bid).toString();\n }\n\n isEmpty(): boolean {\n return this.bidsMap.size === 0 && this.asksMap.size === 0;\n }\n\n clear(): void {\n this.bidsMap.clear();\n this.asksMap.clear();\n this.seq = 0;\n this.cachedBestBid = null;\n this.cachedBestAsk = null;\n this.hasSnapshot = false;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../../src/domain/orderbook/wire.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,WAAW,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,IAAI,EAAE,aAAa,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,WAAW,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,IAAI,EAAE,WAAW,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
|
1
|
+
{"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../../src/domain/orderbook/wire.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,WAAW,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,IAAI,EAAE,aAAa,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,WAAW,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,IAAI,EAAE,WAAW,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wire.js","sourceRoot":"","sources":["../../../src/domain/orderbook/wire.ts"],"names":[],"mappings":"","sourcesContent":["import type { OrderBookId, Side } from \"../../shared\";\n\nexport interface OrderbookResponse {\n id: number;\n market_pubkey: string;\n orderbook_id: string;\n base_token: string;\n quote_token: string;\n outcome_index?: number;\n tick_size: number;\n total_bids: number;\n total_asks: number;\n last_trade_price?: string;\n last_trade_time?: string;\n active: boolean;\n created_at: string;\n updated_at: string;\n}\n\nexport interface OrderbooksResponse {\n orderbooks: OrderbookResponse[];\n total: number;\n}\n\nexport interface RestBookLevel {\n price: string;\n size: string;\n orders?: number;\n}\n\nexport interface OrderbookDepthResponse {\n orderbook_id: OrderBookId;\n market_pubkey?: string;\n best_bid?: string;\n best_ask?: string;\n spread?: string;\n tick_size?: string;\n bids: RestBookLevel[];\n asks: RestBookLevel[];\n}\n\nexport interface DecimalsResponse {\n orderbook_id: string;\n base_decimals: number;\n quote_decimals: number;\n price_decimals: number;\n}\n\nexport interface WsBookLevel {\n side: Side;\n price: string;\n size: string;\n}\n\nexport interface OrderBook {\n orderbook_id: OrderBookId;\n is_snapshot?: boolean;\n seq?: number;\n timestamp?: string;\n bids: WsBookLevel[];\n asks: WsBookLevel[];\n}\n\nexport interface WsTickerData {\n orderbook_id: OrderBookId;\n best_bid?: string;\n best_ask?: string;\n mid?: string;\n timestamp?: string;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"wire.js","sourceRoot":"","sources":["../../../src/domain/orderbook/wire.ts"],"names":[],"mappings":"","sourcesContent":["import type { OrderBookId, Side } from \"../../shared\";\n\nexport interface OrderbookResponse {\n id: number;\n market_pubkey: string;\n orderbook_id: string;\n base_token: string;\n quote_token: string;\n outcome_index?: number;\n tick_size: number;\n total_bids: number;\n total_asks: number;\n last_trade_price?: string;\n last_trade_time?: string;\n active: boolean;\n created_at: string;\n updated_at: string;\n}\n\nexport interface OrderbooksResponse {\n orderbooks: OrderbookResponse[];\n total: number;\n}\n\nexport interface RestBookLevel {\n price: string;\n size: string;\n orders?: number;\n}\n\nexport interface OrderbookDepthResponse {\n orderbook_id: OrderBookId;\n market_pubkey?: string;\n best_bid?: string;\n best_ask?: string;\n spread?: string;\n tick_size?: string;\n bids: RestBookLevel[];\n asks: RestBookLevel[];\n}\n\nexport interface DecimalsResponse {\n orderbook_id: string;\n base_decimals: number;\n quote_decimals: number;\n price_decimals: number;\n}\n\nexport interface WsBookLevel {\n side: Side;\n price: string;\n size: string;\n}\n\nexport interface OrderBook {\n orderbook_id: OrderBookId;\n is_snapshot?: boolean;\n seq?: number;\n resync?: boolean;\n timestamp?: string;\n bids: WsBookLevel[];\n asks: WsBookLevel[];\n}\n\nexport interface WsTickerData {\n orderbook_id: OrderBookId;\n best_bid?: string;\n best_ask?: string;\n mid?: string;\n timestamp?: string;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../../src/domain/trade/convert.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAErD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../../src/domain/trade/convert.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAErD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,KAAK,CAW9D;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,GAAG,KAAK,CAWlD"}
|
|
@@ -5,21 +5,25 @@ exports.tradeFromWs = tradeFromWs;
|
|
|
5
5
|
function tradeFromResponse(source) {
|
|
6
6
|
return {
|
|
7
7
|
orderbookId: source.orderbook_id,
|
|
8
|
-
tradeId:
|
|
8
|
+
tradeId: source.trade_id,
|
|
9
|
+
cursorId: source.id,
|
|
9
10
|
timestamp: new Date(source.executed_at),
|
|
10
11
|
price: source.price,
|
|
11
12
|
size: source.size,
|
|
12
13
|
side: source.side,
|
|
14
|
+
sequence: 0,
|
|
13
15
|
};
|
|
14
16
|
}
|
|
15
17
|
function tradeFromWs(source) {
|
|
16
18
|
return {
|
|
17
19
|
orderbookId: source.orderbook_id,
|
|
18
20
|
tradeId: source.trade_id,
|
|
21
|
+
cursorId: undefined,
|
|
19
22
|
timestamp: new Date(source.timestamp),
|
|
20
23
|
price: source.price,
|
|
21
24
|
size: source.size,
|
|
22
25
|
side: source.side,
|
|
26
|
+
sequence: source.sequence,
|
|
23
27
|
};
|
|
24
28
|
}
|
|
25
29
|
//# sourceMappingURL=convert.js.map
|