@replit/river 0.202.0 → 0.203.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 (50) hide show
  1. package/dist/{chunk-BDUOHZMF.js → chunk-2FHJVQBE.js} +2 -2
  2. package/dist/{chunk-2T22KY5X.js → chunk-7MKTFUJO.js} +3 -3
  3. package/dist/{chunk-QMXUCLGE.js → chunk-AK7NTFAM.js} +31 -10
  4. package/dist/{chunk-QMXUCLGE.js.map → chunk-AK7NTFAM.js.map} +1 -1
  5. package/dist/{chunk-NSH4D6OB.js → chunk-T4WWG42M.js} +13 -3
  6. package/dist/chunk-T4WWG42M.js.map +1 -0
  7. package/dist/{chunk-W4AGHFXK.js → chunk-TMOCPK63.js} +18 -8
  8. package/dist/chunk-TMOCPK63.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/{client-a32692b0.d.ts → client-5d2e41a3.d.ts} +7 -1
  12. package/dist/{connection-48d021ca.d.ts → connection-11a4af0f.d.ts} +1 -1
  13. package/dist/{context-8d263a7f.d.ts → context-d6dd8a1a.d.ts} +14 -0
  14. package/dist/logging/index.cjs +1 -0
  15. package/dist/logging/index.cjs.map +1 -1
  16. package/dist/logging/index.js +1 -1
  17. package/dist/router/index.cjs +91 -103
  18. package/dist/router/index.cjs.map +1 -1
  19. package/dist/router/index.d.cts +7 -7
  20. package/dist/router/index.d.ts +7 -7
  21. package/dist/router/index.js +78 -95
  22. package/dist/router/index.js.map +1 -1
  23. package/dist/{server-48d90a77.d.ts → server-e46399f9.d.ts} +1 -1
  24. package/dist/{services-a05f5174.d.ts → services-56cbea0d.d.ts} +2 -2
  25. package/dist/testUtil/index.cjs +55 -11
  26. package/dist/testUtil/index.cjs.map +1 -1
  27. package/dist/testUtil/index.d.cts +5 -5
  28. package/dist/testUtil/index.d.ts +5 -5
  29. package/dist/testUtil/index.js +5 -5
  30. package/dist/transport/impls/ws/client.cjs +60 -16
  31. package/dist/transport/impls/ws/client.cjs.map +1 -1
  32. package/dist/transport/impls/ws/client.d.cts +3 -3
  33. package/dist/transport/impls/ws/client.d.ts +3 -3
  34. package/dist/transport/impls/ws/client.js +5 -5
  35. package/dist/transport/impls/ws/server.cjs +48 -14
  36. package/dist/transport/impls/ws/server.cjs.map +1 -1
  37. package/dist/transport/impls/ws/server.d.cts +3 -3
  38. package/dist/transport/impls/ws/server.d.ts +3 -3
  39. package/dist/transport/impls/ws/server.js +5 -5
  40. package/dist/transport/index.cjs +62 -18
  41. package/dist/transport/index.cjs.map +1 -1
  42. package/dist/transport/index.d.cts +4 -4
  43. package/dist/transport/index.d.ts +4 -4
  44. package/dist/transport/index.js +5 -5
  45. package/package.json +2 -2
  46. package/dist/chunk-LHH5LQ7C.js.map +0 -1
  47. package/dist/chunk-NSH4D6OB.js.map +0 -1
  48. package/dist/chunk-W4AGHFXK.js.map +0 -1
  49. /package/dist/{chunk-BDUOHZMF.js.map → chunk-2FHJVQBE.js.map} +0 -0
  50. /package/dist/{chunk-2T22KY5X.js.map → chunk-7MKTFUJO.js.map} +0 -0
@@ -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-48d021ca.js';
3
+ import { W as WebSocketConnection } from '../../../connection-11a4af0f.js';
4
4
  import { W as WsLike } from '../../../wslike-e0b32dd5.js';
5
- import { S as ServerTransport } from '../../../server-48d90a77.js';
6
- import { c as ProvidedServerTransportOptions } from '../../../context-8d263a7f.js';
5
+ import { S as ServerTransport } from '../../../server-e46399f9.js';
6
+ import { c as ProvidedServerTransportOptions } from '../../../context-d6dd8a1a.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-48d021ca.js';
3
+ import { W as WebSocketConnection } from '../../../connection-11a4af0f.js';
4
4
  import { W as WsLike } from '../../../wslike-e0b32dd5.js';
