@replit/river 0.203.1 → 0.205.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 (50) hide show
  1. package/README.md +7 -3
  2. package/dist/{chunk-TMOCPK63.js → chunk-AXZPYUY6.js} +50 -11
  3. package/dist/chunk-AXZPYUY6.js.map +1 -0
  4. package/dist/{chunk-2FHJVQBE.js → chunk-EU2H4J7U.js} +5 -11
  5. package/dist/chunk-EU2H4J7U.js.map +1 -0
  6. package/dist/chunk-GG3GL7CW.js +1955 -0
  7. package/dist/chunk-GG3GL7CW.js.map +1 -0
  8. package/dist/{chunk-T4WWG42M.js → chunk-RAO6UI45.js} +21 -17
  9. package/dist/chunk-RAO6UI45.js.map +1 -0
  10. package/dist/{chunk-7MKTFUJO.js → chunk-VN7QS6OS.js} +4 -3
  11. package/dist/chunk-VN7QS6OS.js.map +1 -0
  12. package/dist/{client-5d2e41a3.d.ts → client-3adfb12a.d.ts} +1 -1
  13. package/dist/{connection-11a4af0f.d.ts → connection-9ca3e7ed.d.ts} +1 -1
  14. package/dist/{context-d6dd8a1a.d.ts → context-1a332293.d.ts} +12 -3
  15. package/dist/router/index.cjs +25 -14
  16. package/dist/router/index.cjs.map +1 -1
  17. package/dist/router/index.d.cts +7 -7
  18. package/dist/router/index.d.ts +7 -7
  19. package/dist/router/index.js +18 -1611
  20. package/dist/router/index.js.map +1 -1
  21. package/dist/{server-e46399f9.d.ts → server-8ac5c6bf.d.ts} +1 -1
  22. package/dist/{services-56cbea0d.d.ts → services-4213d92e.d.ts} +2 -2
  23. package/dist/testUtil/index.cjs +82 -36
  24. package/dist/testUtil/index.cjs.map +1 -1
  25. package/dist/testUtil/index.d.cts +4 -4
  26. package/dist/testUtil/index.d.ts +4 -4
  27. package/dist/testUtil/index.js +8 -6
  28. package/dist/testUtil/index.js.map +1 -1
  29. package/dist/transport/impls/ws/client.cjs +82 -44
  30. package/dist/transport/impls/ws/client.cjs.map +1 -1
  31. package/dist/transport/impls/ws/client.d.cts +3 -3
  32. package/dist/transport/impls/ws/client.d.ts +3 -3
  33. package/dist/transport/impls/ws/client.js +4 -4
  34. package/dist/transport/impls/ws/server.cjs +66 -31
  35. package/dist/transport/impls/ws/server.cjs.map +1 -1
  36. package/dist/transport/impls/ws/server.d.cts +3 -3
  37. package/dist/transport/impls/ws/server.d.ts +3 -3
  38. package/dist/transport/impls/ws/server.js +4 -4
  39. package/dist/transport/index.cjs +80 -35
  40. package/dist/transport/index.cjs.map +1 -1
  41. package/dist/transport/index.d.cts +3 -3
  42. package/dist/transport/index.d.ts +3 -3
  43. package/dist/transport/index.js +4 -4
  44. package/package.json +2 -2
  45. package/dist/chunk-2FHJVQBE.js.map +0 -1
  46. package/dist/chunk-7MKTFUJO.js.map +0 -1
  47. package/dist/chunk-AK7NTFAM.js +0 -331
  48. package/dist/chunk-AK7NTFAM.js.map +0 -1
  49. package/dist/chunk-T4WWG42M.js.map +0 -1
  50. package/dist/chunk-TMOCPK63.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { C as Connection, T as Transport, m as ClientTransportOptions, L as LeakyBucketRateLimit, n as ClientHandshakeOptions, o as ClientSession, b as ProvidedClientTransportOptions, e as SessionNoConnection, f as SessionConnecting, g as SessionHandshaking, h as SessionConnected, p as SessionBackingOff } from './context-d6dd8a1a.js';
1
+ import { C as Connection, T as Transport, m as ClientTransportOptions, L as LeakyBucketRateLimit, n as ClientHandshakeOptions, o as ClientSession, b as ProvidedClientTransportOptions, e as SessionNoConnection, f as SessionConnecting, g as SessionHandshaking, h as SessionConnected, p as SessionBackingOff } from './context-1a332293.js';
2
2
  import { c as TransportClientId, b as OpaqueTransportMessage } from './message-3def9ded.js';
3
3
 
