tardis-machine 18.8.0 → 18.8.1

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/helpers.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { OutgoingMessage } from 'node:http';
1
2
  import { ComputableFactory, Disconnect, MapperFactory, NormalizedData, ReplayNormalizedOptions, StreamNormalizedOptions } from 'tardis-dev';
2
3
  export type WithDataType = {
3
4
  dataTypes: string[];
@@ -12,4 +13,5 @@ export declare function getNormalizers(dataTypes: string[]): IterableIterator<Ma
12
13
  export declare function constructDataTypeFilter(options: (ReplayNormalizedOptionsWithDataType | StreamNormalizedOptionsWithDataType)[]): (message: NormalizedData | Disconnect) => any;
13
14
  export declare function getComputables(dataTypes: string[]): ComputableFactory<any>[];
14
15
  export declare const wait: (delayMS: number) => Promise<unknown>;
16
+ export declare const responseDrainedOrClosed: (res: OutgoingMessage) => Promise<void>;
15
17
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAGjB,UAAU,EACV,aAAa,EAEb,cAAc,EAKd,uBAAuB,EACvB,uBAAuB,EAExB,MAAM,YAAY,CAAA;AAEnB,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,EAAE,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,mCAAmC,GAAG,uBAAuB,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,YAAY,CAAA;AAElG,MAAM,MAAM,8BAA8B,GAAG,mCAAmC,GAAG,mCAAmC,EAAE,CAAA;AAExH,MAAM,MAAM,mCAAmC,GAAG,uBAAuB,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,YAAY,GAAG;IAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAEpI,MAAM,MAAM,8BAA8B,GAAG,mCAAmC,GAAG,mCAAmC,EAAE,CAAA;AAExH,wBAAiB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CA0B9F;AAmBD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,CAAC,mCAAmC,GAAG,mCAAmC,CAAC,EAAE,IAapH,SAAS,cAAc,GAAG,UAAU,SAO7C;AAwCD,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAkB5E;AAmGD,eAAO,MAAM,IAAI,GAAI,SAAS,MAAM,qBAA2D,CAAA"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAChD,OAAO,EACL,iBAAiB,EAGjB,UAAU,EACV,aAAa,EAEb,cAAc,EAKd,uBAAuB,EACvB,uBAAuB,EAExB,MAAM,YAAY,CAAA;AAEnB,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,EAAE,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,mCAAmC,GAAG,uBAAuB,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,YAAY,CAAA;AAElG,MAAM,MAAM,8BAA8B,GAAG,mCAAmC,GAAG,mCAAmC,EAAE,CAAA;AAExH,MAAM,MAAM,mCAAmC,GAAG,uBAAuB,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,YAAY,GAAG;IAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAEpI,MAAM,MAAM,8BAA8B,GAAG,mCAAmC,GAAG,mCAAmC,EAAE,CAAA;AAExH,wBAAiB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CA0B9F;AAmBD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,CAAC,mCAAmC,GAAG,mCAAmC,CAAC,EAAE,IAapH,SAAS,cAAc,GAAG,UAAU,SAO7C;AAwCD,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAkB5E;AAmGD,eAAO,MAAM,IAAI,GAAI,SAAS,MAAM,qBAA2D,CAAA;AAI/F,eAAO,MAAM,uBAAuB,GAAI,KAAK,eAAe,kBAUxD,CAAA"}
package/dist/helpers.js CHANGED
@@ -183,6 +183,17 @@ function parseAsQuoteComputable(dataType) {
183
183
  throw new Error(`invalid data type: ${dataType}`);
184
184
  }
185
185
  export const wait = (delayMS) => new Promise((resolve) => setTimeout(resolve, delayMS));
186
+ // 'drain' is never emitted after the client disconnects, so also stop waiting on 'close';
187
+ // both listeners are removed on either event, so repeated waits keep nothing alive
188
+ export const responseDrainedOrClosed = (res) => new Promise((resolve) => {
189
+ const done = () => {
190
+ res.off('drain', done);
191
+ res.off('close', done);
192
+ resolve();
193
+ };
194
+ res.on('drain', done);
195
+ res.on('close', done);
196
+ });
186
197
  const oldToISOString = Date.prototype.toISOString;
187
198
  // if Date provides microseconds add those to ISO date
