commit b923be2d6926991495f27fabe96362d65bededfd Author: Jonny_Bro (Nikita) Date: Mon Jun 19 12:35:11 2023 +0500 first commit diff --git a/.d.ts b/.d.ts new file mode 100644 index 0000000..520fc14 --- /dev/null +++ b/.d.ts @@ -0,0 +1,399 @@ +declare module "discord-dashboard" { + const licenseInfo: () => string | boolean + const useLicense: (licenseId: string) => Promise + const UpdatedClass: () => Dashboard + + let Dashboard: any + + const initDashboard: (options: { + fileName: string + domain: string + port: number + token: string + clientSecret: string + clientId: string + }) => any + + const formTypes: formTypes + const customPagesTypes: customPagesTypes + const DISCORD_FLAGS: { + Permissions: Permissions + } + + const version: string +} + +interface Permissions { + CREATE_INSTANT_INVITE: ["CREATE_INSTANT_INVITE", 0x1] + KICK_MEMBERS: ["KICK_MEMBERS", 0x2] + BAN_MEMBERS: ["BAN_MEMBERS", 0x4] + ADMINISTRATOR: ["ADMINISTRATOR", 0x8] + MANAGE_CHANNELS: ["MANAGE_CHANNELS", 0x10] + MANAGE_GUILD: ["MANAGE_GUILD", 0x20] + ADD_REACTIONS: ["ADD_REACTIONS", 0x40] + VIEW_AUDIT_LOG: ["VIEW_AUDIT_LOG", 0x80] + PRIORITY_SPEAKER: ["PRIORITY_SPEAKER", 0x100] + STREAM: ["STREAM", 0x200] + VIEW_CHANNEL: ["VIEW_CHANNEL", 0x400] + SEND_MESSAGES: ["SEND_MESSAGES", 0x800] + SEND_TTS_MESSAGES: ["SEND_TTS_MESSAGES", 0x1000] + MANAGE_MESSAGES: ["MANAGE_MESSAGES", 0x2000] + EMBED_LINKS: ["EMBED_LINKS", 0x4000] + ATTACH_FILES: ["ATTACH_FILES", 0x8000] + READ_MESSAGE_HISTORY: ["READ_MESSAGE_HISTORY", 0x10000] + MENTION_EVERYONE: ["MENTION_EVERYONE", 0x20000] + USE_EXTERNAL_EMOJIS: ["USE_EXTERNAL_EMOJIS", 0x40000] + VIEW_GUILD_INSIGHTS: ["VIEW_GUILD_INSIGHTS", 0x80000] + CONNECT: ["CONNECT", 0x100000] + SPEAK: ["SPEAK", 0x200000] + MUTE_MEMBERS: ["MUTE_MEMBERS", 0x400000] + DEAFEN_MEMBERS: ["DEAFEN_MEMBERS", 0x800000] + MOVE_MEMBERS: ["MOVE_MEMBERS", 0x1000000] + USE_VAD: ["USE_VAD", 0x2000000] + CHANGE_NICKNAME: ["CHANGE_NICKNAME", 0x4000000] + MANAGE_NICKNAMES: ["MANAGE_NICKNAMES", 0x8000000] + MANAGE_ROLES: ["MANAGE_ROLES", 0x10000000] + MANAGE_WEBHOOKS: ["MANAGE_WEBHOOKS", 0x20000000] + MANAGE_EMOJIS_AND_STICKERS: ["MANAGE_EMOJIS_AND_STICKERS", 0x40000000] + USE_APPLICATION_COMMANDS: ["USE_APPLICATION_COMMANDS", 0x80000000] + REQUEST_TO_SPEAK: ["REQUEST_TO_SPEAK", 0x100000000] + MANAGE_EVENTS: ["MANAGE_EVENTS", 0x200000000] + MANAGE_THREADS: ["MANAGE_THREADS", 0x400000000] + CREATE_PUBLIC_THREADS: ["CREATE_PUBLIC_THREADS", 0x800000000] + CREATE_PRIVATE_THREADS: ["CREATE_PRIVATE_THREADS", 0x1000000000] + USE_EXTERNAL_STICKERS: ["USE_EXTERNAL_STICKERS", 0x2000000000] + SEND_MESSAGES_IN_THREADS: ["SEND_MESSAGES_IN_THREADS", 0x4000000000] + START_EMBEDDED_ACTIVITIES: ["START_EMBEDDED_ACTIVITIES", 0x8000000000] + MODERATE_MEMBERS: ["MODERATE_MEMBERS", 0x10000000000] +} + +interface RateLimitSettingsObject { + windowMs: Number + max: Number + message: String + store?: any +} + +interface Dashboard { + new (config: { + port: number + client: { + id: string + secret: string + } + redirectUri: string + domain: string + bot: any + theme: any + settings: category[] + requiredPermissions?: object, + ownerIDs: array, + useTheme404: boolean, + useThemeMaintenance: boolean, + acceptPrivacyPolicy?: boolean + noCreateServer?: boolean + SSL?: { + enabled: boolean + key: string + cert: string + } + minimizedConsoleLogs?: boolean + rateLimits?: { + manage?: RateLimitSettingsObject + guildPage?: RateLimitSettingsObject + settingsUpdatePostAPI?: RateLimitSettingsObject + discordOAuth2?: RateLimitSettingsObject + } + invite?: { + clientId: string + scopes: object + permissions: string + redirectUri: string + otherParams: string + } + supportServer?: { + slash: string + inviteUrl: string + } + guildAfterAuthorization?: { + use: boolean + guildId: string + options?: { + nickname?: string + roles?: [string] + mute?: boolean + deaf?: boolean + } + } + reportError?: (where: string, what: any) => any + assistantsSecureStorageKey?: string + }): any + DBDEvents: () => any + init: () => Promise + getApp: () => any + useThirdPartyModule: (module: any) => any +} + +interface category { + categoryId: string + categoryName: string + categoryDescription: string + categoryOptionsList: option[] +} + +interface option { + optionId?: string + optionName?: string + optionDescription?: string + title?: string + description?: string + optionType: + | { + type: string + data?: string | null + function?: any + min?: number | null + max?: number | null + disabled?: boolean | null + required?: boolean | null + themeOptions?: object | null + } + | string + getActualSet?: (options: optionOptions) => Promise + setNew?: (options: optionOptions) => Promise + allowedCheck?: (options: allowedCheckOption) => Promise + themeOptions?: Object +} + +interface optionOptions { + guild: { id: string } + user: { id: string } + newData: any +} + +interface allowedCheckOption { + guild: { id: string } + user: { id: string } +} + +interface formTypes { + select: ( + list: object, + disabled?: boolean, + themeOptions?: object + ) => { + type: string + data: { + keys: object + values: object + } + disabled: boolean + themeOptions: object + } + + multiSelect: ( + list: object, + disabled?: boolean, + required?: boolean, + themeOptions?: object + ) => { + type: string + data: { + keys: object + values: object + } + disabled: boolean | null + required: boolean | null + themeOptions: object + } + + input: ( + placeholder?: string, + min?: number, + max?: number, + disabled?: boolean, + required?: boolean, + themeOptions?: object + ) => { + type: string + data: string | null + min: number | null + max: number | null + disabled: boolean | null + required: boolean | null + themeOptions: object | null + } + + textarea: ( + placeholder?: string, + min?: number, + max?: number, + disabled?: boolean, + required?: boolean, + themeOptions?: object + ) => { + type: string + data: string | null + min: number | null + max: number | null + disabled: boolean | null + required: boolean | null + themeOptions: object | null + } + + switch: ( + disabled?: boolean, + themeOptions?: object + ) => { + type: string + disabled: boolean + themeOptions: object + } + + checkbox: ( + disabled?: boolean, + themeOptions?: object + ) => { + type: string + disabled: boolean + themeOptions: object + } + + channelsSelect: ( + disabled?: boolean, + channelTypes?: string[], + hideNSFW?: boolean, + onlyNSFW?: boolean, + hideNoAccess?: boolean, + themeOptions?: object + ) => { + type: string + function: (client: string, guildid: string) => any + disabled: boolean + themeOptions: object + } + + channelsMultiSelect: ( + disabled?: boolean, + required?: boolean, + channelTypes?: string[], + hideNSFW?: boolean, + onlyNSFW?: boolean, + hideNoAccess?: boolean, + themeOptions?: object + ) => { + type: string + function: (client: string, guildid: string) => any + disabled: boolean + required: boolean + themeOptions: object + } + + rolesSelect: ( + includeBots: boolean, + disabled?: boolean, + hideHigherRoles?: boolean, + themeOptions?: object + ) => { + type: string + function: (client: string, guildid: string) => any + disabled: boolean + themeOptions: object + } + + rolesMultiSelect: ( + includeBots: boolean, + disabled?: boolean, + required?: boolean, + hideHigherRoles?: boolean, + themeOptions?: object + ) => { + type: string + function: (client: string, guildid: string) => any + disabled: boolean + required: boolean + themeOptions: object + } + + colorSelect: ( + defaultState: string, + disabled?: boolean, + themeOptions?: object + ) => { + type: string + data: string + disabled: boolean + themeOptions: object + } + + embedBuilder: ( + defaultSettings: object, + themeOptions?: object + ) => { + type: string + data: object + themeOptions: object + } +} + +interface EmbedBuilder { + content?: string + embed: { + title?: string + description: string + color?: string | number + timestamp?: any + url?: string + author?: { + name?: string + url?: string + icon_url?: string + } + thumbnail?: { + url?: string + } + image?: { + url?: string + } + footer?: { + text?: string + icon_url?: string + } + fields?: EmbedBuilderField[] + } +} + +interface EmbedBuilderField { + name?: string + value?: string + inline?: boolean +} + +interface customPagesTypes { + redirectToUrl: ( + endpoint: string, + getDataFunction: any + ) => { + type: string + endpoint: string + getEndpoint: any + } + + renderHtml: ( + endpoint: string, + getDataFunction: any + ) => { + type: string + endpoint: string + getHtml: any + } + + sendJson: ( + endpoint: string, + getDataFunction: any + ) => { + type: string + endpoint: string + getJson: any + } +} diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..04543cb --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: # +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: ['https://paypal.me/breftejk', 'https://www.buymeacoffee.com/breftejk'] \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..dd84ea7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,38 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + - OS: [e.g. iOS] + - Browser [e.g. chrome, safari] + - Version [e.g. 22] + +**Smartphone (please complete the following information):** + - Device: [e.g. iPhone6] + - OS: [e.g. iOS8.1] + - Browser [e.g. stock browser, safari] + - Version [e.g. 22] + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..bbcbbe7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..88d625a --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +./node_modules/ +node_modules/ +test/ +/test +./test/ +./test/ +./.idea +discord-dashboard-pp +./discord-dashboard-pp +.idea +.devChannel +./.devChannel +./ExternalStatistics/index_unobfuscated.js +ExternalStatistics/index_unobfuscated.js +./dev_project.json +dev_project.json +altometra-dashboard +./altometra-dashboard +index_unobf.js +./index_unobf.js +/altometra-dashoard +altometra-dashboard/ +./altometra-dashboard/ +/altometra-dashoard/ +./licensedDashboardClass_unobfuscated.js +./npmPublish.js +licensedDashboardClass_unobfuscated.js +npmPublish.js +updateObfuscatedIndex.js +./updateObfuscatedIndex.js +.idea +.idea +yarn-error.log \ No newline at end of file diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 0000000..b0a616d --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,6 @@ +module.exports = { + trailingComma: "es5", + tabWidth: 4, + semi: false, + singleQuote: false, +} diff --git a/404pagedefault.js b/404pagedefault.js new file mode 100644 index 0000000..47b567b --- /dev/null +++ b/404pagedefault.js @@ -0,0 +1,32 @@ +module.exports = (websiteTitle) => ` + + + + + + ${websiteTitle} - 404 Not Found + + + + + + + + +
+
+
+

404

+

Oops! Error 404 Page Not Found

+

Sorry but the page you are looking for does not exist, have been removed. name changed or is temporarily unavailable

