@replit/river 0.23.15 → 0.23.18
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.
- package/README.md +4 -4
- package/dist/{chunk-RQQZUQGE.js → chunk-7MJYOL32.js} +5 -6
- package/dist/{chunk-RQQZUQGE.js.map → chunk-7MJYOL32.js.map} +1 -1
- package/dist/{chunk-XYEOXPZQ.js → chunk-AVL32IMG.js} +6 -4
- package/dist/{chunk-XYEOXPZQ.js.map → chunk-AVL32IMG.js.map} +1 -1
- package/dist/{chunk-IJTGEBLG.js → chunk-DPKOJQWF.js} +5 -5
- package/dist/chunk-DPKOJQWF.js.map +1 -0
- package/dist/{chunk-AEY7BBOZ.js → chunk-EV5HW4IC.js} +5 -468
- package/dist/chunk-EV5HW4IC.js.map +1 -0
- package/dist/{chunk-MD4S7GO2.js → chunk-J6N6H2WU.js} +4 -4
- package/dist/chunk-J6N6H2WU.js.map +1 -0
- package/dist/{chunk-5HK7ZQYH.js → chunk-MW5JXLHY.js} +15 -2
- package/dist/chunk-MW5JXLHY.js.map +1 -0
- package/dist/{chunk-OXVWMLID.js → chunk-R2HAS3GM.js} +2 -2
- package/dist/{chunk-OXVWMLID.js.map → chunk-R2HAS3GM.js.map} +1 -1
- package/dist/{chunk-JMVKSGND.js → chunk-RJOWZIWB.js} +5 -5
- package/dist/chunk-RJOWZIWB.js.map +1 -0
- package/dist/{client-e13979ac.d.ts → client-5776a6bb.d.ts} +1 -1
- package/dist/{connection-e57e98ea.d.ts → connection-bd35d442.d.ts} +1 -1
- package/dist/{connection-5d0978ce.d.ts → connection-df85db7e.d.ts} +1 -1
- package/dist/{handshake-5665ffd3.d.ts → handshake-a947c234.d.ts} +9 -0
- package/dist/router/index.cjs +4 -468
- package/dist/router/index.cjs.map +1 -1
- package/dist/router/index.d.cts +8 -47
- package/dist/router/index.d.ts +8 -47
- package/dist/router/index.js +2 -4
- package/dist/{server-1cfc88d1.d.ts → server-53cd5b7e.d.ts} +1 -1
- package/dist/{services-86c4d10d.d.ts → services-38b3f758.d.ts} +6 -6
- package/dist/transport/impls/uds/client.cjs +20 -5
- package/dist/transport/impls/uds/client.cjs.map +1 -1
- package/dist/transport/impls/uds/client.d.cts +3 -3
- package/dist/transport/impls/uds/client.d.ts +3 -3
- package/dist/transport/impls/uds/client.js +5 -5
- package/dist/transport/impls/uds/server.cjs +20 -5
- package/dist/transport/impls/uds/server.cjs.map +1 -1
- package/dist/transport/impls/uds/server.d.cts +3 -3
- package/dist/transport/impls/uds/server.d.ts +3 -3
- package/dist/transport/impls/uds/server.js +5 -5
- package/dist/transport/impls/ws/client.cjs +19 -7
- package/dist/transport/impls/ws/client.cjs.map +1 -1
- package/dist/transport/impls/ws/client.d.cts +3 -3
- package/dist/transport/impls/ws/client.d.ts +3 -3
- package/dist/transport/impls/ws/client.js +5 -5
- package/dist/transport/impls/ws/server.cjs +19 -7
- package/dist/transport/impls/ws/server.cjs.map +1 -1
- package/dist/transport/impls/ws/server.d.cts +3 -3
- package/dist/transport/impls/ws/server.d.ts +3 -3
- package/dist/transport/impls/ws/server.js +5 -5
- package/dist/transport/index.cjs +17 -4
- package/dist/transport/index.cjs.map +1 -1
- package/dist/transport/index.d.cts +3 -3
- package/dist/transport/index.d.ts +3 -3
- package/dist/transport/index.js +5 -5
- package/dist/util/testHelpers.cjs +14 -1
- package/dist/util/testHelpers.cjs.map +1 -1
- package/dist/util/testHelpers.d.cts +4 -4
- package/dist/util/testHelpers.d.ts +4 -4
- package/dist/util/testHelpers.js +3 -3
- package/package.json +14 -13
- package/dist/chunk-5HK7ZQYH.js.map +0 -1
- package/dist/chunk-AEY7BBOZ.js.map +0 -1
- package/dist/chunk-IJTGEBLG.js.map +0 -1
- package/dist/chunk-JMVKSGND.js.map +0 -1
- package/dist/chunk-MD4S7GO2.js.map +0 -1
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ProtocolError,
|
|
3
3
|
Transport
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-J6N6H2WU.js";
|
|
5
5
|
import {
|
|
6
6
|
defaultServerTransportOptions
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-MW5JXLHY.js";
|
|
8
8
|
import {
|
|
9
9
|
ControlMessageHandshakeRequestSchema,
|
|
10
10
|
PROTOCOL_VERSION,
|
|
11
11
|
SESSION_STATE_MISMATCH,
|
|
12
12
|
coerceErrorString,
|
|
13
13
|
handshakeResponseMessage
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-R2HAS3GM.js";
|
|
15
15
|
|
|
16
16
|
// transport/server.ts
|
|
17
17
|
import { SpanStatusCode } from "@opentelemetry/api";
|
|
@@ -69,7 +69,7 @@ var ServerTransport = class extends Transport {
|
|
|
69
69
|
});
|
|
70
70
|
conn.close();
|
|
71
71
|
}
|
|
72
|
-
}, this.options.
|
|
72
|
+
}, this.options.handshakeTimeoutMs);
|
|
73
73
|
const buffer = [];
|
|
74
74
|
let receivedHandshakeMessage = false;
|
|
75
75
|
const handshakeHandler = (data) => {
|
|
@@ -332,4 +332,4 @@ var ServerTransport = class extends Transport {
|
|
|
332
332
|
export {
|
|
333
333
|
ServerTransport
|
|
334
334
|
};
|
|
335
|
-
//# sourceMappingURL=chunk-
|
|
335
|
+
//# sourceMappingURL=chunk-RJOWZIWB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../transport/server.ts"],"sourcesContent":["import { SpanStatusCode } from '@opentelemetry/api';\nimport { ParsedMetadata } from '../router/context';\nimport { ServerHandshakeOptions } from '../router/handshake';\nimport {\n ControlMessageHandshakeRequestSchema,\n PROTOCOL_VERSION,\n SESSION_STATE_MISMATCH,\n TransportClientId,\n handshakeResponseMessage,\n} from './message';\nimport {\n ProvidedServerTransportOptions,\n ServerTransportOptions,\n defaultServerTransportOptions,\n} from './options';\nimport { Connection, Session } from './session';\nimport { Transport } from './transport';\nimport { coerceErrorString } from '../util/stringify';\nimport { Static } from '@sinclair/typebox';\nimport { Value } from '@sinclair/typebox/value';\nimport { ProtocolError } from './events';\n\nexport abstract class ServerTransport<\n ConnType extends Connection,\n> extends Transport<ConnType> {\n /**\n * The options for this transport.\n */\n protected options: ServerTransportOptions;\n\n /**\n * Optional handshake options for the server.\n */\n handshakeExtensions?: ServerHandshakeOptions;\n\n /**\n * A map of session handshake data for each session.\n */\n sessionHandshakeMetadata: WeakMap<Session<ConnType>, ParsedMetadata>;\n\n constructor(\n clientId: TransportClientId,\n providedOptions?: ProvidedServerTransportOptions,\n ) {\n super(clientId, providedOptions);\n this.options = {\n ...defaultServerTransportOptions,\n ...providedOptions,\n };\n this.sessionHandshakeMetadata = new WeakMap();\n this.log?.info(`initiated server transport`, {\n clientId: this.clientId,\n protocolVersion: PROTOCOL_VERSION,\n });\n }\n\n extendHandshake(options: ServerHandshakeOptions) {\n this.handshakeExtensions = options;\n }\n\n protected handleConnection(conn: ConnType) {\n if (this.getStatus() !== 'open') return;\n\n this.log?.info(`new incoming connection`, {\n ...conn.loggingMetadata,\n clientId: this.clientId,\n });\n\n let session: Session<ConnType> | undefined = undefined;\n const client = () => session?.to ?? 'unknown';\n\n // kill the conn after the grace period if we haven't received a handshake\n const handshakeTimeout = setTimeout(() => {\n if (!session) {\n this.log?.warn(\n `connection to ${client()} timed out waiting for handshake, closing`,\n {\n ...conn.loggingMetadata,\n clientId: this.clientId,\n connectedTo: client(),\n },\n );\n conn.telemetry?.span.setStatus({\n code: SpanStatusCode.ERROR,\n message: 'handshake timeout',\n });\n conn.close();\n }\n }, this.options.handshakeTimeoutMs);\n\n const buffer: Array<Uint8Array> = [];\n let receivedHandshakeMessage = false;\n\n const handshakeHandler = (data: Uint8Array) => {\n // if we've already received, just buffer the data\n if (receivedHandshakeMessage) {\n buffer.push(data);\n return;\n }\n\n receivedHandshakeMessage = true;\n clearTimeout(handshakeTimeout);\n\n void this.receiveHandshakeRequestMessage(data, conn).then(\n (maybeSession) => {\n if (!maybeSession) {\n conn.close();\n return;\n }\n\n session = maybeSession;\n\n // when we are done handshake sequence,\n // remove handshake listener and use the normal message listener\n const dataHandler = (data: Uint8Array) => {\n const parsed = this.parseMsg(data, conn);\n if (!parsed) {\n conn.close();\n return;\n }\n\n this.handleMsg(parsed, conn);\n };\n\n // process any data we missed\n for (const data of buffer) {\n dataHandler(data);\n }\n\n conn.removeDataListener(handshakeHandler);\n conn.addDataListener(dataHandler);\n buffer.length = 0;\n },\n );\n };\n\n conn.addDataListener(handshakeHandler);\n conn.addCloseListener(() => {\n if (!session) return;\n this.log?.info(`connection to ${client()} disconnected`, {\n ...conn.loggingMetadata,\n clientId: this.clientId,\n });\n this.onDisconnect(conn, session);\n });\n\n conn.addErrorListener((err) => {\n conn.telemetry?.span.setStatus({\n code: SpanStatusCode.ERROR,\n message: 'connection error',\n });\n if (!session) return;\n this.log?.warn(\n `connection to ${client()} got an error: ${coerceErrorString(err)}`,\n { ...conn.loggingMetadata, clientId: this.clientId },\n );\n });\n }\n\n private async validateHandshakeMetadata(\n conn: ConnType,\n session: Session<ConnType> | undefined,\n rawMetadata: Static<\n typeof ControlMessageHandshakeRequestSchema\n >['metadata'],\n from: TransportClientId,\n ): Promise<ParsedMetadata | false> {\n let parsedMetadata: ParsedMetadata = {};\n if (this.handshakeExtensions) {\n // check that the metadata that was sent is the correct shape\n if (!Value.Check(this.handshakeExtensions.schema, rawMetadata)) {\n conn.telemetry?.span.setStatus({\n code: SpanStatusCode.ERROR,\n message: 'malformed handshake meta',\n });\n const reason = 'received malformed handshake metadata';\n const responseMsg = handshakeResponseMessage({\n from: this.clientId,\n to: from,\n status: {\n ok: false,\n reason,\n },\n });\n conn.send(this.codec.toBuffer(responseMsg));\n this.log?.warn(`received malformed handshake metadata from ${from}`, {\n ...conn.loggingMetadata,\n clientId: this.clientId,\n validationErrors: [\n ...Value.Errors(this.handshakeExtensions.schema, rawMetadata),\n ],\n });\n this.protocolError(ProtocolError.HandshakeFailed, reason);\n return false;\n }\n\n const previousParsedMetadata = session\n ? this.sessionHandshakeMetadata.get(session)\n : undefined;\n\n parsedMetadata = await this.handshakeExtensions.validate(\n rawMetadata,\n previousParsedMetadata,\n );\n\n // handler rejected the connection\n if (parsedMetadata === false) {\n const reason = 'rejected by handshake handler';\n conn.telemetry?.span.setStatus({\n code: SpanStatusCode.ERROR,\n message: reason,\n });\n const responseMsg = handshakeResponseMessage({\n from: this.clientId,\n to: from,\n status: {\n ok: false,\n reason,\n },\n });\n conn.send(this.codec.toBuffer(responseMsg));\n this.log?.warn(`rejected handshake from ${from}`, {\n ...conn.loggingMetadata,\n clientId: this.clientId,\n });\n this.protocolError(ProtocolError.HandshakeFailed, reason);\n return false;\n }\n }\n\n return parsedMetadata;\n }\n\n async receiveHandshakeRequestMessage(\n data: Uint8Array,\n conn: ConnType,\n ): Promise<Session<ConnType> | false> {\n const parsed = this.parseMsg(data, conn);\n if (!parsed) {\n conn.telemetry?.span.setStatus({\n code: SpanStatusCode.ERROR,\n message: 'non-transport message',\n });\n this.protocolError(\n ProtocolError.HandshakeFailed,\n 'received non-transport message',\n );\n return false;\n }\n\n if (!Value.Check(ControlMessageHandshakeRequestSchema, parsed.payload)) {\n conn.telemetry?.span.setStatus({\n code: SpanStatusCode.ERROR,\n message: 'invalid handshake request',\n });\n const reason = 'received invalid handshake msg';\n const responseMsg = handshakeResponseMessage({\n from: this.clientId,\n to: parsed.from,\n status: {\n ok: false,\n reason,\n },\n });\n conn.send(this.codec.toBuffer(responseMsg));\n this.log?.warn(reason, {\n ...conn.loggingMetadata,\n clientId: this.clientId,\n // safe to this.log metadata here as we remove the payload\n // before passing it to user-land\n transportMessage: parsed,\n validationErrors: [\n ...Value.Errors(ControlMessageHandshakeRequestSchema, parsed.payload),\n ],\n });\n this.protocolError(\n ProtocolError.HandshakeFailed,\n 'invalid handshake request',\n );\n return false;\n }\n\n // double check protocol version here\n const gotVersion = parsed.payload.protocolVersion;\n if (gotVersion !== PROTOCOL_VERSION) {\n conn.telemetry?.span.setStatus({\n code: SpanStatusCode.ERROR,\n message: 'incorrect protocol version',\n });\n\n const reason = `incorrect version (got: ${gotVersion} wanted ${PROTOCOL_VERSION})`;\n const responseMsg = handshakeResponseMessage({\n from: this.clientId,\n to: parsed.from,\n status: {\n ok: false,\n reason,\n },\n });\n conn.send(this.codec.toBuffer(responseMsg));\n this.log?.warn(\n `received handshake msg with incompatible protocol version (got: ${gotVersion}, expected: ${PROTOCOL_VERSION})`,\n { ...conn.loggingMetadata, clientId: this.clientId },\n );\n this.protocolError(ProtocolError.HandshakeFailed, reason);\n return false;\n }\n\n const oldSession = this.sessions.get(parsed.from);\n const parsedMetadata = await this.validateHandshakeMetadata(\n conn,\n oldSession,\n parsed.payload.metadata,\n parsed.from,\n );\n\n if (parsedMetadata === false) {\n return false;\n }\n\n let session: Session<ConnType>;\n let isTransparentReconnect: boolean;\n if (!parsed.payload.expectedSessionState) {\n // TODO: remove once we have upgraded all clients.\n ({ session, isTransparentReconnect } = this.getOrCreateSession({\n to: parsed.from,\n conn,\n sessionId: parsed.payload.sessionId,\n propagationCtx: parsed.tracing,\n }));\n } else if (parsed.payload.expectedSessionState.reconnect) {\n // this has to be an existing session. if it doesn't match what we expect, reject the\n // handshake\n const existingSession = this.getExistingSession({\n to: parsed.from,\n sessionId: parsed.payload.sessionId,\n nextExpectedSeq: parsed.payload.expectedSessionState.nextExpectedSeq,\n });\n if (existingSession === false) {\n conn.telemetry?.span.setStatus({\n code: SpanStatusCode.ERROR,\n message: SESSION_STATE_MISMATCH,\n });\n\n const reason = SESSION_STATE_MISMATCH;\n const responseMsg = handshakeResponseMessage({\n from: this.clientId,\n to: parsed.from,\n status: {\n ok: false,\n reason,\n },\n });\n conn.send(this.codec.toBuffer(responseMsg));\n this.log?.warn(\n `'received handshake msg with incompatible existing session state: ${parsed.payload.sessionId}`,\n { ...conn.loggingMetadata, clientId: this.clientId },\n );\n this.protocolError(ProtocolError.HandshakeFailed, reason);\n return false;\n }\n session = existingSession;\n isTransparentReconnect = false;\n } else {\n // this has to be a new session. if one already exists, it will be replaced silently\n const createdSession = this.createNewSession({\n to: parsed.from,\n conn,\n sessionId: parsed.payload.sessionId,\n propagationCtx: parsed.tracing,\n });\n session = createdSession;\n isTransparentReconnect = false;\n }\n\n this.sessionHandshakeMetadata.set(session, parsedMetadata);\n\n this.log?.debug(\n `handshake from ${parsed.from} ok, responding with handshake success`,\n conn.loggingMetadata,\n );\n const responseMsg = handshakeResponseMessage({\n from: this.clientId,\n to: parsed.from,\n status: {\n ok: true,\n sessionId: session.id,\n },\n });\n conn.send(this.codec.toBuffer(responseMsg));\n this.onConnect(conn, session, isTransparentReconnect);\n\n return session;\n }\n}\n"],"mappings":"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","names":["data","responseMsg"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as Connection, T as Transport, j as ClientTransportOptions, L as LeakyBucketRateLimit, k as ClientHandshakeOptions, b as ProvidedClientTransportOptions, S as Session } from './handshake-
|
|
1
|
+
import { C as Connection, T as Transport, j as ClientTransportOptions, L as LeakyBucketRateLimit, k as ClientHandshakeOptions, b as ProvidedClientTransportOptions, S as Session } from './handshake-a947c234.js';
|
|
2
2
|
import { c as TransportClientId } from './index-ea74cdbb.js';
|
|
3
3
|
|
|
4
4
|
declare abstract class ClientTransport<ConnType extends Connection> extends Transport<ConnType> {
|
|
@@ -62,6 +62,10 @@ interface SessionOptions {
|
|
|
62
62
|
* Duration to wait between connection disconnect and actual session disconnect
|
|
63
63
|
*/
|
|
64
64
|
sessionDisconnectGraceMs: number;
|
|
65
|
+
/**
|
|
66
|
+
* Duration to wait for a handshake to complete before considering the connection dead.
|
|
67
|
+
*/
|
|
68
|
+
handshakeTimeoutMs?: number;
|
|
65
69
|
/**
|
|
66
70
|
* The codec to use for encoding/decoding messages over the wire
|
|
67
71
|
*/
|
|
@@ -153,6 +157,11 @@ declare class Session<ConnType extends Connection> {
|
|
|
153
157
|
get connected(): boolean;
|
|
154
158
|
get nextExpectedAck(): number;
|
|
155
159
|
get nextExpectedSeq(): number;
|
|
160
|
+
/**
|
|
161
|
+
* Check that the peer's next expected seq number matches something that is in our send buffer
|
|
162
|
+
* _or_ matches our actual next seq.
|
|
163
|
+
*/
|
|
164
|
+
nextExpectedSeqInRange(nextExpectedSeq: number): boolean;
|
|
156
165
|
advanceAckForTesting(by: number): void;
|
|
157
166
|
constructMsg<Payload>(partialMsg: PartialTransportMessage<Payload>): TransportMessage<Payload>;
|
|
158
167
|
inspectSendBuffer(): ReadonlyArray<OpaqueTransportMessage>;
|
package/dist/router/index.cjs
CHANGED
|
@@ -31,7 +31,6 @@ __export(router_exports, {
|
|
|
31
31
|
createClientHandshakeOptions: () => createClientHandshakeOptions,
|
|
32
32
|
createServer: () => createServer,
|
|
33
33
|
createServerHandshakeOptions: () => createServerHandshakeOptions,
|
|
34
|
-
diffServerSchema: () => diffServerSchema,
|
|
35
34
|
serializeSchema: () => serializeSchema
|
|
36
35
|
});
|
|
37
36
|
module.exports = __toCommonJS(router_exports);
|
|
@@ -174,9 +173,9 @@ var ServiceSchema = class _ServiceSchema {
|
|
|
174
173
|
* You probably don't need this, usually the River server will handle this
|
|
175
174
|
* for you.
|
|
176
175
|
*/
|
|
177
|
-
instantiate() {
|
|
176
|
+
instantiate(extendedContext) {
|
|
178
177
|
return Object.freeze({
|
|
179
|
-
state: this.initializeState(),
|
|
178
|
+
state: this.initializeState(extendedContext),
|
|
180
179
|
procedures: this.procedures
|
|
181
180
|
});
|
|
182
181
|
}
|
|
@@ -238,468 +237,6 @@ var ServiceScaffold = class {
|
|
|
238
237
|
}
|
|
239
238
|
};
|
|
240
239
|
|
|
241
|
-
// router/diff.ts
|
|
242
|
-
function diffServerSchema(oldServer, newServer, options) {
|
|
243
|
-
const allServices = /* @__PURE__ */ new Set([
|
|
244
|
-
...Object.keys(oldServer.services),
|
|
245
|
-
...Object.keys(newServer.services)
|
|
246
|
-
]);
|
|
247
|
-
const breakages = {};
|
|
248
|
-
for (const serviceName of allServices) {
|
|
249
|
-
const oldService = oldServer.services[serviceName];
|
|
250
|
-
const newService = newServer.services[serviceName];
|
|
251
|
-
const breakage = diffService(oldService, newService, options);
|
|
252
|
-
if (breakage) {
|
|
253
|
-
breakages[serviceName] = breakage;
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
if (Object.keys(breakages).length) {
|
|
257
|
-
return { serviceBreakages: breakages };
|
|
258
|
-
}
|
|
259
|
-
return null;
|
|
260
|
-
}
|
|
261
|
-
function diffService(oldService, newService, options) {
|
|
262
|
-
if (!newService) {
|
|
263
|
-
return options?.allowServiceRemoval ? null : { reason: "removed" };
|
|
264
|
-
}
|
|
265
|
-
if (!oldService) {
|
|
266
|
-
return null;
|
|
267
|
-
}
|
|
268
|
-
const allProcedures = /* @__PURE__ */ new Set([
|
|
269
|
-
...Object.keys(oldService.procedures),
|
|
270
|
-
...Object.keys(newService.procedures)
|
|
271
|
-
]);
|
|
272
|
-
const breakages = {};
|
|
273
|
-
for (const procedureName of allProcedures) {
|
|
274
|
-
const aProcedure = oldService.procedures[procedureName];
|
|
275
|
-
const bProcedure = newService.procedures[procedureName];
|
|
276
|
-
const breakage = diffProcedure(aProcedure, bProcedure, options);
|
|
277
|
-
if (breakage) {
|
|
278
|
-
breakages[procedureName] = breakage;
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
if (Object.keys(breakages).length) {
|
|
282
|
-
return { reason: "modified", procedureBreakages: breakages };
|
|
283
|
-
}
|
|
284
|
-
return null;
|
|
285
|
-
}
|
|
286
|
-
function diffProcedure(oldProcedure, newProcedure, options) {
|
|
287
|
-
if (!newProcedure) {
|
|
288
|
-
return options?.allowProcedureRemoval ? null : { reason: "removed" };
|
|
289
|
-
}
|
|
290
|
-
if (!oldProcedure) {
|
|
291
|
-
return null;
|
|
292
|
-
}
|
|
293
|
-
if (oldProcedure.type !== newProcedure.type) {
|
|
294
|
-
return {
|
|
295
|
-
reason: "type-changed",
|
|
296
|
-
oldType: oldProcedure.type,
|
|
297
|
-
newType: newProcedure.type
|
|
298
|
-
};
|
|
299
|
-
}
|
|
300
|
-
const inputBreakage = diffProcedureField(
|
|
301
|
-
oldProcedure.input,
|
|
302
|
-
newProcedure.input,
|
|
303
|
-
"client"
|
|
304
|
-
);
|
|
305
|
-
const initBreakage = diffProcedureField(
|
|
306
|
-
oldProcedure.init,
|
|
307
|
-
newProcedure.init,
|
|
308
|
-
"client"
|
|
309
|
-
);
|
|
310
|
-
const outputBreakage = diffProcedureField(
|
|
311
|
-
oldProcedure.output,
|
|
312
|
-
newProcedure.output,
|
|
313
|
-
"server"
|
|
314
|
-
);
|
|
315
|
-
if (inputBreakage ?? initBreakage ?? outputBreakage) {
|
|
316
|
-
const result = {
|
|
317
|
-
reason: "modified"
|
|
318
|
-
};
|
|
319
|
-
if (inputBreakage) {
|
|
320
|
-
result.input = inputBreakage;
|
|
321
|
-
}
|
|
322
|
-
if (initBreakage) {
|
|
323
|
-
result.init = initBreakage;
|
|
324
|
-
}
|
|
325
|
-
if (outputBreakage) {
|
|
326
|
-
result.output = outputBreakage;
|
|
327
|
-
}
|
|
328
|
-
return result;
|
|
329
|
-
}
|
|
330
|
-
return null;
|
|
331
|
-
}
|
|
332
|
-
function diffProcedureField(oldSchema, newSchema, origin) {
|
|
333
|
-
if (!oldSchema && !newSchema) {
|
|
334
|
-
return null;
|
|
335
|
-
}
|
|
336
|
-
const diffBreakage = diffRequired(oldSchema, newSchema, origin, false, false);
|
|
337
|
-
if (diffBreakage) {
|
|
338
|
-
return diffBreakage;
|
|
339
|
-
}
|
|
340
|
-
if (!oldSchema || !newSchema) {
|
|
341
|
-
throw new Error("Appease typescript, this should never happen");
|
|
342
|
-
}
|
|
343
|
-
return diffJSONSchema(oldSchema, newSchema, origin);
|
|
344
|
-
}
|
|
345
|
-
function diffRequired(oldSchema, newSchema, origin, oldRequired, newRequired) {
|
|
346
|
-
if (!newSchema && !oldSchema) {
|
|
347
|
-
throw new Error("Both old and new schema are undefined");
|
|
348
|
-
}
|
|
349
|
-
if (!newSchema) {
|
|
350
|
-
if (!oldRequired && origin == "server") {
|
|
351
|
-
return null;
|
|
352
|
-
}
|
|
353
|
-
return { reason: "removed-required" };
|
|
354
|
-
}
|
|
355
|
-
if (!oldSchema) {
|
|
356
|
-
if (newRequired && origin === "client") {
|
|
357
|
-
return { reason: "new-required" };
|
|
358
|
-
}
|
|
359
|
-
return null;
|
|
360
|
-
}
|
|
361
|
-
if (origin === "client" && !oldRequired && newRequired) {
|
|
362
|
-
return { reason: "new-required" };
|
|
363
|
-
}
|
|
364
|
-
if (origin === "server" && oldRequired && !newRequired) {
|
|
365
|
-
return { reason: "removed-required" };
|
|
366
|
-
}
|
|
367
|
-
return null;
|
|
368
|
-
}
|
|
369
|
-
function diffJSONSchema(oldSchema, newSchema, origin) {
|
|
370
|
-
if (oldSchema.type !== newSchema.type) {
|
|
371
|
-
return {
|
|
372
|
-
reason: "type-changed",
|
|
373
|
-
oldType: getReportingType(oldSchema),
|
|
374
|
-
newType: getReportingType(newSchema)
|
|
375
|
-
};
|
|
376
|
-
}
|
|
377
|
-
if (getReportingType(oldSchema) !== getReportingType(newSchema)) {
|
|
378
|
-
return {
|
|
379
|
-
reason: "type-changed",
|
|
380
|
-
oldType: getReportingType(oldSchema),
|
|
381
|
-
newType: getReportingType(newSchema)
|
|
382
|
-
};
|
|
383
|
-
}
|
|
384
|
-
if ("const" in oldSchema && "const" in newSchema && oldSchema.const !== newSchema.const) {
|
|
385
|
-
return {
|
|
386
|
-
reason: "type-changed",
|
|
387
|
-
oldType: `${getReportingType(oldSchema)}-const-${oldSchema.const}`,
|
|
388
|
-
newType: `${getReportingType(newSchema)}-const-${newSchema.const}`
|
|
389
|
-
};
|
|
390
|
-
}
|
|
391
|
-
if ("const" in oldSchema && !("const" in newSchema) && origin === "server") {
|
|
392
|
-
return {
|
|
393
|
-
reason: "type-changed",
|
|
394
|
-
oldType: `${getReportingType(oldSchema)}-const-${oldSchema.const}`,
|
|
395
|
-
newType: getReportingType(newSchema)
|
|
396
|
-
};
|
|
397
|
-
}
|
|
398
|
-
if ("const" in newSchema && !("const" in oldSchema) && origin === "client") {
|
|
399
|
-
return {
|
|
400
|
-
reason: "type-changed",
|
|
401
|
-
oldType: getReportingType(oldSchema),
|
|
402
|
-
newType: `${getReportingType(newSchema)}-const-${newSchema.const}`
|
|
403
|
-
};
|
|
404
|
-
}
|
|
405
|
-
const breakages = {};
|
|
406
|
-
if ("$ref" in newSchema) {
|
|
407
|
-
if (newSchema.$ref !== oldSchema.$ref) {
|
|
408
|
-
return {
|
|
409
|
-
reason: "type-changed",
|
|
410
|
-
oldType: getReportingType(oldSchema),
|
|
411
|
-
newType: getReportingType(newSchema)
|
|
412
|
-
};
|
|
413
|
-
}
|
|
414
|
-
} else if ("not" in newSchema) {
|
|
415
|
-
const notBreakage = diffJSONSchema(
|
|
416
|
-
oldSchema.not,
|
|
417
|
-
newSchema.not,
|
|
418
|
-
origin
|
|
419
|
-
);
|
|
420
|
-
if (notBreakage) {
|
|
421
|
-
breakages.not = notBreakage;
|
|
422
|
-
}
|
|
423
|
-
} else if ("anyOf" in newSchema) {
|
|
424
|
-
const oldAnyOfStringified = oldSchema.anyOf.map((el) => JSON.stringify(el)).sort();
|
|
425
|
-
const newAnyOfStringified = newSchema.anyOf.map((el) => JSON.stringify(el)).sort();
|
|
426
|
-
const anyOfBreakages = {};
|
|
427
|
-
for (let i = 0; i < oldAnyOfStringified.length; i++) {
|
|
428
|
-
if (newAnyOfStringified.includes(oldAnyOfStringified[i])) {
|
|
429
|
-
continue;
|
|
430
|
-
}
|
|
431
|
-
if (!newAnyOfStringified[i]) {
|
|
432
|
-
if (origin === "server") {
|
|
433
|
-
continue;
|
|
434
|
-
}
|
|
435
|
-
anyOfBreakages[`old-${i}`] = { reason: "removed-required" };
|
|
436
|
-
} else {
|
|
437
|
-
const breakage = diffJSONSchema(
|
|
438
|
-
JSON.parse(oldAnyOfStringified[i]),
|
|
439
|
-
JSON.parse(newAnyOfStringified[i]),
|
|
440
|
-
origin
|
|
441
|
-
);
|
|
442
|
-
if (breakage) {
|
|
443
|
-
anyOfBreakages[`old-${i}`] = breakage;
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
for (let i = 0; i < newAnyOfStringified.length; i++) {
|
|
448
|
-
if (oldAnyOfStringified.includes(newAnyOfStringified[i])) {
|
|
449
|
-
continue;
|
|
450
|
-
}
|
|
451
|
-
if (!oldAnyOfStringified[i]) {
|
|
452
|
-
if (origin === "client") {
|
|
453
|
-
continue;
|
|
454
|
-
}
|
|
455
|
-
anyOfBreakages[`new-${i}`] = { reason: "new-required" };
|
|
456
|
-
} else {
|
|
457
|
-
const breakage = diffJSONSchema(
|
|
458
|
-
JSON.parse(oldAnyOfStringified[i]),
|
|
459
|
-
JSON.parse(newAnyOfStringified[i]),
|
|
460
|
-
origin
|
|
461
|
-
);
|
|
462
|
-
if (breakage) {
|
|
463
|
-
anyOfBreakages[`new-${i}`] = breakage;
|
|
464
|
-
}
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
if (Object.keys(anyOfBreakages).length > 0) {
|
|
468
|
-
breakages.anyOf = {
|
|
469
|
-
reason: "field-breakage",
|
|
470
|
-
fieldBreakages: anyOfBreakages
|
|
471
|
-
};
|
|
472
|
-
}
|
|
473
|
-
} else if ("oneOf" in newSchema) {
|
|
474
|
-
throw new Error("oneOf is not supported, typebox does not emit it");
|
|
475
|
-
} else if ("allOf" in newSchema) {
|
|
476
|
-
if (newSchema.allOf.length !== oldSchema.allOf.length) {
|
|
477
|
-
breakages.allOf = {
|
|
478
|
-
reason: "type-changed",
|
|
479
|
-
oldType: `${oldSchema.allOf}`,
|
|
480
|
-
newType: `${newSchema.allOf}`
|
|
481
|
-
};
|
|
482
|
-
} else {
|
|
483
|
-
for (let i = 0; i < newSchema.allOf.length; i++) {
|
|
484
|
-
const breakage = diffJSONSchema(
|
|
485
|
-
oldSchema.allOf[i],
|
|
486
|
-
newSchema.allOf[i],
|
|
487
|
-
origin
|
|
488
|
-
);
|
|
489
|
-
if (breakage) {
|
|
490
|
-
breakages.allOf = breakage;
|
|
491
|
-
break;
|
|
492
|
-
}
|
|
493
|
-
}
|
|
494
|
-
}
|
|
495
|
-
} else if (newSchema.type === "array") {
|
|
496
|
-
const itemsBreakages = diffJSONSchema(
|
|
497
|
-
oldSchema.items,
|
|
498
|
-
newSchema.items,
|
|
499
|
-
origin
|
|
500
|
-
);
|
|
501
|
-
if (itemsBreakages) {
|
|
502
|
-
breakages.items = itemsBreakages;
|
|
503
|
-
}
|
|
504
|
-
if (oldSchema.minItems < newSchema.minItems) {
|
|
505
|
-
if (origin === "client") {
|
|
506
|
-
breakages.minItems = {
|
|
507
|
-
reason: "type-changed",
|
|
508
|
-
oldType: `${oldSchema.minItems}`,
|
|
509
|
-
newType: `${newSchema.minItems}`
|
|
510
|
-
};
|
|
511
|
-
}
|
|
512
|
-
} else if (oldSchema.minItems > newSchema.minItems) {
|
|
513
|
-
if (origin === "server") {
|
|
514
|
-
breakages.minItems = {
|
|
515
|
-
reason: "type-changed",
|
|
516
|
-
oldType: `${oldSchema.minItems}`,
|
|
517
|
-
newType: `${newSchema.minItems}`
|
|
518
|
-
};
|
|
519
|
-
}
|
|
520
|
-
}
|
|
521
|
-
if (oldSchema.maxItems < newSchema.maxItems) {
|
|
522
|
-
if (origin === "server") {
|
|
523
|
-
breakages.maxItems = {
|
|
524
|
-
reason: "type-changed",
|
|
525
|
-
oldType: `${oldSchema.maxItems}`,
|
|
526
|
-
newType: `${newSchema.maxItems}`
|
|
527
|
-
};
|
|
528
|
-
}
|
|
529
|
-
} else if (oldSchema.maxItems > newSchema.maxItems) {
|
|
530
|
-
if (origin === "client") {
|
|
531
|
-
breakages.maxItems = {
|
|
532
|
-
reason: "type-changed",
|
|
533
|
-
oldType: `${oldSchema.maxItems}`,
|
|
534
|
-
newType: `${newSchema.maxItems}`
|
|
535
|
-
};
|
|
536
|
-
}
|
|
537
|
-
}
|
|
538
|
-
if (!oldSchema.uniqueItems && newSchema.uniqueItems && origin === "client") {
|
|
539
|
-
breakages.uniqueItems = {
|
|
540
|
-
reason: "type-changed",
|
|
541
|
-
oldType: `${!!oldSchema.uniqueItems}`,
|
|
542
|
-
newType: `${!!newSchema.uniqueItems}`
|
|
543
|
-
};
|
|
544
|
-
}
|
|
545
|
-
if ("contains" in newSchema !== "contains" in oldSchema) {
|
|
546
|
-
if ("contains" in newSchema && !("contains" in oldSchema) && origin === "client") {
|
|
547
|
-
breakages.contains = {
|
|
548
|
-
reason: "type-changed",
|
|
549
|
-
oldType: "no-contains",
|
|
550
|
-
newType: "contains"
|
|
551
|
-
};
|
|
552
|
-
}
|
|
553
|
-
} else if ("contains" in newSchema) {
|
|
554
|
-
const containsBreakage = diffJSONSchema(
|
|
555
|
-
oldSchema.contains,
|
|
556
|
-
newSchema.contains,
|
|
557
|
-
origin
|
|
558
|
-
);
|
|
559
|
-
if (containsBreakage) {
|
|
560
|
-
breakages.contains = containsBreakage;
|
|
561
|
-
}
|
|
562
|
-
}
|
|
563
|
-
if (oldSchema.minContains < newSchema.minContains) {
|
|
564
|
-
if (origin === "client") {
|
|
565
|
-
breakages.minContains = {
|
|
566
|
-
reason: "type-changed",
|
|
567
|
-
oldType: `${oldSchema.minContains}`,
|
|
568
|
-
newType: `${newSchema.minContains}`
|
|
569
|
-
};
|
|
570
|
-
}
|
|
571
|
-
} else if (oldSchema.minContains > newSchema.minContains) {
|
|
572
|
-
if (origin === "server") {
|
|
573
|
-
breakages.minContains = {
|
|
574
|
-
reason: "type-changed",
|
|
575
|
-
oldType: `${oldSchema.minContains}`,
|
|
576
|
-
newType: `${newSchema.minContains}`
|
|
577
|
-
};
|
|
578
|
-
}
|
|
579
|
-
}
|
|
580
|
-
if (oldSchema.maxContains < newSchema.maxContains) {
|
|
581
|
-
if (origin === "server") {
|
|
582
|
-
breakages.maxContains = {
|
|
583
|
-
reason: "type-changed",
|
|
584
|
-
oldType: `${oldSchema.maxContains}`,
|
|
585
|
-
newType: `${newSchema.maxContains}`
|
|
586
|
-
};
|
|
587
|
-
}
|
|
588
|
-
} else if (oldSchema.maxContains > newSchema.maxContains) {
|
|
589
|
-
if (origin === "client") {
|
|
590
|
-
breakages.maxContains = {
|
|
591
|
-
reason: "type-changed",
|
|
592
|
-
oldType: `${oldSchema.maxContains}`,
|
|
593
|
-
newType: `${newSchema.maxContains}`
|
|
594
|
-
};
|
|
595
|
-
}
|
|
596
|
-
}
|
|
597
|
-
} else if (newSchema.type === "object") {
|
|
598
|
-
if ("properties" in newSchema !== "properties" in oldSchema) {
|
|
599
|
-
return {
|
|
600
|
-
reason: "type-changed",
|
|
601
|
-
oldType: "properties" in oldSchema ? "probably-object" : "probably-record",
|
|
602
|
-
newType: "properties" in newSchema ? "probably-object" : "probably-record"
|
|
603
|
-
};
|
|
604
|
-
}
|
|
605
|
-
if ("properties" in newSchema) {
|
|
606
|
-
const propertiesBreakages = diffObjectProperties(
|
|
607
|
-
oldSchema.properties,
|
|
608
|
-
newSchema.properties,
|
|
609
|
-
origin,
|
|
610
|
-
oldSchema.required,
|
|
611
|
-
newSchema.required
|
|
612
|
-
);
|
|
613
|
-
if (Object.keys(propertiesBreakages).length) {
|
|
614
|
-
breakages.properties = {
|
|
615
|
-
reason: "field-breakage",
|
|
616
|
-
fieldBreakages: propertiesBreakages
|
|
617
|
-
};
|
|
618
|
-
}
|
|
619
|
-
}
|
|
620
|
-
if ("patternProperties" in newSchema) {
|
|
621
|
-
const patternPropertiesBreakages = diffObjectProperties(
|
|
622
|
-
oldSchema.patternProperties,
|
|
623
|
-
newSchema.patternProperties,
|
|
624
|
-
origin,
|
|
625
|
-
oldSchema.required,
|
|
626
|
-
newSchema.required
|
|
627
|
-
);
|
|
628
|
-
if (Object.keys(patternPropertiesBreakages).length) {
|
|
629
|
-
breakages.patternProperties = {
|
|
630
|
-
reason: "field-breakage",
|
|
631
|
-
fieldBreakages: patternPropertiesBreakages
|
|
632
|
-
};
|
|
633
|
-
}
|
|
634
|
-
}
|
|
635
|
-
if ("additionalProperties" in newSchema || "additionalProperties" in oldSchema) {
|
|
636
|
-
throw new Error("additionalProperties is not supported");
|
|
637
|
-
}
|
|
638
|
-
if ("minProperties" in newSchema || "minProperties" in oldSchema) {
|
|
639
|
-
throw new Error("minProperties is not supported");
|
|
640
|
-
}
|
|
641
|
-
if ("maxProperties" in newSchema || "maxProperties" in oldSchema) {
|
|
642
|
-
throw new Error("maxProperties is not supported");
|
|
643
|
-
}
|
|
644
|
-
}
|
|
645
|
-
if (Object.keys(breakages).length) {
|
|
646
|
-
return {
|
|
647
|
-
reason: "field-breakage",
|
|
648
|
-
fieldBreakages: breakages
|
|
649
|
-
};
|
|
650
|
-
}
|
|
651
|
-
return null;
|
|
652
|
-
}
|
|
653
|
-
function diffObjectProperties(oldProperties, newProperties, origin, oldRequiredProperties = [], newRequiredProperties = []) {
|
|
654
|
-
const allProperties = /* @__PURE__ */ new Set([
|
|
655
|
-
...Object.keys(oldProperties),
|
|
656
|
-
...Object.keys(newProperties)
|
|
657
|
-
]);
|
|
658
|
-
const breakages = {};
|
|
659
|
-
for (const propertyName of allProperties) {
|
|
660
|
-
const requiredBreakage = diffRequired(
|
|
661
|
-
oldProperties[propertyName],
|
|
662
|
-
newProperties[propertyName],
|
|
663
|
-
origin,
|
|
664
|
-
oldRequiredProperties.includes(propertyName),
|
|
665
|
-
newRequiredProperties.includes(propertyName)
|
|
666
|
-
);
|
|
667
|
-
if (requiredBreakage) {
|
|
668
|
-
breakages[propertyName] = requiredBreakage;
|
|
669
|
-
} else if (oldProperties[propertyName] && newProperties[propertyName]) {
|
|
670
|
-
const propertyBreakage = diffJSONSchema(
|
|
671
|
-
oldProperties[propertyName],
|
|
672
|
-
newProperties[propertyName],
|
|
673
|
-
origin
|
|
674
|
-
);
|
|
675
|
-
if (propertyBreakage) {
|
|
676
|
-
breakages[propertyName] = propertyBreakage;
|
|
677
|
-
}
|
|
678
|
-
}
|
|
679
|
-
}
|
|
680
|
-
return breakages;
|
|
681
|
-
}
|
|
682
|
-
function getReportingType(schema) {
|
|
683
|
-
if ("not" in schema) {
|
|
684
|
-
return "not";
|
|
685
|
-
}
|
|
686
|
-
if ("anyOf" in schema) {
|
|
687
|
-
return "anyOf";
|
|
688
|
-
}
|
|
689
|
-
if ("allOf" in schema) {
|
|
690
|
-
return "allOf";
|
|
691
|
-
}
|
|
692
|
-
if ("$ref" in schema) {
|
|
693
|
-
return "$ref";
|
|
694
|
-
}
|
|
695
|
-
if (schema.type && typeof schema.type === "string") {
|
|
696
|
-
return schema.type;
|
|
697
|
-
}
|
|
698
|
-
throw new Error(
|
|
699
|
-
"Subschema not supported, probably a conditional subschema. Check logs."
|
|
700
|
-
);
|
|
701
|
-
}
|
|
702
|
-
|
|
703
240
|
// router/procedures.ts
|
|
704
241
|
var import_typebox2 = require("@sinclair/typebox");
|
|
705
242
|
function rpc({
|
|
@@ -1187,7 +724,7 @@ function Err(error) {
|
|
|
1187
724
|
var import_api = require("@opentelemetry/api");
|
|
1188
725
|
|
|
1189
726
|
// package.json
|
|
1190
|
-
var version = "0.23.
|
|
727
|
+
var version = "0.23.18";
|
|
1191
728
|
|
|
1192
729
|
// tracing/index.ts
|
|
1193
730
|
function getPropagationContext(ctx) {
|
|
@@ -1595,7 +1132,7 @@ var RiverServer = class {
|
|
|
1595
1132
|
this.services = instances;
|
|
1596
1133
|
this.contextMap = /* @__PURE__ */ new Map();
|
|
1597
1134
|
for (const [name, service] of Object.entries(services)) {
|
|
1598
|
-
const instance = service.instantiate();
|
|
1135
|
+
const instance = service.instantiate(extendedContext ?? {});
|
|
1599
1136
|
instances[name] = instance;
|
|
1600
1137
|
this.contextMap.set(instance, {
|
|
1601
1138
|
...extendedContext,
|
|
@@ -2045,7 +1582,6 @@ function createServerHandshakeOptions(schema, validate) {
|
|
|
2045
1582
|
createClientHandshakeOptions,
|
|
2046
1583
|
createServer,
|
|
2047
1584
|
createServerHandshakeOptions,
|
|
2048
|
-
diffServerSchema,
|
|
2049
1585
|
serializeSchema
|
|
2050
1586
|
});
|
|
2051
1587
|
//# sourceMappingURL=index.cjs.map
|