@replit/river 0.22.0 → 0.23.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 (57) hide show
  1. package/dist/{chunk-ZPBWKBM5.js → chunk-AUH7GO52.js} +84 -88
  2. package/dist/chunk-AUH7GO52.js.map +1 -0
  3. package/dist/{chunk-GCLEWC26.js → chunk-IKKP6BZG.js} +34 -18
  4. package/dist/chunk-IKKP6BZG.js.map +1 -0
  5. package/dist/{chunk-S3YKQT4J.js → chunk-KA5T736W.js} +2 -2
  6. package/dist/{chunk-3MFX6NXA.js → chunk-RBH47IKH.js} +2 -2
  7. package/dist/chunk-RBH47IKH.js.map +1 -0
  8. package/dist/{chunk-HUBFYN37.js → chunk-XTVPDTQD.js} +2 -2
  9. package/dist/{connection-8b059ac4.d.ts → connection-5685d817.d.ts} +1 -1
  10. package/dist/{connection-bbfe1147.d.ts → connection-7582fb92.d.ts} +1 -1
  11. package/dist/{index-2ece5234.d.ts → index-a6fe0edd.d.ts} +40 -53
  12. package/dist/logging/index.d.cts +1 -1
  13. package/dist/logging/index.d.ts +1 -1
  14. package/dist/router/index.cjs +33 -17
  15. package/dist/router/index.cjs.map +1 -1
  16. package/dist/router/index.d.cts +11 -6
  17. package/dist/router/index.d.ts +11 -6
  18. package/dist/router/index.js +2 -2
  19. package/dist/{services-cb01a7a8.d.ts → services-95cb17b9.d.ts} +23 -52
  20. package/dist/{services-acbcc441.d.ts → services-e95a89d6.d.ts} +23 -52
  21. package/dist/transport/impls/uds/client.cjs +14 -13
  22. package/dist/transport/impls/uds/client.cjs.map +1 -1
  23. package/dist/transport/impls/uds/client.d.cts +2 -2
  24. package/dist/transport/impls/uds/client.d.ts +2 -2
  25. package/dist/transport/impls/uds/client.js +3 -3
  26. package/dist/transport/impls/uds/server.cjs +71 -82
  27. package/dist/transport/impls/uds/server.cjs.map +1 -1
  28. package/dist/transport/impls/uds/server.d.cts +2 -2
  29. package/dist/transport/impls/uds/server.d.ts +2 -2
  30. package/dist/transport/impls/uds/server.js +3 -3
  31. package/dist/transport/impls/ws/client.cjs +14 -13
  32. package/dist/transport/impls/ws/client.cjs.map +1 -1
  33. package/dist/transport/impls/ws/client.d.cts +2 -2
  34. package/dist/transport/impls/ws/client.d.ts +2 -2
  35. package/dist/transport/impls/ws/client.js +3 -3
  36. package/dist/transport/impls/ws/server.cjs +71 -82
  37. package/dist/transport/impls/ws/server.cjs.map +1 -1
  38. package/dist/transport/impls/ws/server.d.cts +2 -2
  39. package/dist/transport/impls/ws/server.d.ts +2 -2
  40. package/dist/transport/impls/ws/server.js +3 -3
  41. package/dist/transport/index.cjs +83 -87
  42. package/dist/transport/index.cjs.map +1 -1
  43. package/dist/transport/index.d.cts +22 -11
  44. package/dist/transport/index.d.ts +22 -11
  45. package/dist/transport/index.js +2 -2
  46. package/dist/util/testHelpers.cjs +4 -9
  47. package/dist/util/testHelpers.cjs.map +1 -1
  48. package/dist/util/testHelpers.d.cts +2 -2
  49. package/dist/util/testHelpers.d.ts +2 -2
  50. package/dist/util/testHelpers.js +5 -4
  51. package/dist/util/testHelpers.js.map +1 -1
  52. package/package.json +4 -4
  53. package/dist/chunk-3MFX6NXA.js.map +0 -1
  54. package/dist/chunk-GCLEWC26.js.map +0 -1
  55. package/dist/chunk-ZPBWKBM5.js.map +0 -1
  56. /package/dist/{chunk-S3YKQT4J.js.map → chunk-KA5T736W.js.map} +0 -0
  57. /package/dist/{chunk-HUBFYN37.js.map → chunk-XTVPDTQD.js.map} +0 -0
