@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
@@ -1,9 +1,9 @@
1
1
  import { c as TransportClientId } from '../../../message-3def9ded.js';
2
2
  import { WebSocketServer } from 'ws';
3
- import { W as WebSocketConnection } from '../../../connection-11a4af0f.js';
3
+ import { W as WebSocketConnection } from '../../../connection-7b62dfec.js';
4
4
  import { W as WsLike } from '../../../wslike-e0b32dd5.js';
5
- import { S as ServerTransport } from '../../../server-e46399f9.js';
6
- import { c as ProvidedServerTransportOptions } from '../../../context-d6dd8a1a.js';
5
+ import { S as ServerTransport } from '../../../server-a287de55.js';
6
+ import { c as ProvidedServerTransportOptions } from '../../../context-3cf1ed4e.js';
7
7
  import { IncomingMessage } from 'http';
8
8
  import '@sinclair/typebox/value';
9
9
  import '@sinclair/typebox';
@@ -1,9 +1,9 @@
1
1
  import { c as TransportClientId } from '../../../message-3def9ded.js';
2
2
  import { WebSocketServer } from 'ws';
3
- import { W as WebSocketConnection } from '../../../connection-11a4af0f.js';
3
+ import { W as WebSocketConnection } from '../../../connection-7b62dfec.js';
4
4
  import { W as WsLike } from '../../../wslike-e0b32dd5.js';
5
- import { S as ServerTransport } from '../../../server-e46399f9.js';
6
- import { c as ProvidedServerTransportOptions } from '../../../context-d6dd8a1a.js';
5
+ import { S as ServerTransport } from '../../../server-a287de55.js';
6
+ import { c as ProvidedServerTransportOptions } from '../../../context-3cf1ed4e.js';
7
7
  import { IncomingMessage } from 'http';
8
8
  import '@sinclair/typebox/value';
9
9
  import '@sinclair/typebox';
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  ServerTransport
3
- } from "../../../chunk-D5EIDBUT.js";
3
+ } from "../../../chunk-YODW2ZMU.js";
4
4
  import {
5
5
  WebSocketConnection
6
- } from "../../../chunk-XBPEUVWN.js";
7
- import "../../../chunk-FG22HHCY.js";
8
- import "../../../chunk-SZHNMLKC.js";
9
- import "../../../chunk-LHH5LQ7C.js";
6
+ } from "../../../chunk-QSW7AWEP.js";
7
+ import "../../../chunk-6YUDEFCS.js";
8
+ import "../../../chunk-LJCR3ADI.js";
9
+ import "../../../chunk-WBGKPIFS.js";
10
10
  import "../../../chunk-AJGIY2UB.js";
11
11
 
12
12
  // transport/impls/ws/server.ts
