@replit/river 0.213.1 → 0.215.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/{adapter-Cp7_gIVA.d.ts → adapter-CgF7vQPu.d.ts} +3 -2
  2. package/dist/{adapter-DjiEwOYi.d.cts → adapter-IGrG4KLL.d.cts} +3 -2
  3. package/dist/{chunk-X4PP65DW.js → chunk-RDTQZ7HO.js} +58 -18
  4. package/dist/chunk-RDTQZ7HO.js.map +1 -0
  5. package/dist/{chunk-2A645F27.js → chunk-VXRAFUA3.js} +178 -54
  6. package/dist/chunk-VXRAFUA3.js.map +1 -0
  7. package/dist/{client-Dw0JBBs3.d.ts → client-BhwlY0-L.d.ts} +2 -2
  8. package/dist/{client-DXJRow2s.d.cts → client-Dk4H7qeg.d.cts} +2 -2
  9. package/dist/codec/index.cjs.map +1 -1
  10. package/dist/codec/index.d.cts +3 -3
  11. package/dist/codec/index.d.ts +3 -3
  12. package/dist/codec/index.js +2 -2
  13. package/dist/{connection-Dzkqj18h.d.cts → connection-CS00EWuS.d.cts} +3 -3
  14. package/dist/{connection-C2lYgRh0.d.ts → connection-DU9v3y8a.d.ts} +3 -3
  15. package/dist/{index-D9R6UTMl.d.cts → index-CHCzvZ9D.d.cts} +1 -1
  16. package/dist/{index-CSM8soK7.d.ts → index-uF0cBM7z.d.ts} +1 -1
  17. package/dist/logging/index.d.cts +2 -2
  18. package/dist/logging/index.d.ts +2 -2
  19. package/dist/{message-Dlsh5WDF.d.cts → message-aABg0s5M.d.cts} +12 -1
  20. package/dist/{message-Dlsh5WDF.d.ts → message-aABg0s5M.d.ts} +12 -1
  21. package/dist/router/index.cjs +60 -17
  22. package/dist/router/index.cjs.map +1 -1
  23. package/dist/router/index.d.cts +10 -10
  24. package/dist/router/index.d.ts +10 -10
  25. package/dist/router/index.js +1 -1
  26. package/dist/{server-BDSYa-CO.d.cts → server-BR0DZaWi.d.cts} +4 -4
  27. package/dist/{server-DFOzjvLh.d.ts → server-uNzkzIRh.d.ts} +4 -4
  28. package/dist/{services-C656NVV3.d.cts → services-B5SY771g.d.ts} +20 -4
  29. package/dist/{services-ChTb4jmc.d.ts → services-DBv2nmly.d.cts} +20 -4
  30. package/dist/testUtil/index.cjs +179 -53
  31. package/dist/testUtil/index.cjs.map +1 -1
  32. package/dist/testUtil/index.d.cts +7 -7
  33. package/dist/testUtil/index.d.ts +7 -7
  34. package/dist/testUtil/index.js +4 -2
  35. package/dist/testUtil/index.js.map +1 -1
  36. package/dist/transport/impls/ws/client.cjs +166 -53
  37. package/dist/transport/impls/ws/client.cjs.map +1 -1
  38. package/dist/transport/impls/ws/client.d.cts +6 -6
  39. package/dist/transport/impls/ws/client.d.ts +6 -6
  40. package/dist/transport/impls/ws/client.js +2 -2
  41. package/dist/transport/impls/ws/server.cjs +133 -53
  42. package/dist/transport/impls/ws/server.cjs.map +1 -1
  43. package/dist/transport/impls/ws/server.d.cts +6 -6
  44. package/dist/transport/impls/ws/server.d.ts +6 -6
  45. package/dist/transport/impls/ws/server.js +2 -2
  46. package/dist/transport/index.cjs +177 -53
  47. package/dist/transport/index.cjs.map +1 -1
  48. package/dist/transport/index.d.cts +7 -7
  49. package/dist/transport/index.d.ts +7 -7
  50. package/dist/transport/index.js +2 -2
  51. package/dist/{transport-CxT7y8Qk.d.cts → transport-BOL2p5s-.d.ts} +70 -64
  52. package/dist/{transport-pdbkDzmJ.d.ts → transport-D3jzhFSi.d.cts} +70 -64
  53. package/package.json +1 -1
  54. package/dist/chunk-2A645F27.js.map +0 -1
  55. package/dist/chunk-X4PP65DW.js.map +0 -1
@@ -92,6 +92,17 @@ type PartialTransportMessage<Payload = unknown> = Omit<TransportMessage<Payload>
92
92
  */
93
93
  type OpaqueTransportMessage = TransportMessage;
94
94
  type TransportClientId = string;