@@ -146,7 +146,7 @@ var import_nanoid2 = require("nanoid");
146
146
  var import_api = require("@opentelemetry/api");
147
147
 
148
148
  // package.json
149
- var version = "0.22.0";
149
+ var version = "0.23.1";
150
150
 
151
151
  // tracing/index.ts
152
152
  function createSessionTelemetryInfo(session, propagationCtx) {
@@ -216,12 +216,6 @@ var Session = class {
216
216
  * for this session.
217
217
  */
218
218
  advertisedSessionId;
219
- /**
220
- * The metadata for this session, as parsed from the handshake.
221
- *
222
- * Will only ever be populated on the server side.
223
- */
224
- metadata;
225
219
  /**
226
220
  * Number of messages we've sent along this session (excluding handshake and acks)
227
221
  */
@@ -379,8 +373,8 @@ var Session = class {
379
373
  replaceWithNewConnection(newConn) {
380
374
  this.closeStaleConnection(newConn);
381
375
  this.cancelGrace();
382
- this.connection = newConn;
383
376
  this.sendBufferedMessages(newConn);
377
+ this.connection = newConn;
384
378
  }
385
379
  beginGrace(cb) {
386
380
  log?.info(
@@ -808,17 +802,29 @@ var ServerTransport = class extends Transport {
808
802
  * The options for this transport.
809
803
  */
810
804
  options;
805
+ /**
806
+ * Optional handshake options for the server.
807
+ */
808
+ handshakeExtensions;
809
+ /**
810
+ * A map of session handshake data for each session.
811
+ */
812
+ sessionHandshakeMetadata;
811
813
  constructor(clientId, providedOptions) {
812
814
  super(clientId, providedOptions);
813
815
  this.options = {
814
816
  ...defaultServerTransportOptions,
815
817
  ...providedOptions
816
818
  };
819
+ this.sessionHandshakeMetadata = /* @__PURE__ */ new WeakMap();
817
820
  log?.info(`initiated server transport`, {
818
821
  clientId: this.clientId,
819
822
  protocolVersion: PROTOCOL_VERSION
820
823
  });
821
824
  }
825
+ extendHandshake(options) {
826
+ this.handshakeExtensions = options;
827
+ }
822
828
  handleConnection(conn) {
823
829
  if (this.state !== "open")
824
830
  return;
@@ -901,6 +907,52 @@ var ServerTransport = class extends Transport {
901
907
  );
902
908
  });
903
909
  }
910
+ async validateHandshakeMetadata(conn, session, rawMetadata, from) {
911
+ let parsedMetadata = {};
912
+ if (this.handshakeExtensions) {
913
+ if (!import_value.Value.Check(this.handshakeExtensions.schema, rawMetadata)) {
914
+ conn.telemetry?.span.setStatus({
915
+ code: import_api3.SpanStatusCode.ERROR,
916
+ message: "malformed handshake meta"
917
+ });
918
+ const reason = "received malformed handshake metadata";
919
+ const responseMsg = handshakeResponseMessage(this.clientId, from, {
920
+ ok: false,
921
+ reason
922
+ });
923
+ conn.send(this.codec.toBuffer(responseMsg));
924
+ log?.warn(`received malformed handshake metadata from ${from}`, {
925
+ clientId: this.clientId,
926
+ connId: conn.id
927
+ });
928
+ this.protocolError(ProtocolError.HandshakeFailed, reason);
929
+ return false;
930
+ }
931
+ parsedMetadata = await this.handshakeExtensions.validate(
932
+ rawMetadata,
933
+ session
934
+ );
935
+ if (parsedMetadata === false) {
936
+ const reason = "rejected by handshake handler";
937
+ conn.telemetry?.span.setStatus({
938
+ code: import_api3.SpanStatusCode.ERROR,
939
+ message: reason
940
+ });
941
+ const responseMsg = handshakeResponseMessage(this.clientId, from, {
942
+ ok: false,
943
+ reason
944
+ });
945
+ conn.send(this.codec.toBuffer(responseMsg));
946
+ log?.warn(`rejected handshake from ${from}`, {
947
+ clientId: this.clientId,
948
+ connId: conn.id
949
+ });
950
+ this.protocolError(ProtocolError.HandshakeFailed, reason);
951
+ return false;
952
+ }
953
+ }
954
+ return parsedMetadata;
955
+ }
904
956
  async receiveHandshakeRequestMessage(data, conn) {
905
957
  const parsed = this.parseMsg(data);
906
958
  if (!parsed) {
@@ -956,86 +1008,23 @@ var ServerTransport = class extends Transport {
956
1008
  this.protocolError(ProtocolError.HandshakeFailed, reason);
957
1009
  return false;
958
1010
  }
1011
+ const oldSession = this.sessions.get(parsed.from);
1012
+ const parsedMetadata = await this.validateHandshakeMetadata(
1013
+ conn,
1014
+ oldSession,
1015
+ parsed.payload.metadata,
1016
+ parsed.from
1017
+ );
1018
+ if (parsedMetadata === false) {
1019
+ return false;
1020
+ }
959
1021
  const { session, isReconnect } = this.getOrCreateSession(
960
1022
  parsed.from,
961
1023
  conn,
962
1024
  parsed.payload.sessionId,
963
1025
  parsed.tracing
964
1026
  );
965
- let handshakeMetadata;
966
- if (this.options.handshake) {
967
- if (!import_value.Value.Check(
968
- this.options.handshake.requestSchema,
969
- parsed.payload.metadata
970
- )) {
971
- conn.telemetry?.span.setStatus({
972
- code: import_api3.SpanStatusCode.ERROR,
973
- message: "malformed handshake meta"
974
- });
975
- const reason = "received malformed handshake metadata";
976
- const responseMsg2 = handshakeResponseMessage(
977
- this.clientId,
978
- parsed.from,
979
- { ok: false, reason }
980
- );
981
- conn.send(this.codec.toBuffer(responseMsg2));
982
- log?.warn(`received malformed handshake metadata from ${parsed.from}`, {
983
- clientId: this.clientId,
984
- connId: conn.id
985
- });
986
- this.protocolError(ProtocolError.HandshakeFailed, reason);
987
- this.deleteSession(session);
988
- return false;
989
- }
990
- const parsedMetadata = await this.options.handshake.parse(
991
- parsed.payload.metadata,
992
- session,
993
- isReconnect
994
- );
995
- if (parsedMetadata === false) {
996
- conn.telemetry?.span.setStatus({
997
- code: import_api3.SpanStatusCode.ERROR,
998
- message: "rejected by handshake handler"
999
- });
1000
- const reason = "rejected by handshake handler";
1001
- const responseMsg2 = handshakeResponseMessage(
1002
- this.clientId,
1003
- parsed.from,
1004
- { ok: false, reason }
1005
- );
1006
- conn.send(this.codec.toBuffer(responseMsg2));
1007
- log?.warn(`rejected handshake from ${parsed.from}`, {
1008
- clientId: this.clientId,
1009
- connId: conn.id
1010
- });
1011
- this.protocolError(ProtocolError.HandshakeFailed, reason);
1012
- this.deleteSession(session);
1013
- return false;
1014
- }
1015
- if (!import_value.Value.Check(this.options.handshake.parsedSchema, parsedMetadata)) {
1016
- conn.telemetry?.span.setStatus({
1017
- code: import_api3.SpanStatusCode.ERROR,
1018
- message: "malformed handshake meta"
1019
- });
1020
- const reason = "failed to parse handshake metadata";
1021
- const responseMsg2 = handshakeResponseMessage(
1022
- this.clientId,
1023
- parsed.from,
1024
- { ok: false, reason }
1025
- );
1026
- conn.send(this.codec.toBuffer(responseMsg2));
1027
- log?.error(`failed to parse handshake metadata`, {
1028
- clientId: this.clientId,
1029
- connId: conn.id
1030
- });
1031
- this.protocolError(ProtocolError.HandshakeFailed, reason);
1032
- this.deleteSession(session);
1033
- return false;
1034
- }
1035
- handshakeMetadata = parsedMetadata;
1036
- }
1037
- handshakeMetadata ??= {};
1038
- session.metadata = handshakeMetadata;
1027
+ this.sessionHandshakeMetadata.set(session, parsedMetadata);
1039
1028
  log?.debug(
1040
1029
  `handshake from ${parsed.from} ok, responding with handshake success`,
1041
1030
  { clientId: this.clientId, connId: conn.id }