@replit/river 0.10.0 → 0.10.1

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 (135) hide show
  1. package/dist/{router/builder.d.ts → builder-3c4485f0.d.ts} +76 -21
  2. package/dist/chunk-7WJ6YLE5.js +683 -0
  3. package/dist/chunk-AJQU4AZG.js +284 -0
  4. package/dist/chunk-ORAG7IAU.js +0 -0
  5. package/dist/chunk-PC65ZFWJ.js +29 -0
  6. package/dist/chunk-R6H2BIMC.js +49 -0
  7. package/dist/chunk-RGMHF6PF.js +65 -0
  8. package/dist/chunk-SLUSVGQH.js +30 -0
  9. package/dist/chunk-UU2Z7LDR.js +113 -0
  10. package/dist/chunk-WVT5QXMZ.js +20 -0
  11. package/dist/chunk-ZE4MX7DF.js +75 -0
  12. package/dist/codec/index.cjs +94 -0
  13. package/dist/codec/index.d.cts +15 -0
  14. package/dist/codec/index.d.ts +15 -4
  15. package/dist/codec/index.js +10 -2
  16. package/dist/connection-8e19874c.d.ts +11 -0
  17. package/dist/connection-f7688cc1.d.ts +11 -0
  18. package/dist/logging/index.cjs +56 -0
  19. package/dist/logging/index.d.cts +28 -0
  20. package/dist/logging/index.d.ts +6 -6
  21. package/dist/logging/index.js +9 -40
  22. package/dist/router/index.cjs +770 -0
  23. package/dist/router/index.d.cts +114 -0
  24. package/dist/router/index.d.ts +114 -12
  25. package/dist/router/index.js +24 -5
  26. package/dist/transport/impls/ws/client.cjs +505 -0
  27. package/dist/transport/impls/ws/client.d.cts +42 -0
  28. package/dist/transport/impls/ws/client.d.ts +8 -8
  29. package/dist/transport/impls/ws/client.js +10 -100
  30. package/dist/transport/impls/ws/server.cjs +457 -0
  31. package/dist/transport/impls/ws/server.d.cts +21 -0
  32. package/dist/transport/impls/ws/server.d.ts +11 -10
  33. package/dist/transport/impls/ws/server.js +11 -52
  34. package/dist/transport/index.cjs +362 -0
  35. package/dist/transport/{transport.d.ts → index.d.cts} +119 -7
  36. package/dist/transport/index.d.ts +273 -4
  37. package/dist/transport/index.js +20 -2
  38. package/dist/{codec/types.d.ts → types-3e5768ec.d.ts} +3 -2
  39. package/dist/util/testHelpers.cjs +731 -0
  40. package/dist/util/testHelpers.d.cts +79 -0
  41. package/dist/util/testHelpers.d.ts +22 -19
  42. package/dist/util/testHelpers.js +135 -163
  43. package/package.json +41 -13
  44. package/dist/__tests__/bandwidth.bench.d.ts +0 -2
  45. package/dist/__tests__/bandwidth.bench.d.ts.map +0 -1
  46. package/dist/__tests__/bandwidth.bench.js +0 -90
  47. package/dist/__tests__/cleanup.test.d.ts +0 -2
  48. package/dist/__tests__/cleanup.test.d.ts.map +0 -1
  49. package/dist/__tests__/cleanup.test.js +0 -165
  50. package/dist/__tests__/disconnects.test.d.ts +0 -2
  51. package/dist/__tests__/disconnects.test.d.ts.map +0 -1
  52. package/dist/__tests__/disconnects.test.js +0 -163
  53. package/dist/__tests__/e2e.test.d.ts +0 -2
  54. package/dist/__tests__/e2e.test.d.ts.map +0 -1
  55. package/dist/__tests__/e2e.test.js +0 -317
  56. package/dist/__tests__/fixtures/cleanup.d.ts +0 -12
  57. package/dist/__tests__/fixtures/cleanup.d.ts.map +0 -1
  58. package/dist/__tests__/fixtures/cleanup.js +0 -36
  59. package/dist/__tests__/fixtures/largePayload.json +0 -33
  60. package/dist/__tests__/fixtures/observable.d.ts +0 -26
  61. package/dist/__tests__/fixtures/observable.d.ts.map +0 -1
  62. package/dist/__tests__/fixtures/observable.js +0 -38
  63. package/dist/__tests__/fixtures/observable.test.d.ts +0 -2
  64. package/dist/__tests__/fixtures/observable.test.d.ts.map +0 -1
  65. package/dist/__tests__/fixtures/observable.test.js +0 -39
  66. package/dist/__tests__/fixtures/services.d.ts +0 -288
  67. package/dist/__tests__/fixtures/services.d.ts.map +0 -1
  68. package/dist/__tests__/fixtures/services.js +0 -207
  69. package/dist/__tests__/handler.test.d.ts +0 -2
  70. package/dist/__tests__/handler.test.d.ts.map +0 -1
  71. package/dist/__tests__/handler.test.js +0 -120
  72. package/dist/__tests__/serialize.test.d.ts +0 -2
  73. package/dist/__tests__/serialize.test.d.ts.map +0 -1
  74. package/dist/__tests__/serialize.test.js +0 -208
  75. package/dist/__tests__/typescript-stress.test.d.ts +0 -1583
  76. package/dist/__tests__/typescript-stress.test.d.ts.map +0 -1
  77. package/dist/__tests__/typescript-stress.test.js +0 -123
  78. package/dist/codec/binary.d.ts +0 -7
  79. package/dist/codec/binary.d.ts.map +0 -1
  80. package/dist/codec/binary.js +0 -20
  81. package/dist/codec/codec.test.d.ts +0 -5
  82. package/dist/codec/codec.test.d.ts.map +0 -1
  83. package/dist/codec/codec.test.js +0 -41
  84. package/dist/codec/index.d.ts.map +0 -1
  85. package/dist/codec/json.d.ts +0 -7
  86. package/dist/codec/json.d.ts.map +0 -1
  87. package/dist/codec/json.js +0 -51
  88. package/dist/codec/types.d.ts.map +0 -1
  89. package/dist/codec/types.js +0 -1
  90. package/dist/logging/index.d.ts.map +0 -1
  91. package/dist/router/builder.d.ts.map +0 -1
  92. package/dist/router/builder.js +0 -91
  93. package/dist/router/client.d.ts +0 -72
  94. package/dist/router/client.d.ts.map +0 -1
  95. package/dist/router/client.js +0 -257
  96. package/dist/router/context.d.ts +0 -30
  97. package/dist/router/context.d.ts.map +0 -1
  98. package/dist/router/context.js +0 -1
  99. package/dist/router/defs.d.ts +0 -16
  100. package/dist/router/defs.d.ts.map +0 -1
  101. package/dist/router/defs.js +0 -11
  102. package/dist/router/index.d.ts.map +0 -1
  103. package/dist/router/result.d.ts +0 -26
  104. package/dist/router/result.d.ts.map +0 -1
  105. package/dist/router/result.js +0 -22
  106. package/dist/router/server.d.ts +0 -39
  107. package/dist/router/server.d.ts.map +0 -1
  108. package/dist/router/server.js +0 -260
  109. package/dist/transport/events.d.ts +0 -19
  110. package/dist/transport/events.d.ts.map +0 -1
  111. package/dist/transport/events.js +0 -26
  112. package/dist/transport/impls/stdio/stdio.d.ts +0 -33
  113. package/dist/transport/impls/stdio/stdio.d.ts.map +0 -1
  114. package/dist/transport/impls/stdio/stdio.js +0 -75
  115. package/dist/transport/impls/stdio/stdio.test.d.ts +0 -2
  116. package/dist/transport/impls/stdio/stdio.test.d.ts.map +0 -1
  117. package/dist/transport/impls/stdio/stdio.test.js +0 -24
  118. package/dist/transport/impls/ws/client.d.ts.map +0 -1
  119. package/dist/transport/impls/ws/connection.d.ts +0 -11
  120. package/dist/transport/impls/ws/connection.d.ts.map +0 -1
  121. package/dist/transport/impls/ws/connection.js +0 -23
  122. package/dist/transport/impls/ws/server.d.ts.map +0 -1
  123. package/dist/transport/impls/ws/ws.test.d.ts +0 -2
  124. package/dist/transport/impls/ws/ws.test.d.ts.map +0 -1
  125. package/dist/transport/impls/ws/ws.test.js +0 -185
  126. package/dist/transport/index.d.ts.map +0 -1
  127. package/dist/transport/message.d.ts +0 -142
  128. package/dist/transport/message.d.ts.map +0 -1
  129. package/dist/transport/message.js +0 -113
  130. package/dist/transport/message.test.d.ts +0 -2
  131. package/dist/transport/message.test.d.ts.map +0 -1
  132. package/dist/transport/message.test.js +0 -52
  133. package/dist/transport/transport.d.ts.map +0 -1
  134. package/dist/transport/transport.js +0 -281
  135. package/dist/util/testHelpers.d.ts.map +0 -1
