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,37 @@
1
+ /**
2
+ * Crypto Service
3
+ * Provides AES-256-GCM encryption for credential storage
4
+ */
5
+ import type { EncryptedData } from '../types/index.js';
6
+ /**
7
+ * Crypto service for encrypting and decrypting sensitive data
8
+ */
9
+ export declare class CryptoService {
10
+ private readonly key;
11
+ constructor(encryptionKey: string);
12
+ /**
13
+ * Encrypt plaintext string using AES-256-GCM
14
+ */
15
+ encrypt(plaintext: string): EncryptedData;
16
+ /**
17
+ * Decrypt encrypted data using AES-256-GCM
18
+ */
19
+ decrypt(encrypted: EncryptedData): string;
20
+ /**
21
+ * Hash a string using SHA-256
22
+ */
23
+ hash(data: string): string;
24
+ /**
25
+ * Verify a hash against data
26
+ */
27
+ verifyHash(data: string, hash: string): boolean;
28
+ /**
29
+ * Generate a random hex string
30
+ */
31
+ static generateKey(): string;
32
+ /**
33
+ * Generate a random ID
34
+ */
35
+ static generateId(prefix?: string): string;
36
+ }
37
+ //# sourceMappingURL=CryptoService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CryptoService.d.ts","sourceRoot":"","sources":["../../src/services/CryptoService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAUvD;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;gBAEjB,aAAa,EAAE,MAAM;IAcjC;;OAEG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa;IAyBzC;;OAEG;IACH,OAAO,CAAC,SAAS,EAAE,aAAa,GAAG,MAAM;IAgCzC;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI1B;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAI/C;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,MAAM;IAI5B;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,GAAE,MAAW,GAAG,MAAM;CAI/C"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Crypto Service
3
+ * Provides AES-256-GCM encryption for credential storage
4
+ */
5
+ import * as crypto from 'crypto';
6
+ import { InvalidConfigError } from '../errors/index.js';
7
+ /**
8
+ * Encryption algorithm configuration
9
+ */
10
+ const ALGORITHM = 'aes-256-gcm';
11
+ const IV_LENGTH = 12; // 12 bytes for GCM
12
+ const AUTH_TAG_LENGTH = 16; // 16 bytes for GCM auth tag
13
+ /**
14
+ * Crypto service for encrypting and decrypting sensitive data
15
+ */
16
+ export class CryptoService {
17
+ key;
18
+ constructor(encryptionKey) {
19
+ // Validate key length (should be 64 hex characters = 32 bytes)
20
+ if (encryptionKey.length !== 64) {
21
+ throw new InvalidConfigError('Encryption key must be 64 hex characters (32 bytes)');
22
+ }
23
+ // Convert hex string to buffer
24
+ this.key = Buffer.from(encryptionKey, 'hex');
25
+ if (this.key.length !== 32) {
26
+ throw new InvalidConfigError('Encryption key must decode to 32 bytes');
27
+ }
28
+ }
29
+ /**
30
+ * Encrypt plaintext string using AES-256-GCM
31
+ */
32
+ encrypt(plaintext) {
33
+ // Generate random IV
34
+ const iv = crypto.randomBytes(IV_LENGTH);
35
+ // Create cipher
36
+ const cipher = crypto.createCipheriv(ALGORITHM, this.key, iv, {
37
+ authTagLength: AUTH_TAG_LENGTH,
38
+ });
39
+ // Encrypt
40
+ const encrypted = Buffer.concat([
41
+ cipher.update(plaintext, 'utf8'),
42
+ cipher.final(),
43
+ ]);
44
+ // Get auth tag
45
+ const authTag = cipher.getAuthTag();
46
+ return {
47
+ iv: iv.toString('base64'),
48
+ authTag: authTag.toString('base64'),
49
+ data: encrypted.toString('base64'),
50
+ };
51
+ }
52
+ /**
53
+ * Decrypt encrypted data using AES-256-GCM
54
+ */
55
+ decrypt(encrypted) {
56
+ // Decode from base64
57
+ const iv = Buffer.from(encrypted.iv, 'base64');
58
+ const authTag = Buffer.from(encrypted.authTag, 'base64');
59
+ const data = Buffer.from(encrypted.data, 'base64');
60
+ // Validate IV length
61
+ if (iv.length !== IV_LENGTH) {
62
+ throw new Error('Invalid IV length');
63
+ }
64
+ // Create decipher
65
+ const decipher = crypto.createDecipheriv(ALGORITHM, this.key, iv, {
66
+ authTagLength: AUTH_TAG_LENGTH,
67
+ });
68
+ // Set auth tag
69
+ decipher.setAuthTag(authTag);
70
+ // Decrypt
71
+ try {
72
+ const decrypted = Buffer.concat([
73
+ decipher.update(data),
74
+ decipher.final(),
75
+ ]);
76
+ return decrypted.toString('utf8');
77
+ }
78
+ catch (error) {
79
+ throw new Error('Decryption failed: authentication tag verification failed');
80
+ }
81
+ }
82
+ /**
83
+ * Hash a string using SHA-256
84
+ */
85
+ hash(data) {
86
+ return crypto.createHash('sha256').update(data).digest('hex');
87
+ }
88
+ /**
89
+ * Verify a hash against data
90
+ */
91
+ verifyHash(data, hash) {
92
+ return this.hash(data) === hash;
93
+ }
94
+ /**
95
+ * Generate a random hex string
96
+ */
97
+ static generateKey() {
98
+ return crypto.randomBytes(32).toString('hex');
99
+ }
100
+ /**
101
+ * Generate a random ID
102
+ */
103
+ static generateId(prefix = '') {
104
+ const id = crypto.randomBytes(8).toString('hex');
105
+ return prefix ? `${prefix}_${id}` : id;
106
+ }
107
+ }
108
+ //# sourceMappingURL=CryptoService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CryptoService.js","sourceRoot":"","sources":["../../src/services/CryptoService.ts"],"names":[],"mappings":"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"}
@@ -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":"AAAA;;;GAGG;AAqDH;;GAEG;AACH,MAAM,OAAO,aAAa;IACP,OAAO,CAAS;IAChB,SAAS,CAAO;IACzB,iBAAiB,GAAG,CAAC,CAAC;IACtB,iBAAiB,GAAG,CAAC,CAAC;IACtB,YAAY,GAAG,CAAC,CAAC;IACjB,cAAc,GAAG,IAAI,CAAC;IACtB,UAAU,GAAG,IAAI,CAAC;IAClB,gBAAgB,GAAgB,IAAI,CAAC;IACrC,YAAY,GAAgB,IAAI,CAAC;IAEzC,YAAY,OAA2B;QACrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,eAAe;QACb,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG;YACjB,GAAG,EAAE,IAAI,CAAC,YAAY,EAAE;YACxB,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE;YAChC,MAAM;SACP,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAEvD,OAAO;YACL,MAAM;YACN,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE;YACxB,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU;YACV,OAAO,EAAE;gBACP,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;gBACzC,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;aAC1C;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,eAAe;QACrB,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QACvC,OAAO;YACL,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,YAAY,EAAE,QAAQ,CAAC,YAAY;SACpC,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,YAAY;QAClB,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;YACvC,SAAS,EAAE,IAAI,CAAC,YAAY,IAAI,SAAS;YACzC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,uBAAuB;SACtE,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,gBAAgB;QACtB,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;YAC3C,SAAS,EAAE,IAAI,CAAC,gBAAgB,IAAI,SAAS;YAC7C,OAAO,EAAE,IAAI,CAAC,cAAc;gBAC1B,CAAC,CAAC,uBAAuB;gBACzB,CAAC,CAAC,2BAA2B;SAChC,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,UAI9B;QACC,0CAA0C;QAC1C,IACE,UAAU,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM;YAChC,UAAU,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,EACpC,CAAC;YACD,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,oDAAoD;QACpD,MAAM,gBAAgB,GACpB,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;QACnE,IAAI,gBAAgB,GAAG,EAAE,EAAE,CAAC;YAC1B,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,SAAS;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACH,YAAY;QACV,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,GAAG,EAAE,CAAC;QAE5B,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,IAAI,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;QACrC,IAAI,KAAK,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QACvC,IAAI,OAAO,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;QAE1B,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,KAAa;QACvB,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACtC,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,OAAO,KAAK,IAAI,IAAI,IAAI,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrD,KAAK,IAAI,IAAI,CAAC;YACd,SAAS,EAAE,CAAC;QACd,CAAC;QAED,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,wBAAwB;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;QACxC,MAAM,gBAAgB,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;QAEpE,MAAM,WAAW,GAAG;YAClB,OAAO,EAAE,GAAG;YACZ,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,GAAG;SACf,CAAC;QAEF,MAAM,cAAc,GAAG;YACrB,EAAE,EAAE,GAAG;YACP,IAAI,EAAE,GAAG;SACV,CAAC;QAEF,IAAI,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC;QACjE,MAAM,IAAI,gBAAgB,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC;QAC1D,MAAM,IAAI,gBAAgB,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC;QAClD,MAAM,IAAI,iBAAiB,MAAM,CAAC,OAAO,MAAM,CAAC;QAEhD,MAAM,IAAI,iBAAiB,CAAC;QAC5B,MAAM,IAAI,KAAK,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC;QACtG,MAAM,IAAI,KAAK,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,MAAM,CAAC;QAEpH,MAAM,IAAI,aAAa,CAAC;QACxB,MAAM,IAAI,cAAc,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QACxI,MAAM,IAAI,cAAc,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QACzD,MAAM,IAAI,kBAAkB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAEpE,MAAM,IAAI,cAAc,CAAC;QACzB,MAAM,IAAI,4BAA4B,MAAM,CAAC,OAAO,CAAC,iBAAiB,IAAI,CAAC;QAC3E,MAAM,IAAI,uBAAuB,MAAM,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC;QACjE,MAAM,IAAI,4BAA4B,MAAM,CAAC,OAAO,CAAC,iBAAiB,IAAI,CAAC;QAE3E,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,OAAgB;QAC3B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,OAAgB;QAC/B,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;QAC9B,IAAI,CAAC,gBAAgB,GAAG,IAAI,IAAI,EAAE,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,KAAa;QAChC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,KAAa;QAC3B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,aAAa;QACX,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACtC,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,iBAAiB,EAAE,MAAM,CAAC,OAAO,CAAC,iBAAiB;YACnD,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ;SAC5C,CAAC;IACJ,CAAC;CACF"}
@@ -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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"}