@resolveio/server-lib 22.2.18 → 22.2.20

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.
Files changed (36) hide show
  1. package/managers/error-auto-fix.manager.d.ts +6 -0
  2. package/managers/error-auto-fix.manager.js +215 -85
  3. package/managers/error-auto-fix.manager.js.map +1 -1
  4. package/managers/method.manager.js +2 -0
  5. package/managers/method.manager.js.map +1 -1
  6. package/managers/mongo.manager.d.ts +3 -0
  7. package/managers/mongo.manager.js +184 -65
  8. package/managers/mongo.manager.js.map +1 -1
  9. package/managers/slow-query-verifier.manager.d.ts +30 -0
  10. package/managers/slow-query-verifier.manager.js +691 -192
  11. package/managers/slow-query-verifier.manager.js.map +1 -1
  12. package/managers/subscription.manager.d.ts +1 -0
  13. package/managers/subscription.manager.js +60 -21
  14. package/managers/subscription.manager.js.map +1 -1
  15. package/managers/worker-dispatcher.manager.js +60 -6
  16. package/managers/worker-dispatcher.manager.js.map +1 -1
  17. package/methods/ai-terminal.d.ts +4 -0
  18. package/methods/ai-terminal.js +64 -26
  19. package/methods/ai-terminal.js.map +1 -1
  20. package/methods/app-settings.js +2 -2
  21. package/methods/app-settings.js.map +1 -1
  22. package/methods/diagnostics.d.ts +2 -0
  23. package/methods/diagnostics.js +514 -0
  24. package/methods/diagnostics.js.map +1 -0
  25. package/methods.ts +15 -0
  26. package/package.json +1 -1
  27. package/resolveio-server-app.d.ts +17 -1
  28. package/resolveio-server-app.js +293 -25
  29. package/resolveio-server-app.js.map +1 -1
  30. package/server-app.js +22 -36
  31. package/server-app.js.map +1 -1
  32. package/util/error-reporter.js +26 -126
  33. package/util/error-reporter.js.map +1 -1
  34. package/util/slow-query-reporter.d.ts +0 -3
  35. package/util/slow-query-reporter.js +13 -120
  36. package/util/slow-query-reporter.js.map +1 -1
package/methods.ts CHANGED
@@ -249,6 +249,21 @@ export function SERVER_METHODS(resolveioServer) {
249
249
  stuckCronJob: (cb?: Function): Promise<any> => {
250
250
  return resolveioServer.call('stuckCronJob', cb);
251
251
  },
252
+ superAdminDeploySlowQueryLog: (logId: string, cb?: Function): Promise<any> => {
253
+ return resolveioServer.call('superAdminDeploySlowQueryLog', logId, cb);
254
+ },
255
+ superAdminListAutoFixLogs: (payload: Record<string, any> = {}, cb?: Function): Promise<any> => {
256
+ return resolveioServer.call('superAdminListAutoFixLogs', payload, any>, cb);
257
+ },
258
+ superAdminListSlowQueryLogs: (payload: Record<string, any> = {}, cb?: Function): Promise<any> => {
259
+ return resolveioServer.call('superAdminListSlowQueryLogs', payload, any>, cb);
260
+ },
261
+ superAdminRunAutoFixLog: (logId: string, cb?: Function): Promise<any> => {
262
+ return resolveioServer.call('superAdminRunAutoFixLog', logId, cb);
263
+ },
264
+ superAdminRunSlowQueryLog: (logId: string, cb?: Function): Promise<any> => {
265
+ return resolveioServer.call('superAdminRunSlowQueryLog', logId, cb);
266
+ },
252
267
  superadminAPM: (date_start: Date, date_end: Date, graphInterval, cb?: Function): Promise<any> => {
253
268
  return resolveioServer.call('superadminAPM', date_start, date_end, graphInterval, cb);
254
269
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@resolveio/server-lib",
3
- "version": "22.2.18",
3
+ "version": "22.2.20",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "package": "./build_package.sh",
@@ -15,9 +15,25 @@ export declare class ResolveIOServer {
15
15
  private static _sesMail;
16
16
  private static _publicProgram;
17
17
  private static _reconnecting;
18
+ private static _mongoReconnectPromise;
19
+ private static _lastMongoPoolClearedLogMs;
20
+ private static readonly MONGO_POOL_CLEARED_DEBOUNCE_MS;
18
21
  private static connectMongo;
19
- private static handleMongoDisconnect;
22
+ private static attachMongoListeners;
23
+ private static detachMongoListeners;
24
+ private static handleMongoClose;
25
+ private static handleMongoError;
26
+ private static handleMongoServerClosed;
27
+ private static handleMongoTopologyClosed;
28
+ private static handleMongoPoolCleared;
29
+ private static handleMongoDisconnectSignal;
30
+ private static isMongoConnectionHealthy;
31
+ static requestMongoReconnect(reason?: string, signal?: any): Promise<void>;
32
+ private static summarizeMongoSignal;
33
+ private static closeMongoClientQuietly;
34
+ private static notifyMongoReconnect;
20
35
  private static reconnectMongo;
36
+ private static handleMongoDisconnect;
21
37
  private static delay;
22
38
  private static resolveMongoClientOptions;
23
39
  private static pickMongoOptionValue;
@@ -63,69 +63,330 @@ var ResolveIOServer = /** @class */ (function () {
63
63
  return [4 /*yield*/, mongodb_1.MongoClient.connect(mongoUrl, clientOptions)];
64
64
  case 1:
65
65
  client = _a.sent();
66
- client.on('close', ResolveIOServer.handleMongoDisconnect);
67
- client.on('error', ResolveIOServer.handleMongoDisconnect);
68
- client.on('connectionPoolCleared', ResolveIOServer.handleMongoDisconnect);
66
+ ResolveIOServer.attachMongoListeners(client);
69
67
  return [2 /*return*/, client];
70
68
  }
71
69
  });
72
70
  });
73
71
  };
