telegram-ssh-bot 2.0.0 → 2.2.0

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 (184) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +103 -22
  3. package/deploy/.env.example +86 -0
  4. package/dist/config/index.d.ts +68 -0
  5. package/dist/config/index.d.ts.map +1 -0
  6. package/dist/config/index.js +315 -0
  7. package/dist/config/index.js.map +1 -0
  8. package/dist/config/schema.d.ts +6 -0
  9. package/dist/config/schema.d.ts.map +1 -0
  10. package/dist/config/schema.js +50 -0
  11. package/dist/config/schema.js.map +1 -0
  12. package/dist/core/Bot.d.ts +91 -0
  13. package/dist/core/Bot.d.ts.map +1 -0
  14. package/dist/core/Bot.js +263 -0
  15. package/dist/core/Bot.js.map +1 -0
  16. package/dist/core/ConnectionPool.d.ts +125 -0
  17. package/dist/core/ConnectionPool.d.ts.map +1 -0
  18. package/dist/core/ConnectionPool.js +397 -0
  19. package/dist/core/ConnectionPool.js.map +1 -0
  20. package/dist/core/SSHClient.d.ts +112 -0
  21. package/dist/core/SSHClient.d.ts.map +1 -0
  22. package/dist/core/SSHClient.js +367 -0
  23. package/dist/core/SSHClient.js.map +1 -0
  24. package/dist/core/ServerManager.d.ts +80 -0
  25. package/dist/core/ServerManager.d.ts.map +1 -0
  26. package/dist/core/ServerManager.js +207 -0
  27. package/dist/core/ServerManager.js.map +1 -0
  28. package/dist/core/index.d.ts +8 -0
  29. package/dist/core/index.d.ts.map +1 -0
  30. package/dist/core/index.js +8 -0
  31. package/dist/core/index.js.map +1 -0
  32. package/dist/errors/AuthError.d.ts +30 -0
  33. package/dist/errors/AuthError.d.ts.map +1 -0
  34. package/dist/errors/AuthError.js +35 -0
  35. package/dist/errors/AuthError.js.map +1 -0
  36. package/dist/errors/BaseError.d.ts +17 -0
  37. package/dist/errors/BaseError.d.ts.map +1 -0
  38. package/dist/errors/BaseError.js +34 -0
  39. package/dist/errors/BaseError.js.map +1 -0
  40. package/dist/errors/ConfigurationError.d.ts +24 -0
  41. package/dist/errors/ConfigurationError.d.ts.map +1 -0
  42. package/dist/errors/ConfigurationError.js +24 -0
  43. package/dist/errors/ConfigurationError.js.map +1 -0
  44. package/dist/errors/PoolError.d.ts +21 -0
  45. package/dist/errors/PoolError.d.ts.map +1 -0
  46. package/dist/errors/PoolError.js +30 -0
  47. package/dist/errors/PoolError.js.map +1 -0
  48. package/dist/errors/SSHError.d.ts +24 -0
  49. package/dist/errors/SSHError.d.ts.map +1 -0
  50. package/dist/errors/SSHError.js +38 -0
  51. package/dist/errors/SSHError.js.map +1 -0
  52. package/dist/errors/StorageError.d.ts +24 -0
  53. package/dist/errors/StorageError.d.ts.map +1 -0
  54. package/dist/errors/StorageError.js +35 -0
  55. package/dist/errors/StorageError.js.map +1 -0
  56. package/dist/errors/ValidationError.d.ts +29 -0
  57. package/dist/errors/ValidationError.d.ts.map +1 -0
  58. package/dist/errors/ValidationError.js +35 -0
  59. package/dist/errors/ValidationError.js.map +1 -0
  60. package/dist/errors/index.d.ts +11 -0
  61. package/dist/errors/index.d.ts.map +1 -0
  62. package/dist/errors/index.js +18 -0
  63. package/dist/errors/index.js.map +1 -0
  64. package/dist/handlers/BaseHandler.d.ts +50 -0
  65. package/dist/handlers/BaseHandler.d.ts.map +1 -0
  66. package/dist/handlers/BaseHandler.js +87 -0
  67. package/dist/handlers/BaseHandler.js.map +1 -0
  68. package/dist/handlers/CommandHandler.d.ts +23 -0
  69. package/dist/handlers/CommandHandler.d.ts.map +1 -0
  70. package/dist/handlers/CommandHandler.js +99 -0
  71. package/dist/handlers/CommandHandler.js.map +1 -0
  72. package/dist/handlers/HealthHandler.d.ts +25 -0
  73. package/dist/handlers/HealthHandler.d.ts.map +1 -0
  74. package/dist/handlers/HealthHandler.js +51 -0
  75. package/dist/handlers/HealthHandler.js.map +1 -0
  76. package/dist/handlers/HelpHandler.d.ts +32 -0
  77. package/dist/handlers/HelpHandler.d.ts.map +1 -0
  78. package/dist/handlers/HelpHandler.js +76 -0
  79. package/dist/handlers/HelpHandler.js.map +1 -0
  80. package/dist/handlers/ServerHandler.d.ts +72 -0
  81. package/dist/handlers/ServerHandler.d.ts.map +1 -0
  82. package/dist/handlers/ServerHandler.js +272 -0
  83. package/dist/handlers/ServerHandler.js.map +1 -0
  84. package/dist/handlers/index.d.ts +9 -0
  85. package/dist/handlers/index.d.ts.map +1 -0
  86. package/dist/handlers/index.js +9 -0
  87. package/dist/handlers/index.js.map +1 -0
  88. package/dist/index.d.ts +10 -0
  89. package/dist/index.d.ts.map +1 -0
  90. package/dist/index.js +348 -0
  91. package/dist/index.js.map +1 -0
  92. package/dist/middleware/AuthMiddleware.d.ts +28 -0
  93. package/dist/middleware/AuthMiddleware.d.ts.map +1 -0
  94. package/dist/middleware/AuthMiddleware.js +49 -0
  95. package/dist/middleware/AuthMiddleware.js.map +1 -0
  96. package/dist/middleware/RateLimitMiddleware.d.ts +23 -0
  97. package/dist/middleware/RateLimitMiddleware.d.ts.map +1 -0
  98. package/dist/middleware/RateLimitMiddleware.js +34 -0
  99. package/dist/middleware/RateLimitMiddleware.js.map +1 -0
  100. package/dist/middleware/index.d.ts +6 -0
  101. package/dist/middleware/index.d.ts.map +1 -0
  102. package/dist/middleware/index.js +6 -0
  103. package/dist/middleware/index.js.map +1 -0
  104. package/dist/services/BackupService.d.ts +119 -0
  105. package/dist/services/BackupService.d.ts.map +1 -0
  106. package/dist/services/BackupService.js +313 -0
  107. package/dist/services/BackupService.js.map +1 -0
  108. package/dist/services/CryptoService.d.ts +37 -0
  109. package/dist/services/CryptoService.d.ts.map +1 -0
  110. package/dist/services/CryptoService.js +108 -0
  111. package/dist/services/CryptoService.js.map +1 -0
  112. package/dist/services/HealthService.d.ts +126 -0
  113. package/dist/services/HealthService.d.ts.map +1 -0
  114. package/dist/services/HealthService.js +213 -0
  115. package/dist/services/HealthService.js.map +1 -0
  116. package/dist/services/LoggingService.d.ts +115 -0
  117. package/dist/services/LoggingService.d.ts.map +1 -0
  118. package/dist/services/LoggingService.js +334 -0
  119. package/dist/services/LoggingService.js.map +1 -0
  120. package/dist/services/MonitoringService.d.ts +119 -0
  121. package/dist/services/MonitoringService.d.ts.map +1 -0
  122. package/dist/services/MonitoringService.js +267 -0
  123. package/dist/services/MonitoringService.js.map +1 -0
  124. package/dist/services/NotificationService.d.ts +132 -0
  125. package/dist/services/NotificationService.d.ts.map +1 -0
  126. package/dist/services/NotificationService.js +297 -0
  127. package/dist/services/NotificationService.js.map +1 -0
  128. package/dist/services/RateLimiter.d.ts +51 -0
  129. package/dist/services/RateLimiter.d.ts.map +1 -0
  130. package/dist/services/RateLimiter.js +141 -0
  131. package/dist/services/RateLimiter.js.map +1 -0
  132. package/dist/services/ValidationService.d.ts +49 -0
  133. package/dist/services/ValidationService.d.ts.map +1 -0
  134. package/dist/services/ValidationService.js +158 -0
  135. package/dist/services/ValidationService.js.map +1 -0
  136. package/dist/services/index.d.ts +12 -0
  137. package/dist/services/index.d.ts.map +1 -0
  138. package/dist/services/index.js +12 -0
  139. package/dist/services/index.js.map +1 -0
  140. package/dist/types/Bot.d.ts +63 -0
  141. package/dist/types/Bot.d.ts.map +1 -0
  142. package/dist/types/Bot.js +5 -0
  143. package/dist/types/Bot.js.map +1 -0
  144. package/dist/types/Config.d.ts +57 -0
  145. package/dist/types/Config.d.ts.map +1 -0
  146. package/dist/types/Config.js +5 -0
  147. package/dist/types/Config.js.map +1 -0
  148. package/dist/types/Errors.d.ts +37 -0
  149. package/dist/types/Errors.d.ts.map +1 -0
  150. package/dist/types/Errors.js +34 -0
  151. package/dist/types/Errors.js.map +1 -0
  152. package/dist/types/SSH.d.ts +56 -0
  153. package/dist/types/SSH.d.ts.map +1 -0
  154. package/dist/types/SSH.js +6 -0
  155. package/dist/types/SSH.js.map +1 -0
  156. package/dist/types/Server.d.ts +39 -0
  157. package/dist/types/Server.d.ts.map +1 -0
  158. package/dist/types/Server.js +5 -0
  159. package/dist/types/Server.js.map +1 -0
  160. package/dist/types/index.d.ts +10 -0
  161. package/dist/types/index.d.ts.map +1 -0
  162. package/dist/types/index.js +6 -0
  163. package/dist/types/index.js.map +1 -0
  164. package/dist/utils/commandUtils.d.ts +25 -0
  165. package/dist/utils/commandUtils.d.ts.map +1 -0
  166. package/dist/utils/commandUtils.js +94 -0
  167. package/dist/utils/commandUtils.js.map +1 -0
  168. package/dist/utils/fileUtils.d.ts +40 -0
  169. package/dist/utils/fileUtils.d.ts.map +1 -0
  170. package/dist/utils/fileUtils.js +114 -0
  171. package/dist/utils/fileUtils.js.map +1 -0
  172. package/dist/utils/index.d.ts +7 -0
  173. package/dist/utils/index.d.ts.map +1 -0
  174. package/dist/utils/index.js +7 -0
  175. package/dist/utils/index.js.map +1 -0
  176. package/dist/utils/pathUtils.d.ts +40 -0
  177. package/dist/utils/pathUtils.d.ts.map +1 -0
  178. package/dist/utils/pathUtils.js +140 -0
  179. package/dist/utils/pathUtils.js.map +1 -0
  180. package/package.json +31 -5
  181. package/scripts/build.sh +20 -0
  182. package/scripts/postinstall.js +87 -0
  183. package/scripts/release.sh +22 -0
  184. package/scripts/setup-env.js +237 -0
