@replit/river 0.21.0 → 0.22.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 (68) hide show
  1. package/README.md +1 -1
  2. package/dist/{chunk-5WFL722S.js → chunk-3MFX6NXA.js} +94 -3
  3. package/dist/chunk-3MFX6NXA.js.map +1 -0
  4. package/dist/{chunk-NFV77C2M.js → chunk-GCLEWC26.js} +340 -507
  5. package/dist/chunk-GCLEWC26.js.map +1 -0
  6. package/dist/chunk-HUBFYN37.js +60 -0
  7. package/dist/chunk-HUBFYN37.js.map +1 -0
  8. package/dist/{chunk-DT5JS6TM.js → chunk-OTQNCLFH.js} +1 -1
  9. package/dist/chunk-OTQNCLFH.js.map +1 -0
  10. package/dist/{chunk-MJR36SUY.js → chunk-S3YKQT4J.js} +2 -2
  11. package/dist/{chunk-QU2EE6YU.js → chunk-ZPBWKBM5.js} +361 -394
  12. package/dist/chunk-ZPBWKBM5.js.map +1 -0
  13. package/dist/{connection-8a71dbe2.d.ts → connection-8b059ac4.d.ts} +6 -4
  14. package/dist/{connection-d49d5d56.d.ts → connection-bbfe1147.d.ts} +1 -1
  15. package/dist/{index-3ac92295.d.ts → index-2ece5234.d.ts} +18 -7
  16. package/dist/logging/index.cjs.map +1 -1
  17. package/dist/logging/index.d.cts +2 -1
  18. package/dist/logging/index.d.ts +2 -1
  19. package/dist/logging/index.js +1 -1
  20. package/dist/router/index.cjs +384 -492
  21. package/dist/router/index.cjs.map +1 -1
  22. package/dist/router/index.d.cts +5 -4
  23. package/dist/router/index.d.ts +5 -4
  24. package/dist/router/index.js +5 -4
  25. package/dist/{services-abc077db.d.ts → services-acbcc441.d.ts} +1 -1
  26. package/dist/{services-8496d6e8.d.ts → services-cb01a7a8.d.ts} +1 -1
  27. package/dist/transport/impls/uds/client.cjs +202 -155
  28. package/dist/transport/impls/uds/client.cjs.map +1 -1
  29. package/dist/transport/impls/uds/client.d.cts +3 -2
  30. package/dist/transport/impls/uds/client.d.ts +3 -2
  31. package/dist/transport/impls/uds/client.js +4 -4
  32. package/dist/transport/impls/uds/server.cjs +295 -264
  33. package/dist/transport/impls/uds/server.cjs.map +1 -1
  34. package/dist/transport/impls/uds/server.d.cts +3 -2
  35. package/dist/transport/impls/uds/server.d.ts +3 -2
  36. package/dist/transport/impls/uds/server.js +4 -4
  37. package/dist/transport/impls/ws/client.cjs +256 -214
  38. package/dist/transport/impls/ws/client.cjs.map +1 -1
  39. package/dist/transport/impls/ws/client.d.cts +6 -6
  40. package/dist/transport/impls/ws/client.d.ts +6 -6
  41. package/dist/transport/impls/ws/client.js +34 -49
  42. package/dist/transport/impls/ws/client.js.map +1 -1
  43. package/dist/transport/impls/ws/server.cjs +317 -278
  44. package/dist/transport/impls/ws/server.cjs.map +1 -1
  45. package/dist/transport/impls/ws/server.d.cts +5 -4
  46. package/dist/transport/impls/ws/server.d.ts +5 -4
  47. package/dist/transport/impls/ws/server.js +4 -4
  48. package/dist/transport/impls/ws/server.js.map +1 -1
  49. package/dist/transport/index.cjs +406 -391
  50. package/dist/transport/index.cjs.map +1 -1
  51. package/dist/transport/index.d.cts +5 -5
  52. package/dist/transport/index.d.ts +5 -5
  53. package/dist/transport/index.js +3 -3
  54. package/dist/util/testHelpers.cjs +71 -19
  55. package/dist/util/testHelpers.cjs.map +1 -1
  56. package/dist/util/testHelpers.d.cts +20 -8
  57. package/dist/util/testHelpers.d.ts +20 -8
  58. package/dist/util/testHelpers.js +13 -12
  59. package/dist/util/testHelpers.js.map +1 -1
  60. package/dist/wslike-e0b32dd5.d.ts +40 -0
  61. package/package.json +4 -5
  62. package/dist/chunk-2ERP6FUE.js +0 -42
  63. package/dist/chunk-2ERP6FUE.js.map +0 -1
  64. package/dist/chunk-5WFL722S.js.map +0 -1
  65. package/dist/chunk-DT5JS6TM.js.map +0 -1
  66. package/dist/chunk-NFV77C2M.js.map +0 -1
  67. package/dist/chunk-QU2EE6YU.js.map +0 -1
  68. /package/dist/{chunk-MJR36SUY.js.map → chunk-S3YKQT4J.js.map} +0 -0
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -15,6 +17,14 @@ var __copyProps = (to, from, except, desc) => {
15
17
  }