5
- import { S as ServerTransport } from '../../../server-48d90a77.js';
6
- import { c as ProvidedServerTransportOptions } from '../../../context-8d263a7f.js';
5
+ import { S as ServerTransport } from '../../../server-e46399f9.js';
6
+ import { c as ProvidedServerTransportOptions } from '../../../context-d6dd8a1a.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-2T22KY5X.js";
3
+ } from "../../../chunk-7MKTFUJO.js";
4
4
  import {
5
5
  WebSocketConnection
6
- } from "../../../chunk-BDUOHZMF.js";
7
- import "../../../chunk-W4AGHFXK.js";
8
- import "../../../chunk-QMXUCLGE.js";
9
- import "../../../chunk-LHH5LQ7C.js";
6
+ } from "../../../chunk-2FHJVQBE.js";
7
+ import "../../../chunk-TMOCPK63.js";
8
+ import "../../../chunk-AK7NTFAM.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;
@@ -367,6 +377,14 @@ var StateMachineState = class {
367
377
  * and we've moved on to another state
368
378
  */
369
379
  _isConsumed;
380
+ /**
381
+ * Cleanup this state machine state and mark it as consumed.
382
+ * After calling close, it is an error to access any properties on the state.
383
+ * You should never need to call this as a consumer.
384
+ *
385
+ * If you're looking to close the session from the client,
386
+ * use `.hardDisconnect` on the client transport.
387
+ */
370
388
  close() {
371
389
  this._handleClose();
372
390
  }
@@ -421,9 +439,8 @@ var CommonSession = class extends StateMachineState {
421
439
  parseMsg(msg) {
422
440
  const parsedMsg = this.options.codec.fromBuffer(msg);
423
441
  if (parsedMsg === null) {
424
- const decodedBuffer = new TextDecoder().decode(Buffer.from(msg));
425
442
  this.log?.error(
426
- `received malformed msg: ${decodedBuffer}`,
443
+ `received malformed msg: ${Buffer.from(msg).toString("base64")}`,
427
444
  this.loggingMetadata
428
445
  );
429
446
  return null;
@@ -467,13 +484,13 @@ var IdentifiedSession = class extends CommonSession {
467
484
  this.protocolVersion = protocolVersion;
468
485
  }
469
486
  get loggingMetadata() {
470
- const spanContext = this.telemetry.span.spanContext();
471
487
  const metadata = {
472
488
  clientId: this.from,
473
489
  connectedTo: this.to,
474
490
  sessionId: this.id
475
491
  };
476
492
  if (this.telemetry.span.isRecording()) {
493
+ const spanContext = this.telemetry.span.spanContext();
477
494
  metadata.telemetry = {
478
495
  traceId: spanContext.traceId,
479
496
  spanId: spanContext.spanId
@@ -600,10 +617,10 @@ var SessionNoConnection = class extends IdentifiedSessionWithGracePeriod {
600
617
  };
601
618
 
602
619
  // tracing/index.ts
603
- var import_api = require("@opentelemetry/api");
620
+ var import_api2 = require("@opentelemetry/api");
604
621
 
605
622
  // package.json
606
- var version = "0.202.0";
623
+ var version = "0.203.1";
607
624
 
608
625
  // tracing/index.ts
609
626
  function getPropagationContext(ctx) {
@@ -611,11 +628,11 @@ function getPropagationContext(ctx) {
611
628
  traceparent: "",
612
629
  tracestate: ""
613
630
  };
614
- import_api.propagation.inject(ctx, tracing);
631
+ import_api2.propagation.inject(ctx, tracing);
615
632
  return tracing;
616
633
  }
617
634
  function createSessionTelemetryInfo(sessionId, to, from, propagationCtx) {
618
- const parentCtx = propagationCtx ? import_api.propagation.extract(import_api.context.active(), propagationCtx) : import_api.context.active();
635
+ const parentCtx = propagationCtx ? import_api2.propagation.extract(import_api2.context.active(), propagationCtx) : import_api2.context.active();
619
636
  const span = tracer.startSpan(
620
637
  `session ${sessionId}`,
621
638
  {
@@ -628,10 +645,25 @@ function createSessionTelemetryInfo(sessionId, to, from, propagationCtx) {
628
645
  },
629
646
  parentCtx
630
647
  );
631
- const ctx = import_api.trace.setSpan(parentCtx, span);
648
+ const ctx = import_api2.trace.setSpan(parentCtx, span);
649
+ return { span, ctx };
650
+ }
651
+ function createConnectionTelemetryInfo(connection, info) {
652
+ const span = tracer.startSpan(
653
+ `connection ${connection.id}`,
654
+ {
655
+ attributes: {
656
+ component: "river",
657
+ "river.connection.id": connection.id
658
+ },
659
+ links: [{ context: info.span.spanContext() }]
660
+ },
661
+ info.ctx
662
+ );
663
+ const ctx = import_api2.trace.setSpan(info.ctx, span);
632
664
  return { span, ctx };
633
665
  }
634
- var tracer = import_api.trace.getTracer("river", version);
666
+ var tracer = import_api2.trace.getTracer("river", version);
635
667
  var tracing_default = tracer;
636
668
 
637
669
  // transport/sessionStateMachine/SessionWaitingForHandshake.ts
@@ -738,7 +770,7 @@ var SessionHandshaking = class extends IdentifiedSessionWithGracePeriod {
738
770
  };
739
771
 
740
772
  // transport/sessionStateMachine/SessionConnected.ts
741
- var import_api2 = require("@opentelemetry/api");
773
+ var import_api3 = require("@opentelemetry/api");
742
774
  var SessionConnected = class extends IdentifiedSession {
743
775
  state = "Connected" /* Connected */;
744
776
  conn;
@@ -842,7 +874,7 @@ var SessionConnected = class extends IdentifiedSession {
842
874
  tags: ["invariant-violation"]
843
875
  });
844
876
  this.telemetry.span.setStatus({
845
- code: import_api2.SpanStatusCode.ERROR,
877
+ code: import_api3.SpanStatusCode.ERROR,
846
878
  message: reason
847
879
  });
848
880
  this.closeConnection();
@@ -1014,6 +1046,7 @@ var SessionStateGraph = {
1014
1046
  listeners,
1015
1047
  ...carriedState
1016
1048
  });
1049
+ conn.telemetry = createConnectionTelemetryInfo(conn, session.telemetry);
1017
1050
  session.log?.info(
1018
1051
  `session ${session.id} transition from Connecting to Handshaking`,
1019
1052
  {
@@ -1074,6 +1107,7 @@ var SessionStateGraph = {
1074
1107
  listeners,
1075
1108
  ...carriedState
1076
1109
  });
1110
+ conn.telemetry = createConnectionTelemetryInfo(conn, session.telemetry);
1077
1111
  session.log?.info(
1078
1112
  `session ${session.id} transition from WaitingForHandshake to Connected`,
1079
1113
  {
@@ -1413,7 +1447,7 @@ var Transport = class {
1413
1447
  };
1414
1448
 
1415
1449
  // transport/client.ts
1416
- var import_api3 = require("@opentelemetry/api");
1450
+ var import_api4 = require("@opentelemetry/api");
1417
1451
 
1418
1452
  // transport/rateLimit.ts
1419
1453
  var LeakyBucketRateLimit = class {
@@ -1614,7 +1648,7 @@ var ClientTransport = class extends Transport {
1614
1648
  }
1615
1649
  rejectHandshakeResponse(session, reason, metadata) {
1616
1650
  session.conn.telemetry?.span.setStatus({
1617
- code: import_api3.SpanStatusCode.ERROR,
1651
+ code: import_api4.SpanStatusCode.ERROR,
1618
1652
  message: reason
1619
1653
  });
1620
1654
  this.log?.warn(reason, metadata);
@@ -1744,6 +1778,16 @@ var ClientTransport = class extends Transport {
1744
1778
  );
1745
1779
  this.updateSession(backingOffSession);
1746
1780
  }
1781
+ /**
1782
+ * Manually kills all sessions to the server (including all pending state).
1783
+ * This is useful for when you want to close all connections to a server
1784
+ * and don't want to wait for the grace period to elapse.
1785
+ */
1786
+ hardDisconnect() {
1787
+ for (const session of this.sessions.values()) {
1788
+ this.deleteSession(session);
1789
+ }
1790
+ }
1747
1791
  onBackoffFinished(session) {
1748
1792
  const connPromise = tracing_default.startActiveSpan("connect", async (span) => {
1749
1793
  try {
@@ -1751,7 +1795,7 @@ var ClientTransport = class extends Transport {
1751
1795
  } catch (err) {
1752
1796
  const errStr = coerceErrorString(err);
1753
1797
  span.recordException(errStr);
1754
- span.setStatus({ code: import_api3.SpanStatusCode.ERROR });
1798
+ span.setStatus({ code: import_api4.SpanStatusCode.ERROR });
1755
1799
  throw err;
1756
1800
  } finally {
1757
1801
  span.end();
@@ -1825,7 +1869,7 @@ var ClientTransport = class extends Transport {
1825
1869
  };
1826
1870
 
1827
1871
  // transport/server.ts
1828
- var import_api4 = require("@opentelemetry/api");
1872
+ var import_api5 = require("@opentelemetry/api");
1829
1873
  var import_value3 = require("@sinclair/typebox/value");
1830
1874
  var ServerTransport = class extends Transport {
1831
1875
  /**
@@ -1935,7 +1979,7 @@ var ServerTransport = class extends Transport {
1935
1979
  }
1936
1980
  rejectHandshakeRequest(session, to, reason, code, metadata) {
1937
1981
  session.conn.telemetry?.span.setStatus({
1938
- code: import_api4.SpanStatusCode.ERROR,
1982
+ code: import_api5.SpanStatusCode.ERROR,
1939
1983
  message: reason
1940
1984
  });
1941
1985
  this.log?.warn(reason, metadata);
@@ -2189,8 +2233,8 @@ var Connection = class {
2189
2233
  }
2190
2234
  get loggingMetadata() {
2191
2235
  const metadata = { connId: this.id };
2192
- const spanContext = this.telemetry?.span.spanContext();
2193
- if (this.telemetry?.span.isRecording() && spanContext) {
2236
+ if (this.telemetry?.span.isRecording()) {
2237
+ const spanContext = this.telemetry.span.spanContext();
2194
2238
  metadata.telemetry = {
2195
2239
  traceId: spanContext.traceId,
2196
2240
  spanId: spanContext.spanId