@@ -32,6 +32,7 @@ __export(transport_exports, {
32
32
  module.exports = __toCommonJS(transport_exports);
33
33
 
34
34
  // logging/log.ts
35
+ var import_api = require("@opentelemetry/api");
35
36
  var LoggingLevels = {
36
37
  debug: -1,
37
38
  info: 0,
@@ -40,6 +41,15 @@ var LoggingLevels = {
40
41
  };
41
42
  var cleanedLogFn = (log) => {
42
43
  return (msg, metadata) => {
44
+ if (metadata && !metadata.telemetry) {
45
+ const span = import_api.trace.getSpan(import_api.context.active());
46
+ if (span) {
47
+ metadata.telemetry = {
48
+ traceId: span.spanContext().traceId,
49
+ spanId: span.spanContext().spanId
50
+ };
51
+ }
52
+ }
43
53
  if (!metadata?.transportMessage) {
44
54
  log(msg, metadata);
45
55
  return;
@@ -419,12 +429,14 @@ var StateMachineState = class {
419
429
  var CommonSession = class extends StateMachineState {
420
430
  from;
421
431
  options;
432
+ tracer;
422
433
  log;
423
- constructor({ from, options, log }) {
434
+ constructor({ from, options, log, tracer }) {
424
435
  super();
425
436
  this.from = from;
426
437
  this.options = options;
427
438
  this.log = log;
439
+ this.tracer = tracer;
428
440
  }
429
441
  parseMsg(msg) {
430
442
  const parsedMsg = this.options.codec.fromBuffer(msg);
@@ -474,13 +486,13 @@ var IdentifiedSession = class extends CommonSession {
474
486
  this.protocolVersion = protocolVersion;
475
487
  }
476
488
  get loggingMetadata() {
477
- const spanContext = this.telemetry.span.spanContext();
478
489
  const metadata = {
479
490
  clientId: this.from,
480
491
  connectedTo: this.to,
481
492
  sessionId: this.id
482
493
  };
483
494
  if (this.telemetry.span.isRecording()) {
495
+ const spanContext = this.telemetry.span.spanContext();
484
496
  metadata.telemetry = {
485
497
  traceId: spanContext.traceId,
486
498
  spanId: spanContext.spanId
@@ -607,10 +619,18 @@ var SessionNoConnection = class extends IdentifiedSessionWithGracePeriod {
607
619
  };
608
620
 
609
621
  // tracing/index.ts
610
- var import_api = require("@opentelemetry/api");
622
+ var import_api2 = require("@opentelemetry/api");
623
+
624
+ // transport/stringifyError.ts
625
+ function coerceErrorString(err) {
626
+ if (err instanceof Error) {
627
+ return err.message || "unknown reason";
628
+ }
629
+ return `[coerced to error] ${String(err)}`;
630
+ }
611
631
 
612
632
  // package.json
613
- var version = "0.203.0";
633
+ var version = "0.204.0";
614
634
 
615
635
  // tracing/index.ts
616
636
  function getPropagationContext(ctx) {
@@ -618,13 +638,13 @@ function getPropagationContext(ctx) {
618
638
  traceparent: "",
619
639
  tracestate: ""
620
640
  };
621
- import_api.propagation.inject(ctx, tracing);
641
+ import_api2.propagation.inject(ctx, tracing);
622
642
  return tracing;
623
643
  }
624
- function createSessionTelemetryInfo(sessionId, to, from, propagationCtx) {
625
- const parentCtx = propagationCtx ? import_api.propagation.extract(import_api.context.active(), propagationCtx) : import_api.context.active();
644
+ function createSessionTelemetryInfo(tracer, sessionId, to, from, propagationCtx) {
645
+ const parentCtx = propagationCtx ? import_api2.propagation.extract(import_api2.context.active(), propagationCtx) : import_api2.context.active();
626
646
  const span = tracer.startSpan(
627
- `session ${sessionId}`,
647
+ `river.session.${sessionId}`,
628
648
  {
629
649
  attributes: {
630
650
  component: "river",
@@ -635,11 +655,27 @@ function createSessionTelemetryInfo(sessionId, to, from, propagationCtx) {
635
655
  },
636
656
  parentCtx
637
657
  );
638
- const ctx = import_api.trace.setSpan(parentCtx, span);
658
+ const ctx = import_api2.trace.setSpan(parentCtx, span);
639
659
  return { span, ctx };
640
660
  }
641
- var tracer = import_api.trace.getTracer("river", version);
642
- var tracing_default = tracer;
661
+ function createConnectionTelemetryInfo(tracer, connection, info) {
662
+ const span = tracer.startSpan(
663
+ `connection ${connection.id}`,
664
+ {
665
+ attributes: {
666
+ component: "river",
667
+ "river.connection.id": connection.id
668
+ },
669
+ links: [{ context: info.span.spanContext() }]
670
+ },
671
+ info.ctx
672
+ );
673
+ const ctx = import_api2.trace.setSpan(info.ctx, span);
674
+ return { span, ctx };
675
+ }
676
+ function getTracer() {
677
+ return import_api2.trace.getTracer("river", version);
678
+ }
643
679
 
644
680
  // transport/sessionStateMachine/SessionWaitingForHandshake.ts
645
681
  var SessionWaitingForHandshake = class extends CommonSession {
@@ -745,7 +781,7 @@ var SessionHandshaking = class extends IdentifiedSessionWithGracePeriod {
745
781
  };
746
782
 
747
783
  // transport/sessionStateMachine/SessionConnected.ts
748
- var import_api2 = require("@opentelemetry/api");
784
+ var import_api3 = require("@opentelemetry/api");
749
785
  var SessionConnected = class extends IdentifiedSession {
750
786
  state = "Connected" /* Connected */;
751
787
  conn;
@@ -849,7 +885,7 @@ var SessionConnected = class extends IdentifiedSession {
849
885
  tags: ["invariant-violation"]
850
886
  });
851
887
  this.telemetry.span.setStatus({
852
- code: import_api2.SpanStatusCode.ERROR,
888
+ code: import_api3.SpanStatusCode.ERROR,
853
889
  message: reason
854
890
  });
855
891
  this.closeConnection();
@@ -925,6 +961,7 @@ function inheritSharedSession(session) {
925
961
  telemetry: session.telemetry,
926
962
  options: session.options,
927
963
  log: session.log,
964
+ tracer: session.tracer,
928
965
  protocolVersion: session.protocolVersion
929
966
  };
930
967
  }
@@ -936,9 +973,9 @@ function inheritSharedSessionWithGrace(session) {
936
973
  }
937
974
  var SessionStateGraph = {
938
975
  entrypoints: {
939
- NoConnection: (to, from, listeners, options, protocolVersion, log) => {
976
+ NoConnection: (to, from, listeners, options, protocolVersion, tracer, log) => {
940
977
  const id = `session-${generateId()}`;
941
- const telemetry = createSessionTelemetryInfo(id, to, from);
978
+ const telemetry = createSessionTelemetryInfo(tracer, id, to, from);
942
979
  const sendBuffer = [];
943
980
  const session = new SessionNoConnection({
944
981
  listeners,
@@ -952,6 +989,7 @@ var SessionStateGraph = {
952
989
  telemetry,
953
990
  options,
954
991
  protocolVersion,
992
+ tracer,
955
993
  log
956
994
  });
957
995
  session.log?.info(`session ${session.id} created in NoConnection state`, {
@@ -960,12 +998,13 @@ var SessionStateGraph = {
960
998
  });
961
999
  return session;
962
1000
  },
963
- WaitingForHandshake: (from, conn, listeners, options, log) => {
1001
+ WaitingForHandshake: (from, conn, listeners, options, tracer, log) => {
964
1002
  const session = new SessionWaitingForHandshake({
965
1003
  conn,
966
1004
  listeners,
967
1005
  from,
968
1006
  options,
1007
+ tracer,
969
1008
  log
970
1009
  });
971
1010
  session.log?.info(`session created in WaitingForHandshake state`, {
@@ -1021,6 +1060,11 @@ var SessionStateGraph = {
1021
1060
  listeners,
1022
1061
  ...carriedState
1023
1062
  });
1063
+ conn.telemetry = createConnectionTelemetryInfo(
1064
+ session.tracer,
1065
+ conn,
1066
+ session.telemetry
1067
+ );
1024
1068
  session.log?.info(
1025
1069
  `session ${session.id} transition from Connecting to Handshaking`,
1026
1070
  {
@@ -1064,12 +1108,14 @@ var SessionStateGraph = {
1064
1108
  ack: 0,
1065
1109
  sendBuffer: [],
1066
1110
  telemetry: createSessionTelemetryInfo(
1111
+ pendingSession.tracer,
1067
1112
  sessionId,
1068
1113
  to,
1069
1114
  from,
1070
1115
  propagationCtx
1071
1116
  ),
1072
1117
  options,
1118
+ tracer: pendingSession.tracer,
1073
1119
  log: pendingSession.log,
1074
1120
  protocolVersion
1075
1121
  }
@@ -1081,6 +1127,11 @@ var SessionStateGraph = {
1081
1127
  listeners,
1082
1128
  ...carriedState
1083
1129
  });
1130
+ conn.telemetry = createConnectionTelemetryInfo(
1131
+ session.tracer,
1132
+ conn,
1133
+ session.telemetry
1134
+ );
1084
1135
  session.log?.info(
1085
1136
  `session ${session.id} transition from WaitingForHandshake to Connected`,
1086
1137
  {
@@ -1225,6 +1276,7 @@ var Transport = class {
1225
1276
  */
1226
1277
  options;
1227
1278
  log;
1279
+ tracer;
1228
1280
  sessions;
1229
1281
  /**
1230
1282
  * Creates a new Transport instance.
@@ -1237,6 +1289,7 @@ var Transport = class {
1237
1289
  this.clientId = clientId;
1238
1290
  this.status = "open";
1239
1291
  this.sessions = /* @__PURE__ */ new Map();
1292
+ this.tracer = getTracer();
1240
1293
  }
1241
1294
  bindLogger(fn, level) {
1242
1295
  if (typeof fn === "function") {
@@ -1420,7 +1473,7 @@ var Transport = class {
1420
1473
  };
1421
1474
 
1422
1475
  // transport/client.ts
1423
- var import_api3 = require("@opentelemetry/api");
1476
+ var import_api4 = require("@opentelemetry/api");
1424
1477
 
1425
1478
  // transport/rateLimit.ts
1426
1479
  var LeakyBucketRateLimit = class {
@@ -1489,14 +1542,6 @@ var LeakyBucketRateLimit = class {
1489
1542
  }
1490
1543
  };
1491
1544
 
1492
- // transport/stringifyError.ts
1493
- function coerceErrorString(err) {
1494
- if (err instanceof Error) {
1495
- return err.message || "unknown reason";
1496
- }
1497
- return `[coerced to error] ${String(err)}`;
1498
- }
1499
-
1500
1545
  // transport/client.ts
1501
1546
  var import_value2 = require("@sinclair/typebox/value");
1502
1547
  var ClientTransport = class extends Transport {
@@ -1553,6 +1598,7 @@ var ClientTransport = class extends Transport {
1553
1598
  },
1554
1599
  this.options,
1555
1600
  currentProtocolVersion,
1601
+ this.tracer,
1556
1602
  this.log
1557
1603
  );
1558
1604
  this.createSession(session);
@@ -1621,7 +1667,7 @@ var ClientTransport = class extends Transport {
1621
1667
  }
1622
1668
  rejectHandshakeResponse(session, reason, metadata) {
1623
1669
  session.conn.telemetry?.span.setStatus({
1624
- code: import_api3.SpanStatusCode.ERROR,
1670
+ code: import_api4.SpanStatusCode.ERROR,
1625
1671
  message: reason
1626
1672
  });
1627
1673
  this.log?.warn(reason, metadata);
@@ -1762,18 +1808,21 @@ var ClientTransport = class extends Transport {
1762
1808
  }
1763
1809
  }
1764
1810
  onBackoffFinished(session) {
1765
- const connPromise = tracing_default.startActiveSpan("connect", async (span) => {
1766
- try {
1767
- return await this.createNewOutgoingConnection(session.to);
1768
- } catch (err) {
1769
- const errStr = coerceErrorString(err);
1770
- span.recordException(errStr);
1771
- span.setStatus({ code: import_api3.SpanStatusCode.ERROR });
1772
- throw err;
1773
- } finally {
1774
- span.end();
1811
+ const connPromise = session.tracer.startActiveSpan(
1812
+ "connect",
1813
+ async (span) => {
1814
+ try {
1815
+ return await this.createNewOutgoingConnection(session.to);
1816
+ } catch (err) {
1817
+ const errStr = coerceErrorString(err);
1818
+ span.recordException(errStr);
1819
+ span.setStatus({ code: import_api4.SpanStatusCode.ERROR });
1820
+ throw err;
1821
+ } finally {
1822
+ span.end();
1823
+ }
1775
1824
  }
1776
- });
1825
+ );
1777
1826
  const connectingSession = ClientSessionStateGraph.transition.BackingOffToConnecting(
1778
1827
  session,
1779
1828
  connPromise,
@@ -1842,7 +1891,7 @@ var ClientTransport = class extends Transport {
1842
1891
  };
1843
1892
 
1844
1893
  // transport/server.ts
1845
- var import_api4 = require("@opentelemetry/api");
1894
+ var import_api5 = require("@opentelemetry/api");
1846
1895
  var import_value3 = require("@sinclair/typebox/value");
1847
1896
  var ServerTransport = class extends Transport {
1848
1897
  /**
@@ -1946,13 +1995,14 @@ var ServerTransport = class extends Transport {
1946
1995
  }
1947
1996
  },
1948
1997
  this.options,
1998
+ this.tracer,
1949
1999
  this.log
1950
2000
  );
1951
2001
  this.pendingSessions.add(pendingSession);
1952
2002
  }
1953
2003
  rejectHandshakeRequest(session, to, reason, code, metadata) {
1954
2004
  session.conn.telemetry?.span.setStatus({
1955
- code: import_api4.SpanStatusCode.ERROR,
2005
+ code: import_api5.SpanStatusCode.ERROR,
1956
2006
  message: reason
1957
2007
  });
1958
2008
  this.log?.warn(reason, metadata);
@@ -2206,8 +2256,8 @@ var Connection = class {
2206
2256
  }
2207
2257
  get loggingMetadata() {
2208
2258
  const metadata = { connId: this.id };
2209
- const spanContext = this.telemetry?.span.spanContext();
2210
- if (this.telemetry?.span.isRecording() && spanContext) {
2259
+ if (this.telemetry?.span.isRecording()) {
2260
+ const spanContext = this.telemetry.span.spanContext();
2211
2261
  metadata.telemetry = {
2212
2262
  traceId: spanContext.traceId,
2213
2263
  spanId: spanContext.spanId
@@ -2228,6 +2278,22 @@ var Connection = class {
2228
2278
  get errorListeners() {
2229
2279
  return [...this._errorListeners];
2230
2280
  }
2281
+ onData(msg) {
2282
+ for (const cb of this.dataListeners) {
2283
+ cb(msg);
2284
+ }
2285
+ }
2286
+ onError(err) {
2287
+ for (const cb of this.errorListeners) {
2288
+ cb(err);
2289
+ }
2290
+ }
2291
+ onClose() {
2292
+ for (const cb of this.closeListeners) {
2293
+ cb();
2294
+ }
2295
+ this.telemetry?.span.end();
2296
+ }
2231
2297
  /**
2232
2298
  * Handle adding a callback for when a message is received.
2233
2299
  * @param msg The message that was received.