@resolveio/server-lib 20.14.31 → 20.14.33
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.
|
@@ -93,6 +93,7 @@ export declare class SubscriptionManager {
|
|
|
93
93
|
private getWatchedDatabases;
|
|
94
94
|
private resolveOplogMode;
|
|
95
95
|
private resolveLocalOplogResyncIntervalMs;
|
|
96
|
+
private resolveResumeTokenMaxAgeMs;
|
|
96
97
|
private parsePositiveNumber;
|
|
97
98
|
private parsePositiveFloat;
|
|
98
99
|
private isChangeStreamUnsupported;
|
|
@@ -1194,6 +1194,14 @@ var SubscriptionManager = /** @class */ (function () {
|
|
|
1194
1194
|
|| config['SUBSCRIPTION_OPLOG_RESYNC_MS'];
|
|
1195
1195
|
return this.parsePositiveNumber(raw);
|
|
1196
1196
|
};
|
|
1197
|
+
SubscriptionManager.prototype.resolveResumeTokenMaxAgeMs = function () {
|
|
1198
|
+
var config = this.serverConfig || resolveio_server_app_1.ResolveIOServer.getServerConfig() || {};
|
|
1199
|
+
var raw = process.env.OPLOG_RESUME_TOKEN_MAX_AGE_MS
|
|
1200
|
+
|| process.env.SUBSCRIPTION_OPLOG_RESUME_TOKEN_MAX_AGE_MS
|
|
1201
|
+
|| config['OPLOG_RESUME_TOKEN_MAX_AGE_MS']
|
|
1202
|
+
|| config['SUBSCRIPTION_OPLOG_RESUME_TOKEN_MAX_AGE_MS'];
|
|
1203
|
+
return this.parsePositiveNumber(raw);
|
|
1204
|
+
};
|
|
1197
1205
|
SubscriptionManager.prototype.parsePositiveNumber = function (value) {
|
|
1198
1206
|
if (typeof value === 'number' && Number.isFinite(value) && value > 0) {
|
|
1199
1207
|
return value;
|
|
@@ -1337,31 +1345,66 @@ var SubscriptionManager = /** @class */ (function () {
|
|
|
1337
1345
|
};
|
|
1338
1346
|
SubscriptionManager.prototype.loadResumeToken = function () {
|
|
1339
1347
|
return __awaiter(this, void 0, void 0, function () {
|
|
1340
|
-
var
|
|
1341
|
-
|
|
1342
|
-
|
|
1348
|
+
var db_1, loadToken, mongoManager, _a, error_3;
|
|
1349
|
+
var _this = this;
|
|
1350
|
+
return __generator(this, function (_b) {
|
|
1351
|
+
switch (_b.label) {
|
|
1343
1352
|
case 0:
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
if (!
|
|
1353
|
+
_b.trys.push([0, 5, , 6]);
|
|
1354
|
+
db_1 = resolveio_server_app_1.ResolveIOServer.getMainDB();
|
|
1355
|
+
if (!db_1) {
|
|
1347
1356
|
return [2 /*return*/, null];
|
|
1348
1357
|
}
|
|
1349
|
-
|
|
1358
|
+
loadToken = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
1359
|
+
var collection, doc, token, maxAgeMs, ageMs;
|
|
1360
|
+
return __generator(this, function (_a) {
|
|
1361
|
+
switch (_a.label) {
|
|
1362
|
+
case 0:
|
|
1363
|
+
collection = db_1.collection(this.RESUME_TOKEN_COLLECTION);
|
|
1364
|
+
return [4 /*yield*/, collection.findOne({ _id: this.getResumeTokenDocId() })];
|
|
1365
|
+
case 1:
|
|
1366
|
+
doc = _a.sent();
|
|
1367
|
+
token = (doc === null || doc === void 0 ? void 0 : doc.token) || null;
|
|
1368
|
+
if (!token) {
|
|
1369
|
+
return [2 /*return*/, null];
|
|
1370
|
+
}
|
|
1371
|
+
maxAgeMs = this.resolveResumeTokenMaxAgeMs();
|
|
1372
|
+
if (!(maxAgeMs > 0 && (doc === null || doc === void 0 ? void 0 : doc.updatedAt) instanceof Date)) return [3 /*break*/, 3];
|
|
1373
|
+
ageMs = Date.now() - doc.updatedAt.getTime();
|
|
1374
|
+
if (!(ageMs > maxAgeMs)) return [3 /*break*/, 3];
|
|
1375
|
+
return [4 /*yield*/, collection.deleteOne({ _id: this.getResumeTokenDocId() })];
|
|
1376
|
+
case 2:
|
|
1377
|
+
_a.sent();
|
|
1378
|
+
console.log(new Date(), 'Sub Manager', 'Resume token expired, clearing', (0, common_1.round)(ageMs / 1000), 's');
|
|
1379
|
+
return [2 /*return*/, null];
|
|
1380
|
+
case 3: return [2 /*return*/, token];
|
|
1381
|
+
}
|
|
1382
|
+
});
|
|
1383
|
+
}); };
|
|
1384
|
+
mongoManager = resolveio_server_app_1.ResolveIOServer.getMongoManager();
|
|
1385
|
+
if (!mongoManager) return [3 /*break*/, 2];
|
|
1386
|
+
return [4 /*yield*/, mongoManager.runWithoutSession(loadToken)];
|
|
1350
1387
|
case 1:
|
|
1351
|
-
|
|
1352
|
-
return [
|
|
1353
|
-
case 2:
|
|
1354
|
-
|
|
1388
|
+
_a = _b.sent();
|
|
1389
|
+
return [3 /*break*/, 4];
|
|
1390
|
+
case 2: return [4 /*yield*/, loadToken()];
|
|
1391
|
+
case 3:
|
|
1392
|
+
_a = _b.sent();
|
|
1393
|
+
_b.label = 4;
|
|
1394
|
+
case 4: return [2 /*return*/, _a];
|
|
1395
|
+
case 5:
|
|
1396
|
+
error_3 = _b.sent();
|
|
1355
1397
|
console.log(new Date(), 'Sub Manager', 'Failed to load oplog resume token', error_3);
|
|
1356
1398
|
return [2 /*return*/, null];
|
|
1357
|
-
case
|
|
1399
|
+
case 6: return [2 /*return*/];
|
|
1358
1400
|
}
|
|
1359
1401
|
});
|
|
1360
1402
|
});
|
|
1361
1403
|
};
|
|
1362
1404
|
SubscriptionManager.prototype.saveResumeToken = function (token) {
|
|
1363
1405
|
return __awaiter(this, void 0, void 0, function () {
|
|
1364
|
-
var
|
|
1406
|
+
var db_2, saveToken, mongoManager, error_4;
|
|
1407
|
+
var _this = this;
|
|
1365
1408
|
return __generator(this, function (_a) {
|
|
1366
1409
|
switch (_a.label) {
|
|
1367
1410
|
case 0:
|
|
@@ -1370,44 +1413,80 @@ var SubscriptionManager = /** @class */ (function () {
|
|
|
1370
1413
|
}
|
|
1371
1414
|
_a.label = 1;
|
|
1372
1415
|
case 1:
|
|
1373
|
-
_a.trys.push([1,
|
|
1374
|
-
|
|
1375
|
-
if (!
|
|
1416
|
+
_a.trys.push([1, 6, , 7]);
|
|
1417
|
+
db_2 = resolveio_server_app_1.ResolveIOServer.getMainDB();
|
|
1418
|
+
if (!db_2) {
|
|
1376
1419
|
return [2 /*return*/];
|
|
1377
1420
|
}
|
|
1378
|
-
|
|
1421
|
+
saveToken = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
1422
|
+
return __generator(this, function (_a) {
|
|
1423
|
+
switch (_a.label) {
|
|
1424
|
+
case 0: return [4 /*yield*/, db_2.collection(this.RESUME_TOKEN_COLLECTION).updateOne({ _id: this.getResumeTokenDocId() }, { $set: { token: token, updatedAt: new Date() } }, { upsert: true })];
|
|
1425
|
+
case 1:
|
|
1426
|
+
_a.sent();
|
|
1427
|
+
return [2 /*return*/];
|
|
1428
|
+
}
|
|
1429
|
+
});
|
|
1430
|
+
}); };
|
|
1431
|
+
mongoManager = resolveio_server_app_1.ResolveIOServer.getMongoManager();
|
|
1432
|
+
if (!mongoManager) return [3 /*break*/, 3];
|
|
1433
|
+
return [4 /*yield*/, mongoManager.runWithoutSession(saveToken)];
|
|
1379
1434
|
case 2:
|
|
1380
1435
|
_a.sent();
|
|
1381
|
-
return [3 /*break*/,
|
|
1382
|
-
case 3:
|
|
1436
|
+
return [3 /*break*/, 5];
|
|
1437
|
+
case 3: return [4 /*yield*/, saveToken()];
|
|
1438
|
+
case 4:
|
|
1439
|
+
_a.sent();
|
|
1440
|
+
_a.label = 5;
|
|
1441
|
+
case 5: return [3 /*break*/, 7];
|
|
1442
|
+
case 6:
|
|
1383
1443
|
error_4 = _a.sent();
|
|
1384
1444
|
console.log(new Date(), 'Sub Manager', 'Failed to persist oplog resume token', error_4);
|
|
1385
|
-
return [3 /*break*/,
|
|
1386
|
-
case
|
|
1445
|
+
return [3 /*break*/, 7];
|
|
1446
|
+
case 7: return [2 /*return*/];
|
|
1387
1447
|
}
|
|
1388
1448
|
});
|
|
1389
1449
|
});
|
|
1390
1450
|
};
|
|
1391
1451
|
SubscriptionManager.prototype.clearResumeToken = function () {
|
|
1392
1452
|
return __awaiter(this, void 0, void 0, function () {
|
|
1393
|
-
var
|
|
1453
|
+
var db_3, clearToken, mongoManager, error_5;
|
|
1454
|
+
var _this = this;
|
|
1394
1455
|
return __generator(this, function (_a) {
|
|
1395
1456
|
switch (_a.label) {
|
|
1396
1457
|
case 0:
|
|
1397
|
-
_a.trys.push([0,
|
|
1398
|
-
|
|
1399
|
-
if (!
|
|
1458
|
+
_a.trys.push([0, 5, , 6]);
|
|
1459
|
+
db_3 = resolveio_server_app_1.ResolveIOServer.getMainDB();
|
|
1460
|
+
if (!db_3) {
|
|
1400
1461
|
return [2 /*return*/];
|
|
1401
1462
|
}
|
|
1402
|
-
|
|
1463
|
+
clearToken = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
1464
|
+
return __generator(this, function (_a) {
|
|
1465
|
+
switch (_a.label) {
|
|
1466
|
+
case 0: return [4 /*yield*/, db_3.collection(this.RESUME_TOKEN_COLLECTION)
|
|
1467
|
+
.deleteOne({ _id: this.getResumeTokenDocId() })];
|
|
1468
|
+
case 1:
|
|
1469
|
+
_a.sent();
|
|
1470
|
+
return [2 /*return*/];
|
|
1471
|
+
}
|
|
1472
|
+
});
|
|
1473
|
+
}); };
|
|
1474
|
+
mongoManager = resolveio_server_app_1.ResolveIOServer.getMongoManager();
|
|
1475
|
+
if (!mongoManager) return [3 /*break*/, 2];
|
|
1476
|
+
return [4 /*yield*/, mongoManager.runWithoutSession(clearToken)];
|
|
1403
1477
|
case 1:
|
|
1404
1478
|
_a.sent();
|
|
1405
|
-
return [3 /*break*/,
|
|
1406
|
-
case 2:
|
|
1479
|
+
return [3 /*break*/, 4];
|
|
1480
|
+
case 2: return [4 /*yield*/, clearToken()];
|
|
1481
|
+
case 3:
|
|
1482
|
+
_a.sent();
|
|
1483
|
+
_a.label = 4;
|
|
1484
|
+
case 4: return [3 /*break*/, 6];
|
|
1485
|
+
case 5:
|
|
1407
1486
|
error_5 = _a.sent();
|
|
1408
1487
|
console.log(new Date(), 'Sub Manager', 'Failed to clear oplog resume token', error_5);
|
|
1409
|
-
return [3 /*break*/,
|
|
1410
|
-
case
|
|
1488
|
+
return [3 /*break*/, 6];
|
|
1489
|
+
case 6: return [2 /*return*/];
|
|
1411
1490
|
}
|
|
1412
1491
|
});
|
|
1413
1492
|
});
|