@replit/river 0.9.0 → 0.9.2

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.
@@ -79,15 +79,17 @@ describe('procedures should leave no trace after finishing', async () => {
79
79
  const [input, output, close] = await client.test.echo.stream();
80
80
  input.push({ msg: '1', ignore: false });
81
81
  input.push({ msg: '2', ignore: false, end: true });
82
- input.end();
83
82
  const result1 = await iterNext(output);
84
83
  assert(result1.ok);
85
84
  expect(result1.payload).toStrictEqual({ response: '1' });
85
+ // ensure we only have one stream despite pushing multiple messages.
86
+ await waitUntil(() => server.streams.size, 1);
87
+ input.end();
88
+ // ensure we no longer have any streams since the input was closed.
89
+ await waitUntil(() => server.streams.size, 0);
86
90
  const result2 = await iterNext(output);
87
91
  assert(result2.ok);
88
92
  expect(result2.payload).toStrictEqual({ response: '2' });
89
- // ensure we exactly have one stream even after we send multiple messages
90
- expect(server.streams.size).toEqual(1);
91
93
  const result3 = await output.next();
92
94
  assert(result3.done);
93
95
  close();
@@ -1 +1 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../router/builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../router/builder.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,12 @@ export function serializeService(s) {
13
13
  {
14
14
  input: Type.Strict(procDef.input),
15
15
  output: Type.Strict(procDef.output),
16
- errors: Type.Strict(procDef.errors),
16
+ // Only add the `errors` field if it is non-never.
17
+ ...('errors' in procDef
18
+ ? {
19
+ errors: Type.Strict(procDef.errors),
20
+ }
21
+ : {}),
17
22
  type: procDef.type,
18
23
  // Only add the `init` field if the type declares it.
19
24
  ...('init' in procDef
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../router/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../router/client.ts"],"names":[],"mappings":"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"}
@@ -42,16 +42,14 @@ export const createClient = (transport, serverId = 'SERVER') => _createRecursive
42
42
  const [input] = opts.args;
43
43
  const streamId = nanoid();
44
44
  function belongsToSameStream(msg) {
45
- return (msg.serviceName === serviceName &&
46
- msg.procedureName === procName &&
47
- msg.streamId === streamId);
45
+ return msg.streamId === streamId;
48
46
  }
49
47
  if (procType === 'stream') {
50
48
  const inputStream = pushable({ objectMode: true });
51
49
  const outputStream = pushable({ objectMode: true });
52
50
  let firstMessage = true;
53
51
  if (input) {
54
- const m = msg(transport.clientId, serverId, serviceName, procName, streamId, input);
52
+ const m = msg(transport.clientId, serverId, streamId, input, serviceName, procName);
55
53
  // first message needs the open bit.
56
54
  m.controlFlags = 2 /* ControlFlags.StreamOpenBit */;
57
55
  transport.send(m);
@@ -61,20 +59,27 @@ export const createClient = (transport, serverId = 'SERVER') => _createRecursive
61
59
  // this gets cleaned up on inputStream.end() which is called by closeHandler
62
60
  (async () => {
63
61
  for await (const rawIn of inputStream) {
64
- const m = msg(transport.clientId, serverId, serviceName, procName, streamId, rawIn);
62
+ const m = msg(transport.clientId, serverId, streamId, rawIn);
65
63
  if (firstMessage) {
64
+ m.serviceName = serviceName;
65
+ m.procedureName = procName;
66
66
  m.controlFlags |= 2 /* ControlFlags.StreamOpenBit */;
67
67
  firstMessage = false;
68
68
  }
69
69
  transport.send(m);
70
70
  }
71
+ transport.send(closeStream(transport.clientId, serverId, streamId));
71
72
  })();
72
73
  // transport -> output
73
74
  const listener = (msg) => {
75
+ if (!belongsToSameStream(msg)) {
76
+ return;
77
+ }
74
78
  if (isStreamClose(msg.controlFlags)) {
75
79
  outputStream.end();
80
+ transport.removeEventListener('message', listener);
76
81
  }
77
- else if (belongsToSameStream(msg)) {
82
+ else {
78
83
  outputStream.push(msg.payload);
79
84
  }
80
85
  };
@@ -82,13 +87,13 @@ export const createClient = (transport, serverId = 'SERVER') => _createRecursive
82
87
  const closeHandler = () => {
83
88
  inputStream.end();
84
89
  outputStream.end();
85
- transport.send(closeStream(transport.clientId, serverId, serviceName, procName, streamId));
90
+ transport.send(closeStream(transport.clientId, serverId, streamId));
86
91
  transport.removeEventListener('message', listener);
87
92
  };
88
93
  return [inputStream, outputStream, closeHandler];
89
94
  }
90
95
  else if (procType === 'rpc') {
91
- const m = msg(transport.clientId, serverId, serviceName, procName, streamId, input);
96
+ const m = msg(transport.clientId, serverId, streamId, input, serviceName, procName);
92
97
  // rpc is a stream open + close
93
98
  m.controlFlags |=
94
99
  2 /* ControlFlags.StreamOpenBit */ | 4 /* ControlFlags.StreamClosedBit */;
@@ -96,23 +101,27 @@ export const createClient = (transport, serverId = 'SERVER') => _createRecursive
96
101
  return waitForMessage(transport, belongsToSameStream);
97
102
  }
98
103
  else if (procType === 'subscribe') {
99
- const m = msg(transport.clientId, serverId, serviceName, procName, streamId, input);
104
+ const m = msg(transport.clientId, serverId, streamId, input, serviceName, procName);
100
105
  m.controlFlags |= 2 /* ControlFlags.StreamOpenBit */;
101
106
  transport.send(m);
102
107
  // transport -> output
103
108
  const outputStream = pushable({ objectMode: true });
104
109
  const listener = (msg) => {
105
- if (belongsToSameStream(msg)) {
106
- outputStream.push(msg.payload);
110
+ if (!belongsToSameStream(msg)) {
111
+ return;
107
112
  }
108
113
  if (isStreamClose(msg.controlFlags)) {
109
114
  outputStream.end();
115
+ transport.removeEventListener('message', listener);
116
+ }
117
+ else {
118
+ outputStream.push(msg.payload);
110
119
  }
111
120
  };
112
121
  transport.addEventListener('message', listener);
113
122
  const closeHandler = () => {
114
123
  outputStream.end();
115
- transport.send(closeStream(transport.clientId, serverId, serviceName, procName, streamId));
124
+ transport.send(closeStream(transport.clientId, serverId, streamId));
116
125
  transport.removeEventListener('message', listener);
117
126
  };
118
127
  return [outputStream, closeHandler];
@@ -121,7 +130,7 @@ export const createClient = (transport, serverId = 'SERVER') => _createRecursive
121
130
  const inputStream = pushable({ objectMode: true });
122
131
  let firstMessage = true;
123
132
  if (input) {
124
- const m = msg(transport.clientId, serverId, serviceName, procName, streamId, input);
133
+ const m = msg(transport.clientId, serverId, streamId, input, serviceName, procName);
125
134
  // first message needs the open bit.
126
135
  m.controlFlags = 2 /* ControlFlags.StreamOpenBit */;
127
136
  transport.send(m);
@@ -131,14 +140,16 @@ export const createClient = (transport, serverId = 'SERVER') => _createRecursive
131
140
  // this gets cleaned up on inputStream.end(), which the caller should call.
132
141
  (async () => {
133
142
  for await (const rawIn of inputStream) {
134
- const m = msg(transport.clientId, serverId, serviceName, procName, streamId, rawIn);
143
+ const m = msg(transport.clientId, serverId, streamId, rawIn);
135
144
  if (firstMessage) {
136
145
  m.controlFlags |= 2 /* ControlFlags.StreamOpenBit */;
146
+ m.serviceName = serviceName;
147
+ m.procedureName = procName;
137
148
  firstMessage = false;
138
149
  }
139
150
  transport.send(m);
140
151
  }
141
- transport.send(closeStream(transport.clientId, serverId, serviceName, procName, streamId));
152
+ transport.send(closeStream(transport.clientId, serverId, streamId));
142
153
  })();
143
154
  return [inputStream, waitForMessage(transport, belongsToSameStream)];
144
155
  }
@@ -1,6 +1,6 @@
1
1
  import { Static } from '@sinclair/typebox';
2
2
  import { Connection, Transport } from '../transport/transport';
3
- import { AnyService, PayloadType } from './builder';
3
+ import { AnyProcedure, AnyService, PayloadType } from './builder';
4
4
  import type { Pushable } from 'it-pushable';
5
5
  import { TransportMessage } from '../transport/message';
6
6
  import { ServiceContext } from './context';
@@ -15,6 +15,10 @@ export interface Server<Services> {
15
15
  close(): Promise<void>;
16
16
  }
17
17
  interface ProcStream {
18
+ id: string;
19
+ serviceName: string;
20
+ procedureName: string;
21
+ procedure: AnyProcedure;
18
22
  incoming: Pushable<TransportMessage>;
19
23
  outgoing: Pushable<TransportMessage<Result<Static<PayloadType>, Static<RiverError>>>>;
20
24
  promises: {
@@ -1 +1 @@
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,EAAgB,UAAU,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAElE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAGL,gBAAgB,EAKjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAA2B,MAAM,WAAW,CAAC;AAGpE,OAAO,EAEL,MAAM,EACN,UAAU,EAGX,MAAM,UAAU,CAAC;AAElB;;;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,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IACrC,QAAQ,EAAE,QAAQ,CAChB,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAClE,CAAC;IACF,QAAQ,EAAE;QACR,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;KAChC,CAAC;CACH;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EAC5E,SAAS,EAAE,SAAS,CAAC,UAAU,CAAC,EAChC,QAAQ,EAAE,QAAQ,EAClB,eAAe,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,GAC9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAuP3B"}
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,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAElE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAGL,gBAAgB,EAKjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAA2B,MAAM,WAAW,CAAC;AAGpE,OAAO,EAEL,MAAM,EACN,UAAU,EAGX,MAAM,UAAU,CAAC;AAElB;;;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,gBAAgB,CAAC,CAAC;IACrC,QAAQ,EAAE,QAAQ,CAChB,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAClE,CAAC;IACF,QAAQ,EAAE;QACR,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;KAChC,CAAC;CACH;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EAC5E,SAAS,EAAE,SAAS,CAAC,UAAU,CAAC,EAChC,QAAQ,EAAE,QAAQ,EAClB,eAAe,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,GAC9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAqQ3B"}
@@ -17,13 +17,14 @@ export async function createServer(transport, services, extendedContext) {
17
17
  const streamMap = new Map();
18
18
  async function cleanupStream(id) {
19
19
  const stream = streamMap.get(id);
20
- if (stream) {
21
- stream.incoming.end();
22
- await stream.promises.inputHandler;
23
- stream.outgoing.end();
24
- await stream.promises.outputHandler;
25
- streamMap.delete(id);
20
+ if (!stream) {
21
+ return;
26
22
  }
23
+ stream.incoming.end();
24
+ await stream.promises.inputHandler;
25
+ stream.outgoing.end();
26
+ await stream.promises.outputHandler;
27
+ streamMap.delete(id);
27
28
  }
28
29
  function getContext(service) {
29
30
  const context = contextMap.get(service);
@@ -43,71 +44,119 @@ export async function createServer(transport, services, extendedContext) {
43
44
  log?.info(`${transport.clientId} -- got msg with destination that isn't the server, ignoring`);
44
45
  return;
45
46
  }
46
- if (!(message.serviceName in services)) {
47
+ const streamIdx = message.streamId;
48
+ const procStream = streamMap.get(streamIdx);
49
+ if (procStream) {
50
+ // If the stream is a continuation, we do not admit the init messages.
51
+ if (Value.Check(procStream.procedure.input, message.payload)) {
52
+ procStream.incoming.push(message);
53
+ }
54
+ else if (!Value.Check(ControlMessagePayloadSchema, message.payload)) {
55
+ log?.error(`${transport.clientId} -- procedure ${procStream.serviceName}.${procStream.procedureName} received invalid payload: ${JSON.stringify(message.payload)}`);
56
+ }
57
+ if (isStreamClose(message.controlFlags)) {
58
+ await cleanupStream(streamIdx);
59
+ }
60
+ return;
61
+ }
62
+ if (!isStreamOpen(message.controlFlags)) {
63
+ log?.warn(`${transport.clientId} -- couldn't find a matching procedure stream for ${message.serviceName}.${message.procedureName}:${message.streamId}`);
64
+ return;
65
+ }
66
+ if (!message.serviceName || !(message.serviceName in services)) {
47
67
  log?.warn(`${transport.clientId} -- couldn't find service ${message.serviceName}`);
48
68
  return;
49
69
  }
50
70
  const service = services[message.serviceName];
51
71
  const serviceContext = getContext(service);
52
- if (!(message.procedureName in service.procedures)) {
72
+ if (!message.procedureName ||
73
+ !(message.procedureName in service.procedures)) {
53
74
  log?.warn(`${transport.clientId} -- couldn't find a matching procedure for ${message.serviceName}.${message.procedureName}`);
54
75
  return;
55
76
  }
56
77
  const procedure = service.procedures[message.procedureName];
57
- const streamIdx = `${message.serviceName}.${message.procedureName}:${message.streamId}`;
58
- if (isStreamOpen(message.controlFlags) && !streamMap.has(streamIdx)) {
59
- const incoming = pushable({ objectMode: true });
60
- const outgoing = pushable({ objectMode: true });
61
- const outputHandler =
62
- // sending outgoing messages back to client
63
- (async () => {
64
- for await (const response of outgoing) {
65
- transport.send(response);
78
+ const procHasInitMessage = 'init' in procedure;
79
+ const incoming = pushable({ objectMode: true });
80
+ const outgoing = pushable({ objectMode: true });
81
+ const outputHandler =
82
+ // sending outgoing messages back to client
83
+ (async () => {
84
+ for await (const response of outgoing) {
85
+ transport.send(response);
86
+ }
87
+ // we ended, send a close bit back to the client
88
+ // only subscriptions and streams have streams the
89
+ // handler can close
90
+ if (procedure.type === 'subscription' || procedure.type === 'stream') {
91
+ transport.send(closeStream(transport.clientId, message.from, message.streamId));
92
+ }
93
+ })();
94
+ function errorHandler(err) {
95
+ const errorMsg = err instanceof Error ? err.message : `[coerced to error] ${err}`;
96
+ log?.error(`${transport.clientId} -- procedure ${message.serviceName}.${message.procedureName}:${message.streamId} threw an error: ${errorMsg}`);
97
+ outgoing.push(reply(message, Err({
98
+ code: UNCAUGHT_ERROR,
99
+ message: errorMsg,
100
+ })));
101
+ }
102
+ // pump incoming message stream -> handler -> outgoing message stream
103
+ let inputHandler;
104
+ if (procedure.type === 'stream') {
105
+ if (procHasInitMessage) {
106
+ inputHandler = (async () => {
107
+ const initMessage = await incoming.next();
108
+ if (initMessage.done) {
109
+ return;
110
+ }
111
+ return procedure
112
+ .handler(serviceContext, initMessage.value, incoming, outgoing)
113
+ .catch(errorHandler);
114
+ })();
115
+ }
116
+ else {
117
+ inputHandler = procedure
118
+ .handler(serviceContext, incoming, outgoing)
119
+ .catch(errorHandler);
120
+ }
121
+ }
122
+ else if (procedure.type === 'rpc') {
123
+ inputHandler = (async () => {
124
+ const inputMessage = await incoming.next();
125
+ if (inputMessage.done) {
126
+ return;
127
+ }
128
+ try {
129
+ const outputMessage = await procedure.handler(serviceContext, inputMessage.value);
130
+ outgoing.push(outputMessage);
66
131
  }
67
- // we ended, send a close bit back to the client
68
- // only subscriptions and streams have streams the
69
- // handler can close
70
- if (procedure.type === 'subscription' ||
71
- procedure.type === 'stream') {
72
- transport.send(closeStream(transport.clientId, message.from, message.serviceName, message.procedureName, message.streamId));
132
+ catch (err) {
133
+ errorHandler(err);
73
134
  }
74
135
  })();
75
- function errorHandler(err) {
76
- const errorMsg = err instanceof Error ? err.message : `[coerced to error] ${err}`;
77
- log?.error(`${transport.clientId} -- procedure ${message.serviceName}.${message.procedureName}:${message.streamId} threw an error: ${errorMsg}`);
78
- outgoing.push(reply(message, Err({
79
- code: UNCAUGHT_ERROR,
80
- message: errorMsg,
81
- })));
82
- }
83
- // pump incoming message stream -> handler -> outgoing message stream
84
- let inputHandler;
85
- if (procedure.type === 'stream') {
86
- if ('init' in procedure) {
87
- inputHandler = (async () => {
88
- const initMessage = await incoming.next();
89
- if (initMessage.done) {
90
- return;
91
- }
92
- return procedure
93
- .handler(serviceContext, initMessage.value, incoming, outgoing)
94
- .catch(errorHandler);
95
- })();
136
+ }
137
+ else if (procedure.type === 'subscription') {
138
+ inputHandler = (async () => {
139
+ const inputMessage = await incoming.next();
140
+ if (inputMessage.done) {
141
+ return;
96
142
  }
97
- else {
98
- inputHandler = procedure
99
- .handler(serviceContext, incoming, outgoing)
100
- .catch(errorHandler);
143
+ try {
144
+ await procedure.handler(serviceContext, inputMessage.value, outgoing);
101
145
  }
102
- }
103
- else if (procedure.type === 'rpc') {
146
+ catch (err) {
147
+ errorHandler(err);
148
+ }
149
+ })();
150
+ }
151
+ else if (procedure.type === 'upload') {
152
+ if (procHasInitMessage) {
104
153
  inputHandler = (async () => {
105
- const inputMessage = await incoming.next();
106
- if (inputMessage.done) {
154
+ const initMessage = await incoming.next();
155
+ if (initMessage.done) {
107
156
  return;
108
157
  }
109
158
  try {
110
- const outputMessage = await procedure.handler(serviceContext, inputMessage.value);
159
+ const outputMessage = await procedure.handler(serviceContext, initMessage.value, incoming);
111
160
  outgoing.push(outputMessage);
112
161
  }
113
162
  catch (err) {
@@ -115,68 +164,37 @@ export async function createServer(transport, services, extendedContext) {
115
164
  }
116
165
  })();
117
166
  }
118
- else if (procedure.type === 'subscription') {
167
+ else {
119
168
  inputHandler = (async () => {
120
- const inputMessage = await incoming.next();
121
- if (inputMessage.done) {
122
- return;
123
- }
124
169
  try {
125
- await procedure.handler(serviceContext, inputMessage.value, outgoing);
170
+ const outputMessage = await procedure.handler(serviceContext, incoming);
171
+ outgoing.push(outputMessage);
126
172
  }
127
173
  catch (err) {
128
174
  errorHandler(err);
129
175
  }
130
176
  })();
131
177
  }
132
- else if (procedure.type === 'upload') {
133
- if ('init' in procedure) {
134
- inputHandler = (async () => {
135
- const initMessage = await incoming.next();
136
- if (initMessage.done) {
137
- return;
138
- }
139
- try {
140
- const outputMessage = await procedure.handler(serviceContext, initMessage.value, incoming);
141
- outgoing.push(outputMessage);
142
- }
143
- catch (err) {
144
- errorHandler(err);
145
- }
146
- })();
147
- }
148
- else {
149
- inputHandler = (async () => {
150
- try {
151
- const outputMessage = await procedure.handler(serviceContext, incoming);
152
- outgoing.push(outputMessage);
153
- }
154
- catch (err) {
155
- errorHandler(err);
156
- }
157
- })();
158
- }
159
- }
160
- else {
161
- // procedure is inferred to be never here as this is not a valid procedure type
162
- // we cast just to log
163
- log?.warn(`${transport.clientId} -- got request for invalid procedure type ${procedure.type} at ${message.serviceName}.${message.procedureName}`);
164
- return;
165
- }
166
- streamMap.set(streamIdx, {
167
- incoming,
168
- outgoing,
169
- promises: { inputHandler, outputHandler },
170
- });
171
178
  }
172
- const procStream = streamMap.get(streamIdx);
173
- if (!procStream) {
174
- log?.warn(`${transport.clientId} -- couldn't find a matching procedure stream for ${message.serviceName}.${message.procedureName}:${message.streamId}`);
179
+ else {
180
+ // procedure is inferred to be never here as this is not a valid procedure type
181
+ // we cast just to log
182
+ log?.warn(`${transport.clientId} -- got request for invalid procedure type ${procedure.type} at ${message.serviceName}.${message.procedureName}`);
175
183
  return;
176
184
  }
177
- if (Value.Check(procedure.input, message.payload) ||
178
- ('init' in procedure && Value.Check(procedure.init, message.payload))) {
179
- procStream.incoming.push(message);
185
+ streamMap.set(streamIdx, {
186
+ id: message.streamId,
187
+ incoming,
188
+ outgoing,
189
+ serviceName: message.serviceName,
190
+ procedureName: message.procedureName,
191
+ procedure,
192
+ promises: { inputHandler, outputHandler },
193
+ });
194
+ // This is the first message, so we parse is as the initialization message, if supplied.
195
+ if ((!procHasInitMessage && Value.Check(procedure.input, message.payload)) ||
196
+ (procHasInitMessage && Value.Check(procedure.init, message.payload))) {
197
+ incoming.push(message);
180
198
  }
181
199
  else if (!Value.Check(ControlMessagePayloadSchema, message.payload)) {
182
200
  log?.error(`${transport.clientId} -- procedure ${message.serviceName}.${message.procedureName} received invalid payload: ${JSON.stringify(message.payload)}`);
@@ -25,9 +25,9 @@ describe('sending and receiving across websockets works', async () => {
25
25
  });
26
26
  test('sending respects to/from fields', async () => {
27
27
  const makeDummyMessage = (from, to, message) => {
28
- return msg(from, to, 'service', 'proc', 'stream', {
28
+ return msg(from, to, 'stream', {
29
29
  msg: message,
30
- });
30
+ }, 'service', 'proc');
31
31
  };
32
32
  const clientId1 = 'client1';
33
33
  const clientId2 = 'client2';
@@ -21,8 +21,8 @@ export declare const TransportMessageSchema: <T extends TSchema>(t: T) => import
21
21
  id: import("@sinclair/typebox").TString;
22
22
  from: import("@sinclair/typebox").TString;
23
23
  to: import("@sinclair/typebox").TString;
24
- serviceName: import("@sinclair/typebox").TString;
25
- procedureName: import("@sinclair/typebox").TString;
24
+ serviceName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>>;
25
+ procedureName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>>;
26
26
  streamId: import("@sinclair/typebox").TString;
27
27
  controlFlags: import("@sinclair/typebox").TInteger;
28
28
  payload: T;
@@ -36,8 +36,8 @@ export declare const TransportAckSchema: import("@sinclair/typebox").TObject<{
36
36
  id: import("@sinclair/typebox").TString;
37
37
  from: import("@sinclair/typebox").TString;
38
38
  to: import("@sinclair/typebox").TString;
39
- serviceName: import("@sinclair/typebox").TString;
40
- procedureName: import("@sinclair/typebox").TString;
39
+ serviceName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>>;
40
+ procedureName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>>;
41
41
  streamId: import("@sinclair/typebox").TString;
42
42
  controlFlags: import("@sinclair/typebox").TInteger;
43
43
  payload: import("@sinclair/typebox").TObject<{
@@ -56,8 +56,8 @@ export declare const OpaqueTransportMessageSchema: import("@sinclair/typebox").T
56
56
  id: import("@sinclair/typebox").TString;
57
57
  from: import("@sinclair/typebox").TString;
58
58
  to: import("@sinclair/typebox").TString;
59
- serviceName: import("@sinclair/typebox").TString;
60
- procedureName: import("@sinclair/typebox").TString;
59
+ serviceName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>>;
60
+ procedureName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNull]>>;
61
61
  streamId: import("@sinclair/typebox").TString;
62
62
  controlFlags: import("@sinclair/typebox").TInteger;
63
63
  payload: import("@sinclair/typebox").TUnknown;
@@ -65,14 +65,23 @@ export declare const OpaqueTransportMessageSchema: import("@sinclair/typebox").T
65
65
  /**
66
66
  * Represents a transport message. This is the same type as {@link TransportMessageSchema} but
67
67
  * we can't statically infer generics from generic Typebox schemas so we have to define it again here.
68
+ *
69
+ * TypeScript can't enforce types when a bitmask is involved, so these are the semantics of
70
+ * `controlFlags`:
71
+ * * If `controlFlags & StreamOpenBit == StreamOpenBit`, `streamId` must be set to a unique value
72
+ * (suggestion: use `nanoid`).
73
+ * * `serviceName` and `procedureName` must be set only when `controlFlags & StreamOpenBit ==
74
+ * StreamOpenBit`.
75
+ * * If `controlFlags & StreamClosedBit` is set and the kind is `stream` or `subscription`,
76
+ * `payload` can be a control message.
68
77
  * @template Payload The type of the payload.
69
78
  */
70
79
  export type TransportMessage<Payload extends Record<string, unknown> | unknown = Record<string, unknown>> = {
71
80
  id: string;
72
81
  from: string;
73
82
  to: string;
74
- serviceName: string;
75
- procedureName: string;
83
+ serviceName?: string;
84
+ procedureName?: string;
76
85
  streamId: string;
77
86
  controlFlags: number;
78
87
  payload: Payload;
@@ -95,7 +104,7 @@ export type TransportClientId = string;
95
104
  * @param payload The payload of the message.
96
105
  * @returns A TransportMessage object with the given parameters.
97
106
  */
98
- export declare function msg<Payload extends object>(from: string, to: string, service: string, proc: string, stream: string, payload: Payload): TransportMessage<Payload>;
107
+ export declare function msg<Payload extends object>(from: string, to: string, streamId: string, payload: Payload, serviceName?: string, procedureName?: string): TransportMessage<Payload>;
99
108
  /**
100
109
  * Creates a new transport message as a response to the given message.
101
110
  * @param msg The original message to respond to.
@@ -110,7 +119,7 @@ export declare function reply<Payload extends object>(msg: OpaqueTransportMessag
110
119
  * @param respondTo The transport message to respond to.
111
120
  * @returns The close message
112
121
  */
113
- export declare function closeStream(from: TransportClientId, to: TransportClientId, service: string, proc: string, stream: string): TransportMessage<{
122
+ export declare function closeStream(from: TransportClientId, to: TransportClientId, stream: string): TransportMessage<{
114
123
  type: "CLOSE";
115
124
  }>;
116
125
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../transport/message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAU,MAAM,mBAAmB,CAAC;AAG1D;;;;;;GAMG;AACH,0BAAkB,YAAY;IAC5B,MAAM,IAAS;IACf,aAAa,IAAS;IACtB,eAAe,IAAS;CACzB;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;EAU/B,CAAC;AAEL;;;;GAIG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;EAI9B,CAAC;AAEF,eAAO,MAAM,2BAA2B;;EAEtC,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;EAExC,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,CAC1B,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACzE;IACF,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC/D,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAEvC;;;;;;;;;;GAUG;AACH,wBAAgB,GAAG,CAAC,OAAO,SAAS,MAAM,EACxC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,GACf,gBAAgB,CAAC,OAAO,CAAC,CAW3B;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,OAAO,SAAS,MAAM,EAC1C,GAAG,EAAE,sBAAsB,EAC3B,QAAQ,EAAE,OAAO,GAChB,gBAAgB,CAAC,OAAO,CAAC,CAS3B;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,iBAAiB,EACvB,EAAE,EAAE,iBAAiB,EACrB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM;;GAOf;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAIzD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAK1D"}
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../transport/message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAU,MAAM,mBAAmB,CAAC;AAG1D;;;;;;GAMG;AACH,0BAAkB,YAAY;IAC5B,MAAM,IAAS;IACf,aAAa,IAAS;IACtB,eAAe,IAAS;CACzB;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;EAU/B,CAAC;AAEL;;;;GAIG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;EAI9B,CAAC;AAEF,eAAO,MAAM,2BAA2B;;EAEtC,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;EAExC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,gBAAgB,CAC1B,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACzE;IACF,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC/D,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAEvC;;;;;;;;;;GAUG;AACH,wBAAgB,GAAG,CAAC,OAAO,SAAS,MAAM,EACxC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,WAAW,CAAC,EAAE,MAAM,EACpB,aAAa,CAAC,EAAE,MAAM,GACrB,gBAAgB,CAAC,OAAO,CAAC,CAW3B;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,OAAO,SAAS,MAAM,EAC1C,GAAG,EAAE,sBAAsB,EAC3B,QAAQ,EAAE,OAAO,GAChB,gBAAgB,CAAC,OAAO,CAAC,CAS3B;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,iBAAiB,EACvB,EAAE,EAAE,iBAAiB,EACrB,MAAM,EAAE,MAAM;;GAOf;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAIzD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAK1D"}
@@ -10,8 +10,8 @@ export const TransportMessageSchema = (t) => Type.Object({
10
10
  id: Type.String(),
11
11
  from: Type.String(),
12
12
  to: Type.String(),
13
- serviceName: Type.String(),
14
- procedureName: Type.String(),
13
+ serviceName: Type.Optional(Type.Union([Type.String(), Type.Null()])),
14
+ procedureName: Type.Optional(Type.Union([Type.String(), Type.Null()])),
15
15
  streamId: Type.String(),
16
16
  controlFlags: Type.Integer(),
17
17
  payload: t,
@@ -44,14 +44,14 @@ export const OpaqueTransportMessageSchema = TransportMessageSchema(Type.Unknown(
44
44
  * @param payload The payload of the message.
45
45
  * @returns A TransportMessage object with the given parameters.
46
46
  */
47
- export function msg(from, to, service, proc, stream, payload) {
47
+ export function msg(from, to, streamId, payload, serviceName, procedureName) {
48
48
  return {
49
49
  id: nanoid(),
50
50
  to,
51
51
  from,
52
- serviceName: service,
53
- procedureName: proc,
54
- streamId: stream,
52
+ serviceName,
53
+ procedureName,
54
+ streamId,
55
55
  controlFlags: 0,
56
56
  payload,
57
57
  };
@@ -64,9 +64,9 @@ export function msg(from, to, service, proc, stream, payload) {
64
64
  */
65
65
  export function reply(msg, response) {
66
66
  return {
67
- ...msg,
68
- controlFlags: 0,
69
67
  id: nanoid(),
68
+ streamId: msg.streamId,
69
+ controlFlags: 0,
70
70
  to: msg.from,
71
71
  from: msg.to,
72
72
  payload: response,
@@ -79,8 +79,8 @@ export function reply(msg, response) {
79
79
  * @param respondTo The transport message to respond to.
80
80
  * @returns The close message
81
81
  */
82
- export function closeStream(from, to, service, proc, stream) {
83
- const closeMessage = msg(from, to, service, proc, stream, {
82
+ export function closeStream(from, to, stream) {
83
+ const closeMessage = msg(from, to, stream, {
84
84
  type: 'CLOSE',
85
85
  });
86
86
  closeMessage.controlFlags |= 4 /* ControlFlags.StreamClosedBit */;
@@ -2,7 +2,7 @@ import { isAck, isStreamClose, isStreamOpen, msg, reply, } from './message';
2
2
  import { describe, test, expect } from 'vitest';
3
3
  describe('message helpers', () => {
4
4
  test('ack', () => {
5
- const m = msg('a', 'b', 'svc', 'proc', 'stream', { test: 1 });
5
+ const m = msg('a', 'b', 'stream', { test: 1 }, 'svc', 'proc');
6
6
  m.controlFlags |= 1 /* ControlFlags.AckBit */;
7
7
  expect(m).toHaveProperty('controlFlags');
8
8
  expect(isAck(m.controlFlags)).toBe(true);
@@ -10,7 +10,7 @@ describe('message helpers', () => {
10
10
  expect(isStreamClose(m.controlFlags)).toBe(false);
11
11
  });
12
12
  test('streamOpen', () => {
13
- const m = msg('a', 'b', 'svc', 'proc', 'stream', { test: 1 });
13
+ const m = msg('a', 'b', 'stream', { test: 1 }, 'svc', 'proc');
14
14
  m.controlFlags |= 2 /* ControlFlags.StreamOpenBit */;
15
15
  expect(m).toHaveProperty('controlFlags');
16
16
  expect(isAck(m.controlFlags)).toBe(false);
@@ -18,7 +18,7 @@ describe('message helpers', () => {
18
18
  expect(isStreamClose(m.controlFlags)).toBe(false);
19
19
  });
20
20
  test('streamClose', () => {
21
- const m = msg('a', 'b', 'svc', 'proc', 'stream', { test: 1 });
21
+ const m = msg('a', 'b', 'stream', { test: 1 }, 'svc', 'proc');
22
22
  m.controlFlags |= 4 /* ControlFlags.StreamClosedBit */;
23
23
  expect(m).toHaveProperty('controlFlags');
24
24
  expect(isAck(m.controlFlags)).toBe(false);
@@ -26,7 +26,7 @@ describe('message helpers', () => {
26
26
  expect(isStreamClose(m.controlFlags)).toBe(true);
27
27
  });
28
28
  test('reply', () => {
29
- const m = msg('a', 'b', 'svc', 'proc', 'stream', { test: 1 });
29
+ const m = msg('a', 'b', 'stream', { test: 1 }, 'svc', 'proc');
30
30
  const payload = { cool: 2 };
31
31
  const resp = reply(m, payload);
32
32
  expect(resp.id).not.toBe(m.id);
@@ -35,13 +35,13 @@ describe('message helpers', () => {
35
35
  expect(resp.to).toBe('a');
36
36
  });
37
37
  test('default message has no control flags set', () => {
38
- const m = msg('a', 'b', 'svc', 'proc', 'stream', { test: 1 });
38
+ const m = msg('a', 'b', 'stream', { test: 1 }, 'svc', 'proc');
39
39
  expect(isAck(m.controlFlags)).toBe(false);
40
40
  expect(isStreamOpen(m.controlFlags)).toBe(false);
41
41
  expect(isStreamClose(m.controlFlags)).toBe(false);
42
42
  });
43
43
  test('combining control flags works', () => {
44
- const m = msg('a', 'b', 'svc', 'proc', 'stream', { test: 1 });
44
+ const m = msg('a', 'b', 'stream', { test: 1 }, 'svc', 'proc');
45
45
  m.controlFlags |= 2 /* ControlFlags.StreamOpenBit */;
46
46
  expect(isStreamOpen(m.controlFlags)).toBe(true);
47
47
  expect(isStreamClose(m.controlFlags)).toBe(false);
@@ -1 +1 @@
1
- {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../transport/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,OAAO,EAEL,SAAS,EACT,sBAAsB,EAGtB,iBAAiB,EAGlB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAErE;;;;;;;;;;GAUG;AACH,8BAAsB,UAAU;IAC9B,WAAW,EAAE,iBAAiB,CAAC;IAC/B,SAAS,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;gBAG/B,SAAS,EAAE,SAAS,CAAC,UAAU,CAAC,EAChC,WAAW,EAAE,iBAAiB;IAMhC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO;IACvC,QAAQ,CAAC,KAAK,IAAI,IAAI;CACvB;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,8BAAsB,SAAS,CAAC,QAAQ,SAAS,UAAU;IACzD;;;OAGG;IACH,KAAK,EAAE,eAAe,CAAC;IAEvB;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC;IAEb;;OAEG;IACH,QAAQ,EAAE,iBAAiB,CAAC;IAE5B;;;OAGG;IACH,SAAS,EAAE,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAEpD;;OAEG;IACH,UAAU,EAAE,GAAG,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;IAEnD;;OAEG;IACH,WAAW,EAAE,GAAG,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IAE9C;;OAEG;IACH,eAAe,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;IAE7C;;;;OAIG;gBACS,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,iBAAiB;IAUrD;;;OAGG;IACH,QAAQ,CAAC,8BAA8B,IAAI,IAAI;IAE/C;;;;;OAKG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAElE;;;OAGG;IACH,SAAS,CAAC,IAAI,EAAE,QAAQ;IA8BxB;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,QAAQ;IAU3B;;;OAGG;IACH,SAAS,CAAC,GAAG,EAAE,UAAU;IAIzB;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,GAAG,sBAAsB,GAAG,IAAI;IAmBlE;;;;OAIG;IACH,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,sBAAsB,GAAG,IAAI;IA8BtD;;;;OAIG;IACH,gBAAgB,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EAC9D,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,CAAC,GACT,IAAI;IAIP;;;;OAIG;IACH,mBAAmB,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EACjE,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,CAAC,GACT,IAAI;IAIP;;;;;OAKG;IACH,IAAI,CAAC,GAAG,EAAE,sBAAsB,GAAG,SAAS;IA4C5C;;;;OAIG;IACG,KAAK;IAUX;;;;OAIG;IACG,OAAO;CASd"}
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../transport/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,OAAO,EAEL,SAAS,EACT,sBAAsB,EAGtB,iBAAiB,EAGlB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAErE;;;;;;;;;;GAUG;AACH,8BAAsB,UAAU;IAC9B,WAAW,EAAE,iBAAiB,CAAC;IAC/B,SAAS,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;gBAG/B,SAAS,EAAE,SAAS,CAAC,UAAU,CAAC,EAChC,WAAW,EAAE,iBAAiB;IAMhC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO;IACvC,QAAQ,CAAC,KAAK,IAAI,IAAI;CACvB;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,8BAAsB,SAAS,CAAC,QAAQ,SAAS,UAAU;IACzD;;;OAGG;IACH,KAAK,EAAE,eAAe,CAAC;IAEvB;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC;IAEb;;OAEG;IACH,QAAQ,EAAE,iBAAiB,CAAC;IAE5B;;;OAGG;IACH,SAAS,EAAE,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAEpD;;OAEG;IACH,UAAU,EAAE,GAAG,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;IAEnD;;OAEG;IACH,WAAW,EAAE,GAAG,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IAE9C;;OAEG;IACH,eAAe,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;IAE7C;;;;OAIG;gBACS,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,iBAAiB;IAUrD;;;OAGG;IACH,QAAQ,CAAC,8BAA8B,IAAI,IAAI;IAE/C;;;;;OAKG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAElE;;;OAGG;IACH,SAAS,CAAC,IAAI,EAAE,QAAQ;IA8BxB;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,QAAQ;IAU3B;;;OAGG;IACH,SAAS,CAAC,GAAG,EAAE,UAAU;IAIzB;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,GAAG,sBAAsB,GAAG,IAAI;IA8BlE;;;;OAIG;IACH,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,sBAAsB,GAAG,IAAI;IA8BtD;;;;OAIG;IACH,gBAAgB,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EAC9D,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,CAAC,GACT,IAAI;IAIP;;;;OAIG;IACH,mBAAmB,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EACjE,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,CAAC,GACT,IAAI;IAIP;;;;;OAKG;IACH,IAAI,CAAC,GAAG,EAAE,sBAAsB,GAAG,SAAS;IA4C5C;;;;OAIG;IACG,KAAK;IAUX;;;;OAIG;IACG,OAAO;CASd"}
@@ -155,10 +155,17 @@ export class Transport {
155
155
  return null;
156
156
  }
157
157
  if (Value.Check(OpaqueTransportMessageSchema, parsedMsg)) {
158
- return parsedMsg;
158
+ // JSON can't express the difference between `undefined` and `null`, so we need to patch that.
159
+ return {
160
+ ...parsedMsg,
161
+ serviceName: parsedMsg.serviceName === null ? undefined : parsedMsg.serviceName,
162
+ procedureName: parsedMsg.procedureName === null
163
+ ? undefined
164
+ : parsedMsg.procedureName,
165
+ };
159
166
  }
160
167
  else {
161
- log?.warn(`${this.clientId} -- received invalid msg: ${JSON.stringify(msg)}`);
168
+ log?.warn(`${this.clientId} -- received invalid msg: ${JSON.stringify(parsedMsg)}`);
162
169
  return null;
163
170
  }
164
171
  }
@@ -1 +1 @@
1
- {"version":3,"file":"testHelpers.d.ts","sourceRoot":"","sources":["../../util/testHelpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"testHelpers.d.ts","sourceRoot":"","sources":["../../util/testHelpers.ts"],"names":[],"mappings":"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"}
@@ -116,6 +116,7 @@ export function asClientStream(state, proc, extendedContext) {
116
116
  for await (const transportRes of transportOutput) {
117
117
  rawOutput.push(transportRes.payload);
118
118
  }
119
+ rawOutput.end();
119
120
  })();
120
121
  // handle
121
122
  (async () => {
@@ -168,6 +169,7 @@ export function asClientStreamWithInitialization(state, proc, init, extendedCont
168
169
  for await (const transportRes of transportOutput) {
169
170
  rawOutput.push(transportRes.payload);
170
171
  }
172
+ rawOutput.end();
171
173
  })();
172
174
  // handle
173
175
  (async () => {
@@ -209,6 +211,7 @@ export function asClientSubscription(state, proc, extendedContext) {
209
211
  for await (const transportRes of transportOutput) {
210
212
  rawOutput.push(transportRes.payload);
211
213
  }
214
+ rawOutput.end();
212
215
  })();
213
216
  return async (msg) => {
214
217
  proc
@@ -309,7 +312,7 @@ export function asClientUploadWithInitialization(state, proc, init, extendedCont
309
312
  * @returns The transport message.
310
313
  */
311
314
  export function payloadToTransportMessage(payload, streamId, from = 'client', to = 'SERVER') {
312
- return msg(from, to, 'service', 'procedure', streamId ?? 'stream', payload);
315
+ return msg(from, to, streamId ?? 'stream', payload, 'service', 'procedure');
313
316
  }
314
317
  /**
315
318
  * Creates a dummy opaque transport message for testing purposes.
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@replit/river",
3
3
  "sideEffects": false,
4
4
  "description": "It's like tRPC but... with JSON Schema Support, duplex streaming and support for service multiplexing. Transport agnostic!",
5
- "version": "0.9.0",
5
+ "version": "0.9.2",
6
6
  "type": "module",
7
7
  "exports": {
8
8
  ".": "./dist/router/index.js",