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.
Files changed (94) hide show
  1. package/.github/PRIVACY_POLICY.md +29 -0
  2. package/.github/TERMS_OF_SERVICE.md +56 -0
  3. package/LICENSE +201 -0
  4. package/README.md +70 -0
  5. package/dist/common.d.ts +157 -0
  6. package/dist/common.d.ts.map +1 -0
  7. package/dist/common.js +226 -0
  8. package/dist/common.js.map +1 -0
  9. package/dist/config.d.ts +18 -0
  10. package/dist/config.d.ts.map +1 -0
  11. package/dist/config.js +20 -0
  12. package/dist/config.js.map +1 -0
  13. package/dist/ext/langMap.d.ts +2 -0
  14. package/dist/ext/langMap.d.ts.map +1 -0
  15. package/dist/ext/langMap.js +275 -0
  16. package/dist/ext/langMap.js.map +1 -0
  17. package/dist/index.d.ts +3 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +21 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/modules/admin.d.ts +4 -0
  22. package/dist/modules/admin.d.ts.map +1 -0
  23. package/dist/modules/admin.js +281 -0
  24. package/dist/modules/admin.js.map +1 -0
  25. package/dist/modules/clear.d.ts +3 -0
  26. package/dist/modules/clear.d.ts.map +1 -0
  27. package/dist/modules/clear.js +82 -0
  28. package/dist/modules/clear.js.map +1 -0
  29. package/dist/modules/command.d.ts +5 -0
  30. package/dist/modules/command.d.ts.map +1 -0
  31. package/dist/modules/command.js +89 -0
  32. package/dist/modules/command.js.map +1 -0
  33. package/dist/modules/debug.d.ts +4 -0
  34. package/dist/modules/debug.d.ts.map +1 -0
  35. package/dist/modules/debug.js +47 -0
  36. package/dist/modules/debug.js.map +1 -0
  37. package/dist/modules/file.d.ts +7 -0
  38. package/dist/modules/file.d.ts.map +1 -0
  39. package/dist/modules/file.js +141 -0
  40. package/dist/modules/file.js.map +1 -0
  41. package/dist/modules/watch.d.ts +4 -0
  42. package/dist/modules/watch.d.ts.map +1 -0
  43. package/dist/modules/watch.js +63 -0
  44. package/dist/modules/watch.js.map +1 -0
  45. package/dist/shared/consts.d.ts +3 -0
  46. package/dist/shared/consts.d.ts.map +1 -0
  47. package/dist/shared/consts.js +6 -0
  48. package/dist/shared/consts.js.map +1 -0
  49. package/dist/shared/index.d.ts +3 -0
  50. package/dist/shared/index.d.ts.map +1 -0
  51. package/dist/shared/index.js +19 -0
  52. package/dist/shared/index.js.map +1 -0
  53. package/dist/shared/interfaces.d.ts +13 -0
  54. package/dist/shared/interfaces.d.ts.map +1 -0
  55. package/dist/shared/interfaces.js +3 -0
  56. package/dist/shared/interfaces.js.map +1 -0
  57. package/dist/slash-commands.d.ts +2 -0
  58. package/dist/slash-commands.d.ts.map +1 -0
  59. package/dist/slash-commands.js +242 -0
  60. package/dist/slash-commands.js.map +1 -0
  61. package/dist/startup.d.ts +2 -0
  62. package/dist/startup.d.ts.map +1 -0
  63. package/dist/startup.js +200 -0
  64. package/dist/startup.js.map +1 -0
  65. package/dist/tools/backend.d.ts +5 -0
  66. package/dist/tools/backend.d.ts.map +1 -0
  67. package/dist/tools/backend.js +155 -0
  68. package/dist/tools/backend.js.map +1 -0
  69. package/dist/tools/ipcServer.d.ts +4 -0
  70. package/dist/tools/ipcServer.d.ts.map +1 -0
  71. package/dist/tools/ipcServer.js +83 -0
  72. package/dist/tools/ipcServer.js.map +1 -0
  73. package/dist/tools/queue-utils.d.ts +9 -0
  74. package/dist/tools/queue-utils.d.ts.map +1 -0
  75. package/dist/tools/queue-utils.js +70 -0
  76. package/dist/tools/queue-utils.js.map +1 -0
  77. package/dist/tools/validateDb.d.ts +2 -0
  78. package/dist/tools/validateDb.d.ts.map +1 -0
  79. package/dist/tools/validateDb.js +111 -0
  80. package/dist/tools/validateDb.js.map +1 -0
  81. package/dist/tools/validateDotenv.d.ts +2 -0
  82. package/dist/tools/validateDotenv.d.ts.map +1 -0
  83. package/dist/tools/validateDotenv.js +117 -0
  84. package/dist/tools/validateDotenv.js.map +1 -0
  85. package/dist/types/db.d.ts +9 -0
  86. package/dist/types/db.d.ts.map +1 -0
  87. package/dist/types/db.js +3 -0
  88. package/dist/types/db.js.map +1 -0
  89. package/dist/types/queues.d.ts +6 -0
  90. package/dist/types/queues.d.ts.map +1 -0
  91. package/dist/types/queues.js +3 -0
  92. package/dist/types/queues.js.map +1 -0
  93. package/package.json +71 -0
  94. package/setup/install.sh +527 -0
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2HA,oBAeC;AAED,kBAgBC;AA5JD,kDAA+D;AAI/D,sCAAmC;AAMnC,kDAAoC;AACpC,6CAA4C;AAC5C,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAG5B,gEAAuC;AACvC,iDAAqC;AACrC,+BAAiC;AACjC,0CAAuC;AACvC,MAAM,SAAS,GAAG,IAAA,gBAAS,EAAC,oBAAI,CAAC,CAAC;AAGlC,KAAK,UAAU,SAAS,CAAC,IAAY;IAEnC,IAAI,IAAI,KAAK,iBAAQ,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,SAAS,GAAW,MAAM,IAAA,mBAAQ,EAAC,eAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAEpC,CAAC;IAGF,MAAM,UAAU,GAAW,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEhD,OAAO,IAAA,sBAAW,EAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACnC,CAAC;AAGD,SAAS,qBAAqB,CAAC,IAAS,EAAE,MAAc;IACtD,OAAO;QAEL,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,MAAM;QACd,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,EAAE;QACX,MAAM,EAAE;YACN,OAAO,EAAE,EAAE;SACkB;KAChC,CAAC;AACJ,CAAC;AAGD,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,OAAe;IACrD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAA,sBAAW,EAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACnC,MAAM,UAAU,GAAW,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,6BAA6B,UAAU,IAAI,GAAG,EAAE,EAAE;YACnF,QAAQ,EAAE,QAAQ;YAClB,SAAS,EAAE,IAAI,GAAG,IAAI,GAAG,eAAM,CAAC,WAAW,GAAG,IAAI;SACnD,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAGD,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,IAAY,EAAE,OAA0B;IAE5E,MAAM,WAAW,GAAW,IAAA,sBAAW,EAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,IAAA,sBAAW,EAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAGnC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,uCAAuC,CAAC,CAAC;QAC5E,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;YAC7B,OAAO,MAAM,CAAC,SAAS,CAAC;QAC1B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,SAAS,CAAC;IAC1B,CAAC;IAGD,MAAM,UAAU,GAAW,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAGzD,MAAM,QAAQ,GAAG,IAAA,sBAAW,EAAC,CAAC,QAAQ,WAAW,wBAAwB,CAAC,CAAC,CAAC;IAC5E,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,6BAA6B,UAAU,IAAI,QAAQ,EAAE,CAAC,CAAC;IACxF,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAGD,MAAM,iBAAiB,GAAG,IAAA,sBAAW,EAAC,CAAC,uBAAuB,WAAW,gBAAgB,WAAW,aAAa,WAAW,EAAE,CAAC,CAAC,CAAC;IACjI,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,6BAA6B,UAAU,IAAI,iBAAiB,EAAE,CAAC,CAAC,CAAC;IAC/F,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC,QAAQ,CAAC;IACzB,CAAC;IAGD,MAAM,OAAO,GAAG,IAAA,sBAAW,EAAC,CAAC,cAAc,OAAO,OAAO,WAAW,EAAE,CAAC,CAAC,CAAC;IACzE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,6BAA6B,UAAU,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC;IACrF,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC,YAAY,CAAC;IAC7B,CAAC;IAGD,MAAM,UAAU,GAAG,IAAA,sBAAW,EAAC,CAAC,YAAY,CAAC,CAAC,CAAC;IAC/C,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,6BAA6B,UAAU,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC;IACxF,MAAM,WAAW,GAAW,MAAM,CAAC,IAAI,EAAE,CAAC;IAE1C,MAAM,OAAO,GAAG,IAAA,sBAAW,EAAC,CAAC,MAAM,WAAW,aAAa,UAAU,IAAI,UAAU,IAAI,WAAW,iBAAiB,WAAW,EAAE,CAAC,CAAC,CAAC;IACnI,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,kCAAkC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC5E,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAEM,KAAK,UAAU,IAAI,CAAC,OAA0B,EAAE,SAAkB;IACvE,IAAI,GAA4B,CAAC;IAEjC,IAAI,eAAM,CAAC,UAAU,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3D,GAAG,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClG,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,MAAM,eAAK,CAAC,IAAI,CAAC,eAAM,CAAC,OAAO,EAAE,OAAO,EAAE;YAC9C,YAAY,EAAE,MAAM;YACpB,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,IAAI,GAAG;SAC1C,CAAC,CAAC;QACH,IAAI,SAAS;YAAE,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAc,EAAE,QAAQ,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAEM,KAAK,UAAU,GAAG,CAAC,GAAsB;IAC9C,IAAI,GAA4B,CAAC;IAEjC,IAAI,eAAM,CAAC,UAAU,EAAE,CAAC;QACtB,MAAM,gBAAgB,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACzE,OAAO,qBAAqB,CAAC,gBAAgB,EAAE,gBAAgB,KAAK,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACpG,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,eAAM,CAAC,OAAO,EAAE,GAAG,EAAE;YACzC,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,IAAI,GAAG;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,4 @@
1
+ import net from 'net';
2
+ import type { CommandQueues } from '../types/queues';
3
+ export declare function startIPCServer(cmdQueues: CommandQueues): net.Server;
4
+ //# sourceMappingURL=ipcServer.d.ts.map
@@ -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,2 @@
1
+ export declare function validateDb(): boolean;
2
+ //# sourceMappingURL=validateDb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateDb.d.ts","sourceRoot":"","sources":["../../src/tools/validateDb.ts"],"names":[],"mappings":"AAUA,wBAAgB,UAAU,IAAI,OAAO,CAmFpC"}