@replit/river 0.23.18 → 0.24.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.
Files changed (84) hide show
  1. package/README.md +17 -16
  2. package/dist/chunk-227EQHH5.js +653 -0
  3. package/dist/chunk-227EQHH5.js.map +1 -0
  4. package/dist/chunk-6YFPHVNO.js +277 -0
  5. package/dist/chunk-6YFPHVNO.js.map +1 -0
  6. package/dist/{chunk-7MJYOL32.js → chunk-BGJDNLTJ.js} +15 -23
  7. package/dist/chunk-BGJDNLTJ.js.map +1 -0
  8. package/dist/chunk-HXOQQXL4.js +382 -0
  9. package/dist/chunk-HXOQQXL4.js.map +1 -0
  10. package/dist/{chunk-R2HAS3GM.js → chunk-IYYQ7BII.js} +55 -41
  11. package/dist/chunk-IYYQ7BII.js.map +1 -0
  12. package/dist/{chunk-AVL32IMG.js → chunk-L664A3WA.js} +20 -16
  13. package/dist/chunk-L664A3WA.js.map +1 -0
  14. package/dist/{chunk-EV5HW4IC.js → chunk-M7E6LQO2.js} +66 -53
  15. package/dist/chunk-M7E6LQO2.js.map +1 -0
  16. package/dist/{chunk-6LCL2ZZF.js → chunk-TAH2GVTJ.js} +1 -1
  17. package/dist/chunk-TAH2GVTJ.js.map +1 -0
  18. package/dist/chunk-XOFF3UPL.js +399 -0
  19. package/dist/chunk-XOFF3UPL.js.map +1 -0
  20. package/dist/{client-5776a6bb.d.ts → client-2ba72e89.d.ts} +12 -15
  21. package/dist/connection-55cba970.d.ts +11 -0
  22. package/dist/{connection-bd35d442.d.ts → connection-c6db05d9.d.ts} +1 -5
  23. package/dist/{handshake-a947c234.d.ts → handshake-0b88e8fc.d.ts} +150 -184
  24. package/dist/logging/index.cjs.map +1 -1
  25. package/dist/logging/index.d.cts +1 -1
  26. package/dist/logging/index.d.ts +1 -1
  27. package/dist/logging/index.js +1 -1
  28. package/dist/{index-ea74cdbb.d.ts → message-e6c560fd.d.ts} +2 -2
  29. package/dist/router/index.cjs +105 -63
  30. package/dist/router/index.cjs.map +1 -1
  31. package/dist/router/index.d.cts +11 -10
  32. package/dist/router/index.d.ts +11 -10
  33. package/dist/router/index.js +2 -2
  34. package/dist/server-732e7014.d.ts +42 -0
  35. package/dist/{services-38b3f758.d.ts → services-adfd0bc3.d.ts} +3 -3
  36. package/dist/transport/impls/uds/client.cjs +1246 -1230
  37. package/dist/transport/impls/uds/client.cjs.map +1 -1
  38. package/dist/transport/impls/uds/client.d.cts +4 -4
  39. package/dist/transport/impls/uds/client.d.ts +4 -4
  40. package/dist/transport/impls/uds/client.js +7 -13
  41. package/dist/transport/impls/uds/client.js.map +1 -1
  42. package/dist/transport/impls/uds/server.cjs +1298 -1151
  43. package/dist/transport/impls/uds/server.cjs.map +1 -1
  44. package/dist/transport/impls/uds/server.d.cts +4 -4
  45. package/dist/transport/impls/uds/server.d.ts +4 -4
  46. package/dist/transport/impls/uds/server.js +6 -6
  47. package/dist/transport/impls/ws/client.cjs +976 -965
  48. package/dist/transport/impls/ws/client.cjs.map +1 -1
  49. package/dist/transport/impls/ws/client.d.cts +4 -4
  50. package/dist/transport/impls/ws/client.d.ts +4 -4
  51. package/dist/transport/impls/ws/client.js +6 -7
  52. package/dist/transport/impls/ws/client.js.map +1 -1
  53. package/dist/transport/impls/ws/server.cjs +1182 -1047
  54. package/dist/transport/impls/ws/server.cjs.map +1 -1
  55. package/dist/transport/impls/ws/server.d.cts +4 -4
  56. package/dist/transport/impls/ws/server.d.ts +4 -4
  57. package/dist/transport/impls/ws/server.js +6 -6
  58. package/dist/transport/index.cjs +1433 -1360
  59. package/dist/transport/index.cjs.map +1 -1
  60. package/dist/transport/index.d.cts +5 -5
  61. package/dist/transport/index.d.ts +5 -5
  62. package/dist/transport/index.js +9 -9
  63. package/dist/util/testHelpers.cjs +744 -310
  64. package/dist/util/testHelpers.cjs.map +1 -1
  65. package/dist/util/testHelpers.d.cts +9 -6
  66. package/dist/util/testHelpers.d.ts +9 -6
  67. package/dist/util/testHelpers.js +34 -10
  68. package/dist/util/testHelpers.js.map +1 -1
  69. package/package.json +1 -1
  70. package/dist/chunk-6LCL2ZZF.js.map +0 -1
  71. package/dist/chunk-7MJYOL32.js.map +0 -1
  72. package/dist/chunk-AVL32IMG.js.map +0 -1
  73. package/dist/chunk-DPKOJQWF.js +0 -476
  74. package/dist/chunk-DPKOJQWF.js.map +0 -1
  75. package/dist/chunk-EV5HW4IC.js.map +0 -1
  76. package/dist/chunk-J6N6H2WU.js +0 -476
  77. package/dist/chunk-J6N6H2WU.js.map +0 -1
  78. package/dist/chunk-MW5JXLHY.js +0 -348
  79. package/dist/chunk-MW5JXLHY.js.map +0 -1
  80. package/dist/chunk-R2HAS3GM.js.map +0 -1
  81. package/dist/chunk-RJOWZIWB.js +0 -335
  82. package/dist/chunk-RJOWZIWB.js.map +0 -1
  83. package/dist/connection-df85db7e.d.ts +0 -17
  84. package/dist/server-53cd5b7e.d.ts +0 -24
