@replit/river 0.203.0 → 0.204.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 (55) hide show
  1. package/dist/{chunk-DGT3MPD4.js → chunk-3V7VMJNA.js} +19 -16
  2. package/dist/chunk-3V7VMJNA.js.map +1 -0
  3. package/dist/{chunk-FG22HHCY.js → chunk-6YUDEFCS.js} +47 -10
  4. package/dist/chunk-6YUDEFCS.js.map +1 -0
  5. package/dist/chunk-LJCR3ADI.js +1955 -0
  6. package/dist/chunk-LJCR3ADI.js.map +1 -0
  7. package/dist/{chunk-XBPEUVWN.js → chunk-QSW7AWEP.js} +5 -11
  8. package/dist/chunk-QSW7AWEP.js.map +1 -0
  9. package/dist/{chunk-LHH5LQ7C.js → chunk-WBGKPIFS.js} +11 -1
  10. package/dist/chunk-WBGKPIFS.js.map +1 -0
  11. package/dist/{chunk-D5EIDBUT.js → chunk-YODW2ZMU.js} +4 -3
  12. package/dist/chunk-YODW2ZMU.js.map +1 -0
  13. package/dist/{client-5d2e41a3.d.ts → client-0c0a4a5e.d.ts} +1 -1
  14. package/dist/{connection-11a4af0f.d.ts → connection-7b62dfec.d.ts} +1 -1
  15. package/dist/{context-d6dd8a1a.d.ts → context-3cf1ed4e.d.ts} +8 -2
  16. package/dist/logging/index.cjs +1 -0
  17. package/dist/logging/index.cjs.map +1 -1
  18. package/dist/logging/index.js +1 -1
  19. package/dist/router/index.cjs +109 -111
  20. package/dist/router/index.cjs.map +1 -1
  21. package/dist/router/index.d.cts +7 -7
  22. package/dist/router/index.d.ts +7 -7
  23. package/dist/router/index.js +18 -1629
  24. package/dist/router/index.js.map +1 -1
  25. package/dist/{server-e46399f9.d.ts → server-a287de55.d.ts} +1 -1
  26. package/dist/{services-56cbea0d.d.ts → services-51980ecd.d.ts} +2 -2
  27. package/dist/testUtil/index.cjs +103 -36
  28. package/dist/testUtil/index.cjs.map +1 -1
  29. package/dist/testUtil/index.d.cts +4 -4
  30. package/dist/testUtil/index.d.ts +4 -4
  31. package/dist/testUtil/index.js +9 -7
  32. package/dist/testUtil/index.js.map +1 -1
  33. package/dist/transport/impls/ws/client.cjs +107 -48
  34. package/dist/transport/impls/ws/client.cjs.map +1 -1
  35. package/dist/transport/impls/ws/client.d.cts +3 -3
  36. package/dist/transport/impls/ws/client.d.ts +3 -3
  37. package/dist/transport/impls/ws/client.js +5 -5
  38. package/dist/transport/impls/ws/server.cjs +92 -35
  39. package/dist/transport/impls/ws/server.cjs.map +1 -1
  40. package/dist/transport/impls/ws/server.d.cts +3 -3
  41. package/dist/transport/impls/ws/server.d.ts +3 -3
  42. package/dist/transport/impls/ws/server.js +5 -5
  43. package/dist/transport/index.cjs +107 -41
  44. package/dist/transport/index.cjs.map +1 -1
  45. package/dist/transport/index.d.cts +3 -3
  46. package/dist/transport/index.d.ts +3 -3
  47. package/dist/transport/index.js +5 -5
  48. package/package.json +3 -3
  49. package/dist/chunk-D5EIDBUT.js.map +0 -1
  50. package/dist/chunk-DGT3MPD4.js.map +0 -1
  51. package/dist/chunk-FG22HHCY.js.map +0 -1
  52. package/dist/chunk-LHH5LQ7C.js.map +0 -1
  53. package/dist/chunk-SZHNMLKC.js +0 -310
  54. package/dist/chunk-SZHNMLKC.js.map +0 -1
  55. package/dist/chunk-XBPEUVWN.js.map +0 -1
