@replit/river 0.10.13 → 0.12.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 (83) hide show
  1. package/README.md +28 -8
  2. package/dist/{builder-1f26296b.d.ts → builder-c593de11.d.ts} +14 -13
  3. package/dist/{chunk-3JGVFWKQ.js → chunk-24O3BKZA.js} +205 -180
  4. package/dist/chunk-4HOR4NUO.js +40 -0
  5. package/dist/chunk-ANGOKBE5.js +708 -0
  6. package/dist/{chunk-R6H2BIMC.js → chunk-GZ7HCLLM.js} +31 -7
  7. package/dist/{chunk-T7M7OKPE.js → chunk-H4BYJELI.js} +5 -1
  8. package/dist/chunk-IIBVKYDB.js +62 -0
  9. package/dist/chunk-IUDKWAOK.js +47 -0
  10. package/dist/chunk-WTOIOXB7.js +125 -0
  11. package/dist/chunk-XOTIAXAH.js +44 -0
  12. package/dist/codec/index.cjs +13 -7
  13. package/dist/codec/index.js +2 -4
  14. package/dist/connection-2956a1c5.d.ts +17 -0
  15. package/dist/connection-aaea7c88.d.ts +15 -0
  16. package/dist/connection-cd963ed5.d.ts +18 -0
  17. package/dist/index-d91775d9.d.ts +442 -0
  18. package/dist/logging/index.cjs +8 -3
  19. package/dist/logging/index.d.cts +6 -1
  20. package/dist/logging/index.d.ts +6 -1
  21. package/dist/logging/index.js +5 -3
  22. package/dist/messageFraming-b200ef25.d.ts +20 -0
  23. package/dist/router/index.cjs +249 -211
  24. package/dist/router/index.d.cts +6 -7
  25. package/dist/router/index.d.ts +6 -7
  26. package/dist/router/index.js +3 -3
  27. package/dist/transport/impls/stdio/client.cjs +891 -0
  28. package/dist/transport/impls/stdio/client.d.cts +27 -0
  29. package/dist/transport/impls/stdio/client.d.ts +27 -0
  30. package/dist/transport/impls/stdio/client.js +42 -0
  31. package/dist/transport/impls/stdio/server.cjs +861 -0
  32. package/dist/transport/impls/stdio/server.d.cts +25 -0
  33. package/dist/transport/impls/stdio/server.d.ts +25 -0
  34. package/dist/transport/impls/stdio/server.js +33 -0
  35. package/dist/transport/impls/uds/client.cjs +893 -0
  36. package/dist/transport/impls/uds/client.d.cts +16 -0
  37. package/dist/transport/impls/uds/client.d.ts +16 -0
  38. package/dist/transport/impls/uds/client.js +44 -0
  39. package/dist/transport/impls/uds/server.cjs +863 -0
  40. package/dist/transport/impls/uds/server.d.cts +16 -0
  41. package/dist/transport/impls/uds/server.d.ts +16 -0
  42. package/dist/transport/impls/uds/server.js +39 -0
  43. package/dist/transport/impls/ws/client.cjs +587 -248
  44. package/dist/transport/impls/ws/client.d.cts +6 -21
  45. package/dist/transport/impls/ws/client.d.ts +6 -21
  46. package/dist/transport/impls/ws/client.js +77 -7
  47. package/dist/transport/impls/ws/server.cjs +541 -194
  48. package/dist/transport/impls/ws/server.d.cts +6 -10
  49. package/dist/transport/impls/ws/server.d.ts +6 -10
  50. package/dist/transport/impls/ws/server.js +31 -8
  51. package/dist/transport/index.cjs +652 -129
  52. package/dist/transport/index.d.cts +3 -276
  53. package/dist/transport/index.d.ts +3 -276
  54. package/dist/transport/index.js +13 -10
  55. package/dist/util/testHelpers.cjs +40 -602
  56. package/dist/util/testHelpers.d.cts +18 -37
  57. package/dist/util/testHelpers.d.ts +18 -37
  58. package/dist/util/testHelpers.js +27 -47
  59. package/package.json +29 -14
  60. package/dist/chunk-3MQETIGZ.js +0 -80
  61. package/dist/chunk-5IC5XMWK.js +0 -140
  62. package/dist/chunk-L7D75G4K.js +0 -29
  63. package/dist/chunk-LQXPKF3A.js +0 -282
  64. package/dist/chunk-PJ2EUO7O.js +0 -63
  65. package/dist/chunk-WVT5QXMZ.js +0 -20
  66. package/dist/chunk-ZE4MX7DF.js +0 -75
  67. package/dist/connection-2529fc14.d.ts +0 -10
  68. package/dist/connection-316d6e3a.d.ts +0 -10
  69. package/dist/connection-8e19874c.d.ts +0 -11
  70. package/dist/connection-f7688cc1.d.ts +0 -11
  71. package/dist/transport/impls/stdio/stdio.cjs +0 -508
  72. package/dist/transport/impls/stdio/stdio.d.cts +0 -26
  73. package/dist/transport/impls/stdio/stdio.d.ts +0 -26
  74. package/dist/transport/impls/stdio/stdio.js +0 -70
  75. package/dist/transport/impls/unixsocket/client.cjs +0 -506
  76. package/dist/transport/impls/unixsocket/client.d.cts +0 -16
  77. package/dist/transport/impls/unixsocket/client.d.ts +0 -16
  78. package/dist/transport/impls/unixsocket/client.js +0 -67
  79. package/dist/transport/impls/unixsocket/server.cjs +0 -510
  80. package/dist/transport/impls/unixsocket/server.d.cts +0 -18
  81. package/dist/transport/impls/unixsocket/server.d.ts +0 -18
  82. package/dist/transport/impls/unixsocket/server.js +0 -73
  83. /package/dist/{chunk-ORAG7IAU.js → chunk-5IZ2UHWV.js} +0 -0
