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.
- package/LICENSE +21 -0
- package/README.md +103 -22
- package/deploy/.env.example +86 -0
- package/dist/config/index.d.ts +68 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +315 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/schema.d.ts +6 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +50 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/core/Bot.d.ts +91 -0
- package/dist/core/Bot.d.ts.map +1 -0
- package/dist/core/Bot.js +263 -0
- package/dist/core/Bot.js.map +1 -0
- package/dist/core/ConnectionPool.d.ts +125 -0
- package/dist/core/ConnectionPool.d.ts.map +1 -0
- package/dist/core/ConnectionPool.js +397 -0
- package/dist/core/ConnectionPool.js.map +1 -0
- package/dist/core/SSHClient.d.ts +112 -0
- package/dist/core/SSHClient.d.ts.map +1 -0
- package/dist/core/SSHClient.js +367 -0
- package/dist/core/SSHClient.js.map +1 -0
- package/dist/core/ServerManager.d.ts +80 -0
- package/dist/core/ServerManager.d.ts.map +1 -0
- package/dist/core/ServerManager.js +207 -0
- package/dist/core/ServerManager.js.map +1 -0
- package/dist/core/index.d.ts +8 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +8 -0
- package/dist/core/index.js.map +1 -0
- package/dist/errors/AuthError.d.ts +30 -0
- package/dist/errors/AuthError.d.ts.map +1 -0
- package/dist/errors/AuthError.js +35 -0
- package/dist/errors/AuthError.js.map +1 -0
- package/dist/errors/BaseError.d.ts +17 -0
- package/dist/errors/BaseError.d.ts.map +1 -0
- package/dist/errors/BaseError.js +34 -0
- package/dist/errors/BaseError.js.map +1 -0
- package/dist/errors/ConfigurationError.d.ts +24 -0
- package/dist/errors/ConfigurationError.d.ts.map +1 -0
- package/dist/errors/ConfigurationError.js +24 -0
- package/dist/errors/ConfigurationError.js.map +1 -0
- package/dist/errors/PoolError.d.ts +21 -0
- package/dist/errors/PoolError.d.ts.map +1 -0
- package/dist/errors/PoolError.js +30 -0
- package/dist/errors/PoolError.js.map +1 -0
- package/dist/errors/SSHError.d.ts +24 -0
- package/dist/errors/SSHError.d.ts.map +1 -0
- package/dist/errors/SSHError.js +38 -0
- package/dist/errors/SSHError.js.map +1 -0
- package/dist/errors/StorageError.d.ts +24 -0
- package/dist/errors/StorageError.d.ts.map +1 -0
- package/dist/errors/StorageError.js +35 -0
- package/dist/errors/StorageError.js.map +1 -0
- package/dist/errors/ValidationError.d.ts +29 -0
- package/dist/errors/ValidationError.d.ts.map +1 -0
- package/dist/errors/ValidationError.js +35 -0
- package/dist/errors/ValidationError.js.map +1 -0
- package/dist/errors/index.d.ts +11 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +18 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/handlers/BaseHandler.d.ts +50 -0
- package/dist/handlers/BaseHandler.d.ts.map +1 -0
- package/dist/handlers/BaseHandler.js +87 -0
- package/dist/handlers/BaseHandler.js.map +1 -0
- package/dist/handlers/CommandHandler.d.ts +23 -0
- package/dist/handlers/CommandHandler.d.ts.map +1 -0
- package/dist/handlers/CommandHandler.js +99 -0
- package/dist/handlers/CommandHandler.js.map +1 -0
- package/dist/handlers/HealthHandler.d.ts +25 -0
- package/dist/handlers/HealthHandler.d.ts.map +1 -0
- package/dist/handlers/HealthHandler.js +51 -0
- package/dist/handlers/HealthHandler.js.map +1 -0
- package/dist/handlers/HelpHandler.d.ts +32 -0
- package/dist/handlers/HelpHandler.d.ts.map +1 -0
- package/dist/handlers/HelpHandler.js +76 -0
- package/dist/handlers/HelpHandler.js.map +1 -0
- package/dist/handlers/ServerHandler.d.ts +72 -0
- package/dist/handlers/ServerHandler.d.ts.map +1 -0
- package/dist/handlers/ServerHandler.js +272 -0
- package/dist/handlers/ServerHandler.js.map +1 -0
- package/dist/handlers/index.d.ts +9 -0
- package/dist/handlers/index.d.ts.map +1 -0
- package/dist/handlers/index.js +9 -0
- package/dist/handlers/index.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +348 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/AuthMiddleware.d.ts +28 -0
- package/dist/middleware/AuthMiddleware.d.ts.map +1 -0
- package/dist/middleware/AuthMiddleware.js +49 -0
- package/dist/middleware/AuthMiddleware.js.map +1 -0
- package/dist/middleware/RateLimitMiddleware.d.ts +23 -0
- package/dist/middleware/RateLimitMiddleware.d.ts.map +1 -0
- package/dist/middleware/RateLimitMiddleware.js +34 -0
- package/dist/middleware/RateLimitMiddleware.js.map +1 -0
- package/dist/middleware/index.d.ts +6 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +6 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/services/BackupService.d.ts +119 -0
- package/dist/services/BackupService.d.ts.map +1 -0
- package/dist/services/BackupService.js +313 -0
- package/dist/services/BackupService.js.map +1 -0
- package/dist/services/CryptoService.d.ts +37 -0
- package/dist/services/CryptoService.d.ts.map +1 -0
- package/dist/services/CryptoService.js +108 -0
- package/dist/services/CryptoService.js.map +1 -0
- package/dist/services/HealthService.d.ts +126 -0
- package/dist/services/HealthService.d.ts.map +1 -0
- package/dist/services/HealthService.js +213 -0
- package/dist/services/HealthService.js.map +1 -0
- package/dist/services/LoggingService.d.ts +115 -0
- package/dist/services/LoggingService.d.ts.map +1 -0
- package/dist/services/LoggingService.js +334 -0
- package/dist/services/LoggingService.js.map +1 -0
- package/dist/services/MonitoringService.d.ts +119 -0
- package/dist/services/MonitoringService.d.ts.map +1 -0
- package/dist/services/MonitoringService.js +267 -0
- package/dist/services/MonitoringService.js.map +1 -0
- package/dist/services/NotificationService.d.ts +132 -0
- package/dist/services/NotificationService.d.ts.map +1 -0
- package/dist/services/NotificationService.js +297 -0
- package/dist/services/NotificationService.js.map +1 -0
- package/dist/services/RateLimiter.d.ts +51 -0
- package/dist/services/RateLimiter.d.ts.map +1 -0
- package/dist/services/RateLimiter.js +141 -0
- package/dist/services/RateLimiter.js.map +1 -0
- package/dist/services/ValidationService.d.ts +49 -0
- package/dist/services/ValidationService.d.ts.map +1 -0
- package/dist/services/ValidationService.js +158 -0
- package/dist/services/ValidationService.js.map +1 -0
- package/dist/services/index.d.ts +12 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +12 -0
- package/dist/services/index.js.map +1 -0
- package/dist/types/Bot.d.ts +63 -0
- package/dist/types/Bot.d.ts.map +1 -0
- package/dist/types/Bot.js +5 -0
- package/dist/types/Bot.js.map +1 -0
- package/dist/types/Config.d.ts +57 -0
- package/dist/types/Config.d.ts.map +1 -0
- package/dist/types/Config.js +5 -0
- package/dist/types/Config.js.map +1 -0
- package/dist/types/Errors.d.ts +37 -0
- package/dist/types/Errors.d.ts.map +1 -0
- package/dist/types/Errors.js +34 -0
- package/dist/types/Errors.js.map +1 -0
- package/dist/types/SSH.d.ts +56 -0
- package/dist/types/SSH.d.ts.map +1 -0
- package/dist/types/SSH.js +6 -0
- package/dist/types/SSH.js.map +1 -0
- package/dist/types/Server.d.ts +39 -0
- package/dist/types/Server.d.ts.map +1 -0
- package/dist/types/Server.js +5 -0
- package/dist/types/Server.js.map +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/commandUtils.d.ts +25 -0
- package/dist/utils/commandUtils.d.ts.map +1 -0
- package/dist/utils/commandUtils.js +94 -0
- package/dist/utils/commandUtils.js.map +1 -0
- package/dist/utils/fileUtils.d.ts +40 -0
- package/dist/utils/fileUtils.d.ts.map +1 -0
- package/dist/utils/fileUtils.js +114 -0
- package/dist/utils/fileUtils.js.map +1 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +7 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/pathUtils.d.ts +40 -0
- package/dist/utils/pathUtils.d.ts.map +1 -0
- package/dist/utils/pathUtils.js +140 -0
- package/dist/utils/pathUtils.js.map +1 -0
- package/package.json +31 -5
- package/scripts/build.sh +20 -0
- package/scripts/postinstall.js +87 -0
- package/scripts/release.sh +22 -0
- package/scripts/setup-env.js +237 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation Service
|
|
3
|
+
* Provides input validation and sanitization
|
|
4
|
+
*/
|
|
5
|
+
import { sanitizeCommand, validateCommand } from "../utils/commandUtils.js";
|
|
6
|
+
import { parsePort, validateHost, validatePath, validatePort, } from "../utils/pathUtils.js";
|
|
7
|
+
/**
|
|
8
|
+
* Validation service for input sanitization and validation
|
|
9
|
+
*/
|
|
10
|
+
export class ValidationService {
|
|
11
|
+
allowedCommands;
|
|
12
|
+
blockedCommands;
|
|
13
|
+
constructor(options) {
|
|
14
|
+
this.allowedCommands = options?.allowedCommands;
|
|
15
|
+
this.blockedCommands = options?.blockedCommands;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Validate and sanitize a command
|
|
19
|
+
*/
|
|
20
|
+
validateCommand(command) {
|
|
21
|
+
// Basic validation
|
|
22
|
+
if (!command || command.trim().length === 0) {
|
|
23
|
+
return { valid: false, error: "Command cannot be empty" };
|
|
24
|
+
}
|
|
25
|
+
// Check against blocklist
|
|
26
|
+
if (this.blockedCommands) {
|
|
27
|
+
const parts = command.trim().split(/\s+/);
|
|
28
|
+
const commandBase = parts[0];
|
|
29
|
+
if (commandBase && this.blockedCommands.includes(commandBase)) {
|
|
30
|
+
return { valid: false, error: `Command '${commandBase}' is blocked` };
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// Check against allowlist (if configured)
|
|
34
|
+
if (this.allowedCommands && this.allowedCommands.length > 0) {
|
|
35
|
+
const parts = command.trim().split(/\s+/);
|
|
36
|
+
const commandBase = parts[0];
|
|
37
|
+
if (commandBase && !this.allowedCommands.includes(commandBase)) {
|
|
38
|
+
return {
|
|
39
|
+
valid: false,
|
|
40
|
+
error: `Command '${commandBase}' is not allowed`,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Sanitize command
|
|
45
|
+
return validateCommand(command);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Validate server configuration
|
|
49
|
+
*/
|
|
50
|
+
validateServerConfig(data) {
|
|
51
|
+
const errors = [];
|
|
52
|
+
// Validate host
|
|
53
|
+
if (!data.host) {
|
|
54
|
+
errors.push("Host is required");
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
const hostResult = validateHost(data.host);
|
|
58
|
+
if (!hostResult.valid) {
|
|
59
|
+
errors.push(hostResult.error ?? "Invalid host");
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Validate port
|
|
63
|
+
if (data.port !== undefined) {
|
|
64
|
+
const portResult = validatePort(data.port);
|
|
65
|
+
if (!portResult.valid) {
|
|
66
|
+
errors.push(portResult.error ?? "Invalid port");
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Validate username
|
|
70
|
+
if (!data.username || data.username.trim().length === 0) {
|
|
71
|
+
errors.push("Username is required");
|
|
72
|
+
}
|
|
73
|
+
// Validate authentication
|
|
74
|
+
if (!data.password && !data.privateKeyPath) {
|
|
75
|
+
errors.push("Either password or privateKeyPath is required");
|
|
76
|
+
}
|
|
77
|
+
// Validate private key path if provided
|
|
78
|
+
if (data.privateKeyPath) {
|
|
79
|
+
const pathResult = validatePath(data.privateKeyPath);
|
|
80
|
+
if (!pathResult.valid) {
|
|
81
|
+
errors.push(`Invalid private key path: ${pathResult.error}`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (errors.length > 0) {
|
|
85
|
+
return { valid: false, error: errors.join("; ") };
|
|
86
|
+
}
|
|
87
|
+
// Build valid config
|
|
88
|
+
const config = {
|
|
89
|
+
host: data.host.trim(),
|
|
90
|
+
port: data.port ?? 22,
|
|
91
|
+
username: data.username.trim(),
|
|
92
|
+
password: data.password,
|
|
93
|
+
privateKeyPath: data.privateKeyPath,
|
|
94
|
+
keyPassphrase: data.keyPassphrase,
|
|
95
|
+
note: data.note?.trim(),
|
|
96
|
+
};
|
|
97
|
+
return { valid: true, data: config };
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Validate SSH connection configuration
|
|
101
|
+
*/
|
|
102
|
+
validateSSHConfig(config) {
|
|
103
|
+
const errors = [];
|
|
104
|
+
// Validate host
|
|
105
|
+
const hostResult = validateHost(config.host);
|
|
106
|
+
if (!hostResult.valid) {
|
|
107
|
+
errors.push(hostResult.error ?? "Invalid host");
|
|
108
|
+
}
|
|
109
|
+
// Validate port
|
|
110
|
+
const portResult = validatePort(config.port);
|
|
111
|
+
if (!portResult.valid) {
|
|
112
|
+
errors.push(portResult.error ?? "Invalid port");
|
|
113
|
+
}
|
|
114
|
+
// Validate username
|
|
115
|
+
if (!config.username || config.username.trim().length === 0) {
|
|
116
|
+
errors.push("Username is required");
|
|
117
|
+
}
|
|
118
|
+
// Validate authentication
|
|
119
|
+
if (!config.password && !config.privateKey) {
|
|
120
|
+
errors.push("Either password or privateKey is required");
|
|
121
|
+
}
|
|
122
|
+
if (errors.length > 0) {
|
|
123
|
+
return { valid: false, error: errors.join("; ") };
|
|
124
|
+
}
|
|
125
|
+
return { valid: true, data: config };
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Validate a path for file operations
|
|
129
|
+
*/
|
|
130
|
+
validatePath(inputPath, basePath) {
|
|
131
|
+
return validatePath(inputPath, basePath);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Validate a host address
|
|
135
|
+
*/
|
|
136
|
+
validateHost(host) {
|
|
137
|
+
return validateHost(host);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Validate a port number
|
|
141
|
+
*/
|
|
142
|
+
validatePort(port) {
|
|
143
|
+
return validatePort(port);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Parse and validate a port from string
|
|
147
|
+
*/
|
|
148
|
+
parsePort(portStr) {
|
|
149
|
+
return parsePort(portStr);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Sanitize a command string
|
|
153
|
+
*/
|
|
154
|
+
sanitizeCommand(command) {
|
|
155
|
+
return sanitizeCommand(command);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=ValidationService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValidationService.js","sourceRoot":"","sources":["../../src/services/ValidationService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EACL,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,YAAY,GACb,MAAM,uBAAuB,CAAC;AAE/B;;GAEG;AACH,MAAM,OAAO,iBAAiB;IACX,eAAe,CAAuB;IACtC,eAAe,CAAuB;IAEvD,YAAY,OAGX;QACC,IAAI,CAAC,eAAe,GAAG,OAAO,EAAE,eAAe,CAAC;QAChD,IAAI,CAAC,eAAe,GAAG,OAAO,EAAE,eAAe,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,OAAe;QAC7B,mBAAmB;QACnB,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC;QAC5D,CAAC;QAED,0BAA0B;QAC1B,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1C,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,WAAW,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC9D,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,WAAW,cAAc,EAAE,CAAC;YACxE,CAAC;QACH,CAAC;QAED,0CAA0C;QAC1C,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1C,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC/D,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,YAAY,WAAW,kBAAkB;iBACjD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,oBAAoB,CAClB,IAA2B;QAE3B,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,gBAAgB;QAChB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,cAAc,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAED,gBAAgB;QAChB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,cAAc,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxD,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACtC,CAAC;QAED,0BAA0B;QAC1B,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC/D,CAAC;QAED,wCAAwC;QACxC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACrD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC,6BAA6B,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpD,CAAC;QAED,qBAAqB;QACrB,MAAM,MAAM,GAAiB;YAC3B,IAAI,EAAE,IAAI,CAAC,IAAK,CAAC,IAAI,EAAE;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAS,CAAC,IAAI,EAAE;YAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;SACxB,CAAC;QAEF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,iBAAiB,CACf,MAA2B;QAE3B,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,gBAAgB;QAChB,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,cAAc,CAAC,CAAC;QAClD,CAAC;QAED,gBAAgB;QAChB,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,cAAc,CAAC,CAAC;QAClD,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5D,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACtC,CAAC;QAED,0BAA0B;QAC1B,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpD,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,SAAiB,EAAE,QAAiB;QAC/C,OAAO,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,IAAY;QACvB,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,IAAY;QACvB,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,OAAe;QACvB,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,OAAe;QAC7B,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service modules index - exports all services
|
|
3
|
+
*/
|
|
4
|
+
export { BackupService } from "./BackupService.js";
|
|
5
|
+
export { CryptoService } from "./CryptoService.js";
|
|
6
|
+
export { HealthService } from "./HealthService.js";
|
|
7
|
+
export { LoggingService } from "./LoggingService.js";
|
|
8
|
+
export { MonitoringService } from "./MonitoringService.js";
|
|
9
|
+
export { NotificationService } from "./NotificationService.js";
|
|
10
|
+
export { RateLimiter } from "./RateLimiter.js";
|
|
11
|
+
export { ValidationService } from "./ValidationService.js";
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service modules index - exports all services
|
|
3
|
+
*/
|
|
4
|
+
export { BackupService } from "./BackupService.js";
|
|
5
|
+
export { CryptoService } from "./CryptoService.js";
|
|
6
|
+
export { HealthService } from "./HealthService.js";
|
|
7
|
+
export { LoggingService } from "./LoggingService.js";
|
|
8
|
+
export { MonitoringService } from "./MonitoringService.js";
|
|
9
|
+
export { NotificationService } from "./NotificationService.js";
|
|
10
|
+
export { RateLimiter } from "./RateLimiter.js";
|
|
11
|
+
export { ValidationService } from "./ValidationService.js";
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bot-related type definitions
|
|
3
|
+
*/
|
|
4
|
+
import type TelegramBot from "node-telegram-bot-api";
|
|
5
|
+
export interface MessageContext {
|
|
6
|
+
message: TelegramBot.Message;
|
|
7
|
+
chatId: number;
|
|
8
|
+
userId: number;
|
|
9
|
+
text?: string;
|
|
10
|
+
isOwner: boolean;
|
|
11
|
+
timestamp: Date;
|
|
12
|
+
}
|
|
13
|
+
export interface CommandContext extends MessageContext {
|
|
14
|
+
command: string;
|
|
15
|
+
args: string;
|
|
16
|
+
match: RegExpMatchArray;
|
|
17
|
+
}
|
|
18
|
+
export interface BotCommand {
|
|
19
|
+
command: string;
|
|
20
|
+
description: string;
|
|
21
|
+
}
|
|
22
|
+
export interface MessageOptions {
|
|
23
|
+
parseMode?: "HTML" | "Markdown" | "MarkdownV2";
|
|
24
|
+
disableWebPagePreview?: boolean;
|
|
25
|
+
protectContent?: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface MiddlewareContext extends MessageContext {
|
|
28
|
+
next: () => Promise<void>;
|
|
29
|
+
state: Record<string, unknown>;
|
|
30
|
+
}
|
|
31
|
+
export interface ICommandHandler {
|
|
32
|
+
name: string;
|
|
33
|
+
description: string;
|
|
34
|
+
pattern: RegExp;
|
|
35
|
+
execute(context: CommandContext): Promise<void>;
|
|
36
|
+
}
|
|
37
|
+
export interface IMiddleware {
|
|
38
|
+
execute(context: MiddlewareContext): Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
export interface IBot {
|
|
41
|
+
start(): Promise<void>;
|
|
42
|
+
stop(): Promise<void>;
|
|
43
|
+
sendMessage(chatId: number, message: string, options?: MessageOptions): Promise<void>;
|
|
44
|
+
}
|
|
45
|
+
export interface LogContext {
|
|
46
|
+
chatId?: number;
|
|
47
|
+
userId?: number;
|
|
48
|
+
command?: string;
|
|
49
|
+
serverId?: string;
|
|
50
|
+
[key: string]: unknown;
|
|
51
|
+
}
|
|
52
|
+
export interface LogEntry {
|
|
53
|
+
timestamp: string;
|
|
54
|
+
level: "debug" | "info" | "warn" | "error";
|
|
55
|
+
message: string;
|
|
56
|
+
context?: LogContext;
|
|
57
|
+
error?: {
|
|
58
|
+
name: string;
|
|
59
|
+
message: string;
|
|
60
|
+
stack?: string;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=Bot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Bot.d.ts","sourceRoot":"","sources":["../../src/types/Bot.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,WAAW,MAAM,uBAAuB,CAAC;AAErD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,gBAAgB,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,YAAY,CAAC;IAC/C,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,IAAI;IACnB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,WAAW,CACT,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Bot.js","sourceRoot":"","sources":["../../src/types/Bot.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration type definitions
|
|
3
|
+
*/
|
|
4
|
+
export interface TelegramConfig {
|
|
5
|
+
token: string;
|
|
6
|
+
chatId: string;
|
|
7
|
+
ownerIds: string[];
|
|
8
|
+
polling: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface SecurityConfig {
|
|
11
|
+
encryptionKey: string;
|
|
12
|
+
rateLimit: RateLimitConfig;
|
|
13
|
+
allowedCommands?: string[];
|
|
14
|
+
blockedCommands?: string[];
|
|
15
|
+
}
|
|
16
|
+
export interface RateLimitConfig {
|
|
17
|
+
enabled: boolean;
|
|
18
|
+
windowMs: number;
|
|
19
|
+
maxRequests: number;
|
|
20
|
+
skipFailedRequests: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface SSHConfig {
|
|
23
|
+
defaultPrivateKeyPath: string;
|
|
24
|
+
defaultPort: number;
|
|
25
|
+
connectionTimeout: number;
|
|
26
|
+
keepaliveInterval: number;
|
|
27
|
+
maxConnections: number;
|
|
28
|
+
commandTimeout: number;
|
|
29
|
+
}
|
|
30
|
+
export interface LoggingConfig {
|
|
31
|
+
level: "debug" | "info" | "warn" | "error";
|
|
32
|
+
format: "json" | "pretty";
|
|
33
|
+
file?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface StorageConfig {
|
|
36
|
+
serversFile: string;
|
|
37
|
+
encryptionEnabled: boolean;
|
|
38
|
+
}
|
|
39
|
+
export interface BackupConfig {
|
|
40
|
+
enabled: boolean;
|
|
41
|
+
intervalMs: number;
|
|
42
|
+
maxCount: number;
|
|
43
|
+
}
|
|
44
|
+
export interface MonitoringConfig {
|
|
45
|
+
enabled: boolean;
|
|
46
|
+
intervalMs: number;
|
|
47
|
+
}
|
|
48
|
+
export interface AppConfig {
|
|
49
|
+
telegram: TelegramConfig;
|
|
50
|
+
security: SecurityConfig;
|
|
51
|
+
ssh: SSHConfig;
|
|
52
|
+
logging: LoggingConfig;
|
|
53
|
+
storage: StorageConfig;
|
|
54
|
+
backup: BackupConfig;
|
|
55
|
+
monitoring: MonitoringConfig;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=Config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../src/types/Config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,eAAe,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,SAAS;IACxB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC3C,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE,cAAc,CAAC;IACzB,GAAG,EAAE,SAAS,CAAC;IACf,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,gBAAgB,CAAC;CAC9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Config.js","sourceRoot":"","sources":["../../src/types/Config.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error type definitions
|
|
3
|
+
*/
|
|
4
|
+
export declare enum ErrorCode {
|
|
5
|
+
INVALID_INPUT = 1001,
|
|
6
|
+
INVALID_SERVER_CONFIG = 1002,
|
|
7
|
+
INVALID_COMMAND = 1003,
|
|
8
|
+
INVALID_PATH = 1004,
|
|
9
|
+
UNAUTHORIZED = 2001,
|
|
10
|
+
INVALID_CREDENTIALS = 2002,
|
|
11
|
+
RATE_LIMITED = 2003,
|
|
12
|
+
CONNECTION_FAILED = 3001,
|
|
13
|
+
COMMAND_FAILED = 3002,
|
|
14
|
+
CONNECTION_TIMEOUT = 3003,
|
|
15
|
+
DISCONNECTED = 3004,
|
|
16
|
+
MISSING_CONFIG = 4001,
|
|
17
|
+
INVALID_CONFIG = 4002,
|
|
18
|
+
FILE_NOT_FOUND = 5001,
|
|
19
|
+
FILE_READ_ERROR = 5002,
|
|
20
|
+
FILE_WRITE_ERROR = 5003,
|
|
21
|
+
POOL_EXHAUSTED = 6001,
|
|
22
|
+
CONNECTION_ACQUIRE_TIMEOUT = 6002,
|
|
23
|
+
INTERNAL_ERROR = 9001,
|
|
24
|
+
UNKNOWN_ERROR = 9999
|
|
25
|
+
}
|
|
26
|
+
export interface ErrorDetails {
|
|
27
|
+
code: ErrorCode;
|
|
28
|
+
message: string;
|
|
29
|
+
context?: Record<string, unknown>;
|
|
30
|
+
cause?: Error;
|
|
31
|
+
}
|
|
32
|
+
export interface ValidationResult<T> {
|
|
33
|
+
valid: boolean;
|
|
34
|
+
data?: T;
|
|
35
|
+
error?: string;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=Errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Errors.d.ts","sourceRoot":"","sources":["../../src/types/Errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,oBAAY,SAAS;IAEnB,aAAa,OAAO;IACpB,qBAAqB,OAAO;IAC5B,eAAe,OAAO;IACtB,YAAY,OAAO;IAGnB,YAAY,OAAO;IACnB,mBAAmB,OAAO;IAC1B,YAAY,OAAO;IAGnB,iBAAiB,OAAO;IACxB,cAAc,OAAO;IACrB,kBAAkB,OAAO;IACzB,YAAY,OAAO;IAGnB,cAAc,OAAO;IACrB,cAAc,OAAO;IAGrB,cAAc,OAAO;IACrB,eAAe,OAAO;IACtB,gBAAgB,OAAO;IAGvB,cAAc,OAAO;IACrB,0BAA0B,OAAO;IAGjC,cAAc,OAAO;IACrB,aAAa,OAAO;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error type definitions
|
|
3
|
+
*/
|
|
4
|
+
export var ErrorCode;
|
|
5
|
+
(function (ErrorCode) {
|
|
6
|
+
// Validation Errors (1xxx)
|
|
7
|
+
ErrorCode[ErrorCode["INVALID_INPUT"] = 1001] = "INVALID_INPUT";
|
|
8
|
+
ErrorCode[ErrorCode["INVALID_SERVER_CONFIG"] = 1002] = "INVALID_SERVER_CONFIG";
|
|
9
|
+
ErrorCode[ErrorCode["INVALID_COMMAND"] = 1003] = "INVALID_COMMAND";
|
|
10
|
+
ErrorCode[ErrorCode["INVALID_PATH"] = 1004] = "INVALID_PATH";
|
|
11
|
+
// Authentication Errors (2xxx)
|
|
12
|
+
ErrorCode[ErrorCode["UNAUTHORIZED"] = 2001] = "UNAUTHORIZED";
|
|
13
|
+
ErrorCode[ErrorCode["INVALID_CREDENTIALS"] = 2002] = "INVALID_CREDENTIALS";
|
|
14
|
+
ErrorCode[ErrorCode["RATE_LIMITED"] = 2003] = "RATE_LIMITED";
|
|
15
|
+
// SSH Errors (3xxx)
|
|
16
|
+
ErrorCode[ErrorCode["CONNECTION_FAILED"] = 3001] = "CONNECTION_FAILED";
|
|
17
|
+
ErrorCode[ErrorCode["COMMAND_FAILED"] = 3002] = "COMMAND_FAILED";
|
|
18
|
+
ErrorCode[ErrorCode["CONNECTION_TIMEOUT"] = 3003] = "CONNECTION_TIMEOUT";
|
|
19
|
+
ErrorCode[ErrorCode["DISCONNECTED"] = 3004] = "DISCONNECTED";
|
|
20
|
+
// Configuration Errors (4xxx)
|
|
21
|
+
ErrorCode[ErrorCode["MISSING_CONFIG"] = 4001] = "MISSING_CONFIG";
|
|
22
|
+
ErrorCode[ErrorCode["INVALID_CONFIG"] = 4002] = "INVALID_CONFIG";
|
|
23
|
+
// Storage Errors (5xxx)
|
|
24
|
+
ErrorCode[ErrorCode["FILE_NOT_FOUND"] = 5001] = "FILE_NOT_FOUND";
|
|
25
|
+
ErrorCode[ErrorCode["FILE_READ_ERROR"] = 5002] = "FILE_READ_ERROR";
|
|
26
|
+
ErrorCode[ErrorCode["FILE_WRITE_ERROR"] = 5003] = "FILE_WRITE_ERROR";
|
|
27
|
+
// Pool Errors (6xxx)
|
|
28
|
+
ErrorCode[ErrorCode["POOL_EXHAUSTED"] = 6001] = "POOL_EXHAUSTED";
|
|
29
|
+
ErrorCode[ErrorCode["CONNECTION_ACQUIRE_TIMEOUT"] = 6002] = "CONNECTION_ACQUIRE_TIMEOUT";
|
|
30
|
+
// Internal Errors (9xxx)
|
|
31
|
+
ErrorCode[ErrorCode["INTERNAL_ERROR"] = 9001] = "INTERNAL_ERROR";
|
|
32
|
+
ErrorCode[ErrorCode["UNKNOWN_ERROR"] = 9999] = "UNKNOWN_ERROR";
|
|
33
|
+
})(ErrorCode || (ErrorCode = {}));
|
|
34
|
+
//# sourceMappingURL=Errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Errors.js","sourceRoot":"","sources":["../../src/types/Errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAN,IAAY,SAkCX;AAlCD,WAAY,SAAS;IACnB,2BAA2B;IAC3B,8DAAoB,CAAA;IACpB,8EAA4B,CAAA;IAC5B,kEAAsB,CAAA;IACtB,4DAAmB,CAAA;IAEnB,+BAA+B;IAC/B,4DAAmB,CAAA;IACnB,0EAA0B,CAAA;IAC1B,4DAAmB,CAAA;IAEnB,oBAAoB;IACpB,sEAAwB,CAAA;IACxB,gEAAqB,CAAA;IACrB,wEAAyB,CAAA;IACzB,4DAAmB,CAAA;IAEnB,8BAA8B;IAC9B,gEAAqB,CAAA;IACrB,gEAAqB,CAAA;IAErB,wBAAwB;IACxB,gEAAqB,CAAA;IACrB,kEAAsB,CAAA;IACtB,oEAAuB,CAAA;IAEvB,qBAAqB;IACrB,gEAAqB,CAAA;IACrB,wFAAiC,CAAA;IAEjC,yBAAyB;IACzB,gEAAqB,CAAA;IACrB,8DAAoB,CAAA;AACtB,CAAC,EAlCW,SAAS,KAAT,SAAS,QAkCpB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SSH-related type definitions
|
|
3
|
+
*/
|
|
4
|
+
export interface SSHConnectionConfig {
|
|
5
|
+
host: string;
|
|
6
|
+
port: number;
|
|
7
|
+
username: string;
|
|
8
|
+
password?: string;
|
|
9
|
+
privateKey?: Buffer;
|
|
10
|
+
passphrase?: string;
|
|
11
|
+
readyTimeout?: number;
|
|
12
|
+
keepaliveInterval?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface CommandResult {
|
|
15
|
+
stdout: string;
|
|
16
|
+
stderr: string;
|
|
17
|
+
exitCode: number | null;
|
|
18
|
+
signal: string | null;
|
|
19
|
+
duration: number;
|
|
20
|
+
}
|
|
21
|
+
export interface SanitizedCommand {
|
|
22
|
+
original: string;
|
|
23
|
+
sanitized: string;
|
|
24
|
+
warnings: string[];
|
|
25
|
+
isSafe: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface SSHConnectionState {
|
|
28
|
+
status: "disconnected" | "connecting" | "connected" | "error";
|
|
29
|
+
serverId?: string;
|
|
30
|
+
lastError?: Error;
|
|
31
|
+
connectedAt?: Date;
|
|
32
|
+
}
|
|
33
|
+
export interface SSHCredentials {
|
|
34
|
+
host: string;
|
|
35
|
+
port: number;
|
|
36
|
+
username: string;
|
|
37
|
+
password?: string;
|
|
38
|
+
privateKey?: Buffer;
|
|
39
|
+
passphrase?: string;
|
|
40
|
+
}
|
|
41
|
+
export interface DecryptedCredentials {
|
|
42
|
+
host: string;
|
|
43
|
+
port: number;
|
|
44
|
+
username: string;
|
|
45
|
+
password?: string;
|
|
46
|
+
privateKey?: Buffer;
|
|
47
|
+
passphrase?: string;
|
|
48
|
+
}
|
|
49
|
+
export interface ISSHClient {
|
|
50
|
+
connect(config: SSHConnectionConfig): Promise<void>;
|
|
51
|
+
disconnect(): Promise<void>;
|
|
52
|
+
isConnected(): boolean;
|
|
53
|
+
execute(command: string): Promise<CommandResult>;
|
|
54
|
+
getServerId(): string | undefined;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=SSH.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SSH.d.ts","sourceRoot":"","sources":["../../src/types/SSH.ts"],"names":[],"mappings":"AACA;;GAEG;AAEH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,CAAC;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,WAAW,CAAC,EAAE,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,WAAW,IAAI,OAAO,CAAC;IACvB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACjD,WAAW,IAAI,MAAM,GAAG,SAAS,CAAC;CACnC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SSH.js","sourceRoot":"","sources":["../../src/types/SSH.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B;;GAEG"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-related type definitions
|
|
3
|
+
*/
|
|
4
|
+
export interface EncryptedData {
|
|
5
|
+
iv: string;
|
|
6
|
+
authTag: string;
|
|
7
|
+
data: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ServerAuth {
|
|
10
|
+
type: "password" | "privateKey";
|
|
11
|
+
password?: EncryptedData;
|
|
12
|
+
privateKey?: EncryptedData;
|
|
13
|
+
passphrase?: EncryptedData;
|
|
14
|
+
}
|
|
15
|
+
export interface Server {
|
|
16
|
+
id: string;
|
|
17
|
+
host: string;
|
|
18
|
+
username: string;
|
|
19
|
+
port: number;
|
|
20
|
+
note?: string;
|
|
21
|
+
createdAt: Date;
|
|
22
|
+
updatedAt: Date;
|
|
23
|
+
auth: ServerAuth;
|
|
24
|
+
}
|
|
25
|
+
export interface ServerConfig {
|
|
26
|
+
host: string;
|
|
27
|
+
port?: number;
|
|
28
|
+
username: string;
|
|
29
|
+
password?: string;
|
|
30
|
+
privateKeyPath?: string;
|
|
31
|
+
keyPassphrase?: string;
|
|
32
|
+
note?: string;
|
|
33
|
+
}
|
|
34
|
+
export interface ServerStorage {
|
|
35
|
+
version: number;
|
|
36
|
+
encryptionVersion: number;
|
|
37
|
+
servers: Server[];
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=Server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Server.d.ts","sourceRoot":"","sources":["../../src/types/Server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,GAAG,YAAY,CAAC;IAChC,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,UAAU,CAAC,EAAE,aAAa,CAAC;CAC5B;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Server.js","sourceRoot":"","sources":["../../src/types/Server.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions index - exports all types
|
|
3
|
+
*/
|
|
4
|
+
export type { EncryptedData, Server, ServerAuth, ServerConfig, ServerStorage, } from "./Server.js";
|
|
5
|
+
export type { AppConfig, BackupConfig, LoggingConfig, MonitoringConfig, RateLimitConfig, SecurityConfig, SSHConfig, StorageConfig, TelegramConfig, } from "./Config.js";
|
|
6
|
+
export type { CommandResult, DecryptedCredentials, ISSHClient, SanitizedCommand, SSHConnectionConfig, SSHConnectionState, SSHCredentials, } from "./SSH.js";
|
|
7
|
+
export { ErrorCode } from "./Errors.js";
|
|
8
|
+
export type { ErrorDetails, ValidationResult } from "./Errors.js";
|
|
9
|
+
export type { BotCommand, CommandContext, IBot, ICommandHandler, IMiddleware, LogContext, LogEntry, MessageContext, MessageOptions, MiddlewareContext, } from "./Bot.js";
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,aAAa,EACb,MAAM,EACN,UAAU,EACV,YAAY,EACZ,aAAa,GACd,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,SAAS,EACT,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,SAAS,EACT,aAAa,EACb,cAAc,GACf,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,aAAa,EACb,oBAAoB,EACpB,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,GACf,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGlE,YAAY,EACV,UAAU,EACV,cAAc,EACd,IAAI,EACJ,eAAe,EACf,WAAW,EACX,UAAU,EACV,QAAQ,EACR,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmCH,cAAc;AACd,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command sanitization utility
|
|
3
|
+
* Provides safe command execution by sanitizing and validating commands
|
|
4
|
+
*/
|
|
5
|
+
import type { SanitizedCommand, ValidationResult } from "../types/index.js";
|
|
6
|
+
/**
|
|
7
|
+
* Sanitize a command for safe execution
|
|
8
|
+
*/
|
|
9
|
+
export declare function sanitizeCommand(command: string): SanitizedCommand;
|
|
10
|
+
/**
|
|
11
|
+
* Validate a command for execution
|
|
12
|
+
*/
|
|
13
|
+
export declare function validateCommand(command: string): ValidationResult<SanitizedCommand>;
|
|
14
|
+
/**
|
|
15
|
+
* Parse command arguments safely
|
|
16
|
+
*/
|
|
17
|
+
export declare function parseCommandArgs(input: string): {
|
|
18
|
+
command: string;
|
|
19
|
+
args: string;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Escape a string for safe use in shell
|
|
23
|
+
*/
|
|
24
|
+
export declare function escapeShellArg(arg: string): string;
|
|
25
|
+
//# sourceMappingURL=commandUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commandUtils.d.ts","sourceRoot":"","sources":["../../src/utils/commandUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAkC5E;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,CAuBjE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,GACd,gBAAgB,CAAC,gBAAgB,CAAC,CAuBpC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd,CAYA;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGlD"}
|