4
4
  declare abstract class ClientTransport<ConnType extends Connection> extends Transport<ConnType> {
@@ -1,6 +1,6 @@
1
1
  import { P as ProtocolVersion, b as OpaqueTransportMessage, e as Tags } from './message-3def9ded.js';
2
2
  import * as _sinclair_typebox_errors from '@sinclair/typebox/errors';
3
- import { C as Connection } from './context-d6dd8a1a.js';
3
+ import { C as Connection } from './context-1a332293.js';
4
4
  import { W as WsLike } from './wslike-e0b32dd5.js';
5
5
 
6
6
  interface ConnectionInfoExtras extends Record<string, unknown> {
@@ -1,7 +1,7 @@
1
1
  import { g as TelemetryInfo, M as MessageMetadata, c as TransportClientId, L as Logger, b as OpaqueTransportMessage, P as ProtocolVersion, f as PartialTransportMessage, a as TransportMessage, e as Tags, H as HandshakeErrorResponseCodes, h as LogFn, j as LoggingLevel, k as HandshakeErrorCustomHandlerFatalResponseCodes } from './message-3def9ded.js';
2
2
  import { Static, TSchema } from '@sinclair/typebox';
3
3
  import * as _sinclair_typebox_errors from '@sinclair/typebox/errors';
4
- import { Span } from '@opentelemetry/api';
4
+ import { Tracer, Span } from '@opentelemetry/api';
5
5
  import { C as Codec } from './types-3e5768ec.js';
6
6
 
7
7
  /**
@@ -21,6 +21,9 @@ declare abstract class Connection {
21
21
  get dataListeners(): ((msg: Uint8Array) => void)[];
22
22
  get closeListeners(): (() => void)[];
23
23
  get errorListeners(): ((err: Error) => void)[];
24
+ onData(msg: Uint8Array): void;
25
+ onError(err: Error): void;
26
+ onClose(): void;
24
27
  /**
25
28
  * Handle adding a callback for when a message is received.
26
29
  * @param msg The message that was received.
@@ -121,14 +124,16 @@ interface SessionOptions {
121
124
  interface CommonSessionProps {
122
125
  from: TransportClientId;
123
126
  options: SessionOptions;
127
+ tracer: Tracer;
124
128
  log: Logger | undefined;
125
129
  }
126
130
  declare abstract class CommonSession extends StateMachineState {
127
131
  readonly from: TransportClientId;
128
132
  readonly options: SessionOptions;
133
+ tracer: Tracer;
129
134
  log?: Logger;
130
135
  abstract get loggingMetadata(): MessageMetadata;
131
- constructor({ from, options, log }: CommonSessionProps);
136
+ constructor({ from, options, log, tracer }: CommonSessionProps);
132
137
  parseMsg(msg: Uint8Array): OpaqueTransportMessage | null;
133
138
  }
134
139
  type SessionId = string;
@@ -316,8 +321,11 @@ type ProtocolErrorType = (typeof ProtocolError)[keyof typeof ProtocolError];
316
321
  interface EventMap {
317
322
  message: OpaqueTransportMessage;
318
323
  sessionStatus: {
319
- status: 'connect' | 'disconnect';
324
+ status: 'created' | 'closing';
320
325
  session: Session<Connection>;
326
+ } | {
327
+ status: 'closed';
328
+ session: Pick<Session<Connection>, 'id' | 'to'>;
321
329
  };
322
330
  sessionTransition: {
323
331
  state: SessionState.Connected;
@@ -461,6 +469,7 @@ declare abstract class Transport<ConnType extends Connection> {
461
469
  */
462
470
  protected options: TransportOptions;
463
471
  log?: Logger;
472
+ tracer: Tracer;
464
473
  sessions: Map<TransportClientId, Session<ConnType>>;
465
474
  /**
466
475
  * Creates a new Transport instance.
@@ -609,11 +609,6 @@ function unwrapOrThrow(result) {
609
609
 
610
610
  // tracing/index.ts
611
611
  var import_api = require("@opentelemetry/api");
612
-
613
- // package.json
614
- var version = "0.203.1";
615
-
616
- // tracing/index.ts
617
612
  function getPropagationContext(ctx) {
618
613
  const tracing = {
619
614
  traceparent: "",
@@ -622,10 +617,10 @@ function getPropagationContext(ctx) {
622
617
  import_api.propagation.inject(ctx, tracing);
623
618
  return tracing;
624
619
  }
625
- function createProcTelemetryInfo(session, kind, serviceName, procedureName, streamId) {
620
+ function createProcTelemetryInfo(tracer, session, kind, serviceName, procedureName, streamId) {
626
621
  const baseCtx = import_api.context.active();
627
622
  const span = tracer.startSpan(
628
- `procedure call ${serviceName}.${procedureName}`,
623
+ `river.client.${serviceName}.${procedureName}`,
629
624
  {
630
625
  attributes: {
631
626
  component: "river",
@@ -657,10 +652,10 @@ function createProcTelemetryInfo(session, kind, serviceName, procedureName, stre
657
652
  session.log?.info(`invoked ${serviceName}.${procedureName}`, metadata);
658
653
  return { span, ctx };
659
654
  }
660
- function createHandlerSpan(session, kind, serviceName, procedureName, streamId, tracing, fn) {
655
+ function createHandlerSpan(tracer, session, kind, serviceName, procedureName, streamId, tracing, fn) {
661
656
  const ctx = tracing ? import_api.propagation.extract(import_api.context.active(), tracing) : import_api.context.active();
662
657
  return tracer.startActiveSpan(
663
- `procedure handler ${serviceName}.${procedureName}`,
658
+ `river.server.${serviceName}.${procedureName}`,
664
659
  {
665
660
  attributes: {
666
661
  component: "river",
@@ -677,7 +672,16 @@ function createHandlerSpan(session, kind, serviceName, procedureName, streamId,
677
672
  fn
678
673
  );
679
674
  }
680
- var tracer = import_api.trace.getTracer("river", version);
675
+ function recordRiverError(span, error) {
676
+ span.setStatus({
677
+ code: import_api.SpanStatusCode.ERROR,
678
+ message: error.message
679
+ });
680
+ span.setAttributes({
681
+ "river.error_code": error.code,
682
+ "river.error_message": error.message
683
+ });
684
+ }
681
685
 
682
686
  // router/streams.ts
683
687
  var ReadableBrokenError = {
@@ -952,6 +956,7 @@ function handleProc(procType, transport, serverId, init, serviceName, procedureN
952
956
  const procClosesWithInit = procType === "rpc" || procType === "subscription";
953
957
  const streamId = generateId();
954
958
  const { span, ctx } = createProcTelemetryInfo(
959
+ transport.tracer,
955
960
  session,
956
961
  procType,
957
962
  serviceName,
@@ -1091,7 +1096,7 @@ function handleProc(procType, transport, serverId, init, serviceName, procedureN
1091
1096
  }
1092
1097
  }
1093
1098
  function onSessionStatus(evt) {
1094
- if (evt.status !== "disconnect" || evt.session.to !== serverId || session.id !== evt.session.id) {
1099
+ if (evt.status !== "closing" || evt.session.to !== serverId || session.id !== evt.session.id) {
1095
1100
  return;
1096
1101
  }
1097
1102
  cleanClose = false;
@@ -1170,7 +1175,6 @@ function coerceErrorString(err) {
1170
1175
  }
1171
1176
 
1172
1177
  // router/server.ts
1173
- var import_api2 = require("@opentelemetry/api");
1174
1178
  var CancelResultSchema = ErrResultSchema(
1175
1179
  import_typebox6.Type.Object({
1176
1180
  code: import_typebox6.Type.Literal(CANCEL_CODE),
@@ -1238,6 +1242,7 @@ var RiverServer = class {
1238
1242
  return;
1239
1243
  }
1240
1244
  createHandlerSpan(
1245
+ transport.tracer,
1241
1246
  newStreamProps.initialSession,
1242
1247
  newStreamProps.procedure.type,
1243
1248
  newStreamProps.serviceName,
@@ -1250,7 +1255,7 @@ var RiverServer = class {
1250
1255
  );
1251
1256
  };
1252
1257
  const handleSessionStatus = (evt) => {
1253
- if (evt.status !== "disconnect")
1258
+ if (evt.status !== "closing")
1254
1259
  return;
1255
1260
  const disconnectedClientId = evt.session.to;
1256
1261
  this.log?.info(
@@ -1416,6 +1421,7 @@ var RiverServer = class {
1416
1421
  this.cancelStream(from, sessionScopedSend, streamId2, payload);
1417
1422
  };
1418
1423
  const onServerCancel = (e) => {
1424
+ recordRiverError(span, e);
1419
1425
  if (reqReadable.isClosed() && resWritable.isClosed()) {
1420
1426
  return;
1421
1427
  }
@@ -1450,6 +1456,9 @@ var RiverServer = class {
1450
1456
  }
1451
1457
  const resWritable = new WritableImpl({
1452
1458
  writeCb: (response) => {
1459
+ if (!response.ok) {
1460
+ recordRiverError(span, response.payload);
1461
+ }
1453
1462
  sessionScopedSend({
1454
1463
  streamId,
1455
1464
  controlFlags: procClosesWithResponse ? getStreamCloseBackwardsCompat(protocolVersion) : 0,
@@ -1479,7 +1488,6 @@ var RiverServer = class {
1479
1488
  const onHandlerError = (err, span2) => {
1480
1489
  const errorMsg = coerceErrorString(err);
1481
1490
  span2.recordException(err instanceof Error ? err : new Error(errorMsg));
1482
- span2.setStatus({ code: import_api2.SpanStatusCode.ERROR });
1483
1491
  this.log?.error(
1484
1492
  `${serviceName}.${procedureName} handler threw an uncaught error`,
1485
1493
  {
@@ -1848,6 +1856,9 @@ function createClientHandshakeOptions(schema, construct) {
1848
1856
  function createServerHandshakeOptions(schema, validate) {
1849
1857
  return { schema, validate };
1850
1858
  }
1859
+
1860
+ // package.json
1861
+ var version = "0.205.0";
1851
1862
  // Annotate the CommonJS export names for ESM import in node:
1852
1863
  0 && (module.exports = {
1853
1864
  CANCEL_CODE,