@@ -1,3 +1,20 @@
1
+ // codec/binary.ts
2
+ import { decode, encode } from "@msgpack/msgpack";
3
+ var BinaryCodec = {
4
+ toBuffer: encode,
5
+ fromBuffer: (buff) => {
6
+ try {
7
+ const res = decode(buff);
8
+ if (typeof res !== "object") {
9
+ return null;
10
+ }
11
+ return res;
12
+ } catch {
13
+ return null;
14
+ }
15
+ }
16
+ };
17
+
1
18
  // codec/json.ts
2
19
  var encoder = new TextEncoder();
3
20
  var decoder = new TextDecoder();
@@ -20,7 +37,7 @@ var NaiveJsonCodec = {
20
37
  toBuffer: (obj) => {
21
38
  return encoder.encode(
22
39
  JSON.stringify(obj, function replacer(key) {
23
- let val = this[key];
40
+ const val = this[key];
24
41
  if (val instanceof Uint8Array) {
25
42
  return { $t: uint8ArrayToBase64(val) };
26
43
  } else {
@@ -31,13 +48,19 @@ var NaiveJsonCodec = {
31
48
  },
32
49
  fromBuffer: (buff) => {
33
50
  try {
34
- return JSON.parse(decoder.decode(buff), function reviver(_key, val) {
35
- if (val?.$t) {
36
- return base64ToUint8Array(val.$t);
37
- } else {
38
- return val;
51
+ const parsed = JSON.parse(
52
+ decoder.decode(buff),
53
+ function reviver(_key, val) {
54
+ if (val?.$t) {
55
+ return base64ToUint8Array(val.$t);
56
+ } else {
57
+ return val;
58
+ }
39
59
  }
40
- });
60
+ );
61
+ if (typeof parsed === "object")
62
+ return parsed;
63
+ return null;
41
64
  } catch {
42
65
  return null;
43
66
  }
@@ -45,5 +68,6 @@ var NaiveJsonCodec = {
45
68
  };
46
69
 
47
70
  export {
71
+ BinaryCodec,
48
72
  NaiveJsonCodec
49
73
  };
@@ -6,7 +6,7 @@ var LoggingLevels = {
6
6
  error: 2
7
7
  };
8
8
  var log;
9
- var defaultLoggingLevel = "warn";
9
+ var defaultLoggingLevel = "info";
10
10
  function bindLogger(write, color) {
11
11
  const debug = color ? "\x1B[37mdebug\x1B[0m" : "debug";
12
12
  const info = color ? "\x1B[37minfo\x1B[0m" : "info";
@@ -20,6 +20,9 @@ function bindLogger(write, color) {
20
20
  minLevel: log?.minLevel ?? defaultLoggingLevel
21
21
  };
22
22
  }
23
+ function unbindLogger() {
24
+ log = void 0;
25
+ }
23
26
  function setLevel(level) {
24
27
  if (log) {
25
28
  log.minLevel = level;
@@ -29,5 +32,6 @@ function setLevel(level) {
29
32
  export {
30
33
  log,
31
34
  bindLogger,
35
+ unbindLogger,
32
36
  setLevel
33
37
  };
@@ -0,0 +1,62 @@
1
+ // transport/transforms/messageFraming.ts
2
+ import { Transform } from "node:stream";
3
+ var Uint32LengthPrefixFraming = class extends Transform {
4
+ receivedBuffer;
5
+ maxBufferSizeBytes;
6
+ constructor({ maxBufferSizeBytes, ...options }) {
7
+ super(options);
8
+ this.maxBufferSizeBytes = maxBufferSizeBytes;
9
+ this.receivedBuffer = Buffer.alloc(0);
10
+ }
11
+ _transform(chunk, _encoding, cb) {
12
+ if (this.receivedBuffer.byteLength + chunk.byteLength > this.maxBufferSizeBytes) {
13
+ const err = new Error(
14
+ `buffer overflow: ${this.receivedBuffer.byteLength}B > ${this.maxBufferSizeBytes}B`
15
+ );
16
+ this.emit("error", err);
17
+ cb(err);
18
+ return;
19
+ }
20
+ this.receivedBuffer = Buffer.concat([this.receivedBuffer, chunk]);
21
+ while (this.receivedBuffer.length > 4) {
22
+ const claimedMessageLength = this.receivedBuffer.readUInt32BE(0) + 4;
23
+ if (this.receivedBuffer.length >= claimedMessageLength) {
24
+ const message = this.receivedBuffer.subarray(4, claimedMessageLength);
25
+ this.push(message);
26
+ this.receivedBuffer = this.receivedBuffer.subarray(claimedMessageLength);
27
+ } else {
28
+ break;
29
+ }
30
+ }
31
+ cb();
32
+ }
33
+ _flush(cb) {
34
+ if (this.receivedBuffer.length) {
35
+ this.emit("error", new Error("got incomplete message while flushing"));
36
+ }
37
+ this.receivedBuffer = Buffer.alloc(0);
38
+ cb();
39
+ }
40
+ _destroy(error, callback) {
41
+ this.receivedBuffer = Buffer.alloc(0);
42
+ super._destroy(error, callback);
43
+ }
44
+ };
45
+ function createLengthEncodedStream(options) {
46
+ return new Uint32LengthPrefixFraming({
47
+ maxBufferSizeBytes: options?.maxBufferSizeBytes ?? 16 * 1024 * 1024
48
+ // 16MB
49
+ });
50
+ }
51
+ var MessageFramer = {
52
+ createFramedStream: createLengthEncodedStream,
53
+ write: (buf) => {
54
+ const lengthPrefix = Buffer.alloc(4);
55
+ lengthPrefix.writeUInt32BE(buf.length, 0);
56
+ return Buffer.concat([lengthPrefix, buf]);
57
+ }
58
+ };
59
+
60
+ export {
61
+ MessageFramer
62
+ };
@@ -0,0 +1,47 @@
1
+ import {
2
+ MessageFramer
3
+ } from "./chunk-IIBVKYDB.js";
4
+ import {
5
+ Connection
6
+ } from "./chunk-ANGOKBE5.js";
7
+
8
+ // transport/impls/stdio/connection.ts
9
+ var StreamConnection = class extends Connection {
10
+ input;
11
+ output;
12
+ framer;
13
+ constructor(input, output) {
14
+ super();
15
+ this.framer = MessageFramer.createFramedStream();
16
+ this.input = input.pipe(this.framer);
17
+ this.output = output;
18
+ }
19
+ addDataListener(cb) {
20
+ this.input.on("data", cb);
21
+ }
22
+ removeDataListener(cb) {
23
+ this.input.off("data", cb);
24
+ }
25
+ addCloseListener(cb) {
26
+ this.input.on("close", cb);
27
+ this.output.on("close", cb);
28
+ }
29
+ addErrorListener(cb) {
30
+ this.input.on("error", cb);
31
+ this.output.on("error", cb);
32
+ }
33
+ send(payload) {
34
+ if (!this.output.writable)
35
+ return false;
36
+ return this.output.write(MessageFramer.write(payload));
37
+ }
38
+ close() {
39
+ this.output.end();
40
+ this.input.unpipe(this.framer);
41
+ this.framer.destroy();
42
+ }
43
+ };
44
+
45
+ export {
46
+ StreamConnection
47
+ };
@@ -0,0 +1,125 @@
1
+ // transport/message.ts
2
+ import { Type } from "@sinclair/typebox";
3
+ import { nanoid } from "nanoid";
4
+ var TransportMessageSchema = (t) => Type.Object({
5
+ id: Type.String(),
6
+ from: Type.String(),
7
+ to: Type.String(),
8
+ seq: Type.Integer(),
9
+ ack: Type.Integer(),
10
+ serviceName: Type.Optional(Type.Union([Type.String(), Type.Null()])),
11
+ procedureName: Type.Optional(Type.Union([Type.String(), Type.Null()])),
12
+ streamId: Type.String(),
13
+ controlFlags: Type.Integer(),
14
+ payload: t
15
+ });
16
+ var ControlMessageAckSchema = Type.Object({
17
+ type: Type.Literal("ACK")
18
+ });
19
+ var ControlMessageCloseSchema = Type.Object({
20
+ type: Type.Literal("CLOSE")
21
+ });
22
+ var PROTOCOL_VERSION = "v1";
23
+ var ControlMessageHandshakeRequestSchema = Type.Object({
24
+ type: Type.Literal("HANDSHAKE_REQ"),
25
+ protocolVersion: Type.Literal(PROTOCOL_VERSION)
26
+ });
27
+ var ControlMessageHandshakeResponseSchema = Type.Object({
28
+ type: Type.Literal("HANDSHAKE_RESP"),
29
+ status: Type.Union([
30
+ Type.Object({
31
+ ok: Type.Literal(true),
32
+ instanceId: Type.String()
33
+ }),
34
+ Type.Object({
35
+ ok: Type.Literal(false),
36
+ reason: Type.Union([Type.Literal("VERSION_MISMATCH")])
37
+ })
38
+ ])
39
+ });
40
+ var ControlMessagePayloadSchema = Type.Union([
41
+ ControlMessageCloseSchema,
42
+ ControlMessageAckSchema,
43
+ ControlMessageHandshakeRequestSchema,
44
+ ControlMessageHandshakeResponseSchema
45
+ ]);
46
+ var OpaqueTransportMessageSchema = TransportMessageSchema(
47
+ Type.Unknown()
48
+ );
49
+ function bootRequestMessage(from, to) {
50
+ return {
51
+ id: nanoid(),
52
+ from,
53
+ to,
54
+ seq: 0,
55
+ ack: 0,
56
+ streamId: nanoid(),
57
+ controlFlags: 0,
58
+ payload: {
59
+ type: "HANDSHAKE_REQ",
60
+ protocolVersion: PROTOCOL_VERSION
61
+ }
62
+ };
63
+ }
64
+ function bootResponseMessage(from, instanceId, to, ok) {
65
+ return {
66
+ id: nanoid(),
67
+ from,
68
+ to,
69
+ seq: 0,
70
+ ack: 0,
71
+ streamId: nanoid(),
72
+ controlFlags: 0,
73
+ payload: ok ? {
74
+ type: "HANDSHAKE_RESP",
75
+ status: {
76
+ ok: true,
77
+ instanceId
78
+ }
79
+ } : {
80
+ type: "HANDSHAKE_RESP",
81
+ status: {
82
+ ok: false,
83
+ reason: "VERSION_MISMATCH"
84
+ }
85
+ }
86
+ };
87
+ }
88
+ function isAck(controlFlag) {
89
+ return (controlFlag & 1 /* AckBit */) === 1 /* AckBit */;
90
+ }
91
+ function isStreamOpen(controlFlag) {
92
+ return (
93
+ /* eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison */
94
+ (controlFlag & 2 /* StreamOpenBit */) === 2 /* StreamOpenBit */
95
+ );
96
+ }
97
+ function isStreamClose(controlFlag) {
98
+ return (
99
+ /* eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison */
100
+ (controlFlag & 4 /* StreamClosedBit */) === 4 /* StreamClosedBit */
101
+ );
102
+ }
103
+
104
+ // util/stringify.ts
105
+ function coerceErrorString(err) {
106
+ if (err instanceof Error) {
107
+ return err.message;
108
+ }
109
+ return `[coerced to error] ${String(err)}`;
110
+ }
111
+
112
+ export {
113
+ TransportMessageSchema,
114
+ PROTOCOL_VERSION,
115
+ ControlMessageHandshakeRequestSchema,
116
+ ControlMessageHandshakeResponseSchema,
117
+ ControlMessagePayloadSchema,
118
+ OpaqueTransportMessageSchema,
119
+ bootRequestMessage,
120
+ bootResponseMessage,
121
+ isAck,
122
+ isStreamOpen,
123
+ isStreamClose,
124
+ coerceErrorString
125
+ };
@@ -0,0 +1,44 @@
1
+ import {
2
+ MessageFramer
3
+ } from "./chunk-IIBVKYDB.js";
4
+ import {
5
+ Connection
6
+ } from "./chunk-ANGOKBE5.js";
7
+
8
+ // transport/impls/uds/connection.ts
9
+ var UdsConnection = class extends Connection {
10
+ sock;
11
+ input;
12
+ framer;
13
+ constructor(sock) {
14
+ super();
15
+ this.framer = MessageFramer.createFramedStream();
16
+ this.sock = sock;
17
+ this.input = sock.pipe(this.framer);
18
+ }
19
+ addDataListener(cb) {
20
+ this.input.on("data", cb);
21
+ }
22
+ removeDataListener(cb) {
23
+ this.input.off("data", cb);
24
+ }
25
+ addCloseListener(cb) {
26
+ this.sock.on("close", cb);
27
+ }
28
+ addErrorListener(cb) {
29
+ this.sock.on("error", cb);
30
+ }
31
+ send(payload) {
32
+ if (this.framer.destroyed || !this.sock.writable)
33
+ return false;
34
+ return this.sock.write(MessageFramer.write(payload));
35
+ }
36
+ close() {
37
+ this.sock.destroy();
38
+ this.framer.destroy();
39
+ }
40
+ };
41
+
42
+ export {
43
+ UdsConnection
44
+ };
@@ -64,7 +64,7 @@ var NaiveJsonCodec = {
64
64
  toBuffer: (obj) => {
65
65
  return encoder.encode(
66
66
  JSON.stringify(obj, function replacer(key) {
67
- let val = this[key];
67
+ const val = this[key];
68
68
  if (val instanceof Uint8Array) {
69
69
  return { $t: uint8ArrayToBase64(val) };
70
70
  } else {
@@ -75,13 +75,19 @@ var NaiveJsonCodec = {
75
75
  },
76
76
  fromBuffer: (buff) => {
77
77
  try {
78
- return JSON.parse(decoder.decode(buff), function reviver(_key, val) {
79
- if (val?.$t) {
80
- return base64ToUint8Array(val.$t);
81
- } else {
82
- return val;
78
+ const parsed = JSON.parse(
79
+ decoder.decode(buff),
80
+ function reviver(_key, val) {
81
+ if (val?.$t) {
82
+ return base64ToUint8Array(val.$t);
83
+ } else {
84
+ return val;
85
+ }
83
86
  }
84
- });
87
+ );
88
+ if (typeof parsed === "object")
89
+ return parsed;
90
+ return null;
85
91
  } catch {
86
92
  return null;
87
93
  }
@@ -1,9 +1,7 @@
1
1
  import {
2
- BinaryCodec
3
- } from "../chunk-WVT5QXMZ.js";
4
- import {
2
+ BinaryCodec,
5
3
  NaiveJsonCodec
6
- } from "../chunk-R6H2BIMC.js";
4
+ } from "../chunk-GZ7HCLLM.js";
7
5
  export {
8
6
  BinaryCodec,
9
7
  NaiveJsonCodec
@@ -0,0 +1,17 @@
1
+ import { C as Connection } from './index-d91775d9.js';
2
+ import { U as Uint32LengthPrefixFraming } from './messageFraming-b200ef25.js';
3
+
4
+ declare class StreamConnection extends Connection {
5
+ input: NodeJS.ReadableStream;
6
+ output: NodeJS.WritableStream;
7
+ framer: Uint32LengthPrefixFraming;
8
+ constructor(input: NodeJS.ReadableStream, output: NodeJS.WritableStream);
9
+ addDataListener(cb: (msg: Uint8Array) => void): void;
10
+ removeDataListener(cb: (msg: Uint8Array) => void): void;
11
+ addCloseListener(cb: () => void): void;
12
+ addErrorListener(cb: (err: Error) => void): void;
13
+ send(payload: Uint8Array): boolean;
14
+ close(): void;
15
+ }
16
+
17
+ export { StreamConnection as S };
@@ -0,0 +1,15 @@
1
+ import WebSocket from 'isomorphic-ws';
2
+ import { C as Connection } from './index-d91775d9.js';
3
+
4
+ declare class WebSocketConnection extends Connection {
5
+ ws: WebSocket;
6
+ constructor(ws: WebSocket);
7
+ addDataListener(cb: (msg: Uint8Array) => void): void;
8
+ removeDataListener(): void;
9
+ addCloseListener(cb: () => void): void;
10
+ addErrorListener(cb: (err: Error) => void): void;
11
+ send(payload: Uint8Array): boolean;
12
+ close(): void;
13
+ }
14
+
15
+ export { WebSocketConnection as W };
@@ -0,0 +1,18 @@
1
+ import { C as Connection } from './index-d91775d9.js';
2
+ import { Socket } from 'node:net';
3
+ import { U as Uint32LengthPrefixFraming } from './messageFraming-b200ef25.js';
4
+
5
+ declare class UdsConnection extends Connection {
6
+ sock: Socket;
7
+ input: NodeJS.ReadableStream;
8
+ framer: Uint32LengthPrefixFraming;
9
+ constructor(sock: Socket);
10
+ addDataListener(cb: (msg: Uint8Array) => void): void;
11
+ removeDataListener(cb: (msg: Uint8Array) => void): void;
12
+ addCloseListener(cb: () => void): void;
13
+ addErrorListener(cb: (err: Error) => void): void;
14
+ send(payload: Uint8Array): boolean;
15
+ close(): void;
16
+ }
17
+
18
+ export { UdsConnection as U };