@replit/river 0.23.13 → 0.23.14
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/dist/{chunk-SX6HI63Q.js → chunk-BEALFLCB.js} +2 -2
- package/dist/{chunk-S4DUN7KK.js → chunk-D2DHRRBN.js} +41 -20
- package/dist/chunk-D2DHRRBN.js.map +1 -0
- package/dist/{chunk-ES4XO2XD.js → chunk-GCCRVSMR.js} +33 -4
- package/dist/chunk-GCCRVSMR.js.map +1 -0
- package/dist/{chunk-KFTGQ3QC.js → chunk-GN4YEXT7.js} +2 -2
- package/dist/{chunk-2FNLANTJ.js → chunk-O2AVDJCQ.js} +10 -2
- package/dist/{chunk-2FNLANTJ.js.map → chunk-O2AVDJCQ.js.map} +1 -1
- package/dist/{chunk-XM656KMN.js → chunk-OTVTKAN6.js} +46 -3
- package/dist/chunk-OTVTKAN6.js.map +1 -0
- package/dist/{chunk-ZUKDZY54.js → chunk-WUL63FR6.js} +89 -25
- package/dist/chunk-WUL63FR6.js.map +1 -0
- package/dist/{chunk-4QZOW4DH.js → chunk-YCLZWES2.js} +2 -2
- package/dist/{client-dd5c9dd0.d.ts → client-e13979ac.d.ts} +1 -1
- package/dist/{connection-39816c00.d.ts → connection-5d0978ce.d.ts} +1 -1
- package/dist/{connection-40318f22.d.ts → connection-e57e98ea.d.ts} +1 -1
- package/dist/{handshake-e428d1c8.d.ts → handshake-5665ffd3.d.ts} +13 -0
- package/dist/router/index.cjs +16 -1
- package/dist/router/index.cjs.map +1 -1
- package/dist/router/index.d.cts +7 -7
- package/dist/router/index.d.ts +7 -7
- package/dist/router/index.js +2 -2
- package/dist/{server-ebf80863.d.ts → server-1cfc88d1.d.ts} +1 -1
- package/dist/{services-f406b3aa.d.ts → services-86c4d10d.d.ts} +2 -2
- package/dist/transport/impls/uds/client.cjs +113 -18
- 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 +157 -23
- 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 +113 -18
- 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 +157 -23
- 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 +202 -40
- 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 +9 -1
- package/dist/util/testHelpers.cjs.map +1 -1
- package/dist/util/testHelpers.d.cts +3 -3
- package/dist/util/testHelpers.d.ts +3 -3
- package/dist/util/testHelpers.js +3 -3
- package/package.json +13 -14
- package/dist/chunk-ES4XO2XD.js.map +0 -1
- package/dist/chunk-S4DUN7KK.js.map +0 -1
- package/dist/chunk-XM656KMN.js.map +0 -1
- package/dist/chunk-ZUKDZY54.js.map +0 -1
- /package/dist/{chunk-SX6HI63Q.js.map → chunk-BEALFLCB.js.map} +0 -0
- /package/dist/{chunk-KFTGQ3QC.js.map → chunk-GN4YEXT7.js.map} +0 -0
- /package/dist/{chunk-4QZOW4DH.js.map → chunk-YCLZWES2.js.map} +0 -0
|
@@ -59,6 +59,21 @@ var ControlMessageHandshakeRequestSchema = import_typebox.Type.Object({
|
|
|
59
59
|
type: import_typebox.Type.Literal("HANDSHAKE_REQ"),
|
|
60
60
|
protocolVersion: import_typebox.Type.String(),
|
|
61
61
|
sessionId: import_typebox.Type.String(),
|
|
62
|
+
/**
|
|
63
|
+
* Specifies what the server's expected session state (from the pov of the client). This can be
|
|
64
|
+
* used by the server to know whether this is a new or a reestablished connection, and whether it
|
|
65
|
+
* is compatible with what it already has.
|
|
66
|
+
*/
|
|
67
|
+
expectedSessionState: import_typebox.Type.Optional(
|
|
68
|
+
import_typebox.Type.Object({
|
|
69
|
+
/**
|
|
70
|
+
* reconnect is set to true if the client explicitly wants to reestablish an existing
|
|
71
|
+
* connection.
|
|
72
|
+
*/
|
|
73
|
+
reconnect: import_typebox.Type.Boolean(),
|
|
74
|
+
nextExpectedSeq: import_typebox.Type.Integer()
|
|
75
|
+
})
|
|
76
|
+
),
|
|
62
77
|
metadata: import_typebox.Type.Optional(import_typebox.Type.Unknown())
|
|
63
78
|
});
|
|
64
79
|
var ControlMessageHandshakeResponseSchema = import_typebox.Type.Object({
|
|
@@ -83,7 +98,14 @@ var ControlMessagePayloadSchema = import_typebox.Type.Union([
|
|
|
83
98
|
var OpaqueTransportMessageSchema = TransportMessageSchema(
|
|
84
99
|
import_typebox.Type.Unknown()
|
|
85
100
|
);
|
|
86
|
-
function handshakeRequestMessage(
|
|
101
|
+
function handshakeRequestMessage({
|
|
102
|
+
from,
|
|
103
|
+
to,
|
|
104
|
+
sessionId,
|
|
105
|
+
expectedSessionState,
|
|
106
|
+
metadata,
|
|
107
|
+
tracing
|
|
108
|
+
}) {
|
|
87
109
|
return {
|
|
88
110
|
id: (0, import_nanoid.nanoid)(),
|
|
89
111
|
from,
|
|
@@ -97,10 +119,12 @@ function handshakeRequestMessage(from, to, sessionId, metadata, tracing) {
|
|
|
97
119
|
type: "HANDSHAKE_REQ",
|
|
98
120
|
protocolVersion: PROTOCOL_VERSION,
|
|
99
121
|
sessionId,
|
|
122
|
+
expectedSessionState,
|
|
100
123
|
metadata
|
|
101
124
|
}
|
|
102
125
|
};
|
|
103
126
|
}
|
|
127
|
+
var SESSION_STATE_MISMATCH = "session state mismatch";
|
|
104
128
|
function isAck(controlFlag) {
|
|
105
129
|
return (controlFlag & 1 /* AckBit */) === 1 /* AckBit */;
|
|
106
130
|
}
|
|
@@ -350,7 +374,7 @@ var import_nanoid2 = require("nanoid");
|
|
|
350
374
|
var import_api = require("@opentelemetry/api");
|
|
351
375
|
|
|
352
376
|
// package.json
|
|
353
|
-
var version = "0.23.
|
|
377
|
+
var version = "0.23.14";
|
|
354
378
|
|
|
355
379
|
// tracing/index.ts
|
|
356
380
|
function getPropagationContext(ctx) {
|
|
@@ -664,9 +688,17 @@ var Session = class {
|
|
|
664
688
|
get connected() {
|
|
665
689
|
return this.connection !== void 0;
|
|
666
690
|
}
|
|
691
|
+
get nextExpectedAck() {
|
|
692
|
+
return this.seq;
|
|
693
|
+
}
|
|
667
694
|
get nextExpectedSeq() {
|
|
668
695
|
return this.ack;
|
|
669
696
|
}
|
|
697
|
+
// This is only used in tests to make the session misbehave.
|
|
698
|
+
/* @internal */
|
|
699
|
+
advanceAckForTesting(by) {
|
|
700
|
+
this.ack += by;
|
|
701
|
+
}
|
|
670
702
|
constructMsg(partialMsg) {
|
|
671
703
|
const msg = {
|
|
672
704
|
...partialMsg,
|
|
@@ -777,6 +809,49 @@ var Transport = class {
|
|
|
777
809
|
});
|
|
778
810
|
return session;
|
|
779
811
|
}
|
|
812
|
+
createNewSession({
|
|
813
|
+
to,
|
|
814
|
+
conn,
|
|
815
|
+
sessionId,
|
|
816
|
+
propagationCtx
|
|
817
|
+
}) {
|
|
818
|
+
let session = this.sessions.get(to);
|
|
819
|
+
if (session !== void 0) {
|
|
820
|
+
this.log?.info(
|
|
821
|
+
`session for ${to} already exists, replacing it with a new session as requested`,
|
|
822
|
+
session.loggingMetadata
|
|
823
|
+
);
|
|
824
|
+
this.deleteSession({
|
|
825
|
+
session,
|
|
826
|
+
closeHandshakingConnection: false
|
|
827
|
+
});
|
|
828
|
+
session = void 0;
|
|
829
|
+
}
|
|
830
|
+
session = this.createSession(to, conn, propagationCtx);
|
|
831
|
+
session.advertisedSessionId = sessionId;
|
|
832
|
+
this.log?.info(`created new session for ${to}`, session.loggingMetadata);
|
|
833
|
+
return session;
|
|
834
|
+
}
|
|
835
|
+
getExistingSession({
|
|
836
|
+
to,
|
|
837
|
+
sessionId,
|
|
838
|
+
nextExpectedSeq
|
|
839
|
+
}) {
|
|
840
|
+
const session = this.sessions.get(to);
|
|
841
|
+
if (
|
|
842
|
+
// reject this request if there was no previous session to replace
|
|
843
|
+
session === void 0 || // or if both parties do not agree about the next expected sequence number
|
|
844
|
+
session.nextExpectedAck < nextExpectedSeq || // or if both parties do not agree on the advertised session id
|
|
845
|
+
session.advertisedSessionId !== sessionId
|
|
846
|
+
) {
|
|
847
|
+
return false;
|
|
848
|
+
}
|
|
849
|
+
this.log?.info(
|
|
850
|
+
`reused existing session for ${to}`,
|
|
851
|
+
session.loggingMetadata
|
|
852
|
+
);
|
|
853
|
+
return session;
|
|
854
|
+
}
|
|
780
855
|
getOrCreateSession({
|
|
781
856
|
to,
|
|
782
857
|
conn,
|
|
@@ -1187,24 +1262,40 @@ var ClientTransport = class extends Transport {
|
|
|
1187
1262
|
);
|
|
1188
1263
|
return false;
|
|
1189
1264
|
}
|
|
1265
|
+
const previousSession = this.sessions.get(parsed.from);
|
|
1190
1266
|
if (!parsed.payload.status.ok) {
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1267
|
+
if (parsed.payload.status.reason === SESSION_STATE_MISMATCH) {
|
|
1268
|
+
if (previousSession) {
|
|
1269
|
+
this.deleteSession({
|
|
1270
|
+
session: previousSession,
|
|
1271
|
+
closeHandshakingConnection: true
|
|
1272
|
+
});
|
|
1273
|
+
}
|
|
1274
|
+
conn.telemetry?.span.setStatus({
|
|
1275
|
+
code: import_api4.SpanStatusCode.ERROR,
|
|
1276
|
+
message: parsed.payload.status.reason
|
|
1277
|
+
});
|
|
1278
|
+
} else {
|
|
1279
|
+
conn.telemetry?.span.setStatus({
|
|
1280
|
+
code: import_api4.SpanStatusCode.ERROR,
|
|
1281
|
+
message: "handshake rejected"
|
|
1282
|
+
});
|
|
1283
|
+
}
|
|
1284
|
+
this.log?.warn(
|
|
1285
|
+
`received handshake rejection: ${parsed.payload.status.reason}`,
|
|
1286
|
+
{
|
|
1287
|
+
...conn.loggingMetadata,
|
|
1288
|
+
clientId: this.clientId,
|
|
1289
|
+
connectedTo: parsed.from,
|
|
1290
|
+
transportMessage: parsed
|
|
1291
|
+
}
|
|
1292
|
+
);
|
|
1201
1293
|
this.protocolError(
|
|
1202
1294
|
ProtocolError.HandshakeFailed,
|
|
1203
1295
|
parsed.payload.status.reason
|
|
1204
1296
|
);
|
|
1205
1297
|
return false;
|
|
1206
1298
|
}
|
|
1207
|
-
const previousSession = this.sessions.get(parsed.from);
|
|
1208
1299
|
if (previousSession?.advertisedSessionId && previousSession.advertisedSessionId !== parsed.payload.status.sessionId) {
|
|
1209
1300
|
this.deleteSession({
|
|
1210
1301
|
session: previousSession,
|
|
@@ -1384,13 +1475,17 @@ var ClientTransport = class extends Transport {
|
|
|
1384
1475
|
}
|
|
1385
1476
|
}
|
|
1386
1477
|
const { session } = this.getOrCreateSession({ to, handshakingConn: conn });
|
|
1387
|
-
const requestMsg = handshakeRequestMessage(
|
|
1388
|
-
this.clientId,
|
|
1478
|
+
const requestMsg = handshakeRequestMessage({
|
|
1479
|
+
from: this.clientId,
|
|
1389
1480
|
to,
|
|
1390
|
-
session.id,
|
|
1481
|
+
sessionId: session.id,
|
|
1482
|
+
expectedSessionState: {
|
|
1483
|
+
reconnect: session.advertisedSessionId !== void 0,
|
|
1484
|
+
nextExpectedSeq: session.nextExpectedSeq
|
|
1485
|
+
},
|
|
1391
1486
|
metadata,
|
|
1392
|
-
getPropagationContext(session.telemetry.ctx)
|
|
1393
|
-
);
|
|
1487
|
+
tracing: getPropagationContext(session.telemetry.ctx)
|
|
1488
|
+
});
|
|
1394
1489
|
this.log?.debug(`sending handshake request to ${to}`, {
|
|
1395
1490
|
...conn.loggingMetadata,
|
|
1396
1491
|
clientId: this.clientId,
|