@replit/river 0.24.3 → 0.25.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 (63) hide show
  1. package/dist/{chunk-XKHLA5MP.js → chunk-4GCILF7L.js} +4 -4
  2. package/dist/{chunk-DZNP3EI5.js → chunk-6NPQ43ZP.js} +2 -2
  3. package/dist/{chunk-DZNP3EI5.js.map → chunk-6NPQ43ZP.js.map} +1 -1
  4. package/dist/{chunk-EHXKU4TW.js → chunk-BMSEVPGM.js} +2 -2
  5. package/dist/{chunk-FKBXIWWN.js → chunk-FEMGSUEE.js} +3 -3
  6. package/dist/{chunk-LSHUPI6U.js → chunk-JTZVFCMT.js} +2 -2
  7. package/dist/{chunk-W3CY6PNC.js → chunk-N2UT2H2D.js} +28 -23
  8. package/dist/chunk-N2UT2H2D.js.map +1 -0
  9. package/dist/{chunk-KVLCQ24J.js → chunk-XVGZYVNR.js} +34 -13
  10. package/dist/chunk-XVGZYVNR.js.map +1 -0
  11. package/dist/{client-2ba72e89.d.ts → client-1321630c.d.ts} +1 -1
  12. package/dist/{connection-55cba970.d.ts → connection-bd907ca6.d.ts} +1 -1
  13. package/dist/{handshake-0b88e8fc.d.ts → handshake-3772d7ca.d.ts} +4 -2
  14. package/dist/router/index.cjs +1 -1
  15. package/dist/router/index.cjs.map +1 -1
  16. package/dist/router/index.d.cts +7 -7
  17. package/dist/router/index.d.ts +7 -7
  18. package/dist/router/index.js +2 -2
  19. package/dist/{server-732e7014.d.ts → server-f0fd2b98.d.ts} +1 -1
  20. package/dist/{services-adfd0bc3.d.ts → services-8d14ae16.d.ts} +2 -2
  21. package/dist/transport/impls/ws/client.cjs +33 -12
  22. package/dist/transport/impls/ws/client.cjs.map +1 -1
  23. package/dist/transport/impls/ws/client.d.cts +3 -3
  24. package/dist/transport/impls/ws/client.d.ts +3 -3
  25. package/dist/transport/impls/ws/client.js +7 -7
  26. package/dist/transport/impls/ws/server.cjs +57 -31
  27. package/dist/transport/impls/ws/server.cjs.map +1 -1
  28. package/dist/transport/impls/ws/server.d.cts +3 -3
  29. package/dist/transport/impls/ws/server.d.ts +3 -3
  30. package/dist/transport/impls/ws/server.js +5 -5
  31. package/dist/transport/index.cjs +57 -31
  32. package/dist/transport/index.cjs.map +1 -1
  33. package/dist/transport/index.d.cts +3 -3
  34. package/dist/transport/index.d.ts +3 -3
  35. package/dist/transport/index.js +7 -7
  36. package/dist/util/testHelpers.cjs +33 -27
  37. package/dist/util/testHelpers.cjs.map +1 -1
  38. package/dist/util/testHelpers.d.cts +4 -7
  39. package/dist/util/testHelpers.d.ts +4 -7
  40. package/dist/util/testHelpers.js +3 -14
  41. package/dist/util/testHelpers.js.map +1 -1
  42. package/package.json +1 -1
  43. package/dist/chunk-KVLCQ24J.js.map +0 -1
  44. package/dist/chunk-TDFWZIXR.js +0 -106
  45. package/dist/chunk-TDFWZIXR.js.map +0 -1
  46. package/dist/chunk-W3CY6PNC.js.map +0 -1
  47. package/dist/connection-c6db05d9.d.ts +0 -31
  48. package/dist/transport/impls/uds/client.cjs +0 -1684
  49. package/dist/transport/impls/uds/client.cjs.map +0 -1
  50. package/dist/transport/impls/uds/client.d.cts +0 -18
  51. package/dist/transport/impls/uds/client.d.ts +0 -18
  52. package/dist/transport/impls/uds/client.js +0 -38
  53. package/dist/transport/impls/uds/client.js.map +0 -1
  54. package/dist/transport/impls/uds/server.cjs +0 -1650
  55. package/dist/transport/impls/uds/server.cjs.map +0 -1
  56. package/dist/transport/impls/uds/server.d.cts +0 -19
  57. package/dist/transport/impls/uds/server.d.ts +0 -19
  58. package/dist/transport/impls/uds/server.js +0 -33
  59. package/dist/transport/impls/uds/server.js.map +0 -1
  60. /package/dist/{chunk-XKHLA5MP.js.map → chunk-4GCILF7L.js.map} +0 -0
  61. /package/dist/{chunk-EHXKU4TW.js.map → chunk-BMSEVPGM.js.map} +0 -0
  62. /package/dist/{chunk-FKBXIWWN.js.map → chunk-FEMGSUEE.js.map} +0 -0
  63. /package/dist/{chunk-LSHUPI6U.js.map → chunk-JTZVFCMT.js.map} +0 -0
