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,267 @@
1
+ /**
2
+ * Monitoring Service
3
+ * Provides server health monitoring and alerting
4
+ */
5
+ import { EventEmitter } from "events";
6
+ /**
7
+ * Service for monitoring server health
8
+ */
9
+ export class MonitoringService extends EventEmitter {
10
+ logger;
11
+ config;
12
+ serverStatuses = new Map();
13
+ checkTimer = null;
14
+ lastAlertTime = new Map();
15
+ isRunning = false;
16
+ checkFunction = null;
17
+ constructor(config, logger) {
18
+ super();
19
+ this.config = {
20
+ enabled: config.enabled ?? true,
21
+ checkInterval: config.checkInterval ?? 60000, // 1 minute
22
+ timeout: config.timeout ?? 10000, // 10 seconds
23
+ alertThreshold: config.alertThreshold ?? 3, // 3 consecutive failures
24
+ cooldownPeriod: config.cooldownPeriod ?? 300000, // 5 minutes
25
+ };
26
+ this.logger = logger;
27
+ }
28
+ /**
29
+ * Set the check function for server reachability
30
+ */
31
+ setCheckFunction(fn) {
32
+ this.checkFunction = fn;
33
+ }
34
+ /**
35
+ * Start monitoring
36
+ */
37
+ start() {
38
+ if (!this.config.enabled || this.isRunning) {
39
+ return;
40
+ }
41
+ this.isRunning = true;
42
+ this.scheduleNextCheck();
43
+ this.logger.info("Monitoring service started", {
44
+ checkInterval: this.config.checkInterval,
45
+ });
46
+ }
47
+ /**
48
+ * Stop monitoring
49
+ */
50
+ stop() {
51
+ if (this.checkTimer) {
52
+ clearTimeout(this.checkTimer);
53
+ this.checkTimer = null;
54
+ }
55
+ this.isRunning = false;
56
+ this.logger.info("Monitoring service stopped");
57
+ }
58
+ /**
59
+ * Register a server for monitoring
60
+ */
61
+ registerServer(server) {
62
+ const status = {
63
+ serverId: server.id,
64
+ serverName: server.note ?? server.host,
65
+ host: server.host,
66
+ isReachable: true,
67
+ lastCheck: null,
68
+ lastSuccessfulCheck: null,
69
+ consecutiveFailures: 0,
70
+ latency: null,
71
+ };
72
+ this.serverStatuses.set(server.id, status);
73
+ this.logger.debug("Server registered for monitoring", {
74
+ serverId: server.id,
75
+ serverName: status.serverName,
76
+ });
77
+ }
78
+ /**
79
+ * Unregister a server from monitoring
80
+ */
81
+ unregisterServer(serverId) {
82
+ this.serverStatuses.delete(serverId);
83
+ this.lastAlertTime.delete(serverId);
84
+ this.logger.debug("Server unregistered from monitoring", { serverId });
85
+ }
86
+ /**
87
+ * Get server status
88
+ */
89
+ getServerStatus(serverId) {
90
+ return this.serverStatuses.get(serverId);
91
+ }
92
+ /**
93
+ * Get all server statuses
94
+ */
95
+ getAllStatuses() {
96
+ return Array.from(this.serverStatuses.values());
97
+ }
98
+ /**
99
+ * Check a specific server
100
+ */
101
+ async checkServer(server) {
102
+ const status = this.serverStatuses.get(server.id);
103
+ if (!status) {
104
+ throw new Error(`Server ${server.id} not registered for monitoring`);
105
+ }
106
+ const previousStatus = { ...status };
107
+ const startTime = Date.now();
108
+ try {
109
+ if (!this.checkFunction) {
110
+ throw new Error("Check function not configured");
111
+ }
112
+ const isReachable = await this.checkFunction(server);
113
+ const latency = Date.now() - startTime;
114
+ status.lastCheck = new Date();
115
+ status.latency = latency;
116
+ status.error = undefined;
117
+ if (isReachable) {
118
+ status.isReachable = true;
119
+ status.lastSuccessfulCheck = new Date();
120
+ // Check for recovery
121
+ if (previousStatus.consecutiveFailures > 0) {
122
+ this.emit("server:recovered", {
123
+ server,
124
+ status,
125
+ previousStatus,
126
+ timestamp: new Date(),
127
+ });
128
+ this.logger.info("Server recovered", {
129
+ serverId: server.id,
130
+ serverName: status.serverName,
131
+ previousFailures: previousStatus.consecutiveFailures,
132
+ });
133
+ }
134
+ status.consecutiveFailures = 0;
135
+ }
136
+ else {
137
+ this.handleFailure(server, status, previousStatus, "Health check returned false");
138
+ }
139
+ }
140
+ catch (error) {
141
+ const latency = Date.now() - startTime;
142
+ status.lastCheck = new Date();
143
+ status.latency = latency;
144
+ status.error = error instanceof Error ? error.message : String(error);
145
+ this.handleFailure(server, status, previousStatus, status.error);
146
+ }
147
+ return status;
148
+ }
149
+ /**
150
+ * Handle server failure
151
+ */
152
+ handleFailure(server, status, previousStatus, error) {
153
+ status.isReachable = false;
154
+ status.consecutiveFailures++;
155
+ status.error = error;
156
+ this.logger.warn("Server health check failed", {
157
+ serverId: server.id,
158
+ serverName: status.serverName,
159
+ consecutiveFailures: status.consecutiveFailures,
160
+ error,
161
+ });
162
+ // Emit unreachable event
163
+ this.emit("server:unreachable", {
164
+ server,
165
+ status,
166
+ previousStatus,
167
+ timestamp: new Date(),
168
+ });
169
+ // Check if alert should be triggered
170
+ if (status.consecutiveFailures >= this.config.alertThreshold) {
171
+ this.maybeTriggerAlert(server, status, previousStatus);
172
+ }
173
+ }
174
+ /**
175
+ * Maybe trigger an alert (respects cooldown)
176
+ */
177
+ maybeTriggerAlert(server, status, previousStatus) {
178
+ const lastAlert = this.lastAlertTime.get(server.id);
179
+ const now = new Date();
180
+ // Check cooldown
181
+ if (lastAlert) {
182
+ const timeSinceLastAlert = now.getTime() - lastAlert.getTime();
183
+ if (timeSinceLastAlert < this.config.cooldownPeriod) {
184
+ this.logger.debug("Alert skipped due to cooldown", {
185
+ serverId: server.id,
186
+ timeSinceLastAlert,
187
+ cooldownPeriod: this.config.cooldownPeriod,
188
+ });
189
+ return;
190
+ }
191
+ }
192
+ this.lastAlertTime.set(server.id, now);
193
+ this.emit("alert:triggered", {
194
+ server,
195
+ status,
196
+ previousStatus,
197
+ timestamp: now,
198
+ });
199
+ this.logger.error("Server alert triggered", undefined, {
200
+ serverId: server.id,
201
+ serverName: status.serverName,
202
+ consecutiveFailures: status.consecutiveFailures,
203
+ error: status.error,
204
+ });
205
+ }
206
+ /**
207
+ * Schedule next monitoring check
208
+ */
209
+ scheduleNextCheck() {
210
+ this.checkTimer = setTimeout(() => {
211
+ this.performCheck();
212
+ }, this.config.checkInterval);
213
+ }
214
+ /**
215
+ * Perform monitoring check on all servers
216
+ */
217
+ async performCheck() {
218
+ const servers = Array.from(this.serverStatuses.keys());
219
+ if (servers.length === 0) {
220
+ this.scheduleNextCheck();
221
+ return;
222
+ }
223
+ this.logger.debug("Performing monitoring check", {
224
+ serverCount: servers.length,
225
+ });
226
+ // Check all servers in parallel
227
+ // Note: We need the actual Server objects, but we only have IDs here
228
+ // In practice, this would be called with server objects from the caller
229
+ // For now, we emit an event that the caller can handle
230
+ this.emit("check:needed", servers);
231
+ this.scheduleNextCheck();
232
+ }
233
+ /**
234
+ * Get monitoring statistics
235
+ */
236
+ getStats() {
237
+ let reachable = 0;
238
+ let unreachable = 0;
239
+ for (const status of this.serverStatuses.values()) {
240
+ if (status.isReachable) {
241
+ reachable++;
242
+ }
243
+ else {
244
+ unreachable++;
245
+ }
246
+ }
247
+ return {
248
+ totalServers: this.serverStatuses.size,
249
+ reachableServers: reachable,
250
+ unreachableServers: unreachable,
251
+ isRunning: this.isRunning,
252
+ };
253
+ }
254
+ /**
255
+ * Get log context for monitoring-related logs
256
+ */
257
+ getLogContext() {
258
+ const stats = this.getStats();
259
+ return {
260
+ monitoring: stats.isRunning,
261
+ totalServers: stats.totalServers,
262
+ reachableServers: stats.reachableServers,
263
+ unreachableServers: stats.unreachableServers,
264
+ };
265
+ }
266
+ }
267
+ //# sourceMappingURL=MonitoringService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MonitoringService.js","sourceRoot":"","sources":["../../src/services/MonitoringService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Notification Service
3
+ * Provides admin notifications for important events
4
+ */
5
+ import { LoggingService } from "./LoggingService.js";
6
+ import type { IBot, LogContext, Server } from "../types/index.js";
7
+ /**
8
+ * Notification types
9
+ */
10
+ export type NotificationType = "startup" | "shutdown" | "error" | "security" | "server_added" | "server_removed" | "connection_lost" | "connection_restored" | "backup_created" | "backup_restored" | "config_reloaded" | "rate_limited" | "unauthorized_access";
11
+ /**
12
+ * Notification priority
13
+ */
14
+ export type NotificationPriority = "low" | "normal" | "high" | "critical";
15
+ /**
16
+ * Notification payload
17
+ */
18
+ export interface NotificationPayload {
19
+ type: NotificationType;
20
+ priority: NotificationPriority;
21
+ title: string;
22
+ message: string;
23
+ details?: Record<string, unknown>;
24
+ timestamp: Date;
25
+ }
26
+ /**
27
+ * Notification configuration
28
+ */
29
+ export interface NotificationConfig {
30
+ enabled: boolean;
31
+ notifyOnStartup: boolean;
32
+ notifyOnShutdown: boolean;
33
+ notifyOnErrors: boolean;
34
+ notifyOnSecurity: boolean;
35
+ adminChatId: string;
36
+ }
37
+ /**
38
+ * Service for sending admin notifications
39
+ */
40
+ export declare class NotificationService {
41
+ private readonly logger;
42
+ private readonly config;
43
+ private bot;
44
+ private notificationCount;
45
+ private readonly startTime;
46
+ constructor(config: Partial<NotificationConfig>, logger: LoggingService);
47
+ /**
48
+ * Set the bot instance for sending messages
49
+ */
50
+ setBot(bot: IBot): void;
51
+ /**
52
+ * Send a notification
53
+ */
54
+ notify(payload: Omit<NotificationPayload, "timestamp">): Promise<boolean>;
55
+ /**
56
+ * Send startup notification
57
+ */
58
+ notifyStartup(version: string): Promise<boolean>;
59
+ /**
60
+ * Send shutdown notification
61
+ */
62
+ notifyShutdown(reason: string): Promise<boolean>;
63
+ /**
64
+ * Send error notification
65
+ */
66
+ notifyError(error: Error, context?: Record<string, unknown>): Promise<boolean>;
67
+ /**
68
+ * Send security notification
69
+ */
70
+ notifySecurity(event: string, details?: Record<string, unknown>): Promise<boolean>;
71
+ /**
72
+ * Send server added notification
73
+ */
74
+ notifyServerAdded(server: Server): Promise<boolean>;
75
+ /**
76
+ * Send server removed notification
77
+ */
78
+ notifyServerRemoved(server: Server): Promise<boolean>;
79
+ /**
80
+ * Send connection lost notification
81
+ */
82
+ notifyConnectionLost(server: Server, error?: string): Promise<boolean>;
83
+ /**
84
+ * Send connection restored notification
85
+ */
86
+ notifyConnectionRestored(server: Server): Promise<boolean>;
87
+ /**
88
+ * Send backup created notification
89
+ */
90
+ notifyBackupCreated(backupId: string, size: number): Promise<boolean>;
91
+ /**
92
+ * Send backup restored notification
93
+ */
94
+ notifyBackupRestored(backupId: string): Promise<boolean>;
95
+ /**
96
+ * Send config reloaded notification
97
+ */
98
+ notifyConfigReloaded(success: boolean): Promise<boolean>;
99
+ /**
100
+ * Send rate limited notification
101
+ */
102
+ notifyRateLimited(chatId: number, command: string): Promise<boolean>;
103
+ /**
104
+ * Send unauthorized access notification
105
+ */
106
+ notifyUnauthorizedAccess(chatId: number, username: string | undefined, command: string): Promise<boolean>;
107
+ /**
108
+ * Get notification statistics
109
+ */
110
+ getStats(): {
111
+ enabled: boolean;
112
+ totalNotifications: number;
113
+ uptime: number;
114
+ };
115
+ /**
116
+ * Get log context for notification-related logs
117
+ */
118
+ getLogContext(): LogContext;
119
+ /**
120
+ * Format notification message
121
+ */
122
+ private formatNotification;
123
+ /**
124
+ * Format uptime as human-readable string
125
+ */
126
+ private formatUptime;
127
+ /**
128
+ * Format bytes to human-readable string
129
+ */
130
+ private formatBytes;
131
+ }
132
+ //# sourceMappingURL=NotificationService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotificationService.d.ts","sourceRoot":"","sources":["../../src/services/NotificationService.ts"],"names":[],"mappings":"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"}