@@ -612,7 +612,15 @@ function _pushable(getNext, options) {
612
612
 
613
613
  // transport/message.ts
614
614
  var import_typebox3 = require("@sinclair/typebox");
615
+
616
+ // transport/id.ts
615
617
  var import_nanoid = require("nanoid");
618
+ var alphabet = (0, import_nanoid.customAlphabet)(
619
+ "1234567890abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZ"
620
+ );
621
+ var generateId = () => alphabet(12);
622
+
623
+ // transport/message.ts
616
624
  var TransportMessageSchema = (t) => import_typebox3.Type.Object({
617
625
  id: import_typebox3.Type.String(),
618
626
  from: import_typebox3.Type.String(),
@@ -646,18 +654,29 @@ var ControlMessageHandshakeRequestSchema = import_typebox3.Type.Object({
646
654
  * used by the server to know whether this is a new or a reestablished connection, and whether it
647
655
  * is compatible with what it already has.
648
656
  */
649
- expectedSessionState: import_typebox3.Type.Optional(
650
- import_typebox3.Type.Object({
651
- /**
652
- * reconnect is set to true if the client explicitly wants to reestablish an existing
653
- * connection.
654
- */
655
- reconnect: import_typebox3.Type.Boolean(),
656
- nextExpectedSeq: import_typebox3.Type.Integer()
657
- })
658
- ),
657
+ expectedSessionState: import_typebox3.Type.Object({
658
+ // what the client expects the server to send next
659
+ nextExpectedSeq: import_typebox3.Type.Integer(),
660
+ // TODO: remove optional once we know all servers
661
+ // are nextSentSeq here
662
+ // what the server expects the client to send next
663
+ nextSentSeq: import_typebox3.Type.Optional(import_typebox3.Type.Integer())
664
+ }),
659
665
  metadata: import_typebox3.Type.Optional(import_typebox3.Type.Unknown())
660
666
  });
667
+ var HandshakeErrorRetriableResponseCodes = import_typebox3.Type.Union([
668
+ import_typebox3.Type.Literal("SESSION_STATE_MISMATCH")
669
+ ]);
670
+ var HandshakeErrorFatalResponseCodes = import_typebox3.Type.Union([
671
+ import_typebox3.Type.Literal("MALFORMED_HANDSHAKE_META"),
672
+ import_typebox3.Type.Literal("MALFORMED_HANDSHAKE"),
673
+ import_typebox3.Type.Literal("PROTOCOL_VERSION_MISMATCH"),
674
+ import_typebox3.Type.Literal("REJECTED_BY_CUSTOM_HANDLER")
675
+ ]);
676
+ var HandshakeErrorResponseCodes = import_typebox3.Type.Union([
677
+ HandshakeErrorRetriableResponseCodes,
678
+ HandshakeErrorFatalResponseCodes
679
+ ]);
661
680
  var ControlMessageHandshakeResponseSchema = import_typebox3.Type.Object({
662
681
  type: import_typebox3.Type.Literal("HANDSHAKE_RESP"),
663
682
  status: import_typebox3.Type.Union([
@@ -667,7 +686,10 @@ var ControlMessageHandshakeResponseSchema = import_typebox3.Type.Object({
667
686
  }),
668
687
  import_typebox3.Type.Object({
669
688
  ok: import_typebox3.Type.Literal(false),
670
- reason: import_typebox3.Type.String()
689
+ reason: import_typebox3.Type.String(),
690
+ // TODO: remove optional once we know all servers
691
+ // are sending code here
692
+ code: import_typebox3.Type.Optional(HandshakeErrorResponseCodes)
671
693
  })
672
694
  ])
673
695
  });
@@ -680,6 +702,15 @@ var ControlMessagePayloadSchema = import_typebox3.Type.Union([
680
702
  var OpaqueTransportMessageSchema = TransportMessageSchema(
681
703
  import_typebox3.Type.Unknown()
682
704
  );
705
+ function closeStreamMessage(streamId) {
706
+ return {
707
+ streamId,
708
+ controlFlags: 4 /* StreamClosedBit */,
709
+ payload: {
710
+ type: "CLOSE"
711
+ }
712
+ };
713
+ }
683
714
  function isStreamOpen(controlFlag) {
684
715
  return (
685
716
  /* eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison */
@@ -693,9 +724,6 @@ function isStreamClose(controlFlag) {
693
724
  );
694
725
  }
695
726
 
696
- // router/client.ts
697
- var import_nanoid2 = require("nanoid");
698
-
699
727
  // router/result.ts
700
728
  var import_typebox4 = require("@sinclair/typebox");
701
729
  var UNCAUGHT_ERROR = "UNCAUGHT_ERROR";
@@ -724,7 +752,7 @@ function Err(error) {
724
752
  var import_api = require("@opentelemetry/api");
725
753
 
726
754
  // package.json
727
- var version = "0.23.18";
755
+ var version = "0.24.1";
728
756
 
729
757
  // tracing/index.ts
730
758
  function getPropagationContext(ctx) {
@@ -818,7 +846,7 @@ function createClient(transport, serverId, providedClientOptions = {}) {
818
846
  }
819
847
  const options = { ...defaultClientOptions, ...providedClientOptions };
820
848
  if (options.eagerlyConnect) {
821
- void transport.connect(serverId);
849
+ transport.connect(serverId);
822
850
  }
823
851
  return _createRecursiveProxy(async (opts) => {
824
852
  const [serviceName, procName, procType] = [...opts.path];
@@ -828,8 +856,8 @@ function createClient(transport, serverId, providedClientOptions = {}) {
828
856
  );
829
857
  }
830
858
  const [input] = opts.args;
831
- if (options.connectOnInvoke && !transport.connections.has(serverId)) {
832
- void transport.connect(serverId);
859
+ if (options.connectOnInvoke && !transport.sessions.has(serverId)) {
860
+ transport.connect(serverId);
833
861
  }
834
862
  if (procType === "rpc") {
835
863
  return handleRpc(transport, serverId, input, serviceName, procName);
@@ -852,7 +880,7 @@ function createSessionDisconnectHandler(from, cb) {
852
880
  };
853
881
  }
854
882
  function handleRpc(transport, serverId, input, serviceName, procedureName) {
855
- const streamId = (0, import_nanoid2.nanoid)();
883
+ const streamId = generateId();
856
884
  const { span, ctx } = createProcTelemetryInfo(
857
885
  transport,
858
886
  "rpc",
@@ -897,7 +925,7 @@ function handleRpc(transport, serverId, input, serviceName, procedureName) {
897
925
  return responsePromise;
898
926
  }
899
927
  function handleStream(transport, serverId, init, serviceName, procedureName) {
900
- const streamId = (0, import_nanoid2.nanoid)();
928
+ const streamId = generateId();
901
929
  const { span, ctx } = createProcTelemetryInfo(
902
930
  transport,
903
931
  "stream",
@@ -938,7 +966,7 @@ function handleStream(transport, serverId, init, serviceName, procedureName) {
938
966
  }
939
967
  if (!healthyClose)
940
968
  return;
941
- transport.sendCloseStream(serverId, streamId);
969
+ transport.send(serverId, closeStreamMessage(streamId));
942
970
  };
943
971
  void pipeInputToTransport();
944
972
  function onMessage(msg) {
@@ -974,7 +1002,7 @@ function handleStream(transport, serverId, init, serviceName, procedureName) {
974
1002
  return [inputStream, outputStream, cleanup];
975
1003
  }
976
1004
  function handleSubscribe(transport, serverId, input, serviceName, procedureName) {
977
- const streamId = (0, import_nanoid2.nanoid)();
1005
+ const streamId = generateId();
978
1006
  const { span, ctx } = createProcTelemetryInfo(
979
1007
  transport,
980
1008
  "subscription",
@@ -1013,7 +1041,7 @@ function handleSubscribe(transport, serverId, input, serviceName, procedureName)
1013
1041
  cleanup();
1014
1042
  if (!healthyClose)
1015
1043
  return;
1016
- transport.sendCloseStream(serverId, streamId);
1044
+ transport.send(serverId, closeStreamMessage(streamId));
1017
1045
  };
1018
1046
  const onSessionStatus = createSessionDisconnectHandler(serverId, () => {
1019
1047
  outputStream.push(
@@ -1030,7 +1058,7 @@ function handleSubscribe(transport, serverId, input, serviceName, procedureName)
1030
1058
  return [outputStream, closeHandler];
1031
1059
  }
1032
1060
  function handleUpload(transport, serverId, init, serviceName, procedureName) {
1033
- const streamId = (0, import_nanoid2.nanoid)();
1061
+ const streamId = generateId();
1034
1062
  const { span, ctx } = createProcTelemetryInfo(
1035
1063
  transport,
1036
1064
  "upload",
@@ -1070,7 +1098,7 @@ function handleUpload(transport, serverId, init, serviceName, procedureName) {
1070
1098
  }
1071
1099
  if (!healthyClose)
1072
1100
  return;
1073
- transport.sendCloseStream(serverId, streamId);
1101
+ transport.send(serverId, closeStreamMessage(streamId));
1074
1102
  };
1075
1103
  void pipeInputToTransport();
1076
1104
  const responsePromise = new Promise((resolve) => {
@@ -1121,11 +1149,11 @@ var RiverServer = class {
1121
1149
  transport;
1122
1150
  services;
1123
1151
  contextMap;
1124
- // map of streamId to ProcStream
1125
1152
  streamMap;
1126
- // map of client to their open streams by streamId
1127
- clientStreams;
1128
- disconnectedSessions;
1153
+ sessionToStreamId;
1154
+ // streams that are in the process of being cleaned up
1155
+ // this is to prevent output handlers from sending after the stream is cleaned up
1156
+ sessionsBeingCleanedUp = /* @__PURE__ */ new Set();
1129
1157
  log;
1130
1158
  constructor(transport, services, handshakeOptions, extendedContext) {
1131
1159
  const instances = {};
@@ -1143,9 +1171,8 @@ var RiverServer = class {
1143
1171
  transport.extendHandshake(handshakeOptions);
1144
1172
  }
1145
1173
  this.transport = transport;
1146
- this.disconnectedSessions = /* @__PURE__ */ new Set();
1147
1174
  this.streamMap = /* @__PURE__ */ new Map();
1148
- this.clientStreams = /* @__PURE__ */ new Map();
1175
+ this.sessionToStreamId = /* @__PURE__ */ new Map();
1149
1176
  this.transport.addEventListener("message", this.onMessage);
1150
1177
  this.transport.addEventListener("sessionStatus", this.onSessionStatus);
1151
1178
  this.log = transport.log;
@@ -1180,24 +1207,35 @@ var RiverServer = class {
1180
1207
  }
1181
1208
  await this.pushToStream(procStream, message, isInitMessage);
1182
1209
  };
1183
- // cleanup streams on session close
1184
1210
  onSessionStatus = async (evt) => {
1185
- if (evt.status !== "disconnect")
1211
+ const streamsFromThisClient = this.sessionToStreamId.get(evt.session.id);
1212
+ const cleanupStreams = async (ids) => {
1213
+ this.sessionsBeingCleanedUp.add(evt.session.id);
1214
+ await Promise.all(Array.from(ids).map(this.cleanupStream));
1215
+ this.sessionToStreamId.delete(evt.session.id);
1216
+ this.sessionsBeingCleanedUp.delete(evt.session.id);
1217
+ };
1218
+ if (evt.status === "connect") {
1219
+ if (streamsFromThisClient) {
1220
+ this.log?.error(
1221
+ `got session connect from ${evt.session.to} but there are still streams open from this session`,
1222
+ {
1223
+ clientId: this.transport.clientId,
1224
+ tags: ["invariant-violation"]
1225
+ }
1226
+ );
1227
+ await cleanupStreams(streamsFromThisClient);
1228
+ }
1229
+ this.sessionToStreamId.set(evt.session.id, /* @__PURE__ */ new Set());
1186
1230
  return;
1187
- const disconnectedClientId = evt.session.to;
1231
+ }
1188
1232
  this.log?.info(
1189
- `got session disconnect from ${disconnectedClientId}, cleaning up streams`,
1233
+ `got session disconnect from ${evt.session.to}, cleaning up streams for session`,
1190
1234
  evt.session.loggingMetadata
1191
1235
  );
1192
- const streamsFromThisClient = this.clientStreams.get(disconnectedClientId);
1193
1236
  if (!streamsFromThisClient)
1194
1237
  return;
1195
- this.disconnectedSessions.add(disconnectedClientId);
1196
- await Promise.all(
1197
- Array.from(streamsFromThisClient).map(this.cleanupStream)
1198
- );
1199
- this.disconnectedSessions.delete(disconnectedClientId);
1200
- this.clientStreams.delete(disconnectedClientId);
1238
+ await cleanupStreams(streamsFromThisClient);
1201
1239
  };
1202
1240
  createNewProcStream(message) {
1203
1241
  if (!isStreamOpen(message.controlFlags)) {
@@ -1248,26 +1286,34 @@ var RiverServer = class {
1248
1286
  });
1249
1287
  return;
1250
1288
  }
1289
+ const {
1290
+ to,
1291
+ id: sessionId,
1292
+ loggingMetadata: sessionLoggingMetadata
1293
+ } = session;
1251
1294
  const procedure = service.procedures[message.procedureName];
1252
1295
  const incoming = pushable({ objectMode: true });
1253
1296
  const outgoing = pushable({ objectMode: true });
1254
1297
  const needsClose = procedure.type === "subscription" || procedure.type === "stream";
1255
1298
  const disposables = [];
1299
+ const wrappedSend = (payload) => {
1300
+ if (!this.sessionsBeingCleanedUp.has(sessionId)) {
1301
+ this.transport.send(to, payload);
1302
+ }
1303
+ };
1256
1304
  const outputHandler = (
1257
1305
  // sending outgoing messages back to client
1258
1306
  needsClose ? (
1259
1307
  // subscription and stream case, we need to send a close bit after the response stream
1260
1308
  (async () => {
1261
1309
  for await (const response of outgoing) {
1262
- this.transport.send(session.to, {
1310
+ wrappedSend({
1263
1311
  streamId: message.streamId,
1264
1312
  controlFlags: 0,
1265
1313
  payload: response
1266
1314
  });
1267
1315
  }
1268
- if (!this.disconnectedSessions.has(message.from)) {
1269
- this.transport.sendCloseStream(session.to, message.streamId);
1270
- }
1316
+ wrappedSend(closeStreamMessage(message.streamId));
1271
1317
  disposables.forEach((d) => d());
1272
1318
  })()
1273
1319
  ) : (
@@ -1275,7 +1321,7 @@ var RiverServer = class {
1275
1321
  (async () => {
1276
1322
  const response = await outgoing.next().then((res) => res.value);
1277
1323
  if (response) {
1278
- this.transport.send(session.to, {
1324
+ wrappedSend({
1279
1325
  streamId: message.streamId,
1280
1326
  controlFlags: 4 /* StreamClosedBit */,
1281
1327
  payload: response
@@ -1289,7 +1335,7 @@ var RiverServer = class {
1289
1335
  const errorMsg = coerceErrorString(err);
1290
1336
  this.log?.error(
1291
1337
  `procedure ${message.serviceName}.${message.procedureName} threw an uncaught error: ${errorMsg}`,
1292
- session.loggingMetadata
1338
+ sessionLoggingMetadata
1293
1339
  );
1294
1340
  span.recordException(err instanceof Error ? err : new Error(errorMsg));
1295
1341
  span.setStatus({ code: import_api2.SpanStatusCode.ERROR });
@@ -1300,10 +1346,10 @@ var RiverServer = class {
1300
1346
  })
1301
1347
  );
1302
1348
  };
1303
- const sessionMeta = this.transport.sessionHandshakeMetadata.get(session);
1349
+ const sessionMeta = this.transport.sessionHandshakeMetadata.get(to);
1304
1350
  if (!sessionMeta) {
1305
1351
  this.log?.error(`session doesn't have handshake metadata`, {
1306
- ...session.loggingMetadata,
1352
+ ...sessionLoggingMetadata,
1307
1353
  tags: ["invariant-violation"]
1308
1354
  });
1309
1355
  return;
@@ -1312,10 +1358,10 @@ var RiverServer = class {
1312
1358
  const procHasInitMessage = "init" in procedure;
1313
1359
  const serviceContextWithTransportInfo = {
1314
1360
  ...serviceContext,
1361
+ sessionId,
1315
1362
  to: message.to,
1316
1363
  from: message.from,
1317
1364
  streamId: message.streamId,
1318
- session,
1319
1365
  metadata: sessionMeta
1320
1366
  };
1321
1367
  switch (procedure.type) {
@@ -1434,9 +1480,7 @@ var RiverServer = class {
1434
1480
  initMessage.value,
1435
1481
  incoming
1436
1482
  );
1437
- if (!this.disconnectedSessions.has(message.from)) {
1438
- outgoing.push(outputMessage);
1439
- }
1483
+ outgoing.push(outputMessage);
1440
1484
  } catch (err) {
1441
1485
  errorHandler(err, span);
1442
1486
  } finally {
@@ -1454,9 +1498,7 @@ var RiverServer = class {
1454
1498
  serviceContextWithTransportInfo,
1455
1499
  incoming
1456
1500
  );
1457
- if (!this.disconnectedSessions.has(message.from)) {
1458
- outgoing.push(outputMessage);
1459
- }
1501
+ outgoing.push(outputMessage);
1460
1502
  } catch (err) {
1461
1503
  errorHandler(err, span);
1462
1504
  } finally {
@@ -1469,7 +1511,7 @@ var RiverServer = class {
1469
1511
  default:
1470
1512
  this.log?.warn(
1471
1513
  `got request for invalid procedure type ${procedure.type} at ${message.serviceName}.${message.procedureName}`,
1472
- { ...session.loggingMetadata, transportMessage: message }
1514
+ { ...sessionLoggingMetadata, transportMessage: message }
1473
1515
  );
1474
1516
  return;
1475
1517
  }
@@ -1482,9 +1524,9 @@ var RiverServer = class {
1482
1524
  promises: { inputHandler, outputHandler }
1483
1525
  };
1484
1526
  this.streamMap.set(message.streamId, procStream);
1485
- const streamsFromThisClient = this.clientStreams.get(message.from) ?? /* @__PURE__ */ new Set();
1486
- streamsFromThisClient.add(message.streamId);
1487
- this.clientStreams.set(message.from, streamsFromThisClient);
1527
+ const streamsForThisSession = this.sessionToStreamId.get(sessionId) ?? /* @__PURE__ */ new Set();
1528
+ streamsForThisSession.add(message.streamId);
1529
+ this.sessionToStreamId.set(sessionId, streamsForThisSession);
1488
1530
  return procStream;
1489
1531
  }
1490
1532
  async pushToStream(procStream, message, isInit) {
@@ -1520,11 +1562,11 @@ var RiverServer = class {
1520
1562
  }
1521
1563
  if (isStreamClose(message.controlFlags)) {
1522
1564
  await this.cleanupStream(message.streamId);
1523
- const streamsFromThisClient = this.clientStreams.get(message.from);
1565
+ const streamsFromThisClient = this.sessionToStreamId.get(message.from);
1524
1566
  if (streamsFromThisClient) {
1525
1567
  streamsFromThisClient.delete(message.streamId);
1526
1568
  if (streamsFromThisClient.size === 0) {
1527
- this.clientStreams.delete(message.from);
1569
+ this.sessionToStreamId.delete(message.from);
1528
1570
  }
1529
1571
  }
1530
1572
  }