@@ -1,7 +1,7 @@
1
- import { C as ClientTransport } from '../../../client-2ba72e89.js';
1
+ import { C as ClientTransport } from '../../../client-1321630c.js';
2
2
  import { c as TransportClientId } from '../../../message-e6c560fd.js';
3
- import { b as ProvidedClientTransportOptions } from '../../../handshake-0b88e8fc.js';
4
- import { W as WebSocketConnection } from '../../../connection-55cba970.js';
3
+ import { b as ProvidedClientTransportOptions } from '../../../handshake-3772d7ca.js';
4
+ import { W as WebSocketConnection } from '../../../connection-bd907ca6.js';
5
5
  import { W as WsLike } from '../../../wslike-e0b32dd5.js';
6
6
  import '@sinclair/typebox/value';
7
7
  import '@sinclair/typebox';
@@ -1,7 +1,7 @@
1
- import { C as ClientTransport } from '../../../client-2ba72e89.js';
1
+ import { C as ClientTransport } from '../../../client-1321630c.js';
2
2
  import { c as TransportClientId } from '../../../message-e6c560fd.js';
3
- import { b as ProvidedClientTransportOptions } from '../../../handshake-0b88e8fc.js';
4
- import { W as WebSocketConnection } from '../../../connection-55cba970.js';
3
+ import { b as ProvidedClientTransportOptions } from '../../../handshake-3772d7ca.js';
4
+ import { W as WebSocketConnection } from '../../../connection-bd907ca6.js';
5
5
  import { W as WsLike } from '../../../wslike-e0b32dd5.js';
6
6
  import '@sinclair/typebox/value';
7
7
  import '@sinclair/typebox';
@@ -1,13 +1,13 @@
1
- import {
2
- WebSocketConnection
3
- } from "../../../chunk-EHXKU4TW.js";
4
1
  import {
5
2
  ClientTransport
6
- } from "../../../chunk-XKHLA5MP.js";
7
- import "../../../chunk-FKBXIWWN.js";
3
+ } from "../../../chunk-4GCILF7L.js";
4
+ import {
5
+ WebSocketConnection
6
+ } from "../../../chunk-BMSEVPGM.js";
7
+ import "../../../chunk-FEMGSUEE.js";
8
8
  import "../../../chunk-TAH2GVTJ.js";
9
- import "../../../chunk-KVLCQ24J.js";
10
- import "../../../chunk-DZNP3EI5.js";
9
+ import "../../../chunk-XVGZYVNR.js";
10
+ import "../../../chunk-6NPQ43ZP.js";
11
11
  import "../../../chunk-4PVU7J25.js";
12
12
 
13
13
  // transport/impls/ws/client.ts
