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,29 @@
1
+ # Privacy Policy
2
+
3
+ ## 1. Introduction
4
+
5
+ This Privacy Policy is an extension of the [DiscOS Terms of Service](https://github.com/BrNi05/DiscOS/blob/main/.github/TERMS_OF_SERVICE.md). By using DiscOS clones, you agree to comply with both the Terms of Service and this Privacy Policy.
6
+
7
+ ## 2. Discord's terms
8
+
9
+ By using DiscOS clones, you agree to [Discord's Privacy Policy](https://discord.com/privacy).
10
+
11
+ ## 3. Data collection
12
+
13
+ By default, DiscOS clones do not collect or store any user data, neither do they log user activity.
14
+
15
+ ## 4. Instance specific policy
16
+
17
+ DiscOS clone admins are solely responsible for informing their users and complying with relevant data protection laws (such as GDPR).
18
+
19
+ Admins can reference this Privacy Policy, but should always clearly state custom policies for users (before any data collection occurs).
20
+
21
+ ## 5. Admin-configurable logging
22
+
23
+ By using an external backend, admins have means to enable logging or analytics (without modifying the source code, thus ToS continues to apply).
24
+
25
+ Admins are encouraged to follow the principle of minimal logging as well as security and data protection best practices.
26
+
27
+ ## 6. Version history
28
+
29
+ - 2025.08.30: first edition
@@ -0,0 +1,56 @@
1
+ # Terms of Service
2
+
3
+ ## 1. Introduction
4
+
5
+ DiscOS refers to the source code (the product) found in this repository.
6
+
7
+ These Terms of Service ("terms") govern the use of any Discord bots ("DiscOS clones", "bot") that use DiscOS.
8
+
9
+ Modifying the source code creates a new product, so these terms do not apply to bots using the modified DiscOS source code.
10
+
11
+ You agree to comply with these terms when using DiscOS with your bot.
12
+
13
+ ## 2. Extending the scope of admin
14
+
15
+ In the following, admin can mean any person, who is the owner of the bot, in the owner team, has root privileges on the host or has access to `admos` commands.
16
+
17
+ ## 3. Usage of DiscOS clones
18
+
19
+ You must comply with Discord's [Terms of Service](https://discord.com/terms) and [Community Guidelines](https://discord.com/guidelines) when using the bot.
20
+
21
+ You agree not to use the bot for unlawful, unethical, harmful or disruptive purposes.
22
+
23
+ Bot admins must follow the relevant ethical and professional guidelines when working with the bot.
24
+
25
+ Bot users agree not to abuse bugs and security issues of the bot. Instead, they are asked to [open a ticket](https://github.com/BrNi05/DiscOS/issues).
26
+
27
+ ## 4. Liability
28
+
29
+ DiscOS source code is provided free of charge and without a warranty of any kind.
30
+
31
+ The developer (@BrNi05), the contributors and admins are not liable for damages, loss of data, or any issues caused by the bot.
32
+
33
+ ## 5. Termination
34
+
35
+ The developer (@BrNi05) reserves the right to discontinue support, updates, or access to this repository at any time.
36
+
37
+ Admins may remove the bot from their servers at any time. Custom regulations may apply.
38
+
39
+ Admins may use the bot's access control commands at any time. Custom regulations may apply.
40
+
41
+ ## 6. License
42
+
43
+ These terms do not replace or limit the [Apache 2.0 license](https://github.com/BrNi05/DiscOS/blob/main/LICENSE).
44
+ The use of DiscOS source code is subject to the Apache 2.0 License in addition to these terms.
45
+
46
+ ## 7. Privacy Policy
47
+
48
+ The [Privacy Policy](https://github.com/BrNi05/DiscOS/blob/main/.github/PRIVACY_POLICY.md) is an extension of the terms, inheriting all clauses of it.
49
+
50
+ ## 8. Changes of terms
51
+
52
+ These terms may be updated at any time. Continued use of the bot after updates constitutes agreement to the new terms.
53
+
54
+ ## 9. Version history
55
+
56
+ - 2025.08.30: first edition
package/LICENSE ADDED
@@ -0,0 +1,201 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright [yyyy] [name of copyright owner]
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
package/README.md ADDED
@@ -0,0 +1,70 @@
1
+ # DiscOS
2
+
3
+ DiscOS is a secure interaction bridge between Discord and Linux servers, letting admins manage and users access their machines effortlessly. It’s easier to set up than SSH, and offers a richer set of features than traditional remote desktop solutions.
4
+
5
+ ## Features
6
+
7
+ **You can use `/dcos` slash commands to:**
8
+
9
+ - Execute almost any command on the server as your local user
10
+ - Live-monitor (periodically execute) almost any command with the watch module
11
+ - Clear the previous replies for a smooth experience
12
+ - Send any type of file from your machine to the server
13
+ - Send any type of file from the server to your machine (to a Discord channel)
14
+ - Decide if the reply should only be visible to you, or everybody on the channel
15
+
16
+ **Admins can use `/admos` slash commands to:**
17
+
18
+ - Switch between standalone and external backend mode
19
+ - Enable or disable safemode
20
+ - Clear the previous replies for any user (or all users)
21
+ - Enable or disable users to use DiscOS
22
+ - Enable or disable DiscOS to be used on specific channels
23
+ - List all channels and users that can use DiscOS
24
+ - Manage admin access and list admins
25
+ - Enable lockdown mode (only admins can use DiscOS commands)
26
+ - Execute almost any command on the server as root
27
+ - Kill DiscOS
28
+
29
+ **You can use environment variables to:**
30
+
31
+ - Configure essential security features
32
+ - Limit maximum file and reply size
33
+ - Configure some amazing display options
34
+ - Configure bot and connection settings
35
+
36
+ **These security features keep you and your server safe:**
37
+
38
+ - All user input are escaped, so the shell cannot be abused
39
+ - Users can decide if the reply for their command is ephemeral or visible for all server users (who have permission to view the channel)
40
+ - In external backend mode, you can use an IPC server to validate payloads with DiscOS
41
+ - The one and only secret DiscOS uses is the bot token. No others keys or secrets needed
42
+ - Minimal logging - users deserve privacy
43
+ - DiscOS is open-source - see what's under the hood
44
+ - No need for open ports - DiscOS will make a secure outbound connection to Discord servers
45
+ - Files are sent over HTTPS through Discord CDN. The URL is not recorded, so only you can see what was sent
46
+ - The Discord API and Discord.js are used by millions of bots and users - DiscOS is built on a solid and reliable foundation
47
+
48
+ ## Limitations
49
+
50
+ - Commands that are interactive (require user input) are not supported
51
+ - Discord API limitations apply
52
+ - Each command runs a fresh login shell, so no environment, working directory, or state is preserved between executions
53
+ - Shell initialization files for interactive, non-login shells (e.g. `.bashrc`, `.zshrc`) are not read (but there is a workaround)
54
+
55
+ ## Ways to use
56
+
57
+ - As a Systemd service
58
+ - As an `npm` package
59
+ - In a Docker container (**non-rootless mode**)
60
+ - Compile the code and create an own solution
61
+
62
+ ## Notice
63
+
64
+ Using DiscOS means you’re cool with the [Terms of Service](https://github.com/BrNi05/DiscOS/blob/main/.github/TERMS_OF_SERVICE.md) and the [Privacy Policy](https://github.com/BrNi05/DiscOS/blob/main/.github/PRIVACY_POLICY.md).
65
+
66
+ ## Getting started
67
+
68
+ Please visit [DiscOS Wiki](https://github.com/BrNi05/DiscOS/wiki/01.-Home) for detailed documentation on setup and usage.
69
+
70
+ **Have fun using DiscOS!**
@@ -0,0 +1,157 @@
1
+ export declare function ENV_MISSING_VAR(missingVars: string[]): string;
2
+ export declare const ENV_TOKEN = "DiscOS ERROR: BOT_TOKEN must be at least 59 characters long.";
3
+ export declare const ENV_APPID = "DiscOS ERROR: APP_ID must be a numeric string with at least 17 characters.";
4
+ export declare const ENV_GUILDS = "DiscOS ERROR: GUILD_IDS must be comma-separated numeric strings with at least 17 characters.";
5
+ export declare const ENV_VER = "DiscOS ERROR: VERSION must be a non-empty string in format x.y.z (e.g., 1.0.0).";
6
+ export declare const ENV_QUEUE_MAX = "DiscOS ERROR: CMD_QUEUE_MAX_SIZE must be a positive integer.";
7
+ export declare const ENV_BACKEND = "DiscOS ERROR: BACKEND must be a non-empty string.";
8
+ export declare const ENV_FILE_MAX = "DiscOS ERROR: FILE_MAX_SIZE must be a positive integer less than or equal to 1000.";
9
+ export declare const ENV_BIN_OVERRIDE = "DiscOS ERROR: READ_BIN_OVERRIDE must be a non-empty comma-separated list of binaries.";
10
+ export declare const ENV_QUICK_VIEW = "DiscOS ERROR: QUICK_VIEW must be a non-empty comma-separated list of file extensions. '?' as extension is not allowed.";
11
+ export declare const ENV_QUICK_VIEW_MAX_LENGTH = "DiscOS ERROR: QUICK_VIEW_MAX_LENGTH must be a positive integer between 0 and 2000.";
12
+ export declare const DB_ERR = "DiscOS ERROR: Database file is invalid or missing.";
13
+ export declare const DB_USER_ERR = "DiscOS ERROR: users must be an object with numeric string keys (Discord UIDs) and string values (local users).";
14
+ export declare const DB_USERS_EMPTY = "DiscOS WARN: No users found in database.";
15
+ export declare const DB_USERS_INVALID = "User IDs must be numeric strings at least 17 characters long";
16
+ export declare const DB_ADMIN_ERR = "DiscOS ERROR: adminUsers must be an array of numeric strings with at least 17 characters.";
17
+ export declare const DB_NO_ADMIN = "DiscOS ERROR: There must be at least one admin user in the database.";
18
+ export declare const DB_ADMIN_INVALID = "DiscOS ERROR: adminUsers must be a non-empty array of numeric strings with at least 17 characters.";
19
+ export declare const DB_ALLOWED_CHANNELS_ARRAY = "DiscOS ERROR: allowedChannels must be a non-empty array.";
20
+ export declare const DB_ALLOWED_CH_EMPTY = "DiscOS WARN: No allowed channels found in database.";
21
+ export declare const DB_ALLOWED_CH_INVALID = "DiscOS ERROR: allowedChannels must contain numeric strings with at least 17 characters.";
22
+ export declare const DB_BOOLEAN_ERR = "DiscOS ERROR: Database boolean fields must be true or false.";
23
+ export declare const CMD_REG_1 = "Slash commands registered on guild (server):";
24
+ export declare const CMD_REG_2 = "Failed to register slash commands on guild (server):";
25
+ export declare const CMD_REG_ERR = "Error during slash command registration:";
26
+ export declare const DCOS = "dcos";
27
+ export declare const DCOS_DESC = "Use DiscOS";
28
+ export declare const HIDE = "hide";
29
+ export declare const SUCCESS_VERBOSE = "Whether to receive a success reply. Default: false.";
30
+ export declare const HIDE_REPLY = "Hide command reply. Default: true.";
31
+ export declare const VERBOSE = "verbose";
32
+ export declare const EXEC = "exec";
33
+ export declare const EXEC_DESC = "Execute a Linux command on the server.";
34
+ export declare const CMD = "cmd";
35
+ export declare const CMD_DESC = "The Linux command to execute on the server.";
36
+ export declare const CLEAR = "clear";
37
+ export declare const CLEAR_DESC = "Clears the (unhidden) command history.";
38
+ export declare const LOOKBACK = "lookback";
39
+ export declare const LOOKBACK_DESC = "How many messages to clear (from newest to oldest). Default: all.";
40
+ export declare const READ = "read";
41
+ export declare const READ_DESC = "Reads a file from the server and sends it as an attachment.";
42
+ export declare const PATH = "path";
43
+ export declare const PATH_DESC_READ = "The path to the file on the server. Should contain the file name (and extension). CWD: ~";
44
+ export declare const WRITE = "write";
45
+ export declare const WRITE_DESC = "Uploads any type of file to the server as an attachment.";
46
+ export declare const FILE = "file";
47
+ export declare const FILE_DESC = "The file to upload.";
48
+ export declare const PATH_DESC_WRITE = "Destination path on the server. Default: uploaded file's name in CWD (~). Creates or overwrites.";
49
+ export declare const WATCH = "watch";
50
+ export declare const WATCH_DESC = "Periodically executes the given command.";
51
+ export declare const TARGET = "target";
52
+ export declare const TARGET_DESC = "The binary to execute.";
53
+ export declare const INTERVAL = "interval";
54
+ export declare const INTERVAL_DESC = "Time between two calls in ms. Default: 1000ms (1s). Min: 500ms. Max: 5000ms.";
55
+ export declare const REPEAT = "repeat";
56
+ export declare const REPEAT_DESC = "Number of calls to make. Default: 20. Min: 1. Max: 100.";
57
+ export declare const DEBUG = "debug";
58
+ export declare const DEBUG_DESC = "Display various debug infos about the DiscOS instance.";
59
+ export declare const DEFAULT_HIDDEN = true;
60
+ export declare const DEFAULT_LOOKBACK = -1;
61
+ export declare const DEFAULT_INTERVAL = 1000;
62
+ export declare const DEFAULT_REPEAT = 20;
63
+ export declare const DEFAULT_DEBUG_VERBOSE = false;
64
+ export declare const FALLBACK_CMD = "echo \"No command entered.\"";
65
+ export declare const ADMOS = "admos";
66
+ export declare const ADMOS_DESC = "DiscOS Admin commands";
67
+ export declare const KILL = "kill";
68
+ export declare const KILL_DESC = "Shuts down the DiscOS instance.";
69
+ export declare const SHUTDOWN_MSG = "DiscOS instance is shutting down...";
70
+ export declare const MODE = "mode";
71
+ export declare const MODE_DESC = "Toggle to use an external backend or use DiscOS's own backend solution.";
72
+ export declare const STANDALONE = "standalone";
73
+ export declare const STANDALONE_DESC = "True: Use DiscOS's own backend solution. False: Use an external backend.";
74
+ export declare const SAFEMODE = "safemode";
75
+ export declare const SAFEMODE_DESC = "Applies to standalone mode only. Spoofing protection feature.";
76
+ export declare const CMD_VAL = "enabled";
77
+ export declare const CMD_VAL_DESC = "True: Enable command validation. False: Disable command validation.";
78
+ export declare const ADMIN_CLEAR_DESC = "Clear the (unhidden) command history for any user/all.";
79
+ export declare const CLEAR_USER = "user";
80
+ export declare const CLEAR_USER_DESC = "Which user's command history to clear. Default/empty: all.";
81
+ export declare const USER_MGMT = "usermgmt";
82
+ export declare const USER_MGMT_DESC = "Allow/disallow a user to use DiscOS commands.";
83
+ export declare const ADMIN_MGMT = "adminmgmt";
84
+ export declare const ADMIN_MGMT_DESC = "Allow/disallow a user to use admin commands.";
85
+ export declare const USER = "user";
86
+ export declare const OPERATION = "operation";
87
+ export declare const LOCAL_USER = "local_user";
88
+ export declare const LOCAL_USER_DESC = "Select the user account on the server that is to be used by the user.";
89
+ export declare const LSU = "lsu";
90
+ export declare const LSU_DESC = "List all server users and their Discord names.";
91
+ export declare const LSA = "lsa";
92
+ export declare const LSA_DESC = "List all admins and their Discord names.";
93
+ export declare const CH_MGMT = "chmgmt";
94
+ export declare const CH_MGMT_DESC = "Allow/disallow DiscOS to be used on a channel.";
95
+ export declare const CHANNEL = "channel";
96
+ export declare const CHANNEL_DESC = "Select the channel that will be affected by the command.";
97
+ export declare const LOCKDOWN = "lockdown";
98
+ export declare const LOCKDOWN_DESC = "Turn on lockdown mode (only admin commands can be executed).";
99
+ export declare const ENABLED = "enabled";
100
+ export declare const LOCKDOWN_ENABLED = "True: enable. False: disable.";
101
+ export declare const ROOT = "root";
102
+ export declare const ROOT_DESC = "Execute a command as root on the server.";
103
+ export declare const ADDRM = "True: add. False: remove.";
104
+ export declare const USER_SEL = "Select the user that will be affected by the command.";
105
+ export declare const GUILD_ERR = "DiscOS commands can only be used on a server (guild).";
106
+ export declare const CHANNEL_ERR = "DiscOS commands cannot be used on this channel.";
107
+ export declare const USER_ERR = "You are currently not allowed to use DiscOS commands.";
108
+ export declare const DISCOS_OVERLOADED = "DiscOS is overloaded. Try again later...";
109
+ export declare const LOCKDOWN_ERR = "DiscOS is in lockdown mode. Only admins can use commands.";
110
+ export declare const DISCOS_NON_ADMIN = "DiscOS ERROR: You are not an admin user. Only admins can use this command.";
111
+ export declare const DUPLICATE_ERR = "Command (or similar one) is already being processed for user @";
112
+ export declare const DISCOS_GENERIC_ERR = "DiscOS ERROR:";
113
+ export declare const DISCOS_GENERIC_ERR2 = "DiscOS encountered an error. User: @";
114
+ export declare const DISCOS_CONN_FAIL = "Connection to Discord failed:";
115
+ export declare const LISTENING = "DiscOS IPC server is listening on port ";
116
+ export declare function CMD_EXEC_AS_MSG(userCmd: string, username: string): string;
117
+ export declare function CMD_EXEC_AS_MSG2(username: string): string;
118
+ export declare const WRITE_CMD: string;
119
+ export declare const READ_CMD: string;
120
+ export declare const WATCH_CMD: string;
121
+ export declare function RW_USE_DEDICATED(replyPrefix?: string): string;
122
+ export declare function WATCH_USE_DEDICATED(replyPrefix?: string): string;
123
+ export declare const BACKEND_EXEC_ERR = "Error opening terminal: unknown.";
124
+ export declare const BACKEND_EXEC_ERR_OVERRIDE = "DiscOS ERROR: Interactive terminal commands are not supported.";
125
+ export declare const UNKNOWN_ERR = "DiscOS ERROR: Execution failed. Unknown error occurred.";
126
+ export declare const FETCH_ERR: string;
127
+ export declare const MSG_CLR_FOR = "Cleared all messages for @";
128
+ export declare const MSG_CLR_PRE = "Cleared the last ";
129
+ export declare const MSG_CLR_POST = " messages for ";
130
+ export declare function FILE_CORRUPT_ERR(username: string): string;
131
+ export declare function FILE_SIZE_ERR(maxSize: number): string;
132
+ export declare function OS_ERR_MSG(username: string): string;
133
+ export declare function READ_FILE(path: string, username: string): string;
134
+ export declare function READ_FILE_QUICK(path: string, username: string): string;
135
+ export declare const READ_FILE_QUICK_LENGTH = 50;
136
+ export declare function WRITE_FILE(path: string, username: string): string;
137
+ export declare function BACKEND_ERR_MSG(username: string, statusCode: number, resString: string): string;
138
+ export declare function WATCH_CMD_BUILD(target: string, interval: number, i: number, repeat: number): string;
139
+ export declare const TOO_MANY_REQ = "Too many requests. Please try again later...";
140
+ export declare const WATCH_TERM = "Watch is terminated.";
141
+ export declare const UNKNOWN_USER = "Non-server member user";
142
+ export declare function MODE_REPLY(standalone: boolean): string;
143
+ export declare function SAFEMODE_REPLY(safemode: boolean): string;
144
+ export declare function LOCKDOWN_REPLY(enabled: boolean): string;
145
+ export declare const CLEAR_ALL_USER = "?";
146
+ export declare const CLEAR_ALL_USER_REPLY = "ALL USERS";
147
+ export declare function AT_LEAST_ONE_ERR(type: string): string;
148
+ export declare function CH_OPERATION(channelName: string, op: boolean): string;
149
+ export declare function ADMIN_OPERATION(username: string, op: boolean): string;
150
+ export declare function ADMIN_OPS(username: string, localUser: string, op: boolean, overr: boolean): string;
151
+ export declare const ADMIN = "admin";
152
+ export declare const SPAWN_ERR = "DiscOS CRITICAL ERROR: cmdex is broken.";
153
+ export declare const DIR_ERR = "The provided path is an existing directory.";
154
+ export declare const PERM_ERR = "No permission to write to the file (or to enter the directories).";
155
+ export declare const DOWNLOAD_ERR = "Failed to download file from Discord CDN.";
156
+ export declare const SET_PERM_ERR = "Failed to set file permissions.";
157
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AACA,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAE7D;AACD,eAAO,MAAM,SAAS,iEAAiE,CAAC;AACxF,eAAO,MAAM,SAAS,+EAA+E,CAAC;AACtG,eAAO,MAAM,UAAU,iGAAiG,CAAC;AACzH,eAAO,MAAM,OAAO,oFAAoF,CAAC;AACzG,eAAO,MAAM,aAAa,iEAAiE,CAAC;AAC5F,eAAO,MAAM,WAAW,sDAAsD,CAAC;AAC/E,eAAO,MAAM,YAAY,uFAAuF,CAAC;AACjH,eAAO,MAAM,gBAAgB,0FAA0F,CAAC;AACxH,eAAO,MAAM,cAAc,2HAC+F,CAAC;AAC3H,eAAO,MAAM,yBAAyB,uFAAuF,CAAC;AAG9H,eAAO,MAAM,MAAM,uDAAuD,CAAC;AAC3E,eAAO,MAAM,WAAW,mHAAmH,CAAC;AAC5I,eAAO,MAAM,cAAc,6CAA6C,CAAC;AACzE,eAAO,MAAM,gBAAgB,iEAAiE,CAAC;AAC/F,eAAO,MAAM,YAAY,8FAA8F,CAAC;AACxH,eAAO,MAAM,WAAW,yEAAyE,CAAC;AAClG,eAAO,MAAM,gBAAgB,uGAAuG,CAAC;AACrI,eAAO,MAAM,yBAAyB,6DAA6D,CAAC;AACpG,eAAO,MAAM,mBAAmB,wDAAwD,CAAC;AACzF,eAAO,MAAM,qBAAqB,4FAA4F,CAAC;AAC/H,eAAO,MAAM,cAAc,iEAAiE,CAAC;AAG7F,eAAO,MAAM,SAAS,iDAAiD,CAAC;AACxE,eAAO,MAAM,SAAS,yDAAyD,CAAC;AAChF,eAAO,MAAM,WAAW,6CAA6C,CAAC;AAGtE,eAAO,MAAM,IAAI,SAAS,CAAC;AAC3B,eAAO,MAAM,SAAS,eAAe,CAAC;AAGtC,eAAO,MAAM,IAAI,SAAS,CAAC;AAC3B,eAAO,MAAM,eAAe,wDAAwD,CAAC;AACrF,eAAO,MAAM,UAAU,uCAAuC,CAAC;AAC/D,eAAO,MAAM,OAAO,YAAY,CAAC;AAGjC,eAAO,MAAM,IAAI,SAAS,CAAC;AAC3B,eAAO,MAAM,SAAS,2CAA2C,CAAC;AAClE,eAAO,MAAM,GAAG,QAAQ,CAAC;AACzB,eAAO,MAAM,QAAQ,gDAAgD,CAAC;AAGtE,eAAO,MAAM,KAAK,UAAU,CAAC;AAC7B,eAAO,MAAM,UAAU,2CAA2C,CAAC;AACnE,eAAO,MAAM,QAAQ,aAAa,CAAC;AACnC,eAAO,MAAM,aAAa,sEAAsE,CAAC;AAGjG,eAAO,MAAM,IAAI,SAAS,CAAC;AAC3B,eAAO,MAAM,SAAS,gEAAgE,CAAC;AACvF,eAAO,MAAM,IAAI,SAAS,CAAC;AAC3B,eAAO,MAAM,cAAc,6FAA6F,CAAC;AACzH,eAAO,MAAM,KAAK,UAAU,CAAC;AAC7B,eAAO,MAAM,UAAU,6DAA6D,CAAC;AACrF,eAAO,MAAM,IAAI,SAAS,CAAC;AAC3B,eAAO,MAAM,SAAS,wBAAwB,CAAC;AAC/C,eAAO,MAAM,eAAe,qGAAqG,CAAC;AAGlI,eAAO,MAAM,KAAK,UAAU,CAAC;AAC7B,eAAO,MAAM,UAAU,6CAA6C,CAAC;AACrE,eAAO,MAAM,MAAM,WAAW,CAAC;AAC/B,eAAO,MAAM,WAAW,2BAA2B,CAAC;AACpD,eAAO,MAAM,QAAQ,aAAa,CAAC;AACnC,eAAO,MAAM,aAAa,iFAAiF,CAAC;AAC5G,eAAO,MAAM,MAAM,WAAW,CAAC;AAC/B,eAAO,MAAM,WAAW,4DAA4D,CAAC;AAGrF,eAAO,MAAM,KAAK,UAAU,CAAC;AAC7B,eAAO,MAAM,UAAU,2DAA2D,CAAC;AAGnF,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAC3C,eAAO,MAAM,YAAY,iCAA+B,CAAC;AAGzD,eAAO,MAAM,KAAK,UAAU,CAAC;AAC7B,eAAO,MAAM,UAAU,0BAA0B,CAAC;AAGlD,eAAO,MAAM,IAAI,SAAS,CAAC;AAC3B,eAAO,MAAM,SAAS,oCAAoC,CAAC;AAC3D,eAAO,MAAM,YAAY,wCAAwC,CAAC;AAGlE,eAAO,MAAM,IAAI,SAAS,CAAC;AAC3B,eAAO,MAAM,SAAS,4EAA4E,CAAC;AACnG,eAAO,MAAM,UAAU,eAAe,CAAC;AACvC,eAAO,MAAM,eAAe,6EAA6E,CAAC;AAG1G,eAAO,MAAM,QAAQ,aAAa,CAAC;AACnC,eAAO,MAAM,aAAa,kEAAkE,CAAC;AAC7F,eAAO,MAAM,OAAO,YAAY,CAAC;AACjC,eAAO,MAAM,YAAY,wEAAwE,CAAC;AAGlG,eAAO,MAAM,gBAAgB,2DAA2D,CAAC;AACzF,eAAO,MAAM,UAAU,SAAS,CAAC;AACjC,eAAO,MAAM,eAAe,+DAA+D,CAAC;AAG5F,eAAO,MAAM,SAAS,aAAa,CAAC;AACpC,eAAO,MAAM,cAAc,kDAAkD,CAAC;AAC9E,eAAO,MAAM,UAAU,cAAc,CAAC;AACtC,eAAO,MAAM,eAAe,iDAAiD,CAAC;AAC9E,eAAO,MAAM,IAAI,SAAS,CAAC;AAC3B,eAAO,MAAM,SAAS,cAAc,CAAC;AACrC,eAAO,MAAM,UAAU,eAAe,CAAC;AACvC,eAAO,MAAM,eAAe,0EAA0E,CAAC;AAGvG,eAAO,MAAM,GAAG,QAAQ,CAAC;AACzB,eAAO,MAAM,QAAQ,mDAAmD,CAAC;AAGzE,eAAO,MAAM,GAAG,QAAQ,CAAC;AACzB,eAAO,MAAM,QAAQ,6CAA6C,CAAC;AAGnE,eAAO,MAAM,OAAO,WAAW,CAAC;AAChC,eAAO,MAAM,YAAY,mDAAmD,CAAC;AAC7E,eAAO,MAAM,OAAO,YAAY,CAAC;AACjC,eAAO,MAAM,YAAY,6DAA6D,CAAC;AAGvF,eAAO,MAAM,QAAQ,aAAa,CAAC;AACnC,eAAO,MAAM,aAAa,iEAAiE,CAAC;AAC5F,eAAO,MAAM,OAAO,YAAY,CAAC;AACjC,eAAO,MAAM,gBAAgB,kCAAkC,CAAC;AAGhE,eAAO,MAAM,IAAI,SAAS,CAAC;AAC3B,eAAO,MAAM,SAAS,6CAA6C,CAAC;AAGpE,eAAO,MAAM,KAAK,8BAA8B,CAAC;AACjD,eAAO,MAAM,QAAQ,0DAA0D,CAAC;AAGhF,eAAO,MAAM,SAAS,0DAA0D,CAAC;AACjF,eAAO,MAAM,WAAW,oDAAoD,CAAC;AAC7E,eAAO,MAAM,QAAQ,0DAA0D,CAAC;AAChF,eAAO,MAAM,iBAAiB,6CAA6C,CAAC;AAC5E,eAAO,MAAM,YAAY,8DAA8D,CAAC;AACxF,eAAO,MAAM,gBAAgB,+EAA+E,CAAC;AAC7G,eAAO,MAAM,aAAa,mEAAmE,CAAC;AAC9F,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAClD,eAAO,MAAM,mBAAmB,yCAAyC,CAAC;AAC1E,eAAO,MAAM,gBAAgB,kCAAkC,CAAC;AAGhE,eAAO,MAAM,SAAS,4CAA4C,CAAC;AAGnE,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,eAAO,MAAM,SAAS,QAAsB,CAAC;AAC7C,eAAO,MAAM,QAAQ,QAAqB,CAAC;AAC3C,eAAO,MAAM,SAAS,QAAsB,CAAC;AAE7C,wBAAgB,gBAAgB,CAAC,WAAW,SAAK,GAAG,MAAM,CAEzD;AAED,wBAAgB,mBAAmB,CAAC,WAAW,SAAK,GAAG,MAAM,CAE5D;AAED,eAAO,MAAM,gBAAgB,qCAAqC,CAAC;AACnE,eAAO,MAAM,yBAAyB,mEAAmE,CAAC;AAC1G,eAAO,MAAM,WAAW,4DAA4D,CAAC;AAGrF,eAAO,MAAM,SAAS,QAA6E,CAAC;AACpG,eAAO,MAAM,WAAW,+BAA+B,CAAC;AACxD,eAAO,MAAM,WAAW,sBAAsB,CAAC;AAC/C,eAAO,MAAM,YAAY,mBAAmB,CAAC;AAG7C,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE/F;AAGD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEnG;AACD,eAAO,MAAM,YAAY,iDAAiD,CAAC;AAC3E,eAAO,MAAM,UAAU,yBAAyB,CAAC;AAMjD,eAAO,MAAM,YAAY,2BAA2B,CAAC;AAErD,wBAAgB,UAAU,CAAC,UAAU,EAAE,OAAO,GAAG,MAAM,CAEtD;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAExD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAEvD;AAED,eAAO,MAAM,cAAc,MAAM,CAAC;AAClC,eAAO,MAAM,oBAAoB,cAAc,CAAC;AAEhD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,MAAM,CAGrE;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,MAAM,CAGrE;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAIlG;AAED,eAAO,MAAM,KAAK,UAAU,CAAC;AAG7B,eAAO,MAAM,SAAS,4CAA4C,CAAC;AACnE,eAAO,MAAM,OAAO,gDAAgD,CAAC;AACrE,eAAO,MAAM,QAAQ,sEAAsE,CAAC;AAC5F,eAAO,MAAM,YAAY,8CAA8C,CAAC;AACxE,eAAO,MAAM,YAAY,oCAAoC,CAAC"}