@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 db, doc, error_3;
1341
- return __generator(this, function (_a) {
1342
- switch (_a.label) {
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
- _a.trys.push([0, 2, , 3]);
1345
- db = resolveio_server_app_1.ResolveIOServer.getMainDB();
1346
- if (!db) {
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
- return [4 /*yield*/, db.collection(this.RESUME_TOKEN_COLLECTION).findOne({ _id: this.getResumeTokenDocId() })];
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
- doc = _a.sent();
1352
- return [2 /*return*/, (doc === null || doc === void 0 ? void 0 : doc.token) || null];
1353
- case 2:
1354
- error_3 = _a.sent();
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 3: return [2 /*return*/];
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 db, error_4;
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, 3, , 4]);
1374
- db = resolveio_server_app_1.ResolveIOServer.getMainDB();
1375
- if (!db) {
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
- return [4 /*yield*/, db.collection(this.RESUME_TOKEN_COLLECTION).updateOne({ _id: this.getResumeTokenDocId() }, { $set: { token: token, updatedAt: new Date() } }, { upsert: true })];
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*/, 4];
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*/, 4];
1386
- case 4: return [2 /*return*/];
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 db, error_5;
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, 2, , 3]);
1398
- db = resolveio_server_app_1.ResolveIOServer.getMainDB();
1399
- if (!db) {
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
- return [4 /*yield*/, db.collection(this.RESUME_TOKEN_COLLECTION).deleteOne({ _id: this.getResumeTokenDocId() })];
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*/, 3];
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*/, 3];
1410
- case 3: return [2 /*return*/];
1488
+ return [3 /*break*/, 6];
1489
+ case 6: return [2 /*return*/];
1411
1490
  }
1412
1491
  });
1413
1492
  });