@replit/river 0.207.2 → 0.208.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 (65) hide show
  1. package/dist/adapter-ChksXKVN.d.ts +46 -0
  2. package/dist/adapter-Cuc4JtfV.d.cts +46 -0
  3. package/dist/chunk-2JNVDUMN.js +2238 -0
  4. package/dist/chunk-2JNVDUMN.js.map +1 -0
  5. package/dist/{chunk-4HE7UYRL.js → chunk-DKW3GC3M.js} +6 -5
  6. package/dist/{chunk-4HE7UYRL.js.map → chunk-DKW3GC3M.js.map} +1 -1
  7. package/dist/{chunk-46IVOKJU.js → chunk-ETZAHFGQ.js} +80 -61
  8. package/dist/chunk-ETZAHFGQ.js.map +1 -0
  9. package/dist/codec/index.cjs +157 -23
  10. package/dist/codec/index.cjs.map +1 -1
  11. package/dist/codec/index.d.cts +5 -1
  12. package/dist/codec/index.d.ts +5 -1
  13. package/dist/codec/index.js +6 -20
  14. package/dist/codec/index.js.map +1 -1
  15. package/dist/connection-BF4zg6Qv.d.cts +35 -0
  16. package/dist/{connection-a18e31d5.d.ts → connection-Donr3JRB.d.ts} +4 -3
  17. package/dist/index-C9tpZjBN.d.cts +37 -0
  18. package/dist/index-D8IOd3LG.d.ts +37 -0
  19. package/dist/logging/index.d.cts +2 -1
  20. package/dist/logging/index.d.ts +2 -1
  21. package/dist/{message-ffacb98a.d.ts → message-Di94OL80.d.cts} +1 -35
  22. package/dist/message-Di94OL80.d.ts +108 -0
  23. package/dist/router/index.cjs +62 -43
  24. package/dist/router/index.cjs.map +1 -1
  25. package/dist/router/index.d.cts +27 -7
  26. package/dist/router/index.d.ts +27 -7
  27. package/dist/router/index.js +1 -1
  28. package/dist/testUtil/index.cjs +828 -725
  29. package/dist/testUtil/index.cjs.map +1 -1
  30. package/dist/testUtil/index.d.cts +5 -4
  31. package/dist/testUtil/index.d.ts +5 -4
  32. package/dist/testUtil/index.js +23 -25
  33. package/dist/testUtil/index.js.map +1 -1
  34. package/dist/transport/impls/ws/client.cjs +293 -233
  35. package/dist/transport/impls/ws/client.cjs.map +1 -1
  36. package/dist/transport/impls/ws/client.d.cts +6 -5
  37. package/dist/transport/impls/ws/client.d.ts +6 -5
  38. package/dist/transport/impls/ws/client.js +5 -7
  39. package/dist/transport/impls/ws/client.js.map +1 -1
  40. package/dist/transport/impls/ws/server.cjs +269 -200
  41. package/dist/transport/impls/ws/server.cjs.map +1 -1
  42. package/dist/transport/impls/ws/server.d.cts +6 -5
  43. package/dist/transport/impls/ws/server.d.ts +6 -5
  44. package/dist/transport/impls/ws/server.js +5 -7
  45. package/dist/transport/impls/ws/server.js.map +1 -1
  46. package/dist/transport/index.cjs +438 -342
  47. package/dist/transport/index.cjs.map +1 -1
  48. package/dist/transport/index.d.cts +7 -6
  49. package/dist/transport/index.d.ts +7 -6
  50. package/dist/transport/index.js +5 -10
  51. package/dist/transport-CCaWx1Rb.d.cts +1566 -0
  52. package/dist/{services-43528f4b.d.ts → transport-CZb3vdB4.d.ts} +294 -293
  53. package/dist/{wslike-e0b32dd5.d.ts → wslike-Dng9H1C7.d.cts} +1 -1
  54. package/dist/wslike-Dng9H1C7.d.ts +40 -0
  55. package/package.json +3 -3
  56. package/dist/chunk-24EWYOGK.js +0 -1287
  57. package/dist/chunk-24EWYOGK.js.map +0 -1
  58. package/dist/chunk-46IVOKJU.js.map +0 -1
  59. package/dist/chunk-A7RGOVRV.js +0 -438
  60. package/dist/chunk-A7RGOVRV.js.map +0 -1
  61. package/dist/chunk-AJGIY2UB.js +0 -56
  62. package/dist/chunk-AJGIY2UB.js.map +0 -1
  63. package/dist/chunk-XV4RQ62N.js +0 -377
  64. package/dist/chunk-XV4RQ62N.js.map +0 -1
  65. package/dist/types-3e5768ec.d.ts +0 -20