@@ -1,257 +0,0 @@
1
- import { pushable } from 'it-pushable';
2
- import { msg, isStreamClose, closeStream, } from '../transport/message';
3
- import { nanoid } from 'nanoid';
4
- import { Err, UNEXPECTED_DISCONNECT } from './result';
5
- const noop = () => { };
6
- function _createRecursiveProxy(callback, path) {
7
- const proxy = new Proxy(noop, {
8
- // property access, recurse and add field to path
9
- get(_obj, key) {
10
- if (typeof key !== 'string')
11
- return undefined;
12
- return _createRecursiveProxy(callback, [...path, key]);
13
- },
14
- // hit the end, let's invoke the handler
15
- apply(_target, _this, args) {
16
- return callback({
17
- path,
18
- args,
19
- });
20
- },
21
- });
22
- return proxy;
23
- }
24
- /**
25
- * Creates a client for a given server using the provided transport.
26
- * Note that the client only needs the type of the server, not the actual
27
- * server definition itself.
28
- *
29
- * This relies on a proxy to dynamically create the client, so the client
30
- * will be typed as if it were the actual server with the appropriate services
31
- * and procedures.
32
- *
33
- * @template Srv - The type of the server.
34
- * @param {Transport} transport - The transport to use for communication.
35
- * @returns The client for the server.
36
- */
37
- export const createClient = (transport, serverId = 'SERVER') => _createRecursiveProxy(async (opts) => {
38
- const [serviceName, procName, procType] = [...opts.path];
39
- if (!(serviceName && procName && procType)) {
40
- throw new Error('invalid river call, ensure the service and procedure you are calling exists');
41
- }
42
- const [input] = opts.args;
43
- if (procType === 'rpc') {
44
- return handleRpc(transport, serverId, input, serviceName, procName);
45
- }
46
- else if (procType === 'stream') {
47
- return handleStream(transport, serverId, input, serviceName, procName);
48
- }
49
- else if (procType === 'subscribe') {
50
- return handleSubscribe(transport, serverId, input, serviceName, procName);
51
- }
52
- else if (procType === 'upload') {
53
- return handleUpload(transport, serverId, input, serviceName, procName);
54
- }
55
- else {
56
- throw new Error(`invalid river call, unknown procedure type ${procType}`);
57
- }
58
- }, []);
59
- export const CONNECTION_GRACE_PERIOD_MS = 5_000; // 5s
60
- export function rejectAfterDisconnectGrace(from, cb) {
61
- let timeout = undefined;
62
- return (evt) => {
63
- if (evt.status === 'connect' && evt.conn.connectedTo === from) {
64
- clearTimeout(timeout);
65
- timeout = undefined;
66
- }
67
- if (evt.status === 'disconnect' && evt.conn.connectedTo === from) {
68
- timeout = setTimeout(cb, CONNECTION_GRACE_PERIOD_MS);
69
- }
70
- };
71
- }
72
- function handleRpc(transport, serverId, input, serviceName, procName) {
73
- const streamId = nanoid();
74
- const m = msg(transport.clientId, serverId, streamId, input, serviceName, procName);
75
- // rpc is a stream open + close
76
- m.controlFlags |= 2 /* ControlFlags.StreamOpenBit */ | 4 /* ControlFlags.StreamClosedBit */;
77
- transport.send(m);
78
- const responsePromise = new Promise((resolve) => {
79
- // on disconnect, set a timer to return an error
80
- // on (re)connect, clear the timer
81
- const onConnectionStatus = rejectAfterDisconnectGrace(serverId, () => {
82
- cleanup();
83
- resolve(Err({
84
- code: UNEXPECTED_DISCONNECT,
85
- message: `${serverId} unexpectedly disconnected`,
86
- }));
87
- });
88
- function cleanup() {
89
- transport.removeEventListener('message', onMessage);
90
- transport.removeEventListener('connectionStatus', onConnectionStatus);
91
- }
92
- function onMessage(msg) {
93
- if (msg.streamId === streamId) {
94
- // cleanup and resolve as soon as we get a message
95
- cleanup();
96
- resolve(msg.payload);
97
- }
98
- }
99
- transport.addEventListener('message', onMessage);
100
- transport.addEventListener('connectionStatus', onConnectionStatus);
101
- });
102
- return responsePromise;
103
- }
104
- function handleStream(transport, serverId, init, serviceName, procName) {
105
- const streamId = nanoid();
106
- const inputStream = pushable({ objectMode: true });
107
- const outputStream = pushable({ objectMode: true });
108
- let firstMessage = true;
109
- if (init) {
110
- const m = msg(transport.clientId, serverId, streamId, init, serviceName, procName);
111
- // first message needs the open bit.
112
- m.controlFlags = 2 /* ControlFlags.StreamOpenBit */;
113
- transport.send(m);
114
- firstMessage = false;
115
- }
116
- // input -> transport
117
- // this gets cleaned up on inputStream.end() which is called by closeHandler
118
- (async () => {
119
- for await (const rawIn of inputStream) {
120
- const m = msg(transport.clientId, serverId, streamId, rawIn);
121
- if (firstMessage) {
122
- m.serviceName = serviceName;
123
- m.procedureName = procName;
124
- m.controlFlags |= 2 /* ControlFlags.StreamOpenBit */;
125
- firstMessage = false;
126
- }
127
- transport.send(m);
128
- }
129
- // after ending input stream, send a close message to the server
130
- transport.send(closeStream(transport.clientId, serverId, streamId));
131
- })();
132
- // transport -> output
133
- function onMessage(msg) {
134
- if (msg.streamId !== streamId) {
135
- return;
136
- }
137
- if (isStreamClose(msg.controlFlags)) {
138
- cleanup();
139
- }
140
- else {
141
- outputStream.push(msg.payload);
142
- }
143
- }
144
- function cleanup() {
145
- inputStream.end();
146
- outputStream.end();
147
- transport.removeEventListener('message', onMessage);
148
- transport.removeEventListener('connectionStatus', onConnectionStatus);
149
- }
150
- const closeHandler = () => {
151
- cleanup();
152
- transport.send(closeStream(transport.clientId, serverId, streamId));
153
- };
154
- // close stream after disconnect + grace period elapses
155
- const onConnectionStatus = rejectAfterDisconnectGrace(serverId, () => {
156
- outputStream.push(Err({
157
- code: UNEXPECTED_DISCONNECT,
158
- message: `${serverId} unexpectedly disconnected`,
159
- }));
160
- cleanup();
161
- });
162
- transport.addEventListener('message', onMessage);
163
- transport.addEventListener('connectionStatus', onConnectionStatus);
164
- return [inputStream, outputStream, closeHandler];
165
- }
166
- function handleSubscribe(transport, serverId, input, serviceName, procName) {
167
- const streamId = nanoid();
168
- const m = msg(transport.clientId, serverId, streamId, input, serviceName, procName);
169
- m.controlFlags |= 2 /* ControlFlags.StreamOpenBit */;
170
- transport.send(m);
171
- // transport -> output
172
- const outputStream = pushable({ objectMode: true });
173
- function onMessage(msg) {
174
- if (msg.streamId !== streamId) {
175
- return;
176
- }
177
- if (isStreamClose(msg.controlFlags)) {
178
- cleanup();
179
- }
180
- else {
181
- outputStream.push(msg.payload);
182
- }
183
- }
184
- function cleanup() {
185
- outputStream.end();
186
- transport.removeEventListener('message', onMessage);
187
- transport.removeEventListener('connectionStatus', onConnectionStatus);
188
- }
189
- const closeHandler = () => {
190
- cleanup();
191
- transport.send(closeStream(transport.clientId, serverId, streamId));
192
- };
193
- // close stream after disconnect + grace period elapses
194
- const onConnectionStatus = rejectAfterDisconnectGrace(serverId, () => {
195
- outputStream.push(Err({
196
- code: UNEXPECTED_DISCONNECT,
197
- message: `${serverId} unexpectedly disconnected`,
198
- }));
199
- cleanup();
200
- });
201
- transport.addEventListener('message', onMessage);
202
- transport.addEventListener('connectionStatus', onConnectionStatus);
203
- return [outputStream, closeHandler];
204
- }
205
- function handleUpload(transport, serverId, input, serviceName, procName) {
206
- const streamId = nanoid();
207
- const inputStream = pushable({ objectMode: true });
208
- let firstMessage = true;
209
- if (input) {
210
- const m = msg(transport.clientId, serverId, streamId, input, serviceName, procName);
211
- // first message needs the open bit.
212
- m.controlFlags = 2 /* ControlFlags.StreamOpenBit */;
213
- transport.send(m);
214
- firstMessage = false;
215
- }
216
- // input -> transport
217
- // this gets cleaned up on inputStream.end(), which the caller should call.
218
- (async () => {
219
- for await (const rawIn of inputStream) {
220
- const m = msg(transport.clientId, serverId, streamId, rawIn);
221
- if (firstMessage) {
222
- m.controlFlags |= 2 /* ControlFlags.StreamOpenBit */;
223
- m.serviceName = serviceName;
224
- m.procedureName = procName;
225
- firstMessage = false;
226
- }
227
- transport.send(m);
228
- }
229
- transport.send(closeStream(transport.clientId, serverId, streamId));
230
- })();
231
- const responsePromise = new Promise((resolve) => {
232
- // on disconnect, set a timer to return an error
233
- // on (re)connect, clear the timer
234
- const onConnectionStatus = rejectAfterDisconnectGrace(serverId, () => {
235
- cleanup();
236
- resolve(Err({
237
- code: UNEXPECTED_DISCONNECT,
238
- message: `${serverId} unexpectedly disconnected`,
239
- }));
240
- });
241
- function cleanup() {
242
- inputStream.end();
243
- transport.removeEventListener('message', onMessage);
244
- transport.removeEventListener('connectionStatus', onConnectionStatus);
245
- }
246
- function onMessage(msg) {
247
- if (msg.streamId === streamId) {
248
- // cleanup and resolve as soon as we get a message
249
- cleanup();
250
- resolve(msg.payload);
251
- }
252
- }
253
- transport.addEventListener('message', onMessage);
254
- transport.addEventListener('connectionStatus', onConnectionStatus);
255
- });
256
- return [inputStream, responsePromise];
257
- }
@@ -1,30 +0,0 @@
1
- /**
2
- * The context for services/procedures. This is used only on
3
- * the server.
4
- *
5
- * An important detail is that the state prop is always on
6
- * this interface and it shouldn't be changed, removed, or
7
- * extended. This prop is for the state of a service.
8
- *
9
- * You should use declaration merging to extend this interface
10
- * with whatever you need. For example, if you need to access
11
- * a database, you could do:
12
- *
13
- * ```ts
14
- * declare module '@replit/river' {
15
- * interface ServiceContext {
16
- * db: Database;
17
- * }
18
- * }
19
- * ```
20
- */
21
- export interface ServiceContext {
22
- state: object | unknown;
23
- }
24
- /**
25
- * The {@link ServiceContext} with state. This is what is passed to procedures.
26
- */
27
- export type ServiceContextWithState<State extends object | unknown> = ServiceContext & {
28
- state: State;
29
- };
30
- //# sourceMappingURL=context.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../router/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,MAAM,uBAAuB,CAAC,KAAK,SAAS,MAAM,GAAG,OAAO,IAChE,cAAc,GAAG;IAAE,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,16 +0,0 @@
1
- import { AnyService } from './builder';
2
- /**
3
- * Defines a type for a collection service definitions. Should be
4
- * build with the {@link buildServiceDefs} function.
5
- * @template T - An array of services.
6
- */
7
- export type ServiceDefs<T extends AnyService[] = AnyService[]> = {
8
- [K in T[number]['name']]: T[number];
9
- };
10
- /**
11
- * Builds service definitions based on an array of services.
12
- * @param services - The array of services.
13
- * @returns The service definitions.
14
- */
15
- export declare function buildServiceDefs<T extends AnyService[]>(services: T): ServiceDefs<T>;
16
- //# sourceMappingURL=defs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"defs.d.ts","sourceRoot":"","sources":["../../router/defs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC;;;;GAIG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,UAAU,EAAE,GAAG,UAAU,EAAE,IAAI;KAC9D,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;CACpC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,UAAU,EAAE,EACrD,QAAQ,EAAE,CAAC,GACV,WAAW,CAAC,CAAC,CAAC,CAKhB"}
@@ -1,11 +0,0 @@
1
- /**
2
- * Builds service definitions based on an array of services.
3
- * @param services - The array of services.
4
- * @returns The service definitions.
5
- */
6
- export function buildServiceDefs(services) {
7
- return services.reduce((acc, service) => {
8
- acc[service.name] = service;
9
- return acc;
10
- }, {});
11
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC7D,YAAY,EACV,aAAa,EACb,WAAW,EACX,OAAO,EACP,WAAW,EACX,SAAS,EACT,UAAU,EACV,QAAQ,EACR,SAAS,EACT,WAAW,GACZ,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAC1C,YAAY,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,YAAY,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACxE,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
@@ -1,26 +0,0 @@
1
- import { TLiteralString, TNever, TObject, TSchema, TString, TUnion } from '@sinclair/typebox';
2
- export type RiverErrorSchema = TObject<{
3
- code: TLiteralString;
4
- message: TLiteralString | TString;
5
- }> | TObject<{
6
- code: TLiteralString;
7
- message: TLiteralString | TString;
8
- extras: TSchema;
9
- }>;
10
- export type RiverError = TUnion<RiverErrorSchema[]> | RiverErrorSchema | TNever;
11
- export declare const UNCAUGHT_ERROR = "UNCAUGHT_ERROR";
12
- export declare const UNEXPECTED_DISCONNECT = "UNEXPECTED_DISCONNECT";
13
- export declare const RiverUncaughtSchema: TObject<{
14
- code: TUnion<[import("@sinclair/typebox").TLiteral<"UNCAUGHT_ERROR">, import("@sinclair/typebox").TLiteral<"UNEXPECTED_DISCONNECT">]>;
15
- message: TString;
16
- }>;
17
- export type Result<T, E> = {
18
- ok: true;
19
- payload: T;
20
- } | {
21
- ok: false;
22
- payload: E;
23
- };
24
- export declare function Ok<T, E>(payload: T): Result<T, E>;
25
- export declare function Err<T, E>(error: E): Result<T, E>;
26
- //# sourceMappingURL=result.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../router/result.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,MAAM,EACN,OAAO,EACP,OAAO,EACP,OAAO,EACP,MAAM,EAEP,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,gBAAgB,GACxB,OAAO,CAAC;IACN,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC;CACnC,CAAC,GACF,OAAO,CAAC;IACN,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC;IAClC,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC,CAAC;AACP,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC,GAAG,gBAAgB,GAAG,MAAM,CAAC;AAEhF,eAAO,MAAM,cAAc,mBAAmB,CAAC;AAC/C,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAC7D,eAAO,MAAM,mBAAmB;;;EAM9B,CAAC;AAEH,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,IACnB;IACE,EAAE,EAAE,IAAI,CAAC;IACT,OAAO,EAAE,CAAC,CAAC;CACZ,GACD;IACE,EAAE,EAAE,KAAK,CAAC;IACV,OAAO,EAAE,CAAC,CAAC;CACZ,CAAC;AAEN,wBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAKjD;AAED,wBAAgB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAKhD"}
@@ -1,22 +0,0 @@
1
- import { Type, } from '@sinclair/typebox';
2
- export const UNCAUGHT_ERROR = 'UNCAUGHT_ERROR';
3
- export const UNEXPECTED_DISCONNECT = 'UNEXPECTED_DISCONNECT';
4
- export const RiverUncaughtSchema = Type.Object({
5
- code: Type.Union([
6
- Type.Literal(UNCAUGHT_ERROR),
7
- Type.Literal(UNEXPECTED_DISCONNECT),
8
- ]),
9
- message: Type.String(),
10
- });
11
- export function Ok(payload) {
12
- return {
13
- ok: true,
14
- payload,
15
- };
16
- }
17
- export function Err(error) {
18
- return {
19
- ok: false,
20
- payload: error,
21
- };
22
- }
@@ -1,39 +0,0 @@
1
- import { Static } from '@sinclair/typebox';
2
- import { Connection, Transport } from '../transport/transport';
3
- import { AnyProcedure, PayloadType } from './builder';
4
- import type { Pushable } from 'it-pushable';
5
- import { ServiceContext } from './context';
6
- import { Result, RiverError } from './result';
7
- import { ServiceDefs } from './defs';
8
- /**
9
- * Represents a server with a set of services. Use {@link createServer} to create it.
10
- * @template Services - The type of services provided by the server.
11
- */
12
- export interface Server<Services> {
13
- services: Services;
14
- streams: Map<string, ProcStream>;
15
- close(): Promise<void>;
16
- }
17
- interface ProcStream {
18
- id: string;
19
- serviceName: string;
20
- procedureName: string;
21
- procedure: AnyProcedure;
22
- incoming: Pushable<PayloadType>;
23
- outgoing: Pushable<Result<Static<PayloadType>, Static<RiverError>>>;
24
- promises: {
25
- outputHandler: Promise<unknown>;
26
- inputHandler: Promise<unknown>;
27
- };
28
- }
29
- /**
30
- * Creates a server instance that listens for incoming messages from a transport and routes them to the appropriate service and procedure.
31
- * The server tracks the state of each service along with open streams and the extended context object.
32
- * @param transport - The transport to listen to.
33
- * @param services - An object containing all the services to be registered on the server.
34
- * @param extendedContext - An optional object containing additional context to be passed to all services.
35
- * @returns A promise that resolves to a server instance with the registered services.
36
- */
37
- export declare function createServer<Services extends ServiceDefs>(transport: Transport<Connection>, services: Services, extendedContext?: Omit<ServiceContext, 'state'>): Server<Services>;
38
- export {};
39
- //# sourceMappingURL=server.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../router/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAc,WAAW,EAAE,MAAM,WAAW,CAAC;AAElE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAU5C,OAAO,EAAE,cAAc,EAA2B,MAAM,WAAW,CAAC;AAGpE,OAAO,EAEL,MAAM,EACN,UAAU,EAGX,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC;;;GAGG;AACH,MAAM,WAAW,MAAM,CAAC,QAAQ;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,YAAY,CAAC;IACxB,QAAQ,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IAChC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACpE,QAAQ,EAAE;QACR,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;KAChC,CAAC;CACH;AAsUD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,QAAQ,SAAS,WAAW,EACvD,SAAS,EAAE,SAAS,CAAC,UAAU,CAAC,EAChC,QAAQ,EAAE,QAAQ,EAClB,eAAe,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,GAC9C,MAAM,CAAC,QAAQ,CAAC,CAElB"}