discos 1.0.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/.github/PRIVACY_POLICY.md +29 -0
- package/.github/TERMS_OF_SERVICE.md +56 -0
- package/LICENSE +201 -0
- package/README.md +70 -0
- package/dist/common.d.ts +157 -0
- package/dist/common.d.ts.map +1 -0
- package/dist/common.js +226 -0
- package/dist/common.js.map +1 -0
- package/dist/config.d.ts +18 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +20 -0
- package/dist/config.js.map +1 -0
- package/dist/ext/langMap.d.ts +2 -0
- package/dist/ext/langMap.d.ts.map +1 -0
- package/dist/ext/langMap.js +275 -0
- package/dist/ext/langMap.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/modules/admin.d.ts +4 -0
- package/dist/modules/admin.d.ts.map +1 -0
- package/dist/modules/admin.js +281 -0
- package/dist/modules/admin.js.map +1 -0
- package/dist/modules/clear.d.ts +3 -0
- package/dist/modules/clear.d.ts.map +1 -0
- package/dist/modules/clear.js +82 -0
- package/dist/modules/clear.js.map +1 -0
- package/dist/modules/command.d.ts +5 -0
- package/dist/modules/command.d.ts.map +1 -0
- package/dist/modules/command.js +89 -0
- package/dist/modules/command.js.map +1 -0
- package/dist/modules/debug.d.ts +4 -0
- package/dist/modules/debug.d.ts.map +1 -0
- package/dist/modules/debug.js +47 -0
- package/dist/modules/debug.js.map +1 -0
- package/dist/modules/file.d.ts +7 -0
- package/dist/modules/file.d.ts.map +1 -0
- package/dist/modules/file.js +141 -0
- package/dist/modules/file.js.map +1 -0
- package/dist/modules/watch.d.ts +4 -0
- package/dist/modules/watch.d.ts.map +1 -0
- package/dist/modules/watch.js +63 -0
- package/dist/modules/watch.js.map +1 -0
- package/dist/shared/consts.d.ts +3 -0
- package/dist/shared/consts.d.ts.map +1 -0
- package/dist/shared/consts.js +6 -0
- package/dist/shared/consts.js.map +1 -0
- package/dist/shared/index.d.ts +3 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +19 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/interfaces.d.ts +13 -0
- package/dist/shared/interfaces.d.ts.map +1 -0
- package/dist/shared/interfaces.js +3 -0
- package/dist/shared/interfaces.js.map +1 -0
- package/dist/slash-commands.d.ts +2 -0
- package/dist/slash-commands.d.ts.map +1 -0
- package/dist/slash-commands.js +242 -0
- package/dist/slash-commands.js.map +1 -0
- package/dist/startup.d.ts +2 -0
- package/dist/startup.d.ts.map +1 -0
- package/dist/startup.js +200 -0
- package/dist/startup.js.map +1 -0
- package/dist/tools/backend.d.ts +5 -0
- package/dist/tools/backend.d.ts.map +1 -0
- package/dist/tools/backend.js +155 -0
- package/dist/tools/backend.js.map +1 -0
- package/dist/tools/ipcServer.d.ts +4 -0
- package/dist/tools/ipcServer.d.ts.map +1 -0
- package/dist/tools/ipcServer.js +83 -0
- package/dist/tools/ipcServer.js.map +1 -0
- package/dist/tools/queue-utils.d.ts +9 -0
- package/dist/tools/queue-utils.d.ts.map +1 -0
- package/dist/tools/queue-utils.js +70 -0
- package/dist/tools/queue-utils.js.map +1 -0
- package/dist/tools/validateDb.d.ts +2 -0
- package/dist/tools/validateDb.d.ts.map +1 -0
- package/dist/tools/validateDb.js +111 -0
- package/dist/tools/validateDb.js.map +1 -0
- package/dist/tools/validateDotenv.d.ts +2 -0
- package/dist/tools/validateDotenv.d.ts.map +1 -0
- package/dist/tools/validateDotenv.js +117 -0
- package/dist/tools/validateDotenv.js.map +1 -0
- package/dist/types/db.d.ts +9 -0
- package/dist/types/db.d.ts.map +1 -0
- package/dist/types/db.js +3 -0
- package/dist/types/db.js.map +1 -0
- package/dist/types/queues.d.ts +6 -0
- package/dist/types/queues.d.ts.map +1 -0
- package/dist/types/queues.js +3 -0
- package/dist/types/queues.js.map +1 -0
- package/package.json +71 -0
- package/setup/install.sh +527 -0
package/dist/startup.js
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.startDiscOS = startDiscOS;
|
|
37
|
+
const discord_js_1 = require("discord.js");
|
|
38
|
+
const validateDotenv_1 = require("./tools/validateDotenv");
|
|
39
|
+
const validateDb_1 = require("./tools/validateDb");
|
|
40
|
+
const ipcServer_1 = require("./tools/ipcServer");
|
|
41
|
+
const queueUtils = __importStar(require("./tools/queue-utils"));
|
|
42
|
+
const config_1 = require("./config");
|
|
43
|
+
const COMMON = __importStar(require("./common"));
|
|
44
|
+
const slash_commands_1 = require("./slash-commands");
|
|
45
|
+
const command_1 = require("./modules/command");
|
|
46
|
+
const clear_1 = require("./modules/clear");
|
|
47
|
+
const file_1 = require("./modules/file");
|
|
48
|
+
const watch_1 = require("./modules/watch");
|
|
49
|
+
const debug_1 = require("./modules/debug");
|
|
50
|
+
const admin_1 = require("./modules/admin");
|
|
51
|
+
function startDiscOS() {
|
|
52
|
+
if (!(0, validateDotenv_1.validateDotenv)()) {
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
if (!(0, validateDb_1.validateDb)()) {
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
const queues = {
|
|
59
|
+
validationQueue: [],
|
|
60
|
+
duplicateQueue: [],
|
|
61
|
+
};
|
|
62
|
+
config_1.Config.ipcServer = config_1.Config.standalone ? null : (0, ipcServer_1.startIPCServer)(queues);
|
|
63
|
+
const client = new discord_js_1.Client({
|
|
64
|
+
intents: [discord_js_1.GatewayIntentBits.Guilds, discord_js_1.GatewayIntentBits.GuildMembers, discord_js_1.GatewayIntentBits.GuildMessages, discord_js_1.GatewayIntentBits.MessageContent],
|
|
65
|
+
});
|
|
66
|
+
client.on(discord_js_1.Events.InteractionCreate, async (interaction) => {
|
|
67
|
+
if (!interaction.isChatInputCommand())
|
|
68
|
+
return;
|
|
69
|
+
if (interaction.commandName !== COMMON.DCOS && interaction.commandName !== COMMON.ADMOS)
|
|
70
|
+
return;
|
|
71
|
+
if (!interaction.guild) {
|
|
72
|
+
await interaction.reply({ content: COMMON.GUILD_ERR, flags: 64 });
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (!config_1.Config.allowedChannels.includes(interaction.channelId)) {
|
|
76
|
+
await interaction.reply({ content: COMMON.CHANNEL_ERR, flags: 64 });
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (!config_1.Config.allowedUsers.includes(interaction.user.id)) {
|
|
80
|
+
await interaction.reply({ content: COMMON.USER_ERR, flags: 64 });
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (queues.duplicateQueue.length >= Number(config_1.Config.cmdQueueMaxSize)) {
|
|
84
|
+
await interaction.reply({ content: COMMON.DISCOS_OVERLOADED, flags: 64 });
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const subcommand = interaction.options.getSubcommand();
|
|
88
|
+
const userId = interaction.user.id;
|
|
89
|
+
const username = interaction.member && 'nickname' in interaction.member
|
|
90
|
+
? (interaction.member.nickname ?? interaction.user.username)
|
|
91
|
+
: (interaction.user.displayName ?? interaction.user.username);
|
|
92
|
+
const isAdminUser = config_1.Config.adminUsers.includes(userId);
|
|
93
|
+
if (config_1.Config.lockdown && !isAdminUser) {
|
|
94
|
+
await interaction.reply({ content: COMMON.LOCKDOWN_ERR, flags: 64 });
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (interaction.commandName === COMMON.ADMOS) {
|
|
98
|
+
if (!isAdminUser) {
|
|
99
|
+
await interaction.reply({
|
|
100
|
+
content: COMMON.DISCOS_NON_ADMIN,
|
|
101
|
+
});
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
await (0, admin_1.handleAdmin)(interaction, subcommand, username, queues);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
let queuedCmd = '';
|
|
108
|
+
const hideReply = interaction.options.getBoolean(COMMON.HIDE, false) ?? COMMON.DEFAULT_HIDDEN;
|
|
109
|
+
let lookback = COMMON.DEFAULT_LOOKBACK;
|
|
110
|
+
let path = '';
|
|
111
|
+
let file = null;
|
|
112
|
+
let interval = COMMON.DEFAULT_INTERVAL;
|
|
113
|
+
let repeat = COMMON.DEFAULT_REPEAT;
|
|
114
|
+
let sendSuccessMsg = COMMON.DEFAULT_DEBUG_VERBOSE;
|
|
115
|
+
switch (subcommand) {
|
|
116
|
+
case COMMON.EXEC: {
|
|
117
|
+
const linuxCmd = interaction.options.getString(COMMON.CMD, true)?.trim() || COMMON.FALLBACK_CMD;
|
|
118
|
+
queuedCmd = linuxCmd;
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
case COMMON.CLEAR: {
|
|
122
|
+
lookback = interaction.options.getInteger(COMMON.LOOKBACK, false) ?? lookback;
|
|
123
|
+
sendSuccessMsg = interaction.options.getBoolean(COMMON.VERBOSE, false) ?? sendSuccessMsg;
|
|
124
|
+
queuedCmd = `dcos clear ${userId}`;
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
case COMMON.READ: {
|
|
128
|
+
path = interaction.options.getString(COMMON.PATH, true);
|
|
129
|
+
queuedCmd = `cat ${path} | base64`;
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
case COMMON.WRITE: {
|
|
133
|
+
file = interaction.options.getAttachment(COMMON.FILE, true);
|
|
134
|
+
path = interaction.options.getString(COMMON.PATH, false) ?? file.name;
|
|
135
|
+
queuedCmd = `dcos write to ${path}`;
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
case COMMON.WATCH: {
|
|
139
|
+
path = interaction.options.getString(COMMON.TARGET, true);
|
|
140
|
+
interval = interaction.options.getInteger(COMMON.INTERVAL, false) ?? interval;
|
|
141
|
+
repeat = interaction.options.getInteger(COMMON.REPEAT, false) ?? repeat;
|
|
142
|
+
queuedCmd = `dcos watch ${path} ${userId}`;
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
case COMMON.DEBUG: {
|
|
146
|
+
queuedCmd = `dcos debug`;
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (await queueUtils.handleDuplicate(interaction, username, queues.duplicateQueue, { user: userId, cmd: queuedCmd })) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
await interaction.deferReply({ flags: hideReply ? 64 : undefined });
|
|
154
|
+
const payload = { user: userId, cmd: queuedCmd };
|
|
155
|
+
queueUtils.addToAll(queues, payload);
|
|
156
|
+
try {
|
|
157
|
+
switch (subcommand) {
|
|
158
|
+
case COMMON.EXEC: {
|
|
159
|
+
await (0, command_1.execCommand)(payload, interaction, queuedCmd, username, 0, queues);
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
case COMMON.CLEAR: {
|
|
163
|
+
await (0, clear_1.clearHistory)(lookback, interaction, username, sendSuccessMsg);
|
|
164
|
+
break;
|
|
165
|
+
}
|
|
166
|
+
case COMMON.READ: {
|
|
167
|
+
await (0, file_1.read)(interaction, username, path, payload);
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
case COMMON.WRITE: {
|
|
171
|
+
await (0, file_1.write)(interaction, username, file, path, payload, queues);
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
case COMMON.WATCH: {
|
|
175
|
+
await (0, watch_1.watch)(interaction, username, userId, path, interval, repeat, queues);
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
case COMMON.DEBUG: {
|
|
179
|
+
await (0, debug_1.debug)(interaction, username, userId, queues, client);
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
await interaction.editReply({ content: COMMON.DISCOS_GENERIC_ERR2 + username + '.' });
|
|
186
|
+
}
|
|
187
|
+
finally {
|
|
188
|
+
queueUtils.removeFromAll(queues, payload);
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
void client.login(process.env.BOT_TOKEN).catch((err) => {
|
|
192
|
+
console.error(COMMON.DISCOS_CONN_FAIL, err);
|
|
193
|
+
process.exit(1);
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
if (require.main === module) {
|
|
197
|
+
(0, slash_commands_1.registerSlashCommands)();
|
|
198
|
+
startDiscOS();
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=startup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startup.js","sourceRoot":"","sources":["../src/startup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { AxiosResponse } from 'axios';
|
|
2
|
+
import type { ICommandQueueItem, IFileWritePayload } from '../shared/interfaces';
|
|
3
|
+
export declare function post(payload: ICommandQueueItem, b64decode: boolean): Promise<AxiosResponse<any, any>>;
|
|
4
|
+
export declare function put(req: IFileWritePayload): Promise<AxiosResponse<any, any>>;
|
|
5
|
+
//# sourceMappingURL=backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/tools/backend.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAM3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAoHjF,wBAAsB,IAAI,CAAC,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAe3G;AAED,wBAAsB,GAAG,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAgBlF"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.post = post;
|
|
40
|
+
exports.put = put;
|
|
41
|
+
const axios_1 = __importDefault(require("axios"));
|
|
42
|
+
const config_1 = require("../config");
|
|
43
|
+
const COMMON = __importStar(require("../common"));
|
|
44
|
+
const consts_1 = require("../shared/consts");
|
|
45
|
+
const WRITE_OP_SUCCESS = '';
|
|
46
|
+
const shell_escape_1 = __importDefault(require("shell-escape"));
|
|
47
|
+
const child_process_1 = require("child_process");
|
|
48
|
+
const util_1 = require("util");
|
|
49
|
+
const promises_1 = require("fs/promises");
|
|
50
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
51
|
+
async function localUser(user) {
|
|
52
|
+
if (user === consts_1.ROOT_UID) {
|
|
53
|
+
return 'root';
|
|
54
|
+
}
|
|
55
|
+
const dbContent = await (0, promises_1.readFile)(config_1.Config.databasePath, 'utf-8');
|
|
56
|
+
const dbParsed = JSON.parse(dbContent);
|
|
57
|
+
const serverUser = dbParsed.users[user];
|
|
58
|
+
return (0, shell_escape_1.default)([serverUser]);
|
|
59
|
+
}
|
|
60
|
+
function internalAxiosResponse(data, status) {
|
|
61
|
+
return {
|
|
62
|
+
data: data,
|
|
63
|
+
status: status,
|
|
64
|
+
statusText: '',
|
|
65
|
+
headers: {},
|
|
66
|
+
config: {
|
|
67
|
+
headers: {},
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
async function spawnChild(user, command) {
|
|
72
|
+
try {
|
|
73
|
+
const cmd = (0, shell_escape_1.default)([command]);
|
|
74
|
+
const serverUser = await localUser(user);
|
|
75
|
+
const { stdout } = await execAsync(`sudo /usr/local/bin/cmdex ${serverUser} ${cmd}`, {
|
|
76
|
+
encoding: 'buffer',
|
|
77
|
+
maxBuffer: 1000 * 1000 * config_1.Config.fileMaxSize * 1.34,
|
|
78
|
+
});
|
|
79
|
+
return stdout;
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return Buffer.from(COMMON.SPAWN_ERR);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
async function fileWrite(url, path, payload) {
|
|
86
|
+
const escapedPath = (0, shell_escape_1.default)([path]);
|
|
87
|
+
const safeUrl = (0, shell_escape_1.default)([url]);
|
|
88
|
+
try {
|
|
89
|
+
const { stdout } = await execAsync(`sudo /usr/local/bin/cmdex root whoami`);
|
|
90
|
+
if (stdout.trim() !== 'root') {
|
|
91
|
+
return COMMON.SPAWN_ERR;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return COMMON.SPAWN_ERR;
|
|
96
|
+
}
|
|
97
|
+
const serverUser = await localUser(payload.user);
|
|
98
|
+
const isDirCmd = (0, shell_escape_1.default)([`[ -d ${escapedPath} ] && echo 1 || echo 0`]);
|
|
99
|
+
let { stdout } = await execAsync(`sudo /usr/local/bin/cmdex ${serverUser} ${isDirCmd}`);
|
|
100
|
+
if (stdout.trim() === '1') {
|
|
101
|
+
return COMMON.DIR_ERR;
|
|
102
|
+
}
|
|
103
|
+
const testPermissionCmd = (0, shell_escape_1.default)([`mkdir -p "$(dirname ${escapedPath})" && echo > ${escapedPath} && rm -f ${escapedPath}`]);
|
|
104
|
+
({ stdout } = await execAsync(`sudo /usr/local/bin/cmdex ${serverUser} ${testPermissionCmd}`));
|
|
105
|
+
if (stdout.trim() !== '') {
|
|
106
|
+
return COMMON.PERM_ERR;
|
|
107
|
+
}
|
|
108
|
+
const curlCmd = (0, shell_escape_1.default)([`curl -fsSL ${safeUrl} -o ${escapedPath}`]);
|
|
109
|
+
({ stdout } = await execAsync(`sudo /usr/local/bin/cmdex ${serverUser} ${curlCmd}`));
|
|
110
|
+
if (stdout.trim() !== '') {
|
|
111
|
+
return COMMON.DOWNLOAD_ERR;
|
|
112
|
+
}
|
|
113
|
+
const getHomeCmd = (0, shell_escape_1.default)(['echo $HOME']);
|
|
114
|
+
({ stdout } = await execAsync(`sudo /usr/local/bin/cmdex ${serverUser} ${getHomeCmd}`));
|
|
115
|
+
const userHomeDir = stdout.trim();
|
|
116
|
+
const permCmd = (0, shell_escape_1.default)([`cd ${userHomeDir} && chown ${serverUser}:${serverUser} ${escapedPath} && chmod 660 ${escapedPath}`]);
|
|
117
|
+
({ stdout } = await execAsync(`sudo /usr/local/bin/cmdex root ${permCmd}`));
|
|
118
|
+
if (stdout.trim() !== '') {
|
|
119
|
+
return COMMON.SET_PERM_ERR;
|
|
120
|
+
}
|
|
121
|
+
return WRITE_OP_SUCCESS;
|
|
122
|
+
}
|
|
123
|
+
async function post(payload, b64decode) {
|
|
124
|
+
let res;
|
|
125
|
+
if (config_1.Config.standalone) {
|
|
126
|
+
const output = await spawnChild(payload.user, payload.cmd);
|
|
127
|
+
res = internalAxiosResponse(b64decode ? Buffer.from(output.toString(), 'base64') : output, 200);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
res = await axios_1.default.post(config_1.Config.backend, payload, {
|
|
131
|
+
responseType: 'text',
|
|
132
|
+
validateStatus: (status) => status <= 500,
|
|
133
|
+
});
|
|
134
|
+
if (b64decode)
|
|
135
|
+
res.data = Buffer.from(res.data, 'base64');
|
|
136
|
+
}
|
|
137
|
+
return res;
|
|
138
|
+
}
|
|
139
|
+
async function put(req) {
|
|
140
|
+
let res;
|
|
141
|
+
if (config_1.Config.standalone) {
|
|
142
|
+
const internalResponse = await fileWrite(req.url, req.path, req.payload);
|
|
143
|
+
return internalAxiosResponse(internalResponse, internalResponse === WRITE_OP_SUCCESS ? 200 : 500);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
res = await axios_1.default.put(config_1.Config.backend, req, {
|
|
147
|
+
headers: {
|
|
148
|
+
'Content-Type': 'application/json',
|
|
149
|
+
},
|
|
150
|
+
validateStatus: (status) => status <= 500,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
return res;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend.js","sourceRoot":"","sources":["../../src/tools/backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ipcServer.d.ts","sourceRoot":"","sources":["../../src/tools/ipcServer.ts"],"names":[],"mappings":"AAEA,OAAO,GAAG,MAAM,KAAK,CAAC;AAMtB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAKrD,wBAAgB,cAAc,CAAC,SAAS,EAAE,aAAa,GAAG,GAAG,CAAC,MAAM,CA+CnE"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.startIPCServer = startIPCServer;
|
|
40
|
+
const queueUtils = __importStar(require("../tools/queue-utils"));
|
|
41
|
+
const net_1 = __importDefault(require("net"));
|
|
42
|
+
const fs_1 = __importDefault(require("fs"));
|
|
43
|
+
const COMMON = __importStar(require("../common"));
|
|
44
|
+
const consts_1 = require("../shared/consts");
|
|
45
|
+
const config_1 = require("../config");
|
|
46
|
+
function startIPCServer(cmdQueues) {
|
|
47
|
+
try {
|
|
48
|
+
fs_1.default.unlinkSync(consts_1.SOCKET_PATH);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
}
|
|
52
|
+
const server = net_1.default.createServer((socket) => {
|
|
53
|
+
socket.on('data', (data) => {
|
|
54
|
+
if (!config_1.Config.safemode) {
|
|
55
|
+
socket.write(JSON.stringify({ valid: true }));
|
|
56
|
+
socket.end();
|
|
57
|
+
}
|
|
58
|
+
let req;
|
|
59
|
+
try {
|
|
60
|
+
req = JSON.parse(data.toString());
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
socket.write(JSON.stringify({ valid: false }));
|
|
64
|
+
socket.end();
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (queueUtils.isInQueue(cmdQueues.validationQueue, req)) {
|
|
68
|
+
queueUtils.tryRemoveInQueue(cmdQueues.validationQueue, req);
|
|
69
|
+
socket.write(JSON.stringify({ valid: true }));
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
socket.write(JSON.stringify({ valid: false }));
|
|
73
|
+
}
|
|
74
|
+
socket.end();
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
server.listen(consts_1.SOCKET_PATH, () => {
|
|
78
|
+
fs_1.default.chmodSync(consts_1.SOCKET_PATH, 0o600);
|
|
79
|
+
console.log(COMMON.LISTENING + consts_1.SOCKET_PATH);
|
|
80
|
+
});
|
|
81
|
+
return server;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=ipcServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ipcServer.js","sourceRoot":"","sources":["../../src/tools/ipcServer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,wCA+CC;AA5DD,iEAAmD;AAEnD,8CAAsB;AACtB,4CAAoB;AAEpB,kDAAoC;AACpC,6CAA+C;AAK/C,sCAAmC;AAEnC,SAAgB,cAAc,CAAC,SAAwB;IAErD,IAAI,CAAC;QACH,YAAE,CAAC,UAAU,CAAC,oBAAW,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;IAET,CAAC;IAED,MAAM,MAAM,GAAG,aAAG,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE;QACzC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAEzB,IAAI,CAAC,eAAM,CAAC,QAAQ,EAAE,CAAC;gBACrB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC9C,MAAM,CAAC,GAAG,EAAE,CAAC;YACf,CAAC;YAGD,IAAI,GAAsB,CAAC;YAC3B,IAAI,CAAC;gBACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAsB,CAAC;YACzD,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC/C,MAAM,CAAC,GAAG,EAAE,CAAC;gBACb,OAAO;YACT,CAAC;YAGD,IAAI,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe,EAAE,GAAG,CAAC,EAAE,CAAC;gBACzD,UAAU,CAAC,gBAAgB,CAAC,SAAS,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;gBAE5D,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACjD,CAAC;YACD,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,CAAC,oBAAW,EAAE,GAAG,EAAE;QAI9B,YAAE,CAAC,SAAS,CAAC,oBAAW,EAAE,KAAK,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,GAAG,oBAAW,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ChatInputCommandInteraction, CacheType } from 'discord.js';
|
|
2
|
+
import type { ICommandQueueItem } from '../shared/interfaces';
|
|
3
|
+
import type { CommandQueues } from '../types/queues';
|
|
4
|
+
export declare function addToAll(queues: CommandQueues, req: ICommandQueueItem): void;
|
|
5
|
+
export declare function removeFromAll(queues: CommandQueues, req: ICommandQueueItem): void;
|
|
6
|
+
export declare function tryRemoveInQueue(queue: ICommandQueueItem[], req: ICommandQueueItem): void;
|
|
7
|
+
export declare function isInQueue(queue: ICommandQueueItem[], req: ICommandQueueItem): boolean;
|
|
8
|
+
export declare function handleDuplicate(interaction: ChatInputCommandInteraction<CacheType>, username: string, queue: ICommandQueueItem[], translated: ICommandQueueItem): Promise<boolean>;
|
|
9
|
+
//# sourceMappingURL=queue-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-utils.d.ts","sourceRoot":"","sources":["../../src/tools/queue-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAG5E;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAGjF;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,EAAE,EAAE,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAKzF;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,iBAAiB,EAAE,EAAE,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAErF;AAED,wBAAsB,eAAe,CACnC,WAAW,EAAE,2BAA2B,CAAC,SAAS,CAAC,EACnD,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,iBAAiB,EAAE,EAC1B,UAAU,EAAE,iBAAiB,GAC5B,OAAO,CAAC,OAAO,CAAC,CAUlB"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.addToAll = addToAll;
|
|
37
|
+
exports.removeFromAll = removeFromAll;
|
|
38
|
+
exports.tryRemoveInQueue = tryRemoveInQueue;
|
|
39
|
+
exports.isInQueue = isInQueue;
|
|
40
|
+
exports.handleDuplicate = handleDuplicate;
|
|
41
|
+
const COMMON = __importStar(require("../common"));
|
|
42
|
+
function addToAll(queues, req) {
|
|
43
|
+
queues.validationQueue.push(req);
|
|
44
|
+
queues.duplicateQueue.push(req);
|
|
45
|
+
}
|
|
46
|
+
function removeFromAll(queues, req) {
|
|
47
|
+
tryRemoveInQueue(queues.validationQueue, req);
|
|
48
|
+
tryRemoveInQueue(queues.duplicateQueue, req);
|
|
49
|
+
}
|
|
50
|
+
function tryRemoveInQueue(queue, req) {
|
|
51
|
+
const index = queue.findIndex((item) => item.user === req.user && item.cmd === req.cmd);
|
|
52
|
+
if (index !== -1) {
|
|
53
|
+
queue.splice(index, 1);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function isInQueue(queue, req) {
|
|
57
|
+
return queue.findIndex((item) => item.user === req.user && item.cmd === req.cmd) !== -1;
|
|
58
|
+
}
|
|
59
|
+
async function handleDuplicate(interaction, username, queue, translated) {
|
|
60
|
+
const index = queue.findIndex((item) => item.user === translated.user && item.cmd === translated.cmd);
|
|
61
|
+
if (index !== -1) {
|
|
62
|
+
await interaction.reply({
|
|
63
|
+
content: COMMON.DUPLICATE_ERR + username + '.',
|
|
64
|
+
flags: 64,
|
|
65
|
+
});
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=queue-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-utils.js","sourceRoot":"","sources":["../../src/tools/queue-utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,4BAGC;AAED,sCAGC;AAED,4CAKC;AAED,8BAEC;AAED,0CAeC;AAxCD,kDAAoC;AAIpC,SAAgB,QAAQ,CAAC,MAAqB,EAAE,GAAsB;IACpE,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,SAAgB,aAAa,CAAC,MAAqB,EAAE,GAAsB;IACzE,gBAAgB,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;IAC9C,gBAAgB,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;AAC/C,CAAC;AAED,SAAgB,gBAAgB,CAAC,KAA0B,EAAE,GAAsB;IACjF,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;IACxF,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAgB,SAAS,CAAC,KAA0B,EAAE,GAAsB;IAC1E,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1F,CAAC;AAEM,KAAK,UAAU,eAAe,CACnC,WAAmD,EACnD,QAAgB,EAChB,KAA0B,EAC1B,UAA6B;IAE7B,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,CAAC,CAAC;IACtG,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,MAAM,WAAW,CAAC,KAAK,CAAC;YACtB,OAAO,EAAE,MAAM,CAAC,aAAa,GAAG,QAAQ,GAAG,GAAG;YAC9C,KAAK,EAAE,EAAE;SACV,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateDb.d.ts","sourceRoot":"","sources":["../../src/tools/validateDb.ts"],"names":[],"mappings":"AAUA,wBAAgB,UAAU,IAAI,OAAO,CAmFpC"}
|