tardis-dev 16.4.1 → 16.5.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.
- package/dist/consts.d.ts +2 -1
- package/dist/consts.d.ts.map +1 -1
- package/dist/consts.js +14 -2
- package/dist/consts.js.map +1 -1
- package/dist/exchangedetails.d.ts +1 -1
- package/dist/exchangedetails.d.ts.map +1 -1
- package/dist/handy.d.ts +9 -4
- package/dist/handy.d.ts.map +1 -1
- package/dist/handy.js +17 -12
- package/dist/handy.js.map +1 -1
- package/dist/mappers/binanceeuropeanoptions.d.ts.map +1 -1
- package/dist/mappers/binanceeuropeanoptions.js +30 -70
- package/dist/mappers/binanceeuropeanoptions.js.map +1 -1
- package/dist/mappers/bitget.js +5 -5
- package/dist/mappers/bitget.js.map +1 -1
- package/dist/mappers/bitmex.js +5 -5
- package/dist/mappers/bitmex.js.map +1 -1
- package/dist/mappers/bullish.js +15 -15
- package/dist/mappers/bullish.js.map +1 -1
- package/dist/mappers/bybit.d.ts +2 -2
- package/dist/mappers/bybit.js +16 -16
- package/dist/mappers/bybit.js.map +1 -1
- package/dist/mappers/bybitspot.d.ts +1 -1
- package/dist/mappers/cryptocom.d.ts +1 -1
- package/dist/mappers/deribit.js +12 -12
- package/dist/mappers/deribit.js.map +1 -1
- package/dist/mappers/ftx.js +5 -5
- package/dist/mappers/ftx.js.map +1 -1
- package/dist/mappers/huobi.d.ts +3 -3
- package/dist/mappers/huobi.d.ts.map +1 -1
- package/dist/mappers/huobi.js +20 -20
- package/dist/mappers/huobi.js.map +1 -1
- package/dist/mappers/index.d.ts +4 -0
- package/dist/mappers/index.d.ts.map +1 -1
- package/dist/mappers/index.js +11 -5
- package/dist/mappers/index.js.map +1 -1
- package/dist/mappers/kraken.js +5 -5
- package/dist/mappers/kraken.js.map +1 -1
- package/dist/mappers/kucoinfutures.d.ts.map +1 -1
- package/dist/mappers/kucoinfutures.js +2 -2
- package/dist/mappers/kucoinfutures.js.map +1 -1
- package/dist/mappers/lighter.js +5 -5
- package/dist/mappers/lighter.js.map +1 -1
- package/dist/mappers/okex.js +38 -38
- package/dist/mappers/okex.js.map +1 -1
- package/dist/mappers/polymarket.d.ts +83 -0
- package/dist/mappers/polymarket.d.ts.map +1 -0
- package/dist/mappers/polymarket.js +113 -0
- package/dist/mappers/polymarket.js.map +1 -0
- package/dist/mappers/serum.js +5 -5
- package/dist/mappers/serum.js.map +1 -1
- package/dist/realtimefeeds/index.d.ts.map +1 -1
- package/dist/realtimefeeds/index.js +3 -1
- package/dist/realtimefeeds/index.js.map +1 -1
- package/dist/realtimefeeds/polymarket.d.ts +26 -0
- package/dist/realtimefeeds/polymarket.d.ts.map +1 -0
- package/dist/realtimefeeds/polymarket.js +92 -0
- package/dist/realtimefeeds/polymarket.js.map +1 -0
- package/dist/realtimefeeds/realtimefeed.d.ts +1 -0
- package/dist/realtimefeeds/realtimefeed.d.ts.map +1 -1
- package/dist/realtimefeeds/realtimefeed.js +9 -0
- package/dist/realtimefeeds/realtimefeed.js.map +1 -1
- package/package.json +1 -1
- package/src/consts.ts +15 -2
- package/src/exchangedetails.ts +1 -1
- package/src/handy.ts +18 -14
- package/src/mappers/binanceeuropeanoptions.ts +30 -79
- package/src/mappers/bitget.ts +5 -5
- package/src/mappers/bitmex.ts +5 -5
- package/src/mappers/bullish.ts +15 -15
- package/src/mappers/bybit.ts +16 -16
- package/src/mappers/deribit.ts +12 -12
- package/src/mappers/ftx.ts +5 -5
- package/src/mappers/huobi.ts +20 -20
- package/src/mappers/index.ts +11 -5
- package/src/mappers/kraken.ts +5 -5
- package/src/mappers/kucoinfutures.ts +2 -2
- package/src/mappers/lighter.ts +5 -5
- package/src/mappers/okex.ts +38 -38
- package/src/mappers/polymarket.ts +195 -0
- package/src/mappers/serum.ts +5 -5
- package/src/realtimefeeds/index.ts +3 -1
- package/src/realtimefeeds/polymarket.ts +112 -0
- package/src/realtimefeeds/realtimefeed.ts +10 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { Filter } from '../types.ts'
|
|
2
|
+
import { MultiConnectionRealTimeFeedBase, RealTimeFeedBase, RealTimeFeedIterable } from './realtimefeed.ts'
|
|
3
|
+
|
|
4
|
+
export class PolymarketRealTimeFeed extends MultiConnectionRealTimeFeedBase {
|
|
5
|
+
private readonly clobChannels = new Set([
|
|
6
|
+
'book',
|
|
7
|
+
'price_change',
|
|
8
|
+
'last_trade_price',
|
|
9
|
+
'best_bid_ask',
|
|
10
|
+
'tick_size_change',
|
|
11
|
+
'new_market',
|
|
12
|
+
'market_resolved'
|
|
13
|
+
])
|
|
14
|
+
private readonly sportsChannel = 'sport_result'
|
|
15
|
+
|
|
16
|
+
protected *_getRealTimeFeeds(
|
|
17
|
+
exchange: string,
|
|
18
|
+
filters: Filter<string>[],
|
|
19
|
+
timeoutIntervalMS?: number,
|
|
20
|
+
onError?: (error: Error) => void
|
|
21
|
+
): IterableIterator<RealTimeFeedIterable> {
|
|
22
|
+
const clobFilters: Filter<string>[] = []
|
|
23
|
+
const sportsFilters: Filter<string>[] = []
|
|
24
|
+
|
|
25
|
+
for (const filter of filters) {
|
|
26
|
+
if (this.clobChannels.has(filter.channel)) {
|
|
27
|
+
clobFilters.push(filter)
|
|
28
|
+
} else if (filter.channel === this.sportsChannel) {
|
|
29
|
+
sportsFilters.push(filter)
|
|
30
|
+
} else {
|
|
31
|
+
throw new Error(`PolymarketRealTimeFeed unsupported channel ${filter.channel}`)
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (clobFilters.length > 0) {
|
|
36
|
+
if (clobFilters.every((filter) => filter.symbols === undefined || filter.symbols.length === 0)) {
|
|
37
|
+
throw new Error('PolymarketRealTimeFeed requires explicitly specified symbols when subscribing to CLOB live feed')
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
yield new PolymarketClobRealTimeFeed(exchange, clobFilters, timeoutIntervalMS, onError)
|
|
41
|
+
}
|
|
42
|
+
if (sportsFilters.length > 0) {
|
|
43
|
+
yield new PolymarketSportsRealTimeFeed(exchange, sportsFilters, timeoutIntervalMS, onError)
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export class PolymarketClobRealTimeFeed extends RealTimeFeedBase {
|
|
49
|
+
protected wssURL = 'wss://ws-subscriptions-clob.polymarket.com/ws/market'
|
|
50
|
+
private readonly pongMessage = Buffer.from('{"__pong__":true}')
|
|
51
|
+
|
|
52
|
+
protected decompress = (msg: Buffer): Buffer => {
|
|
53
|
+
if (msg.toString() === 'PONG') {
|
|
54
|
+
return this.pongMessage
|
|
55
|
+
}
|
|
56
|
+
return msg
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
protected messageIsHeartbeat(msg: any) {
|
|
60
|
+
return msg.__pong__ === true
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
protected sendCustomPing = () => {
|
|
64
|
+
this.sendRaw('PING')
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
protected mapToSubscribeMessages(filters: Filter<string>[]): any[] {
|
|
68
|
+
return [
|
|
69
|
+
{
|
|
70
|
+
type: 'market',
|
|
71
|
+
assets_ids: [...new Set(filters.flatMap((f) => f.symbols ?? []))],
|
|
72
|
+
initial_dump: true,
|
|
73
|
+
level: 2,
|
|
74
|
+
custom_feature_enabled: true
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
protected messageIsError(message: any): boolean {
|
|
80
|
+
return typeof message.error === 'string'
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export class PolymarketSportsRealTimeFeed extends RealTimeFeedBase {
|
|
85
|
+
protected wssURL = 'wss://sports-api.polymarket.com/ws'
|
|
86
|
+
private readonly serverPingMessage = Buffer.from('{"__server_ping__":true}')
|
|
87
|
+
|
|
88
|
+
protected decompress = (msg: Buffer): Buffer => {
|
|
89
|
+
if (msg.toString() === 'ping') {
|
|
90
|
+
return this.serverPingMessage
|
|
91
|
+
}
|
|
92
|
+
return msg
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
protected messageIsHeartbeat(msg: any) {
|
|
96
|
+
return msg.__server_ping__ === true
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
protected onMessage(msg: any) {
|
|
100
|
+
if (msg.__server_ping__ === true) {
|
|
101
|
+
this.sendRaw('pong')
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
protected mapToSubscribeMessages(_filters: Filter<string>[]): any[] {
|
|
106
|
+
return []
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
protected messageIsError(message: any): boolean {
|
|
110
|
+
return typeof message.error === 'string'
|
|
111
|
+
}
|
|
112
|
+
}
|
|
@@ -219,6 +219,16 @@ export abstract class RealTimeFeedBase implements RealTimeFeedIterable {
|
|
|
219
219
|
this._ws.send(JSON.stringify(msg))
|
|
220
220
|
}
|
|
221
221
|
|
|
222
|
+
protected sendRaw(msg: string | Buffer) {
|
|
223
|
+
if (this._ws === undefined) {
|
|
224
|
+
return
|
|
225
|
+
}
|
|
226
|
+
if (this._ws.readyState !== WebSocket.OPEN) {
|
|
227
|
+
return
|
|
228
|
+
}
|
|
229
|
+
this._ws.send(msg)
|
|
230
|
+
}
|
|
231
|
+
|
|
222
232
|
protected abstract mapToSubscribeMessages(filters: Filter<string>[]): any[]
|
|
223
233
|
|
|
224
234
|
protected abstract messageIsError(message: any): boolean
|