+ Back to homepage +
+
+ + + + +` diff --git a/ExternalIntegration/index.js b/ExternalIntegration/index.js new file mode 100644 index 0000000..bb9e934 --- /dev/null +++ b/ExternalIntegration/index.js @@ -0,0 +1,43 @@ +class Client { + constructor({url,token}) { + this.url = url; + try { + //connect with socket using url specified + }catch(err){ + throw new TypeError('Discord-Dashboard External Integration failure: URL specified is wrong or token specified is wrong.'); + } + } + + socket: ()=>{ + //socket with 'settingUpdated', 'settingRequested' + } +} + +class Server { + constructor(config) { + this.app = ()=>{}; + this.server = ({io,server,config,themeConfig}) => { + const ExternalSocket = io.of('/externalIntegration'); + ExternalSocket.on('settingUpdated', (data) => { + console.log(`${data.action} got updated: ${JSON.stringify(data.)}`); + }); + return ExternalSocket; + }; + this.server.on('settingRequested', (data)=>{ + console.log(`${data.option} has been requested.`); + }); + }; + + UpdatedSettingEmit: (data)=>{ + this.server.emit('settingUpdated', data); + }; + + RequestDataEmit: (data)=>{ + this.server.emit('settingsRequested', data); + } +}; + +module.exports = { + Client, + Server, +}; diff --git a/ExternalStatistics/index.js b/ExternalStatistics/index.js new file mode 100644 index 0000000..3128ba2 --- /dev/null +++ b/ExternalStatistics/index.js @@ -0,0 +1 @@ +const _0x1c811c=_0x109d;(function(_0x359c7e,_0x1eeab5){const _0x3573de=_0x109d,_0x418c34=_0x359c7e();while(!![]){try{const _0x23d247=parseInt(_0x3573de(0x1a3))/0x1*(-parseInt(_0x3573de(0x1b5))/0x2)+-parseInt(_0x3573de(0x1ac))/0x3+-parseInt(_0x3573de(0x1ab))/0x4+parseInt(_0x3573de(0x19e))/0x5+parseInt(_0x3573de(0x1b1))/0x6+parseInt(_0x3573de(0x1b3))/0x7+parseInt(_0x3573de(0x1aa))/0x8*(parseInt(_0x3573de(0x1b2))/0x9);if(_0x23d247===_0x1eeab5)break;else _0x418c34['push'](_0x418c34['shift']());}catch(_0x306517){_0x418c34['push'](_0x418c34['shift']());}}}(_0x3a2b,0xc3499));const fetch=require(_0x1c811c(0x1a6)),fs=require('fs'),DiscordDashboardPP=require(_0x1c811c(0x1af)),PPManager=new DiscordDashboardPP[(_0x1c811c(0x1a7))]({},{}),projectData=PPManager[_0x1c811c(0x1a1)]();function send(_0x5c317f,_0x2addc9){const _0x197388=_0x1c811c;try{fetch(_0x197388(0x1a2)+_0x5c317f,{'method':_0x197388(0x19f),'body':JSON[_0x197388(0x1a0)](_0x2addc9),'headers':{'Content-Type':'application/json'}})[_0x197388(0x1a8)](_0xf760df=>_0xf760df[_0x197388(0x1ad)]())[_0x197388(0x1a8)](_0x8029fe=>{})[_0x197388(0x1a4)](_0x53b4d3=>{});}catch(_0xaf8d52){}}function _0x109d(_0x584b3e,_0x1a74e2){const _0x3a2ba3=_0x3a2b();return _0x109d=function(_0x109dec,_0x14b473){_0x109dec=_0x109dec-0x19e;let _0x1dbfe7=_0x3a2ba3[_0x109dec];return _0x1dbfe7;},_0x109d(_0x584b3e,_0x1a74e2);}function _0x3a2b(){const _0x4a7b36=['PPManager','then','version','16qhVXeG','5948904oyFyVY','2301012dxNLDh','json','discord-dashboard','discord-dashboard-pp-system','exports','4292130gVGkAh','11997243GuMAAk','3220581tZFnbk','/registerProject','18tgqDOF','2422395VtzisY','POST','stringify','GetProjectData','https://dbd-external-stats.assistantscenter.com','141316gijWNs','catch','name','node-fetch'];_0x3a2b=function(){return _0x4a7b36;};return _0x3a2b();}module[_0x1c811c(0x1b0)]={'registerProject':(_0x57a975,_0x254002=projectData['id'],_0x37e8dd=projectData[_0x1c811c(0x1a5)],_0x263f96=require(_0x1c811c(0x1ae))[_0x1c811c(0x1a9)])=>{const _0x3aec38=_0x1c811c;send(_0x3aec38(0x1b4),{'cId':_0x57a975,'pId':_0x254002,'pN':_0x37e8dd,'v':_0x263f96});},'registerUser':(_0x4ae6ba,_0x4fbfb4=projectData['id'])=>{send('/registerUser',{'uId':_0x4ae6ba,'pId':_0x4fbfb4});},'pD':projectData}; \ No newline at end of file diff --git a/HandlerIntegration/index.js b/HandlerIntegration/index.js new file mode 100644 index 0000000..ffcbdbb --- /dev/null +++ b/HandlerIntegration/index.js @@ -0,0 +1,36 @@ +const prefix = "[DBD-Storage-Handler]" +const colors = require("colors") +const Keyv = require("keyv") +const { join } = require("path") + +const err = (text) => { + return `🐧${text} Do you need help? Join our Discord server: ${"https://discord.gg/CzfMGtrdaA".blue + }` +} + +class Handler { + constructor(keyvAdapter) { + this.db = new Keyv( + keyvAdapter || `sqlite://${join(__dirname, "/database.sqlite")}` + ) + + this.db.on("error", (err) => + console.error(`${prefix} ${`Keyv connection error: ${err}`.red}`) + ) + + this.Category = require(`${__dirname}/structures/Category`)(this.db) + this.Option = require(`${__dirname}/structures/Option`)(this.db) + + console.log(`${prefix} Database successfully initialized!`) + } + + async fetch(guildId, optionId) { + return await this.db.get(`${guildId}.options.${optionId}`) + } + + db() { + return this.db + } +} + +module.exports = Handler diff --git a/HandlerIntegration/structures/Category.js b/HandlerIntegration/structures/Category.js new file mode 100644 index 0000000..3f6c279 --- /dev/null +++ b/HandlerIntegration/structures/Category.js @@ -0,0 +1,104 @@ +module.exports = (db) => { + return class Category { + constructor( + options = { categoryId: "", categoryName: "", categoryDescription: "" } + ) { + this.categoryId = options.categoryId + this.categoryName = options.categoryName + this.categoryDescription = options.categoryDescription + this.categoryOptionsList = [] + + // const db = Handler.getDB() + this.db = db + } + + /** + * + * @param {string} id - The id of the category, must be unique + * @returns + */ + setId(id) { + this.categoryId = id + + return this + } + + /** + * + * @param {string} name - The name of the category displayed in the dashboard + * @returns + */ + setName(name) { + this.categoryName = name + + return this + } + + /** + * + * @param {string} description - The description of the category displayed in the dashboard + * @returns + */ + setDescription(description) { + this.categoryDescription = description + + return this + } + + /** + * + * @param {string} image - Set the image for a Soft UI category, must be a link + * @returns + */ + setImage(image) { + this.categoryImageURL = image + + return this + } + + /** + * + * @param {boolean} toggleable - Allows Soft UI category to be toggleable + * @returns + */ + setToggleable(toggleable) { + this.toggleable = toggleable + + this.getActualSet = async ({ guild }) => { + return await this.db.get( + `${guild.id}.categories.${this.categoryId}.toggle` + ) + } + + this.setNew = async ({ guild, newData }) => { + await this.db.set( + `${guild.id}.categories.${this.categoryId}.toggle`, + newData + ) + } + + return this + } + + /** + * @param {import('./Option')[]} options - The options of the category + * @example + * new Category() + * .setId('setup') + * .setName("Setup") + * .setDescription("Setup your bot with default settings!") + * .addOptions( + * new Option() + * .setId('lang') + * .setName("Language") + * .setDescription("Change bot's language easily") + * .setType(dbd.formTypes.select({"Polish": 'pl', "English": 'en', "French": 'fr'})) + * ) + */ + addOptions() { + this.categoryOptionsList.push(...arguments) + + return this + } + } +} diff --git a/HandlerIntegration/structures/Option.js b/HandlerIntegration/structures/Option.js new file mode 100644 index 0000000..31ff970 --- /dev/null +++ b/HandlerIntegration/structures/Option.js @@ -0,0 +1,95 @@ +const { formTypes } = require("discord-dashboard") + +const ids = [] + +const err = (text) => { + return `🐧${text} Do you need help? Join our Discord server: ${ + "https://discord.gg/CzfMGtrdaA".blue + }` +} + +module.exports = (db) => { + return class Option { + constructor( + options = { + optionId: "", + optionName: "", + optionDescription: "", + optionType: formTypes, + } + ) { + // + this.optionId = options.optionId + this.optionName = options.optionName + this.optionDescription = options.optionDescription + this.optionType = options.optionType + + this.categoryId = "default" + + this.setNew = async ({ guild, newData }) => { + await db.set(`${guild.id}.options.${this.optionId}`, newData) + } + + this.getActualSet = async ({ guild }) => { + return await db.get(`${guild.id}.options.${this.optionId}`) + } + } + + /** + * + * @param {string} id - The id of the option, must be unique + * @returns + */ + setId(id) { + this.optionId = id + + if (ids.includes(id)) + throw new Error(err(`Option id ${id} already exists`)) + else ids.push(this.optionId) + + return this + } + + /** + * + * @param {string} name - The name of the option displayed in the dashboard + * @returns + */ + setName(name) { + this.optionName = name + + return this + } + + /** + * + * @param {string} description - The description of the option displayed in the dashboard + * @returns + */ + setDescription(description) { + this.optionDescription = description + + return this + } + + /** + * + * @param {object} options - Set custom options for the formType + * @returns + */ + setOptions(options) { + this.themeOptions = options + } + + /** + * + * @param {formTypes} type - The type of the option + * @returns + */ + setType(type) { + this.optionType = type + + return this + } + } +} diff --git a/InitFunctions/initExampleDash.js b/InitFunctions/initExampleDash.js new file mode 100644 index 0000000..a4899b8 --- /dev/null +++ b/InitFunctions/initExampleDash.js @@ -0,0 +1,133 @@ +module.exports = ({ + fileName, + domain, + port, + token, + licenseId, + clientSecret, + clientId, +}) => { + require("fs").writeFileSync( + `${fileName}.js`, + ` + +/* --- DISCORD.JS CLIENT --- */ + +const {Client, Intents} = require('discord.js'); +const client = new Client({ intents: [Intents.FLAGS.GUILDS] }); +client.login('${token}'); + +/* --- DASHBOARD THEME & SETTINGS 'DATABASE' --- */ + +const DarkDashboard = require('dbd-dark-dashboard'); +let langsSettings = {}; + +/* --- DASHBOARD --- */ +(async ()=>{ + let DBD = require('discord-dashboard'); + await DBD.useLicense('${licenseId}'); + DBD.Dashboard = DBD.UpdatedClass(); + + const Dashboard = new DBD.Dashboard({ + port: ${port || 80}, + client: { + id: '${clientId}', + secret: '${clientSecret}' + }, + redirectUri: '${domain}/discord/callback', + domain: '${domain}', + bot: client, + theme: DarkDashboard({ + information: { + createdBy: "Assistants Center", + websiteTitle: "Assistants Center", + websiteName: "Discord-Dashboard", + websiteUrl: "${domain}", + dashboardUrl: "${domain}", + supporteMail: "support@${domain}", + supportServer: "", + imageFavicon: "https://www.imidnight.ml/assets/img/logo-circular.png", + iconURL: "https://www.imidnight.ml/assets/img/logo-circular.png", + pageBackGround: "linear-gradient(#2CA8FF, #155b8d)", + loggedIn: "Successfully signed in.", + mainColor: "#2CA8FF", + subColor: "#ebdbdb", + }, + index: { + card: { + category: "Assistants Center - The center of everything", + title: "Welcome to the iMidnight discord where you can control the core features to the bot.", + image: "https://i.imgur.com/axnP93g.png", + footer: "Footer", + }, + + information: { + category: "Category", + title: "Information", + description: "This bot and panel is currently a work in progress so contact me if you find any issues on discord.", + footer: "Footer", + }, + + feeds: { + category: "Category", + title: "Information", + description: "This bot and panel is currently a work in progress so contact me if you find any issues on discord.", + footer: "Footer", + }, + }, + commands: [ + { + category: "Starting Up", + subTitle: "All helpful commands", + list: [{ + commandName: 'bug', + commandUsage: ";bug ", + commandDescription: "test", + commandAlias: 'No aliases' + }, + { + commandName: "2nd command", + commandUsage: "oto.nd [op]", + commandDescription: "Lorem ipsum dolor sth, arg sth arg2 stuff", + commandAlias: "Alias", + }, + { + commandName: "Test command", + commandUsage: "prefix.test [op]", + commandDescription: "Lorem ipsum dolor sth", + commandAlias: "Alias", + }, + ], + }, + ], + }), + settings: [ + { + categoryId: 'setup', + categoryName: "Setup", + categoryDescription: "Setup your bot with default settings!", + categoryOptionsList: [ + { + optionId: 'lang', + optionName: "Language", + optionDescription: "Change bot's language easily", + optionType: DBD.formTypes.select({"Polish": 'pl', "English": 'en', "French": 'fr'}), + getActualSet: async ({guild}) => { + return langsSettings[guild.id] || null; + }, + setNew: async ({guild,newData}) => { + langsSettings[guild.id] = newData; + return; + } + }, + ] + }, + ] + }); + + Dashboard.init(); +})(); + + ` + ) +} diff --git a/InitFunctions/initPpCheck.js b/InitFunctions/initPpCheck.js new file mode 100644 index 0000000..a909855 --- /dev/null +++ b/InitFunctions/initPpCheck.js @@ -0,0 +1,105 @@ +const DBDStats = require("../ExternalStatistics") +const fs = require("fs") +const { v4: uuidv4 } = require("uuid") +const readline = require("readline-sync") + +const DiscordDashboardPP = require("discord-dashboard-pp-system") + +module.exports = ( + config, + themeConfig, + DBDStats, + secretInit, + modules, + aaThis, + license +) => { + let externalStatsDisabled = false + if (config.disableExternalStatistics) { + if (license.type == "production" || license.type == "personal") { + externalStatsDisabled = true + } else { + console.log( + `${"[Discord-dashboard v".red}${ + `${require("../package.json").version}]:`.red + }: You can't disable External Stats without Personal/Production License.` + ) + } + } + const PPManager = new DiscordDashboardPP.PPManager(config, themeConfig) + PPManager.SaveProjectData() + if (!externalStatsDisabled) DBDStats.registerProject(config.client.id) + if (config.acceptPrivacyPolicy) return aaThis.secretInit(aaThis.modules) + const ppAccepted = PPManager.PP_GetAccepted() + if (ppAccepted == "accepted") return aaThis.secretInit(aaThis.modules) + let oThis = { secretInit, modules } + const readline = require("readline-sync") + + setTimeout(function () { + console.log( + `${"[Discord-dashboard v".blue}${ + `${require("../package.json").version}]:`.blue + } Hello! First of all, we would like to thank you for your trust and choosing the ${ + "discord-dashboard".rainbow + }.` + ) + }, 2000) + setTimeout(function () { + console.log( + `${"[Discord-dashboard v".blue}${ + `${require("../package.json").version}]:`.blue + } However, we must familiarize you with our privacy policy and describe to you how we collect your data.` + ) + }, 4000) + setTimeout(function () { + console.log(` +${ + "[Discord-dashboard v".blue +}${`${require("../package.json").version}]:`.blue} To maintain the quality of our services at the highest level, we collect from you: +${ + "[Discord-dashboard v".blue +}${`${require("../package.json").version}]:`.blue} - The ID of your Discord-Client, +${ + "[Discord-dashboard v".blue +}${`${require("../package.json").version}]:`.blue} - The number of users who log in to your panel (we also collect their IDs, but only to distinguish them from other, same login sessions), +${ + "[Discord-dashboard v".blue +}${`${require("../package.json").version}]:`.blue} - The types of settings you use that go beyond the basic ones. It does not include settings such as sensitive settings, e.g. your bot data. +${ + "[Discord-dashboard v".blue +}${`${require("../package.json").version}]:`.blue} We must add that your data is available only to the Project Administrator - breathtake. Nobody else can see it. Your data is not transferred anywhere either. + +${ + "[Discord-dashboard v".red +}${`${require("../package.json").version}]:`.red} If you can't type in the console, pass 'acceptPrivacyPolicy: true,' to the discord-dashboard config.`) + let iCount = 0 + + function ask() { + if (iCount > 0) + console.log( + `${"[Discord-dashboard v".red}${ + `${require("../package.json").version}]:`.red + }: You must accept our privacy policy to be able to use the module. Otherwise, you must delete the module.` + ) + iCount++ + const rlResponse = readline.question( + `${"[Discord-dashboard v".blue}${ + `${require("../package.json").version}]:`.blue + } Do you accept it? (y/n) ` + ) + + if (rlResponse == "y" || rlResponse == "yes") { + console.log( + `${"[Discord-dashboard v".green}${ + `${require("../package.json").version}]:`.green + } Thank you. Now we will run the module for you. You will not need to re-approve our privacy policy again.` + ) + PPManager.PP_Accept() + setTimeout(function () { + aaThis.secretInit(aaThis.modules) + }, 1000) + } else ask() + } + ask() + }, 6000) +} diff --git a/InitFunctions/initServer.js b/InitFunctions/initServer.js new file mode 100644 index 0000000..0ccf02c --- /dev/null +++ b/InitFunctions/initServer.js @@ -0,0 +1,109 @@ +const https = require("https") +const http = require("http") +const { Server: SocketServer } = require("socket.io") + +const err = (text) => { + return ( + text + + ` Do you need help? Join our Discord server: ${ + "https://discord.gg/CzfMGtrdaA".blue + }` + ) +} + +module.exports = (app, config, themeConfig, modules) => { + if (config.noCreateServer) return { io: null, server: null } + let server + + if (!config.SSL) config.SSL = {} + if (config.SSL.enabled) { + if (!config.SSL.key || !config.SSL.cert) + console.log( + err( + `${ + "discord-dashboard issue:".red + } The SSL preference for Dashboard is selected (config.SSL.enabled), but config does not include key or cert (config.SSL.key, config.SSL.cert).` + ) + ) + let options = { + key: config.SSL.key || "", + cert: config.SSL.cert || "", + } + try { + const https = require("https") + server = https.createServer(options, app) + } catch (e) { + console.log( + err( + `${ + "discord-dashboard issue:".red + } There's a problem while creating server, check if the port specified is already on use.` + ) + ) + } + } else { + const http = require("http") + server = http.createServer(app) + } + + let pport = "" + if (config.port != 80 && config.port != 443) { + pport = `:${config.port}` + } + + if (!config.minimizedConsoleLogs) { + console.log( + ` +β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— +β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•— +β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘ +β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘ +β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β• +β•šβ•β•β•β•β•β• β•šβ•β•β•β•β•β• β•šβ•β•β•β•β•β• +Discord Bot Dashboard +`.rainbow + + ` +Thanks for using ${ + "discord-dashboard".rainbow + } module! The server is up and running, so head over to the ${ + `${(config.domain || "domain.com") + pport}`.blue + } website and start your fun. + +Remember that there are ${ + "themes".rainbow + } available to make the Dashboard look better: ${ + "https://dbd-docs.assistantscenter.com/#/?id=themes".blue + } + +If you need help with something or you don't understand something, please visit our ${ + "Discord Support Server".rainbow + }: ${"https://discord.gg/CzfMGtrdaA".blue} +` + ) + } else { + console.log( + `DBD Dashboard running on ${ + `${(config.domain || "domain.com") + pport}`.blue + } !` + ) + } + + const SocketServer = require("socket.io").Server + const io = new SocketServer(server, { + cors: { + origin: "*", + }, + }) + + modules.forEach((module) => { + module.server({ + io: io, + server: server, + config: config, + themeConfig: themeConfig, + }) + }) + + server.listen(config.port) + return { server, io } +} diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..4fae8d5 --- /dev/null +++ b/LICENSE @@ -0,0 +1,437 @@ +Attribution-NonCommercial-ShareAlike 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More_considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International +Public License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-NonCommercial-ShareAlike 4.0 International Public License +("Public License"). To the extent this Public License may be +interpreted as a contract, You are granted the Licensed Rights in +consideration of Your acceptance of these terms and conditions, and the +Licensor grants You such rights in consideration of benefits the +Licensor receives from making the Licensed Material available under +these terms and conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. BY-NC-SA Compatible License means a license listed at + creativecommons.org/compatiblelicenses, approved by Creative + Commons as essentially the equivalent of this Public License. + + d. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + e. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + f. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + g. License Elements means the license attributes listed in the name + of a Creative Commons Public License. The License Elements of this + Public License are Attribution, NonCommercial, and ShareAlike. + + h. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + i. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + j. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + k. NonCommercial means not primarily intended for or directed towards + commercial advantage or monetary compensation. For purposes of + this Public License, the exchange of the Licensed Material for + other material subject to Copyright and Similar Rights by digital + file-sharing or similar means is NonCommercial provided there is + no payment of monetary compensation in connection with the + exchange. + + l. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + m. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + n. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part, for NonCommercial purposes only; and + + b. produce, reproduce, and Share Adapted Material for + NonCommercial purposes only. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. Additional offer from the Licensor -- Adapted Material. + Every recipient of Adapted Material from You + automatically receives an offer from the Licensor to + exercise the Licensed Rights in the Adapted Material + under the conditions of the Adapter's License You apply. + + c. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties, including when + the Licensed Material is used other than for NonCommercial + purposes. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + b. ShareAlike. + + In addition to the conditions in Section 3(a), if You Share + Adapted Material You produce, the following conditions also apply. + + 1. The Adapter's License You apply must be a Creative Commons + license with the same License Elements, this version or + later, or a BY-NC-SA Compatible License. + + 2. You must include the text of, or the URI or hyperlink to, the + Adapter's License You apply. You may satisfy this condition + in any reasonable manner based on the medium, means, and + context in which You Share Adapted Material. + + 3. You may not offer or impose any additional or different terms + or conditions on, or apply any Effective Technological + Measures to, Adapted Material that restrict exercise of the + rights granted under the Adapter's License You apply. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database for NonCommercial purposes + only; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material, + including for purposes of Section 3(b); and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the β€œLicensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. \ No newline at end of file diff --git a/LicenseSystem/index.js b/LicenseSystem/index.js new file mode 100644 index 0000000..7dea785 --- /dev/null +++ b/LicenseSystem/index.js @@ -0,0 +1,2 @@ +const _0x11e2b8=_0x4ef1;function _0x4ef1(_0x25c410,_0x358db5){const _0x29a8e6=_0x29a8();return _0x4ef1=function(_0x4ef111,_0x4067f7){_0x4ef111=_0x4ef111-0x14c;let _0x4796d9=_0x29a8e6[_0x4ef111];return _0x4796d9;},_0x4ef1(_0x25c410,_0x358db5);}function _0x29a8(){const _0x77775c=['2904430BCDYuv','9ceBTKm','731330jzyhAt','1137520MhgEHw','376cQveQv','POST','Discord-dashboard\x20License\x20ID\x20is\x20not\x20valid.','licenseId','ValidateLicense','node-fetch','https://licenses.assistantscenter.com/validate','176xSOpMV','466968xQLxio','6Uyrrnc','Discord-Dashboard\x20License\x20ID\x20is\x20not\x20defined!\x20Go\x20to\x20https://licenses.assistants.ga/\x20and\x20generate/buy\x20one\x20for\x20you.','35756yBzcPP','then','304918QtlMjH','exports','170581JeXJRS','6QtFvLt'];_0x29a8=function(){return _0x77775c;};return _0x29a8();}(function(_0x576ba9,_0x27eee6){const _0x45302b=_0x4ef1,_0x59594e=_0x576ba9();while(!![]){try{const _0x43186f=parseInt(_0x45302b(0x150))/0x1+parseInt(_0x45302b(0x14e))/0x2*(-parseInt(_0x45302b(0x15f))/0x3)+parseInt(_0x45302b(0x155))/0x4+parseInt(_0x45302b(0x154))/0x5*(parseInt(_0x45302b(0x151))/0x6)+parseInt(_0x45302b(0x14c))/0x7*(parseInt(_0x45302b(0x156))/0x8)+-parseInt(_0x45302b(0x153))/0x9*(-parseInt(_0x45302b(0x152))/0xa)+-parseInt(_0x45302b(0x15d))/0xb*(parseInt(_0x45302b(0x15e))/0xc);if(_0x43186f===_0x27eee6)break;else _0x59594e['push'](_0x59594e['shift']());}catch(_0x59c126){_0x59594e['push'](_0x59594e['shift']());}}}(_0x29a8,0x31dac));const fetch=require(_0x11e2b8(0x15b));class License{constructor(_0x1dec84){const _0x31f658=_0x11e2b8;if(!_0x1dec84)throw new TypeError(_0x31f658(0x160));this[_0x31f658(0x159)]=_0x1dec84;}async[_0x11e2b8(0x15a)](){const _0x115f1c=_0x11e2b8;let _0x469e87;return await fetch(_0x115f1c(0x15c),{'method':_0x115f1c(0x157),'headers':{'Content-Type':'application/json'},'body':JSON['stringify']({'licenseId':this[_0x115f1c(0x159)]})})[_0x115f1c(0x14d)](_0x264618=>_0x264618['json']())[_0x115f1c(0x14d)](_0x1adf24=>{const _0x2b7298=_0x115f1c;if(_0x1adf24['error'])throw new TypeError(_0x2b7298(0x158));_0x469e87=_0x1adf24;}),_0x469e87;}}module[_0x11e2b8(0x14f)]=License; +module.exports = License; \ No newline at end of file diff --git a/ModuleExportsFunctions/customPagesTypes.js b/ModuleExportsFunctions/customPagesTypes.js new file mode 100644 index 0000000..4aa47a2 --- /dev/null +++ b/ModuleExportsFunctions/customPagesTypes.js @@ -0,0 +1,23 @@ +module.exports = { + redirectToUrl: (endpoint, getDataFunction) => { + return { + type: "redirect", + endpoint: endpoint, + getEndpoint: getDataFunction, + } + }, + renderHtml: (endpoint, getDataFunction) => { + return { + type: "html", + endpoint: endpoint, + getHtml: getDataFunction, + } + }, + sendJson: (endpoint, getDataFunction) => { + return { + type: "json", + endpoint: endpoint, + getJson: getDataFunction, + } + }, +} diff --git a/ModuleExportsFunctions/discordPermissions.js b/ModuleExportsFunctions/discordPermissions.js new file mode 100644 index 0000000..ad2384a --- /dev/null +++ b/ModuleExportsFunctions/discordPermissions.js @@ -0,0 +1,43 @@ +module.exports = { + CREATE_INSTANT_INVITE: ["CREATE_INSTANT_INVITE", 0x1], + KICK_MEMBERS: ["KICK_MEMBERS", 0x2], + BAN_MEMBERS: ["BAN_MEMBERS", 0x4], + ADMINISTRATOR: ["ADMINISTRATOR", 0x8], + MANAGE_CHANNELS: ["MANAGE_CHANNELS", 0x10], + MANAGE_GUILD: ["MANAGE_GUILD", 0x20], + ADD_REACTIONS: ["ADD_REACTIONS", 0x40], + VIEW_AUDIT_LOG: ["VIEW_AUDIT_LOG", 0x80], + PRIORITY_SPEAKER: ["PRIORITY_SPEAKER", 0x100], + STREAM: ["STREAM", 0x200], + VIEW_CHANNEL: ["VIEW_CHANNEL", 0x400], + SEND_MESSAGES: ["SEND_MESSAGES", 0x800], + SEND_TTS_MESSAGES: ["SEND_TTS_MESSAGES", 0x1000], + MANAGE_MESSAGES: ["MANAGE_MESSAGES", 0x2000], + EMBED_LINKS: ["EMBED_LINKS", 0x4000], + ATTACH_FILES: ["ATTACH_FILES", 0x8000], + READ_MESSAGE_HISTORY: ["READ_MESSAGE_HISTORY", 0x10000], + MENTION_EVERYONE: ["MENTION_EVERYONE", 0x20000], + USE_EXTERNAL_EMOJIS: ["USE_EXTERNAL_EMOJIS", 0x40000], + VIEW_GUILD_INSIGHTS: ["VIEW_GUILD_INSIGHTS", 0x80000], + CONNECT: ["CONNECT", 0x100000], + SPEAK: ["SPEAK", 0x200000], + MUTE_MEMBERS: ["MUTE_MEMBERS", 0x400000], + DEAFEN_MEMBERS: ["DEAFEN_MEMBERS", 0x800000], + MOVE_MEMBERS: ["MOVE_MEMBERS", 0x1000000], + USE_VAD: ["USE_VAD", 0x2000000], + CHANGE_NICKNAME: ["CHANGE_NICKNAME", 0x4000000], + MANAGE_NICKNAMES: ["MANAGE_NICKNAMES", 0x8000000], + MANAGE_ROLES: ["MANAGE_ROLES", 0x10000000], + MANAGE_WEBHOOKS: ["MANAGE_WEBHOOKS", 0x20000000], + MANAGE_EMOJIS_AND_STICKERS: ["MANAGE_EMOJIS_AND_STICKERS", 0x40000000], + USE_APPLICATION_COMMANDS: ["USE_APPLICATION_COMMANDS", 0x80000000], + REQUEST_TO_SPEAK: ["REQUEST_TO_SPEAK", 0x100000000], + MANAGE_EVENTS: ["MANAGE_EVENTS", 0x200000000], + MANAGE_THREADS: ["MANAGE_THREADS", 0x400000000], + CREATE_PUBLIC_THREADS: ["CREATE_PUBLIC_THREADS", 0x800000000], + CREATE_PRIVATE_THREADS: ["CREATE_PRIVATE_THREADS", 0x1000000000], + USE_EXTERNAL_STICKERS: ["USE_EXTERNAL_STICKERS", 0x2000000000], + SEND_MESSAGES_IN_THREADS: ["SEND_MESSAGES_IN_THREADS", 0x4000000000], + START_EMBEDDED_ACTIVITIES: ["START_EMBEDDED_ACTIVITIES", 0x8000000000], + MODERATE_MEMBERS: ["MODERATE_MEMBERS", 0x10000000000], +} diff --git a/ModuleExportsFunctions/formTypes.js b/ModuleExportsFunctions/formTypes.js new file mode 100644 index 0000000..ad07573 --- /dev/null +++ b/ModuleExportsFunctions/formTypes.js @@ -0,0 +1,346 @@ +const discordPermissions = require("./discordPermissions") + +module.exports = { + select: (list, disabled, themeOptions = {}) => { + if (!list) + throw new Error( + err("List in the 'select' form type cannot be empty.") + ) + if (typeof list != "object") + throw new Error( + err("List in the 'select' form type should be an JSON object.") + ) + let keys = Object.keys(list) + let values = Object.values(list) + return { + type: "select", + data: { + keys, + values, + }, + disabled: disabled || false, + themeOptions, + } + }, + multiSelect: (list, disabled, required, themeOptions = {}) => { + if (!list) + throw new Error( + err("List in the 'select' form type cannot be empty.") + ) + if (typeof list != "object") + throw new Error( + err("List in the 'select' form type should be an JSON object.") + ) + let keys = Object.keys(list) + let values = Object.values(list) + return { + type: "multiSelect", + data: { + keys, + values, + }, + disabled: disabled || false, + required: required || false, + themeOptions, + } + }, + input: (placeholder, min, max, disabled, required, themeOptions = {}) => { + if (min) { + if (isNaN(min)) + throw new Error( + err("'min' in the 'input' form type should be an number.") + ) + } + if (max) { + if (isNaN(max)) + throw new Error( + err("'max' in the 'input' form type should be an number.") + ) + } + if (min && max) { + if (min > max) + throw new Error( + err( + "'min' in the 'input' form type cannot be higher than 'max'." + ) + ) + } + return { + type: "input", + data: placeholder, + min: min || null, + max: max || null, + disabled: disabled || false, + required: required || false, + themeOptions, + } + }, + textarea: ( + placeholder, + min, + max, + disabled, + required, + themeOptions = {} + ) => { + if (min) { + if (isNaN(min)) + throw new Error( + err("'min' in the 'input' form type should be an number.") + ) + } + if (max) { + if (isNaN(max)) + throw new Error( + err("'max' in the 'input' form type should be an number.") + ) + } + if (min && max) { + if (min > max) + throw new Error( + err( + "'min' in the 'input' form type cannot be higher than 'max'." + ) + ) + } + return { + type: "textarea", + data: placeholder, + min: min || null, + max: max || null, + disabled: disabled || false, + required: required || false, + themeOptions, + } + }, + switch: (disabled, themeOptions = {}) => { + return { + type: "switch", + disabled: disabled, + themeOptions, + } + }, + checkbox: (disabled, themeOptions = {}) => { + return { + type: "checkbox", + disabled: disabled, + themeOptions, + } + }, + channelsSelect: ( + disabled, + channelTypes = ["GUILD_TEXT"], + hideNSFW, + onlyNSFW, + hideNoAccess, + themeOptions = {} + ) => { + return { + type: "channelsSelect", + function: (client, guildid, userid) => { + let listCount = {} + let list = { + "-": "", + } + const guild = client.guilds.cache.get(guildid) + const user = guild.members.cache.get(userid) + const bot = guild.members.cache.get(client.user.id) + client.guilds.cache + .get(guildid) + .channels.cache.forEach((channel) => { + if (!channelTypes.includes(channel.type)) return + if (hideNSFW && channel.nsfw) return + if (onlyNSFW && !channel.nsfw) return + if (hideNoAccess) { + if (!user.permissionsIn(channel).has('0x800') || !user.permissionsIn(channel).has('0x400')) return + if (!bot.permissionsIn(channel).has('0x800') || !bot.permissionsIn(channel).has('0x800')) return + } + listCount[channel.name] + ? (listCount[channel.name] = + listCount[channel.name] + 1) + : (listCount[channel.name] = 1) + if (list[channel.name]) + list[ + `${channel.name} (${listCount[channel.name]})` + ] = channel.id + else list[channel.name] = channel.id + }) + + let myObj = list + let keys = Object.keys(myObj), + i = null, + len = keys.length + + keys.sort() + list = {} + + for (i = 0; i < len; i++) { + k = keys[i] + list[k] = myObj[k] + } + + return { + values: Object.values(list), + keys: Object.keys(list), + } + }, + disabled, + themeOptions, + } + }, + channelsMultiSelect: ( + disabled, + required, + channelTypes = ["GUILD_TEXT"], + hideNSFW, + onlyNSFW, + hideNoAccess, + themeOptions = {} + ) => { + return { + type: "channelsMultiSelect", + function: (client, guildid, userid) => { + let listCount = {} + let list = {} + const guild = client.guilds.cache.get(guildid) + const user = guild.members.cache.get(userid) + const bot = guild.members.cache.get(client.user.id) + client.guilds.cache + .get(guildid) + .channels.cache.forEach((channel) => { + if (!channelTypes.includes(channel.type)) return + if (hideNSFW && channel.nsfw) return + if (onlyNSFW && !channel.nsfw) return + if (hideNoAccess) { + if (!user.permissionsIn(channel).has('0x800') || !user.permissionsIn(channel).has('0x400')) return + if (!bot.permissionsIn(channel).has('0x800') || !bot.permissionsIn(channel).has('0x800')) return + } + listCount[channel.name] + ? (listCount[channel.name] = + listCount[channel.name] + 1) + : (listCount[channel.name] = 1) + if (list[channel.name]) + list[ + `${channel.name} (${listCount[channel.name]})` + ] = channel.id + else list[channel.name] = channel.id + }) + + let myObj = list + let keys = Object.keys(myObj), + i = null, + len = keys.length + + keys.sort() + list = {} + + for (i = 0; i < len; i++) { + k = keys[i] + list[k] = myObj[k] + } + + return { + values: Object.values(list), + keys: Object.keys(list), + } + }, + disabled, + required, + themeOptions, + } + }, + rolesMultiSelect: (disabled, required, includeBots, hideHigherRoles, themeOptions = {}) => { + return { + type: "rolesMultiSelect", + function: (client, guildid, userid) => { + let listCount = {} + const list = [] + const guild = client.guilds.cache.get(guildid) + const user = guild.members.cache.get(userid) + const bot = guild.members.cache.get(client.user.id) + + client.guilds.cache.get(guildid).roles.cache.forEach((role) => { + if (role.managed && !includeBots) return + if (role.id === guildid) return // @everyone role + if (hideHigherRoles) { + if (role.position >= user.roles.highest.position) return + if (role.position >= bot.roles.highest.position) return + } + listCount[role.name] + ? (listCount[role.name] = listCount[role.name] + 1) + : (listCount[role.name] = 1) + if (listCount[role.name] > 1) + list.push({ key: `${role.name} (${listCount[role.name]})`, value: role.id, position: role.position }) + else list.push({ key: role.name, value: role.id, position: role.position }) + }) + + list.sort((a, b) => b.position - a.position) + + const sortedList = {} + list.forEach(({ key, value }) => (sortedList[key] = value)) + + return { + values: Object.values(sortedList), + keys: Object.keys(sortedList), + } + }, + disabled, + required, + themeOptions, + } + }, + rolesSelect: (disabled, includeBots, hideHigherRoles, themeOptions = {}) => { + return { + type: "rolesSelect", + function: (client, guildid, userid) => { + let listCount = {} + const list = [{ key: '-', value: '' }] + const guild = client.guilds.cache.get(guildid) + const user = guild.members.cache.get(userid) + const bot = guild.members.cache.get(client.user.id) + client.guilds.cache.get(guildid).roles.cache.forEach((role) => { + if (role.managed && !includeBots) return + if (role.id === guildid) return // @everyone role + if (hideHigherRoles) { + if (role.position >= user.roles.highest.position) return + if (role.position >= bot.roles.highest.position) return + } + listCount[role.name] + ? (listCount[role.name] = listCount[role.name] + 1) + : (listCount[role.name] = 1) + if (listCount[role.name] > 1) + list.push({ key: `${role.name} (${listCount[role.name]})`, value: role.id, position: role.position }) + else list.push({ key: role.name, value: role.id, position: role.position }) + }) + + list.sort((a, b) => b.position - a.position) + + const sortedList = {} + list.forEach(({ key, value }) => (sortedList[key] = value)) + + return { + values: Object.values(sortedList), + keys: Object.keys(sortedList), + } + }, + disabled, + themeOptions, + } + }, + colorSelect: (defaultState, disabled, themeOptions = {}) => { + return { + type: "colorSelect", + data: defaultState, + disabled, + themeOptions, + } + }, + embedBuilder: (defaultSettings, disabled, themeOptions = {}) => { + return { + type: "embedBuilder", + data: defaultSettings, + disabled, + themeOptions, + } + }, +} diff --git a/README.MD b/README.MD new file mode 100644 index 0000000..7a886c1 --- /dev/null +++ b/README.MD @@ -0,0 +1,74 @@ + + +