@@ -341,12 +341,14 @@ var StateMachineState = class {
341
341
  var CommonSession = class extends StateMachineState {
342
342
  from;
343
343
  options;
344
+ tracer;
344
345
  log;
345
- constructor({ from, options, log }) {
346
+ constructor({ from, options, log, tracer }) {
346
347
  super();
347
348
  this.from = from;
348
349
  this.options = options;
349
350
  this.log = log;
351
+ this.tracer = tracer;
350
352
  }
351
353
  parseMsg(msg) {
352
354
  const parsedMsg = this.options.codec.fromBuffer(msg);
@@ -396,13 +398,13 @@ var IdentifiedSession = class extends CommonSession {
396
398
  this.protocolVersion = protocolVersion;
397
399
  }
398
400
  get loggingMetadata() {
399
- const spanContext = this.telemetry.span.spanContext();
400
401
  const metadata = {
401
402
  clientId: this.from,
402
403
  connectedTo: this.to,
403
404
  sessionId: this.id
404
405
  };
405
406
  if (this.telemetry.span.isRecording()) {
407
+ const spanContext = this.telemetry.span.spanContext();
406
408
  metadata.telemetry = {
407
409
  traceId: spanContext.traceId,
408
410
  spanId: spanContext.spanId
@@ -531,8 +533,16 @@ var SessionNoConnection = class extends IdentifiedSessionWithGracePeriod {
531
533
  // tracing/index.ts
532
534
  var import_api = require("@opentelemetry/api");
533
535
 
536
+ // transport/stringifyError.ts
537
+ function coerceErrorString(err) {
538
+ if (err instanceof Error) {
539
+ return err.message || "unknown reason";
540
+ }
541
+ return `[coerced to error] ${String(err)}`;
542
+ }
543
+
534
544
  // package.json
535
- var version = "0.203.0";
545
+ var version = "0.204.0";
536
546
 
537
547
  // tracing/index.ts
538
548
  function getPropagationContext(ctx) {
@@ -543,10 +553,10 @@ function getPropagationContext(ctx) {
543
553
  import_api.propagation.inject(ctx, tracing);
544
554
  return tracing;
545
555
  }
546
- function createSessionTelemetryInfo(sessionId, to, from, propagationCtx) {
556
+ function createSessionTelemetryInfo(tracer, sessionId, to, from, propagationCtx) {
547
557
  const parentCtx = propagationCtx ? import_api.propagation.extract(import_api.context.active(), propagationCtx) : import_api.context.active();
548
558
  const span = tracer.startSpan(
549
- `session ${sessionId}`,
559
+ `river.session.${sessionId}`,
550
560
  {
551
561
  attributes: {
552
562
  component: "river",
@@ -560,8 +570,24 @@ function createSessionTelemetryInfo(sessionId, to, from, propagationCtx) {
560
570
  const ctx = import_api.trace.setSpan(parentCtx, span);
561
571
  return { span, ctx };
562
572
  }
563
- var tracer = import_api.trace.getTracer("river", version);
564
- var tracing_default = tracer;
573
+ function createConnectionTelemetryInfo(tracer, connection, info) {
574
+ const span = tracer.startSpan(
575
+ `connection ${connection.id}`,
576
+ {
577
+ attributes: {
578
+ component: "river",
579
+ "river.connection.id": connection.id
580
+ },
581
+ links: [{ context: info.span.spanContext() }]
582
+ },
583
+ info.ctx
584
+ );
585
+ const ctx = import_api.trace.setSpan(info.ctx, span);
586
+ return { span, ctx };
587
+ }
588
+ function getTracer() {
589
+ return import_api.trace.getTracer("river", version);
590
+ }
565
591
 
566
592
  // transport/sessionStateMachine/SessionWaitingForHandshake.ts
567
593
  var SessionWaitingForHandshake = class extends CommonSession {
@@ -847,6 +873,7 @@ function inheritSharedSession(session) {
847
873
  telemetry: session.telemetry,
848
874
  options: session.options,
849
875
  log: session.log,
876
+ tracer: session.tracer,
850
877
  protocolVersion: session.protocolVersion
851
878
  };
852
879
  }
@@ -858,9 +885,9 @@ function inheritSharedSessionWithGrace(session) {
858
885
  }
859
886
  var SessionStateGraph = {
860
887
  entrypoints: {
861
- NoConnection: (to, from, listeners, options, protocolVersion, log) => {
888
+ NoConnection: (to, from, listeners, options, protocolVersion, tracer, log) => {
862
889
  const id = `session-${generateId()}`;
863
- const telemetry = createSessionTelemetryInfo(id, to, from);
890
+ const telemetry = createSessionTelemetryInfo(tracer, id, to, from);
864
891
  const sendBuffer = [];
865
892
  const session = new SessionNoConnection({
866
893
  listeners,
@@ -874,6 +901,7 @@ var SessionStateGraph = {
874
901
  telemetry,
875
902
  options,
876
903
  protocolVersion,
904
+ tracer,
877
905
  log
878
906
  });
879
907
  session.log?.info(`session ${session.id} created in NoConnection state`, {
@@ -882,12 +910,13 @@ var SessionStateGraph = {
882
910
  });
883
911
  return session;
884
912
  },
885
- WaitingForHandshake: (from, conn, listeners, options, log) => {
913
+ WaitingForHandshake: (from, conn, listeners, options, tracer, log) => {
886
914
  const session = new SessionWaitingForHandshake({
887
915
  conn,
888
916
  listeners,
889
917
  from,
890
918
  options,
919
+ tracer,
891
920
  log
892
921
  });
893
922
  session.log?.info(`session created in WaitingForHandshake state`, {
@@ -943,6 +972,11 @@ var SessionStateGraph = {
943
972
  listeners,
944
973
  ...carriedState
945
974
  });
975
+ conn.telemetry = createConnectionTelemetryInfo(
976
+ session.tracer,
977
+ conn,
978
+ session.telemetry
979
+ );
946
980
  session.log?.info(
947
981
  `session ${session.id} transition from Connecting to Handshaking`,
948
982
  {
@@ -986,12 +1020,14 @@ var SessionStateGraph = {
986
1020
  ack: 0,
987
1021
  sendBuffer: [],
988
1022
  telemetry: createSessionTelemetryInfo(
1023
+ pendingSession.tracer,
989
1024
  sessionId,
990
1025
  to,
991
1026
  from,
992
1027
  propagationCtx
993
1028
  ),
994
1029
  options,
1030
+ tracer: pendingSession.tracer,
995
1031
  log: pendingSession.log,
996
1032
  protocolVersion
997
1033
  }
@@ -1003,6 +1039,11 @@ var SessionStateGraph = {
1003
1039
  listeners,
1004
1040
  ...carriedState
1005
1041
  });
1042
+ conn.telemetry = createConnectionTelemetryInfo(
1043
+ session.tracer,
1044
+ conn,
1045
+ session.telemetry
1046
+ );
1006
1047
  session.log?.info(
1007
1048
  `session ${session.id} transition from WaitingForHandshake to Connected`,
1008
1049
  {
@@ -1129,7 +1170,7 @@ var ServerSessionStateGraph = {
1129
1170
  };
1130
1171
 
1131
1172
  // transport/client.ts
1132
- var import_api3 = require("@opentelemetry/api");
1173
+ var import_api4 = require("@opentelemetry/api");
1133
1174
 
1134
1175
  // transport/rateLimit.ts
1135
1176
  var LeakyBucketRateLimit = class {
@@ -1199,6 +1240,7 @@ var LeakyBucketRateLimit = class {
1199
1240
  };
1200
1241
 
1201
1242
  // logging/log.ts
1243
+ var import_api3 = require("@opentelemetry/api");
1202
1244
  var LoggingLevels = {
1203
1245
  debug: -1,
1204
1246
  info: 0,
@@ -1207,6 +1249,15 @@ var LoggingLevels = {
1207
1249
  };
1208
1250
  var cleanedLogFn = (log) => {
1209
1251
  return (msg, metadata) => {
1252
+ if (metadata && !metadata.telemetry) {
1253
+ const span = import_api3.trace.getSpan(import_api3.context.active());
1254
+ if (span) {
1255
+ metadata.telemetry = {
1256
+ traceId: span.spanContext().traceId,
1257
+ spanId: span.spanContext().spanId
1258
+ };
1259
+ }
1260
+ }
1210
1261
  if (!metadata?.transportMessage) {
1211
1262
  log(msg, metadata);
1212
1263
  return;
@@ -1308,6 +1359,7 @@ var Transport = class {
1308
1359
  */
1309
1360
  options;
1310
1361
  log;
1362
+ tracer;
1311
1363
  sessions;
1312
1364
  /**
1313
1365
  * Creates a new Transport instance.
@@ -1320,6 +1372,7 @@ var Transport = class {
1320
1372
  this.clientId = clientId;
1321
1373
  this.status = "open";
1322
1374
  this.sessions = /* @__PURE__ */ new Map();
1375
+ this.tracer = getTracer();
1323
1376
  }
1324
1377
  bindLogger(fn, level) {
1325
1378
  if (typeof fn === "function") {
@@ -1502,14 +1555,6 @@ var Transport = class {
1502
1555
  }
1503
1556
  };
1504
1557
 
1505
- // transport/stringifyError.ts
1506
- function coerceErrorString(err) {
1507
- if (err instanceof Error) {
1508
- return err.message || "unknown reason";
1509
- }
1510
- return `[coerced to error] ${String(err)}`;
1511
- }
1512
-
1513
1558
  // transport/client.ts
1514
1559
  var import_value2 = require("@sinclair/typebox/value");
1515
1560
  var ClientTransport = class extends Transport {
@@ -1566,6 +1611,7 @@ var ClientTransport = class extends Transport {
1566
1611
  },
1567
1612
  this.options,
1568
1613
  currentProtocolVersion,
1614
+ this.tracer,
1569
1615
  this.log
1570
1616
  );
1571
1617
  this.createSession(session);
@@ -1634,7 +1680,7 @@ var ClientTransport = class extends Transport {
1634
1680
  }
1635
1681
  rejectHandshakeResponse(session, reason, metadata) {
1636
1682
  session.conn.telemetry?.span.setStatus({
1637
- code: import_api3.SpanStatusCode.ERROR,
1683
+ code: import_api4.SpanStatusCode.ERROR,
1638
1684
  message: reason
1639
1685
  });
1640
1686
  this.log?.warn(reason, metadata);
@@ -1775,18 +1821,21 @@ var ClientTransport = class extends Transport {
1775
1821
  }
1776
1822
  }
1777
1823
  onBackoffFinished(session) {
1778
- const connPromise = tracing_default.startActiveSpan("connect", async (span) => {
1779
- try {
1780
- return await this.createNewOutgoingConnection(session.to);
1781
- } catch (err) {
1782
- const errStr = coerceErrorString(err);
1783
- span.recordException(errStr);
1784
- span.setStatus({ code: import_api3.SpanStatusCode.ERROR });
1785
- throw err;
1786
- } finally {
1787
- span.end();
1824
+ const connPromise = session.tracer.startActiveSpan(
1825
+ "connect",
1826
+ async (span) => {
1827
+ try {
1828
+ return await this.createNewOutgoingConnection(session.to);
1829
+ } catch (err) {
1830
+ const errStr = coerceErrorString(err);
1831
+ span.recordException(errStr);
1832
+ span.setStatus({ code: import_api4.SpanStatusCode.ERROR });
1833
+ throw err;
1834
+ } finally {
1835
+ span.end();
1836
+ }
1788
1837
  }
1789
- });
1838
+ );
1790
1839
  const connectingSession = ClientSessionStateGraph.transition.BackingOffToConnecting(
1791
1840
  session,
1792
1841
  connPromise,
@@ -1863,8 +1912,8 @@ var Connection = class {
1863
1912
  }
1864
1913
  get loggingMetadata() {
1865
1914
  const metadata = { connId: this.id };
1866
- const spanContext = this.telemetry?.span.spanContext();
1867
- if (this.telemetry?.span.isRecording() && spanContext) {
1915
+ if (this.telemetry?.span.isRecording()) {
1916
+ const spanContext = this.telemetry.span.spanContext();
1868
1917
  metadata.telemetry = {
1869
1918
  traceId: spanContext.traceId,
1870
1919
  spanId: spanContext.spanId
@@ -1885,6 +1934,22 @@ var Connection = class {
1885
1934
  get errorListeners() {
1886
1935
  return [...this._errorListeners];
1887
1936
  }
1937
+ onData(msg) {
1938
+ for (const cb of this.dataListeners) {
1939
+ cb(msg);
1940
+ }
1941
+ }
1942
+ onError(err) {
1943
+ for (const cb of this.errorListeners) {
1944
+ cb(err);
1945
+ }
1946
+ }
1947
+ onClose() {
1948
+ for (const cb of this.closeListeners) {
1949
+ cb();
1950
+ }
1951
+ this.telemetry?.span.end();
1952
+ }
1888
1953
  /**
1889
1954
  * Handle adding a callback for when a message is received.
1890
1955
  * @param msg The message that was received.
@@ -1926,7 +1991,7 @@ var Connection = class {
1926
1991
  };
1927
1992
 
1928
1993
  // transport/server.ts
1929
- var import_api4 = require("@opentelemetry/api");
1994
+ var import_api5 = require("@opentelemetry/api");
1930
1995
  var import_value3 = require("@sinclair/typebox/value");
1931
1996
  var ServerTransport = class extends Transport {
1932
1997
  /**
@@ -2030,13 +2095,14 @@ var ServerTransport = class extends Transport {
2030
2095
  }
2031
2096
  },
2032
2097
  this.options,
2098
+ this.tracer,
2033
2099
  this.log
2034
2100
  );
2035
2101
  this.pendingSessions.add(pendingSession);
2036
2102
  }
2037
2103
  rejectHandshakeRequest(session, to, reason, code, metadata) {
2038
2104
  session.conn.telemetry?.span.setStatus({
2039
- code: import_api4.SpanStatusCode.ERROR,
2105
+ code: import_api5.SpanStatusCode.ERROR,
2040
2106
  message: reason
2041
2107
  });
2042
2108
  this.log?.warn(reason, metadata);
@@ -2571,7 +2637,8 @@ function dummySession() {
2571
2637
  }
2572
2638
  },
2573
2639
  testingSessionOptions,
2574
- currentProtocolVersion
2640
+ currentProtocolVersion,
2641
+ getTracer()
2575
2642
  );
2576
2643
  }
2577
2644
  function getClientSendFn(clientTransport, serverTransport) {