95
+ /**
96
+ * An encoded message that is ready to be sent over the transport.
97
+ * The seq number is kept to track which messages have been
98
+ * acked by the peer and can be dropped from the send buffer.
99
+ */
100
+ interface EncodedTransportMessage {
101
+ id: string;
102
+ seq: number;
103
+ msg: PartialTransportMessage;
104
+ data: Uint8Array;
105
+ }
95
106
  /**
96
107
  * Checks if the given control flag (usually found in msg.controlFlag) is a stream open message.
97
108
  * @param controlFlag - The control flag to check.
@@ -105,4 +116,4 @@ declare function isStreamOpen(controlFlag: number): boolean;
105
116
  */
106
117
  declare function isStreamClose(controlFlag: number): boolean;
107
118
 
108
- export { HandshakeErrorResponseCodes as H, OpaqueTransportMessageSchema as O, type ProtocolVersion as P, TransportMessageSchema as T, type TransportMessage as a, type OpaqueTransportMessage as b, type TransportClientId as c, isStreamClose as d, type PartialTransportMessage as e, type TelemetryInfo as f, HandshakeErrorCustomHandlerFatalResponseCodes as g, isStreamOpen as i };
119
+ export { type EncodedTransportMessage as E, HandshakeErrorResponseCodes as H, OpaqueTransportMessageSchema as O, type ProtocolVersion as P, TransportMessageSchema as T, type TransportMessage as a, type OpaqueTransportMessage as b, type TransportClientId as c, isStreamClose as d, type PartialTransportMessage as e, type TelemetryInfo as f, HandshakeErrorCustomHandlerFatalResponseCodes as g, isStreamOpen as i };
@@ -92,6 +92,17 @@ type PartialTransportMessage<Payload = unknown> = Omit<TransportMessage<Payload>
92
92
  */
93
93
  type OpaqueTransportMessage = TransportMessage;
94
94
  type TransportClientId = string;
95
+ /**
96
+ * An encoded message that is ready to be sent over the transport.
97
+ * The seq number is kept to track which messages have been
98
+ * acked by the peer and can be dropped from the send buffer.
99
+ */
100
+ interface EncodedTransportMessage {
101
+ id: string;
102
+ seq: number;
103
+ msg: PartialTransportMessage;
104
+ data: Uint8Array;
105
+ }
95
106
  /**
96
107
  * Checks if the given control flag (usually found in msg.controlFlag) is a stream open message.
97
108
  * @param controlFlag - The control flag to check.
@@ -105,4 +116,4 @@ declare function isStreamOpen(controlFlag: number): boolean;
105
116
  */
106
117
  declare function isStreamClose(controlFlag: number): boolean;
107
118
 
108
- export { HandshakeErrorResponseCodes as H, OpaqueTransportMessageSchema as O, type ProtocolVersion as P, TransportMessageSchema as T, type TransportMessage as a, type OpaqueTransportMessage as b, type TransportClientId as c, isStreamClose as d, type PartialTransportMessage as e, type TelemetryInfo as f, HandshakeErrorCustomHandlerFatalResponseCodes as g, isStreamOpen as i };
119
+ export { type EncodedTransportMessage as E, HandshakeErrorResponseCodes as H, OpaqueTransportMessageSchema as O, type ProtocolVersion as P, TransportMessageSchema as T, type TransportMessage as a, type OpaqueTransportMessage as b, type TransportClientId as c, isStreamClose as d, type PartialTransportMessage as e, type TelemetryInfo as f, HandshakeErrorCustomHandlerFatalResponseCodes as g, isStreamOpen as i };
@@ -927,6 +927,9 @@ function recordRiverError(span, error) {
927
927
  "river.error_message": error.message
928
928
  });
929
929
  }
930
+ function getTracer() {
931
+ return import_api.trace.getTracer("river", version);
932
+ }
930
933
 
931
934
  // router/client.ts
932
935
  var import_value = require("@sinclair/typebox/value");