16
18
  return to;
17
19
  };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
18
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
29
 
20
30
  // util/testHelpers.ts
@@ -25,6 +35,7 @@ __export(testHelpers_exports, {
25
35
  asClientSubscription: () => asClientSubscription,
26
36
  asClientUpload: () => asClientUpload,
27
37
  createDummyTransportMessage: () => createDummyTransportMessage,
38
+ createLocalWebSocketClient: () => createLocalWebSocketClient,
28
39
  createWebSocketServer: () => createWebSocketServer,
29
40
  getUnixSocketPath: () => getUnixSocketPath,
30
41
  iterNext: () => iterNext,
@@ -35,7 +46,7 @@ __export(testHelpers_exports, {
35
46
  waitForMessage: () => waitForMessage
36
47
  });
37
48
  module.exports = __toCommonJS(testHelpers_exports);
38
- var import_ws = require("ws");
49
+ var import_ws = __toESM(require("ws"), 1);
39
50
 
40
51
  // node_modules/p-defer/index.js
41
52
  function pDefer() {
@@ -330,10 +341,41 @@ var RiverUncaughtSchema = import_typebox.Type.Object({
330
341
  ]),
331
342
  message: import_typebox.Type.String()
332
343
  });
344
+ function Err(error) {
345
+ return {
346
+ ok: false,
347
+ payload: error
348
+ };
349
+ }
333
350
 
334
351
  // logging/log.ts
335
352
  var log = void 0;
336
353
 
354
+ // tracing/index.ts
355
+ var import_api = require("@opentelemetry/api");
356
+
357
+ // package.json
358
+ var version = "0.22.0";
359
+
360
+ // tracing/index.ts
361
+ function createSessionTelemetryInfo(session, propagationCtx) {
362
+ const ctx = propagationCtx ? import_api.propagation.extract(import_api.context.active(), propagationCtx) : import_api.context.active();
363
+ const span = tracer.startSpan(
364
+ `session ${session.id}`,
365
+ {
366
+ attributes: {
367
+ component: "river",
368
+ "river.session.id": session.id,
369
+ "river.session.to": session.to,
370
+ "river.session.from": session.from
371
+ }
372
+ },
373
+ ctx
374
+ );
375
+ return { span, ctx };
376
+ }
377
+ var tracer = import_api.trace.getTracer("river", version);
378
+
337
379
  // util/stringify.ts
338
380
  function coerceErrorString(err) {
339
381
  if (err instanceof Error) {
@@ -347,11 +389,13 @@ var import_nanoid2 = require("nanoid");
347
389
 
348
390
  // transport/session.ts
349
391
  var import_nanoid = require("nanoid");
392
+ var import_api2 = require("@opentelemetry/api");
350
393
  var nanoid = (0, import_nanoid.customAlphabet)("1234567890abcdefghijklmnopqrstuvxyz", 6);
351
394
  var unsafeId = () => nanoid();
352
395
  var Session = class {
353
396
  codec;
354
397
  options;
398
+ telemetry;
355
399
  /**
356
400
  * The buffer of messages that have been sent but not yet acknowledged.
357
401
  */
@@ -398,7 +442,7 @@ var Session = class {
398
442
  * The interval for sending heartbeats.
399
443
  */
400
444
  heartbeat;
401
- constructor(conn, from, to, options) {
445
+ constructor(conn, from, to, options, propagationCtx) {
402
446
  this.id = `session-${nanoid(12)}`;
403
447
  this.options = options;
404
448
  this.from = from;
@@ -410,13 +454,14 @@ var Session = class {
410
454
  () => this.sendHeartbeat(),
411
455
  options.heartbeatIntervalMs
412
456
  );
457
+ this.telemetry = createSessionTelemetryInfo(this, propagationCtx);
413
458
  }
414
459
  get loggingMetadata() {
415
460
  return {
416
461
  clientId: this.from,
417
462
  connectedTo: this.to,
418
463
  sessionId: this.id,
419
- connId: this.connection?.debugId
464
+ connId: this.connection?.id
420
465
  };
421
466
  }
422
467
  /**
@@ -461,6 +506,7 @@ var Session = class {
461
506
  `closing connection to ${this.to} due to inactivity (missed ${misses} heartbeats which is ${missDuration}ms)`,
462
507
  this.loggingMetadata
463
508
  );
509
+ this.telemetry.span.addEvent("closing connection due to inactivity");
464
510
  this.closeStaleConnection();
465
511
  }
466
512
  return;
@@ -482,32 +528,38 @@ var Session = class {
482
528
  sendBufferedMessages(conn) {
483
529
  log?.info(`resending ${this.sendBuffer.length} buffered messages`, {
484
530
  ...this.loggingMetadata,
485
- connId: conn.debugId
531
+ connId: conn.id
486
532
  });
487
533
  for (const msg of this.sendBuffer) {
488
534
  log?.debug(`resending msg`, {
489
535
  ...this.loggingMetadata,
490
536
  fullTransportMessage: msg,
491
- connId: conn.debugId
537
+ connId: conn.id
492
538
  });
493
539
  const ok = conn.send(this.codec.toBuffer(msg));
494
540
  if (!ok) {
495
541
  const errMsg = `failed to send buffered message to ${this.to} (sus, this is a fresh connection)`;
542
+ conn.telemetry?.span.setStatus({
543
+ code: import_api2.SpanStatusCode.ERROR,
544
+ message: errMsg
545
+ });
496
546
  log?.error(errMsg, {
497
547
  ...this.loggingMetadata,
498
548
  fullTransportMessage: msg,
499
- connId: conn.debugId
549
+ connId: conn.id,
550
+ tags: ["invariant-violation"]
500
551
  });
501
- throw new Error(errMsg);
552
+ conn.close();
553
+ return;
502
554
  }
503
555
  }
504
556
  }
505
557
  updateBookkeeping(ack, seq) {
506
558
  if (seq + 1 < this.ack) {
507
- log?.error(
508
- `received stale seq ${seq} + 1 < ${this.ack}`,
509
- this.loggingMetadata
510
- );
559
+ log?.error(`received stale seq ${seq} + 1 < ${this.ack}`, {
560
+ ...this.loggingMetadata,
561
+ tags: ["invariant-violation"]
562
+ });
511
563
  return;
512
564
  }
513
565
  this.sendBuffer = this.sendBuffer.filter((unacked) => unacked.seq >= ack);
@@ -579,7 +631,6 @@ var Session = class {
579
631
 
580
632
  // transport/transport.ts
581
633
  var import_value = require("@sinclair/typebox/value");
582
- var import_api = require("@opentelemetry/api");
583
634
 
584
635
  // codec/json.ts
585
636
  var encoder = new TextEncoder();
@@ -634,6 +685,7 @@ var NaiveJsonCodec = {
634
685
  };
635
686
 
636
687
  // transport/transport.ts
688
+ var import_api3 = require("@opentelemetry/api");
637
689
  var defaultTransportOptions = {
638
690
  heartbeatIntervalMs: 1e3,
639
691
  heartbeatsUntilDead: 2,
@@ -656,6 +708,11 @@ var defaultServerTransportOptions = {
656
708
  };
657
709
 
658
710
  // util/testHelpers.ts
711
+ function createLocalWebSocketClient(port) {
712
+ const sock = new import_ws.default(`ws://localhost:${port}`);
713
+ sock.binaryType = "arraybuffer";
714
+ return sock;
715
+ }
659
716
  function createWebSocketServer(server) {
660
717
  return new import_ws.WebSocketServer({ server });
661
718
  }
@@ -711,13 +768,7 @@ async function waitForMessage(t, filter, rejectMismatch) {
711
768
  }
712
769
  function catchProcError(err) {
713
770
  const errorMsg = coerceErrorString(err);
714
- return {
715
- ok: false,
716
- payload: {
717
- code: UNCAUGHT_ERROR,
718
- message: errorMsg
719
- }
720
- };
771
+ return Err({ code: UNCAUGHT_ERROR, message: errorMsg });
721
772
  }
722
773
  var testingSessionOptions = defaultTransportOptions;
723
774
  function dummySession() {
@@ -792,6 +843,7 @@ var getUnixSocketPath = () => {
792
843
  asClientSubscription,
793
844
  asClientUpload,
794
845
  createDummyTransportMessage,
846
+ createLocalWebSocketClient,
795
847
  createWebSocketServer,
796
848
  getUnixSocketPath,
797
849
  iterNext,