+

+

Discord server

+ +# Discord-Dashboard + +- Easier creation of a Dashboard for Bot using Node.js +- No need to know how the API works, no need to write it +- Easy configuration +- Community support +- Free for no-profit usage +- Paid for profit usage + +# Install + +```js +npm i discord-dashboard +//or +yarn add discord-dashboard +``` + +# Get help + +Join our Discord Support Server + + Discord server + +# Documentation + +**Tutorial:** +- **#1** [Introduction](https://learnit.assistantscenter.com/discord-dashboard-tutorial-1-introduction/) +- **#2** [Setting up a project](https://learnit.assistantscenter.com/discord-dashboard-tutorial-2-setting-up-a-project/) + - ***#2.1.*** [Let's make it work](https://learnit.assistantscenter.com/discord-dashboard-tutorial-2-1-lets-make-it-work/) + - ***#2.2.*** [Creating custom options](https://learnit.assistantscenter.com/discord-dashboard-tutorial-2-2-creating-custom-options/) + - ***#2.3.*** [FormTypes](https://learnit.assistantscenter.com/discord-dashboard-tutorial-2-3-formtypes/) + - ***#2.4.*** [Theme customization](https://learnit.assistantscenter.com/discord-dashboard-tutorial-2-3-theme-customization/) +- **#3** [How to...? ](https://learnit.assistantscenter.com/discord-dashboard-tutorial-3-how-to/) + - ***#3.1.*** [Connect domain with the dashboard](https://learnit.assistantscenter.com/discord-dashboard-tutorial-3-1-connect-domain-with-the-dashboard/) + - ***#2.2.*** [Make dashboard HTTPS (SSL)](https://learnit.assistantscenter.com/discord-dashboard-tutorial-3-2-make-dashboard-https-ssl/) + +Straight-written DOCS can be found at the URL: https://dbd-docs.assistantscenter.com/ + +We'd prefer using Tutorial πŸ˜… + +# Contact + +- **E-mail**: contact@assistantscenter.com, support@assistantscenter.com, billing@assistantscenter.com +- **Discord**: https://discord.gg/Nkc8MWxHRD + +# Licenses + +The project is covered by a **Shareware (CC BY-NC-SA 4.0) licence**. This means that the project is theoretically free and limited, but it has a paid versions. + +### What types of shareware license does the discord-dashboard project fall under? + +- **OpenSource License**: Free. Personal usage only. Non-profit. + +**For profit usage**: Please contact use us to resell rights. Email: *contact@assistantscenter.com* + +#### You can generate OpenSource License there: https://licenses.assistantscenter.com/ + +# v3 Info + +The v3 version of the project designed using solutions like Fastify+Next.js is coming! + +### **Stay tuned:** + +**Discord v3 Updates**: https://discord.gg/Nkc8MWxHRD + +
+ +Β© 2020-2023 Assistants Center, All rights reserved diff --git a/Routes/dashboard.js b/Routes/dashboard.js new file mode 100644 index 0000000..6074d71 --- /dev/null +++ b/Routes/dashboard.js @@ -0,0 +1,888 @@ +const { PermissionFlagsBits } = require("discord.js") +const Discord = require("discord.js") +const router = require("express").Router() + +module.exports = (app, config, themeConfig) => { + const RL = require("express-rate-limit") + const RateLimits = config.rateLimits || {} + let RateFunctions = {} + + const NoRL = (req, res, next) => next() + + if (RateLimits.manage) { + RateFunctions.manage = RL.rateLimit({ + windowMs: RateLimits.manage.windowMs, + max: RateLimits.manage.max, + message: RateLimits.manage.message, + store: RateLimits.manage.store || new RL.MemoryStore(), + }) + } + + if (RateLimits.guildPage) { + RateFunctions.guildPage = RL.rateLimit({ + windowMs: RateLimits.guildPage.windowMs, + max: RateLimits.guildPage.max, + message: RateLimits.guildPage.message, + store: RateLimits.guildPage.store || new RL.MemoryStore(), + }) + } + + if (RateLimits.settingsUpdatePostAPI) { + RateFunctions.settingsUpdatePostAPI = RL.rateLimit({ + windowMs: RateLimits.settingsUpdatePostAPI.windowMs, + max: RateLimits.settingsUpdatePostAPI.max, + message: RateLimits.settingsUpdatePostAPI.message, + store: + RateLimits.settingsUpdatePostAPI.store || new RL.MemoryStore(), + }) + } + + router.get( + "/manage", + RateFunctions.manage ? RateFunctions.manage : NoRL, + async (req, res) => { + if (!req.session.user) return res.redirect("/discord?r=/manage") + let customThemeOptions + if (themeConfig?.customThemeOptions?.manage) { + customThemeOptions = + await themeConfig.customThemeOptions.manage({ + req: req, + res: res, + config: config, + }) + } + res.render("guilds", { + req: req, + bot: config.bot, + themeConfig: req.themeConfig, + customThemeOptions: customThemeOptions || {}, + config, + }) + } + ) + + router.get( + "/guild/:id", + RateFunctions.guildPage ? RateFunctions.guildPage : NoRL, + async (req, res) => { + res.redirect("/settings/" + req.params.id) + + if (!req.session.user) + return res.redirect("/discord?r=/guild/" + req.params.id) + let customThemeOptions + if (themeConfig?.customThemeOptions?.getGuild) { + customThemeOptions = + await themeConfig.customThemeOptions.getGuild({ + req: req, + res: res, + config: config, + guildId: req.params.id, + }) + } + let bot = config.bot + if (!bot.guilds.cache.get(req.params.id)) { + try { + await bot.guilds.fetch(req.params.id) + } catch (err) { } + } + + if (!bot.guilds.cache.get(req.params.id)) + return res.redirect("/manage?error=noPermsToManageGuild") + if ( + !bot.guilds.cache + .get(req.params.id) + .members.cache.get(req.session.user.id) + ) { + try { + await bot.guilds.cache + .get(req.params.id) + .members.fetch(req.session.user.id) + } catch (err) { } + } + for (let PermissionRequired of req.requiredPermissions) { + let converted = PermissionRequired[0] + const DiscordJsVersion = Discord.version.split(".")[0] + + if (DiscordJsVersion === "14") + converted = convert14(PermissionRequired[0]) + + if ( + !bot.guilds.cache + .get(req.params.id) + .members.cache.get(req.session.user.id) + .permissions.has(converted) + ) + return res.redirect("/manage?error=noPermsToManageGuild") + } + + if (bot.guilds.cache.get(req.params.id).channels.cache.size < 1) { + try { + await bot.guilds.cache.get(req.params.id).channels.fetch() + } catch (err) { } + } + + if (bot.guilds.cache.get(req.params.id).roles.cache.size < 2) { + try { + await bot.guilds.cache.get(req.params.id).roles.fetch() + } catch (err) { } + } + + let actual = {} + + let canUseList = {} + if (!config.useCategorySet) + for (const s of config.settings) { + if (!canUseList[s.categoryId]) canUseList[s.categoryId] = {} + for (const c of s.categoryOptionsList) { + if (c.allowedCheck) { + const canUse = await c.allowedCheck({ + guild: { id: req.params.id }, + user: { id: req.session.user.id }, + }) + if (typeof canUse != "object") + throw new TypeError( + `${s.categoryId} category option with id ${c.optionId} allowedCheck function need to return {allowed: Boolean, errorMessage: String | null}` + ) + canUseList[s.categoryId][c.optionId] = canUse + } else { + canUseList[s.categoryId][c.optionId] = { + allowed: true, + errorMessage: null, + } + } + + if (c.optionType == "spacer") { + } else { + if (!actual[s.categoryId]) { + actual[s.categoryId] = {} + } + if (!actual[s.categoryId][c.optionId]) { + actual[s.categoryId][c.optionId] = + await c.getActualSet({ + guild: { + id: req.params.id, + object: bot.guilds.cache.get( + req.params.id + ), + }, + user: { + id: req.session.user.id, + object: bot.guilds.cache + .get(req.params.id) + .members.cache.get( + req.session.user.id + ), + }, + }) + } + } + } + } + else + for (const category of config.settings) { + if (!canUseList[category.categoryId]) + canUseList[category.categoryId] = {} + const catGAS = await category.getActualSet({ + guild: { + id: req.params.id, + object: bot.guilds.cache.get(req.params.id), + }, + user: { + id: req.session.user.id, + object: bot.guilds.cache + .get(req.params.id) + .members.cache.get(req.session.user.id), + }, + }) + + for (const o of catGAS) { + if (!o || !o?.optionId) + console.log( + "WARNING: You haven't set the optionId for a category option in your config. This is required for the category option to work." + ) + else { + const option = category.categoryOptionsList.find( + (c) => c.optionId == o.optionId + ) + if (option) { + if (option.allowedCheck) { + const canUse = await option.allowedCheck({ + guild: { + id: req.params.id, + }, + user: { + id: req.session.user.id, + }, + }) + if (typeof canUse != "object") + throw new TypeError( + `${category.categoryId} category option with id ${option.optionId} allowedCheck function need to return {allowed: Boolean, errorMessage: String | null}` + ) + canUseList[category.categoryId][ + option.optionId + ] = canUse + } else { + canUseList[category.categoryId][ + option.optionId + ] = { + allowed: true, + errorMessage: null, + } + } + + if (option.optionType !== "spacer") { + if (!actual[category.categoryId]) { + actual[category.categoryId] = {} + } + if ( + !actual[category.categoryId][ + option.optionId + ] + ) { + actual[category.categoryId][ + option.optionId + ] = o.data + } + } + } else + console.log( + `WARNING: Option ${o.optionId} in category ${category.categoryId} doesn't exist in your config.` + ) + } + } + } + + let errors + let success + + if (req.session.errors) { + if (String(req.session.errors).includes("%is%")) { + errors = req.session.errors.split("%and%") + } + } + + if (req.session.success) { + if (typeof req.session.success == "boolean") { + success = true + } else { + if (String(req.session.success).includes("%is%")) { + success = req.session.success.split("%and%") + } + } + } + + req.session.errors = null + req.session.success = null + + res.render("guild", { + successes: success, + errors: errors, + settings: config.settings, + actual: actual, + canUseList, + bot: config.bot, + req: req, + guildid: req.params.id, + themeConfig: req.themeConfig, + customThemeOptions: customThemeOptions || {}, + config, + }) + } + ) + + router.post( + "/settings/update/:guildId/:categoryId", + RateFunctions.settingsUpdatePostAPI + ? RateFunctions.settingsUpdatePostAPI + : NoRL, + async (req, res) => { + if (!req.session.user) + return res.redirect("/discord?r=/guild/" + req.params.guildId) + + let customThemeOptions + if (themeConfig?.customThemeOptions?.settingsUpdate) { + customThemeOptions = + await themeConfig.customThemeOptions.settingsUpdate({ + req: req, + config: config, + guildId: req.params.id, + categoryId: req.params.categoryId, + }) + } + let bot = config.bot + + if (!bot.guilds.cache.get(req.params.guildId)) + return res.redirect("/manage?error=noPermsToManageGuild") + await bot.guilds.cache + .get(req.params.guildId) + .members.fetch(req.session.user.id) + for (let PermissionRequired of req.requiredPermissions) { + let converted2 = PermissionRequired[0] + const DiscordJsVersion2 = Discord.version.split(".")[0] + + if (DiscordJsVersion2 === "14") + converted2 = await convert14(PermissionRequired[0]) + + if ( + !bot.guilds.cache + .get(req.params.guildId) + .members.cache.get(req.session.user.id) + .permissions.has(converted2) + ) + return res.redirect("/manage?error=noPermsToManageGuild") + } + + let cid = req.params.categoryId + let settings = config.settings + + let category = settings.find((c) => c.categoryId == cid) + + if (!category) + return res.send({ + error: true, + message: "No category found", + }) + + let setNewRes + let errors = [] + let successes = [] + let catO = [] + + const userGuildMemberObject = bot.guilds.cache + .get(req.params.guildId) + .members.cache.get(req.session.user.id) + const guildObject = bot.guilds.cache.get(req.params.guildId) + + for (let option of category.categoryOptionsList) { + let canUse = {} + + if (option.allowedCheck) { + canUse = await option.allowedCheck({ + guild: { id: req.params.guildId }, + user: { id: req.session.user.id }, + }) + } else { + canUse = { allowed: true, errorMessage: null } + } + + if (canUse.allowed == false) { + setNewRes = { error: canUse.errorMessage } + errors.push( + option.optionName + + "%is%" + + setNewRes.error + + "%is%" + + option.optionId + ) + } else if (option.optionType != "spacer") { + if (config.useCategorySet) { + if ( + option.optionType.type == "rolesMultiSelect" || + option.optionType.type == "channelsMultiSelect" || + option.optionType.type == "multiSelect" + ) { + if ( + !req.body[option.optionId] || + req.body[option.optionId] == null || + req.body[option.optionId] == undefined + ) + catO.push({ + optionId: option.optionId, + data: [], + }) + else if ( + typeof req.body[option.optionId] != "object" + ) + catO.push({ + optionId: option.optionId, + data: [req.body[option.optionId]], + }) + else + catO.push({ + optionId: option.optionId, + data: req.body[option.optionId], + }) + } else if (option.optionType.type == "switch") { + if ( + req.body[option.optionId] || + req.body[option.optionId] == null || + req.body[option.optionId] == undefined + ) { + if ( + req.body[option.optionId] == null || + req.body[option.optionId] == undefined + ) + catO.push({ + optionId: option.optionId, + data: false, + }) + else + catO.push({ + optionId: option.optionId, + data: true, + }) + } + } else if (option.optionType.type == "embedBuilder") { + if ( + req.body[option.optionId] == null || + req.body[option.optionId] == undefined + ) + catO.push({ + optionId: option.optionId, + data: option.optionType.data, + }) + else { + try { + const parsedResponse = JSON.parse( + req.body[option.optionId] + ) + catO.push({ + optionId: option.optionId, + data: parsedResponse, + }) + } catch (err) { + catO.push({ + optionId: option.optionId, + data: option.optionType.data, + }) + } + } + } else { + if ( + req.body[option.optionId] == undefined || + req.body[option.optionId] == null + ) + catO.push({ + optionId: option.optionId, + data: null, + }) + else + catO.push({ + optionId: option.optionId, + data: req.body[option.optionId], + }) + } + } else { + if ( + option.optionType.type == "rolesMultiSelect" || + option.optionType.type == "channelsMultiSelect" || + option.optionType.type == "multiSelect" + ) { + if ( + !req.body[option.optionId] || + req.body[option.optionId] == null || + req.body[option.optionId] == undefined + ) { + setNewRes = await option.setNew({ + guild: { + id: req.params.guildId, + object: guildObject, + }, + user: { + id: req.session.user.id, + object: userGuildMemberObject, + }, + newData: [], + }) + setNewRes ? null : (setNewRes = {}) + if (setNewRes.error) { + errors.push( + option.optionName + + "%is%" + + setNewRes.error + + "%is%" + + option.optionId + ) + } else { + successes.push(option.optionName) + } + } else if ( + typeof req.body[option.optionId] != "object" + ) { + setNewRes = await option.setNew({ + guild: { + id: req.params.guildId, + object: guildObject, + }, + user: { + id: req.session.user.id, + object: userGuildMemberObject, + }, + newData: [req.body[option.optionId]], + }) + setNewRes ? null : (setNewRes = {}) + if (setNewRes.error) { + errors.push( + option.optionName + + "%is%" + + setNewRes.error + + "%is%" + + option.optionId + ) + } else { + successes.push(option.optionName) + } + } else { + setNewRes = await option.setNew({ + guild: { + id: req.params.guildId, + object: guildObject, + }, + user: { + id: req.session.user.id, + object: userGuildMemberObject, + }, + newData: req.body[option.optionId], + }) + setNewRes ? null : (setNewRes = {}) + if (setNewRes.error) { + errors.push( + option.optionName + + "%is%" + + setNewRes.error + + "%is%" + + option.optionId + ) + } else { + successes.push(option.optionName) + } + } + } else if (option.optionType.type == "switch") { + if ( + req.body[option.optionId] || + req.body[option.optionId] == null || + req.body[option.optionId] == undefined + ) { + if ( + req.body[option.optionId] == null || + req.body[option.optionId] == undefined + ) { + setNewRes = + (await option.setNew({ + guild: { + id: req.params.guildId, + object: guildObject, + }, + user: { + id: req.session.user.id, + object: userGuildMemberObject, + }, + newData: false, + })) || {} + setNewRes ? null : (setNewRes = {}) + if (setNewRes.error) { + errors.push( + option.optionName + + "%is%" + + setNewRes.error + + "%is%" + + option.optionId + ) + } else { + successes.push(option.optionName) + } + } else { + setNewRes = + (await option.setNew({ + guild: { + id: req.params.guildId, + object: guildObject, + }, + user: { + id: req.session.user.id, + object: userGuildMemberObject, + }, + newData: true, + })) || {} + setNewRes ? null : (setNewRes = {}) + if (setNewRes.error) { + errors.push( + option.optionName + + "%is%" + + setNewRes.error + + "%is%" + + option.optionId + ) + } else { + successes.push(option.optionName) + } + } + } + } else if (option.optionType.type == "embedBuilder") { + if ( + req.body[option.optionId] == null || + req.body[option.optionId] == undefined + ) { + setNewRes = + (await option.setNew({ + guild: { + id: req.params.guildId, + object: guildObject, + }, + user: { + id: req.session.user.id, + object: userGuildMemberObject, + }, + newData: option.optionType.data, + })) || {} + setNewRes ? null : (setNewRes = {}) + if (setNewRes.error) { + errors.push( + option.optionName + + "%is%" + + setNewRes.error + + "%is%" + + option.optionId + ) + } else { + successes.push(option.optionName) + } + } else { + try { + const parsedResponse = JSON.parse( + req.body[option.optionId] + ) + setNewRes = + (await option.setNew({ + guild: { + id: req.params.guildId, + object: guildObject, + }, + user: { + id: req.session.user.id, + object: userGuildMemberObject, + }, + newData: parsedResponse, + })) || {} + setNewRes ? null : (setNewRes = {}) + if (setNewRes.error) { + errors.push( + option.optionName + + "%is%" + + setNewRes.error + + "%is%" + + option.optionId + ) + } else { + successes.push(option.optionName) + } + } catch (err) { + setNewRes = + (await option.setNew({ + guild: { + id: req.params.guildId, + object: guildObject, + }, + user: { + id: req.session.user.id, + object: userGuildMemberObject, + }, + newData: option.optionType.data, + })) || {} + setNewRes = { + error: "JSON parse for embed builder went wrong, your settings have been reset.", + } + if (setNewRes.error) { + errors.push( + option.optionName + + "%is%" + + setNewRes.error + + "%is%" + + option.optionId + ) + } else { + successes.push(option.optionName) + } + } + } + } else { + if ( + req.body[option.optionId] == undefined || + req.body[option.optionId] == null + ) { + setNewRes = + (await option.setNew({ + guild: { + id: req.params.guildId, + object: guildObject, + }, + user: { + id: req.session.user.id, + object: userGuildMemberObject, + }, + newData: null, + })) || {} + setNewRes ? null : (setNewRes = {}) + if (setNewRes.error) { + errors.push( + option.optionName + + "%is%" + + setNewRes.error + + "%is%" + + option.optionId + ) + } else { + successes.push(option.optionName) + } + } else { + setNewRes = + (await option.setNew({ + guild: { + id: req.params.guildId, + object: guildObject, + }, + user: { + id: req.session.user.id, + object: userGuildMemberObject, + }, + newData: req.body[option.optionId], + })) || {} + setNewRes ? null : (setNewRes = {}) + if (setNewRes.error) { + errors.push( + option.optionName + + "%is%" + + setNewRes.error + + "%is%" + + option.optionId + ) + } else { + successes.push(option.optionName) + } + } + } + } + } + } + + if (config.useCategorySet && catO.length) { + let sNR = await category.setNew({ + guild: { + id: req.params.guildId, + object: guildObject, + }, + user: { + id: req.session.user.id, + object: userGuildMemberObject, + }, + data: catO, + }) + sNR ? null : (sNR = {}) + if (sNR.error) { + errors.push(category.categoryId + "%is%" + sNR.error) + } else { + successes.push(category.categoryId) + } + } + + let successesForDBDEvent = [] + let errorsForDBDEvent = [] + + successes.forEach((item) => { + if (typeof item == "string") { + successesForDBDEvent.push(item.split("%is%")) + } + }) + + errors.forEach((item) => { + if (typeof item == "string") { + errorsForDBDEvent.push(item.split("%is%")) + } + }) + + req.DBDEvents.emit("guildSettingsUpdated", { + user: req.session.user, + changes: { successesForDBDEvent, errorsForDBDEvent }, + guildId: req.params.guildId, + }) + + if (errors[0]) { + if (!successes) successes = [] + req.session.success = successes.join("%and%") + req.session.errors = errors.join("%and%") + return res.redirect("/guild/" + req.params.guildId) + } else { + req.session.success = true + req.session.errors = false + return res.redirect("/guild/" + req.params.guildId) + } + } + ) + + return router +} + +function convert14(perm) { + let final = "NULL" + + switch (perm) { + case "CREATE_INSTANT_INVITE": + final = "CreateInstantInvite" + break + case "KICK_MEMBERS": + final = "KickMembers" + break + case "BAN_MEMBERS": + final = "BanMembers" + break + case "ADMINISTRATOR": + final = "Administrator" + break + case "MANAGE_CHANNELS": + final = "ManageChannels" + break + case "MANAGE_GUILD": + final = "ManageGuild" + break + case "ADD_REACTIONS": + final = "AddReactions" + break + case "VIEW_AUDIT_LOG": + final = "ViewAuditLog" + break + case "PRIORITY_SPEAKER": + final = "PrioritySpeaker" + break + case "STREAM": + final = "Stream" + break + case "VIEW_CHANNEL": + final = "ViewChannel" + break + case "SEND_MESSAGES": + final = "SendMessages" + break + case "SEND_TTS_MESSAGES": + final = "SendTTSMessages" + break + case "MANAGE_MESSAGES": + final = "ManageMessages" + break + case "EMBED_LINKS": + final = "ManageMessages" + break + case "ATTACH_FILES": + final = "AttachFiles" + break + case "READ_MESSAGE_HISTORY": + final = "ReadMessageHistory" + break + case "MENTION_EVERYONE": + final = "MentionEveryone" + break + case "USE_EXTERNAL_EMOJIS": + final = "UseExternalEmojis" + break + case "VIEW_GUILD_INSIGHTS": + final = "ViewGuildInsughts" + break + case "CONNECT": + final = "Connect" + break + case "SPEAK": + final = "Speak" + break + } + + return final +} diff --git a/Routes/discord.js b/Routes/discord.js new file mode 100644 index 0000000..4082d86 --- /dev/null +++ b/Routes/discord.js @@ -0,0 +1,421 @@ +const router = require("express").Router() +const fetch = require("node-fetch") +const DBDStats = require("../ExternalStatistics/index") + +const DiscordOauth2 = require("discord-oauth2") +const oauth = new DiscordOauth2() + +module.exports = (app, config, themeConfig) => { + const scopes = config.guildAfterAuthorization?.use + ? ["identify", "guilds", "guilds.join"] + : ["identify", "guilds"] + const RL = require("express-rate-limit") + const RateLimits = config.rateLimits || {} + let RateFunctions = {} + + const NoRL = (req, res, next) => next() + + if (RateLimits.discordOAuth2) { + RateFunctions.discordOAuth2 = RL.rateLimit({ + windowMs: RateLimits.discordOAuth2.windowMs, + max: RateLimits.discordOAuth2.max, + message: RateLimits.discordOAuth2.message, + store: RateLimits.discordOAuth2.store || new RL.MemoryStore(), + }) + } + + router.get("/", (req, res) => { + const clientId = req.client.id + const redirectUri = req.redirectUri + + let newPage = "/" + if (themeConfig.landingPage?.enabled) newPage = "/dash" + req.session.r = req.query.r || newPage + + const authorizeUrl = `https://discord.com/api/oauth2/authorize?client_id=${clientId}&redirect_uri=${encodeURIComponent( + redirectUri + )}&response_type=code&scope=${scopes.join("%20")}` + res.redirect(authorizeUrl) + }) + + router.get("/status", async (req, res) => { + res.send(req.session?.discordAuthStatus) + }) + + router.get( + "/callback", + RateFunctions.discordOAuth2 ? RateFunctions.discordOAuth2 : NoRL, + async (req, res) => { + req.session.discordAuthStatus = { + loading: true, + success: null, + state: { + error: null, + data: null, + }, + } + const clientId = req.client.id + const clientSecret = req.client.secret + const redirectUri = req.redirectUri + + const accessCode = req.query.code + if (!accessCode) + return res.redirect("/?error=NoAccessCodeReturnedFromDiscord") + + res.redirect("/loading") + + let OAuth2Response + let OAuth2UserResponse + let OAuth2GuildsResponse + + /* + Get Discord OAuth2 API Response with Access Code gained + */ + try { + req.session.discordAuthStatus = { + loading: true, + success: null, + state: { + error: null, + data: "Requesting token...", + }, + } + req.session.save(function (err) {}) + OAuth2Response = await oauth.tokenRequest({ + clientId, + clientSecret, + + code: accessCode, + scope: scopes.join(" "), + grantType: "authorization_code", + + redirectUri, + }) + } catch (err) { + req.config.reportError( + "Discord.js Route - OAuth2Response (line 86)", + err + ) + req.session.discordAuthStatus = { + loading: false, + success: false, + state: { + error: err, + data: null, + }, + } + req.session.save(function (err) {}) + return + } + + /* + Get User from Discord OAuth2 API using gained access_token and update its values with tag and avatarURL + */ + + try { + req.session.discordAuthStatus = { + loading: true, + success: null, + state: { + error: null, + data: "Getting User...", + }, + } + req.session.save(function (err) {}) + OAuth2UserResponse = await oauth.getUser( + OAuth2Response.access_token + ) + } catch (err) { + req.config.reportError( + "Discord.js Route - OAuth2UserResponse (line 118)", + err + ) + req.session.discordAuthStatus = { + loading: false, + success: false, + state: { + error: err, + data: null, + }, + } + req.session.save(function (err) {}) + return + } + OAuth2UserResponse.tag = `${OAuth2UserResponse.username}#${OAuth2UserResponse.discriminator}` + OAuth2UserResponse.avatarURL = OAuth2UserResponse.avatar + ? `https://cdn.discordapp.com/avatars/${OAuth2UserResponse.id}/${OAuth2UserResponse.avatar}.png?size=1024` + : null + + /* + Save user token in Assistants Secure Storage + */ + + try { + req.AssistantsSecureStorage.SaveUser( + OAuth2UserResponse.id, + OAuth2Response.access_token + ) + } catch (err) { + req.config.reportError( + "Discord.js Route - Assistants Secure Storage (line 141)", + err + ) + req.session.discordAuthStatus = { + loading: false, + success: false, + state: { + error: err, + data: null, + }, + } + req.session.save(function (err) {}) + return + } + + /* + Save user in session + */ + + req.session.user = OAuth2UserResponse + req.session.loggedInLastTime = true + + /* + Register user to DBD Stats and emit userLoggedIn event + */ + + try { + DBDStats.registerUser(OAuth2UserResponse.id) + req.DBDEvents.emit("userLoggedIn", OAuth2UserResponse) + } catch (err) { + req.config.reportError( + "Discord.js Route - DBDStats register and DBDEvent emit userLoggedIn (line 170)", + err + ) + req.session.discordAuthStatus = { + loading: false, + success: false, + state: { + error: err, + data: null, + }, + } + req.session.save(function (err) {}) + return + } + + /* + Gain and update session with user guilds + */ + + try { + req.session.discordAuthStatus = { + loading: true, + success: null, + state: { + error: null, + data: "Getting List of User Guilds...", + }, + } + req.session.save(function (err) {}) + OAuth2GuildsResponse = await oauth.getUserGuilds( + OAuth2Response.access_token + ) + } catch (err) { + req.config.reportError( + "Discord.js Route - OAuth2GuildsResponse (line 201)", + err + ) + req.session.discordAuthStatus = { + loading: false, + success: false, + state: { + error: err, + data: null, + }, + } + req.session.save(function (err) {}) + return + } + req.session.guilds = OAuth2GuildsResponse || [] + + /* + Loop and fetch each guild into bots cache + */ + + if (!req.config.disableResolvingGuildCache) { + try { + req.session.discordAuthStatus = { + loading: true, + success: null, + state: { + error: null, + data: "Resolving guilds cache...", + }, + } + req.session.save(function (err) {}) + for (let g of OAuth2GuildsResponse) { + try { + await req.bot.guilds.fetch(g.id) + } catch (err) {} + } + } catch (err) { + req.config.reportError( + "Discord.js Route - OAuth2GuildsResponse Whole Loop (line 239)", + err + ) + req.session.discordAuthStatus = { + loading: false, + success: false, + state: { + error: err, + data: null, + }, + } + req.session.save(function (err) {}) + return + } + } + + /* + If joining specific guild after authorization is enabled, do it + */ + + if (req.guildAfterAuthorization.use == true) { + req.session.discordAuthStatus = { + loading: true, + success: null, + state: { + error: null, + data: "Authorizing user with guild...", + }, + } + req.session.save(function (err) {}) + try { + await oauth.addMember({ + accessToken: OAuth2Response.access_token, + botToken: req.botToken, + guildId: req.guildAfterAuthorization.guildId, + userId: OAuth2UserResponse.id, + + ...(req.guildAfterAuthorization.options || {}), + /* + options?: { + nickname?: string, + roles?: [string], + mute?: boolean, + deaf?: boolean, + } + */ + }) + } catch (err) { + req.config.reportError( + "Discord.js Route - guildAfterAuthorization (line 287)", + err + ) + } + } + + req.session.discordAuthStatus = { + loading: false, + success: true, + state: { + error: null, + data: null, + }, + } + req.session.save(function (err) {}) + + return + } + ) + + router.get("/logout", (req, res) => { + let r = req.query.r || "/" + req.session.destroy() + res.redirect(r) + }) + + router.get("/guilds/reload", async (req, res) => { + if (!req.session.user) return res.redirect("/discord") + + /* + Fetch user token + */ + + const access_token = req.AssistantsSecureStorage.GetUser( + req.session.user.id + ) + if (!access_token) + return res.send({ + error: true, + message: "You don't have any access_token saved.", + login_again_text: true, + }) + + /* + Gain and update session with user guilds + */ + + let OAuth2GuildsResponse + + try { + OAuth2GuildsResponse = await oauth.getUserGuilds(access_token) + } catch (err) { + req.config.reportError( + "Discord.js Route - OAuth2GuildsResponse for ReloadGuilds (line 335)", + err + ) + return res.send({ + error: true, + message: + "An error occured. Access_token is wrong or you're being rate limited.", + login_again_text: true, + }) + } + req.session.guilds = OAuth2GuildsResponse || [] + + /* + Loop and fetch each guild into bots cache + */ + + try { + const Promises = [] + for (let g of OAuth2GuildsResponse) { + Promises.push( + new Promise(async (resolve, reject) => { + try { + await req.bot.guilds.fetch(g.id) + } catch (err) {} + resolve(1) + }) + ) + try { + await Promises.all(Promises) + } catch (err) {} + } + } catch (err) { + req.config.reportError( + "Discord.js Route - OAuth2GuildsResponse Whole Loop for ReloadGuilds (line 363)", + err + ) + return res.send({ + error: true, + message: + "An error occured. Access_token is wrong or you're being rate limited.", + login_again_text: true, + }) + } + + /* + Success + */ + + return res.send({ + error: false, + message: null, + login_again_text: false, + }) + }) + + return router +} diff --git a/Routes/main.js b/Routes/main.js new file mode 100644 index 0000000..73c2368 --- /dev/null +++ b/Routes/main.js @@ -0,0 +1,122 @@ +const Discord = require("discord.js") +const router = require("express").Router() + +module.exports = (app, config, themeConfig, modules) => { + router.get( + themeConfig.landingPage?.enabled ? "/dash" : "/", + async (req, res) => { + let customThemeOptions + if (themeConfig?.customThemeOptions?.index) { + customThemeOptions = await themeConfig.customThemeOptions.index( + { req: req, res: res, config: config } + ) + } + res.render("index", { + req: req, + themeConfig: req.themeConfig, + bot: config.bot, + customThemeOptions: customThemeOptions || {}, + config, + require, + }) + } + ) + + if (themeConfig.landingPage?.enabled) + router.get("/", async (req, res) => { + res.setHeader("Content-Type", "text/html") + res.send(await themeConfig.landingPage.getLandingPage(req, res)) + }) + + router.get("/loading", async (req, res) => { + if (!req.session?.discordAuthStatus?.loading) + return res.redirect("/manage") + + res.render("loading", { req, themeConfig, bot: config.bot }) + }) + + router.get("/invite", (req, res) => { + let config = req.config + config.invite ? null : (config.invite = {}) + const scopes = config.invite.scopes || ["bot"] + + if (req.query.redirect && !req.query.g) + return res.redirect( + `https://discord.com/oauth2/authorize?client_id=${ + config.invite.clientId || config.bot.user.id + }&scope=${scopes.join("%20")}&permissions=${ + config.invite.permissions || "0" + }&response_type=code&redirect_uri=${req.query.redirect}${ + config.invite.otherParams || "" + }` + ) + if (req.query.redirect && req.query.g) + return res.redirect( + `https://discord.com/oauth2/authorize?client_id=${ + config.invite.clientId || config.bot.user.id + }&scope=${scopes.join("%20")}&permissions=${ + config.invite.permissions || "0" + }&response_type=code&redirect_uri=${ + req.query.redirect + }&guild_id=${req.query.g}${config.invite.otherParams || ""}` + ) + + if (req.query.g) { + let thingymabob = config.invite.redirectUri + ? `&response_type=code&redirect_uri=${config.invite.redirectUri}` + : null; + if(!thingymabob) thingymabob = config.invite.specialredirectUri + ? `&response_type=code&redirect_uri=${config.invite.specialRedirectUri.replace("{SERVER}", req.query.g)}` + : ""; + + return res.redirect( + `https://discord.com/oauth2/authorize?client_id=${ + config.invite.clientId || config.bot.user.id + }&scope=${scopes.join("%20")}&permissions=${ + config.invite.permissions || "0" + }${thingymabob}&guild_id=${req.query.g}${config.invite.otherParams || ""}` + ) + } + + res.redirect( + `https://discord.com/oauth2/authorize?client_id=${ + config.invite.clientId || config.bot.user.id + }&scope=${scopes.join("%20")}&permissions=${ + config.invite.permissions || "0" + }${ + config.invite.redirectUri + ? `&response_type=code&redirect_uri=${config.invite.redirectUri}` + : "" + }${config.invite.otherParams || ""}` + ) + }) + + if (!config.supportServer) config.supportServer = {} + + router.get(config.supportServer.slash || "/support-server", (req, res) => { + let config = req.config + config.supportServer ? null : (config.supportServer = {}) + if (!config.supportServer.inviteUrl) + return res.send({ + error: true, + message: + "No inviteUrl defined (discord-dashboard config.supportServer).", + }) + if ( + !config.supportServer.inviteUrl + .toLowerCase() + .startsWith("https://discord.gg/") && + !config.supportServer.inviteUrl + .toLowerCase() + .startsWith("https://discord.com/") + ) + return res.send({ + error: true, + message: + "Invite url should start with 'https://discord.gg/' or 'https://discord.com/'.", + }) + res.redirect(config.supportServer.inviteUrl) + }) + + return router +} diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..0e3f78c --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,10 @@ +# Security Policy + +## Supported Versions + +Currently supported versions: + +| Version | Supported | +| ------- | ------------------ | +| > 2.\* | :white_check_mark: | +| < 2.\* | :x: | diff --git a/__ModuleExample/index.js b/__ModuleExample/index.js new file mode 100644 index 0000000..bdb1b1e --- /dev/null +++ b/__ModuleExample/index.js @@ -0,0 +1,13 @@ +module.exports = { + app: ({ app, config, themeConfig }) => { + app.get("/moduleexample", (req, res) => { + res.send("ModuleExample: Hello World!") + }) + }, + server: ({ io, server, config, themeConfig }) => { + const test = io.of("/moduleexample") + test.on("connection", () => { + console.log("ModuleExample socket.io connected.") + }) + }, +} diff --git a/index.js b/index.js new file mode 100644 index 0000000..dcb853b --- /dev/null +++ b/index.js @@ -0,0 +1,9 @@ +/* +Why is this obfuscated? +The index.js file is obfuscated to hide the license system. +However, this doesn't prevent you from modifying the Dashboard. +Just check files like ./Routes/* and ./ModuleExportsFunctions/* +and we assure you that they are enough to configure the module. +*/ + +function _0x3f31(_0x69d767,_0x157650){const _0x2d2dbe=_0x2d2d();return _0x3f31=function(_0x3f313e,_0x4a4225){_0x3f313e=_0x3f313e-0x8f;let _0x46eddb=_0x2d2dbe[_0x3f313e];return _0x46eddb;},_0x3f31(_0x69d767,_0x157650);}const _0x4d40c6=_0x3f31;(function(_0x3917a9,_0x9bc430){const _0x328fea=_0x3f31,_0x37cbb7=_0x3917a9();while(!![]){try{const _0x2239eb=parseInt(_0x328fea(0xd1))/0x1*(-parseInt(_0x328fea(0xbf))/0x2)+-parseInt(_0x328fea(0xac))/0x3+-parseInt(_0x328fea(0x91))/0x4*(parseInt(_0x328fea(0xc2))/0x5)+-parseInt(_0x328fea(0xc8))/0x6+parseInt(_0x328fea(0xae))/0x7*(-parseInt(_0x328fea(0xb0))/0x8)+-parseInt(_0x328fea(0xc5))/0x9*(parseInt(_0x328fea(0xa5))/0xa)+-parseInt(_0x328fea(0xa9))/0xb*(-parseInt(_0x328fea(0xa7))/0xc);if(_0x2239eb===_0x9bc430)break;else _0x37cbb7['push'](_0x37cbb7['shift']());}catch(_0x570953){_0x37cbb7['push'](_0x37cbb7['shift']());}}}(_0x2d2d,0xc1881));function _0x2d2d(){const _0x10bb5a=['mamma\x20mia\x20italiano','You\x20need\x20to\x20use\x20.useLicense(\x22licenseId\x22)\x20function\x20before\x20initing\x20Dashboard.','gtfvdlicensergtfdd','writeFileSync','\x27licenseId\x27\x20not\x20defined\x20in\x20the\x20.useLicense(\x27licenseId\x27)\x20function.','Successfully\x20signed\x20in.','Man,\x20this\x20was\x20just\x20check\x20if\x20variable\x20is\x20still\x20false\x20:oooo','4BCwWgR','man\x20stop\x20deobfuscating\x20this\x20source\x20code\x20πŸ€·β€β™‚οΈπŸ€·β€β™‚οΈπŸ€·β€β™‚οΈ','http://localhost:3000/','man\x20thats\x20just\x20a\x20function\x20doing\x20nothing...','/HandlerIntegration/index','./ModuleExportsFunctions/customPagesTypes','Discord-Dashboard\x20License\x20Error:\x20','/licensedDashboardClass.js','Default\x20DBD-Dark-Dashboard\x20config.','Loading...','https://discord.gg/yYq4UgRRzz','shift','7OzWizz','6552252jCWVcp','Category',';bug\x20','38592sbLQyd','\x0amodule.exports\x20=\x20Dashboard;','lmfaooo...\x20stop.','1853400SDxfnR','11596630EzQCtz','licenseClient','Test\x20command','access_token','test','./ModuleExportsFunctions/formTypes','222VTPBta','iMidnight','notlicense','4ijVdcT','./LicenseSystem/index','gtfvrthththrtdlicensed','support@imidnight.ml','Information','error','usedLicense','279670chJqCU','./InitFunctions/initExampleDash','56033148jtsIkI','#ebdbdb','11kTpdSX','log','oto.nd\x20\x20\x20[op]','2789085bTWQVe','Alias','100709rGYPjY','version','40drDnKp','aos!','push','No\x20aliases','u\x20aint\x20even\x20nrealy','Lorem\x20ipsum\x20dolor\x20sth','Starting\x20Up','\x20Assistants\x20will\x20sue\x20you\x20100%%%%,\x20just\x20use\x20free\x20OpenSource\x20license','gtfvdlicenhtgfdsed','This\x20bot\x20and\x20panel\x20is\x20currently\x20a\x20work\x20in\x20progress\x20so\x20contact\x20me\x20if\x20you\x20find\x20any\x20issues\x20on\x20discord.','colors','Footer','gtfvdlicensed','exports','message','584090iigBIQ','You\x20really\x20thought\x20thats\x20real\x20license\x20class?????????','lmfao...\x20stop.','345mGZBkl','text','You\x20nearly\x20got\x20it\x20:rofl:\x20Loser.','162pRMplf','./package.json','fakse;','3226776OnXxBz','All\x20helpful\x20commands'];_0x2d2d=function(){return _0x10bb5a;};return _0x2d2d();}let x_32fsfgd=![];const colors=require(_0x4d40c6(0xba)),fs=require('fs'),License=require(_0x4d40c6(0x9f)),{version}=require(_0x4d40c6(0xc6));class Dashboard{constructor(){const _0x44a370=_0x4d40c6;throw new TypeError(_0x44a370(0xcb));}}module[_0x4d40c6(0xbd)]={'default_configs':{'dbdDarkDashboard':{'information':{'createdBy':_0x4d40c6(0x9c),'websiteTitle':_0x4d40c6(0x9c),'websiteName':_0x4d40c6(0x9c),'websiteUrl':'https:/www.imidnight.ml/','dashboardUrl':_0x4d40c6(0xd3),'supporteMail':_0x4d40c6(0xa1),'supportServer':_0x4d40c6(0xdb),'imageFavicon':'https://www.imidnight.ml/assets/img/logo-circular.png','iconURL':'https://www.imidnight.ml/assets/img/logo-circular.png','loggedIn':_0x4d40c6(0xcf),'mainColor':'#2CA8FF','subColor':_0x4d40c6(0xa8),'preloader':_0x4d40c6(0xda)},'index':{'card':{'category':_0x4d40c6(0xd9),'title':'Please\x20customize\x20config\x20to\x20change\x20how\x20dashboard\x20looks\x20like.','image':'https://i.imgur.com/axnP93g.png','footer':'Footer'},'information':{'category':_0x4d40c6(0x8f),'title':'Information','description':_0x4d40c6(0xb9),'footer':'Footer'},'feeds':{'category':_0x4d40c6(0x8f),'title':_0x4d40c6(0xa2),'description':'This\x20bot\x20and\x20panel\x20is\x20currently\x20a\x20work\x20in\x20progress\x20so\x20contact\x20me\x20if\x20you\x20find\x20any\x20issues\x20on\x20discord.','footer':_0x4d40c6(0xbb)}},'commands':[{'category':_0x4d40c6(0xb6),'subTitle':_0x4d40c6(0xc9),'list':[{'commandName':'bug','commandUsage':_0x4d40c6(0x90),'commandDescription':_0x4d40c6(0x99),'commandAlias':_0x4d40c6(0xb3)},{'commandName':'2nd\x20command','commandUsage':_0x4d40c6(0xab),'commandDescription':'Lorem\x20ipsum\x20dolor\x20sth,\x20arg\x20sth\x20arg2\x20stuff','commandAlias':'Alias'},{'commandName':_0x4d40c6(0x97),'commandUsage':'prefix.test\x20\x20[op]','commandDescription':_0x4d40c6(0xb5),'commandAlias':_0x4d40c6(0xad)}]}]}},'licenseInfo':()=>{return console['log']('[Discord-Dashboard\x20Info]\x20Your\x20License\x20ID\x20has\x20been\x20fetched\x20by\x20*probably*\x20the\x20theme!'),x_32fsfgd;},'useLicense':async _0x550a87=>{const _0x3f8cd1=_0x4d40c6;if(!_0x550a87)throw new TypeError(_0x3f8cd1(0xce));const _0x4e4496=require(_0x3f8cd1(0x9f)),_0x518a4b=new _0x4e4496(_0x550a87),_0x31d1da=await _0x518a4b['ValidateLicense']();if(_0x31d1da[_0x3f8cd1(0xa3)])throw new TypeError(_0x3f8cd1(0xd7)+_0x31d1da[_0x3f8cd1(0xbe)]);x_32fsfgd=_0x31d1da;const _0x40e2f3=require(_0x3f8cd1(0xc6))['version'];let _0x19616b=await require('node-fetch')('https://licenses.assistantscenter.com/api/index/'+_0x40e2f3+'/'+_0x550a87+'/'+x_32fsfgd[_0x3f8cd1(0x98)]);return _0x19616b=await _0x19616b[_0x3f8cd1(0xc3)](),await require('fs')[_0x3f8cd1(0xcd)](__dirname+_0x3f8cd1(0xd8),'//'+_0x40e2f3+'\x0a'+_0x19616b+_0x3f8cd1(0x92)),_0x31d1da;},'UpdatedClass':()=>{const _0x17b0f9=_0x4d40c6,_0x371000=_0x17b0f9(0xbc);let _0x2641d4=![],_0x255626=![];const _0x3ba3c9=_0x17b0f9(0xbc),_0x44721e=_0x17b0f9(0xc0);let _0x1b39af=_0x17b0f9(0xc7);const _0xda87e=_0x17b0f9(0xb7);let _0x4b398c=![];_0x255626=!![];const _0x5295b7=_0x17b0f9(0xd4),_0x384866=_0x17b0f9(0xc4),_0x4c487e=_0x17b0f9(0xa0),_0x337c3b=_0x17b0f9(0xca);let _0x4d7768=_0x17b0f9(0xd2);if(!_0x255626)throw new TypeError(_0x4d7768+_0xda87e);let _0xe7882a=_0x17b0f9(0xcc),_0x1f71b0=_0x17b0f9(0xb8),_0x24e096=!![];if(x_32fsfgd){_0x24e096?_0x2641d4=![]:_0x2641d4=!![];if(x_32fsfgd==x_32fsfgd){const _0x32e7ac=_0x17b0f9(0x96),_0x5bdddc=_0x17b0f9(0xa4),_0x25d09e=_0x17b0f9(0xb1);if(_0x2641d4)throw new TypeError('Stop\x20editing\x20source\x20code,\x20that\x20will\x20give\x20you\x20an\x20brainfuck\x20moment.\x20Remember\x20that\x20Assistants\x20could\x20sue\x20you.');class _0x2f89db{constructor(){throw new TypeError('STop\x20🀣');}}if(!_0x24e096)new _0x2f89db();if(_0x24e096&&_0x2641d4)return console[_0x17b0f9(0xaa)](_0x384866);const _0x4a3d01=_0x567e15;(function(_0x5e53ad,_0x544bfe){const _0xa1e2e1=_0x17b0f9,_0x9c67c=_0x567e15,_0x53b902=_0x5e53ad();while(!![]){try{const _0x55649e=-parseInt(_0x9c67c(0x13e))/0x1*(parseInt(_0x9c67c(0x145))/0x2)+-parseInt(_0x9c67c(0x13f))/0x3+parseInt(_0x9c67c(0x143))/0x4+parseInt(_0x9c67c(0x13d))/0x5*(parseInt(_0x9c67c(0x140))/0x6)+parseInt(_0x9c67c(0x13a))/0x7*(-parseInt(_0x9c67c(0x142))/0x8)+-parseInt(_0x9c67c(0x13c))/0x9+parseInt(_0x9c67c(0x13b))/0xa;if(_0x55649e===_0x544bfe)break;else _0x53b902[_0xa1e2e1(0xb2)](_0x53b902[_0xa1e2e1(0xdc)]());}catch(_0x1ce62e){_0x53b902[_0xa1e2e1(0xb2)](_0x53b902[_0xa1e2e1(0xdc)]());}}}(_0x2c18c4,0x6dde6));function _0x567e15(_0x13f002,_0x9b0643){const _0x145cf6=_0x2c18c4();return _0x567e15=function(_0x474170,_0x98632b){_0x474170=_0x474170-0x13a;let _0x4b5a47=_0x145cf6[_0x474170];return _0x4b5a47;},_0x567e15(_0x13f002,_0x9b0643);}function _0x2c18c4(){const _0x432b5c=_0x17b0f9,_0x45da9b=['92375iWCWKi',_0x432b5c(0x9e),_0x432b5c(0x94),_0x432b5c(0x9b),'./licensedDashboardClass.js','3616112Tfevia','2509304crvKVh',_0x432b5c(0xd8),'111350xHjeKY',_0x432b5c(0xdd),_0x432b5c(0x95),_0x432b5c(0xde)];return _0x2c18c4=function(){return _0x45da9b;},_0x2c18c4();}const _0x356cc4=require(_0x4a3d01(0x141));fs[_0x17b0f9(0xcd)](__dirname+_0x4a3d01(0x144),'');return _0x356cc4;const _0x41125a='Haha\x20u\x20wont\x20get\x20this\x20working.';((()=>{const _0x6d6947=_0x17b0f9;if(_0x2641d4&&!_0x255626)return console[_0x6d6947(0xaa)](_0x5295b7);})());const _0x469f38=_0x17b0f9(0xc1),_0x32e03b=_0x17b0f9(0xb4),_0x5b9692=![];let _0x3c12c3=_0x17b0f9(0x93);const _0xe9088=_0x17b0f9(0xb4);if(!_0x3c12c3){;((()=>{const _0x550379=_0x3c12c3+_0xe9088+_0x41125a+_0xe7882a+String(_0x5b9692);throw new TypeError(_0x550379);})());}}}else{const _0x4d7ad0=_0x17b0f9(0x9d);return Dashboard;}if(_0x4b398c!=![])throw new TypeError(_0x17b0f9(0xd0));_0x255626=!![];if(_0x255626!=!![]){class _0x21910b{constructor(_0x20a4d0){const _0x3c7b54=_0x17b0f9;this['config']=_0x20a4d0,console[_0x3c7b54(0xaa)](_0x44721e);}['Gen']=()=>{return _0x1b39af;};['formTypes']=()=>{return _0x3ba3c9;};}return;}},'initDashboard':({fileName:_0x2d5863,domain:_0x9593f9,port:_0x1c094c,token:_0x593ba2,clientSecret:_0xc9184c,clientId:_0x485531})=>{const _0x3ebfde=_0x4d40c6;require(_0x3ebfde(0xa6))({'fileName':_0x2d5863,'domain':_0x9593f9,'port':_0x1c094c,'token':_0x593ba2,'clientSecret':_0xc9184c,'clientId':_0x485531});},'Handler':require(__dirname+_0x4d40c6(0xd5)),'formTypes':require(_0x4d40c6(0x9a)),'customPagesTypes':require(_0x4d40c6(0xd6)),'DISCORD_FLAGS':{'Permissions':require('./ModuleExportsFunctions/discordPermissions')},'version':require(_0x4d40c6(0xc6))[_0x4d40c6(0xaf)]}; \ No newline at end of file diff --git a/licensedDashboardClass.js b/licensedDashboardClass.js new file mode 100644 index 0000000..e69de29 diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..d3a4126 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4537 @@ +{ + "name": "discord-dashboard", + "version": "2.3.51", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "discord-dashboard", + "version": "2.3.51", + "license": "CC BY-NC-SA 4.0", + "dependencies": { + "assistants-safe-storage": "^1.0.0", + "body-parser": "^1.20.0", + "colors": "^1.4.0", + "cookie-parser": "^1.4.6", + "discord-dashboard": "^2.3.39", + "discord-dashboard-pp-system": "^1.0.2", + "discord-oauth2": "^2.10.0", + "discord.js": "*", + "ejs": "^3.1.8", + "express": "^4.17.3", + "express-partials": "^0.3.0", + "express-rate-limit": "^6.4.0", + "express-session": "^1.17.3", + "https": "^1.0.0", + "keyv": "^4.5.2", + "node-fetch": "^2.6.7", + "readline-sync": "^1.4.10", + "socket.io": "^4.5.1", + "uuid": "^8.3.2" + }, + "devDependencies": { + "dbd-dark-dashboard": "^1.6.58", + "javascript-obfuscator": "^4.0.0", + "prettier": "2.7.1" + } + }, + "node_modules/@discordjs/builders": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.11.0.tgz", + "integrity": "sha512-ZTB8yJdJKrKlq44dpWkNUrAtEJEq0gqpb7ASdv4vmq6/mZal5kOv312hQ56I/vxwMre+VIkoHquNUAfnTbiYtg==", + "license": "Apache-2.0", + "dependencies": { + "@sindresorhus/is": "^4.2.0", + "discord-api-types": "^0.26.0", + "ts-mixer": "^6.0.0", + "tslib": "^2.3.1", + "zod": "^3.11.6" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@discordjs/collection": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.4.0.tgz", + "integrity": "sha512-zmjq+l/rV35kE6zRrwe8BHqV78JvIh2ybJeZavBi5NySjWXqN3hmmAKg7kYMMXSeiWtSsMoZ/+MQi0DiQWy2lw==", + "license": "Apache-2.0", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@javascript-obfuscator/escodegen": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@javascript-obfuscator/escodegen/-/escodegen-2.3.0.tgz", + "integrity": "sha512-QVXwMIKqYMl3KwtTirYIA6gOCiJ0ZDtptXqAv/8KWLG9uQU2fZqTVy7a/A5RvcoZhbDoFfveTxuGxJ5ibzQtkw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@javascript-obfuscator/estraverse": "^5.3.0", + "esprima": "^4.0.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/@javascript-obfuscator/estraverse": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@javascript-obfuscator/estraverse/-/estraverse-5.4.0.tgz", + "integrity": "sha512-CZFX7UZVN9VopGbjTx4UXaXsi9ewoM1buL0kY7j1ftYdSs7p2spv9opxFjHlQ/QGTgh4UqufYqJJ0WKLml7b6w==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@sapphire/async-queue": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.3.1.tgz", + "integrity": "sha512-FFTlPOWZX1kDj9xCAsRzH5xEJfawg1lNoYAA+ecOWJMHOfiZYb1uXOI3ne9U4UILSEPwfE68p3T9wUHwIQfR0g==", + "license": "MIT", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@socket.io/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/@types/component-emitter": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==", + "license": "MIT" + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "license": "MIT" + }, + "node_modules/@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", + "license": "MIT" + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "17.0.23", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.23.tgz", + "integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==", + "license": "MIT" + }, + "node_modules/@types/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "node_modules/@types/node-fetch/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "license": "MIT" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/assert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", + "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es6-object-assign": "^1.1.0", + "is-nan": "^1.2.1", + "object-is": "^1.0.1", + "util": "^0.12.0" + } + }, + "node_modules/assistants-safe-storage": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assistants-safe-storage/-/assistants-safe-storage-1.0.0.tgz", + "integrity": "sha512-3bFR7KvTKRyTj5b0omvYjDBjSU/kM8czl330mUcJKYLbH0zLQbRy/dL1PvCoKtJCi0c65Vrp2jBpYNDCZpy5uA==", + "license": "MIT", + "dependencies": { + "cryptr": "^6.0.2" + } + }, + "node_modules/async": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "license": "MIT", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/body-parser/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chance": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/chance/-/chance-1.1.8.tgz", + "integrity": "sha512-v7fi5Hj2VbR6dJEGRWLmJBA83LJMS47pkAbmROFxHWd9qmE1esHRZW8Clf1Fhzr3rjxnNZVCjOEv/ivFxeIMtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/class-validator": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.13.2.tgz", + "integrity": "sha512-yBUcQy07FPlGzUjoLuUfIOXzgynnQPPruyK1Ge2B74k9ROwnle1E+NxLWnUv5OLU8hA/qL5leAE9XnXq3byaBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "libphonenumber-js": "^1.9.43", + "validator": "^13.7.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.0.0.tgz", + "integrity": "sha512-JJfP2saEKbQqvW+FI93OYUB4ByV5cizMpFMiiJI8xDbBvQvSkIk0VvQdn1CZ8mqAO8Loq2h0gYTYtDFUZUeERw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-parser": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", + "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", + "license": "MIT", + "dependencies": { + "cookie": "0.4.1", + "cookie-signature": "1.0.6" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/cookie-parser/node_modules/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/cryptr": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/cryptr/-/cryptr-6.0.2.tgz", + "integrity": "sha512-1TRHI4bmuLIB8WgkH9eeYXzhEg1T4tonO4vVaMBKKde8Dre51J68nAgTVXTwMYXAf7+mV2gBCkm/9wksjSb2sA==", + "license": "MIT" + }, + "node_modules/dbd-dark-dashboard": { + "version": "1.6.58", + "resolved": "https://registry.npmjs.org/dbd-dark-dashboard/-/dbd-dark-dashboard-1.6.58.tgz", + "integrity": "sha512-Y9PYMiF2ojiN8D0CCF7wS/RiScdNrQda0un+XtX6IZtyOJmNALJjhd1YDOfgnkFDVJINrE209dhCN9GypU0MBw==", + "dev": true, + "dependencies": { + "discord-dashboard": "*", + "node-fetch": "2.6.7" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/discord-api-types": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz", + "integrity": "sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/discord-dashboard": { + "version": "2.3.39", + "resolved": "https://registry.npmjs.org/discord-dashboard/-/discord-dashboard-2.3.39.tgz", + "integrity": "sha512-33x+QUAB8qz+bcmUGhatMEDkVgHukc7xsX2xzSv9pU6OMQxq6dQZ5ovirNTae0TZYh/QUa3Fo/hmgAUVOzP9Xw==", + "dependencies": { + "assistants-safe-storage": "^1.0.0", + "body-parser": "^1.20.0", + "colors": "^1.4.0", + "cookie-parser": "^1.4.6", + "discord-dashboard-pp-system": "^1.0.2", + "discord-oauth2": "^2.10.0", + "discord.js": "^13.*.*", + "ejs": "^3.1.8", + "express": "^4.17.3", + "express-partials": "^0.3.0", + "express-rate-limit": "^6.4.0", + "express-session": "^1.17.3", + "https": "^1.0.0", + "node-fetch": "^2.6.7", + "readline-sync": "^1.4.10", + "socket.io": "^4.5.1", + "uuid": "^8.3.2" + } + }, + "node_modules/discord-dashboard-pp-system": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/discord-dashboard-pp-system/-/discord-dashboard-pp-system-1.0.2.tgz", + "integrity": "sha512-vc209e4/VCZyd2B14wdmrnihZoyJDBX/es3a9sAw1q1jn/6DR8BwTPNjF4sIYKPI71y2R6N56NhT4EgXgK+/qg==", + "license": "ISC", + "dependencies": { + "uuid": "*" + } + }, + "node_modules/discord-oauth2": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/discord-oauth2/-/discord-oauth2-2.10.0.tgz", + "integrity": "sha512-AV+pjKURHyGTCLCUO1vep83/M8zzlAaTkpjAB6bisBCjsyiQzJGihKR4dlM88UeAaJbyqDxnHIsHafePIO2ssg==", + "license": "MIT" + }, + "node_modules/discord.js": { + "version": "13.6.0", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.6.0.tgz", + "integrity": "sha512-tXNR8zgsEPxPBvGk3AQjJ9ljIIC6/LOPjzKwpwz8Y1Q2X66Vi3ZqFgRHYwnHKC0jC0F+l4LzxlhmOJsBZDNg9g==", + "license": "Apache-2.0", + "dependencies": { + "@discordjs/builders": "^0.11.0", + "@discordjs/collection": "^0.4.0", + "@sapphire/async-queue": "^1.1.9", + "@types/node-fetch": "^2.5.12", + "@types/ws": "^8.2.2", + "discord-api-types": "^0.26.0", + "form-data": "^4.0.0", + "node-fetch": "^2.6.1", + "ws": "^8.4.0" + }, + "engines": { + "node": ">=16.6.0", + "npm": ">=7.0.0" + } + }, + "node_modules/discord.js/node_modules/ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/engine.io": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.1.tgz", + "integrity": "sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA==", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.2.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", + "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", + "license": "MIT", + "dependencies": { + "@socket.io/base64-arraybuffer": "~1.0.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" + }, + "node_modules/es-abstract": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.5.tgz", + "integrity": "sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "license": "MIT" + }, + "node_modules/eslint-scope": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", + "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.17.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", + "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.19.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.4.2", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.9.7", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express-partials": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/express-partials/-/express-partials-0.3.0.tgz", + "integrity": "sha1-iLnEAWSv2aVSeGKbKUjmrOe/9F8=", + "engines": { + "node": "*" + } + }, + "node_modules/express-rate-limit": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.4.0.tgz", + "integrity": "sha512-lxQRZI4gi3qAWTf0/Uqsyugsz57h8bd7QyllXBgJvd6DJKokzW7C5DTaNvwzvAQzwHGFaItybfYGhC8gpu0V2A==", + "license": "MIT", + "engines": { + "node": ">= 12.9.0" + }, + "peerDependencies": { + "express": "^4 || ^5" + } + }, + "node_modules/express-session": { + "version": "1.17.3", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz", + "integrity": "sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==", + "license": "MIT", + "dependencies": { + "cookie": "0.4.2", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.0.2", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.1", + "uid-safe": "~2.1.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/express-session/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.9.7", + "raw-body": "2.4.3", + "type-is": "~1.6.18" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", + "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true, + "license": "MIT" + }, + "node_modules/filelist": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.3.tgz", + "integrity": "sha512-LwjCsruLWQULGYKy7TX0OPtrL9kLpojOFKc5VCTxdFTV7w5zbsgqVKfnkKG7Qgjtq50gKfO56hJv88OfcGb70Q==", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true, + "license": "MIT" + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "license": "MIT" + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https/-/https-1.0.0.tgz", + "integrity": "sha1-PDfHrhqO65ZpBKKtHpdaGUt+06Q=", + "license": "ISC" + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/inversify": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/inversify/-/inversify-6.0.1.tgz", + "integrity": "sha512-B3ex30927698TJENHR++8FfEaJGqoWOgI6ZY5Ht/nLUsFCwHn6akbwtnUAPCgUepAnTpe2qHxhDNjoKLyz6rgQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz", + "integrity": "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.5", + "foreach": "^2.0.5", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/jake": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/javascript-obfuscator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/javascript-obfuscator/-/javascript-obfuscator-4.0.0.tgz", + "integrity": "sha512-vS/8w/9eKISzwXNLd+OLMCCwjD+dFMdOlCDOo919iR/MWdBs+7u1ybpwRoWOmODToPQKVYw5GasvZoIiPs5nPw==", + "dev": true, + "hasInstallScript": true, + "license": "BSD-2-Clause", + "dependencies": { + "@javascript-obfuscator/escodegen": "2.3.0", + "@javascript-obfuscator/estraverse": "5.4.0", + "acorn": "8.7.0", + "assert": "2.0.0", + "chalk": "4.1.2", + "chance": "1.1.8", + "class-validator": "0.13.2", + "commander": "9.0.0", + "eslint-scope": "7.1.0", + "eslint-visitor-keys": "3.2.0", + "fast-deep-equal": "3.1.3", + "inversify": "6.0.1", + "js-string-escape": "1.0.1", + "md5": "2.3.0", + "mkdirp": "1.0.4", + "multimatch": "5.0.0", + "opencollective-postinstall": "2.0.3", + "process": "0.11.10", + "reflect-metadata": "0.1.13", + "source-map-support": "0.5.21", + "string-template": "1.0.0", + "stringz": "2.1.0", + "tslib": "2.3.1" + }, + "bin": { + "javascript-obfuscator": "bin/javascript-obfuscator" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/javascript-obfuscator" + } + }, + "node_modules/js-string-escape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "node_modules/keyv": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", + "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/libphonenumber-js": { + "version": "1.9.51", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.9.51.tgz", + "integrity": "sha512-MGidRDs7s2nUybwrB/UjZT4nPXZPYQZQTu/sF3/O2v/DocmD8N6G+a9kwDt2qm7DaOo35XRt7hAIbYL+ml942Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "license": "MIT" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "license": "MIT" + }, + "node_modules/multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "dev": true, + "license": "MIT", + "bin": { + "opencollective-postinstall": "index.js" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readline-sync": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", + "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==", + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/send": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "1.8.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "license": "MIT" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/serve-static": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "license": "MIT", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/socket.io": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.1.tgz", + "integrity": "sha512-0y9pnIso5a9i+lJmsCdtmTTgJFFSvNQKDnPQRz28mGNnxbmqYg2QPtJTLFxhymFZhAIn50eHAKzJeiNaKr+yUQ==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.2.0", + "socket.io-adapter": "~2.4.0", + "socket.io-parser": "~4.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", + "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==", + "license": "MIT" + }, + "node_modules/socket.io-parser": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.5.tgz", + "integrity": "sha512-sNjbT9dX63nqUFIOv95tTVm6elyIU4RvB1m8dOeZt+IgWwcWklFDOdmGcfo3zSiRsnR/3pJkjY5lfoGqEe4Eig==", + "dependencies": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-parser/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" + }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/string-template": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz", + "integrity": "sha1-np8iM9wA8hhxjsN5oopWc+zKi5Y=", + "dev": true, + "license": "MIT" + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringz": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/stringz/-/stringz-2.1.0.tgz", + "integrity": "sha512-KlywLT+MZ+v0IRepfMxRtnSvDCMc3nR1qqCs3m/qIbSOWkNZYT8XHQA31rS3TnKp0c5xjZu3M4GY/2aRKSi/6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "license": "MIT" + }, + "node_modules/ts-mixer": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.1.tgz", + "integrity": "sha512-hvE+ZYXuINrx6Ei6D6hz+PTim0Uf++dYbK9FFifLNwQj+RwKquhQpn868yZsCtJYiclZF1u8l6WZxxKi+vv7Rg==", + "license": "MIT" + }, + "node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "license": "MIT", + "dependencies": { + "random-bytes": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/util": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validator": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz", + "integrity": "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.5", + "foreach": "^2.0.5", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/zod": { + "version": "3.14.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.14.4.tgz", + "integrity": "sha512-U9BFLb2GO34Sfo9IUYp0w3wJLlmcyGoMd75qU9yf+DrdGA4kEx6e+l9KOkAlyUO0PSQzZCa3TR4qVlcmwqSDuw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + }, + "dependencies": { + "@discordjs/builders": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.11.0.tgz", + "integrity": "sha512-ZTB8yJdJKrKlq44dpWkNUrAtEJEq0gqpb7ASdv4vmq6/mZal5kOv312hQ56I/vxwMre+VIkoHquNUAfnTbiYtg==", + "requires": { + "@sindresorhus/is": "^4.2.0", + "discord-api-types": "^0.26.0", + "ts-mixer": "^6.0.0", + "tslib": "^2.3.1", + "zod": "^3.11.6" + } + }, + "@discordjs/collection": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.4.0.tgz", + "integrity": "sha512-zmjq+l/rV35kE6zRrwe8BHqV78JvIh2ybJeZavBi5NySjWXqN3hmmAKg7kYMMXSeiWtSsMoZ/+MQi0DiQWy2lw==" + }, + "@javascript-obfuscator/escodegen": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@javascript-obfuscator/escodegen/-/escodegen-2.3.0.tgz", + "integrity": "sha512-QVXwMIKqYMl3KwtTirYIA6gOCiJ0ZDtptXqAv/8KWLG9uQU2fZqTVy7a/A5RvcoZhbDoFfveTxuGxJ5ibzQtkw==", + "dev": true, + "requires": { + "@javascript-obfuscator/estraverse": "^5.3.0", + "esprima": "^4.0.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "@javascript-obfuscator/estraverse": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@javascript-obfuscator/estraverse/-/estraverse-5.4.0.tgz", + "integrity": "sha512-CZFX7UZVN9VopGbjTx4UXaXsi9ewoM1buL0kY7j1ftYdSs7p2spv9opxFjHlQ/QGTgh4UqufYqJJ0WKLml7b6w==", + "dev": true + }, + "@sapphire/async-queue": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.3.1.tgz", + "integrity": "sha512-FFTlPOWZX1kDj9xCAsRzH5xEJfawg1lNoYAA+ecOWJMHOfiZYb1uXOI3ne9U4UILSEPwfE68p3T9wUHwIQfR0g==" + }, + "@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==" + }, + "@socket.io/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==" + }, + "@types/component-emitter": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==" + }, + "@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + }, + "@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" + }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "@types/node": { + "version": "17.0.23", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.23.tgz", + "integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==" + }, + "@types/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==", + "requires": { + "@types/node": "*", + "form-data": "^3.0.0" + }, + "dependencies": { + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } + } + }, + "@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "requires": { + "@types/node": "*" + } + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true + }, + "assert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", + "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", + "dev": true, + "requires": { + "es6-object-assign": "^1.1.0", + "is-nan": "^1.2.1", + "object-is": "^1.0.1", + "util": "^0.12.0" + } + }, + "assistants-safe-storage": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assistants-safe-storage/-/assistants-safe-storage-1.0.0.tgz", + "integrity": "sha512-3bFR7KvTKRyTj5b0omvYjDBjSU/kM8czl330mUcJKYLbH0zLQbRy/dL1PvCoKtJCi0c65Vrp2jBpYNDCZpy5uA==", + "requires": { + "cryptr": "^6.0.2" + } + }, + "async": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" + }, + "body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + }, + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chance": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/chance/-/chance-1.1.8.tgz", + "integrity": "sha512-v7fi5Hj2VbR6dJEGRWLmJBA83LJMS47pkAbmROFxHWd9qmE1esHRZW8Clf1Fhzr3rjxnNZVCjOEv/ivFxeIMtg==", + "dev": true + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", + "dev": true + }, + "class-validator": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.13.2.tgz", + "integrity": "sha512-yBUcQy07FPlGzUjoLuUfIOXzgynnQPPruyK1Ge2B74k9ROwnle1E+NxLWnUv5OLU8hA/qL5leAE9XnXq3byaBw==", + "dev": true, + "requires": { + "libphonenumber-js": "^1.9.43", + "validator": "^13.7.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.0.0.tgz", + "integrity": "sha512-JJfP2saEKbQqvW+FI93OYUB4ByV5cizMpFMiiJI8xDbBvQvSkIk0VvQdn1CZ8mqAO8Loq2h0gYTYtDFUZUeERw==", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + }, + "cookie-parser": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", + "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", + "requires": { + "cookie": "0.4.1", + "cookie-signature": "1.0.6" + }, + "dependencies": { + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + } + } + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", + "dev": true + }, + "cryptr": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/cryptr/-/cryptr-6.0.2.tgz", + "integrity": "sha512-1TRHI4bmuLIB8WgkH9eeYXzhEg1T4tonO4vVaMBKKde8Dre51J68nAgTVXTwMYXAf7+mV2gBCkm/9wksjSb2sA==" + }, + "dbd-dark-dashboard": { + "version": "1.6.58", + "resolved": "https://registry.npmjs.org/dbd-dark-dashboard/-/dbd-dark-dashboard-1.6.58.tgz", + "integrity": "sha512-Y9PYMiF2ojiN8D0CCF7wS/RiScdNrQda0un+XtX6IZtyOJmNALJjhd1YDOfgnkFDVJINrE209dhCN9GypU0MBw==", + "dev": true, + "requires": { + "discord-dashboard": "*", + "node-fetch": "2.6.7" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "discord-api-types": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz", + "integrity": "sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ==" + }, + "discord-dashboard": { + "version": "2.3.39", + "resolved": "https://registry.npmjs.org/discord-dashboard/-/discord-dashboard-2.3.39.tgz", + "integrity": "sha512-33x+QUAB8qz+bcmUGhatMEDkVgHukc7xsX2xzSv9pU6OMQxq6dQZ5ovirNTae0TZYh/QUa3Fo/hmgAUVOzP9Xw==", + "requires": { + "assistants-safe-storage": "^1.0.0", + "body-parser": "^1.20.0", + "colors": "^1.4.0", + "cookie-parser": "^1.4.6", + "discord-dashboard-pp-system": "^1.0.2", + "discord-oauth2": "^2.10.0", + "discord.js": "^13.*.*", + "ejs": "^3.1.8", + "express": "^4.17.3", + "express-partials": "^0.3.0", + "express-rate-limit": "^6.4.0", + "express-session": "^1.17.3", + "https": "^1.0.0", + "node-fetch": "^2.6.7", + "readline-sync": "^1.4.10", + "socket.io": "^4.5.1", + "uuid": "^8.3.2" + } + }, + "discord-dashboard-pp-system": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/discord-dashboard-pp-system/-/discord-dashboard-pp-system-1.0.2.tgz", + "integrity": "sha512-vc209e4/VCZyd2B14wdmrnihZoyJDBX/es3a9sAw1q1jn/6DR8BwTPNjF4sIYKPI71y2R6N56NhT4EgXgK+/qg==", + "requires": { + "uuid": "*" + } + }, + "discord-oauth2": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/discord-oauth2/-/discord-oauth2-2.10.0.tgz", + "integrity": "sha512-AV+pjKURHyGTCLCUO1vep83/M8zzlAaTkpjAB6bisBCjsyiQzJGihKR4dlM88UeAaJbyqDxnHIsHafePIO2ssg==" + }, + "discord.js": { + "version": "13.6.0", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.6.0.tgz", + "integrity": "sha512-tXNR8zgsEPxPBvGk3AQjJ9ljIIC6/LOPjzKwpwz8Y1Q2X66Vi3ZqFgRHYwnHKC0jC0F+l4LzxlhmOJsBZDNg9g==", + "requires": { + "@discordjs/builders": "^0.11.0", + "@discordjs/collection": "^0.4.0", + "@sapphire/async-queue": "^1.1.9", + "@types/node-fetch": "^2.5.12", + "@types/ws": "^8.2.2", + "discord-api-types": "^0.26.0", + "form-data": "^4.0.0", + "node-fetch": "^2.6.1", + "ws": "^8.4.0" + }, + "dependencies": { + "ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "requires": {} + } + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "ejs": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", + "requires": { + "jake": "^10.8.5" + } + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "engine.io": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.1.tgz", + "integrity": "sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA==", + "requires": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.2.3" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "engine.io-parser": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", + "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", + "requires": { + "@socket.io/base64-arraybuffer": "~1.0.2" + } + }, + "es-abstract": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.5.tgz", + "integrity": "sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "eslint-scope": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", + "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.17.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", + "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.19.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.4.2", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.9.7", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.9.7", + "raw-body": "2.4.3", + "type-is": "~1.6.18" + } + }, + "raw-body": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", + "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", + "requires": { + "bytes": "3.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + } + } + }, + "express-partials": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/express-partials/-/express-partials-0.3.0.tgz", + "integrity": "sha1-iLnEAWSv2aVSeGKbKUjmrOe/9F8=" + }, + "express-rate-limit": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.4.0.tgz", + "integrity": "sha512-lxQRZI4gi3qAWTf0/Uqsyugsz57h8bd7QyllXBgJvd6DJKokzW7C5DTaNvwzvAQzwHGFaItybfYGhC8gpu0V2A==", + "requires": {} + }, + "express-session": { + "version": "1.17.3", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz", + "integrity": "sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==", + "requires": { + "cookie": "0.4.2", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.0.2", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.1", + "uid-safe": "~2.1.5" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "filelist": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.3.tgz", + "integrity": "sha512-LwjCsruLWQULGYKy7TX0OPtrL9kLpojOFKc5VCTxdFTV7w5zbsgqVKfnkKG7Qgjtq50gKfO56hJv88OfcGb70Q==", + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + } + }, + "https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https/-/https-1.0.0.tgz", + "integrity": "sha1-PDfHrhqO65ZpBKKtHpdaGUt+06Q=" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "inversify": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/inversify/-/inversify-6.0.1.tgz", + "integrity": "sha512-B3ex30927698TJENHR++8FfEaJGqoWOgI6ZY5Ht/nLUsFCwHn6akbwtnUAPCgUepAnTpe2qHxhDNjoKLyz6rgQ==", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz", + "integrity": "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.5", + "foreach": "^2.0.5", + "has-tostringtag": "^1.0.0" + } + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "jake": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + } + }, + "javascript-obfuscator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/javascript-obfuscator/-/javascript-obfuscator-4.0.0.tgz", + "integrity": "sha512-vS/8w/9eKISzwXNLd+OLMCCwjD+dFMdOlCDOo919iR/MWdBs+7u1ybpwRoWOmODToPQKVYw5GasvZoIiPs5nPw==", + "dev": true, + "requires": { + "@javascript-obfuscator/escodegen": "2.3.0", + "@javascript-obfuscator/estraverse": "5.4.0", + "acorn": "8.7.0", + "assert": "2.0.0", + "chalk": "4.1.2", + "chance": "1.1.8", + "class-validator": "0.13.2", + "commander": "9.0.0", + "eslint-scope": "7.1.0", + "eslint-visitor-keys": "3.2.0", + "fast-deep-equal": "3.1.3", + "inversify": "6.0.1", + "js-string-escape": "1.0.1", + "md5": "2.3.0", + "mkdirp": "1.0.4", + "multimatch": "5.0.0", + "opencollective-postinstall": "2.0.3", + "process": "0.11.10", + "reflect-metadata": "0.1.13", + "source-map-support": "0.5.21", + "string-template": "1.0.0", + "stringz": "2.1.0", + "tslib": "2.3.1" + } + }, + "js-string-escape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=", + "dev": true + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "keyv": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", + "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "requires": { + "json-buffer": "3.0.1" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "libphonenumber-js": { + "version": "1.9.51", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.9.51.tgz", + "integrity": "sha512-MGidRDs7s2nUybwrB/UjZT4nPXZPYQZQTu/sF3/O2v/DocmD8N6G+a9kwDt2qm7DaOo35XRt7hAIbYL+ml942Q==", + "dev": true + }, + "md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dev": true, + "requires": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + } + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==" + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "dev": true + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==" + }, + "random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + } + } + }, + "readline-sync": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", + "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==" + }, + "reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "send": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "1.8.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "serve-static": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.2" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "socket.io": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.1.tgz", + "integrity": "sha512-0y9pnIso5a9i+lJmsCdtmTTgJFFSvNQKDnPQRz28mGNnxbmqYg2QPtJTLFxhymFZhAIn50eHAKzJeiNaKr+yUQ==", + "requires": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.2.0", + "socket.io-adapter": "~2.4.0", + "socket.io-parser": "~4.0.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "socket.io-adapter": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", + "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==" + }, + "socket.io-parser": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.5.tgz", + "integrity": "sha512-sNjbT9dX63nqUFIOv95tTVm6elyIU4RvB1m8dOeZt+IgWwcWklFDOdmGcfo3zSiRsnR/3pJkjY5lfoGqEe4Eig==", + "requires": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "string-template": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz", + "integrity": "sha1-np8iM9wA8hhxjsN5oopWc+zKi5Y=", + "dev": true + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "stringz": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/stringz/-/stringz-2.1.0.tgz", + "integrity": "sha512-KlywLT+MZ+v0IRepfMxRtnSvDCMc3nR1qqCs3m/qIbSOWkNZYT8XHQA31rS3TnKp0c5xjZu3M4GY/2aRKSi/6A==", + "dev": true, + "requires": { + "char-regex": "^1.0.2" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "ts-mixer": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.1.tgz", + "integrity": "sha512-hvE+ZYXuINrx6Ei6D6hz+PTim0Uf++dYbK9FFifLNwQj+RwKquhQpn868yZsCtJYiclZF1u8l6WZxxKi+vv7Rg==" + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "requires": { + "random-bytes": "~1.0.0" + } + }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "util": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, + "validator": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-typed-array": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz", + "integrity": "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.5", + "foreach": "^2.0.5", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.7" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "requires": {} + }, + "zod": { + "version": "3.14.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.14.4.tgz", + "integrity": "sha512-U9BFLb2GO34Sfo9IUYp0w3wJLlmcyGoMd75qU9yf+DrdGA4kEx6e+l9KOkAlyUO0PSQzZCa3TR4qVlcmwqSDuw==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..272cdde --- /dev/null +++ b/package.json @@ -0,0 +1,55 @@ +{ + "name": "discord-dashboard", + "version": "2.3.61", + "description": "Create an Dashboard for your bot in 10 minutes without APIs knowledge and slapping code from scratch!", + "main": "index.js", + "directories": { + "test": "test" + }, + "typings": ".d.ts", + "dependencies": { + "assistants-safe-storage": "^1.0.0", + "body-parser": "^1.20.0", + "colors": "^1.4.0", + "cookie-parser": "^1.4.6", + "discord-dashboard": "^2.3.39", + "discord-dashboard-pp-system": "^1.0.2", + "discord-oauth2": "^2.10.0", + "discord.js": "*", + "ejs": "^3.1.8", + "express": "^4.17.3", + "express-partials": "^0.3.0", + "express-rate-limit": "^6.4.0", + "express-session": "^1.17.3", + "https": "^1.0.0", + "keyv": "^4.5.2", + "node-fetch": "^2.6.7", + "readline-sync": "^1.4.10", + "socket.io": "^4.5.1", + "uuid": "^8.3.2" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "breftejk", + "license": "CC BY-NC-SA 4.0", + "homepage": "https://dbd-docs.assistantscenter.com/", + "keywords": [ + "discord", + "discord.js", + "discordjs", + "discord dashboard", + "discord web dashboard", + "web dashboard", + "dashboard" + ], + "repository": { + "type": "git", + "url": "https://github.com/Assistants-Center/Discord.js-Web-Dashboard.git" + }, + "devDependencies": { + "dbd-dark-dashboard": "^1.6.58", + "javascript-obfuscator": "^4.0.0", + "prettier": "2.7.1" + } +} diff --git a/router.js b/router.js new file mode 100644 index 0000000..948f391 --- /dev/null +++ b/router.js @@ -0,0 +1,173 @@ +module.exports = (app, config, themeConfig, modules) => { + app.use(require("cookie-parser")()) + + app.use((req, res, next) => { + req.bot = config.bot + next() + }) + + if (themeConfig.defaultLocales) { + app.use((req, res, next) => { + if (req.cookies?.lang) req.lang = req.cookies.lang + else req.lang = req.acceptsLanguages()[0].replace("-", "") + + if (themeConfig.locales) { + if (Object.keys(themeConfig.locales).includes(req.lang)) { + req.locales = themeConfig.locales[req.lang] + } else { + req.locales = + themeConfig.locales[Object.keys(themeConfig.locales)[0]] + } + } else { + req.locales = + themeConfig.defaultLocales[ + Object.keys(themeConfig.defaultLocales).includes( + req.lang + ) + ? req.lang + : "enUS" + ] + } + + next() + }) + } + + app.use( + "/discord", + require("./Routes/discord")(app, config, themeConfig, modules) + ) + + if (config.useUnderMaintenance) { + app.get( + config.underMaintenanceAccessPage || "/total-secret-get-access", + (req, res) => { + res.send(` +
+ + +
+ `) + } + ) + + app.post( + config.underMaintenanceAccessPage || "/total-secret-get-access", + (req, res) => { + if (!req.body) req.body = {} + const accessKey = req.body.accessKey + if (accessKey != config.underMaintenanceAccessKey) + return res.send("Wrong key.") + req.session.umaccess = true + res.redirect("/") + } + ) + + app.use((req, res, next) => { + if (req.originalUrl.startsWith("/loading")) return next() + if (!req.session.umaccess && !req.session.user) { + if (!config.useThemeMaintenance) + return res.send( + config.underMaintenanceCustomHtml || + require("./underMaintenancePageDefault")( + config.underMaintenance, + false + ) + ) + else + res.render("maintenance", { + req: req, + bot: config.bot, + themeConfig: req.themeConfig, + loggedIn: false, + defaultMaintenanceConfig: config.underMaintenance || {}, + }) + } else if ( + !req.session.umaccess && + config.ownerIDs && + !config.ownerIDs.includes(req.session.user.id) + ) { + if (!config.useThemeMaintenance) + return res.send( + config.underMaintenanceCustomHtml || + require("./underMaintenancePageDefault")( + config.underMaintenance, + true + ) + ) + else + res.render("maintenance", { + req: req, + bot: config.bot, + themeConfig: req.themeConfig, + loggedIn: true, + defaultMaintenanceConfig: config.underMaintenance || {}, + }) + } else next() + }) + } + + app.use("/", require("./Routes/main")(app, config, themeConfig, modules)) + app.use( + "/", + require("./Routes/dashboard")(app, config, themeConfig, modules) + ) + + config.theme.init(app, config) + + let customPages = config.customPages || [] + customPages.forEach((p) => { + if (p.type == "redirect") { + app.get(p.endpoint, async (req, res) => { + let endpoint = await p.getEndpoint({ + user: req.session.user || {}, + req, + }) + res.redirect(endpoint) + }) + } else if (p.type == "html") { + app.get(p.endpoint, async (req, res) => { + let html = await p.getHtml({ + user: req.session.user || {}, + req, + }) + res.send(html) + }) + } else if (p.type == "json") { + app.get(p.endpoint, async (req, res) => { + let json = await p.getJson({ + user: req.session.user || {}, + req, + }) + res.send(json) + }) + } + }) + + modules.forEach((module) => { + module.app({ + app: app, + config: this.config, + themeConfig: themeConfig, + }) + }) + + if (!config.useTheme404) { + app.get("*", (req, res) => { + let text = + config.html404 || + require("./404pagedefault")( + config.websiteTitle || themeConfig.websiteName + ) + res.send( + text.replace( + "{{websiteTitle}}", + config.websiteTitle || themeConfig.websiteName + ) + ) + }) + } +} diff --git a/underMaintenancePageDefault.js b/underMaintenancePageDefault.js new file mode 100644 index 0000000..b383fea --- /dev/null +++ b/underMaintenancePageDefault.js @@ -0,0 +1,689 @@ +module.exports = ( + { + title, + contentTitle, + texts = [], + bodyBackgroundColors = ["#ffa191", "#ffc247"], + buildingsColor = "#ff6347", + craneDivBorderColor = "#ff6347", + craneArmColor = "#f88f7c", + craneWeightColor = "#f88f7c", + outerCraneColor = "#ff6347", + craneLineColor = "#ff6347", + craneCabinColor = "#f88f7c", + craneStandColors = ["#ff6347", "#f29b8b"], + }, + loggedIn +) => { + let logged = "Login" + if (loggedIn) logged = "Logout" + return ` + + + + ${title} + + + + +
+