74
- ResolveIOServer.handleMongoDisconnect = function (err) {
72
+ ResolveIOServer.attachMongoListeners = function (client) {
73
+ if (!client) {
74
+ return;
75
+ }
76
+ client.on('close', ResolveIOServer.handleMongoClose);
77
+ client.on('error', ResolveIOServer.handleMongoError);
78
+ client.on('connectionPoolCleared', ResolveIOServer.handleMongoPoolCleared);
79
+ client.on('serverClosed', ResolveIOServer.handleMongoServerClosed);
80
+ client.on('topologyClosed', ResolveIOServer.handleMongoTopologyClosed);
81
+ };
82
+ ResolveIOServer.detachMongoListeners = function (client) {
83
+ if (!client) {
84
+ return;
85
+ }
86
+ client.removeListener('close', ResolveIOServer.handleMongoClose);
87
+ client.removeListener('error', ResolveIOServer.handleMongoError);
88
+ client.removeListener('connectionPoolCleared', ResolveIOServer.handleMongoPoolCleared);
89
+ client.removeListener('serverClosed', ResolveIOServer.handleMongoServerClosed);
90
+ client.removeListener('topologyClosed', ResolveIOServer.handleMongoTopologyClosed);
91
+ };
92
+ ResolveIOServer.handleMongoClose = function (signal) {
75
93
  return __awaiter(this, void 0, void 0, function () {
94
+ return __generator(this, function (_a) {
95
+ switch (_a.label) {
96
+ case 0: return [4 /*yield*/, ResolveIOServer.handleMongoDisconnectSignal('close', signal)];
97
+ case 1:
98
+ _a.sent();
99
+ return [2 /*return*/];
100
+ }
101
+ });
102
+ });
103
+ };
104
+ ResolveIOServer.handleMongoError = function (signal) {
105
+ return __awaiter(this, void 0, void 0, function () {
106
+ return __generator(this, function (_a) {
107
+ switch (_a.label) {
108
+ case 0: return [4 /*yield*/, ResolveIOServer.handleMongoDisconnectSignal('error', signal)];
109
+ case 1:
110
+ _a.sent();
111
+ return [2 /*return*/];
112
+ }
113
+ });
114
+ });
115
+ };
116
+ ResolveIOServer.handleMongoServerClosed = function (signal) {
117
+ return __awaiter(this, void 0, void 0, function () {
118
+ return __generator(this, function (_a) {
119
+ switch (_a.label) {
120
+ case 0: return [4 /*yield*/, ResolveIOServer.handleMongoDisconnectSignal('serverClosed', signal)];
121
+ case 1:
122
+ _a.sent();
123
+ return [2 /*return*/];
124
+ }
125
+ });
126
+ });
127
+ };
128
+ ResolveIOServer.handleMongoTopologyClosed = function (signal) {
129
+ return __awaiter(this, void 0, void 0, function () {
130
+ return __generator(this, function (_a) {
131
+ switch (_a.label) {
132
+ case 0: return [4 /*yield*/, ResolveIOServer.handleMongoDisconnectSignal('topologyClosed', signal)];
133
+ case 1:
134
+ _a.sent();
135
+ return [2 /*return*/];
136
+ }
137
+ });
138
+ });
139
+ };
140
+ ResolveIOServer.handleMongoPoolCleared = function (signal) {
141
+ return __awaiter(this, void 0, void 0, function () {
142
+ var now, summary;
143
+ return __generator(this, function (_a) {
144
+ switch (_a.label) {
145
+ case 0:
146
+ now = Date.now();
147
+ summary = ResolveIOServer.summarizeMongoSignal(signal);
148
+ if (!ResolveIOServer._lastMongoPoolClearedLogMs || (now - ResolveIOServer._lastMongoPoolClearedLogMs) >= ResolveIOServer.MONGO_POOL_CLEARED_DEBOUNCE_MS) {
149
+ ResolveIOServer._lastMongoPoolClearedLogMs = now;
150
+ console.warn(new Date(), 'Mongo connection pool cleared', summary);
151
+ }
152
+ return [4 /*yield*/, ResolveIOServer.handleMongoDisconnectSignal('connectionPoolCleared', signal, { verifyBeforeReconnect: true })];
153
+ case 1:
154
+ _a.sent();
155
+ return [2 /*return*/];
156
+ }
157
+ });
158
+ });
159
+ };
160
+ ResolveIOServer.handleMongoDisconnectSignal = function (reason_1, signal_1) {
161
+ return __awaiter(this, arguments, void 0, function (reason, signal, options) {
162
+ var isHealthy;
163
+ if (options === void 0) { options = {}; }
76
164
  return __generator(this, function (_a) {
77
165
  switch (_a.label) {
78
166
  case 0:
79
- console.error(new Date(), 'Mongo connection lost', err);
80
- if (ResolveIOServer._reconnecting) {
167
+ if (!options.verifyBeforeReconnect) return [3 /*break*/, 2];
168
+ return [4 /*yield*/, ResolveIOServer.isMongoConnectionHealthy()];
169
+ case 1:
170
+ isHealthy = _a.sent();
171
+ if (isHealthy) {
81
172
  return [2 /*return*/];
82
173
  }
83
- ResolveIOServer._reconnecting = true;
84
- _a.label = 1;
174
+ _a.label = 2;
175
+ case 2: return [4 /*yield*/, ResolveIOServer.requestMongoReconnect(reason, signal)];
176
+ case 3:
177
+ _a.sent();
178
+ return [2 /*return*/];
179
+ }
180
+ });
181
+ });
182
+ };
183
+ ResolveIOServer.isMongoConnectionHealthy = function () {
184
+ return __awaiter(this, arguments, void 0, function (timeoutMs) {
185
+ var client, pingDatabase, timeoutPromise, _a;
186
+ var _this = this;
187
+ var _b;
188
+ if (timeoutMs === void 0) { timeoutMs = 2500; }
189
+ return __generator(this, function (_c) {
190
+ switch (_c.label) {
191
+ case 0:
192
+ client = ResolveIOServer.getMongoConnection();
193
+ if (!client) {
194
+ return [2 /*return*/, false];
195
+ }
196
+ pingDatabase = ((_b = ResolveIOServer.getServerConfig()) === null || _b === void 0 ? void 0 : _b['DATABASE']) || 'admin';
197
+ _c.label = 1;
85
198
  case 1:
86
- _a.trys.push([1, , 3, 4]);
87
- return [4 /*yield*/, ResolveIOServer.reconnectMongo()];
199
+ _c.trys.push([1, 3, , 4]);
200
+ timeoutPromise = (function () { return __awaiter(_this, void 0, void 0, function () {
201
+ return __generator(this, function (_a) {
202
+ switch (_a.label) {
203
+ case 0: return [4 /*yield*/, ResolveIOServer.delay(timeoutMs)];
204
+ case 1:
205
+ _a.sent();
206
+ throw new Error('mongo-ping-timeout');
207
+ }
208
+ });
209
+ }); })();
210
+ return [4 /*yield*/, Promise.race([
211
+ client.db(pingDatabase).command({ ping: 1 }),
212
+ timeoutPromise
213
+ ])];
88
214
  case 2:
89
- _a.sent();
215
+ _c.sent();
216
+ return [2 /*return*/, true];
217
+ case 3:
218
+ _a = _c.sent();
219
+ return [2 /*return*/, false];
220
+ case 4: return [2 /*return*/];
221
+ }
222
+ });
223
+ });
224
+ };
225
+ ResolveIOServer.requestMongoReconnect = function () {
226
+ return __awaiter(this, arguments, void 0, function (reason, signal) {
227
+ var reconnectPromise, signalSummary;
228
+ var _this = this;
229
+ if (reason === void 0) { reason = 'unknown'; }
230
+ return __generator(this, function (_a) {
231
+ reconnectPromise = ResolveIOServer._mongoReconnectPromise;
232
+ if (reconnectPromise !== null) {
233
+ return [2 /*return*/, reconnectPromise];
234
+ }
235
+ signalSummary = ResolveIOServer.summarizeMongoSignal(signal);
236
+ ResolveIOServer._reconnecting = true;
237
+ ResolveIOServer._mongoReconnectPromise = (function () { return __awaiter(_this, void 0, void 0, function () {
238
+ return __generator(this, function (_a) {
239
+ switch (_a.label) {
240
+ case 0:
241
+ _a.trys.push([0, , 2, 3]);
242
+ console.error(new Date(), 'Mongo connection lost', { reason: reason, signal: signalSummary });
243
+ return [4 /*yield*/, ResolveIOServer.reconnectMongo(reason, signal)];
244
+ case 1:
245
+ _a.sent();
246
+ return [3 /*break*/, 3];
247
+ case 2:
248
+ ResolveIOServer._reconnecting = false;
249
+ ResolveIOServer._mongoReconnectPromise = null;
250
+ return [7 /*endfinally*/];
251
+ case 3: return [2 /*return*/];
252
+ }
253
+ });
254
+ }); })();
255
+ return [2 /*return*/, ResolveIOServer._mongoReconnectPromise];
256
+ });
257
+ });
258
+ };
259
+ ResolveIOServer.summarizeMongoSignal = function (signal) {
260
+ if (!signal) {
261
+ return null;
262
+ }
263
+ if (typeof signal !== 'object') {
264
+ return signal;
265
+ }
266
+ return {
267
+ name: signal.name,
268
+ message: signal.message,
269
+ code: signal.code,
270
+ codeName: signal.codeName,
271
+ address: signal.address,
272
+ interruptInUseConnections: signal.interruptInUseConnections
273
+ };
274
+ };
275
+ ResolveIOServer.closeMongoClientQuietly = function (client) {
276
+ return __awaiter(this, void 0, void 0, function () {
277
+ var _a;
278
+ return __generator(this, function (_b) {
279
+ switch (_b.label) {
280
+ case 0:
281
+ if (!client) {
282
+ return [2 /*return*/];
283
+ }
284
+ _b.label = 1;
285
+ case 1:
286
+ _b.trys.push([1, 3, , 4]);
287
+ ResolveIOServer.detachMongoListeners(client);
288
+ return [4 /*yield*/, client.close(false)];
289
+ case 2:
290
+ _b.sent();
90
291
  return [3 /*break*/, 4];
91
292
  case 3:
92
- ResolveIOServer._reconnecting = false;
93
- return [7 /*endfinally*/];
293
+ _a = _b.sent();
294
+ return [3 /*break*/, 4];
94
295
  case 4: return [2 /*return*/];
95
296
  }
96
297
  });
97
298
  });
98
299
  };
99
- ResolveIOServer.reconnectMongo = function () {
300
+ ResolveIOServer.notifyMongoReconnect = function (reason) {
100
301
  return __awaiter(this, void 0, void 0, function () {
101
- var attempt, client, err_1;
302
+ var mongoManager, error_1, mainServer, subscriptionManager, error_2;
303
+ return __generator(this, function (_a) {
304
+ switch (_a.label) {
305
+ case 0:
306
+ _a.trys.push([0, 3, , 4]);
307
+ mongoManager = ResolveIOServer.getMongoManager();
308
+ if (!(mongoManager && typeof mongoManager.handleMongoReconnect === 'function')) return [3 /*break*/, 2];
309
+ return [4 /*yield*/, mongoManager.handleMongoReconnect(reason)];
310
+ case 1:
311
+ _a.sent();
312
+ _a.label = 2;
313
+ case 2: return [3 /*break*/, 4];
314
+ case 3:
315
+ error_1 = _a.sent();
316
+ console.error(new Date(), 'Mongo reconnect post-hook failed (mongo manager)', error_1);
317
+ return [3 /*break*/, 4];
318
+ case 4:
319
+ _a.trys.push([4, 7, , 8]);
320
+ mainServer = ResolveIOServer.getMainServer();
321
+ subscriptionManager = mainServer && typeof mainServer.getSubscriptionManager === 'function'
322
+ ? mainServer.getSubscriptionManager()
323
+ : null;
324
+ if (!(subscriptionManager && typeof subscriptionManager.handleMongoReconnect === 'function')) return [3 /*break*/, 6];
325
+ return [4 /*yield*/, subscriptionManager.handleMongoReconnect(reason)];
326
+ case 5:
327
+ _a.sent();
328
+ _a.label = 6;
329
+ case 6: return [3 /*break*/, 8];
330
+ case 7:
331
+ error_2 = _a.sent();
332
+ console.error(new Date(), 'Mongo reconnect post-hook failed (subscription manager)', error_2);
333
+ return [3 /*break*/, 8];
334
+ case 8: return [2 /*return*/];
335
+ }
336
+ });
337
+ });
338
+ };
339
+ ResolveIOServer.reconnectMongo = function () {
340
+ return __awaiter(this, arguments, void 0, function (reason, signal) {
341
+ var previousClient, signalSummary, attempt, client, err_1;
342
+ if (reason === void 0) { reason = 'unknown'; }
102
343
  return __generator(this, function (_a) {
103
344
  switch (_a.label) {
104
345
  case 0:
346
+ previousClient = ResolveIOServer.getMongoConnection();
347
+ signalSummary = ResolveIOServer.summarizeMongoSignal(signal);
105
348
  attempt = 0;
106
349
  _a.label = 1;
107
350
  case 1:
108
- if (!true) return [3 /*break*/, 7];
351
+ if (!true) return [3 /*break*/, 9];
109
352
  _a.label = 2;
110
353
  case 2:
111
- _a.trys.push([2, 4, , 6]);
354
+ _a.trys.push([2, 6, , 8]);
112
355
  return [4 /*yield*/, ResolveIOServer.connectMongo()];
113
356
  case 3:
114
357
  client = _a.sent();
115
358
  ResolveIOServer.setMongoConnection(client);
116
359
  ResolveIOServer.setMainDB(client.db(ResolveIOServer.getServerConfig()['DATABASE']));
117
- console.log(new Date(), 'Mongo reconnected');
118
- return [2 /*return*/];
360
+ return [4 /*yield*/, ResolveIOServer.closeMongoClientQuietly(previousClient)];
119
361
  case 4:
362
+ _a.sent();
363
+ return [4 /*yield*/, ResolveIOServer.notifyMongoReconnect(reason)];
364
+ case 5:
365
+ _a.sent();
366
+ console.log(new Date(), 'Mongo reconnected', { reason: reason, attempts: attempt + 1, signal: signalSummary });
367
+ return [2 /*return*/];
368
+ case 6:
120
369
  err_1 = _a.sent();
121
370
  attempt++;
122
- console.error(new Date(), 'Mongo reconnect failed', err_1);
371
+ console.error(new Date(), 'Mongo reconnect failed', { reason: reason, attempts: attempt, signal: signalSummary, error: ResolveIOServer.summarizeMongoSignal(err_1) });
123
372
  return [4 /*yield*/, ResolveIOServer.delay(Math.min(attempt * 1000, 10000))];
124
- case 5:
373
+ case 7:
374
+ _a.sent();
375
+ return [3 /*break*/, 8];
376
+ case 8: return [3 /*break*/, 1];
377
+ case 9: return [2 /*return*/];
378
+ }
379
+ });
380
+ });
381
+ };
382
+ ResolveIOServer.handleMongoDisconnect = function (err) {
383
+ return __awaiter(this, void 0, void 0, function () {
384
+ return __generator(this, function (_a) {
385
+ switch (_a.label) {
386
+ case 0: return [4 /*yield*/, ResolveIOServer.requestMongoReconnect('legacy-disconnect-signal', err)];
387
+ case 1:
125
388
  _a.sent();
126
- return [3 /*break*/, 6];
127
- case 6: return [3 /*break*/, 1];
128
- case 7: return [2 /*return*/];
389
+ return [2 /*return*/];
129
390
  }
130
391
  });
131
392
  });
@@ -146,7 +407,11 @@ var ResolveIOServer = /** @class */ (function () {
146
407
  { key: 'maxPoolSize', env: 'MONGO_MAX_POOL_SIZE', configKey: 'MONGO_MAX_POOL_SIZE' },
147
408
  { key: 'minPoolSize', env: 'MONGO_MIN_POOL_SIZE', configKey: 'MONGO_MIN_POOL_SIZE' },
148
409
  { key: 'waitQueueTimeoutMS', env: 'MONGO_WAIT_QUEUE_TIMEOUT_MS', configKey: 'MONGO_WAIT_QUEUE_TIMEOUT_MS' },
149
- { key: 'maxIdleTimeMS', env: 'MONGO_MAX_IDLE_TIME_MS', configKey: 'MONGO_MAX_IDLE_TIME_MS' }
410
+ { key: 'maxIdleTimeMS', env: 'MONGO_MAX_IDLE_TIME_MS', configKey: 'MONGO_MAX_IDLE_TIME_MS' },
411
+ { key: 'serverSelectionTimeoutMS', env: 'MONGO_SERVER_SELECTION_TIMEOUT_MS', configKey: 'MONGO_SERVER_SELECTION_TIMEOUT_MS' },
412
+ { key: 'connectTimeoutMS', env: 'MONGO_CONNECT_TIMEOUT_MS', configKey: 'MONGO_CONNECT_TIMEOUT_MS' },
413
+ { key: 'socketTimeoutMS', env: 'MONGO_SOCKET_TIMEOUT_MS', configKey: 'MONGO_SOCKET_TIMEOUT_MS' },
414
+ { key: 'heartbeatFrequencyMS', env: 'MONGO_HEARTBEAT_FREQUENCY_MS', configKey: 'MONGO_HEARTBEAT_FREQUENCY_MS' }
150
415
  ];
151
416
  try {
152
417
  for (var numericOptionKeys_1 = __values(numericOptionKeys), numericOptionKeys_1_1 = numericOptionKeys_1.next(); !numericOptionKeys_1_1.done; numericOptionKeys_1_1 = numericOptionKeys_1.next()) {
@@ -526,6 +791,9 @@ var ResolveIOServer = /** @class */ (function () {
526
791
  ResolveIOServer._sesMail = true;
527
792
  ResolveIOServer._publicProgram = false;
528
793
  ResolveIOServer._reconnecting = false;
794
+ ResolveIOServer._mongoReconnectPromise = null;
795
+ ResolveIOServer._lastMongoPoolClearedLogMs = 0;
796
+ ResolveIOServer.MONGO_POOL_CLEARED_DEBOUNCE_MS = 1000;
529
797
  return ResolveIOServer;
530
798
  }());
531
799
  exports.ResolveIOServer = ResolveIOServer;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/resolveio-server-app.ts"],"names":[],"mappings":"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","file":"resolveio-server-app.js","sourcesContent":["import { Db, MongoClient, MongoClientOptions } from 'mongodb';\nimport { LocalLogManager } from './managers/local-log.manager';\nimport { MongoManager } from './managers/mongo.manager';\nimport { ResolveIOMainServer } from './server-app';\n\nexport class ResolveIOServer {\n\tprivate static _serverConfig = null;\n\tprivate static _clientRoutes = [];\n\tprivate static _mongoConnection: MongoClient = null;\n\tprivate static _mainDB: Db = null;\n\tprivate static _mainServer = null;\n\tprivate static _localLogManager = null;\n\tprivate static _mongoManager = null;\n\tprivate static _client = '';\n\tprivate static _clientDir = '';\n\tprivate static _sesMail = true;\n\tprivate static _publicProgram = false;\n\n\tprivate static _reconnecting = false;\n\n\tprivate static async connectMongo(): Promise<MongoClient> {\n\t\tconst mongoUrl = ResolveIOServer.getServerConfig()['MONGO_URL'];\n\t\tconst clientOptions = ResolveIOServer.resolveMongoClientOptions();\n\t\tconst client = await MongoClient.connect(mongoUrl, clientOptions);\n\t\tclient.on('close', ResolveIOServer.handleMongoDisconnect);\n\t\tclient.on('error', ResolveIOServer.handleMongoDisconnect);\n\t\tclient.on('connectionPoolCleared', ResolveIOServer.handleMongoDisconnect);\n\t\treturn client;\n\t}\n\n\tprivate static async handleMongoDisconnect(err): Promise<void> {\n\t\tconsole.error(new Date(), 'Mongo connection lost', err);\n\t\tif (ResolveIOServer._reconnecting) {\n\t\t\treturn;\n\t\t}\n\n\t\tResolveIOServer._reconnecting = true;\n\n\t\ttry {\n\t\t\tawait ResolveIOServer.reconnectMongo();\n\t\t}\n\t\tfinally {\n\t\t\tResolveIOServer._reconnecting = false;\n\t\t}\n\t}\n\n\tprivate static async reconnectMongo(): Promise<void> {\n\t\tlet attempt = 0;\n\n\t\twhile (true) {\n\t\t\ttry {\n\t\t\t\tconst client = await ResolveIOServer.connectMongo();\n\t\t\t\tResolveIOServer.setMongoConnection(client);\n\t\t\t\tResolveIOServer.setMainDB(client.db(ResolveIOServer.getServerConfig()['DATABASE']));\n\t\t\t\tconsole.log(new Date(), 'Mongo reconnected');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tattempt++;\n\t\t\t\tconsole.error(new Date(), 'Mongo reconnect failed', err);\n\t\t\t\tawait ResolveIOServer.delay(Math.min(attempt * 1000, 10000));\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate static async delay(ms: number) {\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\treturn new Promise(resolve => setTimeout(resolve, ms));\n\t}\n\n\tprivate static resolveMongoClientOptions(): MongoClientOptions | undefined {\n\t\tconst config = ResolveIOServer.getServerConfig();\n\t\tconst options: MongoClientOptions = {};\n\n\t\tconst numericOptionKeys: Array<{ key: keyof MongoClientOptions; env: string; configKey: string }> = [\n\t\t\t{ key: 'maxPoolSize', env: 'MONGO_MAX_POOL_SIZE', configKey: 'MONGO_MAX_POOL_SIZE' },\n\t\t\t{ key: 'minPoolSize', env: 'MONGO_MIN_POOL_SIZE', configKey: 'MONGO_MIN_POOL_SIZE' },\n\t\t\t{ key: 'waitQueueTimeoutMS', env: 'MONGO_WAIT_QUEUE_TIMEOUT_MS', configKey: 'MONGO_WAIT_QUEUE_TIMEOUT_MS' },\n\t\t\t{ key: 'maxIdleTimeMS', env: 'MONGO_MAX_IDLE_TIME_MS', configKey: 'MONGO_MAX_IDLE_TIME_MS' }\n\t\t];\n\n\t\tfor (const option of numericOptionKeys) {\n\t\t\tconst value = ResolveIOServer.pickMongoOptionValue(option.env, option.configKey);\n\t\t\tif (typeof value === 'number') {\n\t\t\t\tObject.assign(options, { [option.key]: value });\n\t\t\t}\n\t\t}\n\n\t\tconst booleanOptionKeys: Array<{ key: keyof MongoClientOptions; env: string; configKey: string }> = [\n\t\t\t{ key: 'retryWrites', env: 'MONGO_RETRY_WRITES', configKey: 'MONGO_RETRY_WRITES' }\n\t\t];\n\n\t\tfor (const option of booleanOptionKeys) {\n\t\t\tconst value = ResolveIOServer.pickMongoBooleanOptionValue(option.env, option.configKey);\n\t\t\tif (typeof value === 'boolean') {\n\t\t\t\tObject.assign(options, { [option.key]: value });\n\t\t\t}\n\t\t}\n\n\t\tconst structuredOptions = config?.['MONGO_CLIENT_OPTIONS'];\n\t\tif (structuredOptions && typeof structuredOptions === 'object' && !Array.isArray(structuredOptions)) {\n\t\t\tObject.assign(options, structuredOptions);\n\t\t}\n\n\t\treturn Object.keys(options).length ? options : undefined;\n\t}\n\n\tprivate static pickMongoOptionValue(envKey: string, configKey: string): number | undefined {\n\t\tconst rawEnv = process.env[envKey];\n\t\tif (rawEnv && !Number.isNaN(Number(rawEnv))) {\n\t\t\tconst parsed = parseInt(rawEnv, 10);\n\t\t\treturn Number.isFinite(parsed) && parsed > 0 ? parsed : undefined;\n\t\t}\n\n\t\tconst config = ResolveIOServer.getServerConfig();\n\t\tconst configValue = config?.[configKey];\n\t\tif (typeof configValue === 'number' && Number.isFinite(configValue) && configValue > 0) {\n\t\t\treturn configValue;\n\t\t}\n\n\t\tif (typeof configValue === 'string' && configValue.trim().length && !Number.isNaN(Number(configValue))) {\n\t\t\tconst parsed = parseInt(configValue, 10);\n\t\t\treturn Number.isFinite(parsed) && parsed > 0 ? parsed : undefined;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tprivate static pickMongoBooleanOptionValue(envKey: string, configKey: string): boolean | undefined {\n\t\tconst rawEnv = process.env[envKey];\n\t\tif (typeof rawEnv === 'string' && rawEnv.length) {\n\t\t\tif (['true', '1', 'yes'].includes(rawEnv.toLowerCase())) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\telse if (['false', '0', 'no'].includes(rawEnv.toLowerCase())) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tconst config = ResolveIOServer.getServerConfig();\n\t\tconst configValue = config?.[configKey];\n\t\tif (typeof configValue === 'boolean') {\n\t\t\treturn configValue;\n\t\t}\n\n\t\tif (typeof configValue === 'string' && configValue.length) {\n\t\t\tif (['true', '1', 'yes'].includes(configValue.toLowerCase())) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\telse if (['false', '0', 'no'].includes(configValue.toLowerCase())) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tconstructor() {}\n\t\n\tpublic static async create(serverConfig, clientRoutes: string[], client: string, clientDir, sesMail = true, publicProgram = false) {\n\t\tconst resolveioServer = new ResolveIOServer();\n\t\tawait resolveioServer.initialize(serverConfig, clientRoutes, client, clientDir, sesMail, publicProgram);\n\t\treturn resolveioServer;\n\t}\n\n\tprivate async initialize(serverConfig, clientRoutes: string[], client: string, clientDir, sesMail = true, publicProgram = false) {\n\t\tResolveIOServer._serverConfig = serverConfig;\n\t\tResolveIOServer._clientRoutes = clientRoutes;\n\t\tResolveIOServer._client = client;\n\t\tResolveIOServer._clientDir = clientDir;\n\t\tResolveIOServer._sesMail = sesMail;\n\t\tResolveIOServer._publicProgram = publicProgram;\n\t\t\n\t\ttry {\n\t\t\tlet dbConnection = await ResolveIOServer.connectMongo();\n\t\t\tprocess.removeAllListeners('unhandledRejection');\n\n\t\t\tResolveIOServer.setMongoConnection(dbConnection);\n\t\t\tResolveIOServer.setMainDB(dbConnection.db(ResolveIOServer.getServerConfig()['DATABASE']));\n\n\t\t\t// dbConnection\n\t\t\t// .on('error', error => {\n\t\t\t// \tif (typeof error.message === 'string' && error.message.includes('ns does not exist')) {\n\t\t\t// \t\treturn;\n\t\t\t// \t}\n\t\t\t\t\t\n\t\t\t// \t// Otherwise log normally\n\t\t\t// \tthrow error;\n\t\t\t// })\n\t\t\t// .on('close', () => process.exit(1));\n\t\n\t\t\tlet LocalLogManager = (await import('./managers/local-log.manager')).LocalLogManager;\n\t\t\tlet localLogManager = LocalLogManager.create();\n\t\t\tResolveIOServer.setLocalLogManager(localLogManager);\n\n\t\t\tlet MongoManager = (await import('./managers/mongo.manager')).MongoManager;\n\t\t\tlet mongoManager = await MongoManager.create();\n\t\t\tResolveIOServer.setMongoManager(mongoManager);\n\t\t\t\n\t\t\tlet serverApp = (await import('./server-app')).ResolveIOMainServer;\n\t\t\tlet app = await serverApp.create();\n\t\t\tResolveIOServer.setMainServer(app);\n\t\t\t\n\t\t\treturn true;\n\t\t}\n\t\tcatch (err) {\n\t\t\terr.message = 'Error in ResolveIOServer (initialize): Mongo Client Connect And Run ResolveIO Server App Library - ' + err.message;\n\t\t\tconsole.error(err.message);\n\t\t\tprocess.exit(1);\n\t\t}\n\t}\n\n\tpublic static getClientName() {\n\t\treturn this._client;\n\t}\n\n\tpublic static getMainServer(): ResolveIOMainServer {\n\t\treturn ResolveIOServer._mainServer;\n\t}\n\n\tpublic static setMainServer(mainServer: ResolveIOMainServer) {\n\t\tResolveIOServer._mainServer = mainServer;\n\t}\n\n\tpublic static setMongoConnection(mongoConnection: MongoClient) {\n\t\tResolveIOServer._mongoConnection = mongoConnection;\n\t}\n\n\tpublic static getMongoConnection(): MongoClient {\n\t\treturn ResolveIOServer._mongoConnection;\n\t}\n\n\tpublic static getMainDB(): Db {\n\t\treturn ResolveIOServer._mainDB;\n\t}\n\n\tpublic static setMainDB(mainDB: Db) {\n\t\tResolveIOServer._mainDB = mainDB\n\t}\n\n\tpublic static getMongoManager(): MongoManager {\n\t\treturn ResolveIOServer._mongoManager;\n\t}\n\n\tpublic static setMongoManager(mongoManager: MongoManager) {\n\t\tResolveIOServer._mongoManager = mongoManager;\n\t}\n\n\tpublic static getLocalLogManager(): LocalLogManager {\n\t\treturn ResolveIOServer._localLogManager;\n\t}\n\n\tpublic static setLocalLogManager(localLogManager: LocalLogManager) {\n\t\tResolveIOServer._localLogManager = localLogManager;\n\t}\n\n\tpublic static getServerConfig() {\n\t\treturn ResolveIOServer._serverConfig;\n\t}\n\n\tpublic static getLogStorageMode(): 'offline' | 'direct' {\n\t\tconst configuredMode = this.resolveConfiguredLogStorageMode();\n\t\tif (configuredMode === 'offline' || configuredMode === 'direct') {\n\t\t\treturn configuredMode;\n\t\t}\n\n\t\treturn this.resolveLegacyLogStorageMode();\n\t}\n\n\tpublic static shouldWriteLogsOffline(): boolean {\n\t\treturn this.getLogStorageMode() === 'offline';\n\t}\n\n\tprivate static resolveConfiguredLogStorageMode(): 'offline' | 'direct' | 'auto' {\n\t\tconst config = ResolveIOServer.getServerConfig() || {};\n\t\tconst configuredValue = process.env.RESOLVEIO_LOG_STORAGE_MODE\n\t\t\t|| process.env.LOG_STORAGE_MODE\n\t\t\t|| config['RESOLVEIO_LOG_STORAGE_MODE']\n\t\t\t|| config['LOG_STORAGE_MODE']\n\t\t\t|| config['LOCAL_LOG_STORAGE_MODE']\n\t\t\t|| '';\n\t\tconst normalized = String(configuredValue || '').trim().toLowerCase();\n\n\t\tif (!normalized || normalized === 'auto') {\n\t\t\treturn 'auto';\n\t\t}\n\n\t\tif (normalized === 'direct' || normalized === 'database' || normalized === 'db') {\n\t\t\treturn 'direct';\n\t\t}\n\n\t\tif (normalized === 'offline' || normalized === 'offload' || normalized === 'file' || normalized === 'local') {\n\t\t\treturn 'offline';\n\t\t}\n\n\t\treturn 'auto';\n\t}\n\n\tprivate static resolveLegacyLogStorageMode(): 'offline' | 'direct' {\n\t\tconst rootUrl = ResolveIOServer.getServerConfig()?.['ROOT_URL'];\n\t\tif (rootUrl !== 'https://resolveio.com' && rootUrl !== 'http://localhost:4200') {\n\t\t\treturn 'offline';\n\t\t}\n\t\treturn 'direct';\n\t}\n\n\tpublic static getInstanceHost(): string {\n\t\tconst config = ResolveIOServer.getServerConfig() || {};\n\t\tconst explicitHost = this.findFirstNonEmptyString([\n\t\t\tprocess.env.RESOLVEIO_INSTANCE_HOST,\n\t\t\tprocess.env.INSTANCE_HOST,\n\t\t\tconfig['RESOLVEIO_INSTANCE_HOST'],\n\t\t\tconfig['INSTANCE_HOST'],\n\t\t\tconfig['SERVER_HOST']\n\t\t]);\n\t\tif (explicitHost) {\n\t\t\treturn explicitHost;\n\t\t}\n\n\t\tconst hostFromUrl = this.extractHostName(this.findFirstNonEmptyString([\n\t\t\tprocess.env.RESOLVEIO_SERVER_URL,\n\t\t\tprocess.env.SERVER_URL,\n\t\t\tconfig['RESOLVEIO_SERVER_URL'],\n\t\t\tconfig['SERVER_URL'],\n\t\t\tprocess.env.ROOT_URL,\n\t\t\tconfig['ROOT_URL']\n\t\t]));\n\t\tif (hostFromUrl) {\n\t\t\treturn hostFromUrl;\n\t\t}\n\n\t\tconst envHostName = this.findFirstNonEmptyString([\n\t\t\tprocess.env.EC2_PUBLIC_HOSTNAME,\n\t\t\tprocess.env.HOSTNAME\n\t\t]);\n\t\tif (envHostName) {\n\t\t\treturn envHostName;\n\t\t}\n\n\t\treturn 'local-instance';\n\t}\n\n\tpublic static getServerApiBaseUrl(): string {\n\t\tconst config = ResolveIOServer.getServerConfig() || {};\n\t\tconst explicitBaseUrl = this.normalizeBaseUrl(this.findFirstNonEmptyString([\n\t\t\tprocess.env.RESOLVEIO_SERVER_URL,\n\t\t\tprocess.env.SERVER_URL,\n\t\t\tconfig['RESOLVEIO_SERVER_URL'],\n\t\t\tconfig['SERVER_URL']\n\t\t]));\n\t\tif (explicitBaseUrl) {\n\t\t\treturn explicitBaseUrl;\n\t\t}\n\n\t\tconst normalizedRootUrl = this.normalizeBaseUrl(this.findFirstNonEmptyString([\n\t\t\tprocess.env.ROOT_URL,\n\t\t\tconfig['ROOT_URL']\n\t\t]));\n\t\tif (normalizedRootUrl) {\n\t\t\ttry {\n\t\t\t\tconst parsedRootUrl = new URL(normalizedRootUrl);\n\t\t\t\tif (parsedRootUrl.port === '4200') {\n\t\t\t\t\tparsedRootUrl.port = '8080';\n\t\t\t\t}\n\n\t\t\t\tparsedRootUrl.pathname = '';\n\t\t\t\tparsedRootUrl.search = '';\n\t\t\t\tparsedRootUrl.hash = '';\n\t\t\t\treturn parsedRootUrl.toString().replace(/\\/$/, '');\n\t\t\t}\n\t\t\tcatch {\n\t\t\t\treturn normalizedRootUrl;\n\t\t\t}\n\t\t}\n\n\t\tconst defaultPort = this.findFirstNonEmptyString([\n\t\t\tprocess.env.PORT,\n\t\t\tconfig['PORT']\n\t\t]) || '8080';\n\t\treturn `http://127.0.0.1:${defaultPort}`;\n\t}\n\n\tpublic static buildServerApiUrl(pathname: string): string {\n\t\tconst normalizedPath = pathname && pathname.startsWith('/')\n\t\t\t? pathname\n\t\t\t: `/${pathname || ''}`;\n\t\treturn this.getServerApiBaseUrl().replace(/\\/$/, '') + normalizedPath;\n\t}\n\n\tprivate static findFirstNonEmptyString(values: any[]): string | null {\n\t\tfor (const value of values || []) {\n\t\t\tif (typeof value === 'string' && value.trim().length) {\n\t\t\t\treturn value.trim();\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate static normalizeBaseUrl(value?: string | null): string | null {\n\t\tif (!value || typeof value !== 'string') {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst trimmedValue = value.trim();\n\t\tif (!trimmedValue) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst hasScheme = /^[a-zA-Z][a-zA-Z\\d+\\-.]*:\\/\\//.test(trimmedValue);\n\t\tconst candidate = hasScheme ? trimmedValue : `http://${trimmedValue}`;\n\t\ttry {\n\t\t\tconst parsed = new URL(candidate);\n\t\t\tparsed.pathname = '';\n\t\t\tparsed.search = '';\n\t\t\tparsed.hash = '';\n\t\t\treturn parsed.toString().replace(/\\/$/, '');\n\t\t}\n\t\tcatch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tprivate static extractHostName(value?: string | null): string | null {\n\t\tconst normalizedBase = this.normalizeBaseUrl(value || '');\n\t\tif (!normalizedBase) {\n\t\t\treturn null;\n\t\t}\n\n\t\ttry {\n\t\t\treturn new URL(normalizedBase).hostname || null;\n\t\t}\n\t\tcatch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tpublic static getClientRoutes() {\n\t\treturn ResolveIOServer._clientRoutes;\n\t}\n\n\tpublic static getClientDir(): string {\n\t\treturn ResolveIOServer._clientDir;\n\t}\n\n\tpublic static getSESMail(): boolean {\n\t\treturn ResolveIOServer._sesMail;\n\t}\n\n\tpublic static getpublicProgram(): boolean {\n\t\treturn ResolveIOServer._publicProgram;\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../../src/resolveio-server-app.ts"],"names":[],"mappings":"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","file":"resolveio-server-app.js","sourcesContent":["import { Db, MongoClient, MongoClientOptions } from 'mongodb';\nimport { LocalLogManager } from './managers/local-log.manager';\nimport { MongoManager } from './managers/mongo.manager';\nimport { ResolveIOMainServer } from './server-app';\n\nexport class ResolveIOServer {\n\tprivate static _serverConfig = null;\n\tprivate static _clientRoutes = [];\n\tprivate static _mongoConnection: MongoClient = null;\n\tprivate static _mainDB: Db = null;\n\tprivate static _mainServer = null;\n\tprivate static _localLogManager = null;\n\tprivate static _mongoManager = null;\n\tprivate static _client = '';\n\tprivate static _clientDir = '';\n\tprivate static _sesMail = true;\n\tprivate static _publicProgram = false;\n\n\tprivate static _reconnecting = false;\n\tprivate static _mongoReconnectPromise: Promise<void> = null;\n\tprivate static _lastMongoPoolClearedLogMs = 0;\n\tprivate static readonly MONGO_POOL_CLEARED_DEBOUNCE_MS = 1000;\n\n\tprivate static async connectMongo(): Promise<MongoClient> {\n\t\tconst mongoUrl = ResolveIOServer.getServerConfig()['MONGO_URL'];\n\t\tconst clientOptions = ResolveIOServer.resolveMongoClientOptions();\n\t\tconst client = await MongoClient.connect(mongoUrl, clientOptions);\n\t\tResolveIOServer.attachMongoListeners(client);\n\t\treturn client;\n\t}\n\n\tprivate static attachMongoListeners(client: MongoClient): void {\n\t\tif (!client) {\n\t\t\treturn;\n\t\t}\n\n\t\tclient.on('close', ResolveIOServer.handleMongoClose);\n\t\tclient.on('error', ResolveIOServer.handleMongoError);\n\t\tclient.on('connectionPoolCleared', ResolveIOServer.handleMongoPoolCleared);\n\t\tclient.on('serverClosed', ResolveIOServer.handleMongoServerClosed);\n\t\tclient.on('topologyClosed', ResolveIOServer.handleMongoTopologyClosed);\n\t}\n\n\tprivate static detachMongoListeners(client: MongoClient): void {\n\t\tif (!client) {\n\t\t\treturn;\n\t\t}\n\n\t\tclient.removeListener('close', ResolveIOServer.handleMongoClose);\n\t\tclient.removeListener('error', ResolveIOServer.handleMongoError);\n\t\tclient.removeListener('connectionPoolCleared', ResolveIOServer.handleMongoPoolCleared);\n\t\tclient.removeListener('serverClosed', ResolveIOServer.handleMongoServerClosed);\n\t\tclient.removeListener('topologyClosed', ResolveIOServer.handleMongoTopologyClosed);\n\t}\n\n\tprivate static async handleMongoClose(signal?: any): Promise<void> {\n\t\tawait ResolveIOServer.handleMongoDisconnectSignal('close', signal);\n\t}\n\n\tprivate static async handleMongoError(signal?: any): Promise<void> {\n\t\tawait ResolveIOServer.handleMongoDisconnectSignal('error', signal);\n\t}\n\n\tprivate static async handleMongoServerClosed(signal?: any): Promise<void> {\n\t\tawait ResolveIOServer.handleMongoDisconnectSignal('serverClosed', signal);\n\t}\n\n\tprivate static async handleMongoTopologyClosed(signal?: any): Promise<void> {\n\t\tawait ResolveIOServer.handleMongoDisconnectSignal('topologyClosed', signal);\n\t}\n\n\tprivate static async handleMongoPoolCleared(signal?: any): Promise<void> {\n\t\tconst now = Date.now();\n\t\tconst summary = ResolveIOServer.summarizeMongoSignal(signal);\n\n\t\tif (!ResolveIOServer._lastMongoPoolClearedLogMs || (now - ResolveIOServer._lastMongoPoolClearedLogMs) >= ResolveIOServer.MONGO_POOL_CLEARED_DEBOUNCE_MS) {\n\t\t\tResolveIOServer._lastMongoPoolClearedLogMs = now;\n\t\t\tconsole.warn(new Date(), 'Mongo connection pool cleared', summary);\n\t\t}\n\n\t\tawait ResolveIOServer.handleMongoDisconnectSignal('connectionPoolCleared', signal, { verifyBeforeReconnect: true });\n\t}\n\n\tprivate static async handleMongoDisconnectSignal(reason: string, signal?: any, options: { verifyBeforeReconnect?: boolean } = {}): Promise<void> {\n\t\tif (options.verifyBeforeReconnect) {\n\t\t\tconst isHealthy = await ResolveIOServer.isMongoConnectionHealthy();\n\t\t\tif (isHealthy) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tawait ResolveIOServer.requestMongoReconnect(reason, signal);\n\t}\n\n\tprivate static async isMongoConnectionHealthy(timeoutMs = 2500): Promise<boolean> {\n\t\tconst client = ResolveIOServer.getMongoConnection();\n\t\tif (!client) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst pingDatabase = ResolveIOServer.getServerConfig()?.['DATABASE'] || 'admin';\n\t\ttry {\n\t\t\tconst timeoutPromise = (async () => {\n\t\t\t\tawait ResolveIOServer.delay(timeoutMs);\n\t\t\t\tthrow new Error('mongo-ping-timeout');\n\t\t\t})();\n\t\t\tawait Promise.race([\n\t\t\t\tclient.db(pingDatabase).command({ ping: 1 }),\n\t\t\t\ttimeoutPromise\n\t\t\t]);\n\t\t\treturn true;\n\t\t}\n\t\tcatch {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic static async requestMongoReconnect(reason = 'unknown', signal?: any): Promise<void> {\n\t\tconst reconnectPromise = ResolveIOServer._mongoReconnectPromise;\n\t\tif (reconnectPromise !== null) {\n\t\t\treturn reconnectPromise;\n\t\t}\n\n\t\tconst signalSummary = ResolveIOServer.summarizeMongoSignal(signal);\n\n\t\tResolveIOServer._reconnecting = true;\n\t\tResolveIOServer._mongoReconnectPromise = (async () => {\n\t\t\ttry {\n\t\t\t\tconsole.error(new Date(), 'Mongo connection lost', { reason, signal: signalSummary });\n\t\t\t\tawait ResolveIOServer.reconnectMongo(reason, signal);\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tResolveIOServer._reconnecting = false;\n\t\t\t\tResolveIOServer._mongoReconnectPromise = null;\n\t\t\t}\n\t\t})();\n\n\t\treturn ResolveIOServer._mongoReconnectPromise;\n\t}\n\n\tprivate static summarizeMongoSignal(signal?: any): any {\n\t\tif (!signal) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (typeof signal !== 'object') {\n\t\t\treturn signal;\n\t\t}\n\n\t\treturn {\n\t\t\tname: signal.name,\n\t\t\tmessage: signal.message,\n\t\t\tcode: signal.code,\n\t\t\tcodeName: signal.codeName,\n\t\t\taddress: signal.address,\n\t\t\tinterruptInUseConnections: signal.interruptInUseConnections\n\t\t};\n\t}\n\n\tprivate static async closeMongoClientQuietly(client: MongoClient): Promise<void> {\n\t\tif (!client) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tResolveIOServer.detachMongoListeners(client);\n\t\t\tawait client.close(false);\n\t\t}\n\t\tcatch {\n\t\t\t// ignore old client close errors\n\t\t}\n\t}\n\n\tprivate static async notifyMongoReconnect(reason: string): Promise<void> {\n\t\ttry {\n\t\t\tconst mongoManager = ResolveIOServer.getMongoManager();\n\t\t\tif (mongoManager && typeof (mongoManager as any).handleMongoReconnect === 'function') {\n\t\t\t\tawait (mongoManager as any).handleMongoReconnect(reason);\n\t\t\t}\n\t\t}\n\t\tcatch (error) {\n\t\t\tconsole.error(new Date(), 'Mongo reconnect post-hook failed (mongo manager)', error);\n\t\t}\n\n\t\ttry {\n\t\t\tconst mainServer = ResolveIOServer.getMainServer();\n\t\t\tconst subscriptionManager = mainServer && typeof mainServer.getSubscriptionManager === 'function'\n\t\t\t\t? mainServer.getSubscriptionManager()\n\t\t\t\t: null;\n\t\t\tif (subscriptionManager && typeof (subscriptionManager as any).handleMongoReconnect === 'function') {\n\t\t\t\tawait (subscriptionManager as any).handleMongoReconnect(reason);\n\t\t\t}\n\t\t}\n\t\tcatch (error) {\n\t\t\tconsole.error(new Date(), 'Mongo reconnect post-hook failed (subscription manager)', error);\n\t\t}\n\t}\n\n\tprivate static async reconnectMongo(reason = 'unknown', signal?: any): Promise<void> {\n\t\tconst previousClient = ResolveIOServer.getMongoConnection();\n\t\tconst signalSummary = ResolveIOServer.summarizeMongoSignal(signal);\n\t\tlet attempt = 0;\n\n\t\twhile (true) {\n\t\t\ttry {\n\t\t\t\tconst client = await ResolveIOServer.connectMongo();\n\t\t\t\tResolveIOServer.setMongoConnection(client);\n\t\t\t\tResolveIOServer.setMainDB(client.db(ResolveIOServer.getServerConfig()['DATABASE']));\n\t\t\t\tawait ResolveIOServer.closeMongoClientQuietly(previousClient);\n\t\t\t\tawait ResolveIOServer.notifyMongoReconnect(reason);\n\t\t\t\tconsole.log(new Date(), 'Mongo reconnected', { reason, attempts: attempt + 1, signal: signalSummary });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tattempt++;\n\t\t\t\tconsole.error(new Date(), 'Mongo reconnect failed', { reason, attempts: attempt, signal: signalSummary, error: ResolveIOServer.summarizeMongoSignal(err) });\n\t\t\t\tawait ResolveIOServer.delay(Math.min(attempt * 1000, 10000));\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate static async handleMongoDisconnect(err): Promise<void> {\n\t\tawait ResolveIOServer.requestMongoReconnect('legacy-disconnect-signal', err);\n\t}\n\n\tprivate static async delay(ms: number) {\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\treturn new Promise(resolve => setTimeout(resolve, ms));\n\t}\n\n\tprivate static resolveMongoClientOptions(): MongoClientOptions | undefined {\n\t\tconst config = ResolveIOServer.getServerConfig();\n\t\tconst options: MongoClientOptions = {};\n\n\t\tconst numericOptionKeys: Array<{ key: keyof MongoClientOptions; env: string; configKey: string }> = [\n\t\t\t{ key: 'maxPoolSize', env: 'MONGO_MAX_POOL_SIZE', configKey: 'MONGO_MAX_POOL_SIZE' },\n\t\t\t{ key: 'minPoolSize', env: 'MONGO_MIN_POOL_SIZE', configKey: 'MONGO_MIN_POOL_SIZE' },\n\t\t\t{ key: 'waitQueueTimeoutMS', env: 'MONGO_WAIT_QUEUE_TIMEOUT_MS', configKey: 'MONGO_WAIT_QUEUE_TIMEOUT_MS' },\n\t\t\t{ key: 'maxIdleTimeMS', env: 'MONGO_MAX_IDLE_TIME_MS', configKey: 'MONGO_MAX_IDLE_TIME_MS' },\n\t\t\t{ key: 'serverSelectionTimeoutMS', env: 'MONGO_SERVER_SELECTION_TIMEOUT_MS', configKey: 'MONGO_SERVER_SELECTION_TIMEOUT_MS' },\n\t\t\t{ key: 'connectTimeoutMS', env: 'MONGO_CONNECT_TIMEOUT_MS', configKey: 'MONGO_CONNECT_TIMEOUT_MS' },\n\t\t\t{ key: 'socketTimeoutMS', env: 'MONGO_SOCKET_TIMEOUT_MS', configKey: 'MONGO_SOCKET_TIMEOUT_MS' },\n\t\t\t{ key: 'heartbeatFrequencyMS', env: 'MONGO_HEARTBEAT_FREQUENCY_MS', configKey: 'MONGO_HEARTBEAT_FREQUENCY_MS' }\n\t\t];\n\n\t\tfor (const option of numericOptionKeys) {\n\t\t\tconst value = ResolveIOServer.pickMongoOptionValue(option.env, option.configKey);\n\t\t\tif (typeof value === 'number') {\n\t\t\t\tObject.assign(options, { [option.key]: value });\n\t\t\t}\n\t\t}\n\n\t\tconst booleanOptionKeys: Array<{ key: keyof MongoClientOptions; env: string; configKey: string }> = [\n\t\t\t{ key: 'retryWrites', env: 'MONGO_RETRY_WRITES', configKey: 'MONGO_RETRY_WRITES' }\n\t\t];\n\n\t\tfor (const option of booleanOptionKeys) {\n\t\t\tconst value = ResolveIOServer.pickMongoBooleanOptionValue(option.env, option.configKey);\n\t\t\tif (typeof value === 'boolean') {\n\t\t\t\tObject.assign(options, { [option.key]: value });\n\t\t\t}\n\t\t}\n\n\t\tconst structuredOptions = config?.['MONGO_CLIENT_OPTIONS'];\n\t\tif (structuredOptions && typeof structuredOptions === 'object' && !Array.isArray(structuredOptions)) {\n\t\t\tObject.assign(options, structuredOptions);\n\t\t}\n\n\t\treturn Object.keys(options).length ? options : undefined;\n\t}\n\n\tprivate static pickMongoOptionValue(envKey: string, configKey: string): number | undefined {\n\t\tconst rawEnv = process.env[envKey];\n\t\tif (rawEnv && !Number.isNaN(Number(rawEnv))) {\n\t\t\tconst parsed = parseInt(rawEnv, 10);\n\t\t\treturn Number.isFinite(parsed) && parsed > 0 ? parsed : undefined;\n\t\t}\n\n\t\tconst config = ResolveIOServer.getServerConfig();\n\t\tconst configValue = config?.[configKey];\n\t\tif (typeof configValue === 'number' && Number.isFinite(configValue) && configValue > 0) {\n\t\t\treturn configValue;\n\t\t}\n\n\t\tif (typeof configValue === 'string' && configValue.trim().length && !Number.isNaN(Number(configValue))) {\n\t\t\tconst parsed = parseInt(configValue, 10);\n\t\t\treturn Number.isFinite(parsed) && parsed > 0 ? parsed : undefined;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tprivate static pickMongoBooleanOptionValue(envKey: string, configKey: string): boolean | undefined {\n\t\tconst rawEnv = process.env[envKey];\n\t\tif (typeof rawEnv === 'string' && rawEnv.length) {\n\t\t\tif (['true', '1', 'yes'].includes(rawEnv.toLowerCase())) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\telse if (['false', '0', 'no'].includes(rawEnv.toLowerCase())) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tconst config = ResolveIOServer.getServerConfig();\n\t\tconst configValue = config?.[configKey];\n\t\tif (typeof configValue === 'boolean') {\n\t\t\treturn configValue;\n\t\t}\n\n\t\tif (typeof configValue === 'string' && configValue.length) {\n\t\t\tif (['true', '1', 'yes'].includes(configValue.toLowerCase())) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\telse if (['false', '0', 'no'].includes(configValue.toLowerCase())) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tconstructor() {}\n\t\n\tpublic static async create(serverConfig, clientRoutes: string[], client: string, clientDir, sesMail = true, publicProgram = false) {\n\t\tconst resolveioServer = new ResolveIOServer();\n\t\tawait resolveioServer.initialize(serverConfig, clientRoutes, client, clientDir, sesMail, publicProgram);\n\t\treturn resolveioServer;\n\t}\n\n\tprivate async initialize(serverConfig, clientRoutes: string[], client: string, clientDir, sesMail = true, publicProgram = false) {\n\t\tResolveIOServer._serverConfig = serverConfig;\n\t\tResolveIOServer._clientRoutes = clientRoutes;\n\t\tResolveIOServer._client = client;\n\t\tResolveIOServer._clientDir = clientDir;\n\t\tResolveIOServer._sesMail = sesMail;\n\t\tResolveIOServer._publicProgram = publicProgram;\n\t\t\n\t\ttry {\n\t\t\tlet dbConnection = await ResolveIOServer.connectMongo();\n\t\t\tprocess.removeAllListeners('unhandledRejection');\n\n\t\t\tResolveIOServer.setMongoConnection(dbConnection);\n\t\t\tResolveIOServer.setMainDB(dbConnection.db(ResolveIOServer.getServerConfig()['DATABASE']));\n\n\t\t\t// dbConnection\n\t\t\t// .on('error', error => {\n\t\t\t// \tif (typeof error.message === 'string' && error.message.includes('ns does not exist')) {\n\t\t\t// \t\treturn;\n\t\t\t// \t}\n\t\t\t\t\t\n\t\t\t// \t// Otherwise log normally\n\t\t\t// \tthrow error;\n\t\t\t// })\n\t\t\t// .on('close', () => process.exit(1));\n\t\n\t\t\tlet LocalLogManager = (await import('./managers/local-log.manager')).LocalLogManager;\n\t\t\tlet localLogManager = LocalLogManager.create();\n\t\t\tResolveIOServer.setLocalLogManager(localLogManager);\n\n\t\t\tlet MongoManager = (await import('./managers/mongo.manager')).MongoManager;\n\t\t\tlet mongoManager = await MongoManager.create();\n\t\t\tResolveIOServer.setMongoManager(mongoManager);\n\t\t\t\n\t\t\tlet serverApp = (await import('./server-app')).ResolveIOMainServer;\n\t\t\tlet app = await serverApp.create();\n\t\t\tResolveIOServer.setMainServer(app);\n\t\t\t\n\t\t\treturn true;\n\t\t}\n\t\tcatch (err) {\n\t\t\terr.message = 'Error in ResolveIOServer (initialize): Mongo Client Connect And Run ResolveIO Server App Library - ' + err.message;\n\t\t\tconsole.error(err.message);\n\t\t\tprocess.exit(1);\n\t\t}\n\t}\n\n\tpublic static getClientName() {\n\t\treturn this._client;\n\t}\n\n\tpublic static getMainServer(): ResolveIOMainServer {\n\t\treturn ResolveIOServer._mainServer;\n\t}\n\n\tpublic static setMainServer(mainServer: ResolveIOMainServer) {\n\t\tResolveIOServer._mainServer = mainServer;\n\t}\n\n\tpublic static setMongoConnection(mongoConnection: MongoClient) {\n\t\tResolveIOServer._mongoConnection = mongoConnection;\n\t}\n\n\tpublic static getMongoConnection(): MongoClient {\n\t\treturn ResolveIOServer._mongoConnection;\n\t}\n\n\tpublic static getMainDB(): Db {\n\t\treturn ResolveIOServer._mainDB;\n\t}\n\n\tpublic static setMainDB(mainDB: Db) {\n\t\tResolveIOServer._mainDB = mainDB\n\t}\n\n\tpublic static getMongoManager(): MongoManager {\n\t\treturn ResolveIOServer._mongoManager;\n\t}\n\n\tpublic static setMongoManager(mongoManager: MongoManager) {\n\t\tResolveIOServer._mongoManager = mongoManager;\n\t}\n\n\tpublic static getLocalLogManager(): LocalLogManager {\n\t\treturn ResolveIOServer._localLogManager;\n\t}\n\n\tpublic static setLocalLogManager(localLogManager: LocalLogManager) {\n\t\tResolveIOServer._localLogManager = localLogManager;\n\t}\n\n\tpublic static getServerConfig() {\n\t\treturn ResolveIOServer._serverConfig;\n\t}\n\n\tpublic static getLogStorageMode(): 'offline' | 'direct' {\n\t\tconst configuredMode = this.resolveConfiguredLogStorageMode();\n\t\tif (configuredMode === 'offline' || configuredMode === 'direct') {\n\t\t\treturn configuredMode;\n\t\t}\n\n\t\treturn this.resolveLegacyLogStorageMode();\n\t}\n\n\tpublic static shouldWriteLogsOffline(): boolean {\n\t\treturn this.getLogStorageMode() === 'offline';\n\t}\n\n\tprivate static resolveConfiguredLogStorageMode(): 'offline' | 'direct' | 'auto' {\n\t\tconst config = ResolveIOServer.getServerConfig() || {};\n\t\tconst configuredValue = process.env.RESOLVEIO_LOG_STORAGE_MODE\n\t\t\t|| process.env.LOG_STORAGE_MODE\n\t\t\t|| config['RESOLVEIO_LOG_STORAGE_MODE']\n\t\t\t|| config['LOG_STORAGE_MODE']\n\t\t\t|| config['LOCAL_LOG_STORAGE_MODE']\n\t\t\t|| '';\n\t\tconst normalized = String(configuredValue || '').trim().toLowerCase();\n\n\t\tif (!normalized || normalized === 'auto') {\n\t\t\treturn 'auto';\n\t\t}\n\n\t\tif (normalized === 'direct' || normalized === 'database' || normalized === 'db') {\n\t\t\treturn 'direct';\n\t\t}\n\n\t\tif (normalized === 'offline' || normalized === 'offload' || normalized === 'file' || normalized === 'local') {\n\t\t\treturn 'offline';\n\t\t}\n\n\t\treturn 'auto';\n\t}\n\n\tprivate static resolveLegacyLogStorageMode(): 'offline' | 'direct' {\n\t\tconst rootUrl = ResolveIOServer.getServerConfig()?.['ROOT_URL'];\n\t\tif (rootUrl !== 'https://resolveio.com' && rootUrl !== 'http://localhost:4200') {\n\t\t\treturn 'offline';\n\t\t}\n\t\treturn 'direct';\n\t}\n\n\tpublic static getInstanceHost(): string {\n\t\tconst config = ResolveIOServer.getServerConfig() || {};\n\t\tconst explicitHost = this.findFirstNonEmptyString([\n\t\t\tprocess.env.RESOLVEIO_INSTANCE_HOST,\n\t\t\tprocess.env.INSTANCE_HOST,\n\t\t\tconfig['RESOLVEIO_INSTANCE_HOST'],\n\t\t\tconfig['INSTANCE_HOST'],\n\t\t\tconfig['SERVER_HOST']\n\t\t]);\n\t\tif (explicitHost) {\n\t\t\treturn explicitHost;\n\t\t}\n\n\t\tconst hostFromUrl = this.extractHostName(this.findFirstNonEmptyString([\n\t\t\tprocess.env.RESOLVEIO_SERVER_URL,\n\t\t\tprocess.env.SERVER_URL,\n\t\t\tconfig['RESOLVEIO_SERVER_URL'],\n\t\t\tconfig['SERVER_URL'],\n\t\t\tprocess.env.ROOT_URL,\n\t\t\tconfig['ROOT_URL']\n\t\t]));\n\t\tif (hostFromUrl) {\n\t\t\treturn hostFromUrl;\n\t\t}\n\n\t\tconst envHostName = this.findFirstNonEmptyString([\n\t\t\tprocess.env.EC2_PUBLIC_HOSTNAME,\n\t\t\tprocess.env.HOSTNAME\n\t\t]);\n\t\tif (envHostName) {\n\t\t\treturn envHostName;\n\t\t}\n\n\t\treturn 'local-instance';\n\t}\n\n\tpublic static getServerApiBaseUrl(): string {\n\t\tconst config = ResolveIOServer.getServerConfig() || {};\n\t\tconst explicitBaseUrl = this.normalizeBaseUrl(this.findFirstNonEmptyString([\n\t\t\tprocess.env.RESOLVEIO_SERVER_URL,\n\t\t\tprocess.env.SERVER_URL,\n\t\t\tconfig['RESOLVEIO_SERVER_URL'],\n\t\t\tconfig['SERVER_URL']\n\t\t]));\n\t\tif (explicitBaseUrl) {\n\t\t\treturn explicitBaseUrl;\n\t\t}\n\n\t\tconst normalizedRootUrl = this.normalizeBaseUrl(this.findFirstNonEmptyString([\n\t\t\tprocess.env.ROOT_URL,\n\t\t\tconfig['ROOT_URL']\n\t\t]));\n\t\tif (normalizedRootUrl) {\n\t\t\ttry {\n\t\t\t\tconst parsedRootUrl = new URL(normalizedRootUrl);\n\t\t\t\tif (parsedRootUrl.port === '4200') {\n\t\t\t\t\tparsedRootUrl.port = '8080';\n\t\t\t\t}\n\n\t\t\t\tparsedRootUrl.pathname = '';\n\t\t\t\tparsedRootUrl.search = '';\n\t\t\t\tparsedRootUrl.hash = '';\n\t\t\t\treturn parsedRootUrl.toString().replace(/\\/$/, '');\n\t\t\t}\n\t\t\tcatch {\n\t\t\t\treturn normalizedRootUrl;\n\t\t\t}\n\t\t}\n\n\t\tconst defaultPort = this.findFirstNonEmptyString([\n\t\t\tprocess.env.PORT,\n\t\t\tconfig['PORT']\n\t\t]) || '8080';\n\t\treturn `http://127.0.0.1:${defaultPort}`;\n\t}\n\n\tpublic static buildServerApiUrl(pathname: string): string {\n\t\tconst normalizedPath = pathname && pathname.startsWith('/')\n\t\t\t? pathname\n\t\t\t: `/${pathname || ''}`;\n\t\treturn this.getServerApiBaseUrl().replace(/\\/$/, '') + normalizedPath;\n\t}\n\n\tprivate static findFirstNonEmptyString(values: any[]): string | null {\n\t\tfor (const value of values || []) {\n\t\t\tif (typeof value === 'string' && value.trim().length) {\n\t\t\t\treturn value.trim();\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate static normalizeBaseUrl(value?: string | null): string | null {\n\t\tif (!value || typeof value !== 'string') {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst trimmedValue = value.trim();\n\t\tif (!trimmedValue) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst hasScheme = /^[a-zA-Z][a-zA-Z\\d+\\-.]*:\\/\\//.test(trimmedValue);\n\t\tconst candidate = hasScheme ? trimmedValue : `http://${trimmedValue}`;\n\t\ttry {\n\t\t\tconst parsed = new URL(candidate);\n\t\t\tparsed.pathname = '';\n\t\t\tparsed.search = '';\n\t\t\tparsed.hash = '';\n\t\t\treturn parsed.toString().replace(/\\/$/, '');\n\t\t}\n\t\tcatch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tprivate static extractHostName(value?: string | null): string | null {\n\t\tconst normalizedBase = this.normalizeBaseUrl(value || '');\n\t\tif (!normalizedBase) {\n\t\t\treturn null;\n\t\t}\n\n\t\ttry {\n\t\t\treturn new URL(normalizedBase).hostname || null;\n\t\t}\n\t\tcatch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tpublic static getClientRoutes() {\n\t\treturn ResolveIOServer._clientRoutes;\n\t}\n\n\tpublic static getClientDir(): string {\n\t\treturn ResolveIOServer._clientDir;\n\t}\n\n\tpublic static getSESMail(): boolean {\n\t\treturn ResolveIOServer._sesMail;\n\t}\n\n\tpublic static getpublicProgram(): boolean {\n\t\treturn ResolveIOServer._publicProgram;\n\t}\n}\n"]}