@@ -635,7 +635,7 @@ var SessionNoConnection = class extends IdentifiedSession {
635
635
  var import_api = require("@opentelemetry/api");
636
636
 
637
637
  // package.json
638
- var version = "0.24.3";
638
+ var version = "0.25.0";
639
639
 
640
640
  // tracing/index.ts
641
641
  function createSessionTelemetryInfo(sessionId, to, from, propagationCtx) {
@@ -750,15 +750,16 @@ var SessionConnected = class extends IdentifiedSession {
750
750
  state = "Connected" /* Connected */;
751
751
  conn;
752
752
  listeners;
753
- heartbeatHandle;
754
- heartbeatMisses = 0;
753
+ activeHeartbeatHandle;
754
+ activeHeartbeatMisses = 0;
755
+ passiveHeartbeatHandle;
755
756
  get isActivelyHeartbeating() {
756
- return this.heartbeatHandle !== void 0;
757
+ return this.activeHeartbeatHandle !== void 0;
757
758
  }
758
759
  updateBookkeeping(ack, seq) {
759
760
  this.sendBuffer = this.sendBuffer.filter((unacked) => unacked.seq >= ack);
760
761
  this.ack = seq + 1;
761
- this.heartbeatMisses = 0;
762
+ this.activeHeartbeatMisses = 0;
762
763
  }
763
764
  send(msg) {
764
765
  const constructedMsg = this.constructMsg(msg);
@@ -784,8 +785,8 @@ var SessionConnected = class extends IdentifiedSession {
784
785
  }
785
786
  }
786
787
  startActiveHeartbeat() {
787
- this.heartbeatHandle = setInterval(() => {
788
- const misses = this.heartbeatMisses;
788
+ this.activeHeartbeatHandle = setInterval(() => {
789
+ const misses = this.activeHeartbeatMisses;
789
790
  const missDuration = misses * this.options.heartbeatIntervalMs;
790
791
  if (misses >= this.options.heartbeatsUntilDead) {
791
792
  this.log?.info(
@@ -794,15 +795,32 @@ var SessionConnected = class extends IdentifiedSession {
794
795
  );
795
796
  this.telemetry.span.addEvent("closing connection due to inactivity");
796
797
  this.conn.close();
797
- clearInterval(this.heartbeatHandle);
798
- this.heartbeatHandle = void 0;
798
+ clearInterval(this.activeHeartbeatHandle);
799
+ this.activeHeartbeatHandle = void 0;
799
800
  return;
800
801
  }
801
802
  this.sendHeartbeat();
802
- this.heartbeatMisses++;
803
+ this.activeHeartbeatMisses++;
803
804
  }, this.options.heartbeatIntervalMs);
804
805
  }
806
+ waitForNextHeartbeat() {
807
+ const duration = this.options.heartbeatsUntilDead * this.options.heartbeatIntervalMs;
808
+ if (this.passiveHeartbeatHandle) {
809
+ clearTimeout(this.passiveHeartbeatHandle);
810
+ this.passiveHeartbeatHandle = void 0;
811
+ }
812
+ this.passiveHeartbeatHandle = setTimeout(() => {
813
+ this.log?.info(
814
+ `closing connection to ${this.to} due to not receiving a heartbeat in the last ${duration}ms`,
815
+ this.loggingMetadata
816
+ );
817
+ this.telemetry.span.addEvent("closing connection due to inactivity");
818
+ this.conn.close();
819
+ this.passiveHeartbeatHandle = void 0;
820
+ }, duration);
821
+ }
805
822
  sendHeartbeat() {
823
+ this.log?.debug("sending heartbeat", this.loggingMetadata);
806
824
  this.send({
807
825
  streamId: "heartbeat",
808
826
  controlFlags: 1 /* AckBit */,
@@ -854,6 +872,7 @@ var SessionConnected = class extends IdentifiedSession {
854
872
  });
855
873
  if (!this.isActivelyHeartbeating) {
856
874
  this.sendHeartbeat();
875
+ this.waitForNextHeartbeat();
857
876
  }
858
877
  };
859
878
  _handleStateExit() {
@@ -861,8 +880,10 @@ var SessionConnected = class extends IdentifiedSession {
861
880
  this.conn.removeDataListener(this.onMessageData);
862
881
  this.conn.removeCloseListener(this.listeners.onConnectionClosed);
863
882
  this.conn.removeErrorListener(this.listeners.onConnectionErrored);
864
- clearInterval(this.heartbeatHandle);
865
- this.heartbeatHandle = void 0;
883
+ clearInterval(this.activeHeartbeatHandle);
884
+ clearTimeout(this.passiveHeartbeatHandle);
885
+ this.activeHeartbeatHandle = void 0;
886
+ this.passiveHeartbeatHandle = void 0;
866
887
  }
867
888
  _handleClose() {
868
889
  super._handleClose();
@@ -1396,10 +1417,10 @@ var ServerTransport = class extends Transport {
1396
1417
  return;
1397
1418
  }
1398
1419
  let connectCase = "new session";
1420
+ const clientNextExpectedSeq = msg.payload.expectedSessionState.nextExpectedSeq;
1421
+ const clientNextSentSeq = msg.payload.expectedSessionState.nextSentSeq ?? 0;
1399
1422
  if (oldSession && oldSession.id === msg.payload.sessionId) {
1400
1423
  connectCase = "transparent reconnection";
1401
- const clientNextExpectedSeq = msg.payload.expectedSessionState.nextExpectedSeq;
1402
- const clientNextSentSeq = msg.payload.expectedSessionState.nextSentSeq ?? 0;
1403
1424
  const ourNextSeq = oldSession.nextSeq();
1404
1425
  const ourAck = oldSession.ack;
1405
1426
  if (clientNextSentSeq > ourAck) {
@@ -1455,26 +1476,31 @@ var ServerTransport = class extends Transport {
1455
1476
  this.updateSession(oldSession);
1456
1477
  } else if (oldSession) {
1457
1478
  connectCase = "hard reconnection";
1479
+ this.log?.info(
1480
+ `client is reconnecting to a new session (${msg.payload.sessionId}) with an old session (${oldSession.id}) already existing, closing old session`,
1481
+ {
1482
+ ...session.loggingMetadata,
1483
+ connectedTo: msg.from,
1484
+ sessionId: msg.payload.sessionId
1485
+ }
1486
+ );
1458
1487
  this.deleteSession(oldSession);
1459
1488
  oldSession = void 0;
1460
- } else {
1489
+ }
1490
+ if (!oldSession && (clientNextSentSeq > 0 || clientNextExpectedSeq > 0)) {
1461
1491
  connectCase = "unknown session";
1462
- const clientNextExpectedSeq = msg.payload.expectedSessionState.nextExpectedSeq;
1463
- const clientNextSentSeq = msg.payload.expectedSessionState.nextSentSeq ?? 0;
1464
- if (clientNextSentSeq > 0 || clientNextExpectedSeq > 0) {
1465
- this.rejectHandshakeRequest(
1466
- session,
1467
- msg.from,
1468
- `client is trying to reconnect to a session the server don't know about: ${msg.payload.sessionId}`,
1469
- "SESSION_STATE_MISMATCH",
1470
- {
1471
- ...session.loggingMetadata,
1472
- connectedTo: msg.from,
1473
- transportMessage: msg
1474
- }
1475
- );
1476
- return;
1477
- }
1492
+ this.rejectHandshakeRequest(
1493
+ session,
1494
+ msg.from,
1495
+ `client is trying to reconnect to a session the server don't know about: ${msg.payload.sessionId}`,
1496
+ "SESSION_STATE_MISMATCH",
1497
+ {
1498
+ ...session.loggingMetadata,
1499
+ connectedTo: msg.from,
1500
+ transportMessage: msg
1501
+ }
1502
+ );
1503
+ return;
1478
1504
  }
1479
1505
  const sessionId = msg.payload.sessionId;
1480
1506
  this.log?.info(