${contentTitle}

+ ${texts + .map((text) => '

' + text + "

") + .join("")} +


+ ${logged} +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + ` +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..8542bcf --- /dev/null +++ b/yarn.lock @@ -0,0 +1,1333 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@discordjs/builders@^0.11.0": + version "0.11.0" + resolved "https://registry.npmjs.org/@discordjs/builders/-/builders-0.11.0.tgz" + dependencies: + "@sindresorhus/is" "^4.2.0" + discord-api-types "^0.26.0" + ts-mixer "^6.0.0" + tslib "^2.3.1" + zod "^3.11.6" + +"@discordjs/collection@^0.4.0": + version "0.4.0" + resolved "https://registry.npmjs.org/@discordjs/collection/-/collection-0.4.0.tgz" + +"@javascript-obfuscator/escodegen@2.3.0": + version "2.3.0" + resolved "https://registry.npmjs.org/@javascript-obfuscator/escodegen/-/escodegen-2.3.0.tgz" + dependencies: + "@javascript-obfuscator/estraverse" "^5.3.0" + esprima "^4.0.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +"@javascript-obfuscator/estraverse@5.4.0", "@javascript-obfuscator/estraverse@^5.3.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@javascript-obfuscator/estraverse/-/estraverse-5.4.0.tgz" + +"@sapphire/async-queue@^1.1.9": + version "1.3.1" + resolved "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.3.1.tgz" + +"@sindresorhus/is@^4.2.0": + version "4.6.0" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" + +"@types/component-emitter@^1.2.10": + version "1.2.11" + resolved "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz" + +"@types/cookie@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" + +"@types/cors@^2.8.12": + version "2.8.12" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.12.tgz#6b2c510a7ad7039e98e7b8d3d6598f4359e5c080" + +"@types/minimatch@^3.0.3": + version "3.0.5" + resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz" + +"@types/node-fetch@^2.5.12": + version "2.6.1" + resolved "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.1.tgz" + dependencies: + "@types/node" "*" + form-data "^3.0.0" + +"@types/node@*", "@types/node@>=10.0.0": + version "18.11.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.9.tgz#02d013de7058cea16d36168ef2fc653464cfbad4" + +"@types/ws@^8.2.2": + version "8.5.3" + resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz" + dependencies: + "@types/node" "*" + +accepts@~1.3.4, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn@8.7.0: + version "8.7.0" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz" + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + dependencies: + color-convert "^2.0.1" + +array-differ@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz" + +assert@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz" + dependencies: + es6-object-assign "^1.1.0" + is-nan "^1.2.1" + object-is "^1.0.1" + util "^0.12.0" + +assistants-safe-storage@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/assistants-safe-storage/-/assistants-safe-storage-1.0.0.tgz" + dependencies: + cryptr "^6.0.2" + +async@^3.2.3: + version "3.2.3" + resolved "https://registry.npmjs.org/async/-/async-3.2.3.tgz" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + +base64id@2.0.0, base64id@~2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz" + +body-parser@1.19.2: + version "1.19.2" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz" + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.8.1" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.9.7" + raw-body "2.4.3" + type-is "~1.6.18" + +body-parser@^1.20.0: + version "1.20.0" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz" + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.10.3" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + dependencies: + balanced-match "^1.0.0" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +chalk@4.1.2, chalk@^4.0.2: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chance@1.1.8: + version "1.1.8" + resolved "https://registry.npmjs.org/chance/-/chance-1.1.8.tgz" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" + +charenc@0.0.2: + version "0.0.2" + resolved "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz" + +class-validator@0.13.2: + version "0.13.2" + resolved "https://registry.npmjs.org/class-validator/-/class-validator-0.13.2.tgz" + dependencies: + libphonenumber-js "^1.9.43" + validator "^13.7.0" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + +colors@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz" + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + dependencies: + delayed-stream "~1.0.0" + +commander@9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/commander/-/commander-9.0.0.tgz" + +component-emitter@~1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" + +cookie-parser@^1.4.6: + version "1.4.6" + resolved "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz" + dependencies: + cookie "0.4.1" + cookie-signature "1.0.6" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + +cookie@0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz" + +cookie@0.4.2, cookie@~0.4.1: + version "0.4.2" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" + +cors@~2.8.5: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + dependencies: + object-assign "^4" + vary "^1" + +crypt@0.0.2: + version "0.0.2" + resolved "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz" + +cryptr@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/cryptr/-/cryptr-6.0.2.tgz" + +dbd-dark-dashboard@^1.6.58: + version "1.6.58" + resolved "https://registry.npmjs.org/dbd-dark-dashboard/-/dbd-dark-dashboard-1.6.58.tgz" + dependencies: + discord-dashboard "*" + node-fetch "2.6.7" + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + dependencies: + ms "2.0.0" + +debug@~4.3.1, debug@~4.3.2: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + dependencies: + ms "2.1.2" + +deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + +define-properties@^1.1.3: + version "1.1.4" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + +depd@2.0.0, depd@~2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz" + +discord-api-types@^0.26.0: + version "0.26.1" + resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz" + +discord-dashboard-pp-system@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/discord-dashboard-pp-system/-/discord-dashboard-pp-system-1.0.2.tgz" + dependencies: + uuid "*" + +discord-dashboard@*, discord-dashboard@^2.3.39: + version "2.3.39" + resolved "https://registry.npmjs.org/discord-dashboard/-/discord-dashboard-2.3.39.tgz" + dependencies: + assistants-safe-storage "^1.0.0" + body-parser "^1.20.0" + colors "^1.4.0" + cookie-parser "^1.4.6" + discord-dashboard-pp-system "^1.0.2" + discord-oauth2 "^2.10.0" + discord.js "^13.*.*" + ejs "^3.1.8" + express "^4.17.3" + express-partials "^0.3.0" + express-rate-limit "^6.4.0" + express-session "^1.17.3" + https "^1.0.0" + node-fetch "^2.6.7" + readline-sync "^1.4.10" + socket.io "^4.5.1" + uuid "^8.3.2" + +discord-oauth2@^2.10.0: + version "2.10.0" + resolved "https://registry.npmjs.org/discord-oauth2/-/discord-oauth2-2.10.0.tgz" + +discord.js@*, discord.js@^13.*.*: + version "13.6.0" + resolved "https://registry.npmjs.org/discord.js/-/discord.js-13.6.0.tgz" + dependencies: + "@discordjs/builders" "^0.11.0" + "@discordjs/collection" "^0.4.0" + "@sapphire/async-queue" "^1.1.9" + "@types/node-fetch" "^2.5.12" + "@types/ws" "^8.2.2" + discord-api-types "^0.26.0" + form-data "^4.0.0" + node-fetch "^2.6.1" + ws "^8.4.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + +ejs@^3.1.8: + version "3.1.8" + resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz" + dependencies: + jake "^10.8.5" + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + +engine.io-parser@~5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.0.4.tgz#0b13f704fa9271b3ec4f33112410d8f3f41d0fc0" + +engine.io@~6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.2.1.tgz#e3f7826ebc4140db9bbaa9021ad6b1efb175878f" + dependencies: + "@types/cookie" "^0.4.1" + "@types/cors" "^2.8.12" + "@types/node" ">=10.0.0" + accepts "~1.3.4" + base64id "2.0.0" + cookie "~0.4.1" + cors "~2.8.5" + debug "~4.3.1" + engine.io-parser "~5.0.3" + ws "~8.2.3" + +es-abstract@^1.18.5: + version "1.19.5" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.5.tgz" + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-weakref "^1.0.2" + object-inspect "^1.12.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es6-object-assign@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + +eslint-scope@7.1.0: + version "7.1.0" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz" + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz" + +esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + dependencies: + estraverse "^5.2.0" + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + +express-partials@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/express-partials/-/express-partials-0.3.0.tgz" + +express-rate-limit@^6.4.0: + version "6.4.0" + resolved "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.4.0.tgz" + +express-session@^1.17.3: + version "1.17.3" + resolved "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz" + dependencies: + cookie "0.4.2" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~2.0.0" + on-headers "~1.0.2" + parseurl "~1.3.3" + safe-buffer "5.2.1" + uid-safe "~2.1.5" + +express@^4.17.3: + version "4.17.3" + resolved "https://registry.npmjs.org/express/-/express-4.17.3.tgz" + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.19.2" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.4.2" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.9.7" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.17.2" + serve-static "1.14.2" + setprototypeof "1.2.0" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +fast-deep-equal@3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + +filelist@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.3.tgz" + dependencies: + minimatch "^5.0.1" + +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz" + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz" + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz" + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz" + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" + dependencies: + get-intrinsic "^1.1.1" + +has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" + dependencies: + has-symbols "^1.0.2" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + dependencies: + function-bind "^1.1.1" + +http-errors@1.8.1: + version "1.8.1" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz" + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.1" + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +https@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/https/-/https-1.0.0.tgz" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + dependencies: + safer-buffer ">= 2.1.2 < 3" + +inherits@2.0.4, inherits@^2.0.3: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +inversify@6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/inversify/-/inversify-6.0.1.tgz" + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + +is-arguments@^1.0.4: + version "1.1.1" + resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" + dependencies: + has-bigints "^1.0.1" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@~1.1.6: + version "1.1.6" + resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + +is-callable@^1.1.4, is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" + dependencies: + has-tostringtag "^1.0.0" + +is-generator-function@^1.0.7: + version "1.0.10" + resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz" + dependencies: + has-tostringtag "^1.0.0" + +is-nan@^1.2.1: + version "1.3.2" + resolved "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz" + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" + dependencies: + has-tostringtag "^1.0.0" + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" + dependencies: + call-bind "^1.0.2" + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.3, is-typed-array@^1.1.7: + version "1.1.8" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz" + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-abstract "^1.18.5" + foreach "^2.0.5" + has-tostringtag "^1.0.0" + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" + dependencies: + call-bind "^1.0.2" + +jake@^10.8.5: + version "10.8.5" + resolved "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz" + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.1" + minimatch "^3.0.4" + +javascript-obfuscator@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/javascript-obfuscator/-/javascript-obfuscator-4.0.0.tgz" + dependencies: + "@javascript-obfuscator/escodegen" "2.3.0" + "@javascript-obfuscator/estraverse" "5.4.0" + acorn "8.7.0" + assert "2.0.0" + chalk "4.1.2" + chance "1.1.8" + class-validator "0.13.2" + commander "9.0.0" + eslint-scope "7.1.0" + eslint-visitor-keys "3.2.0" + fast-deep-equal "3.1.3" + inversify "6.0.1" + js-string-escape "1.0.1" + md5 "2.3.0" + mkdirp "1.0.4" + multimatch "5.0.0" + opencollective-postinstall "2.0.3" + process "0.11.10" + reflect-metadata "0.1.13" + source-map-support "0.5.21" + string-template "1.0.0" + stringz "2.1.0" + tslib "2.3.1" + +js-string-escape@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz" + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" + +keyv@^4.5.2: + version "4.5.2" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz" + dependencies: + json-buffer "3.0.1" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +libphonenumber-js@^1.9.43: + version "1.9.51" + resolved "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.9.51.tgz" + +md5@2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz" + dependencies: + charenc "0.0.2" + crypt "0.0.2" + is-buffer "~1.1.6" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + +mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + +minimatch@^3.0.4: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz" + dependencies: + brace-expansion "^2.0.1" + +mkdirp@1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + +ms@2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + +multimatch@5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz" + dependencies: + "@types/minimatch" "^3.0.3" + array-differ "^3.0.0" + array-union "^2.1.0" + arrify "^2.0.1" + minimatch "^3.0.4" + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + +node-fetch@2.6.7, node-fetch@^2.6.1, node-fetch@^2.6.7: + version "2.6.7" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" + dependencies: + whatwg-url "^5.0.0" + +object-assign@^4: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object-inspect@^1.12.0, object-inspect@^1.9.0: + version "1.12.0" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz" + +object-is@^1.0.1: + version "1.1.5" + resolved "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz" + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + +object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz" + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" + dependencies: + ee-first "1.1.1" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" + +opencollective-postinstall@2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz" + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" + +prettier@2.7.1: + version "2.7.1" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz" + +process@0.11.10: + version "0.11.10" + resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +qs@6.10.3: + version "6.10.3" + resolved "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz" + dependencies: + side-channel "^1.0.4" + +qs@6.9.7: + version "6.9.7" + resolved "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz" + +random-bytes@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + +raw-body@2.4.3: + version "2.4.3" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz" + dependencies: + bytes "3.1.2" + http-errors "1.8.1" + iconv-lite "0.4.24" + unpipe "1.0.0" + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +readline-sync@^1.4.10: + version "1.4.10" + resolved "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz" + +reflect-metadata@0.1.13: + version "0.1.13" + resolved "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz" + +safe-buffer@5.2.1, safe-buffer@^5.1.2: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + +send@0.17.2: + version "0.17.2" + resolved "https://registry.npmjs.org/send/-/send-0.17.2.tgz" + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "1.8.1" + mime "1.6.0" + ms "2.1.3" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serve-static@1.14.2: + version "1.14.2" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz" + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.2" + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +socket.io-adapter@~2.4.0: + version "2.4.0" + resolved "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz" + +socket.io-parser@~4.0.4: + version "4.0.5" + resolved "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.5.tgz" + dependencies: + "@types/component-emitter" "^1.2.10" + component-emitter "~1.3.0" + debug "~4.3.1" + +socket.io@^4.5.1: + version "4.5.1" + resolved "https://registry.npmjs.org/socket.io/-/socket.io-4.5.1.tgz" + dependencies: + accepts "~1.3.4" + base64id "~2.0.0" + debug "~4.3.2" + engine.io "~6.2.0" + socket.io-adapter "~2.4.0" + socket.io-parser "~4.0.4" + +source-map-support@0.5.21: + version "0.5.21" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + +"statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + +string-template@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz" + +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz" + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz" + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +stringz@2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/stringz/-/stringz-2.1.0.tgz" + dependencies: + char-regex "^1.0.2" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + dependencies: + has-flag "^4.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + +ts-mixer@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.1.tgz" + +tslib@2.3.1, tslib@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" + dependencies: + prelude-ls "~1.1.2" + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +uid-safe@~2.1.5: + version "2.1.5" + resolved "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz" + dependencies: + random-bytes "~1.0.0" + +unbox-primitive@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz" + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + +util@^0.12.0: + version "0.12.4" + resolved "https://registry.npmjs.org/util/-/util-0.12.4.tgz" + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + safe-buffer "^5.1.2" + which-typed-array "^1.1.2" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + +uuid@*, uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + +validator@^13.7.0: + version "13.7.0" + resolved "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz" + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-typed-array@^1.1.2: + version "1.1.7" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz" + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-abstract "^1.18.5" + foreach "^2.0.5" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.7" + +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + +ws@^8.4.0: + version "8.5.0" + resolved "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz" + +ws@~8.2.3: + version "8.2.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba" + +zod@^3.11.6: + version "3.14.4" + resolved "https://registry.npmjs.org/zod/-/zod-3.14.4.tgz"