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.
Files changed (84) hide show
  1. package/dist/consts.d.ts +2 -1
  2. package/dist/consts.d.ts.map +1 -1
  3. package/dist/consts.js +14 -2
  4. package/dist/consts.js.map +1 -1
  5. package/dist/exchangedetails.d.ts +1 -1
  6. package/dist/exchangedetails.d.ts.map +1 -1
  7. package/dist/handy.d.ts +9 -4
  8. package/dist/handy.d.ts.map +1 -1
  9. package/dist/handy.js +17 -12
  10. package/dist/handy.js.map +1 -1
  11. package/dist/mappers/binanceeuropeanoptions.d.ts.map +1 -1
  12. package/dist/mappers/binanceeuropeanoptions.js +30 -70
  13. package/dist/mappers/binanceeuropeanoptions.js.map +1 -1
  14. package/dist/mappers/bitget.js +5 -5
  15. package/dist/mappers/bitget.js.map +1 -1
  16. package/dist/mappers/bitmex.js +5 -5
  17. package/dist/mappers/bitmex.js.map +1 -1
  18. package/dist/mappers/bullish.js +15 -15
  19. package/dist/mappers/bullish.js.map +1 -1
  20. package/dist/mappers/bybit.d.ts +2 -2
  21. package/dist/mappers/bybit.js +16 -16
  22. package/dist/mappers/bybit.js.map +1 -1
  23. package/dist/mappers/bybitspot.d.ts +1 -1
  24. package/dist/mappers/cryptocom.d.ts +1 -1
  25. package/dist/mappers/deribit.js +12 -12
  26. package/dist/mappers/deribit.js.map +1 -1
  27. package/dist/mappers/ftx.js +5 -5
  28. package/dist/mappers/ftx.js.map +1 -1
  29. package/dist/mappers/huobi.d.ts +3 -3
  30. package/dist/mappers/huobi.d.ts.map +1 -1
  31. package/dist/mappers/huobi.js +20 -20
  32. package/dist/mappers/huobi.js.map +1 -1
  33. package/dist/mappers/index.d.ts +4 -0
  34. package/dist/mappers/index.d.ts.map +1 -1
  35. package/dist/mappers/index.js +11 -5
  36. package/dist/mappers/index.js.map +1 -1
  37. package/dist/mappers/kraken.js +5 -5
  38. package/dist/mappers/kraken.js.map +1 -1
  39. package/dist/mappers/kucoinfutures.d.ts.map +1 -1
  40. package/dist/mappers/kucoinfutures.js +2 -2
  41. package/dist/mappers/kucoinfutures.js.map +1 -1
  42. package/dist/mappers/lighter.js +5 -5
  43. package/dist/mappers/lighter.js.map +1 -1
  44. package/dist/mappers/okex.js +38 -38
  45. package/dist/mappers/okex.js.map +1 -1
  46. package/dist/mappers/polymarket.d.ts +83 -0
  47. package/dist/mappers/polymarket.d.ts.map +1 -0
  48. package/dist/mappers/polymarket.js +113 -0
  49. package/dist/mappers/polymarket.js.map +1 -0
  50. package/dist/mappers/serum.js +5 -5
  51. package/dist/mappers/serum.js.map +1 -1
  52. package/dist/realtimefeeds/index.d.ts.map +1 -1
  53. package/dist/realtimefeeds/index.js +3 -1
  54. package/dist/realtimefeeds/index.js.map +1 -1
  55. package/dist/realtimefeeds/polymarket.d.ts +26 -0
  56. package/dist/realtimefeeds/polymarket.d.ts.map +1 -0
  57. package/dist/realtimefeeds/polymarket.js +92 -0
  58. package/dist/realtimefeeds/polymarket.js.map +1 -0
  59. package/dist/realtimefeeds/realtimefeed.d.ts +1 -0
  60. package/dist/realtimefeeds/realtimefeed.d.ts.map +1 -1
  61. package/dist/realtimefeeds/realtimefeed.js +9 -0
  62. package/dist/realtimefeeds/realtimefeed.js.map +1 -1
  63. package/package.json +1 -1
  64. package/src/consts.ts +15 -2
  65. package/src/exchangedetails.ts +1 -1
  66. package/src/handy.ts +18 -14
  67. package/src/mappers/binanceeuropeanoptions.ts +30 -79
  68. package/src/mappers/bitget.ts +5 -5
  69. package/src/mappers/bitmex.ts +5 -5
  70. package/src/mappers/bullish.ts +15 -15
  71. package/src/mappers/bybit.ts +16 -16
  72. package/src/mappers/deribit.ts +12 -12
  73. package/src/mappers/ftx.ts +5 -5
  74. package/src/mappers/huobi.ts +20 -20
  75. package/src/mappers/index.ts +11 -5
  76. package/src/mappers/kraken.ts +5 -5
  77. package/src/mappers/kucoinfutures.ts +2 -2
  78. package/src/mappers/lighter.ts +5 -5
  79. package/src/mappers/okex.ts +38 -38
  80. package/src/mappers/polymarket.ts +195 -0
  81. package/src/mappers/serum.ts +5 -5
  82. package/src/realtimefeeds/index.ts +3 -1
  83. package/src/realtimefeeds/polymarket.ts +112 -0
  84. 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