@thru/replay 0.2.4 → 0.2.5

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/index.cjs CHANGED
@@ -588,7 +588,10 @@ var ReplayStream = class {
588
588
  };
589
589
  async function safeClose(pump) {
590
590
  try {
591
- await pump.close();
591
+ await Promise.race([
592
+ pump.close(),
593
+ new Promise((resolve) => setTimeout(resolve, 5e3))
594
+ ]);
592
595
  } catch {
593
596
  }
594
597
  }
@@ -1075,6 +1078,7 @@ async function* createAccountsByOwnerReplay(options) {
1075
1078
  const streamBuffer = [];
1076
1079
  let streamDone = false;
1077
1080
  let streamError = null;
1081
+ let lastActivityTime = Date.now();
1078
1082
  try {
1079
1083
  cleanupTimer = setInterval(() => {
1080
1084
  assembler.cleanup();
@@ -1084,6 +1088,7 @@ async function* createAccountsByOwnerReplay(options) {
1084
1088
  const streamProcessor = (async () => {
1085
1089
  try {
1086
1090
  for await (const response of stream) {
1091
+ lastActivityTime = Date.now();
1087
1092
  const event = processResponseMulti(response, assembler);
1088
1093
  if (event) {
1089
1094
  if (event.type === "account") {
@@ -1173,6 +1178,7 @@ async function* createAccountsByOwnerReplay(options) {
1173
1178
  let retryAttempt = 0;
1174
1179
  let currentStream = stream;
1175
1180
  let currentStreamProcessor = streamProcessor;
1181
+ lastActivityTime = Date.now();
1176
1182
  const createStreamProcessor = () => {
1177
1183
  if (clientFactory) {
1178
1184
  try {
@@ -1188,6 +1194,7 @@ async function* createAccountsByOwnerReplay(options) {
1188
1194
  try {
1189
1195
  for await (const response of newStream) {
1190
1196
  retryAttempt = 0;
1197
+ lastActivityTime = Date.now();
1191
1198
  const event = processResponseMulti(response, assembler);
1192
1199
  if (event) {
1193
1200
  if (event.type === "account") {
@@ -1208,7 +1215,18 @@ async function* createAccountsByOwnerReplay(options) {
1208
1215
  return { stream: newStream, processor: newProcessor };
1209
1216
  };
1210
1217
  while (true) {
1218
+ const hadEvents = streamBuffer.length > 0;
1211
1219
  yield* yieldStreamBuffer();
1220
+ if (hadEvents) {
1221
+ lastActivityTime = Date.now();
1222
+ }
1223
+ if (!streamDone && Date.now() - lastActivityTime > retryConfig.connectionTimeoutMs) {
1224
+ logger.warn(
1225
+ `[account-stream] no activity for ${retryConfig.connectionTimeoutMs}ms; forcing reconnection`
1226
+ );
1227
+ streamDone = true;
1228
+ streamError = new Error(`Operation timed out after ${retryConfig.connectionTimeoutMs}ms`);
1229
+ }
1212
1230
  if (streamDone) {
1213
1231
  if (streamError) {
1214
1232
  const backoffMs = calculateBackoff(retryAttempt, retryConfig);
@@ -1220,6 +1238,7 @@ async function* createAccountsByOwnerReplay(options) {
1220
1238
  streamDone = false;
1221
1239
  streamError = null;
1222
1240
  streamBuffer.length = 0;
1241
+ lastActivityTime = Date.now();
1223
1242
  const { stream: newStream, processor: newProcessor } = createStreamProcessor();
1224
1243
  currentStream = newStream;
1225
1244
  currentStreamProcessor = newProcessor;
@@ -1227,6 +1246,7 @@ async function* createAccountsByOwnerReplay(options) {
1227
1246
  } else {
1228
1247
  logger.warn("[account-stream] stream ended unexpectedly; reconnecting...");
1229
1248
  streamDone = false;
1249
+ lastActivityTime = Date.now();
1230
1250
  const { stream: newStream, processor: newProcessor } = createStreamProcessor();
1231
1251
  currentStream = newStream;
1232
1252
  currentStreamProcessor = newProcessor;