@@ -0,0 +1,334 @@
1
+ /**
2
+ * Logging Service
3
+ * Provides structured logging with multiple output formats, log rotation, and request tracking
4
+ */
5
+ import { promises as fs } from "fs";
6
+ import * as path from "path";
7
+ const LOG_LEVELS = {
8
+ debug: 0,
9
+ info: 1,
10
+ warn: 2,
11
+ error: 3,
12
+ };
13
+ /**
14
+ * Logging service for structured logging with rotation and request tracking
15
+ */
16
+ export class LoggingService {
17
+ level;
18
+ format;
19
+ file;
20
+ maxFileSize;
21
+ maxFiles;
22
+ currentLogFile = null;
23
+ requestCounter = 0;
24
+ performanceTimers = new Map();
25
+ logCount = 0;
26
+ errorCount = 0;
27
+ startTime;
28
+ constructor(config) {
29
+ this.level = this.parseLevel(config.level);
30
+ this.format = config.format;
31
+ this.file = config.file;
32
+ this.maxFileSize = 10 * 1024 * 1024; // 10MB default
33
+ this.maxFiles = 5;
34
+ this.startTime = new Date();
35
+ }
36
+ /**
37
+ * Log info message
38
+ */
39
+ info(message, context) {
40
+ this.log("info", message, undefined, context);
41
+ }
42
+ /**
43
+ * Log warning message
44
+ */
45
+ warn(message, context) {
46
+ this.log("warn", message, undefined, context);
47
+ }
48
+ /**
49
+ * Log error message
50
+ */
51
+ error(message, error, context) {
52
+ this.log("error", message, error, context);
53
+ }
54
+ /**
55
+ * Log debug message
56
+ */
57
+ debug(message, context) {
58
+ this.log("debug", message, undefined, context);
59
+ }
60
+ /**
61
+ * Log with request ID tracking
62
+ */
63
+ withRequestId(requestId) {
64
+ const logWithContext = (level, message, error, context) => {
65
+ this.log(level, message, error, { ...context, requestId });
66
+ };
67
+ return {
68
+ info: (message, context) => logWithContext("info", message, undefined, context),
69
+ warn: (message, context) => logWithContext("warn", message, undefined, context),
70
+ error: (message, error, context) => logWithContext("error", message, error, context),
71
+ debug: (message, context) => logWithContext("debug", message, undefined, context),
72
+ };
73
+ }
74
+ /**
75
+ * Generate a new request ID
76
+ */
77
+ generateRequestId() {
78
+ this.requestCounter++;
79
+ const timestamp = Date.now().toString(36);
80
+ const counter = this.requestCounter.toString(36).padStart(4, "0");
81
+ return `req_${timestamp}_${counter}`;
82
+ }
83
+ /**
84
+ * Start a performance timer
85
+ */
86
+ startTimer(label, context) {
87
+ const timerId = `${label}_${Date.now()}_${Math.random().toString(36).substring(2, 6)}`;
88
+ this.performanceTimers.set(timerId, {
89
+ startTime: Date.now(),
90
+ label,
91
+ context,
92
+ });
93
+ return timerId;
94
+ }
95
+ /**
96
+ * End a performance timer and log the duration
97
+ */
98
+ endTimer(timerId, additionalContext) {
99
+ const timer = this.performanceTimers.get(timerId);
100
+ if (!timer) {
101
+ this.warn(`Timer not found: ${timerId}`);
102
+ return null;
103
+ }
104
+ this.performanceTimers.delete(timerId);
105
+ const duration = Date.now() - timer.startTime;
106
+ this.debug(`Performance: ${timer.label}`, {
107
+ ...timer.context,
108
+ ...additionalContext,
109
+ duration,
110
+ durationMs: duration,
111
+ });
112
+ return duration;
113
+ }
114
+ /**
115
+ * Log performance metrics
116
+ */
117
+ logPerformance(operation, duration, context) {
118
+ this.log("debug", `Performance: ${operation}`, undefined, {
119
+ ...context,
120
+ duration,
121
+ durationMs: duration,
122
+ performance: true,
123
+ });
124
+ }
125
+ /**
126
+ * Log with component context
127
+ */
128
+ withComponent(component) {
129
+ const logWithContext = (level, message, error, context) => {
130
+ this.log(level, message, error, { ...context, component });
131
+ };
132
+ return {
133
+ info: (message, context) => logWithContext("info", message, undefined, context),
134
+ warn: (message, context) => logWithContext("warn", message, undefined, context),
135
+ error: (message, error, context) => logWithContext("error", message, error, context),
136
+ debug: (message, context) => logWithContext("debug", message, undefined, context),
137
+ };
138
+ }
139
+ /**
140
+ * Get logging statistics
141
+ */
142
+ getStats() {
143
+ return {
144
+ totalLogs: this.logCount,
145
+ errorCount: this.errorCount,
146
+ uptime: Math.floor((Date.now() - this.startTime.getTime()) / 1000),
147
+ activeTimers: this.performanceTimers.size,
148
+ requestCount: this.requestCounter,
149
+ };
150
+ }
151
+ /**
152
+ * Internal log method
153
+ */
154
+ log(level, message, error, context) {
155
+ if (!this.shouldLog(level)) {
156
+ return;
157
+ }
158
+ this.logCount++;
159
+ if (level === "error") {
160
+ this.errorCount++;
161
+ }
162
+ const entry = {
163
+ timestamp: new Date().toISOString(),
164
+ level,
165
+ message,
166
+ context,
167
+ error: error
168
+ ? {
169
+ name: error.name,
170
+ message: error.message,
171
+ stack: error.stack,
172
+ }
173
+ : undefined,
174
+ requestId: context?.requestId,
175
+ component: context?.component,
176
+ };
177
+ const output = this.format === "json" ? JSON.stringify(entry) : this.formatPretty(entry);
178
+ // Use appropriate console method
179
+ if (level === "error") {
180
+ console.error(output);
181
+ }
182
+ else if (level === "warn") {
183
+ console.warn(output);
184
+ }
185
+ else {
186
+ console.log(output);
187
+ }
188
+ // Write to file if configured
189
+ if (this.file) {
190
+ this.writeToFile(output).catch((err) => {
191
+ console.error("Failed to write to log file:", err);
192
+ });
193
+ }
194
+ }
195
+ /**
196
+ * Check if should log based on level
197
+ */
198
+ shouldLog(level) {
199
+ return LOG_LEVELS[level] >= LOG_LEVELS[this.level];
200
+ }
201
+ /**
202
+ * Parse log level from string
203
+ */
204
+ parseLevel(level) {
205
+ const normalized = level.toLowerCase();
206
+ if (normalized in LOG_LEVELS) {
207
+ return normalized;
208
+ }
209
+ return "info";
210
+ }
211
+ /**
212
+ * Format log entry as pretty string
213
+ */
214
+ formatPretty(entry) {
215
+ const timestamp = entry.timestamp;
216
+ const level = entry.level.toUpperCase().padEnd(5);
217
+ const requestId = entry.requestId ? `[${entry.requestId}] ` : "";
218
+ const component = entry.component ? `<${entry.component}> ` : "";
219
+ const context = entry.context ? ` ${JSON.stringify(entry.context)}` : "";
220
+ const error = entry.error
221
+ ? `\n ${entry.error.stack ?? entry.error.message}`
222
+ : "";
223
+ return `[${timestamp}] ${level} | ${requestId}${component}${entry.message}${context}${error}`;
224
+ }
225
+ /**
226
+ * Write log entry to file
227
+ */
228
+ async writeToFile(line) {
229
+ if (!this.file) {
230
+ return;
231
+ }
232
+ try {
233
+ // Check if we need to rotate
234
+ if (this.currentLogFile && this.currentLogFile.size >= this.maxFileSize) {
235
+ await this.rotateLogFile();
236
+ }
237
+ // Initialize log file if needed
238
+ if (!this.currentLogFile) {
239
+ await this.initializeLogFile();
240
+ }
241
+ if (this.currentLogFile) {
242
+ const logLine = line + "\n";
243
+ await fs.appendFile(this.currentLogFile.path, logLine, "utf-8");
244
+ this.currentLogFile.size += Buffer.byteLength(logLine, "utf-8");
245
+ }
246
+ }
247
+ catch (error) {
248
+ // Don't throw, just log to console
249
+ console.error("Failed to write to log file:", error);
250
+ }
251
+ }
252
+ /**
253
+ * Initialize log file
254
+ */
255
+ async initializeLogFile() {
256
+ if (!this.file) {
257
+ return;
258
+ }
259
+ const logDir = path.dirname(this.file);
260
+ await fs.mkdir(logDir, { recursive: true });
261
+ this.currentLogFile = {
262
+ path: this.file,
263
+ size: 0,
264
+ createdAt: new Date(),
265
+ };
266
+ // Check existing file size
267
+ try {
268
+ const stats = await fs.stat(this.file);
269
+ this.currentLogFile.size = stats.size;
270
+ }
271
+ catch {
272
+ // File doesn't exist, that's fine
273
+ }
274
+ }
275
+ /**
276
+ * Rotate log file
277
+ */
278
+ async rotateLogFile() {
279
+ if (!this.file || !this.currentLogFile) {
280
+ return;
281
+ }
282
+ const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
283
+ const rotatedPath = `${this.file}.${timestamp}`;
284
+ try {
285
+ // Ensure any pending writes are complete by waiting a tick
286
+ // This allows any in-flight appendFile operations to complete
287
+ await new Promise((resolve) => setImmediate(resolve));
288
+ // Rename current file
289
+ await fs.rename(this.file, rotatedPath);
290
+ // Clean up old files
291
+ await this.cleanupOldLogFiles();
292
+ // Reset current log file with fresh state
293
+ this.currentLogFile = {
294
+ path: this.file,
295
+ size: 0,
296
+ createdAt: new Date(),
297
+ };
298
+ console.log(`Log rotated to ${rotatedPath}`);
299
+ }
300
+ catch (error) {
301
+ console.error("Failed to rotate log file:", error);
302
+ }
303
+ }
304
+ /**
305
+ * Clean up old log files
306
+ */
307
+ async cleanupOldLogFiles() {
308
+ if (!this.file) {
309
+ return;
310
+ }
311
+ const logDir = path.dirname(this.file);
312
+ const baseName = path.basename(this.file);
313
+ try {
314
+ const files = await fs.readdir(logDir);
315
+ const logFiles = files
316
+ .filter((f) => f.startsWith(baseName) && f !== baseName)
317
+ .map((f) => ({
318
+ name: f,
319
+ path: path.join(logDir, f),
320
+ }))
321
+ .sort((a, b) => b.name.localeCompare(a.name));
322
+ // Remove files beyond max count
323
+ const toRemove = logFiles.slice(this.maxFiles - 1);
324
+ for (const file of toRemove) {
325
+ await fs.unlink(file.path);
326
+ console.log(`Removed old log file: ${file.name}`);
327
+ }
328
+ }
329
+ catch (error) {
330
+ console.error("Failed to cleanup old log files:", error);
331
+ }
332
+ }
333
+ }
334
+ //# sourceMappingURL=LoggingService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoggingService.js","sourceRoot":"","sources":["../../src/services/LoggingService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Monitoring Service
3
+ * Provides server health monitoring and alerting
4
+ */
5
+ import { EventEmitter } from "events";
6
+ import type { LogContext, Server } from "../types/index.js";
7
+ import { LoggingService } from "./LoggingService.js";
8
+ /**
9
+ * Server monitoring status
10
+ */
11
+ export interface ServerMonitorStatus {
12
+ serverId: string;
13
+ serverName: string;
14
+ host: string;
15
+ isReachable: boolean;
16
+ lastCheck: Date | null;
17
+ lastSuccessfulCheck: Date | null;
18
+ consecutiveFailures: number;
19
+ latency: number | null;
20
+ error?: string;
21
+ }
22
+ /**
23
+ * Monitoring configuration
24
+ */
25
+ export interface MonitoringConfig {
26
+ enabled: boolean;
27
+ checkInterval: number;
28
+ timeout: number;
29
+ alertThreshold: number;
30
+ cooldownPeriod: number;
31
+ }
32
+ /**
33
+ * Monitoring event types
34
+ */
35
+ export type MonitoringEvent = "server:unreachable" | "server:recovered" | "server:degraded" | "alert:triggered";
36
+ /**
37
+ * Monitoring event payload
38
+ */
39
+ export interface MonitoringEventPayload {
40
+ server: Server;
41
+ status: ServerMonitorStatus;
42
+ previousStatus?: ServerMonitorStatus;
43
+ timestamp: Date;
44
+ }
45
+ /**
46
+ * Service for monitoring server health
47
+ */
48
+ export declare class MonitoringService extends EventEmitter {
49
+ private readonly logger;
50
+ private readonly config;
51
+ private readonly serverStatuses;
52
+ private checkTimer;
53
+ private lastAlertTime;
54
+ private isRunning;
55
+ private checkFunction;
56
+ constructor(config: Partial<MonitoringConfig>, logger: LoggingService);
57
+ /**
58
+ * Set the check function for server reachability
59
+ */
60
+ setCheckFunction(fn: (server: Server) => Promise<boolean>): void;
61
+ /**
62
+ * Start monitoring
63
+ */
64
+ start(): void;
65
+ /**
66
+ * Stop monitoring
67
+ */
68
+ stop(): void;
69
+ /**
70
+ * Register a server for monitoring
71
+ */
72
+ registerServer(server: Server): void;
73
+ /**
74
+ * Unregister a server from monitoring
75
+ */
76
+ unregisterServer(serverId: string): void;
77
+ /**
78
+ * Get server status
79
+ */
80
+ getServerStatus(serverId: string): ServerMonitorStatus | undefined;
81
+ /**
82
+ * Get all server statuses
83
+ */
84
+ getAllStatuses(): ServerMonitorStatus[];
85
+ /**
86
+ * Check a specific server
87
+ */
88
+ checkServer(server: Server): Promise<ServerMonitorStatus>;
89
+ /**
90
+ * Handle server failure
91
+ */
92
+ private handleFailure;
93
+ /**
94
+ * Maybe trigger an alert (respects cooldown)
95
+ */
96
+ private maybeTriggerAlert;
97
+ /**
98
+ * Schedule next monitoring check
99
+ */
100
+ private scheduleNextCheck;
101
+ /**
102
+ * Perform monitoring check on all servers
103
+ */
104
+ private performCheck;
105
+ /**
106
+ * Get monitoring statistics
107
+ */
108
+ getStats(): {
109
+ totalServers: number;
110
+ reachableServers: number;
111
+ unreachableServers: number;
112
+ isRunning: boolean;
113
+ };
114
+ /**
115
+ * Get log context for monitoring-related logs
116
+ */
117
+ getLogContext(): LogContext;
118
+ }
119
+ //# sourceMappingURL=MonitoringService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MonitoringService.d.ts","sourceRoot":"","sources":["../../src/services/MonitoringService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,mBAAmB,EAAE,IAAI,GAAG,IAAI,CAAC;IACjC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB,oBAAoB,GACpB,kBAAkB,GAClB,iBAAiB,GACjB,iBAAiB,CAAC;AAEtB;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,mBAAmB,CAAC;IAC5B,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA+C;IAC9E,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,aAAa,CAAgC;IACrD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAuD;gBAEhE,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,cAAc;IAYrE;;OAEG;IACH,gBAAgB,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI;IAIhE;;OAEG;IACH,KAAK,IAAI,IAAI;IAYb;;OAEG;IACH,IAAI,IAAI,IAAI;IASZ;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAmBpC;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMxC;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAIlE;;OAEG;IACH,cAAc,IAAI,mBAAmB,EAAE;IAIvC;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA4D/D;;OAEG;IACH,OAAO,CAAC,aAAa;IA+BrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqCzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;OAEG;YACW,YAAY;IAqB1B;;OAEG;IACH,QAAQ,IAAI;QACV,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,SAAS,EAAE,OAAO,CAAC;KACpB;IAoBD;;OAEG;IACH,aAAa,IAAI,UAAU;CAS5B"}