@@ -29,10 +29,11 @@ function castTypeboxValueErrors(errors) {
29
29
  }
30
30
  return result;
31
31
  }
32
- var CancelResultSchema = Type.Object({
32
+ var CancelErrorSchema = Type.Object({
33
33
  code: Type.Literal(CANCEL_CODE),
34
34
  message: Type.String()
35
35
  });
36
+ var CancelResultSchema = ErrResultSchema(CancelErrorSchema);
36
37
  var ReaderErrorSchema = Type.Union([
37
38
  Type.Object({
38
39
  code: Type.Literal(UNCAUGHT_ERROR_CODE),
@@ -52,8 +53,9 @@ var ReaderErrorSchema = Type.Union([
52
53
  })
53
54
  )
54
55
  }),
55
- CancelResultSchema
56
+ CancelErrorSchema
56
57
  ]);
58
+ var ReaderErrorResultSchema = ErrResultSchema(ReaderErrorSchema);
57
59
  function isUnion(schema) {
58
60
  return schema[Kind] === "Union";
59
61
  }
@@ -653,7 +655,7 @@ function getPropagationContext(ctx) {
653
655
  function createSessionTelemetryInfo(tracer, sessionId, to, from, propagationCtx) {
654
656
  const parentCtx = propagationCtx ? propagation.extract(context.active(), propagationCtx) : context.active();
655
657
  const span = tracer.startSpan(
656
- `river.session.${sessionId}`,
658
+ `river.session`,
657
659
  {
658
660
  attributes: {
659
661
  component: "river",
@@ -669,7 +671,7 @@ function createSessionTelemetryInfo(tracer, sessionId, to, from, propagationCtx)
669
671
  }
670
672
  function createConnectionTelemetryInfo(tracer, connection, info) {
671
673
  const span = tracer.startSpan(
672
- `connection ${connection.id}`,
674
+ `river.connection`,
673
675
  {
674
676
  attributes: {
675
677
  component: "river",
@@ -955,15 +957,13 @@ var WritableImpl = class {
955
957
 
956
958
  // router/client.ts
957
959
  import { Value } from "@sinclair/typebox/value";
958
- var ReaderErrResultSchema = ErrResultSchema(ReaderErrorSchema);
959
960
  var noop = () => {
960
961
  };
961
962
  function _createRecursiveProxy(callback, path) {
962
963
  const proxy = new Proxy(noop, {
963
964
  // property access, recurse and add field to path
964
965
  get(_obj, key) {
965
- if (typeof key !== "string")
966
- return void 0;
966
+ if (typeof key !== "string") return void 0;
967
967
  return _createRecursiveProxy(callback, [...path, key]);
968
968
  },
969
969
  // hit the end, let's invoke the handler
@@ -1092,8 +1092,7 @@ function handleProc(procType, transport, serverId, init, serviceName, procedureN
1092
1092
  );
1093
1093
  }
1094
1094
  function onMessage(msg) {
1095
- if (msg.streamId !== streamId)
1096
- return;
1095
+ if (msg.streamId !== streamId) return;
1097
1096
  if (msg.to !== transport.clientId) {
1098
1097
  transport.log?.error("got stream message from unexpected client", {
1099
1098
  clientId: transport.clientId,
@@ -1105,20 +1104,20 @@ function handleProc(procType, transport, serverId, init, serviceName, procedureN
1105
1104
  cleanClose = false;
1106
1105
  span.addEvent("received cancel");
1107
1106
  let cancelResult;
1108
- if (Value.Check(ReaderErrResultSchema, msg.payload)) {
1107
+ if (Value.Check(ReaderErrorResultSchema, msg.payload)) {
1109
1108
  cancelResult = msg.payload;
1110
1109
  } else {
1111
1110
  cancelResult = Err({
1112
1111
  code: CANCEL_CODE,
1113
1112
  message: "stream cancelled with invalid payload"
1114
1113
  });
1115
- transport.log?.error(
1114
+ transport.log?.warn(
1116
1115
  "got stream cancel without a valid protocol error",
1117
1116
  {
1118
1117
  clientId: transport.clientId,
1119
1118
  transportMessage: msg,
1120
1119
  validationErrors: [
1121
- ...Value.Errors(ReaderErrResultSchema, msg.payload)
1120
+ ...Value.Errors(ReaderErrorResultSchema, msg.payload)
1122
1121
  ]
1123
1122
  }
1124
1123
  );
@@ -1246,6 +1245,7 @@ var RiverServer = class {
1246
1245
  transport;
1247
1246
  contextMap;
1248
1247
  log;
1248
+ middlewares;
1249
1249
  /**
1250
1250
  * We create a tombstones for streams cancelled by the server
1251
1251
  * so that we don't hit errors when the client has inflight
@@ -1258,8 +1258,9 @@ var RiverServer = class {
1258
1258
  streams;
1259
1259
  services;
1260
1260
  unregisterTransportListeners;
1261
- constructor(transport, services, handshakeOptions, extendedContext, maxCancelledStreamTombstonesPerSession = 200) {
1261
+ constructor(transport, services, handshakeOptions, extendedContext, maxCancelledStreamTombstonesPerSession = 200, middlewares = []) {
1262
1262
  const instances = {};
1263
+ this.middlewares = middlewares;
1263
1264
  this.services = instances;
1264
1265
  this.contextMap = /* @__PURE__ */ new Map();
1265
1266
  for (const [name, service] of Object.entries(services)) {
@@ -1316,8 +1317,7 @@ var RiverServer = class {
1316
1317
  );
1317
1318
  };
1318
1319
  const handleSessionStatus = (evt) => {
1319
- if (evt.status !== "closing")
1320
- return;
1320
+ if (evt.status !== "closing") return;
1321
1321
  const disconnectedClientId = evt.session.to;
1322
1322
  this.log?.info(
1323
1323
  `got session disconnect from ${disconnectedClientId}, cleaning up streams`,
@@ -1331,8 +1331,7 @@ var RiverServer = class {
1331
1331
  this.serverCancelledStreams.delete(disconnectedClientId);
1332
1332
  };
1333
1333
  const handleTransportStatus = (evt) => {
1334
- if (evt.status !== "closed")
1335
- return;
1334
+ if (evt.status !== "closed") return;
1336
1335
  this.unregisterTransportListeners();
1337
1336
  };
1338
1337
  this.unregisterTransportListeners = () => {
@@ -1383,7 +1382,7 @@ var RiverServer = class {
1383
1382
  if (isStreamCancelBackwardsCompat(msg.controlFlags, protocolVersion)) {
1384
1383
  let cancelResult;
1385
1384
  if (Value2.Check(CancelResultSchema, msg.payload)) {
1386
- cancelResult = Err(msg.payload);
1385
+ cancelResult = msg.payload;
1387
1386
  } else {
1388
1387
  cancelResult = Err({
1389
1388
  code: CANCEL_CODE,
@@ -1579,12 +1578,12 @@ var RiverServer = class {
1579
1578
  if (procClosesWithInit) {
1580
1579
  closeReadable();
1581
1580
  }
1582
- const handlerContextWithSpan = (span2) => ({
1581
+ const handlerContextWithSpan = {
1583
1582
  ...serviceContext,
1584
1583
  from,
1585
1584
  sessionId,
1586
1585
  metadata: sessionMetadata,
1587
- span: span2,
1586
+ span,
1588
1587
  cancel: (message) => {
1589
1588
  const errRes = {
1590
1589
  code: CANCEL_CODE,
@@ -1594,13 +1593,24 @@ var RiverServer = class {
1594
1593
  return Err(errRes);
1595
1594
  },
1596
1595
  signal: finishedController.signal
1597
- });
1598
- switch (procedure.type) {
1599
- case "rpc":
1600
- void (async () => {
1596
+ };
1597
+ const middlewareContext = {
1598
+ ...serviceContext,
1599
+ sessionId,
1600
+ from,
1601
+ metadata: sessionMetadata,
1602
+ span,
1603
+ signal: finishedController.signal,
1604
+ streamId,
1605
+ procedureName,
1606
+ serviceName
1607
+ };
1608
+ const runProcedureHandler = async () => {
1609
+ switch (procedure.type) {
1610
+ case "rpc":
1601
1611
  try {
1602
1612
  const responsePayload = await procedure.handler({
1603
- ctx: handlerContextWithSpan(span),
1613
+ ctx: handlerContextWithSpan,
1604
1614
  reqInit: initPayload
1605
1615
  });
1606
1616
  if (resWritable.isClosed()) {
@@ -1612,13 +1622,11 @@ var RiverServer = class {
1612
1622
  } finally {
1613
1623
  span.end();
1614
1624
  }
1615
- })();
1616
- break;
1617
- case "stream":
1618
- void (async () => {
1625
+ break;
1626
+ case "stream":
1619
1627
  try {
1620
1628
  await procedure.handler({
1621
- ctx: handlerContextWithSpan(span),
1629
+ ctx: handlerContextWithSpan,
1622
1630
  reqInit: initPayload,
1623
1631
  reqReadable,
1624
1632
  resWritable
@@ -1628,13 +1636,11 @@ var RiverServer = class {
1628
1636
  } finally {
1629
1637
  span.end();
1630
1638
  }
1631
- })();
1632
- break;
1633
- case "subscription":
1634
- void (async () => {
1639
+ break;
1640
+ case "subscription":
1635
1641
  try {
1636
1642
  await procedure.handler({
1637
- ctx: handlerContextWithSpan(span),
1643
+ ctx: handlerContextWithSpan,
1638
1644
  reqInit: initPayload,
1639
1645
  resWritable
1640
1646
  });
@@ -1643,13 +1649,11 @@ var RiverServer = class {
1643
1649
  } finally {
1644
1650
  span.end();
1645
1651
  }
1646
- })();
1647
- break;
1648
- case "upload":
1649
- void (async () => {
1652
+ break;
1653
+ case "upload":
1650
1654
  try {
1651
1655
  const responsePayload = await procedure.handler({
1652
- ctx: handlerContextWithSpan(span),
1656
+ ctx: handlerContextWithSpan,
1653
1657
  reqInit: initPayload,
1654
1658
  reqReadable
1655
1659
  });
@@ -1662,9 +1666,23 @@ var RiverServer = class {
1662
1666
  } finally {
1663
1667
  span.end();
1664
1668
  }
1665
- })();
1666
- break;
1667
- }
1669
+ break;
1670
+ }
1671
+ };
1672
+ this.middlewares.reduceRight(
1673
+ (next, middleware) => {
1674
+ return () => {
1675
+ middleware({
1676
+ ctx: middlewareContext,
1677
+ reqInit: initPayload,
1678
+ next
1679
+ });
1680
+ };
1681
+ },
1682
+ () => {
1683
+ void runProcedureHandler();
1684
+ }
1685
+ )();
1668
1686
  if (!finishedController.signal.aborted) {
1669
1687
  this.streams.set(streamId, procStream);
1670
1688
  }
@@ -1915,7 +1933,8 @@ function createServer(transport, services, providedServerOptions) {
1915
1933
  services,
1916
1934
  providedServerOptions?.handshakeOptions,
1917
1935
  providedServerOptions?.extendedContext,
1918
- providedServerOptions?.maxCancelledStreamTombstonesPerSession
1936
+ providedServerOptions?.maxCancelledStreamTombstonesPerSession,
1937
+ providedServerOptions?.middlewares
1919
1938
  );
1920
1939
  }
1921
1940
 
@@ -1928,19 +1947,9 @@ function createServerHandshakeOptions(schema, validate) {
1928
1947
  }
1929
1948
 
1930
1949
  // package.json
1931
- var version = "0.207.2";
1950
+ var version = "0.208.0";
1932
1951
 
1933
1952
  export {
1934
- UNCAUGHT_ERROR_CODE,
1935
- UNEXPECTED_DISCONNECT_CODE,
1936
- INVALID_REQUEST_CODE,
1937
- CANCEL_CODE,
1938
- ReaderErrorSchema,
1939
- flattenErrorType,
1940
- serializeSchemaV1Compat,
1941
- serializeSchema,
1942
- ServiceSchema,
1943
- Procedure,
1944
1953
  generateId,
1945
1954
  TransportMessageSchema,
1946
1955
  currentProtocolVersion,
@@ -1954,17 +1963,27 @@ export {
1954
1963
  handshakeRequestMessage,
1955
1964
  handshakeResponseMessage,
1956
1965
  isAck,
1966
+ UNCAUGHT_ERROR_CODE,
1967
+ UNEXPECTED_DISCONNECT_CODE,
1968
+ INVALID_REQUEST_CODE,
1969
+ CANCEL_CODE,
1970
+ ReaderErrorSchema,
1971
+ flattenErrorType,
1972
+ serializeSchemaV1Compat,
1973
+ serializeSchema,
1974
+ ServiceSchema,
1975
+ Procedure,
1957
1976
  Ok,
1958
1977
  Err,
1959
- getPropagationContext,
1960
- createSessionTelemetryInfo,
1961
- createConnectionTelemetryInfo,
1962
- getTracer,
1963
1978
  createClient,
1964
1979
  coerceErrorString,
1965
1980
  createServer,
1966
1981
  createClientHandshakeOptions,
1967
1982
  createServerHandshakeOptions,
1968
- version
1983
+ version,
1984
+ getPropagationContext,
1985
+ createSessionTelemetryInfo,
1986
+ createConnectionTelemetryInfo,
1987
+ getTracer
1969
1988
  };
1970
- //# sourceMappingURL=chunk-46IVOKJU.js.map
1989
+ //# sourceMappingURL=chunk-ETZAHFGQ.js.map