discos 1.1.6 → 2.0.1
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/.github/PRIVACY_POLICY.md +3 -1
- package/.github/TERMS_OF_SERVICE.md +1 -0
- package/README.md +2 -2
- package/dist/common.d.ts +57 -36
- package/dist/common.d.ts.map +1 -1
- package/dist/common.js +88 -39
- package/dist/common.js.map +1 -1
- package/dist/{config.d.ts → config/config.d.ts} +2 -1
- package/dist/config/config.d.ts.map +1 -0
- package/dist/{config.js → config/config.js} +1 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/validateDb.d.ts +3 -0
- package/dist/config/validateDb.d.ts.map +1 -0
- package/dist/{tools → config}/validateDb.js +16 -15
- package/dist/config/validateDb.js.map +1 -0
- package/dist/config/validateDotenv.d.ts +2 -0
- package/dist/config/validateDotenv.d.ts.map +1 -0
- package/dist/{tools → config}/validateDotenv.js +30 -20
- package/dist/config/validateDotenv.js.map +1 -0
- package/dist/{tools → exec}/backend.d.ts +4 -3
- package/dist/exec/backend.d.ts.map +1 -0
- package/dist/exec/backend.js +131 -0
- package/dist/exec/backend.js.map +1 -0
- package/dist/exec/terminal-manager.d.ts +9 -0
- package/dist/exec/terminal-manager.d.ts.map +1 -0
- package/dist/exec/terminal-manager.js +112 -0
- package/dist/exec/terminal-manager.js.map +1 -0
- package/dist/exec/username.d.ts +5 -0
- package/dist/exec/username.d.ts.map +1 -0
- package/dist/exec/username.js +31 -0
- package/dist/exec/username.js.map +1 -0
- package/dist/interfaces/queues.d.ts.map +1 -0
- package/dist/{types → interfaces}/queues.js.map +1 -1
- package/dist/logging/logger.d.ts +4 -0
- package/dist/logging/logger.d.ts.map +1 -0
- package/dist/logging/logger.js +22 -0
- package/dist/logging/logger.js.map +1 -0
- package/dist/models/user.d.ts +14 -0
- package/dist/models/user.d.ts.map +1 -0
- package/dist/models/user.js +61 -0
- package/dist/models/user.js.map +1 -0
- package/dist/modules/admin.d.ts +1 -1
- package/dist/modules/admin.d.ts.map +1 -1
- package/dist/modules/admin.js +56 -31
- package/dist/modules/admin.js.map +1 -1
- package/dist/modules/clear.d.ts.map +1 -1
- package/dist/modules/clear.js +7 -8
- package/dist/modules/clear.js.map +1 -1
- package/dist/modules/command.d.ts +1 -1
- package/dist/modules/command.d.ts.map +1 -1
- package/dist/modules/command.js +5 -5
- package/dist/modules/command.js.map +1 -1
- package/dist/modules/debug.d.ts +1 -1
- package/dist/modules/debug.d.ts.map +1 -1
- package/dist/modules/debug.js +3 -2
- package/dist/modules/debug.js.map +1 -1
- package/dist/modules/file.d.ts +3 -2
- package/dist/modules/file.d.ts.map +1 -1
- package/dist/modules/file.js +36 -13
- package/dist/modules/file.js.map +1 -1
- package/dist/modules/watch.d.ts +1 -1
- package/dist/modules/watch.d.ts.map +1 -1
- package/dist/modules/watch.js +4 -3
- package/dist/modules/watch.js.map +1 -1
- package/dist/security/ipcServer.d.ts +4 -0
- package/dist/security/ipcServer.d.ts.map +1 -0
- package/dist/{tools → security}/ipcServer.js +6 -5
- package/dist/security/ipcServer.js.map +1 -0
- package/dist/{tools → security}/queue-utils.d.ts +2 -1
- package/dist/security/queue-utils.d.ts.map +1 -0
- package/dist/{tools → security}/queue-utils.js +4 -1
- package/dist/security/queue-utils.js.map +1 -0
- package/dist/shared/consts.d.ts +6 -0
- package/dist/shared/consts.d.ts.map +1 -1
- package/dist/shared/consts.js +7 -1
- package/dist/shared/consts.js.map +1 -1
- package/dist/shared/interfaces.d.ts +1 -0
- package/dist/shared/interfaces.d.ts.map +1 -1
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/slash-commands.d.ts +1 -1
- package/dist/slash-commands.d.ts.map +1 -1
- package/dist/slash-commands.js +17 -10
- package/dist/slash-commands.js.map +1 -1
- package/dist/startup.d.ts +1 -1
- package/dist/startup.d.ts.map +1 -1
- package/dist/startup.js +57 -37
- package/dist/startup.js.map +1 -1
- package/package.json +19 -16
- package/setup/install.sh +45 -132
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/tools/backend.d.ts.map +0 -1
- package/dist/tools/backend.js +0 -166
- package/dist/tools/backend.js.map +0 -1
- package/dist/tools/ipcServer.d.ts +0 -4
- package/dist/tools/ipcServer.d.ts.map +0 -1
- package/dist/tools/ipcServer.js.map +0 -1
- package/dist/tools/queue-utils.d.ts.map +0 -1
- package/dist/tools/queue-utils.js.map +0 -1
- package/dist/tools/validateDb.d.ts +0 -3
- package/dist/tools/validateDb.d.ts.map +0 -1
- package/dist/tools/validateDb.js.map +0 -1
- package/dist/tools/validateDotenv.d.ts +0 -2
- package/dist/tools/validateDotenv.d.ts.map +0 -1
- package/dist/tools/validateDotenv.js.map +0 -1
- package/dist/types/queues.d.ts.map +0 -1
- /package/dist/{types → interfaces}/queues.d.ts +0 -0
- /package/dist/{types → interfaces}/queues.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateDb.d.ts","sourceRoot":"","sources":["../../src/config/validateDb.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAO7D,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAsFzD"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
1
|
+
import fs from 'node:fs';
|
|
2
2
|
import * as COMMON from '../common.js';
|
|
3
|
-
import { Config } from '
|
|
4
|
-
import
|
|
3
|
+
import { Config } from './config.js';
|
|
4
|
+
import logger from '../logging/logger.js';
|
|
5
|
+
import { updateExternalBackendDatabase } from '../exec/backend.js';
|
|
5
6
|
const isValidId = (id) => /^\d{17,}$/.test(id);
|
|
6
7
|
export function validateDb(queues) {
|
|
7
8
|
let db;
|
|
@@ -10,55 +11,55 @@ export function validateDb(queues) {
|
|
|
10
11
|
db = JSON.parse(rawData);
|
|
11
12
|
}
|
|
12
13
|
catch {
|
|
13
|
-
|
|
14
|
+
logger.error(COMMON.DB_ERR);
|
|
14
15
|
return false;
|
|
15
16
|
}
|
|
16
17
|
if (typeof db !== 'object' || db === null) {
|
|
17
|
-
|
|
18
|
+
logger.error(COMMON.DB_ERR);
|
|
18
19
|
return false;
|
|
19
20
|
}
|
|
20
21
|
const { users, adminUsers, allowedChannels } = db;
|
|
21
22
|
if (typeof users !== 'object' || users === null) {
|
|
22
|
-
|
|
23
|
+
logger.error(COMMON.DB_USER_ERR);
|
|
23
24
|
return false;
|
|
24
25
|
}
|
|
25
26
|
const userIds = Object.keys(users);
|
|
26
27
|
if (userIds.length === 0) {
|
|
27
|
-
|
|
28
|
+
logger.warn(COMMON.DB_USERS_EMPTY);
|
|
28
29
|
}
|
|
29
30
|
if (userIds.some((id) => !isValidId(id))) {
|
|
30
|
-
|
|
31
|
+
logger.error(COMMON.DB_USERS_INVALID);
|
|
31
32
|
return false;
|
|
32
33
|
}
|
|
33
34
|
if (!Array.isArray(adminUsers)) {
|
|
34
|
-
|
|
35
|
+
logger.error(COMMON.DB_ADMIN_ERR);
|
|
35
36
|
return false;
|
|
36
37
|
}
|
|
37
38
|
if (adminUsers.length === 0) {
|
|
38
|
-
|
|
39
|
+
logger.error(COMMON.DB_NO_ADMIN);
|
|
39
40
|
return false;
|
|
40
41
|
}
|
|
41
42
|
if (adminUsers.some((id) => !isValidId(id))) {
|
|
42
|
-
|
|
43
|
+
logger.error(COMMON.DB_ADMIN_INVALID);
|
|
43
44
|
return false;
|
|
44
45
|
}
|
|
45
46
|
if (allowedChannels !== undefined) {
|
|
46
47
|
if (!Array.isArray(allowedChannels)) {
|
|
47
|
-
|
|
48
|
+
logger.error(COMMON.DB_ALLOWED_CHANNELS_ARRAY);
|
|
48
49
|
return false;
|
|
49
50
|
}
|
|
50
51
|
if (allowedChannels.length === 0) {
|
|
51
|
-
|
|
52
|
+
logger.warn(COMMON.DB_ALLOWED_CH_EMPTY);
|
|
52
53
|
}
|
|
53
54
|
if (allowedChannels.some((id) => !isValidId(id))) {
|
|
54
|
-
|
|
55
|
+
logger.error(COMMON.DB_ALLOWED_CH_INVALID);
|
|
55
56
|
return false;
|
|
56
57
|
}
|
|
57
58
|
}
|
|
58
59
|
const booleanFields = ['standalone', 'safemode', 'lockdown'];
|
|
59
60
|
for (const key of booleanFields) {
|
|
60
61
|
if (typeof db[key] !== 'boolean') {
|
|
61
|
-
|
|
62
|
+
logger.error(`${COMMON.DB_BOOLEAN_ERR} (${key})`);
|
|
62
63
|
return false;
|
|
63
64
|
}
|
|
64
65
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateDb.js","sourceRoot":"","sources":["../../src/config/validateDb.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateDotenv.d.ts","sourceRoot":"","sources":["../../src/config/validateDotenv.ts"],"names":[],"mappings":"AAQA,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAyGvD"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import * as COMMON from '../common.js';
|
|
2
2
|
import dotenv from 'dotenv';
|
|
3
|
-
import { Config } from '
|
|
3
|
+
import { Config } from './config.js';
|
|
4
|
+
import logger from '../logging/logger.js';
|
|
5
|
+
import { refreshDbCache } from '../exec/username.js';
|
|
4
6
|
dotenv.config({ quiet: true });
|
|
5
|
-
export function validateDotenv() {
|
|
7
|
+
export async function validateDotenv() {
|
|
6
8
|
const requiredEnvVars = [
|
|
7
9
|
'BOT_TOKEN',
|
|
8
10
|
'APP_ID',
|
|
@@ -14,65 +16,73 @@ export function validateDotenv() {
|
|
|
14
16
|
'READ_BIN_OVERRIDE',
|
|
15
17
|
'QUICK_VIEW',
|
|
16
18
|
'QUICK_VIEW_MAX_LENGTH',
|
|
19
|
+
'USER_RATE_LIMIT',
|
|
17
20
|
];
|
|
18
21
|
const missingVars = requiredEnvVars.filter((envVar) => !process.env[envVar]);
|
|
19
22
|
if (missingVars.length > 0) {
|
|
20
|
-
|
|
23
|
+
logger.error(COMMON.ENV_MISSING_VAR(missingVars));
|
|
21
24
|
return false;
|
|
22
25
|
}
|
|
23
26
|
if (process.env.BOT_TOKEN.length < 59) {
|
|
24
|
-
|
|
27
|
+
logger.error(COMMON.ENV_TOKEN);
|
|
25
28
|
return false;
|
|
26
29
|
}
|
|
27
30
|
if (!/^\d{17,}$/.test(process.env.APP_ID)) {
|
|
28
|
-
|
|
31
|
+
logger.error(COMMON.ENV_APPID);
|
|
29
32
|
return false;
|
|
30
33
|
}
|
|
31
34
|
const guildIds = process.env.GUILD_IDS.split(',').map((id) => id.trim());
|
|
32
35
|
if (guildIds.some((id) => !/^\d{17,}$/.test(id))) {
|
|
33
|
-
|
|
36
|
+
logger.error(COMMON.ENV_GUILDS);
|
|
34
37
|
return false;
|
|
35
38
|
}
|
|
36
|
-
const cmdQueueMaxSize = parseInt(process.env.CMD_QUEUE_MAX_SIZE, 10);
|
|
37
|
-
if (isNaN(cmdQueueMaxSize) || cmdQueueMaxSize <= 0) {
|
|
38
|
-
|
|
39
|
+
const cmdQueueMaxSize = Number.parseInt(process.env.CMD_QUEUE_MAX_SIZE, 10);
|
|
40
|
+
if (Number.isNaN(cmdQueueMaxSize) || cmdQueueMaxSize <= 0) {
|
|
41
|
+
logger.error(COMMON.ENV_QUEUE_MAX);
|
|
39
42
|
return false;
|
|
40
43
|
}
|
|
41
44
|
Config.cmdQueueMaxSize = cmdQueueMaxSize;
|
|
42
45
|
if (!process.env.BACKEND || process.env.BACKEND.trim() === '') {
|
|
43
|
-
|
|
46
|
+
logger.error(COMMON.ENV_BACKEND);
|
|
44
47
|
return false;
|
|
45
48
|
}
|
|
46
49
|
Config.backend = process.env.BACKEND;
|
|
47
50
|
if (!process.env.DATABASE_PATH || process.env.DATABASE_PATH.trim() === '') {
|
|
48
|
-
|
|
51
|
+
logger.error('DiscOS ERROR: DATABASE_PATH must be a non-empty string.');
|
|
49
52
|
return false;
|
|
50
53
|
}
|
|
51
54
|
Config.databasePath = process.env.DATABASE_PATH;
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
+
await refreshDbCache();
|
|
56
|
+
const fileMaxSize = Number.parseInt(process.env.FILE_MAX_SIZE, 10);
|
|
57
|
+
if (Number.isNaN(fileMaxSize) || fileMaxSize <= 0 || fileMaxSize > 1000) {
|
|
58
|
+
logger.error(COMMON.ENV_FILE_MAX);
|
|
55
59
|
return false;
|
|
56
60
|
}
|
|
57
61
|
Config.fileMaxSize = fileMaxSize;
|
|
58
62
|
const readBinOverride = process.env.READ_BIN_OVERRIDE.split(',').map((bin) => bin.trim());
|
|
59
|
-
if (readBinOverride.length === 0 || readBinOverride.
|
|
60
|
-
|
|
63
|
+
if (readBinOverride.length === 0 || readBinOverride.includes('')) {
|
|
64
|
+
logger.error(COMMON.ENV_BIN_OVERRIDE);
|
|
61
65
|
return false;
|
|
62
66
|
}
|
|
63
67
|
Config.readBinOverride = readBinOverride;
|
|
64
68
|
const quickView = process.env.QUICK_VIEW.split(',').map((ext) => ext.trim());
|
|
65
69
|
if (quickView.length === 0 || quickView.some((ext) => ext === '' || ext === '?')) {
|
|
66
|
-
|
|
70
|
+
logger.error(COMMON.ENV_QUICK_VIEW);
|
|
67
71
|
return false;
|
|
68
72
|
}
|
|
69
73
|
Config.quickView = quickView;
|
|
70
|
-
const quickViewMaxLength = parseInt(process.env.QUICK_VIEW_MAX_LENGTH, 10);
|
|
71
|
-
if (isNaN(quickViewMaxLength) || quickViewMaxLength <= 0 || quickViewMaxLength > 2000) {
|
|
72
|
-
|
|
74
|
+
const quickViewMaxLength = Number.parseInt(process.env.QUICK_VIEW_MAX_LENGTH, 10);
|
|
75
|
+
if (Number.isNaN(quickViewMaxLength) || quickViewMaxLength <= 0 || quickViewMaxLength > 2000) {
|
|
76
|
+
logger.error(COMMON.ENV_QUICK_VIEW_MAX_LENGTH);
|
|
73
77
|
return false;
|
|
74
78
|
}
|
|
75
79
|
Config.quickViewMaxLength = quickViewMaxLength;
|
|
80
|
+
const userRateLimit = Number.parseInt(process.env.USER_RATE_LIMIT, 10);
|
|
81
|
+
if (Number.isNaN(userRateLimit) || userRateLimit < 2 || userRateLimit > 30) {
|
|
82
|
+
logger.error(COMMON.ENV_USER_RATE_LIMIT);
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
Config.userRateLimit = userRateLimit;
|
|
76
86
|
return true;
|
|
77
87
|
}
|
|
78
88
|
//# sourceMappingURL=validateDotenv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateDotenv.js","sourceRoot":"","sources":["../../src/config/validateDotenv.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type AxiosResponse } from 'axios';
|
|
2
2
|
import type { ICommandQueueItem, IFileWritePayload } from '../shared/interfaces.js';
|
|
3
3
|
import type { DB } from '../shared/types.js';
|
|
4
|
-
import type { CommandQueues } from '
|
|
5
|
-
export declare function
|
|
4
|
+
import type { CommandQueues } from '../interfaces/queues.js';
|
|
5
|
+
export declare function axiosError(): void;
|
|
6
|
+
export declare function post(payload: ICommandQueueItem, b64decode: boolean, silent: boolean): Promise<AxiosResponse<any, any>>;
|
|
6
7
|
export declare function put(req: IFileWritePayload): Promise<AxiosResponse<any, any>>;
|
|
7
8
|
export declare function ping(): Promise<string>;
|
|
8
9
|
export declare function updateExternalBackendDatabase(database: DB, queues: CommandQueues): Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/exec/backend.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,aAAa,EAAmC,MAAM,OAAO,CAAC;AAMnF,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAGpF,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAQ7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAc7D,wBAAgB,UAAU,IAAI,IAAI,CAGjC;AAmDD,wBAAsB,IAAI,CAAC,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAmB5H;AAGD,wBAAsB,GAAG,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAoBlF;AAGD,wBAAsB,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CA0B5C;AAGD,wBAAsB,6BAA6B,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBtG"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import { Config } from '../config/config.js';
|
|
3
|
+
import * as COMMON from '../common.js';
|
|
4
|
+
import { PING_RESPONSE, DB_UPDATE, INTERNAL_UID, INTERNAL_UNAME } from '../shared/consts.js';
|
|
5
|
+
const WRITE_OP_SUCCESS = '';
|
|
6
|
+
import * as queueUtils from '../security/queue-utils.js';
|
|
7
|
+
import { execCommand } from './terminal-manager.js';
|
|
8
|
+
import { localUser } from './username.js';
|
|
9
|
+
import logger from '../logging/logger.js';
|
|
10
|
+
import shellEscape from 'shell-escape';
|
|
11
|
+
import path from 'node:path';
|
|
12
|
+
import fs from 'node:fs';
|
|
13
|
+
export function axiosError() {
|
|
14
|
+
logger.error(COMMON.NETWORK_ERR);
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
function internalAxiosResponse(data, status) {
|
|
18
|
+
return {
|
|
19
|
+
data: data,
|
|
20
|
+
status: status,
|
|
21
|
+
statusText: '',
|
|
22
|
+
headers: {},
|
|
23
|
+
config: {
|
|
24
|
+
headers: {},
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
async function fileWrite(url, _path, payload) {
|
|
29
|
+
const escapedPath = shellEscape([_path]);
|
|
30
|
+
const serverUser = localUser(payload.user);
|
|
31
|
+
let stdout;
|
|
32
|
+
const dirName = path.dirname(_path);
|
|
33
|
+
if (!fs.existsSync(dirName) || !fs.lstatSync(dirName).isDirectory())
|
|
34
|
+
return COMMON.EB_DIR_ERR;
|
|
35
|
+
const testPermissionCmd = `mkdir -p ${dirName} ` + `&& > ${escapedPath}`;
|
|
36
|
+
stdout = await execCommand(payload.user, payload.username, serverUser, testPermissionCmd, true);
|
|
37
|
+
if (stdout.trim() !== '')
|
|
38
|
+
return COMMON.EB_PERM_ERR;
|
|
39
|
+
const curlCmd = `curl -fsSL ${shellEscape([url])} -o ${escapedPath}`;
|
|
40
|
+
stdout = await execCommand(payload.user, payload.username, serverUser, curlCmd, true);
|
|
41
|
+
if (stdout.trim() !== '')
|
|
42
|
+
return COMMON.EB_DOWNLOAD_ERR;
|
|
43
|
+
fs.chmodSync(_path, 0o660);
|
|
44
|
+
return WRITE_OP_SUCCESS;
|
|
45
|
+
}
|
|
46
|
+
export async function post(payload, b64decode, silent) {
|
|
47
|
+
let res = internalAxiosResponse('', 500);
|
|
48
|
+
if (Config.standalone) {
|
|
49
|
+
const output = await execCommand(payload.user, payload.username, localUser(payload.user), payload.cmd, silent);
|
|
50
|
+
res = internalAxiosResponse(b64decode ? Buffer.from(output.toString(), 'base64') : output, 200);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
try {
|
|
54
|
+
res = await axios.post(Config.backend, payload, {
|
|
55
|
+
responseType: 'text',
|
|
56
|
+
validateStatus: (status) => status < 400,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
axiosError();
|
|
61
|
+
}
|
|
62
|
+
if (b64decode)
|
|
63
|
+
res.data = Buffer.from(res.data, 'base64');
|
|
64
|
+
}
|
|
65
|
+
return res;
|
|
66
|
+
}
|
|
67
|
+
export async function put(req) {
|
|
68
|
+
let res = internalAxiosResponse('', 500);
|
|
69
|
+
if (Config.standalone) {
|
|
70
|
+
const internalResponse = await fileWrite(req.url, req.path, req.payload);
|
|
71
|
+
return internalAxiosResponse(internalResponse, internalResponse === WRITE_OP_SUCCESS ? 200 : 500);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
try {
|
|
75
|
+
res = await axios.put(Config.backend, req, {
|
|
76
|
+
headers: {
|
|
77
|
+
'Content-Type': 'application/json',
|
|
78
|
+
},
|
|
79
|
+
validateStatus: (status) => status < 400,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
axiosError();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return res;
|
|
87
|
+
}
|
|
88
|
+
export async function ping() {
|
|
89
|
+
const controller = new AbortController();
|
|
90
|
+
const timeout = setTimeout(() => controller.abort(), 5000);
|
|
91
|
+
try {
|
|
92
|
+
const res = await axios.get(Config.backend, {
|
|
93
|
+
responseType: 'text',
|
|
94
|
+
validateStatus: (status) => status >= 200 && status < 300,
|
|
95
|
+
signal: controller.signal,
|
|
96
|
+
});
|
|
97
|
+
if (res.data.trim() !== PING_RESPONSE) {
|
|
98
|
+
throw new Error(COMMON.EXTERNAL_NORESPONSE);
|
|
99
|
+
}
|
|
100
|
+
logger.info(COMMON.EXTERNAL_OK);
|
|
101
|
+
return COMMON.EXTERNAL_OK;
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
if (err instanceof Error)
|
|
105
|
+
logger.error(err.message);
|
|
106
|
+
else
|
|
107
|
+
logger.error(String(err));
|
|
108
|
+
axiosError();
|
|
109
|
+
return COMMON.EXTERNAL_NORESPONSE;
|
|
110
|
+
}
|
|
111
|
+
finally {
|
|
112
|
+
clearTimeout(timeout);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
export async function updateExternalBackendDatabase(database, queues) {
|
|
116
|
+
const validationPayload = { user: INTERNAL_UID, username: INTERNAL_UNAME, cmd: DB_UPDATE };
|
|
117
|
+
queueUtils.addToAll(queues, validationPayload);
|
|
118
|
+
try {
|
|
119
|
+
await axios.put(Config.backend + '/' + DB_UPDATE, database, {
|
|
120
|
+
headers: {
|
|
121
|
+
'Content-Type': 'application/json',
|
|
122
|
+
},
|
|
123
|
+
validateStatus: (status) => status <= 500,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
logger.error(COMMON.NETWORK_ERR);
|
|
128
|
+
}
|
|
129
|
+
queueUtils.tryRemoveInQueue(queues.validationQueue, validationPayload);
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend.js","sourceRoot":"","sources":["../../src/exec/backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CommandQueues } from '../interfaces/queues.js';
|
|
2
|
+
export declare const IS_TEST_MODE: boolean;
|
|
3
|
+
export declare function execCommand(dcUid: string, discosUser: string, localUser: string, command: string, silent: boolean): Promise<string>;
|
|
4
|
+
export declare function initTerminalsFromConfig(queues: CommandQueues): Promise<void>;
|
|
5
|
+
export declare function axiosHelper(queues: CommandQueues, user: string, username: string, cmd: string): Promise<void>;
|
|
6
|
+
export declare function syncTerminalsWithConfig(switchHappened: boolean, queues: CommandQueues): Promise<void>;
|
|
7
|
+
export declare function destroyTerminalForUser(dcUid: string, respawn?: boolean): void;
|
|
8
|
+
export declare function destroyAllTerminals(): void;
|
|
9
|
+
//# sourceMappingURL=terminal-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-manager.d.ts","sourceRoot":"","sources":["../../src/exec/terminal-manager.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAc7D,eAAO,MAAM,YAAY,SAAqC,CAAC;AAc/D,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAwCzI;AAGD,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBlF;AAGD,wBAAsB,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBnH;AAID,wBAAsB,uBAAuB,CAAC,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB3G;AAGD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,OAAc,GAAG,IAAI,CASnF;AAGD,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import * as COMMON from '../common.js';
|
|
2
|
+
import { User } from '../models/user.js';
|
|
3
|
+
import { Config } from '../config/config.js';
|
|
4
|
+
import { localUser } from './username.js';
|
|
5
|
+
import * as queueUtils from '../security/queue-utils.js';
|
|
6
|
+
import { axiosError } from './backend.js';
|
|
7
|
+
import logger from '../logging/logger.js';
|
|
8
|
+
import { ROOT_UID, ROOT_UNAME, INTERNAL_UID, INTERNAL_UNAME, CLEAR_TERMINALS, INIT_TERMINALS } from '../shared/consts.js';
|
|
9
|
+
import stripAnsi from 'strip-ansi';
|
|
10
|
+
import axios from 'axios';
|
|
11
|
+
import os from 'node:os';
|
|
12
|
+
export const IS_TEST_MODE = Boolean(process.env.PTY_TEST_MODE);
|
|
13
|
+
const hostname = os.hostname();
|
|
14
|
+
const users = new Map();
|
|
15
|
+
async function getUserPwd(dcUid) {
|
|
16
|
+
const user = users.get(dcUid);
|
|
17
|
+
const pwd = await execCommand(dcUid, user.dcUname, user.localUser, 'pwd', true);
|
|
18
|
+
return pwd.trim();
|
|
19
|
+
}
|
|
20
|
+
export async function execCommand(dcUid, discosUser, localUser, command, silent) {
|
|
21
|
+
const user = users.get(dcUid);
|
|
22
|
+
if (!command || command.trim() === '')
|
|
23
|
+
command = 'pwd';
|
|
24
|
+
user.write(command);
|
|
25
|
+
return new Promise((resolve) => {
|
|
26
|
+
const firstLine = IS_TEST_MODE ? `${ROOT_UNAME}@${hostname}` : `${localUser}@${hostname}`;
|
|
27
|
+
const interval = setInterval(async () => {
|
|
28
|
+
const clean = stripAnsi(user.buffer);
|
|
29
|
+
const lines = clean.split('\n').map((l) => l.replaceAll('\r', '').trim());
|
|
30
|
+
if (lines.length < 2)
|
|
31
|
+
return;
|
|
32
|
+
const lastLine = lines.at(-1);
|
|
33
|
+
if (lastLine?.startsWith(firstLine)) {
|
|
34
|
+
clearInterval(interval);
|
|
35
|
+
const output = lines.slice(1, -1).join('\n');
|
|
36
|
+
user.buffer = '';
|
|
37
|
+
if (silent)
|
|
38
|
+
resolve(output);
|
|
39
|
+
else
|
|
40
|
+
resolve(COMMON.TERMINAL_OUTPUT(discosUser, localUser, hostname, await getUserPwd(dcUid), command, output));
|
|
41
|
+
}
|
|
42
|
+
}, 100);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
export async function initTerminalsFromConfig(queues) {
|
|
46
|
+
if (Config.standalone) {
|
|
47
|
+
if (!users.has(INTERNAL_UID))
|
|
48
|
+
users.set(INTERNAL_UID, new User(INTERNAL_UID, INTERNAL_UNAME, ROOT_UNAME));
|
|
49
|
+
if (!users.has(ROOT_UID))
|
|
50
|
+
users.set(ROOT_UID, new User(ROOT_UID, ROOT_UNAME, ROOT_UNAME));
|
|
51
|
+
for (const dcUid of Config.allowedUsers) {
|
|
52
|
+
try {
|
|
53
|
+
if (!users.has(dcUid)) {
|
|
54
|
+
users.set(dcUid, new User(dcUid, '', localUser(dcUid)));
|
|
55
|
+
logger.info(COMMON.terminalSpawnedMessage(dcUid, localUser(dcUid)));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
logger.error(COMMON.terminalSpawnFailedMessage(dcUid), err);
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else
|
|
65
|
+
await axiosHelper(queues, INTERNAL_UID, INTERNAL_UNAME, INIT_TERMINALS);
|
|
66
|
+
}
|
|
67
|
+
export async function axiosHelper(queues, user, username, cmd) {
|
|
68
|
+
const validationPayload = { user: user, username: username, cmd: cmd };
|
|
69
|
+
queueUtils.addToAll(queues, validationPayload);
|
|
70
|
+
try {
|
|
71
|
+
await axios.put(Config.backend + '/' + validationPayload.cmd, null, {
|
|
72
|
+
headers: {
|
|
73
|
+
'Content-Type': 'application/json',
|
|
74
|
+
},
|
|
75
|
+
validateStatus: (status) => status < 400,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
axiosError();
|
|
80
|
+
}
|
|
81
|
+
queueUtils.tryRemoveInQueue(queues.validationQueue, validationPayload);
|
|
82
|
+
}
|
|
83
|
+
export async function syncTerminalsWithConfig(switchHappened, queues) {
|
|
84
|
+
const allowed = new Set(Config.allowedUsers);
|
|
85
|
+
allowed.add(INTERNAL_UID);
|
|
86
|
+
allowed.add(ROOT_UID);
|
|
87
|
+
if (switchHappened && !Config.standalone)
|
|
88
|
+
destroyAllTerminals();
|
|
89
|
+
if (!switchHappened && Config.standalone)
|
|
90
|
+
for (const dcUid of users.keys())
|
|
91
|
+
if (!allowed.has(dcUid))
|
|
92
|
+
destroyTerminalForUser(dcUid, false);
|
|
93
|
+
if (!switchHappened && !Config.standalone)
|
|
94
|
+
await axiosHelper(queues, INTERNAL_UID, INTERNAL_UNAME, CLEAR_TERMINALS);
|
|
95
|
+
await initTerminalsFromConfig(queues);
|
|
96
|
+
logger.info(COMMON.terminalSyncCompleteMessage());
|
|
97
|
+
}
|
|
98
|
+
export function destroyTerminalForUser(dcUid, respawn = true) {
|
|
99
|
+
const user = users.get(dcUid);
|
|
100
|
+
user.destroy();
|
|
101
|
+
users.delete(dcUid);
|
|
102
|
+
if (respawn && Config.allowedUsers.includes(dcUid))
|
|
103
|
+
users.set(dcUid, new User(dcUid, user.dcUname, user.localUser));
|
|
104
|
+
logger.info(COMMON.terminalDestroyedMessage(dcUid, respawn));
|
|
105
|
+
}
|
|
106
|
+
export function destroyAllTerminals() {
|
|
107
|
+
for (const dcUid of users.keys()) {
|
|
108
|
+
destroyTerminalForUser(dcUid, false);
|
|
109
|
+
}
|
|
110
|
+
users.clear();
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=terminal-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-manager.js","sourceRoot":"","sources":["../../src/exec/terminal-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ChatInputCommandInteraction, CacheType } from 'discord.js';
|
|
2
|
+
export declare function discordUsername(interaction: ChatInputCommandInteraction<CacheType>): string;
|
|
3
|
+
export declare function refreshDbCache(): Promise<void>;
|
|
4
|
+
export declare function localUser(user: string): string;
|
|
5
|
+
//# sourceMappingURL=username.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"username.d.ts","sourceRoot":"","sources":["../../src/exec/username.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAczE,wBAAgB,eAAe,CAAC,WAAW,EAAE,2BAA2B,CAAC,SAAS,CAAC,GAAG,MAAM,CAO3F;AAGD,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAYpD;AAGD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI9C"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { Config } from '../config/config.js';
|
|
3
|
+
import { ROOT_UID, ROOT_UNAME } from '../shared/consts.js';
|
|
4
|
+
import { DB_ERR } from '../common.js';
|
|
5
|
+
import logger from '../logging/logger.js';
|
|
6
|
+
import shellEscape from 'shell-escape';
|
|
7
|
+
let dbUserCache = {};
|
|
8
|
+
export function discordUsername(interaction) {
|
|
9
|
+
const username = interaction.member && 'nickname' in interaction.member
|
|
10
|
+
? (interaction.member.nickname ?? interaction.user.username)
|
|
11
|
+
: (interaction.user.displayName ?? interaction.user.username);
|
|
12
|
+
return username;
|
|
13
|
+
}
|
|
14
|
+
export async function refreshDbCache() {
|
|
15
|
+
try {
|
|
16
|
+
const dbContent = await readFile(Config.databasePath, 'utf-8');
|
|
17
|
+
const dbParsed = JSON.parse(dbContent);
|
|
18
|
+
dbUserCache = dbParsed.users;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
dbUserCache = {};
|
|
22
|
+
logger.error(DB_ERR);
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export function localUser(user) {
|
|
27
|
+
if (user === ROOT_UID)
|
|
28
|
+
return ROOT_UNAME;
|
|
29
|
+
return shellEscape([dbUserCache[user]]);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=username.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"username.js","sourceRoot":"","sources":["../../src/exec/username.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAE1C,OAAO,WAAW,MAAM,cAAc,CAAC;AAGvC,IAAI,WAAW,GAA2B,EAAE,CAAC;AAG7C,MAAM,UAAU,eAAe,CAAC,WAAmD;IACjF,MAAM,QAAQ,GACZ,WAAW,CAAC,MAAM,IAAI,UAAU,IAAI,WAAW,CAAC,MAAM;QACpD,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC5D,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAElE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAGD,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,CAAC;QACH,MAAM,SAAS,GAAW,MAAM,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAEpC,CAAC;QACF,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,WAAW,GAAG,EAAE,CAAC;QACjB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAGD,MAAM,UAAU,SAAS,CAAC,IAAY;IAEpC,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,UAAU,CAAC;IACzC,OAAO,WAAW,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queues.d.ts","sourceRoot":"","sources":["../../src/interfaces/queues.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,eAAe,EAAE,iBAAiB,EAAE,CAAC;IAC9C,QAAQ,CAAC,cAAc,EAAE,iBAAiB,EAAE,CAAC;CAC9C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queues.js","sourceRoot":"","sources":["../../src/
|
|
1
|
+
{"version":3,"file":"queues.js","sourceRoot":"","sources":["../../src/interfaces/queues.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logging/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAU9B,QAAA,MAAM,MAAM,gBAmBV,CAAC;AAEH,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import winston from 'winston';
|
|
2
|
+
const { combine, timestamp, printf, colorize } = winston.format;
|
|
3
|
+
const logFormat = printf(({ level, message, timestamp }) => {
|
|
4
|
+
return `${timestamp} [${level.toUpperCase()}]: ${message}`;
|
|
5
|
+
});
|
|
6
|
+
const logger = winston.createLogger({
|
|
7
|
+
level: 'info',
|
|
8
|
+
format: combine(timestamp({ format: 'YYYY-MM-DD HH:mm:ss' })),
|
|
9
|
+
transports: [
|
|
10
|
+
new winston.transports.File({
|
|
11
|
+
filename: 'discos-error.log',
|
|
12
|
+
level: 'error',
|
|
13
|
+
format: combine(timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), logFormat),
|
|
14
|
+
}),
|
|
15
|
+
new winston.transports.File({ filename: 'discos.log', format: combine(timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), logFormat) }),
|
|
16
|
+
new winston.transports.Console({
|
|
17
|
+
format: combine(colorize(), timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), logFormat),
|
|
18
|
+
}),
|
|
19
|
+
],
|
|
20
|
+
});
|
|
21
|
+
export default logger;
|
|
22
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logging/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;AAGhE,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE;IAEzD,OAAO,GAAG,SAAS,KAAK,KAAK,CAAC,WAAW,EAAE,MAAM,OAAO,EAAE,CAAC;AAC7D,CAAC,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAClC,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAC7D,UAAU,EAAE;QAEV,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YAC1B,QAAQ,EAAE,kBAAkB;YAC5B,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,EAAE,SAAS,CAAC;SACzE,CAAC;QAGF,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;QAGjI,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;YAC7B,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,EAAE,SAAS,CAAC;SACrF,CAAC;KACH;CACF,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type IPty } from 'node-pty';
|
|
2
|
+
export declare class User {
|
|
3
|
+
dcUid: string;
|
|
4
|
+
dcUname: string;
|
|
5
|
+
localUser: string;
|
|
6
|
+
ptyProcess: IPty;
|
|
7
|
+
buffer: string;
|
|
8
|
+
respawn: boolean;
|
|
9
|
+
constructor(dcUid: string, dcUname: string, localUser: string);
|
|
10
|
+
spawnPty(): IPty;
|
|
11
|
+
write(cmd: string): void;
|
|
12
|
+
destroy(): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=user.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/models/user.ts"],"names":[],"mappings":"AAIA,OAAY,EAAE,KAAK,IAAI,EAAE,MAAM,UAAU,CAAC;AAG1C,qBAAa,IAAI;IAEf,KAAK,EAAE,MAAM,CAAC;IAGd,OAAO,EAAE,MAAM,CAAC;IAGhB,SAAS,EAAE,MAAM,CAAC;IAGlB,UAAU,EAAE,IAAI,CAAC;IAGjB,MAAM,EAAE,MAAM,CAAM;IAGpB,OAAO,EAAE,OAAO,CAAQ;gBAEZ,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAQ7D,QAAQ,IAAI,IAAI;IAgDhB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKxB,OAAO,IAAI,IAAI;CAIhB"}
|