188
199
  Date.prototype.toISOString = function () {
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../src/http/replay.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAmB,cAAc,EAAE,MAAM,WAAW,CAAA;AAIjF,eAAO,MAAM,UAAU,GAAU,KAAK,eAAe,EAAE,KAAK,cAAc,kBAiCzE,CAAA"}
1
+ {"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../src/http/replay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAmB,cAAc,EAAE,MAAM,WAAW,CAAA;AAKjF,eAAO,MAAM,UAAU,GAAU,KAAK,eAAe,EAAE,KAAK,cAAc,kBAiCzE,CAAA"}
@@ -1,6 +1,6 @@
1
- import { once } from 'node:events';
2
1
  import { replay } from 'tardis-dev';
3
2
  import { debug } from "../debug.js";
3
+ import { responseDrainedOrClosed } from "../helpers.js";
4
4
  export const replayHttp = async (req, res) => {
5
5
  try {
6
6
  const startTimestamp = new Date().getTime();
@@ -36,8 +36,17 @@ async function writeMessagesToResponse(res, replayOptions) {
36
36
  res.setHeader('Content-Type', 'application/x-json-stream');
37
37
  let buffers = [];
38
38
  let totalMessagesCount = 0;
39
+ // 'close' is emitted when the response completes or when the client disconnects before that
40
+ let responseClosed = false;
41
+ res.once('close', () => {
42
+ responseClosed = true;
43
+ });
39
44
  const messages = replay({ ...replayOptions, skipDecoding: true });
40
45
  for await (let messageWithTimestamp of messages) {
46
+ // stop the replay when the client has disconnected
47
+ if (responseClosed) {
48
+ break;
49
+ }
41
50
  totalMessagesCount++;
42
51
  if (messageWithTimestamp === undefined) {
43
52
  // if received message is undefined (disconnect)
@@ -53,7 +62,10 @@ async function writeMessagesToResponse(res, replayOptions) {
53
62
  const ok = res.write(Buffer.concat(buffers));
54
63
  buffers = [];
55
64
  if (!ok) {
56
- await once(res, 'drain');
65
+ await responseDrainedOrClosed(res);
66
+ if (responseClosed) {
67
+ break;
68
+ }
57
69
  }
58
70
  }
59
71
  }
@@ -1 +1 @@
1
- {"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/http/replay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/http/replay.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"replaynormalized.d.ts","sourceRoot":"","sources":["../../src/http/replaynormalized.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAmB,cAAc,EAAE,MAAM,WAAW,CAAA;AAKjF,eAAO,MAAM,oBAAoB,GAAU,KAAK,eAAe,EAAE,KAAK,cAAc,kBAiCnF,CAAA"}
1
+ {"version":3,"file":"replaynormalized.d.ts","sourceRoot":"","sources":["../../src/http/replaynormalized.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAmB,cAAc,EAAE,MAAM,WAAW,CAAA;AAWjF,eAAO,MAAM,oBAAoB,GAAU,KAAK,eAAe,EAAE,KAAK,cAAc,kBAiCnF,CAAA"}
@@ -1,7 +1,6 @@
1
- import { once } from 'node:events';
2
1
  import { combine, compute, replayNormalized } from 'tardis-dev';
3
2
  import { debug } from "../debug.js";
4
- import { constructDataTypeFilter, getComputables, getNormalizers } from "../helpers.js";
3
+ import { constructDataTypeFilter, getComputables, getNormalizers, responseDrainedOrClosed } from "../helpers.js";
5
4
  export const replayNormalizedHttp = async (req, res) => {
6
5
  try {
7
6
  const startTimestamp = new Date().getTime();
@@ -32,6 +31,11 @@ async function writeMessagesToResponse(res, options) {
32
31
  res.setHeader('Content-Type', 'application/x-json-stream');
33
32
  let buffers = [];
34
33
  let totalMessagesCount = 0;
34
+ // 'close' is emitted when the response completes or when the client disconnects before that
35
+ let responseClosed = false;
36
+ res.once('close', () => {
37
+ responseClosed = true;
38
+ });
35
39
  const replayNormalizedOptions = Array.isArray(options) ? options : [options];
36
40
  const messagesIterables = replayNormalizedOptions.map((option) => {
37
41
  // let's map from provided options to options and normalizers that needs to be added for dataTypes provided in options
@@ -46,6 +50,10 @@ async function writeMessagesToResponse(res, options) {
46
50
  const filterByDataType = constructDataTypeFilter(replayNormalizedOptions);
47
51
  const messages = messagesIterables.length === 1 ? messagesIterables[0] : combine(...messagesIterables);
48
52
  for await (const message of messages) {
53
+ // stop the replay when the client has disconnected
54
+ if (responseClosed) {
55
+ break;
56
+ }
49
57
  // filter out messages not explicitly requested via options.dataTypes
50
58
  // eg.: return only book_snapshots when someone asked only for those
51
59
  // as by default also book_changes are returned as well
@@ -58,7 +66,10 @@ async function writeMessagesToResponse(res, options) {
58
66
  const ok = res.write(`${buffers.join('\n')}\n`);
59
67
  buffers = [];
60
68
  if (!ok) {
61
- await once(res, 'drain');
69
+ await responseDrainedOrClosed(res);
70
+ if (responseClosed) {
71
+ break;
72
+ }
62
73
  }
63
74
  }
64
75
  }
@@ -1 +1 @@
1
- {"version":3,"file":"replaynormalized.js","sourceRoot":"","sources":["../../src/http/replaynormalized.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"replaynormalized.js","sourceRoot":"","sources":["../../src/http/replaynormalized.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"hyperliquid.d.ts","sourceRoot":"","sources":["../../src/mappers/hyperliquid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAM7E,eAAO,MAAM,kBAAkB;;;;;;;CAU7B,CAAA"}
1
+ {"version":3,"file":"hyperliquid.d.ts","sourceRoot":"","sources":["../../src/mappers/hyperliquid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAQ7E,eAAO,MAAM,kBAAkB;;;;;;;CAU7B,CAAA"}
@@ -1,6 +1,8 @@
1
1
  import { PendingTickerInfoHelper } from "./mapper.js";
2
2
  import { exchangeMappers, mapper } from "./registry.js";
3
3
  const HYPERLIQUID_FAST_BOOK_SWITCH_DATE = new Date('2026-06-17T00:00:00.000Z');
4
+ // recorded live trades arrive within seconds of their block time (at most 13 s in sampled days of 2024-2026)
5
+ const HYPERLIQUID_MAX_LIVE_TRADE_DELAY_MS = 30 * 1000;
4
6
  export const hyperliquidMappers = exchangeMappers({
5
7
  hyperliquid: {
6
8
  trades: () => new HyperliquidTradesMapper(),
@@ -31,7 +33,6 @@ function getSymbols(symbols) {
31
33
  return;
32
34
  }
33
35
  class HyperliquidTradesMapper {
34
- _seenSymbols = new Set();
35
36
  canHandle(message) {
36
37
  return message.channel === 'trades';
37
38
  }
@@ -45,11 +46,16 @@ class HyperliquidTradesMapper {
45
46
  ];
46
47
  }
47
48
  *map(message, localTimestamp) {
49
+ // A live message carries the trades of one block, which share one time. After subscribing, Hyperliquid
50
+ // sends the most recent trades as one message. That recent-trades snapshot is skipped: it has different
51
+ // trade times, or, when its trades come from one block, that block is older than any live trade.
52
+ const firstTradeTime = message.data[0]?.time;
53
+ const isRecentTradesSnapshot = message.data.some((hyperliquidTrade) => hyperliquidTrade.time !== firstTradeTime) ||
54
+ localTimestamp.valueOf() - firstTradeTime > HYPERLIQUID_MAX_LIVE_TRADE_DELAY_MS;
55
+ if (isRecentTradesSnapshot) {
56
+ return;
57
+ }
48
58
  for (const hyperliquidTrade of message.data) {
49
- if (this._seenSymbols.has(hyperliquidTrade.coin) === false) {
50
- this._seenSymbols.add(hyperliquidTrade.coin);
51
- break;
52
- }
53
59
  yield {
54
60
  type: 'trade',
55
61
  symbol: hyperliquidTrade.coin.toUpperCase(),
@@ -1 +1 @@
1
- {"version":3,"file":"hyperliquid.js","sourceRoot":"","sources":["../../src/mappers/hyperliquid.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hyperliquid.js","sourceRoot":"","sources":["../../src/mappers/hyperliquid.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tardis-dev",
3
- "version": "18.8.0",
3
+ "version": "18.8.1",
4
4
  "engines": {
5
5
  "node": "^24.22.1 || >=26.12.1"
6
6
  },
@@ -3,6 +3,8 @@ import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
3
3
  import { exchangeMappers, mapper } from './registry.ts'
4
4
 
5
5
  const HYPERLIQUID_FAST_BOOK_SWITCH_DATE = new Date('2026-06-17T00:00:00.000Z')
6
+ // recorded live trades arrive within seconds of their block time (at most 13 s in sampled days of 2024-2026)
7
+ const HYPERLIQUID_MAX_LIVE_TRADE_DELAY_MS = 30 * 1000
6
8
 
7
9
  export const hyperliquidMappers = exchangeMappers({
8
10
  hyperliquid: {
@@ -38,8 +40,6 @@ function getSymbols(symbols?: string[]) {
38
40
  return
39
41
  }
40
42
  class HyperliquidTradesMapper implements Mapper<'hyperliquid', Trade> {
41
- private readonly _seenSymbols = new Set<string>()
42
-
43
43
  canHandle(message: HyperliquidTradeMessage) {
44
44
  return message.channel === 'trades'
45
45
  }
@@ -56,11 +56,19 @@ class HyperliquidTradesMapper implements Mapper<'hyperliquid', Trade> {
56
56
  }
57
57
 
58
58
  *map(message: HyperliquidTradeMessage, localTimestamp: Date): IterableIterator<Trade> {
59
+ // A live message carries the trades of one block, which share one time. After subscribing, Hyperliquid
60
+ // sends the most recent trades as one message. That recent-trades snapshot is skipped: it has different
61
+ // trade times, or, when its trades come from one block, that block is older than any live trade.
62
+ const firstTradeTime = message.data[0]?.time
63
+ const isRecentTradesSnapshot =
64
+ message.data.some((hyperliquidTrade) => hyperliquidTrade.time !== firstTradeTime) ||
65
+ localTimestamp.valueOf() - firstTradeTime > HYPERLIQUID_MAX_LIVE_TRADE_DELAY_MS
66
+
67
+ if (isRecentTradesSnapshot) {
68
+ return
69
+ }
70
+
59
71
  for (const hyperliquidTrade of message.data) {
60
- if (this._seenSymbols.has(hyperliquidTrade.coin) === false) {
61
- this._seenSymbols.add(hyperliquidTrade.coin)
62
- break
63
- }
64
72
  yield {
65
73
  type: 'trade',
66
74
  symbol: hyperliquidTrade.coin.toUpperCase(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tardis-machine",
3
- "version": "18.8.0",
3
+ "version": "18.8.1",
4
4
  "engines": {
5
5
  "node": "^24.22.1 || >=26.12.1"
6
6
  },
@@ -76,7 +76,7 @@
76
76
  "license": "MPL-2.0",
77
77
  "dependencies": {
78
78
  "debug": "^4.4.3",
79
- "tardis-dev": "^18.8.0",
79
+ "tardis-dev": "^18.8.1",
80
80
  "ws": "^8.21.3"
81
81
  },
82
82
  "bundleDependencies": true,
package/src/helpers.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { OutgoingMessage } from 'node:http'
1
2
  import {
2
3
  ComputableFactory,
3
4
  computeBookSnapshots,
@@ -251,6 +252,20 @@ function parseAsQuoteComputable(dataType: string) {
251
252
 
252
253
  export const wait = (delayMS: number) => new Promise((resolve) => setTimeout(resolve, delayMS))
253
254
 
255
+ // 'drain' is never emitted after the client disconnects, so also stop waiting on 'close';
256
+ // both listeners are removed on either event, so repeated waits keep nothing alive
257
+ export const responseDrainedOrClosed = (res: OutgoingMessage) =>
258
+ new Promise<void>((resolve) => {
259
+ const done = () => {
260
+ res.off('drain', done)
261
+ res.off('close', done)
262
+ resolve()
263
+ }
264
+
265
+ res.on('drain', done)
266
+ res.on('close', done)
267
+ })
268
+
254
269
  const oldToISOString = Date.prototype.toISOString
255
270
 
256
271
  // if Date provides microseconds add those to ISO date
@@ -1,7 +1,7 @@
1
- import { once } from 'node:events'
2
1
  import type { IncomingMessage, OutgoingMessage, ServerResponse } from 'node:http'
3
2
  import { replay, ReplayOptions } from 'tardis-dev'
4
3
  import { debug } from '../debug.ts'
4
+ import { responseDrainedOrClosed } from '../helpers.ts'
5
5
 
6
6
  export const replayHttp = async (req: IncomingMessage, res: ServerResponse) => {
7
7
  try {
@@ -51,9 +51,20 @@ async function writeMessagesToResponse(res: OutgoingMessage, replayOptions: Repl
51
51
  let buffers: Buffer[] = []
52
52
  let totalMessagesCount = 0
53
53
 
54
+ // 'close' is emitted when the response completes or when the client disconnects before that
55
+ let responseClosed = false
56
+ res.once('close', () => {
57
+ responseClosed = true
58
+ })
59
+
54
60
  const messages = replay({ ...replayOptions, skipDecoding: true })
55
61
 
56
62
  for await (let messageWithTimestamp of messages) {
63
+ // stop the replay when the client has disconnected
64
+ if (responseClosed) {
65
+ break
66
+ }
67
+
57
68
  totalMessagesCount++
58
69
 
59
70
  if (messageWithTimestamp === undefined) {
@@ -77,7 +88,11 @@ async function writeMessagesToResponse(res: OutgoingMessage, replayOptions: Repl
77
88
  buffers = []
78
89
 
79
90
  if (!ok) {
80
- await once(res, 'drain')
91
+ await responseDrainedOrClosed(res)
92
+
93
+ if (responseClosed) {
94
+ break
95
+ }
81
96
  }
82
97
  }
83
98
  }
@@ -1,8 +1,13 @@
1
- import { once } from 'node:events'
2
1
  import type { IncomingMessage, OutgoingMessage, ServerResponse } from 'node:http'
3
2
  import { combine, compute, replayNormalized } from 'tardis-dev'
4
3
  import { debug } from '../debug.ts'
5
- import { constructDataTypeFilter, getComputables, getNormalizers, ReplayNormalizedRequestOptions } from '../helpers.ts'
4
+ import {
5
+ constructDataTypeFilter,
6
+ getComputables,
7
+ getNormalizers,
8
+ ReplayNormalizedRequestOptions,
9
+ responseDrainedOrClosed
10
+ } from '../helpers.ts'
6
11
 
7
12
  export const replayNormalizedHttp = async (req: IncomingMessage, res: ServerResponse) => {
8
13
  try {
@@ -47,6 +52,12 @@ async function writeMessagesToResponse(res: OutgoingMessage, options: ReplayNorm
47
52
  let buffers: string[] = []
48
53
  let totalMessagesCount = 0
49
54
 
55
+ // 'close' is emitted when the response completes or when the client disconnects before that
56
+ let responseClosed = false
57
+ res.once('close', () => {
58
+ responseClosed = true
59
+ })
60
+
50
61
  const replayNormalizedOptions = Array.isArray(options) ? options : [options]
51
62
 
52
63
  const messagesIterables = replayNormalizedOptions.map((option) => {
@@ -67,6 +78,11 @@ async function writeMessagesToResponse(res: OutgoingMessage, options: ReplayNorm
67
78
  const messages = messagesIterables.length === 1 ? messagesIterables[0] : combine(...messagesIterables)
68
79
 
69
80
  for await (const message of messages) {
81
+ // stop the replay when the client has disconnected
82
+ if (responseClosed) {
83
+ break
84
+ }
85
+
70
86
  // filter out messages not explicitly requested via options.dataTypes
71
87
  // eg.: return only book_snapshots when someone asked only for those
72
88
  // as by default also book_changes are returned as well
@@ -83,7 +99,11 @@ async function writeMessagesToResponse(res: OutgoingMessage, options: ReplayNorm
83
99
  buffers = []
84
100
 
85
101
  if (!ok) {
86
- await once(res, 'drain')
102
+ await responseDrainedOrClosed(res)
103
+
104
+ if (responseClosed) {
105
+ break
106
+ }
87
107
  }
88
108
  }
89
109
  }