@replit/river 0.22.0 → 0.23.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.
- package/dist/{chunk-ZPBWKBM5.js → chunk-AUH7GO52.js} +84 -88
- package/dist/chunk-AUH7GO52.js.map +1 -0
- package/dist/{chunk-GCLEWC26.js → chunk-IKKP6BZG.js} +34 -18
- package/dist/chunk-IKKP6BZG.js.map +1 -0
- package/dist/{chunk-S3YKQT4J.js → chunk-KA5T736W.js} +2 -2
- package/dist/{chunk-3MFX6NXA.js → chunk-RBH47IKH.js} +2 -2
- package/dist/chunk-RBH47IKH.js.map +1 -0
- package/dist/{chunk-HUBFYN37.js → chunk-XTVPDTQD.js} +2 -2
- package/dist/{connection-8b059ac4.d.ts → connection-5685d817.d.ts} +1 -1
- package/dist/{connection-bbfe1147.d.ts → connection-7582fb92.d.ts} +1 -1
- package/dist/{index-2ece5234.d.ts → index-a6fe0edd.d.ts} +40 -53
- package/dist/logging/index.d.cts +1 -1
- package/dist/logging/index.d.ts +1 -1
- package/dist/router/index.cjs +33 -17
- package/dist/router/index.cjs.map +1 -1
- package/dist/router/index.d.cts +11 -6
- package/dist/router/index.d.ts +11 -6
- package/dist/router/index.js +2 -2
- package/dist/{services-cb01a7a8.d.ts → services-95cb17b9.d.ts} +23 -52
- package/dist/{services-acbcc441.d.ts → services-e95a89d6.d.ts} +23 -52
- package/dist/transport/impls/uds/client.cjs +14 -13
- package/dist/transport/impls/uds/client.cjs.map +1 -1
- package/dist/transport/impls/uds/client.d.cts +2 -2
- package/dist/transport/impls/uds/client.d.ts +2 -2
- package/dist/transport/impls/uds/client.js +3 -3
- package/dist/transport/impls/uds/server.cjs +71 -82
- package/dist/transport/impls/uds/server.cjs.map +1 -1
- package/dist/transport/impls/uds/server.d.cts +2 -2
- package/dist/transport/impls/uds/server.d.ts +2 -2
- package/dist/transport/impls/uds/server.js +3 -3
- package/dist/transport/impls/ws/client.cjs +14 -13
- package/dist/transport/impls/ws/client.cjs.map +1 -1
- package/dist/transport/impls/ws/client.d.cts +2 -2
- package/dist/transport/impls/ws/client.d.ts +2 -2
- package/dist/transport/impls/ws/client.js +3 -3
- package/dist/transport/impls/ws/server.cjs +71 -82
- package/dist/transport/impls/ws/server.cjs.map +1 -1
- package/dist/transport/impls/ws/server.d.cts +2 -2
- package/dist/transport/impls/ws/server.d.ts +2 -2
- package/dist/transport/impls/ws/server.js +3 -3
- package/dist/transport/index.cjs +83 -87
- package/dist/transport/index.cjs.map +1 -1
- package/dist/transport/index.d.cts +22 -11
- package/dist/transport/index.d.ts +22 -11
- package/dist/transport/index.js +2 -2
- package/dist/util/testHelpers.cjs +4 -9
- package/dist/util/testHelpers.cjs.map +1 -1
- package/dist/util/testHelpers.d.cts +2 -2
- package/dist/util/testHelpers.d.ts +2 -2
- package/dist/util/testHelpers.js +5 -4
- package/dist/util/testHelpers.js.map +1 -1
- package/package.json +4 -4
- package/dist/chunk-3MFX6NXA.js.map +0 -1
- package/dist/chunk-GCLEWC26.js.map +0 -1
- package/dist/chunk-ZPBWKBM5.js.map +0 -1
- /package/dist/{chunk-S3YKQT4J.js.map → chunk-KA5T736W.js.map} +0 -0
- /package/dist/{chunk-HUBFYN37.js.map → chunk-XTVPDTQD.js.map} +0 -0
package/dist/transport/index.cjs
CHANGED
|
@@ -171,7 +171,7 @@ var import_nanoid2 = require("nanoid");
|
|
|
171
171
|
var import_api = require("@opentelemetry/api");
|
|
172
172
|
|
|
173
173
|
// package.json
|
|
174
|
-
var version = "0.
|
|
174
|
+
var version = "0.23.1";
|
|
175
175
|
|
|
176
176
|
// tracing/index.ts
|
|
177
177
|
function getPropagationContext(ctx) {
|
|
@@ -250,12 +250,6 @@ var Session = class {
|
|
|
250
250
|
* for this session.
|
|
251
251
|
*/
|
|
252
252
|
advertisedSessionId;
|
|
253
|
-
/**
|
|
254
|
-
* The metadata for this session, as parsed from the handshake.
|
|
255
|
-
*
|
|
256
|
-
* Will only ever be populated on the server side.
|
|
257
|
-
*/
|
|
258
|
-
metadata;
|
|
259
253
|
/**
|
|
260
254
|
* Number of messages we've sent along this session (excluding handshake and acks)
|
|
261
255
|
*/
|
|
@@ -413,8 +407,8 @@ var Session = class {
|
|
|
413
407
|
replaceWithNewConnection(newConn) {
|
|
414
408
|
this.closeStaleConnection(newConn);
|
|
415
409
|
this.cancelGrace();
|
|
416
|
-
this.connection = newConn;
|
|
417
410
|
this.sendBufferedMessages(newConn);
|
|
411
|
+
this.connection = newConn;
|
|
418
412
|
}
|
|
419
413
|
beginGrace(cb) {
|
|
420
414
|
log?.info(
|
|
@@ -925,6 +919,10 @@ var ClientTransport = class extends Transport {
|
|
|
925
919
|
* tests or a special case where you don't want to reconnect.
|
|
926
920
|
*/
|
|
927
921
|
reconnectOnConnectionDrop = true;
|
|
922
|
+
/**
|
|
923
|
+
* Optional handshake options for this client.
|
|
924
|
+
*/
|
|
925
|
+
handshakeExtensions;
|
|
928
926
|
constructor(clientId, providedOptions) {
|
|
929
927
|
super(clientId, providedOptions);
|
|
930
928
|
this.options = {
|
|
@@ -934,6 +932,9 @@ var ClientTransport = class extends Transport {
|
|
|
934
932
|
this.inflightConnectionPromises = /* @__PURE__ */ new Map();
|
|
935
933
|
this.retryBudget = new LeakyBucketRateLimit(this.options);
|
|
936
934
|
}
|
|
935
|
+
extendHandshake(options) {
|
|
936
|
+
this.handshakeExtensions = options;
|
|
937
|
+
}
|
|
937
938
|
handleConnection(conn, to) {
|
|
938
939
|
if (this.state !== "open")
|
|
939
940
|
return;
|
|
@@ -1157,10 +1158,10 @@ var ClientTransport = class extends Transport {
|
|
|
1157
1158
|
}
|
|
1158
1159
|
async sendHandshake(to, conn) {
|
|
1159
1160
|
let metadata;
|
|
1160
|
-
if (this.
|
|
1161
|
-
metadata = await this.
|
|
1162
|
-
if (!import_value.Value.Check(this.
|
|
1163
|
-
log?.error(`handshake metadata did not match schema`, {
|
|
1161
|
+
if (this.handshakeExtensions) {
|
|
1162
|
+
metadata = await this.handshakeExtensions.construct();
|
|
1163
|
+
if (!import_value.Value.Check(this.handshakeExtensions.schema, metadata)) {
|
|
1164
|
+
log?.error(`constructed handshake metadata did not match schema`, {
|
|
1164
1165
|
clientId: this.clientId,
|
|
1165
1166
|
connectedTo: to,
|
|
1166
1167
|
tags: ["invariant-violation"]
|
|
@@ -1176,7 +1177,7 @@ var ClientTransport = class extends Transport {
|
|
|
1176
1177
|
return false;
|
|
1177
1178
|
}
|
|
1178
1179
|
}
|
|
1179
|
-
const { session } = this.getOrCreateSession(to
|
|
1180
|
+
const { session } = this.getOrCreateSession(to);
|
|
1180
1181
|
const requestMsg = handshakeRequestMessage(
|
|
1181
1182
|
this.clientId,
|
|
1182
1183
|
to,
|
|
@@ -1201,17 +1202,29 @@ var ServerTransport = class extends Transport {
|
|
|
1201
1202
|
* The options for this transport.
|
|
1202
1203
|
*/
|
|
1203
1204
|
options;
|
|
1205
|
+
/**
|
|
1206
|
+
* Optional handshake options for the server.
|
|
1207
|
+
*/
|
|
1208
|
+
handshakeExtensions;
|
|
1209
|
+
/**
|
|
1210
|
+
* A map of session handshake data for each session.
|
|
1211
|
+
*/
|
|
1212
|
+
sessionHandshakeMetadata;
|
|
1204
1213
|
constructor(clientId, providedOptions) {
|
|
1205
1214
|
super(clientId, providedOptions);
|
|
1206
1215
|
this.options = {
|
|
1207
1216
|
...defaultServerTransportOptions,
|
|
1208
1217
|
...providedOptions
|
|
1209
1218
|
};
|
|
1219
|
+
this.sessionHandshakeMetadata = /* @__PURE__ */ new WeakMap();
|
|
1210
1220
|
log?.info(`initiated server transport`, {
|
|
1211
1221
|
clientId: this.clientId,
|
|
1212
1222
|
protocolVersion: PROTOCOL_VERSION
|
|
1213
1223
|
});
|
|
1214
1224
|
}
|
|
1225
|
+
extendHandshake(options) {
|
|
1226
|
+
this.handshakeExtensions = options;
|
|
1227
|
+
}
|
|
1215
1228
|
handleConnection(conn) {
|
|
1216
1229
|
if (this.state !== "open")
|
|
1217
1230
|
return;
|
|
@@ -1294,6 +1307,52 @@ var ServerTransport = class extends Transport {
|
|
|
1294
1307
|
);
|
|
1295
1308
|
});
|
|
1296
1309
|
}
|
|
1310
|
+
async validateHandshakeMetadata(conn, session, rawMetadata, from) {
|
|
1311
|
+
let parsedMetadata = {};
|
|
1312
|
+
if (this.handshakeExtensions) {
|
|
1313
|
+
if (!import_value.Value.Check(this.handshakeExtensions.schema, rawMetadata)) {
|
|
1314
|
+
conn.telemetry?.span.setStatus({
|
|
1315
|
+
code: import_api3.SpanStatusCode.ERROR,
|
|
1316
|
+
message: "malformed handshake meta"
|
|
1317
|
+
});
|
|
1318
|
+
const reason = "received malformed handshake metadata";
|
|
1319
|
+
const responseMsg = handshakeResponseMessage(this.clientId, from, {
|
|
1320
|
+
ok: false,
|
|
1321
|
+
reason
|
|
1322
|
+
});
|
|
1323
|
+
conn.send(this.codec.toBuffer(responseMsg));
|
|
1324
|
+
log?.warn(`received malformed handshake metadata from ${from}`, {
|
|
1325
|
+
clientId: this.clientId,
|
|
1326
|
+
connId: conn.id
|
|
1327
|
+
});
|
|
1328
|
+
this.protocolError(ProtocolError.HandshakeFailed, reason);
|
|
1329
|
+
return false;
|
|
1330
|
+
}
|
|
1331
|
+
parsedMetadata = await this.handshakeExtensions.validate(
|
|
1332
|
+
rawMetadata,
|
|
1333
|
+
session
|
|
1334
|
+
);
|
|
1335
|
+
if (parsedMetadata === false) {
|
|
1336
|
+
const reason = "rejected by handshake handler";
|
|
1337
|
+
conn.telemetry?.span.setStatus({
|
|
1338
|
+
code: import_api3.SpanStatusCode.ERROR,
|
|
1339
|
+
message: reason
|
|
1340
|
+
});
|
|
1341
|
+
const responseMsg = handshakeResponseMessage(this.clientId, from, {
|
|
1342
|
+
ok: false,
|
|
1343
|
+
reason
|
|
1344
|
+
});
|
|
1345
|
+
conn.send(this.codec.toBuffer(responseMsg));
|
|
1346
|
+
log?.warn(`rejected handshake from ${from}`, {
|
|
1347
|
+
clientId: this.clientId,
|
|
1348
|
+
connId: conn.id
|
|
1349
|
+
});
|
|
1350
|
+
this.protocolError(ProtocolError.HandshakeFailed, reason);
|
|
1351
|
+
return false;
|
|
1352
|
+
}
|
|
1353
|
+
}
|
|
1354
|
+
return parsedMetadata;
|
|
1355
|
+
}
|
|
1297
1356
|
async receiveHandshakeRequestMessage(data, conn) {
|
|
1298
1357
|
const parsed = this.parseMsg(data);
|
|
1299
1358
|
if (!parsed) {
|
|
@@ -1349,86 +1408,23 @@ var ServerTransport = class extends Transport {
|
|
|
1349
1408
|
this.protocolError(ProtocolError.HandshakeFailed, reason);
|
|
1350
1409
|
return false;
|
|
1351
1410
|
}
|
|
1411
|
+
const oldSession = this.sessions.get(parsed.from);
|
|
1412
|
+
const parsedMetadata = await this.validateHandshakeMetadata(
|
|
1413
|
+
conn,
|
|
1414
|
+
oldSession,
|
|
1415
|
+
parsed.payload.metadata,
|
|
1416
|
+
parsed.from
|
|
1417
|
+
);
|
|
1418
|
+
if (parsedMetadata === false) {
|
|
1419
|
+
return false;
|
|
1420
|
+
}
|
|
1352
1421
|
const { session, isReconnect } = this.getOrCreateSession(
|
|
1353
1422
|
parsed.from,
|
|
1354
1423
|
conn,
|
|
1355
1424
|
parsed.payload.sessionId,
|
|
1356
1425
|
parsed.tracing
|
|
1357
1426
|
);
|
|
1358
|
-
|
|
1359
|
-
if (this.options.handshake) {
|
|
1360
|
-
if (!import_value.Value.Check(
|
|
1361
|
-
this.options.handshake.requestSchema,
|
|
1362
|
-
parsed.payload.metadata
|
|
1363
|
-
)) {
|
|
1364
|
-
conn.telemetry?.span.setStatus({
|
|
1365
|
-
code: import_api3.SpanStatusCode.ERROR,
|
|
1366
|
-
message: "malformed handshake meta"
|
|
1367
|
-
});
|
|
1368
|
-
const reason = "received malformed handshake metadata";
|
|
1369
|
-
const responseMsg2 = handshakeResponseMessage(
|
|
1370
|
-
this.clientId,
|
|
1371
|
-
parsed.from,
|
|
1372
|
-
{ ok: false, reason }
|
|
1373
|
-
);
|
|
1374
|
-
conn.send(this.codec.toBuffer(responseMsg2));
|
|
1375
|
-
log?.warn(`received malformed handshake metadata from ${parsed.from}`, {
|
|
1376
|
-
clientId: this.clientId,
|
|
1377
|
-
connId: conn.id
|
|
1378
|
-
});
|
|
1379
|
-
this.protocolError(ProtocolError.HandshakeFailed, reason);
|
|
1380
|
-
this.deleteSession(session);
|
|
1381
|
-
return false;
|
|
1382
|
-
}
|
|
1383
|
-
const parsedMetadata = await this.options.handshake.parse(
|
|
1384
|
-
parsed.payload.metadata,
|
|
1385
|
-
session,
|
|
1386
|
-
isReconnect
|
|
1387
|
-
);
|
|
1388
|
-
if (parsedMetadata === false) {
|
|
1389
|
-
conn.telemetry?.span.setStatus({
|
|
1390
|
-
code: import_api3.SpanStatusCode.ERROR,
|
|
1391
|
-
message: "rejected by handshake handler"
|
|
1392
|
-
});
|
|
1393
|
-
const reason = "rejected by handshake handler";
|
|
1394
|
-
const responseMsg2 = handshakeResponseMessage(
|
|
1395
|
-
this.clientId,
|
|
1396
|
-
parsed.from,
|
|
1397
|
-
{ ok: false, reason }
|
|
1398
|
-
);
|
|
1399
|
-
conn.send(this.codec.toBuffer(responseMsg2));
|
|
1400
|
-
log?.warn(`rejected handshake from ${parsed.from}`, {
|
|
1401
|
-
clientId: this.clientId,
|
|
1402
|
-
connId: conn.id
|
|
1403
|
-
});
|
|
1404
|
-
this.protocolError(ProtocolError.HandshakeFailed, reason);
|
|
1405
|
-
this.deleteSession(session);
|
|
1406
|
-
return false;
|
|
1407
|
-
}
|
|
1408
|
-
if (!import_value.Value.Check(this.options.handshake.parsedSchema, parsedMetadata)) {
|
|
1409
|
-
conn.telemetry?.span.setStatus({
|
|
1410
|
-
code: import_api3.SpanStatusCode.ERROR,
|
|
1411
|
-
message: "malformed handshake meta"
|
|
1412
|
-
});
|
|
1413
|
-
const reason = "failed to parse handshake metadata";
|
|
1414
|
-
const responseMsg2 = handshakeResponseMessage(
|
|
1415
|
-
this.clientId,
|
|
1416
|
-
parsed.from,
|
|
1417
|
-
{ ok: false, reason }
|
|
1418
|
-
);
|
|
1419
|
-
conn.send(this.codec.toBuffer(responseMsg2));
|
|
1420
|
-
log?.error(`failed to parse handshake metadata`, {
|
|
1421
|
-
clientId: this.clientId,
|
|
1422
|
-
connId: conn.id
|
|
1423
|
-
});
|
|
1424
|
-
this.protocolError(ProtocolError.HandshakeFailed, reason);
|
|
1425
|
-
this.deleteSession(session);
|
|
1426
|
-
return false;
|
|
1427
|
-
}
|
|
1428
|
-
handshakeMetadata = parsedMetadata;
|
|
1429
|
-
}
|
|
1430
|
-
handshakeMetadata ??= {};
|
|
1431
|
-
session.metadata = handshakeMetadata;
|
|
1427
|
+
this.sessionHandshakeMetadata.set(session, parsedMetadata);
|
|
1432
1428
|
log?.debug(
|
|
1433
1429
|
`handshake from ${parsed.from} ok, responding with handshake success`,
|
|
1434
1430
|
{ clientId: this.clientId, connId: conn.id }
|