@deeptick/client 0.1.1 → 0.2.0

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.
@@ -1,179 +0,0 @@
1
- /**
2
- * DeepTick TypeScript Client — Real-time Streaming
3
- *
4
- * Connects to the DeepTick WebSocket endpoint and delivers live market data.
5
- * Works in both Node.js (via `ws` package) and browser environments.
6
- *
7
- * Install:
8
- * npm install @deeptick/client # includes streaming
9
- * # Node.js also needs: npm install ws
10
- *
11
- * Usage:
12
- * import { DeepTickStream } from '@deeptick/client';
13
- *
14
- * const stream = new DeepTickStream('wss://deeptick.lacertalabs.xyz/v1/stream');
15
- *
16
- * stream.onTrade((exchange, symbol, trade) => {
17
- * console.log(`[${exchange}] ${symbol}: ${trade.price} x ${trade.amount}`);
18
- * });
19
- *
20
- * stream.onBookTicker((exchange, symbol, ticker) => {
21
- * console.log(`[${exchange}] ${symbol}: ${ticker.bid_price}/${ticker.ask_price}`);
22
- * });
23
- *
24
- * await stream.connect();
25
- * await stream.subscribe(['hyperliquid.trades.BTC', '*.book_ticker.*']);
26
- */
27
- /** Wire protocol frame from server */
28
- export interface StreamFrame {
29
- type: 'data' | 'heartbeat' | 'welcome' | 'subscribed' | 'unsubscribed' | 'pong' | 'error';
30
- topic?: string;
31
- data?: Record<string, any>;
32
- ts?: number;
33
- connection_id?: string;
34
- channels?: string[];
35
- message?: string;
36
- client_ts?: number;
37
- }
38
- /** Trade data from stream */
39
- export interface StreamTrade {
40
- exchange: string;
41
- symbol: string;
42
- timestamp: number;
43
- local_timestamp: number;
44
- trade_id: string;
45
- price: number;
46
- amount: number;
47
- side: 'buy' | 'sell';
48
- data_type: 'trades';
49
- }
50
- /** Native top-of-book ticker data from stream */
51
- export interface StreamBookTicker {
52
- exchange: string;
53
- symbol: string;
54
- timestamp: number;
55
- local_timestamp: number;
56
- bid_price: number;
57
- bid_amount: number;
58
- ask_price: number;
59
- ask_amount: number;
60
- data_type: 'book_ticker';
61
- }
62
- /** Book delta data from stream */
63
- export interface StreamBookDelta {
64
- exchange: string;
65
- symbol: string;
66
- timestamp: number;
67
- local_timestamp: number;
68
- is_snapshot: boolean;
69
- bids_packed: string;
70
- asks_packed: string;
71
- data_type: 'book_l2_delta';
72
- }
73
- /** Derivative ticker data from stream */
74
- export interface StreamDerivativeTicker {
75
- exchange: string;
76
- symbol: string;
77
- timestamp: number;
78
- local_timestamp: number;
79
- funding_timestamp: number | null;
80
- funding_rate: number | null;
81
- predicted_funding_rate: number | null;
82
- open_interest: number | null;
83
- last_price: number | null;
84
- mark_price: number | null;
85
- index_price: number | null;
86
- data_type: 'derivative_ticker';
87
- }
88
- /** Callback signature for data handlers */
89
- export type DataCallback<T = Record<string, any>> = (exchange: string, symbol: string, data: T) => void;
90
- /** Streaming client options */
91
- export interface DeepTickStreamOptions {
92
- /** WebSocket URL (default: wss://deeptick.lacertalabs.xyz/v1/stream) */
93
- url?: string;
94
- /** Auto-reconnect on disconnect (default: true) */
95
- reconnect?: boolean;
96
- /** Initial reconnect delay in ms (default: 1000) */
97
- reconnectDelay?: number;
98
- /** Max reconnect delay in ms (default: 30000) */
99
- reconnectMaxDelay?: number;
100
- /** Max queued messages before dropping (default: 10000) */
101
- maxQueueSize?: number;
102
- }
103
- export declare class DeepTickStream {
104
- private url;
105
- private reconnect;
106
- private reconnectDelay;
107
- private reconnectMaxDelay;
108
- private currentDelay;
109
- private maxQueueSize;
110
- private ws;
111
- private connected;
112
- private stopped;
113
- private channels;
114
- private connectionId;
115
- private tradeCallbacks;
116
- private bookTickerCallbacks;
117
- private bookDeltaCallbacks;
118
- private derivativeTickerCallbacks;
119
- private liquidationCallbacks;
120
- private globalCallbacks;
121
- private connectCallbacks;
122
- private disconnectCallbacks;
123
- private errorCallbacks;
124
- messagesReceived: number;
125
- reconnectCount: number;
126
- lastMessageTime: number;
127
- private pendingSubscribe;
128
- private pendingConnect;
129
- constructor(urlOrOptions?: string | DeepTickStreamOptions);
130
- /** Register callback for trade data */
131
- onTrade(cb: DataCallback<StreamTrade>): this;
132
- /** Register callback for native top-of-book ticker data */
133
- onBookTicker(cb: DataCallback<StreamBookTicker>): this;
134
- /** Deprecated alias for onBookTicker. */
135
- onBBO(cb: DataCallback<StreamBookTicker>): this;
136
- /** Register callback for book delta data */
137
- onBookDelta(cb: DataCallback<StreamBookDelta>): this;
138
- /** Register callback for derivative ticker data */
139
- onDerivativeTicker(cb: DataCallback<StreamDerivativeTicker>): this;
140
- /** Deprecated alias for onDerivativeTicker. */
141
- onFunding(cb: DataCallback<StreamDerivativeTicker>): this;
142
- /** Deprecated alias for onDerivativeTicker. */
143
- onOpenInterest(cb: DataCallback<StreamDerivativeTicker>): this;
144
- /** Register callback for liquidation data */
145
- onLiquidation(cb: DataCallback): this;
146
- /** Register callback for ALL data types */
147
- onData(cb: DataCallback): this;
148
- /** Register callback for connection events */
149
- onConnect(cb: () => void): this;
150
- /** Register callback for disconnection events */
151
- onDisconnect(cb: (reason: string) => void): this;
152
- /** Register callback for errors */
153
- onError(cb: (error: Error) => void): this;
154
- /** Connect to the DeepTick streaming endpoint */
155
- connect(): Promise<void>;
156
- /** Disconnect from the streaming endpoint */
157
- disconnect(): void;
158
- /** Subscribe to data channels */
159
- subscribe(channels: string[]): Promise<void>;
160
- /** Unsubscribe from specific channels */
161
- unsubscribe(channels: string[]): void;
162
- /** Send ping and measure round-trip latency (ms) */
163
- ping(): Promise<number>;
164
- /** Get streaming client statistics */
165
- getStats(): {
166
- connected: boolean;
167
- connectionId: string | null;
168
- url: string;
169
- channels: string[];
170
- messagesReceived: number;
171
- reconnectCount: number;
172
- lastMessageAgeMs: number;
173
- };
174
- private handleMessage;
175
- private dispatchData;
176
- private scheduleReconnect;
177
- }
178
- export type { TradeRecord, BBORecord, BookDeltaRecord, CandleRecord } from './types.js';
179
- //# sourceMappingURL=streaming.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"streaming.d.ts","sourceRoot":"","sources":["../src/streaming.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAIH,sCAAsC;AACtC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,YAAY,GAAG,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC;IAC1F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,6BAA6B;AAC7B,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IACrB,SAAS,EAAE,QAAQ,CAAC;CACrB;AAED,iDAAiD;AACjD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,aAAa,CAAC;CAC1B;AAED,kCAAkC;AAClC,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,eAAe,CAAC;CAC5B;AAED,yCAAyC;AACzC,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,mBAAmB,CAAC;CAChC;AAED,2CAA2C;AAC3C,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAClD,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,CAAC,KACJ,IAAI,CAAC;AAEV,+BAA+B;AAC/B,MAAM,WAAW,qBAAqB;IACpC,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iDAAiD;IACjD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAID,qBAAa,cAAc;IACzB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,YAAY,CAAuB;IAG3C,OAAO,CAAC,cAAc,CAAmC;IACzD,OAAO,CAAC,mBAAmB,CAAwC;IACnE,OAAO,CAAC,kBAAkB,CAAuC;IACjE,OAAO,CAAC,yBAAyB,CAA8C;IAC/E,OAAO,CAAC,oBAAoB,CAAsB;IAClD,OAAO,CAAC,eAAe,CAAsB;IAG7C,OAAO,CAAC,gBAAgB,CAAsB;IAC9C,OAAO,CAAC,mBAAmB,CAAoC;IAC/D,OAAO,CAAC,cAAc,CAAkC;IAGjD,gBAAgB,SAAK;IACrB,cAAc,SAAK;IACnB,eAAe,SAAK;IAG3B,OAAO,CAAC,gBAAgB,CAAwC;IAChE,OAAO,CAAC,cAAc,CAAwC;gBAElD,YAAY,CAAC,EAAE,MAAM,GAAG,qBAAqB;IAczD,uCAAuC;IACvC,OAAO,CAAC,EAAE,EAAE,YAAY,CAAC,WAAW,CAAC,GAAG,IAAI;IAK5C,2DAA2D;IAC3D,YAAY,CAAC,EAAE,EAAE,YAAY,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAKtD,yCAAyC;IACzC,KAAK,CAAC,EAAE,EAAE,YAAY,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAI/C,4CAA4C;IAC5C,WAAW,CAAC,EAAE,EAAE,YAAY,CAAC,eAAe,CAAC,GAAG,IAAI;IAKpD,mDAAmD;IACnD,kBAAkB,CAAC,EAAE,EAAE,YAAY,CAAC,sBAAsB,CAAC,GAAG,IAAI;IAKlE,+CAA+C;IAC/C,SAAS,CAAC,EAAE,EAAE,YAAY,CAAC,sBAAsB,CAAC,GAAG,IAAI;IAIzD,+CAA+C;IAC/C,cAAc,CAAC,EAAE,EAAE,YAAY,CAAC,sBAAsB,CAAC,GAAG,IAAI;IAI9D,6CAA6C;IAC7C,aAAa,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI;IAKrC,2CAA2C;IAC3C,MAAM,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI;IAK9B,8CAA8C;IAC9C,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAK/B,iDAAiD;IACjD,YAAY,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAKhD,mCAAmC;IACnC,OAAO,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAOzC,iDAAiD;IAC3C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAwC9B,6CAA6C;IAC7C,UAAU,IAAI,IAAI;IASlB,iCAAiC;IAC3B,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAelD,yCAAyC;IACzC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAUrC,oDAAoD;IAC9C,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAsB7B,sCAAsC;IACtC,QAAQ,IAAI;QACV,SAAS,EAAE,OAAO,CAAC;QACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;KAC1B;IAgBD,OAAO,CAAC,aAAa;IAqDrB,OAAO,CAAC,YAAY;IA8BpB,OAAO,CAAC,iBAAiB;CAgB1B;AAGD,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
package/dist/streaming.js DELETED
@@ -1,318 +0,0 @@
1
- /**
2
- * DeepTick TypeScript Client — Real-time Streaming
3
- *
4
- * Connects to the DeepTick WebSocket endpoint and delivers live market data.
5
- * Works in both Node.js (via `ws` package) and browser environments.
6
- *
7
- * Install:
8
- * npm install @deeptick/client # includes streaming
9
- * # Node.js also needs: npm install ws
10
- *
11
- * Usage:
12
- * import { DeepTickStream } from '@deeptick/client';
13
- *
14
- * const stream = new DeepTickStream('wss://deeptick.lacertalabs.xyz/v1/stream');
15
- *
16
- * stream.onTrade((exchange, symbol, trade) => {
17
- * console.log(`[${exchange}] ${symbol}: ${trade.price} x ${trade.amount}`);
18
- * });
19
- *
20
- * stream.onBookTicker((exchange, symbol, ticker) => {
21
- * console.log(`[${exchange}] ${symbol}: ${ticker.bid_price}/${ticker.ask_price}`);
22
- * });
23
- *
24
- * await stream.connect();
25
- * await stream.subscribe(['hyperliquid.trades.BTC', '*.book_ticker.*']);
26
- */
27
- // ─── Streaming Client ───────────────────────────────────────────────
28
- export class DeepTickStream {
29
- url;
30
- reconnect;
31
- reconnectDelay;
32
- reconnectMaxDelay;
33
- currentDelay;
34
- maxQueueSize;
35
- ws = null;
36
- connected = false;
37
- stopped = false;
38
- channels = [];
39
- connectionId = null;
40
- // Callbacks by data type
41
- tradeCallbacks = [];
42
- bookTickerCallbacks = [];
43
- bookDeltaCallbacks = [];
44
- derivativeTickerCallbacks = [];
45
- liquidationCallbacks = [];
46
- globalCallbacks = [];
47
- // Event callbacks
48
- connectCallbacks = [];
49
- disconnectCallbacks = [];
50
- errorCallbacks = [];
51
- // Metrics
52
- messagesReceived = 0;
53
- reconnectCount = 0;
54
- lastMessageTime = 0;
55
- // Pending resolve for subscribe/connect
56
- pendingSubscribe = null;
57
- pendingConnect = null;
58
- constructor(urlOrOptions) {
59
- const opts = typeof urlOrOptions === 'string' ? { url: urlOrOptions } : urlOrOptions ?? {};
60
- this.url = opts.url ?? 'wss://deeptick.lacertalabs.xyz/v1/stream';
61
- this.reconnect = opts.reconnect ?? true;
62
- this.reconnectDelay = opts.reconnectDelay ?? 1000;
63
- this.reconnectMaxDelay = opts.reconnectMaxDelay ?? 30_000;
64
- this.currentDelay = this.reconnectDelay;
65
- this.maxQueueSize = opts.maxQueueSize ?? 10_000;
66
- }
67
- // ─── Callback Registration ──────────────────────────────────────
68
- /** Register callback for trade data */
69
- onTrade(cb) {
70
- this.tradeCallbacks.push(cb);
71
- return this;
72
- }
73
- /** Register callback for native top-of-book ticker data */
74
- onBookTicker(cb) {
75
- this.bookTickerCallbacks.push(cb);
76
- return this;
77
- }
78
- /** Deprecated alias for onBookTicker. */
79
- onBBO(cb) {
80
- return this.onBookTicker(cb);
81
- }
82
- /** Register callback for book delta data */
83
- onBookDelta(cb) {
84
- this.bookDeltaCallbacks.push(cb);
85
- return this;
86
- }
87
- /** Register callback for derivative ticker data */
88
- onDerivativeTicker(cb) {
89
- this.derivativeTickerCallbacks.push(cb);
90
- return this;
91
- }
92
- /** Deprecated alias for onDerivativeTicker. */
93
- onFunding(cb) {
94
- return this.onDerivativeTicker(cb);
95
- }
96
- /** Deprecated alias for onDerivativeTicker. */
97
- onOpenInterest(cb) {
98
- return this.onDerivativeTicker(cb);
99
- }
100
- /** Register callback for liquidation data */
101
- onLiquidation(cb) {
102
- this.liquidationCallbacks.push(cb);
103
- return this;
104
- }
105
- /** Register callback for ALL data types */
106
- onData(cb) {
107
- this.globalCallbacks.push(cb);
108
- return this;
109
- }
110
- /** Register callback for connection events */
111
- onConnect(cb) {
112
- this.connectCallbacks.push(cb);
113
- return this;
114
- }
115
- /** Register callback for disconnection events */
116
- onDisconnect(cb) {
117
- this.disconnectCallbacks.push(cb);
118
- return this;
119
- }
120
- /** Register callback for errors */
121
- onError(cb) {
122
- this.errorCallbacks.push(cb);
123
- return this;
124
- }
125
- // ─── Connection Management ──────────────────────────────────────
126
- /** Connect to the DeepTick streaming endpoint */
127
- async connect() {
128
- this.stopped = false;
129
- return new Promise((resolve, reject) => {
130
- try {
131
- // Use browser WebSocket or Node.js ws
132
- this.ws = new WebSocket(this.url);
133
- this.ws.onopen = () => {
134
- // Wait for welcome message before resolving
135
- this.pendingConnect = resolve;
136
- };
137
- this.ws.onmessage = (event) => {
138
- this.handleMessage(event.data);
139
- };
140
- this.ws.onclose = (event) => {
141
- const reason = event.reason || `code ${event.code}`;
142
- this.connected = false;
143
- this.disconnectCallbacks.forEach(cb => cb(reason));
144
- if (this.reconnect && !this.stopped) {
145
- this.scheduleReconnect();
146
- }
147
- };
148
- this.ws.onerror = (event) => {
149
- const error = new Error('WebSocket error');
150
- this.errorCallbacks.forEach(cb => cb(error));
151
- if (!this.connected) {
152
- reject(error);
153
- }
154
- };
155
- }
156
- catch (err) {
157
- reject(err);
158
- }
159
- });
160
- }
161
- /** Disconnect from the streaming endpoint */
162
- disconnect() {
163
- this.stopped = true;
164
- this.connected = false;
165
- if (this.ws) {
166
- this.ws.close();
167
- this.ws = null;
168
- }
169
- }
170
- /** Subscribe to data channels */
171
- async subscribe(channels) {
172
- this.channels = channels;
173
- if (!this.connected || !this.ws) {
174
- throw new Error('Not connected. Call connect() first.');
175
- }
176
- return new Promise((resolve) => {
177
- this.pendingSubscribe = resolve;
178
- this.ws.send(JSON.stringify({
179
- action: 'subscribe',
180
- channels,
181
- }));
182
- });
183
- }
184
- /** Unsubscribe from specific channels */
185
- unsubscribe(channels) {
186
- this.channels = this.channels.filter(c => !channels.includes(c));
187
- if (this.connected && this.ws) {
188
- this.ws.send(JSON.stringify({
189
- action: 'unsubscribe',
190
- channels,
191
- }));
192
- }
193
- }
194
- /** Send ping and measure round-trip latency (ms) */
195
- async ping() {
196
- if (!this.connected || !this.ws) {
197
- throw new Error('Not connected');
198
- }
199
- const t0 = Date.now();
200
- return new Promise((resolve) => {
201
- const handler = (event) => {
202
- const frame = JSON.parse(event.data);
203
- if (frame.type === 'pong') {
204
- this.ws?.removeEventListener('message', handler);
205
- resolve(Date.now() - t0);
206
- }
207
- };
208
- this.ws.addEventListener('message', handler);
209
- this.ws.send(JSON.stringify({
210
- action: 'ping',
211
- ts: t0 * 1_000_000, // ns
212
- }));
213
- });
214
- }
215
- /** Get streaming client statistics */
216
- getStats() {
217
- return {
218
- connected: this.connected,
219
- connectionId: this.connectionId,
220
- url: this.url,
221
- channels: this.channels,
222
- messagesReceived: this.messagesReceived,
223
- reconnectCount: this.reconnectCount,
224
- lastMessageAgeMs: this.lastMessageTime > 0
225
- ? Date.now() - this.lastMessageTime
226
- : -1,
227
- };
228
- }
229
- // ─── Internal ───────────────────────────────────────────────────
230
- handleMessage(raw) {
231
- let frame;
232
- try {
233
- frame = JSON.parse(raw);
234
- }
235
- catch {
236
- return;
237
- }
238
- this.messagesReceived++;
239
- this.lastMessageTime = Date.now();
240
- switch (frame.type) {
241
- case 'welcome':
242
- this.connectionId = frame.connection_id ?? null;
243
- this.connected = true;
244
- this.currentDelay = this.reconnectDelay;
245
- this.connectCallbacks.forEach(cb => cb());
246
- // Resolve pending connect promise
247
- if (this.pendingConnect) {
248
- this.pendingConnect();
249
- this.pendingConnect = null;
250
- }
251
- // Resubscribe on reconnect
252
- if (this.channels.length > 0) {
253
- this.ws?.send(JSON.stringify({
254
- action: 'subscribe',
255
- channels: this.channels,
256
- }));
257
- }
258
- break;
259
- case 'subscribed':
260
- if (this.pendingSubscribe) {
261
- this.pendingSubscribe();
262
- this.pendingSubscribe = null;
263
- }
264
- break;
265
- case 'data':
266
- this.dispatchData(frame.topic ?? '', frame.data ?? {});
267
- break;
268
- case 'heartbeat':
269
- // Connection alive
270
- break;
271
- case 'error':
272
- const error = new Error(frame.message ?? 'Unknown server error');
273
- this.errorCallbacks.forEach(cb => cb(error));
274
- break;
275
- }
276
- }
277
- dispatchData(topic, data) {
278
- // Parse topic: "exchange.data_type.symbol"
279
- const parts = topic.split('.', 3);
280
- if (parts.length < 3)
281
- return;
282
- const [exchange, dataType, symbol] = parts;
283
- // Route to type-specific callbacks
284
- switch (dataType) {
285
- case 'trades':
286
- this.tradeCallbacks.forEach(cb => cb(exchange, symbol, data));
287
- break;
288
- case 'book_ticker':
289
- this.bookTickerCallbacks.forEach(cb => cb(exchange, symbol, data));
290
- break;
291
- case 'book_l2_delta':
292
- this.bookDeltaCallbacks.forEach(cb => cb(exchange, symbol, data));
293
- break;
294
- case 'derivative_ticker':
295
- this.derivativeTickerCallbacks.forEach(cb => cb(exchange, symbol, data));
296
- break;
297
- case 'liquidations':
298
- this.liquidationCallbacks.forEach(cb => cb(exchange, symbol, data));
299
- break;
300
- }
301
- // Global callbacks
302
- this.globalCallbacks.forEach(cb => cb(exchange, symbol, data));
303
- }
304
- scheduleReconnect() {
305
- this.reconnectCount++;
306
- console.log(`[deeptick] Reconnecting in ${this.currentDelay}ms (attempt #${this.reconnectCount})`);
307
- setTimeout(async () => {
308
- try {
309
- await this.connect();
310
- }
311
- catch {
312
- // connect() failed, onclose will fire and trigger another retry
313
- }
314
- }, this.currentDelay);
315
- this.currentDelay = Math.min(this.currentDelay * 2, this.reconnectMaxDelay);
316
- }
317
- }
318
- //# sourceMappingURL=streaming.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"streaming.js","sourceRoot":"","sources":["../src/streaming.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts DELETED
@@ -1,142 +0,0 @@
1
- /**
2
- * DeepTick TypeScript Client — Derived Data Computations
3
- *
4
- * All derived data types are computed client-side from raw Phase 1 data.
5
- * Uses Apache Arrow JS for zero-copy Parquet reads.
6
- *
7
- * Install: npm install @deeptick/client apache-arrow parquet-wasm
8
- *
9
- * Usage:
10
- * import { DeepTick, derive } from '@deeptick/client';
11
- *
12
- * const dt = new DeepTick({ dataDir: './data/merged' });
13
- * const trades = await dt.loadTrades('hyperliquid', 'BTC', '2026-05-01');
14
- * const candles = derive.candles(trades, { intervalMs: 60_000 });
15
- * const bbo = derive.bbo(await dt.loadBookDeltas('hyperliquid', 'BTC', '2026-05-01'));
16
- */
17
- export interface TradeRecord {
18
- timestamp: bigint;
19
- local_timestamp: bigint;
20
- price: number;
21
- amount: number;
22
- side: 'buy' | 'sell';
23
- trade_id: string;
24
- }
25
- export interface BookDeltaRecord {
26
- timestamp: bigint;
27
- local_timestamp: bigint;
28
- is_snapshot: boolean;
29
- bids_packed: Uint8Array;
30
- asks_packed: Uint8Array;
31
- bid_count: number;
32
- ask_count: number;
33
- sequence: bigint | null;
34
- }
35
- export interface BBORecord {
36
- timestamp: bigint;
37
- local_timestamp: bigint;
38
- bid_price: number;
39
- bid_amount: number;
40
- ask_price: number;
41
- ask_amount: number;
42
- }
43
- export interface CandleRecord {
44
- timestamp: bigint;
45
- open: number;
46
- high: number;
47
- low: number;
48
- close: number;
49
- volume: number;
50
- buy_volume: number;
51
- sell_volume: number;
52
- trades_count: number;
53
- vwap: number;
54
- }
55
- export interface BookSnapshot {
56
- timestamp: bigint;
57
- local_timestamp: bigint;
58
- bids: [number, number][];
59
- asks: [number, number][];
60
- bid_depth: number;
61
- ask_depth: number;
62
- }
63
- export interface VolumeProfileBucket {
64
- price_level: number;
65
- volume: number;
66
- buy_volume: number;
67
- sell_volume: number;
68
- trade_count: number;
69
- }
70
- export interface ImbalanceRecord {
71
- timestamp: bigint;
72
- imbalance: number;
73
- bid_volume: number;
74
- ask_volume: number;
75
- }
76
- export interface FundingCrossRecord {
77
- timestamp: bigint;
78
- rates: Record<string, number>;
79
- spreads: Record<string, number>;
80
- annualized_spreads: Record<string, number>;
81
- }
82
- export declare namespace derive {
83
- /**
84
- * Derive BBO time series from L2 book deltas.
85
- * Replays delta stream maintaining full book state.
86
- */
87
- function bbo(deltas: BookDeltaRecord[]): BBORecord[];
88
- /**
89
- * Derive periodic L2 snapshots from delta stream.
90
- * @param depth - 20 for standard, 1000 for deep book
91
- * @param intervalMs - snapshot interval (default: 60000 = 1 min)
92
- */
93
- function bookSnapshots(deltas: BookDeltaRecord[], options?: {
94
- depth?: number;
95
- intervalMs?: number;
96
- }): BookSnapshot[];
97
- /**
98
- * Derive OHLCV candles from trades at any interval.
99
- * Includes VWAP and buy/sell volume split.
100
- */
101
- function candles(trades: TradeRecord[], options?: {
102
- intervalMs?: number;
103
- }): CandleRecord[];
104
- /**
105
- * Derive volume profile from trades.
106
- * @param priceBucketSize - auto-calculated if not provided
107
- */
108
- function volumeProfile(trades: TradeRecord[], options?: {
109
- priceBucketSize?: number;
110
- numBuckets?: number;
111
- }): VolumeProfileBucket[];
112
- /**
113
- * Derive order book imbalance from L2 deltas.
114
- * imbalance = (bid_vol - ask_vol) / (bid_vol + ask_vol) at top N levels
115
- */
116
- function bookImbalance(deltas: BookDeltaRecord[], options?: {
117
- depth?: number;
118
- intervalMs?: number;
119
- }): ImbalanceRecord[];
120
- /**
121
- * Derive cross-exchange funding rate spreads.
122
- * Takes funding data from multiple exchanges for same underlying.
123
- */
124
- function fundingCross(fundingByExchange: Record<string, {
125
- timestamp: bigint;
126
- funding_rate: number;
127
- }[]>, options?: {
128
- intervalMs?: number;
129
- }): FundingCrossRecord[];
130
- /**
131
- * Derive cross-exchange basis (price spread in bps).
132
- */
133
- function crossExchangeBasis(tradesByExchange: Record<string, TradeRecord[]>, options?: {
134
- intervalMs?: number;
135
- }): {
136
- timestamp: bigint;
137
- prices: Record<string, number>;
138
- basis_bps: Record<string, number>;
139
- }[];
140
- }
141
- export declare function unpackLevels(packed: Uint8Array): [number, number][];
142
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}