telegram-ssh-bot 2.0.0 → 2.3.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 (201) 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 +77 -0
  5. package/dist/config/index.d.ts.map +1 -0
  6. package/dist/config/index.js +333 -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 +365 -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/dist/wizard/InstallationWizard.d.ts +32 -0
  181. package/dist/wizard/InstallationWizard.d.ts.map +1 -0
  182. package/dist/wizard/InstallationWizard.js +96 -0
  183. package/dist/wizard/InstallationWizard.js.map +1 -0
  184. package/dist/wizard/index.d.ts +10 -0
  185. package/dist/wizard/index.d.ts.map +1 -0
  186. package/dist/wizard/index.js +8 -0
  187. package/dist/wizard/index.js.map +1 -0
  188. package/dist/wizard/prompts.d.ts +45 -0
  189. package/dist/wizard/prompts.d.ts.map +1 -0
  190. package/dist/wizard/prompts.js +194 -0
  191. package/dist/wizard/prompts.js.map +1 -0
  192. package/dist/wizard/validators.d.ts +50 -0
  193. package/dist/wizard/validators.d.ts.map +1 -0
  194. package/dist/wizard/validators.js +107 -0
  195. package/dist/wizard/validators.js.map +1 -0
  196. package/package.json +33 -5
  197. package/scripts/build.sh +20 -0
  198. package/scripts/postinstall.js +87 -0
  199. package/scripts/release.sh +22 -0
  200. package/scripts/setup-env.d.ts +28 -0
  201. package/scripts/setup-env.js +293 -0
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Health Service
3
+ * Provides system health monitoring and status reporting
4
+ */
5
+ import type { LogContext } from "../types/index.js";
6
+ /**
7
+ * Component health status
8
+ */
9
+ export interface ComponentHealth {
10
+ status: "up" | "down";
11
+ latency?: number;
12
+ message?: string;
13
+ lastCheck?: Date;
14
+ }
15
+ /**
16
+ * Memory health metrics
17
+ */
18
+ export interface MemoryHealth {
19
+ heapUsed: number;
20
+ heapTotal: number;
21
+ rss: number;
22
+ external: number;
23
+ arrayBuffers: number;
24
+ }
25
+ /**
26
+ * Overall health status
27
+ */
28
+ export interface HealthStatus {
29
+ status: "healthy" | "degraded" | "unhealthy";
30
+ uptime: number;
31
+ timestamp: Date;
32
+ version: string;
33
+ components: {
34
+ bot: ComponentHealth;
35
+ storage: ComponentHealth;
36
+ memory: MemoryHealth;
37
+ };
38
+ metrics: {
39
+ activeConnections: number;
40
+ totalServers: number;
41
+ requestsProcessed: number;
42
+ };
43
+ }
44
+ /**
45
+ * Health check options
46
+ */
47
+ export interface HealthCheckOptions {
48
+ version: string;
49
+ startTime: Date;
50
+ }
51
+ /**
52
+ * Service for monitoring application health
53
+ */
54
+ export declare class HealthService {
55
+ private readonly version;
56
+ private readonly startTime;
57
+ private requestsProcessed;
58
+ private activeConnections;
59
+ private totalServers;
60
+ private storageHealthy;
61
+ private botHealthy;
62
+ private lastStorageCheck;
63
+ private lastBotCheck;
64
+ constructor(options: HealthCheckOptions);
65
+ /**
66
+ * Get current health status
67
+ */
68
+ getHealthStatus(): HealthStatus;
69
+ /**
70
+ * Get memory health metrics
71
+ */
72
+ private getMemoryHealth;
73
+ /**
74
+ * Get bot component health
75
+ */
76
+ private getBotHealth;
77
+ /**
78
+ * Get storage component health
79
+ */
80
+ private getStorageHealth;
81
+ /**
82
+ * Determine overall health status
83
+ */
84
+ private determineOverallStatus;
85
+ /**
86
+ * Get uptime in seconds
87
+ */
88
+ private getUptime;
89
+ /**
90
+ * Format uptime as human-readable string
91
+ */
92
+ formatUptime(): string;
93
+ /**
94
+ * Format bytes to human-readable string
95
+ */
96
+ formatBytes(bytes: number): string;
97
+ /**
98
+ * Get formatted health report
99
+ */
100
+ getFormattedHealthReport(): string;
101
+ /**
102
+ * Update bot health status
103
+ */
104
+ setBotHealth(healthy: boolean): void;
105
+ /**
106
+ * Update storage health status
107
+ */
108
+ setStorageHealth(healthy: boolean): void;
109
+ /**
110
+ * Increment request counter
111
+ */
112
+ incrementRequests(): void;
113
+ /**
114
+ * Set active connections count
115
+ */
116
+ setActiveConnections(count: number): void;
117
+ /**
118
+ * Set total servers count
119
+ */
120
+ setTotalServers(count: number): void;
121
+ /**
122
+ * Get log context for health-related logs
123
+ */
124
+ getLogContext(): LogContext;
125
+ }
126
+ //# sourceMappingURL=HealthService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HealthService.d.ts","sourceRoot":"","sources":["../../src/services/HealthService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,IAAI,GAAG,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE;QACV,GAAG,EAAE,eAAe,CAAC;QACrB,OAAO,EAAE,eAAe,CAAC;QACzB,MAAM,EAAE,YAAY,CAAC;KACtB,CAAC;IACF,OAAO,EAAE;QACP,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAO;IACjC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,YAAY,CAAqB;gBAE7B,OAAO,EAAE,kBAAkB;IAKvC;;OAEG;IACH,eAAe,IAAI,YAAY;IAwB/B;;OAEG;IACH,OAAO,CAAC,eAAe;IAWvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAuB9B;;OAEG;IACH,OAAO,CAAC,SAAS;IAIjB;;OAEG;IACH,YAAY,IAAI,MAAM;IAgBtB;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAalC;;OAEG;IACH,wBAAwB,IAAI,MAAM;IAsClC;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKpC;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKxC;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAIzB;;OAEG;IACH,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIzC;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIpC;;OAEG;IACH,aAAa,IAAI,UAAU;CAS5B"}
@@ -0,0 +1,213 @@
1
+ /**
2
+ * Health Service
3
+ * Provides system health monitoring and status reporting
4
+ */
5
+ /**
6
+ * Service for monitoring application health
7
+ */
8
+ export class HealthService {
9
+ version;
10
+ startTime;
11
+ requestsProcessed = 0;
12
+ activeConnections = 0;
13
+ totalServers = 0;
14
+ storageHealthy = true;
15
+ botHealthy = true;
16
+ lastStorageCheck = null;
17
+ lastBotCheck = null;
18
+ constructor(options) {
19
+ this.version = options.version;
20
+ this.startTime = options.startTime;
21
+ }
22
+ /**
23
+ * Get current health status
24
+ */
25
+ getHealthStatus() {
26
+ const memory = this.getMemoryHealth();
27
+ const components = {
28
+ bot: this.getBotHealth(),
29
+ storage: this.getStorageHealth(),
30
+ memory,
31
+ };
32
+ const status = this.determineOverallStatus(components);
33
+ return {
34
+ status,
35
+ uptime: this.getUptime(),
36
+ timestamp: new Date(),
37
+ version: this.version,
38
+ components,
39
+ metrics: {
40
+ activeConnections: this.activeConnections,
41
+ totalServers: this.totalServers,
42
+ requestsProcessed: this.requestsProcessed,
43
+ },
44
+ };
45
+ }
46
+ /**
47
+ * Get memory health metrics
48
+ */
49
+ getMemoryHealth() {
50
+ const memUsage = process.memoryUsage();
51
+ return {
52
+ heapUsed: memUsage.heapUsed,
53
+ heapTotal: memUsage.heapTotal,
54
+ rss: memUsage.rss,
55
+ external: memUsage.external,
56
+ arrayBuffers: memUsage.arrayBuffers,
57
+ };
58
+ }
59
+ /**
60
+ * Get bot component health
61
+ */
62
+ getBotHealth() {
63
+ return {
64
+ status: this.botHealthy ? "up" : "down",
65
+ lastCheck: this.lastBotCheck ?? undefined,
66
+ message: this.botHealthy ? "Bot is running" : "Bot is not responding",
67
+ };
68
+ }
69
+ /**
70
+ * Get storage component health
71
+ */
72
+ getStorageHealth() {
73
+ return {
74
+ status: this.storageHealthy ? "up" : "down",
75
+ lastCheck: this.lastStorageCheck ?? undefined,
76
+ message: this.storageHealthy
77
+ ? "Storage is accessible"
78
+ : "Storage is not accessible",
79
+ };
80
+ }
81
+ /**
82
+ * Determine overall health status
83
+ */
84
+ determineOverallStatus(components) {
85
+ // Check if any critical component is down
86
+ if (components.bot.status === "down" ||
87
+ components.storage.status === "down") {
88
+ return "unhealthy";
89
+ }
90
+ // Check memory usage - degraded if heap usage > 85%
91
+ const heapUsagePercent = (components.memory.heapUsed / components.memory.heapTotal) * 100;
92
+ if (heapUsagePercent > 85) {
93
+ return "degraded";
94
+ }
95
+ return "healthy";
96
+ }
97
+ /**
98
+ * Get uptime in seconds
99
+ */
100
+ getUptime() {
101
+ return Math.floor((Date.now() - this.startTime.getTime()) / 1000);
102
+ }
103
+ /**
104
+ * Format uptime as human-readable string
105
+ */
106
+ formatUptime() {
107
+ const uptime = this.getUptime();
108
+ const days = Math.floor(uptime / 86400);
109
+ const hours = Math.floor((uptime % 86400) / 3600);
110
+ const minutes = Math.floor((uptime % 3600) / 60);
111
+ const seconds = uptime % 60;
112
+ const parts = [];
113
+ if (days > 0)
114
+ parts.push(`${days}d`);
115
+ if (hours > 0)
116
+ parts.push(`${hours}h`);
117
+ if (minutes > 0)
118
+ parts.push(`${minutes}m`);
119
+ parts.push(`${seconds}s`);
120
+ return parts.join(" ");
121
+ }
122
+ /**
123
+ * Format bytes to human-readable string
124
+ */
125
+ formatBytes(bytes) {
126
+ const units = ["B", "KB", "MB", "GB"];
127
+ let value = bytes;
128
+ let unitIndex = 0;
129
+ while (value >= 1024 && unitIndex < units.length - 1) {
130
+ value /= 1024;
131
+ unitIndex++;
132
+ }
133
+ return `${value.toFixed(2)} ${units[unitIndex]}`;
134
+ }
135
+ /**
136
+ * Get formatted health report
137
+ */
138
+ getFormattedHealthReport() {
139
+ const health = this.getHealthStatus();
140
+ const memory = health.components.memory;
141
+ const heapUsagePercent = (memory.heapUsed / memory.heapTotal) * 100;
142
+ const statusEmoji = {
143
+ healthy: "✅",
144
+ degraded: "⚠️",
145
+ unhealthy: "❌",
146
+ };
147
+ const componentEmoji = {
148
+ up: "✅",
149
+ down: "❌",
150
+ };
151
+ let report = `${statusEmoji[health.status]} *System Health*\n\n`;
152
+ report += `📊 *Status:* ${health.status.toUpperCase()}\n`;
153
+ report += `⏱️ *Uptime:* ${this.formatUptime()}\n`;
154
+ report += `📌 *Version:* ${health.version}\n\n`;
155
+ report += `*Components:*\n`;
156
+ report += ` ${componentEmoji[health.components.bot.status]} Bot: ${health.components.bot.message}\n`;
157
+ report += ` ${componentEmoji[health.components.storage.status]} Storage: ${health.components.storage.message}\n\n`;
158
+ report += `*Memory:*\n`;
159
+ report += ` 📦 Heap: ${this.formatBytes(memory.heapUsed)} / ${this.formatBytes(memory.heapTotal)} (${heapUsagePercent.toFixed(1)}%)\n`;
160
+ report += ` 🖥️ RSS: ${this.formatBytes(memory.rss)}\n`;
161
+ report += ` 🔗 External: ${this.formatBytes(memory.external)}\n\n`;
162
+ report += `*Metrics:*\n`;
163
+ report += ` 🔌 Active Connections: ${health.metrics.activeConnections}\n`;
164
+ report += ` 📋 Total Servers: ${health.metrics.totalServers}\n`;
165
+ report += ` 📨 Requests Processed: ${health.metrics.requestsProcessed}\n`;
166
+ return report;
167
+ }
168
+ /**
169
+ * Update bot health status
170
+ */
171
+ setBotHealth(healthy) {
172
+ this.botHealthy = healthy;
173
+ this.lastBotCheck = new Date();
174
+ }
175
+ /**
176
+ * Update storage health status
177
+ */
178
+ setStorageHealth(healthy) {
179
+ this.storageHealthy = healthy;
180
+ this.lastStorageCheck = new Date();
181
+ }
182
+ /**
183
+ * Increment request counter
184
+ */
185
+ incrementRequests() {
186
+ this.requestsProcessed++;
187
+ }
188
+ /**
189
+ * Set active connections count
190
+ */
191
+ setActiveConnections(count) {
192
+ this.activeConnections = count;
193
+ }
194
+ /**
195
+ * Set total servers count
196
+ */
197
+ setTotalServers(count) {
198
+ this.totalServers = count;
199
+ }
200
+ /**
201
+ * Get log context for health-related logs
202
+ */
203
+ getLogContext() {
204
+ const health = this.getHealthStatus();
205
+ return {
206
+ status: health.status,
207
+ uptime: health.uptime,
208
+ activeConnections: health.metrics.activeConnections,
209
+ heapUsed: health.components.memory.heapUsed,
210
+ };
211
+ }
212
+ }
213
+ //# sourceMappingURL=HealthService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HealthService.js","sourceRoot":"","sources":["../../src/services/HealthService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Logging Service
3
+ * Provides structured logging with multiple output formats, log rotation, and request tracking
4
+ */
5
+ import type { LogContext, LoggingConfig } from "../types/index.js";
6
+ /**
7
+ * Logging service for structured logging with rotation and request tracking
8
+ */
9
+ export declare class LoggingService {
10
+ private readonly level;
11
+ private readonly format;
12
+ private readonly file?;
13
+ private readonly maxFileSize;
14
+ private readonly maxFiles;
15
+ private currentLogFile;
16
+ private requestCounter;
17
+ private readonly performanceTimers;
18
+ private logCount;
19
+ private errorCount;
20
+ private readonly startTime;
21
+ constructor(config: LoggingConfig);
22
+ /**
23
+ * Log info message
24
+ */
25
+ info(message: string, context?: LogContext): void;
26
+ /**
27
+ * Log warning message
28
+ */
29
+ warn(message: string, context?: LogContext): void;
30
+ /**
31
+ * Log error message
32
+ */
33
+ error(message: string, error?: Error, context?: LogContext): void;
34
+ /**
35
+ * Log debug message
36
+ */
37
+ debug(message: string, context?: LogContext): void;
38
+ /**
39
+ * Log with request ID tracking
40
+ */
41
+ withRequestId(requestId: string): {
42
+ info: (message: string, context?: LogContext) => void;
43
+ warn: (message: string, context?: LogContext) => void;
44
+ error: (message: string, error?: Error, context?: LogContext) => void;
45
+ debug: (message: string, context?: LogContext) => void;
46
+ };
47
+ /**
48
+ * Generate a new request ID
49
+ */
50
+ generateRequestId(): string;
51
+ /**
52
+ * Start a performance timer
53
+ */
54
+ startTimer(label: string, context?: LogContext): string;
55
+ /**
56
+ * End a performance timer and log the duration
57
+ */
58
+ endTimer(timerId: string, additionalContext?: LogContext): number | null;
59
+ /**
60
+ * Log performance metrics
61
+ */
62
+ logPerformance(operation: string, duration: number, context?: LogContext): void;
63
+ /**
64
+ * Log with component context
65
+ */
66
+ withComponent(component: string): {
67
+ info: (message: string, context?: LogContext) => void;
68
+ warn: (message: string, context?: LogContext) => void;
69
+ error: (message: string, error?: Error, context?: LogContext) => void;
70
+ debug: (message: string, context?: LogContext) => void;
71
+ };
72
+ /**
73
+ * Get logging statistics
74
+ */
75
+ getStats(): {
76
+ totalLogs: number;
77
+ errorCount: number;
78
+ uptime: number;
79
+ activeTimers: number;
80
+ requestCount: number;
81
+ };
82
+ /**
83
+ * Internal log method
84
+ */
85
+ private log;
86
+ /**
87
+ * Check if should log based on level
88
+ */
89
+ private shouldLog;
90
+ /**
91
+ * Parse log level from string
92
+ */
93
+ private parseLevel;
94
+ /**
95
+ * Format log entry as pretty string
96
+ */
97
+ private formatPretty;
98
+ /**
99
+ * Write log entry to file
100
+ */
101
+ private writeToFile;
102
+ /**
103
+ * Initialize log file
104
+ */
105
+ private initializeLogFile;
106
+ /**
107
+ * Rotate log file
108
+ */
109
+ private rotateLogFile;
110
+ /**
111
+ * Clean up old log files
112
+ */
113
+ private cleanupOldLogFiles;
114
+ }
115
+ //# sourceMappingURL=LoggingService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoggingService.d.ts","sourceRoot":"","sources":["../../src/services/LoggingService.ts"],"names":[],"mappings":"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"}