@@ -1158,14 +1161,19 @@ function handleProc(procType, transport, serverId, init, serviceName, procedureN
1158
1161
  abortSignal?.addEventListener("abort", onClientCancel);
1159
1162
  transport.addEventListener("message", onMessage);
1160
1163
  transport.addEventListener("sessionStatus", onSessionStatus);
1161
- sessionScopedSend({
1162
- streamId,
1163
- serviceName,
1164
- procedureName,
1165
- tracing: getPropagationContext(ctx),
1166
- payload: init,
1167
- controlFlags: procClosesWithInit ? 2 /* StreamOpenBit */ | 8 /* StreamClosedBit */ : 2 /* StreamOpenBit */
1168
- });
1164
+ try {
1165
+ sessionScopedSend({
1166
+ streamId,
1167
+ serviceName,
1168
+ procedureName,
1169
+ tracing: getPropagationContext(ctx),
1170
+ payload: init,
1171
+ controlFlags: procClosesWithInit ? 2 /* StreamOpenBit */ | 8 /* StreamClosedBit */ : 2 /* StreamOpenBit */
1172
+ });
1173
+ } catch (e) {
1174
+ cleanup();
1175
+ throw e;
1176
+ }
1169
1177
  if (procClosesWithInit) {
1170
1178
  reqWritable.close();
1171
1179
  }
@@ -1238,6 +1246,7 @@ function coerceErrorString(err) {
1238
1246
  }
1239
1247
 
1240
1248
  // router/server.ts
1249
+ var import_api2 = require("@opentelemetry/api");
1241
1250
  var RiverServer = class {
1242
1251
  transport;
1243
1252
  contextMap;
@@ -1501,9 +1510,49 @@ var RiverServer = class {
1501
1510
  resWritable.close();
1502
1511
  cancelStream(streamId, result);
1503
1512
  };
1513
+ const deferredCleanups = [];
1514
+ let cleanupsHaveRun = false;
1515
+ const runCleanupSafe = async (fn) => {
1516
+ try {
1517
+ await fn();
1518
+ } catch (err) {
1519
+ span.recordException(
1520
+ err instanceof Error ? err : new Error(coerceErrorString(err))
1521
+ );
1522
+ }
1523
+ };
1524
+ const deferCleanup = (fn) => {
1525
+ if (cleanupsHaveRun) {
1526
+ void runCleanupSafe(fn);
1527
+ return;
1528
+ }
1529
+ deferredCleanups.push(fn);
1530
+ };
1531
+ const runDeferredCleanups = async () => {
1532
+ if (deferredCleanups.length === 0) {
1533
+ cleanupsHaveRun = true;
1534
+ span.end();
1535
+ return;
1536
+ }
1537
+ const cleanupSpan = getTracer().startSpan(
1538
+ "river.cleanup",
1539
+ {},
1540
+ import_api2.trace.setSpan(import_api2.context.active(), span)
1541
+ );
1542
+ try {
1543
+ for (let fn = deferredCleanups.pop(); fn; fn = deferredCleanups.pop()) {
1544
+ await runCleanupSafe(fn);
1545
+ }
1546
+ } finally {
1547
+ cleanupsHaveRun = true;
1548
+ cleanupSpan.end();
1549
+ span.end();
1550
+ }
1551
+ };
1504
1552
  const cleanup = () => {
1505
1553
  finishedController.abort();
1506
1554
  this.streams.delete(streamId);
1555
+ void runDeferredCleanups();
1507
1556
  };
1508
1557
  const procClosesWithResponse = procedure.type === "rpc" || procedure.type === "upload";
1509
1558
  const reqReadable = new ReadableImpl();
@@ -1592,6 +1641,7 @@ var RiverServer = class {
1592
1641
  onServerCancel(errRes);
1593
1642
  return Err(errRes);
1594
1643
  },
1644
+ deferCleanup,
1595
1645
  signal: finishedController.signal
1596
1646
  };
1597
1647
  const middlewareContext = {
@@ -1600,6 +1650,7 @@ var RiverServer = class {
1600
1650
  from,
1601
1651
  metadata: sessionMetadata,
1602
1652
  span,
1653
+ deferCleanup,
1603
1654
  signal: finishedController.signal,
1604
1655
  streamId,
1605
1656
  procedureName,
@@ -1619,8 +1670,6 @@ var RiverServer = class {
1619
1670
  resWritable.write(responsePayload);
1620
1671
  } catch (err) {
1621
1672
  onHandlerError(err, span);
1622
- } finally {
1623
- span.end();
1624
1673
  }
1625
1674
  break;
1626
1675
  case "stream":
@@ -1633,8 +1682,6 @@ var RiverServer = class {
1633
1682
  });
1634
1683
  } catch (err) {
1635
1684
  onHandlerError(err, span);
1636
- } finally {
1637
- span.end();
1638
1685
  }
1639
1686
  break;
1640
1687
  case "subscription":
@@ -1646,8 +1693,6 @@ var RiverServer = class {
1646
1693
  });
1647
1694
  } catch (err) {
1648
1695
  onHandlerError(err, span);
1649
- } finally {
1650
- span.end();
1651
1696
  }
1652
1697
  break;
1653
1698
  case "upload":
@@ -1663,8 +1708,6 @@ var RiverServer = class {
1663
1708
  resWritable.write(responsePayload);
1664
1709
  } catch (err) {
1665
1710
  onHandlerError(err, span);
1666
- } finally {
1667
- span.end();
1668
1711
  }
1669
1712
  break;
1670
1713
  }
@@ -1966,7 +2009,7 @@ function createServerHandshakeOptions(schema, validate) {
1966
2009
  }
1967
2010
 
1968
2011
  // package.json
1969
- var version = "0.213.1";
2012
+ var version = "0.215.0";
1970
2013
  // Annotate the CommonJS export names for ESM import in node:
1971
2014
  0 && (module.exports = {
1972
2015
  CANCEL_CODE,