From e1c05939cb13eb6dc40b8a8fa128f9dd43b3482d Mon Sep 17 00:00:00 2001 From: "Kalle (Sendou)" <38327916+Sendouc@users.noreply.github.com> Date: Tue, 9 Nov 2021 23:32:40 +0200 Subject: [PATCH] Delete redundants parts --- README.md | 28 - frontend/hooks/useMySWR.ts | 6 - frontend/package-lock.json | 33 - frontend/package.json | 1 - frontend/pages/_app.tsx | 16 +- package.json | 1 - server/.env.sample | 6 - server/index.ts | 94 - server/package-lock.json | 1685 ----------------- server/package.json | 33 - server/prisma/client.ts | 6 - .../20211030201455_init/migration.sql | 92 - server/prisma/migrations/migration_lock.toml | 3 - server/prisma/schema.prisma | 74 - server/prisma/seed.ts | 104 - server/routes/index.ts | 8 - server/routes/tournaments.routes.ts | 20 - server/services/tournament.ts | 61 - server/services/user.ts | 64 - server/tsconfig.json | 16 - 20 files changed, 3 insertions(+), 2348 deletions(-) delete mode 100644 frontend/hooks/useMySWR.ts delete mode 100644 server/.env.sample delete mode 100644 server/index.ts delete mode 100644 server/package-lock.json delete mode 100644 server/package.json delete mode 100644 server/prisma/client.ts delete mode 100644 server/prisma/migrations/20211030201455_init/migration.sql delete mode 100644 server/prisma/migrations/migration_lock.toml delete mode 100644 server/prisma/schema.prisma delete mode 100644 server/prisma/seed.ts delete mode 100644 server/routes/index.ts delete mode 100644 server/routes/tournaments.routes.ts delete mode 100644 server/services/tournament.ts delete mode 100644 server/services/user.ts delete mode 100644 server/tsconfig.json diff --git a/README.md b/README.md index 87384eabc..7b78d60ee 100644 --- a/README.md +++ b/README.md @@ -27,17 +27,6 @@ You might be able to skip steps 2-4 and use a few pages but most pages need a se ## .env -### /server - -| Name | Description | Required | -| --------------------- | ----------------------------------------------------------------------------------------------------------- | -------- | -| DATABASE_URL | Database connection string. For example mine is currently `postgresql://sendou@localhost:5432/sendou_ink_3` | Yes | -| DISCORD_CLIENT_ID | Used for auth. Make an application on [Discord](https://discord.com/developers/applications) | No | -| DISCORD_CLIENT_SECRET | See above. | No | -| DISCORD_CALLBACK_URL | See above. | No | -| FRONTEND_URL | Where frontend is located. Cell | Yes | -| NODE_ENV | `development` when developing, `production` in production | Yes | - ### /frontend | Name | Description | Required | @@ -63,23 +52,6 @@ frontend/ └── utils/ frontend specific utility methods, constants etc. ``` -### /server - -This folder contains backend specific code. - -``` -server/ -├── index.ts/ entry point -├── routes/ route handling logic (controllers) -├── middleware/ middlewares that are called before controllers -├── services/ methods that talk to the database -├── core/ business logic -└── prisma/ - ├── migrations/ migrations - ├── schema.prisma database models - └── seed.ts seeding script -``` - ### /shared Utilities, constants etc. that are shared between frontend and backend. diff --git a/frontend/hooks/useMySWR.ts b/frontend/hooks/useMySWR.ts deleted file mode 100644 index eb40b6beb..000000000 --- a/frontend/hooks/useMySWR.ts +++ /dev/null @@ -1,6 +0,0 @@ -import useSWR from "swr"; -import { Serialized } from "utils/types"; - -export function useMySWR(key: string | null) { - return useSWR>(key); -} diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 6956c40d4..417562a0a 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -14,7 +14,6 @@ "react": "^17.0.2", "react-dom": "^17.0.2", "react-icons": "^4.3.1", - "swr": "^1.0.1", "urql": "^2.0.5" }, "devDependencies": { @@ -5863,14 +5862,6 @@ "node": ">= 0.6.0" } }, - "node_modules/dequal": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.2.tgz", - "integrity": "sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==", - "engines": { - "node": ">=6" - } - }, "node_modules/des.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", @@ -14512,17 +14503,6 @@ "tslib": "^2.0.3" } }, - "node_modules/swr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/swr/-/swr-1.0.1.tgz", - "integrity": "sha512-EPQAxSjoD4IaM49rpRHK0q+/NzcwoT8c0/Ylu/u3/6mFj/CWnQVjNJ0MV2Iuw/U+EJSd2TX5czdAwKPYZIG0YA==", - "dependencies": { - "dequal": "2.0.2" - }, - "peerDependencies": { - "react": "^16.11.0 || ^17.0.0" - } - }, "node_modules/symbol-observable": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", @@ -20708,11 +20688,6 @@ "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", "dev": true }, - "dequal": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.2.tgz", - "integrity": "sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==" - }, "des.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", @@ -27493,14 +27468,6 @@ "tslib": "^2.0.3" } }, - "swr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/swr/-/swr-1.0.1.tgz", - "integrity": "sha512-EPQAxSjoD4IaM49rpRHK0q+/NzcwoT8c0/Ylu/u3/6mFj/CWnQVjNJ0MV2Iuw/U+EJSd2TX5czdAwKPYZIG0YA==", - "requires": { - "dequal": "2.0.2" - } - }, "symbol-observable": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index d730e1bec..30a15289e 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -17,7 +17,6 @@ "react": "^17.0.2", "react-dom": "^17.0.2", "react-icons": "^4.3.1", - "swr": "^1.0.1", "urql": "^2.0.5" }, "devDependencies": { diff --git a/frontend/pages/_app.tsx b/frontend/pages/_app.tsx index c0e466f6f..9067fc014 100644 --- a/frontend/pages/_app.tsx +++ b/frontend/pages/_app.tsx @@ -3,7 +3,6 @@ import "./_app.css"; import { AppProps } from "next/app"; import Head from "next/head"; -import { SWRConfig } from "swr"; import { Layout } from "components/layout/Layout"; import { globalCss } from "stitches.config"; import { Provider, createClient } from "urql"; @@ -42,18 +41,9 @@ export default function App(props: AppProps) { /> - - fetch(process.env.NEXT_PUBLIC_BACKEND_URL + resource, init).then( - (res) => res.json() - ), - }} - > - - - - + + + ); diff --git a/package.json b/package.json index 1c01d3839..07efd2111 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,6 @@ "version": "1.0.0", "private": true, "workspaces": [ - "server", "frontend", "api", "shared" diff --git a/server/.env.sample b/server/.env.sample deleted file mode 100644 index cbfb229ab..000000000 --- a/server/.env.sample +++ /dev/null @@ -1,6 +0,0 @@ -DATABASE_URL= -DISCORD_CLIENT_ID= -DISCORD_CLIENT_SECRET= -DISCORD_CALLBACK_URL= -FRONTEND_URL=http://localhost:3000 -NODE_ENV=development diff --git a/server/index.ts b/server/index.ts deleted file mode 100644 index 61f1f4da2..000000000 --- a/server/index.ts +++ /dev/null @@ -1,94 +0,0 @@ -import { config } from "dotenv"; -config(); - -import { App } from "@tinyhttp/app"; -import { logger } from "@tinyhttp/logger"; -import { cors } from "@tinyhttp/cors"; -import passport from "passport"; -import { Strategy as DiscordStrategy } from "passport-discord"; -import routes from "./routes/index"; -import { findUserById, upsertUser } from "./services/user"; - -const app = new App(); - -const PORT = 3001; - -validateEnvVars(); - -passport.use( - new DiscordStrategy( - { - clientID: process.env.DISCORD_CLIENT_ID!, - clientSecret: process.env.DISCORD_CLIENT_SECRET!, - callbackURL: process.env.DISCORD_CALLBACK_URL!, - scope: ["identify", "connections"], - }, - function (_accessToken, refreshToken, loggedInUser, cb) { - upsertUser({ loggedInUser, refreshToken: refreshToken }) - .then((user) => { - return cb(null, user); - }) - .catch((err) => cb(err)); - } - ) -); - -passport.serializeUser((user, done) => { - // @ts-expect-error - Mismatch of types but seems to work fine - const id = user?.id; - if (typeof id !== "number") { - return done(new Error("typeof id is not number")); - } - - done(null, id); -}); - -passport.deserializeUser(async (id, done) => { - if (typeof id !== "number") { - return done(new Error("typeof id is not number")); - } - - const user = await findUserById(id); - done(null, user); -}); - -app - .use(logger()) - .use(cors({ origin: process.env.FRONTEND_URL })) - // @ts-expect-error - Mismatch of types but seems to work fine - .use(passport.initialize()) - .get("/auth/discord", passport.authenticate("discord")) - .get( - "/auth/discord/callback", - passport.authenticate("discord", { - failureRedirect: "/login", - successRedirect: "/", - }) - ) - .use(routes) - .listen(PORT, () => - console.log(`Server ready at: https://localhost:${PORT}`) - ); - -function validateEnvVars() { - if (!process.env.FRONTEND_URL) { - throw new Error("Missing env var for setting cors"); - } - - const logInEnvVars = [ - "DISCORD_CLIENT_ID", - "DISCORD_CLIENT_SECRET", - "DISCORD_CALLBACK_URL", - ].filter((envVar) => !process.env[envVar]); - - if (logInEnvVars.length === 0) return; - - if (process.env.NODE_ENV === "development") { - console.warn( - "Missing env vars for testing logging in:", - logInEnvVars.join(", ") - ); - } else { - throw new Error("Missing env vars for logging in"); - } -} diff --git a/server/package-lock.json b/server/package-lock.json deleted file mode 100644 index 2bf76e72e..000000000 --- a/server/package-lock.json +++ /dev/null @@ -1,1685 +0,0 @@ -{ - "name": "@sendou.ink/server", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "@sendou.ink/server", - "version": "1.0.0", - "dependencies": { - "@prisma/client": "^3.3.0", - "@tinyhttp/app": "^2.0.11", - "@tinyhttp/logger": "^1.3.0", - "dotenv": "^10.0.0", - "passport": "^0.5.0", - "passport-discord": "^0.1.4" - }, - "devDependencies": { - "@tinyhttp/cors": "^2.0.0", - "@types/node": "^16.11.4", - "@types/passport": "^1.0.7", - "@types/passport-discord": "^0.1.5", - "prisma": "^3.3.0", - "ts-node": "^10.4.0", - "tsm": "^2.1.2", - "typescript": "^4.4.4" - } - }, - "node_modules/@cspotcode/source-map-consumer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", - "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", - "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-consumer": "0.8.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@prisma/client": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-3.3.0.tgz", - "integrity": "sha512-34tonDW2v74VcG1mx+k/IUGG/eSHKwDiYKfFIZgaPLq/C0h8YQxh7pro272xpOf1pt6duX1Bi90dpGijh1MYgQ==", - "hasInstallScript": true, - "dependencies": { - "@prisma/engines-version": "3.3.0-30.33838b0f78f1fe9052cf9a00e9761c9dc097a63c" - }, - "engines": { - "node": ">=12.6" - }, - "peerDependencies": { - "prisma": "*" - }, - "peerDependenciesMeta": { - "prisma": { - "optional": true - } - } - }, - "node_modules/@prisma/engines": { - "version": "3.3.0-30.33838b0f78f1fe9052cf9a00e9761c9dc097a63c", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-3.3.0-30.33838b0f78f1fe9052cf9a00e9761c9dc097a63c.tgz", - "integrity": "sha512-T3nEnRWmoneNZJPd9IBR29G8ZDUjNelA8+cG5y8/lh6vySm6ryWSNxj1s377U9YzFYyZmXiA9vK1iyxMoRff/g==", - "devOptional": true, - "hasInstallScript": true - }, - "node_modules/@prisma/engines-version": { - "version": "3.3.0-30.33838b0f78f1fe9052cf9a00e9761c9dc097a63c", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-3.3.0-30.33838b0f78f1fe9052cf9a00e9761c9dc097a63c.tgz", - "integrity": "sha512-g21xPYq0zHoJ/xUkNxIf5Hle0oiDyelZHU8gwq7J3RNVrccjbUZ28S99KT4yUabV8SQQRNSnR0QMLGMv9Eqs/A==" - }, - "node_modules/@tinyhttp/accepts": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@tinyhttp/accepts/-/accepts-2.0.4.tgz", - "integrity": "sha512-Qz+ReA+DaXCNKdzicVZhl4qUhGpLKQ8vYNMU+pm3PtSBwY32wXw+k0nh6+XBhrKnZ4/o8QeMCV5x7XTtJfW//Q==", - "dependencies": { - "es-mime-types": "^0.1.4", - "negotiator": "^0.6.2" - }, - "engines": { - "node": ">=12.4.0" - }, - "funding": { - "type": "individual", - "url": "https://github.com/tinyhttp/tinyhttp?sponsor=1" - } - }, - "node_modules/@tinyhttp/app": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@tinyhttp/app/-/app-2.0.11.tgz", - "integrity": "sha512-Ueo5+hvjoyaw5darnRan5MaOxHfliOfvI6TnCUBWV/5iWyltYSrW25SpUg49TMvQTbUd7pTAphCE6EQQoYBtbg==", - "dependencies": { - "@tinyhttp/cookie": "2.0.3", - "@tinyhttp/proxy-addr": "2.0.2", - "@tinyhttp/req": "2.0.8", - "@tinyhttp/res": "2.0.9", - "@tinyhttp/router": "2.0.3", - "header-range-parser": "^1.1.1", - "regexparam": "^2.0.0" - }, - "engines": { - "node": ">=12.x" - }, - "funding": { - "type": "individual", - "url": "https://github.com/tinyhttp/tinyhttp?sponsor=1" - } - }, - "node_modules/@tinyhttp/content-disposition": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@tinyhttp/content-disposition/-/content-disposition-2.0.4.tgz", - "integrity": "sha512-SGU8nVfDbiJa5eCA7BWUEMjSaf/b6nLQHEzuzmKhA3BIGHuBWXSIcr1dGeLopmohQoZkIQfk5psM5TOgVgrraA==", - "engines": { - "node": ">=12.4.0" - }, - "funding": { - "type": "individual", - "url": "https://github.com/tinyhttp/tinyhttp?sponsor=1" - } - }, - "node_modules/@tinyhttp/cookie": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@tinyhttp/cookie/-/cookie-2.0.3.tgz", - "integrity": "sha512-ZHvDHyNc0VwKLgFqwCNbrMObJqJHKQNnMARdPlK2+VvKVB3h/ZT5kYAXYFxxWFJFNqXaXz0E7i2kX32bMeMGUw==", - "engines": { - "node": ">=12.4.0" - }, - "funding": { - "type": "individual", - "url": "https://github.com/tinyhttp/tinyhttp?sponsor=1" - } - }, - "node_modules/@tinyhttp/cookie-signature": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@tinyhttp/cookie-signature/-/cookie-signature-2.0.2.tgz", - "integrity": "sha512-lyIdDzLILp6T2fymJn9zKBgXwlZMIUiqMUIEd4x/ZGFNvnNs/zeYDBQFdAygBtv4Bgl5Zpf6tN+e6fkj6TlMYQ==", - "engines": { - "node": ">=12.4.0" - } - }, - "node_modules/@tinyhttp/cors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tinyhttp/cors/-/cors-2.0.0.tgz", - "integrity": "sha512-IwQsPBnK+gRrhTsPA4FPOfbNzZZt8cVsOIMNFb6HzoScaiWcoLEogL0Bz/aBSm8KM13uieVXoVT6udMqhqUS2A==", - "dev": true, - "dependencies": { - "es-vary": "^0.1.1" - }, - "engines": { - "node": ">=12.4 || 14.x || >=16" - } - }, - "node_modules/@tinyhttp/encode-url": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@tinyhttp/encode-url/-/encode-url-2.0.3.tgz", - "integrity": "sha512-bAKjBLhYTZZgLphZ9B09Q8bQ39RejEiB1+3Rjjmkb/Q2cIKOWvRNTgkeQ3D6ITefxW9KMPE9eab51PPYhFbvbg==", - "engines": { - "node": ">=12.4.0" - } - }, - "node_modules/@tinyhttp/etag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@tinyhttp/etag/-/etag-2.0.2.tgz", - "integrity": "sha512-utxkv5skxWJESUAKZk7F11DcgBiE4vBXiPfnWZcGNZDa6T372V2ESUD2Y7fV85bsC1/4ZrnnmS7lg9Nd401oLw==", - "engines": { - "node": ">=12.4.0" - } - }, - "node_modules/@tinyhttp/forwarded": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@tinyhttp/forwarded/-/forwarded-2.0.2.tgz", - "integrity": "sha512-q+l7xMyN7buYjUfWbepLM36lI7FZmv+sm0arqzFGrTVWfEbKLiHTv+5c7H3O8/aYcxuyR4cBUrmwT6jw4dZhFw==", - "engines": { - "node": ">=12.4.0" - } - }, - "node_modules/@tinyhttp/logger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@tinyhttp/logger/-/logger-1.3.0.tgz", - "integrity": "sha512-u8vbW8OEPur3ZlkJGNO+Nl/xw78cdIaDAcWMUEg7o3UY9L5xezMQcLBPX8ykJLEB+Yl+BDmTvt1s1LzkwM6mNQ==", - "dependencies": { - "colorette": "^1.2.2", - "dayjs": "^1.10.4", - "http-status-emojis": "^2.2.0" - }, - "engines": { - "node": ">=12.4.0" - } - }, - "node_modules/@tinyhttp/proxy-addr": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@tinyhttp/proxy-addr/-/proxy-addr-2.0.2.tgz", - "integrity": "sha512-wuXpzG9XsUQ2/YvCL5BSvp1JXc5HIuXlVJhMqdC0wv8iKF3hHv62H5XVd/wvzo/OWgiqt4hjxA4wITzND5Ed+g==", - "dependencies": { - "@tinyhttp/forwarded": "2.0.2", - "ipaddr.js": "^2.0.1" - }, - "engines": { - "node": ">=12.4.0" - } - }, - "node_modules/@tinyhttp/req": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@tinyhttp/req/-/req-2.0.8.tgz", - "integrity": "sha512-Hndl83KEHJd2oDw2kdg1NmroYj1fjPBRpVXbgmbJ3+Yz5yInaugnbD1FAjL2sPX0ZMwDF+x3wlBrULRGQzccxw==", - "dependencies": { - "@tinyhttp/accepts": "2.0.4", - "@tinyhttp/type-is": "2.0.3", - "@tinyhttp/url": "2.0.3", - "es-fresh": "^0.0.10", - "header-range-parser": "^1.1.1" - }, - "engines": { - "node": ">=12.4.0" - } - }, - "node_modules/@tinyhttp/res": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@tinyhttp/res/-/res-2.0.9.tgz", - "integrity": "sha512-twHhwFiGah3i9erm9Ky7fIxVYTmE7qJCNp1F11XkYHx6ZrG6gNR/xDcsmde8cak+jJOrLBX62rjcSSAMUqPpZQ==", - "dependencies": { - "@tinyhttp/content-disposition": "2.0.4", - "@tinyhttp/cookie": "2.0.3", - "@tinyhttp/cookie-signature": "2.0.2", - "@tinyhttp/encode-url": "2.0.3", - "@tinyhttp/req": "2.0.8", - "@tinyhttp/send": "2.0.3", - "es-escape-html": "^0.1.1", - "es-mime-types": "^0.1.4", - "es-vary": "^0.1.1" - }, - "engines": { - "node": ">=12.4.0" - } - }, - "node_modules/@tinyhttp/router": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@tinyhttp/router/-/router-2.0.3.tgz", - "integrity": "sha512-WwZqSOv4bJmzMQgP66No0ZUiTpiysQAn6ubmsf8iqO+SWyPeKD5kemAfGnHoPl1dRtvZa4Zi+0uxxDMc963I7A==", - "engines": { - "node": ">=12.4.0" - } - }, - "node_modules/@tinyhttp/send": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@tinyhttp/send/-/send-2.0.3.tgz", - "integrity": "sha512-oU4Q6NJzXJeOVCdYbgtOFlq5viEpKUFkZVpbF5AqFD64yzPp2vX9MuiSVvrIzL9Ls2qR+OzWsrwuXIkKzjW+xg==", - "dependencies": { - "@tinyhttp/etag": "2.0.2", - "es-content-type": "^0.1.0", - "es-mime-types": "^0.1.4" - }, - "engines": { - "node": ">=12.4.0" - } - }, - "node_modules/@tinyhttp/type-is": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@tinyhttp/type-is/-/type-is-2.0.3.tgz", - "integrity": "sha512-vmOvbI7dSue4oV5JRbEpgJGgsfQE/Gd6eqEIhdeRO0jcVUzJaYx2/XvBGbBG9Mo8MGFjiEiq7qBzeOFctCmXBw==", - "dependencies": { - "es-content-type": "^0.1.0", - "es-mime-types": "^0.1.4" - }, - "engines": { - "node": ">=12.4.0" - } - }, - "node_modules/@tinyhttp/url": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@tinyhttp/url/-/url-2.0.3.tgz", - "integrity": "sha512-0KRWSE0W4hjejHJ1ksmUIIp3Rvn/6nDa5sYQ7gjwsixYQ8J8vTSOtPI7FOkH9M/evsnCGrCYp5JNBnqTjkShTw==", - "engines": { - "node": ">=12.4.0" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", - "dev": true - }, - "node_modules/@types/body-parser": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.1.tgz", - "integrity": "sha512-a6bTJ21vFOGIkwM0kzh9Yr89ziVxq4vYH2fQ6N8AeipEzai/cFK6aGMArIkUeIdRIgpwQa+2bXiLuUJCpSf2Cg==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.24", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.24.tgz", - "integrity": "sha512-3UJuW+Qxhzwjq3xhwXm2onQcFHn76frIYVbTu+kn24LFxI+dEhdfISDFovPB8VpEgW8oQCTpRuCe+0zJxB7NEA==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "16.11.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.4.tgz", - "integrity": "sha512-TMgXmy0v2xWyuCSCJM6NCna2snndD8yvQF67J29ipdzMcsPa9u+o0tjF5+EQNdhcuZplYuouYqpc4zcd5I6amQ==", - "dev": true - }, - "node_modules/@types/oauth": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@types/oauth/-/oauth-0.9.1.tgz", - "integrity": "sha512-a1iY62/a3yhZ7qH7cNUsxoI3U/0Fe9+RnuFrpTKr+0WVOzbKlSLojShCKe20aOD1Sppv+i8Zlq0pLDuTJnwS4A==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/passport": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/passport/-/passport-1.0.7.tgz", - "integrity": "sha512-JtswU8N3kxBYgo+n9of7C97YQBT+AYPP2aBfNGTzABqPAZnK/WOAaKfh3XesUYMZRrXFuoPc2Hv0/G/nQFveHw==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/passport-discord": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@types/passport-discord/-/passport-discord-0.1.5.tgz", - "integrity": "sha512-hq/EcxU+gKaGdgTAX9LDMEt+/FmDJphq84qRUt5jt553a5RPCwxonb7QwOZUO3XBhzLTXIbJmPQd5/5bTXJnyA==", - "dev": true, - "dependencies": { - "@types/express": "*", - "@types/passport": "*", - "@types/passport-oauth2": "*" - } - }, - "node_modules/@types/passport-oauth2": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@types/passport-oauth2/-/passport-oauth2-1.4.11.tgz", - "integrity": "sha512-KUNwmGhe/3xPbjkzkPwwcPmyFwfyiSgtV1qOrPBLaU4i4q9GSCdAOyCbkFG0gUxAyEmYwqo9OAF/rjPjJ6ImdA==", - "dev": true, - "dependencies": { - "@types/express": "*", - "@types/oauth": "*", - "@types/passport": "*" - } - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "node_modules/@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", - "dev": true, - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/dayjs": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", - "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==" - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "engines": { - "node": ">=10" - } - }, - "node_modules/es-content-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/es-content-type/-/es-content-type-0.1.0.tgz", - "integrity": "sha512-DqWU9pSzhNlO10q+NQ/KebImLkKbwbcy0pSv3hNQfEpKFHsrqDJz2vajpZdq7nkiG9DoJcTh22oHGymp7XJd9g==", - "engines": { - "node": ">=12.x" - } - }, - "node_modules/es-escape-html": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/es-escape-html/-/es-escape-html-0.1.1.tgz", - "integrity": "sha512-yUx1o+8RsG7UlszmYPtks+dm6Lho2m8lgHMOsLJQsFI0R8XwUJwiMhM1M4E/S8QLeGyf6MkDV/pWgjQ0tdTSyQ==", - "engines": { - "node": ">=12.x" - } - }, - "node_modules/es-fresh": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/es-fresh/-/es-fresh-0.0.10.tgz", - "integrity": "sha512-/e5etUqtxj7JktALldpsDNC84DOHavN9PqojnTTGeX1M2/Q4/SF8d55d7AsB3n66WYS43hdBbn0sAllto5kSIg==", - "engines": { - "node": ">=12.x" - } - }, - "node_modules/es-mime-types": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/es-mime-types/-/es-mime-types-0.1.4.tgz", - "integrity": "sha512-rUrmfrUIHU/4ykYB+YH80LDiSpmn6sE/A9E8EsFZP4LCtf/PH+ju6d6goFJ8fsGf81pRtQn1cJSmp8JGA9YkfQ==", - "dependencies": { - "mime-db": "^1.50.0" - }, - "engines": { - "node": ">=12.x" - } - }, - "node_modules/es-vary": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/es-vary/-/es-vary-0.1.1.tgz", - "integrity": "sha512-4UOWrTu8lz5otSyWxcS0LbYz8WyYOEiWHGkBIu0VfhTsY+vtc7+fOSDHsxtEUBeu7mDnTwqsKg5NEXeq5Da1Hg==", - "engines": { - "node": ">=12.x" - } - }, - "node_modules/esbuild": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.8.tgz", - "integrity": "sha512-A4af7G7YZLfG5OnARJRMtlpEsCkq/zHZQXewgPA864l9D6VjjbH1SuFYK/OSV6BtHwDGkdwyRrX0qQFLnMfUcw==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "optionalDependencies": { - "esbuild-android-arm64": "0.13.8", - "esbuild-darwin-64": "0.13.8", - "esbuild-darwin-arm64": "0.13.8", - "esbuild-freebsd-64": "0.13.8", - "esbuild-freebsd-arm64": "0.13.8", - "esbuild-linux-32": "0.13.8", - "esbuild-linux-64": "0.13.8", - "esbuild-linux-arm": "0.13.8", - "esbuild-linux-arm64": "0.13.8", - "esbuild-linux-mips64le": "0.13.8", - "esbuild-linux-ppc64le": "0.13.8", - "esbuild-netbsd-64": "0.13.8", - "esbuild-openbsd-64": "0.13.8", - "esbuild-sunos-64": "0.13.8", - "esbuild-windows-32": "0.13.8", - "esbuild-windows-64": "0.13.8", - "esbuild-windows-arm64": "0.13.8" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.8.tgz", - "integrity": "sha512-AilbChndywpk7CdKkNSZ9klxl+9MboLctXd9LwLo3b0dawmOF/i/t2U5d8LM6SbT1Xw36F8yngSUPrd8yPs2RA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/esbuild-darwin-64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.8.tgz", - "integrity": "sha512-b6sdiT84zV5LVaoF+UoMVGJzR/iE2vNUfUDfFQGrm4LBwM/PWXweKpuu6RD9mcyCq18cLxkP6w/LD/w9DtX3ng==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.8.tgz", - "integrity": "sha512-R8YuPiiJayuJJRUBG4H0VwkEKo6AvhJs2m7Tl0JaIer3u1FHHXwGhMxjJDmK+kXwTFPriSysPvcobXC/UrrZCQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.8.tgz", - "integrity": "sha512-zBn6urrn8FnKC+YSgDxdof9jhPCeU8kR/qaamlV4gI8R3KUaUK162WYM7UyFVAlj9N0MyD3AtB+hltzu4cysTw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.8.tgz", - "integrity": "sha512-pWW2slN7lGlkx0MOEBoUGwRX5UgSCLq3dy2c8RIOpiHtA87xAUpDBvZK10MykbT+aMfXc0NI2lu1X+6kI34xng==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/esbuild-linux-32": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.8.tgz", - "integrity": "sha512-T0I0ueeKVO/Is0CAeSEOG9s2jeNNb8jrrMwG9QBIm3UU18MRB60ERgkS2uV3fZ1vP2F8i3Z2e3Zju4lg9dhVmw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/esbuild-linux-64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.8.tgz", - "integrity": "sha512-Bm8SYmFtvfDCIu9sjKppFXzRXn2BVpuCinU1ChTuMtdKI/7aPpXIrkqBNOgPTOQO9AylJJc1Zw6EvtKORhn64w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/esbuild-linux-arm": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.8.tgz", - "integrity": "sha512-4/HfcC40LJ4GPyboHA+db0jpFarTB628D1ifU+/5bunIgY+t6mHkJWyxWxAAE8wl/ZIuRYB9RJFdYpu1AXGPdg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.8.tgz", - "integrity": "sha512-X4pWZ+SL+FJ09chWFgRNO3F+YtvAQRcWh0uxKqZSWKiWodAB20flsW/OWFYLXBKiVCTeoGMvENZS/GeVac7+tQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.8.tgz", - "integrity": "sha512-o7e0D+sqHKT31v+mwFircJFjwSKVd2nbkHEn4l9xQ1hLR+Bv8rnt3HqlblY3+sBdlrOTGSwz0ReROlKUMJyldA==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.8.tgz", - "integrity": "sha512-eZSQ0ERsWkukJp2px/UWJHVNuy0lMoz/HZcRWAbB6reoaBw7S9vMzYNUnflfL3XA6WDs+dZn3ekHE4Y2uWLGig==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.8.tgz", - "integrity": "sha512-gZX4kP7gVvOrvX0ZwgHmbuHczQUwqYppxqtoyC7VNd80t5nBHOFXVhWo2Ad/Lms0E8b+wwgI/WjZFTCpUHOg9Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ] - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.8.tgz", - "integrity": "sha512-afzza308X4WmcebexbTzAgfEWt9MUkdTvwIa8xOu4CM2qGbl2LanqEl8/LUs8jh6Gqw6WsicEK52GPrS9wvkcw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ] - }, - "node_modules/esbuild-sunos-64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.8.tgz", - "integrity": "sha512-mWPZibmBbuMKD+LDN23LGcOZ2EawMYBONMXXHmbuxeT0XxCNwadbCVwUQ/2p5Dp5Kvf6mhrlIffcnWOiCBpiVw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ] - }, - "node_modules/esbuild-windows-32": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.8.tgz", - "integrity": "sha512-QsZ1HnWIcnIEApETZWw8HlOhDSWqdZX2SylU7IzGxOYyVcX7QI06ety/aDcn437mwyO7Ph4RrbhB+2ntM8kX8A==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/esbuild-windows-64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.8.tgz", - "integrity": "sha512-76Fb57B9eE/JmJi1QmUW0tRLQZfGo0it+JeYoCDTSlbTn7LV44ecOHIMJSSgZADUtRMWT9z0Kz186bnaB3amSg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/esbuild-windows-arm64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.8.tgz", - "integrity": "sha512-HW6Mtq5eTudllxY2YgT62MrVcn7oq2o8TAoAvDUhyiEmRmDY8tPwAhb1vxw5/cdkbukM3KdMYtksnUhF/ekWeg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/header-range-parser": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/header-range-parser/-/header-range-parser-1.1.1.tgz", - "integrity": "sha512-aVuAHdlgxPCMkOtKTdUoH72eAHEAqmZqA+oQxvDv1DkYS50KgCt218AYd89/+Pd7+TFQimzn/9LNVfUPEBbRDQ==", - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/http-status-emojis": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/http-status-emojis/-/http-status-emojis-2.2.0.tgz", - "integrity": "sha512-ompKtgwpx8ff0hsbpIB7oE4ax1LXoHmftsHHStMELX56ivG3GhofTX8ZHWlUaFKfGjcGjw6G3rPk7dJRXMmbbg==" - }, - "node_modules/ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/mime-db": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", - "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/oauth": { - "version": "0.9.15", - "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", - "integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE=" - }, - "node_modules/passport": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/passport/-/passport-0.5.0.tgz", - "integrity": "sha512-ln+ue5YaNDS+fes6O5PCzXKSseY5u8MYhX9H5Co4s+HfYI5oqvnHKoOORLYDUPh+8tHvrxugF2GFcUA1Q1Gqfg==", - "dependencies": { - "passport-strategy": "1.x.x", - "pause": "0.0.1" - }, - "engines": { - "node": ">= 0.4.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/jaredhanson" - } - }, - "node_modules/passport-discord": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/passport-discord/-/passport-discord-0.1.4.tgz", - "integrity": "sha512-VJWPYqSOmh7SaCLw/C+k1ZqCzJnn2frrmQRx1YrcPJ3MQ+Oa31XclbbmqFICSvl8xv3Fqd6YWQ4H4p1MpIN9rA==", - "dependencies": { - "passport-oauth2": "^1.5.0" - } - }, - "node_modules/passport-oauth2": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.6.1.tgz", - "integrity": "sha512-ZbV43Hq9d/SBSYQ22GOiglFsjsD1YY/qdiptA+8ej+9C1dL1TVB+mBE5kDH/D4AJo50+2i8f4bx0vg4/yDDZCQ==", - "dependencies": { - "base64url": "3.x.x", - "oauth": "0.9.x", - "passport-strategy": "1.x.x", - "uid2": "0.0.x", - "utils-merge": "1.x.x" - }, - "engines": { - "node": ">= 0.4.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/jaredhanson" - } - }, - "node_modules/passport-strategy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", - "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/pause": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", - "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" - }, - "node_modules/prisma": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-3.3.0.tgz", - "integrity": "sha512-E7C9mXRwZVpcnSeJT533qGHUVrYULsE9ihFvAtQMuxhTXkxoRlMLyo/1ZOyeu9GdXP8DJ7ruLOw06kEs/N3dVg==", - "devOptional": true, - "hasInstallScript": true, - "dependencies": { - "@prisma/engines": "3.3.0-30.33838b0f78f1fe9052cf9a00e9761c9dc097a63c" - }, - "bin": { - "prisma": "build/index.js", - "prisma2": "build/index.js" - }, - "engines": { - "node": ">=12.6" - } - }, - "node_modules/regexparam": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexparam/-/regexparam-2.0.0.tgz", - "integrity": "sha512-gJKwd2MVPWHAIFLsaYDZfyKzHNS4o7E/v8YmNf44vmeV2e4YfVoDToTOKTvE7ab68cRJ++kLuEXJBaEeJVt5ow==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-node": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", - "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "0.7.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/tsm": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/tsm/-/tsm-2.1.2.tgz", - "integrity": "sha512-1jF8LNTRcPsw15ajZK2ra3RA2PSCdVGvJzF/Q1TCsu1tH2dY59HgNWxhttN2s1mfJUFoattjf9QZ410u5bgtJQ==", - "dev": true, - "dependencies": { - "esbuild": "^0.13.4" - }, - "bin": { - "tsm": "bin.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/typescript": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", - "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/uid2": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz", - "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - } - }, - "dependencies": { - "@cspotcode/source-map-consumer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", - "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", - "dev": true - }, - "@cspotcode/source-map-support": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", - "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", - "dev": true, - "requires": { - "@cspotcode/source-map-consumer": "0.8.0" - } - }, - "@prisma/client": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-3.3.0.tgz", - "integrity": "sha512-34tonDW2v74VcG1mx+k/IUGG/eSHKwDiYKfFIZgaPLq/C0h8YQxh7pro272xpOf1pt6duX1Bi90dpGijh1MYgQ==", - "requires": { - "@prisma/engines-version": "3.3.0-30.33838b0f78f1fe9052cf9a00e9761c9dc097a63c" - } - }, - "@prisma/engines": { - "version": "3.3.0-30.33838b0f78f1fe9052cf9a00e9761c9dc097a63c", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-3.3.0-30.33838b0f78f1fe9052cf9a00e9761c9dc097a63c.tgz", - "integrity": "sha512-T3nEnRWmoneNZJPd9IBR29G8ZDUjNelA8+cG5y8/lh6vySm6ryWSNxj1s377U9YzFYyZmXiA9vK1iyxMoRff/g==", - "devOptional": true - }, - "@prisma/engines-version": { - "version": "3.3.0-30.33838b0f78f1fe9052cf9a00e9761c9dc097a63c", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-3.3.0-30.33838b0f78f1fe9052cf9a00e9761c9dc097a63c.tgz", - "integrity": "sha512-g21xPYq0zHoJ/xUkNxIf5Hle0oiDyelZHU8gwq7J3RNVrccjbUZ28S99KT4yUabV8SQQRNSnR0QMLGMv9Eqs/A==" - }, - "@tinyhttp/accepts": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@tinyhttp/accepts/-/accepts-2.0.4.tgz", - "integrity": "sha512-Qz+ReA+DaXCNKdzicVZhl4qUhGpLKQ8vYNMU+pm3PtSBwY32wXw+k0nh6+XBhrKnZ4/o8QeMCV5x7XTtJfW//Q==", - "requires": { - "es-mime-types": "^0.1.4", - "negotiator": "^0.6.2" - } - }, - "@tinyhttp/app": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@tinyhttp/app/-/app-2.0.11.tgz", - "integrity": "sha512-Ueo5+hvjoyaw5darnRan5MaOxHfliOfvI6TnCUBWV/5iWyltYSrW25SpUg49TMvQTbUd7pTAphCE6EQQoYBtbg==", - "requires": { - "@tinyhttp/cookie": "2.0.3", - "@tinyhttp/proxy-addr": "2.0.2", - "@tinyhttp/req": "2.0.8", - "@tinyhttp/res": "2.0.9", - "@tinyhttp/router": "2.0.3", - "header-range-parser": "^1.1.1", - "regexparam": "^2.0.0" - } - }, - "@tinyhttp/content-disposition": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@tinyhttp/content-disposition/-/content-disposition-2.0.4.tgz", - "integrity": "sha512-SGU8nVfDbiJa5eCA7BWUEMjSaf/b6nLQHEzuzmKhA3BIGHuBWXSIcr1dGeLopmohQoZkIQfk5psM5TOgVgrraA==" - }, - "@tinyhttp/cookie": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@tinyhttp/cookie/-/cookie-2.0.3.tgz", - "integrity": "sha512-ZHvDHyNc0VwKLgFqwCNbrMObJqJHKQNnMARdPlK2+VvKVB3h/ZT5kYAXYFxxWFJFNqXaXz0E7i2kX32bMeMGUw==" - }, - "@tinyhttp/cookie-signature": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@tinyhttp/cookie-signature/-/cookie-signature-2.0.2.tgz", - "integrity": "sha512-lyIdDzLILp6T2fymJn9zKBgXwlZMIUiqMUIEd4x/ZGFNvnNs/zeYDBQFdAygBtv4Bgl5Zpf6tN+e6fkj6TlMYQ==" - }, - "@tinyhttp/cors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tinyhttp/cors/-/cors-2.0.0.tgz", - "integrity": "sha512-IwQsPBnK+gRrhTsPA4FPOfbNzZZt8cVsOIMNFb6HzoScaiWcoLEogL0Bz/aBSm8KM13uieVXoVT6udMqhqUS2A==", - "dev": true, - "requires": { - "es-vary": "^0.1.1" - } - }, - "@tinyhttp/encode-url": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@tinyhttp/encode-url/-/encode-url-2.0.3.tgz", - "integrity": "sha512-bAKjBLhYTZZgLphZ9B09Q8bQ39RejEiB1+3Rjjmkb/Q2cIKOWvRNTgkeQ3D6ITefxW9KMPE9eab51PPYhFbvbg==" - }, - "@tinyhttp/etag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@tinyhttp/etag/-/etag-2.0.2.tgz", - "integrity": "sha512-utxkv5skxWJESUAKZk7F11DcgBiE4vBXiPfnWZcGNZDa6T372V2ESUD2Y7fV85bsC1/4ZrnnmS7lg9Nd401oLw==" - }, - "@tinyhttp/forwarded": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@tinyhttp/forwarded/-/forwarded-2.0.2.tgz", - "integrity": "sha512-q+l7xMyN7buYjUfWbepLM36lI7FZmv+sm0arqzFGrTVWfEbKLiHTv+5c7H3O8/aYcxuyR4cBUrmwT6jw4dZhFw==" - }, - "@tinyhttp/logger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@tinyhttp/logger/-/logger-1.3.0.tgz", - "integrity": "sha512-u8vbW8OEPur3ZlkJGNO+Nl/xw78cdIaDAcWMUEg7o3UY9L5xezMQcLBPX8ykJLEB+Yl+BDmTvt1s1LzkwM6mNQ==", - "requires": { - "colorette": "^1.2.2", - "dayjs": "^1.10.4", - "http-status-emojis": "^2.2.0" - } - }, - "@tinyhttp/proxy-addr": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@tinyhttp/proxy-addr/-/proxy-addr-2.0.2.tgz", - "integrity": "sha512-wuXpzG9XsUQ2/YvCL5BSvp1JXc5HIuXlVJhMqdC0wv8iKF3hHv62H5XVd/wvzo/OWgiqt4hjxA4wITzND5Ed+g==", - "requires": { - "@tinyhttp/forwarded": "2.0.2", - "ipaddr.js": "^2.0.1" - } - }, - "@tinyhttp/req": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@tinyhttp/req/-/req-2.0.8.tgz", - "integrity": "sha512-Hndl83KEHJd2oDw2kdg1NmroYj1fjPBRpVXbgmbJ3+Yz5yInaugnbD1FAjL2sPX0ZMwDF+x3wlBrULRGQzccxw==", - "requires": { - "@tinyhttp/accepts": "2.0.4", - "@tinyhttp/type-is": "2.0.3", - "@tinyhttp/url": "2.0.3", - "es-fresh": "^0.0.10", - "header-range-parser": "^1.1.1" - } - }, - "@tinyhttp/res": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@tinyhttp/res/-/res-2.0.9.tgz", - "integrity": "sha512-twHhwFiGah3i9erm9Ky7fIxVYTmE7qJCNp1F11XkYHx6ZrG6gNR/xDcsmde8cak+jJOrLBX62rjcSSAMUqPpZQ==", - "requires": { - "@tinyhttp/content-disposition": "2.0.4", - "@tinyhttp/cookie": "2.0.3", - "@tinyhttp/cookie-signature": "2.0.2", - "@tinyhttp/encode-url": "2.0.3", - "@tinyhttp/req": "2.0.8", - "@tinyhttp/send": "2.0.3", - "es-escape-html": "^0.1.1", - "es-mime-types": "^0.1.4", - "es-vary": "^0.1.1" - } - }, - "@tinyhttp/router": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@tinyhttp/router/-/router-2.0.3.tgz", - "integrity": "sha512-WwZqSOv4bJmzMQgP66No0ZUiTpiysQAn6ubmsf8iqO+SWyPeKD5kemAfGnHoPl1dRtvZa4Zi+0uxxDMc963I7A==" - }, - "@tinyhttp/send": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@tinyhttp/send/-/send-2.0.3.tgz", - "integrity": "sha512-oU4Q6NJzXJeOVCdYbgtOFlq5viEpKUFkZVpbF5AqFD64yzPp2vX9MuiSVvrIzL9Ls2qR+OzWsrwuXIkKzjW+xg==", - "requires": { - "@tinyhttp/etag": "2.0.2", - "es-content-type": "^0.1.0", - "es-mime-types": "^0.1.4" - } - }, - "@tinyhttp/type-is": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@tinyhttp/type-is/-/type-is-2.0.3.tgz", - "integrity": "sha512-vmOvbI7dSue4oV5JRbEpgJGgsfQE/Gd6eqEIhdeRO0jcVUzJaYx2/XvBGbBG9Mo8MGFjiEiq7qBzeOFctCmXBw==", - "requires": { - "es-content-type": "^0.1.0", - "es-mime-types": "^0.1.4" - } - }, - "@tinyhttp/url": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@tinyhttp/url/-/url-2.0.3.tgz", - "integrity": "sha512-0KRWSE0W4hjejHJ1ksmUIIp3Rvn/6nDa5sYQ7gjwsixYQ8J8vTSOtPI7FOkH9M/evsnCGrCYp5JNBnqTjkShTw==" - }, - "@tsconfig/node10": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", - "dev": true - }, - "@types/body-parser": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.1.tgz", - "integrity": "sha512-a6bTJ21vFOGIkwM0kzh9Yr89ziVxq4vYH2fQ6N8AeipEzai/cFK6aGMArIkUeIdRIgpwQa+2bXiLuUJCpSf2Cg==", - "dev": true, - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "dev": true, - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.24", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.24.tgz", - "integrity": "sha512-3UJuW+Qxhzwjq3xhwXm2onQcFHn76frIYVbTu+kn24LFxI+dEhdfISDFovPB8VpEgW8oQCTpRuCe+0zJxB7NEA==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "@types/node": { - "version": "16.11.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.4.tgz", - "integrity": "sha512-TMgXmy0v2xWyuCSCJM6NCna2snndD8yvQF67J29ipdzMcsPa9u+o0tjF5+EQNdhcuZplYuouYqpc4zcd5I6amQ==", - "dev": true - }, - "@types/oauth": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@types/oauth/-/oauth-0.9.1.tgz", - "integrity": "sha512-a1iY62/a3yhZ7qH7cNUsxoI3U/0Fe9+RnuFrpTKr+0WVOzbKlSLojShCKe20aOD1Sppv+i8Zlq0pLDuTJnwS4A==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/passport": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/passport/-/passport-1.0.7.tgz", - "integrity": "sha512-JtswU8N3kxBYgo+n9of7C97YQBT+AYPP2aBfNGTzABqPAZnK/WOAaKfh3XesUYMZRrXFuoPc2Hv0/G/nQFveHw==", - "dev": true, - "requires": { - "@types/express": "*" - } - }, - "@types/passport-discord": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@types/passport-discord/-/passport-discord-0.1.5.tgz", - "integrity": "sha512-hq/EcxU+gKaGdgTAX9LDMEt+/FmDJphq84qRUt5jt553a5RPCwxonb7QwOZUO3XBhzLTXIbJmPQd5/5bTXJnyA==", - "dev": true, - "requires": { - "@types/express": "*", - "@types/passport": "*", - "@types/passport-oauth2": "*" - } - }, - "@types/passport-oauth2": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@types/passport-oauth2/-/passport-oauth2-1.4.11.tgz", - "integrity": "sha512-KUNwmGhe/3xPbjkzkPwwcPmyFwfyiSgtV1qOrPBLaU4i4q9GSCdAOyCbkFG0gUxAyEmYwqo9OAF/rjPjJ6ImdA==", - "dev": true, - "requires": { - "@types/express": "*", - "@types/oauth": "*", - "@types/passport": "*" - } - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", - "dev": true, - "requires": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", - "dev": true - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" - }, - "colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "dayjs": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", - "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==" - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" - }, - "es-content-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/es-content-type/-/es-content-type-0.1.0.tgz", - "integrity": "sha512-DqWU9pSzhNlO10q+NQ/KebImLkKbwbcy0pSv3hNQfEpKFHsrqDJz2vajpZdq7nkiG9DoJcTh22oHGymp7XJd9g==" - }, - "es-escape-html": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/es-escape-html/-/es-escape-html-0.1.1.tgz", - "integrity": "sha512-yUx1o+8RsG7UlszmYPtks+dm6Lho2m8lgHMOsLJQsFI0R8XwUJwiMhM1M4E/S8QLeGyf6MkDV/pWgjQ0tdTSyQ==" - }, - "es-fresh": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/es-fresh/-/es-fresh-0.0.10.tgz", - "integrity": "sha512-/e5etUqtxj7JktALldpsDNC84DOHavN9PqojnTTGeX1M2/Q4/SF8d55d7AsB3n66WYS43hdBbn0sAllto5kSIg==" - }, - "es-mime-types": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/es-mime-types/-/es-mime-types-0.1.4.tgz", - "integrity": "sha512-rUrmfrUIHU/4ykYB+YH80LDiSpmn6sE/A9E8EsFZP4LCtf/PH+ju6d6goFJ8fsGf81pRtQn1cJSmp8JGA9YkfQ==", - "requires": { - "mime-db": "^1.50.0" - } - }, - "es-vary": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/es-vary/-/es-vary-0.1.1.tgz", - "integrity": "sha512-4UOWrTu8lz5otSyWxcS0LbYz8WyYOEiWHGkBIu0VfhTsY+vtc7+fOSDHsxtEUBeu7mDnTwqsKg5NEXeq5Da1Hg==" - }, - "esbuild": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.8.tgz", - "integrity": "sha512-A4af7G7YZLfG5OnARJRMtlpEsCkq/zHZQXewgPA864l9D6VjjbH1SuFYK/OSV6BtHwDGkdwyRrX0qQFLnMfUcw==", - "dev": true, - "requires": { - "esbuild-android-arm64": "0.13.8", - "esbuild-darwin-64": "0.13.8", - "esbuild-darwin-arm64": "0.13.8", - "esbuild-freebsd-64": "0.13.8", - "esbuild-freebsd-arm64": "0.13.8", - "esbuild-linux-32": "0.13.8", - "esbuild-linux-64": "0.13.8", - "esbuild-linux-arm": "0.13.8", - "esbuild-linux-arm64": "0.13.8", - "esbuild-linux-mips64le": "0.13.8", - "esbuild-linux-ppc64le": "0.13.8", - "esbuild-netbsd-64": "0.13.8", - "esbuild-openbsd-64": "0.13.8", - "esbuild-sunos-64": "0.13.8", - "esbuild-windows-32": "0.13.8", - "esbuild-windows-64": "0.13.8", - "esbuild-windows-arm64": "0.13.8" - } - }, - "esbuild-android-arm64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.8.tgz", - "integrity": "sha512-AilbChndywpk7CdKkNSZ9klxl+9MboLctXd9LwLo3b0dawmOF/i/t2U5d8LM6SbT1Xw36F8yngSUPrd8yPs2RA==", - "dev": true, - "optional": true - }, - "esbuild-darwin-64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.8.tgz", - "integrity": "sha512-b6sdiT84zV5LVaoF+UoMVGJzR/iE2vNUfUDfFQGrm4LBwM/PWXweKpuu6RD9mcyCq18cLxkP6w/LD/w9DtX3ng==", - "dev": true, - "optional": true - }, - "esbuild-darwin-arm64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.8.tgz", - "integrity": "sha512-R8YuPiiJayuJJRUBG4H0VwkEKo6AvhJs2m7Tl0JaIer3u1FHHXwGhMxjJDmK+kXwTFPriSysPvcobXC/UrrZCQ==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.8.tgz", - "integrity": "sha512-zBn6urrn8FnKC+YSgDxdof9jhPCeU8kR/qaamlV4gI8R3KUaUK162WYM7UyFVAlj9N0MyD3AtB+hltzu4cysTw==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-arm64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.8.tgz", - "integrity": "sha512-pWW2slN7lGlkx0MOEBoUGwRX5UgSCLq3dy2c8RIOpiHtA87xAUpDBvZK10MykbT+aMfXc0NI2lu1X+6kI34xng==", - "dev": true, - "optional": true - }, - "esbuild-linux-32": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.8.tgz", - "integrity": "sha512-T0I0ueeKVO/Is0CAeSEOG9s2jeNNb8jrrMwG9QBIm3UU18MRB60ERgkS2uV3fZ1vP2F8i3Z2e3Zju4lg9dhVmw==", - "dev": true, - "optional": true - }, - "esbuild-linux-64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.8.tgz", - "integrity": "sha512-Bm8SYmFtvfDCIu9sjKppFXzRXn2BVpuCinU1ChTuMtdKI/7aPpXIrkqBNOgPTOQO9AylJJc1Zw6EvtKORhn64w==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.8.tgz", - "integrity": "sha512-4/HfcC40LJ4GPyboHA+db0jpFarTB628D1ifU+/5bunIgY+t6mHkJWyxWxAAE8wl/ZIuRYB9RJFdYpu1AXGPdg==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.8.tgz", - "integrity": "sha512-X4pWZ+SL+FJ09chWFgRNO3F+YtvAQRcWh0uxKqZSWKiWodAB20flsW/OWFYLXBKiVCTeoGMvENZS/GeVac7+tQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-mips64le": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.8.tgz", - "integrity": "sha512-o7e0D+sqHKT31v+mwFircJFjwSKVd2nbkHEn4l9xQ1hLR+Bv8rnt3HqlblY3+sBdlrOTGSwz0ReROlKUMJyldA==", - "dev": true, - "optional": true - }, - "esbuild-linux-ppc64le": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.8.tgz", - "integrity": "sha512-eZSQ0ERsWkukJp2px/UWJHVNuy0lMoz/HZcRWAbB6reoaBw7S9vMzYNUnflfL3XA6WDs+dZn3ekHE4Y2uWLGig==", - "dev": true, - "optional": true - }, - "esbuild-netbsd-64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.8.tgz", - "integrity": "sha512-gZX4kP7gVvOrvX0ZwgHmbuHczQUwqYppxqtoyC7VNd80t5nBHOFXVhWo2Ad/Lms0E8b+wwgI/WjZFTCpUHOg9Q==", - "dev": true, - "optional": true - }, - "esbuild-openbsd-64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.8.tgz", - "integrity": "sha512-afzza308X4WmcebexbTzAgfEWt9MUkdTvwIa8xOu4CM2qGbl2LanqEl8/LUs8jh6Gqw6WsicEK52GPrS9wvkcw==", - "dev": true, - "optional": true - }, - "esbuild-sunos-64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.8.tgz", - "integrity": "sha512-mWPZibmBbuMKD+LDN23LGcOZ2EawMYBONMXXHmbuxeT0XxCNwadbCVwUQ/2p5Dp5Kvf6mhrlIffcnWOiCBpiVw==", - "dev": true, - "optional": true - }, - "esbuild-windows-32": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.8.tgz", - "integrity": "sha512-QsZ1HnWIcnIEApETZWw8HlOhDSWqdZX2SylU7IzGxOYyVcX7QI06ety/aDcn437mwyO7Ph4RrbhB+2ntM8kX8A==", - "dev": true, - "optional": true - }, - "esbuild-windows-64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.8.tgz", - "integrity": "sha512-76Fb57B9eE/JmJi1QmUW0tRLQZfGo0it+JeYoCDTSlbTn7LV44ecOHIMJSSgZADUtRMWT9z0Kz186bnaB3amSg==", - "dev": true, - "optional": true - }, - "esbuild-windows-arm64": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.8.tgz", - "integrity": "sha512-HW6Mtq5eTudllxY2YgT62MrVcn7oq2o8TAoAvDUhyiEmRmDY8tPwAhb1vxw5/cdkbukM3KdMYtksnUhF/ekWeg==", - "dev": true, - "optional": true - }, - "header-range-parser": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/header-range-parser/-/header-range-parser-1.1.1.tgz", - "integrity": "sha512-aVuAHdlgxPCMkOtKTdUoH72eAHEAqmZqA+oQxvDv1DkYS50KgCt218AYd89/+Pd7+TFQimzn/9LNVfUPEBbRDQ==" - }, - "http-status-emojis": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/http-status-emojis/-/http-status-emojis-2.2.0.tgz", - "integrity": "sha512-ompKtgwpx8ff0hsbpIB7oE4ax1LXoHmftsHHStMELX56ivG3GhofTX8ZHWlUaFKfGjcGjw6G3rPk7dJRXMmbbg==" - }, - "ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==" - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "mime-db": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", - "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==" - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - }, - "oauth": { - "version": "0.9.15", - "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", - "integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE=" - }, - "passport": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/passport/-/passport-0.5.0.tgz", - "integrity": "sha512-ln+ue5YaNDS+fes6O5PCzXKSseY5u8MYhX9H5Co4s+HfYI5oqvnHKoOORLYDUPh+8tHvrxugF2GFcUA1Q1Gqfg==", - "requires": { - "passport-strategy": "1.x.x", - "pause": "0.0.1" - } - }, - "passport-discord": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/passport-discord/-/passport-discord-0.1.4.tgz", - "integrity": "sha512-VJWPYqSOmh7SaCLw/C+k1ZqCzJnn2frrmQRx1YrcPJ3MQ+Oa31XclbbmqFICSvl8xv3Fqd6YWQ4H4p1MpIN9rA==", - "requires": { - "passport-oauth2": "^1.5.0" - } - }, - "passport-oauth2": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.6.1.tgz", - "integrity": "sha512-ZbV43Hq9d/SBSYQ22GOiglFsjsD1YY/qdiptA+8ej+9C1dL1TVB+mBE5kDH/D4AJo50+2i8f4bx0vg4/yDDZCQ==", - "requires": { - "base64url": "3.x.x", - "oauth": "0.9.x", - "passport-strategy": "1.x.x", - "uid2": "0.0.x", - "utils-merge": "1.x.x" - } - }, - "passport-strategy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", - "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=" - }, - "pause": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", - "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" - }, - "prisma": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-3.3.0.tgz", - "integrity": "sha512-E7C9mXRwZVpcnSeJT533qGHUVrYULsE9ihFvAtQMuxhTXkxoRlMLyo/1ZOyeu9GdXP8DJ7ruLOw06kEs/N3dVg==", - "devOptional": true, - "requires": { - "@prisma/engines": "3.3.0-30.33838b0f78f1fe9052cf9a00e9761c9dc097a63c" - } - }, - "regexparam": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexparam/-/regexparam-2.0.0.tgz", - "integrity": "sha512-gJKwd2MVPWHAIFLsaYDZfyKzHNS4o7E/v8YmNf44vmeV2e4YfVoDToTOKTvE7ab68cRJ++kLuEXJBaEeJVt5ow==" - }, - "ts-node": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", - "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", - "dev": true, - "requires": { - "@cspotcode/source-map-support": "0.7.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "yn": "3.1.1" - } - }, - "tsm": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/tsm/-/tsm-2.1.2.tgz", - "integrity": "sha512-1jF8LNTRcPsw15ajZK2ra3RA2PSCdVGvJzF/Q1TCsu1tH2dY59HgNWxhttN2s1mfJUFoattjf9QZ410u5bgtJQ==", - "dev": true, - "requires": { - "esbuild": "^0.13.4" - } - }, - "typescript": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", - "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", - "dev": true - }, - "uid2": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz", - "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - } - } -} diff --git a/server/package.json b/server/package.json deleted file mode 100644 index 5e904c81d..000000000 --- a/server/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "@sendou.ink/server", - "version": "1.0.0", - "scripts": { - "dev": "tsm index.ts", - "migration:create": "npx prisma migrate dev --create-only", - "migration:apply:dev": "npx prisma migrate dev", - "migration:apply:prod": "npx prisma migrate deploy", - "seed": "npx prisma migrate reset" - }, - "dependencies": { - "@prisma/client": "^3.3.0", - "@tinyhttp/app": "^2.0.11", - "@tinyhttp/logger": "^1.3.0", - "dotenv": "^10.0.0", - "passport": "^0.5.0", - "passport-discord": "^0.1.4" - }, - "devDependencies": { - "@tinyhttp/cors": "^2.0.0", - "@types/node": "^16.11.4", - "@types/passport": "^1.0.7", - "@types/passport-discord": "^0.1.5", - "prisma": "^3.3.0", - "ts-node": "^10.4.0", - "tsm": "^2.1.2", - "typescript": "^4.4.4" - }, - "type": "module", - "prisma": { - "seed": "node --loader ts-node/esm prisma/seed.ts" - } -} diff --git a/server/prisma/client.ts b/server/prisma/client.ts deleted file mode 100644 index ae720eaea..000000000 --- a/server/prisma/client.ts +++ /dev/null @@ -1,6 +0,0 @@ -import pkg from "@prisma/client"; -const { PrismaClient } = pkg; - -const prisma = new PrismaClient(); - -export default prisma; diff --git a/server/prisma/migrations/20211030201455_init/migration.sql b/server/prisma/migrations/20211030201455_init/migration.sql deleted file mode 100644 index 7fa818e7f..000000000 --- a/server/prisma/migrations/20211030201455_init/migration.sql +++ /dev/null @@ -1,92 +0,0 @@ --- CreateEnum -CREATE TYPE "Mode" AS ENUM ('TW', 'SZ', 'TC', 'RM', 'CB'); - --- CreateTable -CREATE TABLE "User" ( - "id" SERIAL NOT NULL, - "discordId" TEXT NOT NULL, - "discordName" TEXT NOT NULL, - "discordDiscriminator" TEXT NOT NULL, - "discordAvatar" TEXT, - "discordRefreshToken" TEXT NOT NULL, - "twitch" TEXT, - "twitter" TEXT, - "youtubeId" TEXT, - "youtubeName" TEXT, - "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedAt" TIMESTAMP(3) NOT NULL, - - CONSTRAINT "User_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "Organization" ( - "id" SERIAL NOT NULL, - "name" TEXT NOT NULL, - "nameForUrl" TEXT NOT NULL, - "ownerId" INTEGER NOT NULL, - "discordInvite" TEXT NOT NULL, - "twitter" TEXT, - - CONSTRAINT "Organization_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "Tournament" ( - "id" SERIAL NOT NULL, - "name" TEXT NOT NULL, - "nameForUrl" TEXT NOT NULL, - "description" TEXT, - "startTime" TIMESTAMP(3) NOT NULL, - "checkInTime" TIMESTAMP(3) NOT NULL, - "bannerBackground" TEXT NOT NULL, - "bannerTextHSLArgs" TEXT NOT NULL, - "organizerId" INTEGER NOT NULL, - - CONSTRAINT "Tournament_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "Stage" ( - "id" SERIAL NOT NULL, - "name" TEXT NOT NULL, - "mode" "Mode" NOT NULL, - - CONSTRAINT "Stage_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "_StageToTournament" ( - "A" INTEGER NOT NULL, - "B" INTEGER NOT NULL -); - --- CreateIndex -CREATE UNIQUE INDEX "User_discordId_key" ON "User"("discordId"); - --- CreateIndex -CREATE UNIQUE INDEX "Organization_nameForUrl_key" ON "Organization"("nameForUrl"); - --- CreateIndex -CREATE UNIQUE INDEX "Organization_ownerId_key" ON "Organization"("ownerId"); - --- CreateIndex -CREATE UNIQUE INDEX "Tournament_nameForUrl_organizerId_key" ON "Tournament"("nameForUrl", "organizerId"); - --- CreateIndex -CREATE UNIQUE INDEX "_StageToTournament_AB_unique" ON "_StageToTournament"("A", "B"); - --- CreateIndex -CREATE INDEX "_StageToTournament_B_index" ON "_StageToTournament"("B"); - --- AddForeignKey -ALTER TABLE "Organization" ADD CONSTRAINT "Organization_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "Tournament" ADD CONSTRAINT "Tournament_organizerId_fkey" FOREIGN KEY ("organizerId") REFERENCES "Organization"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "_StageToTournament" ADD FOREIGN KEY ("A") REFERENCES "Stage"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "_StageToTournament" ADD FOREIGN KEY ("B") REFERENCES "Tournament"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/server/prisma/migrations/migration_lock.toml b/server/prisma/migrations/migration_lock.toml deleted file mode 100644 index fbffa92c2..000000000 --- a/server/prisma/migrations/migration_lock.toml +++ /dev/null @@ -1,3 +0,0 @@ -# Please do not edit this file manually -# It should be added in your version-control system (i.e. Git) -provider = "postgresql" \ No newline at end of file diff --git a/server/prisma/schema.prisma b/server/prisma/schema.prisma deleted file mode 100644 index 39fa49353..000000000 --- a/server/prisma/schema.prisma +++ /dev/null @@ -1,74 +0,0 @@ -// This is your Prisma schema file, -// learn more about it in the docs: https://pris.ly/d/prisma-schema - -generator client { - provider = "prisma-client-js" -} - -datasource db { - provider = "postgresql" - url = env("DATABASE_URL") -} - -model User { - id Int @id @default(autoincrement()) - discordId String @unique - discordName String - discordDiscriminator String - discordAvatar String? - discordRefreshToken String - twitch String? - twitter String? - youtubeId String? - youtubeName String? - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - ownedOrganization Organization? -} - -model Organization { - id Int @id @default(autoincrement()) - name String - /// Name in lower case to show in URL - nameForUrl String @unique - ownerId Int @unique - owner User @relation(fields: [ownerId], references: [id]) - discordInvite String - twitter String? - tournaments Tournament[] -} - -model Tournament { - id Int @id @default(autoincrement()) - name String - /// Name in lower case to show in URL - nameForUrl String - description String? - startTime DateTime - checkInTime DateTime - /// CSS for tournament banner's background value - bannerBackground String - /// CSS for tournament banner's color value - bannerTextHSLArgs String - mapPool Stage[] - organizerId Int - organizer Organization @relation(fields: [organizerId], references: [id]) - - // There might be duplicate nameForUrl's but inside an organization they're unique - @@unique([nameForUrl, organizerId]) -} - -enum Mode { - TW - SZ - TC - RM - CB -} - -model Stage { - id Int @id @default(autoincrement()) - name String - mode Mode - tournamentMapPools Tournament[] -} diff --git a/server/prisma/seed.ts b/server/prisma/seed.ts deleted file mode 100644 index aa8c13997..000000000 --- a/server/prisma/seed.ts +++ /dev/null @@ -1,104 +0,0 @@ -import pkg from "@prisma/client"; -const { PrismaClient } = pkg; -import { stages as stageList } from "@sendou-ink/shared/constants"; -const prisma = new PrismaClient(); - -async function main() { - const user = await users(); - const organization = await organizations(user.id); - const tournament = await tournaments(organization.id); - await stages(); - await tournamentAddMaps(tournament.id); -} - -async function users() { - return prisma.user.create({ - data: { - discordDiscriminator: "4059", - discordId: "79237403620945920", - discordName: "Sendou", - discordRefreshToken: "none", - twitch: "Sendou", - youtubeId: "UCWbJLXByvsfQvTcR4HLPs5Q", - youtubeName: "Sendou", - discordAvatar: "fcfd65a3bea598905abb9ca25296816b", - twitter: "sendouc", - }, - }); -} - -async function organizations(userId: number) { - return prisma.organization.create({ - data: { - name: "Sendou's Tournaments", - discordInvite: "sendou", - nameForUrl: "sendou", - twitter: "sendouc", - ownerId: userId, - }, - }); -} - -const modesList = ["TW", "SZ", "TC", "RM", "CB"] as const; - -async function tournaments(organizationId: number) { - return prisma.tournament.create({ - data: { - bannerBackground: "linear-gradient(to bottom, #9796f0, #fbc7d4)", - bannerTextHSLArgs: "231, 9%, 16%", - checkInTime: new Date(2025, 11, 17, 11), - startTime: new Date(2025, 11, 17, 12), - name: "In The Zone X", - nameForUrl: "in-the-zone-x", - organizerId: organizationId, - description: "In The Zone eXtreme", - }, - }); -} - -function getRandomInt(maxInclusive: number) { - let result = -1; - - while (result < 24) { - result = Math.floor(Math.random() * maxInclusive) + 1; - } - return result; -} - -// TODO: why this can't be done while creating? -async function tournamentAddMaps(id: number) { - const ids = Array.from( - new Set(new Array(24).fill(null).map(() => ({ id: getRandomInt(115) }))) - ); - - return prisma.tournament.update({ - where: { id }, - data: { - mapPool: { - connect: ids, - }, - }, - }); -} - -async function stages() { - return prisma.stage.createMany({ - data: modesList.flatMap((mode) => { - return stageList.map((name) => { - return { - name, - mode, - }; - }); - }), - }); -} - -main() - .catch((e) => { - console.error(e); - process.exit(1); - }) - .finally(async () => { - await prisma.$disconnect(); - }); diff --git a/server/routes/index.ts b/server/routes/index.ts deleted file mode 100644 index 1196216ca..000000000 --- a/server/routes/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { App } from "@tinyhttp/app"; -import tournament from "./tournaments.routes"; - -const routes = new App(); - -routes.use("/tournaments", tournament); - -export default routes; diff --git a/server/routes/tournaments.routes.ts b/server/routes/tournaments.routes.ts deleted file mode 100644 index 193ac0fc4..000000000 --- a/server/routes/tournaments.routes.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { App } from "@tinyhttp/app"; -import { findTournamentByNameForUrl } from "../services/tournament"; -import type { GetTournamentByOrganizationAndName } from "@sendou-ink/api"; - -const app = new App(); - -app.get("/:organization/:tournament", async (req, res) => { - const { organization, tournament } = req.params; - const tournamentFromDB: GetTournamentByOrganizationAndName | undefined = - await findTournamentByNameForUrl({ - organizationNameForUrl: organization, - tournamentNameForUrl: tournament, - }); - - if (!tournamentFromDB) return res.sendStatus(404); - - res.json(tournamentFromDB); -}); - -export default app; diff --git a/server/services/tournament.ts b/server/services/tournament.ts deleted file mode 100644 index bc7afca8b..000000000 --- a/server/services/tournament.ts +++ /dev/null @@ -1,61 +0,0 @@ -import prisma from "../prisma/client"; - -export async function findTournamentByNameForUrl({ - organizationNameForUrl, - tournamentNameForUrl, -}: { - organizationNameForUrl: string; - tournamentNameForUrl: string; -}) { - const tournaments = await prisma.tournament.findMany({ - where: { - nameForUrl: tournamentNameForUrl.toLowerCase(), - }, - select: { - name: true, - description: true, - startTime: true, - checkInTime: true, - bannerBackground: true, - bannerTextHSLArgs: true, - organizer: { - select: { - name: true, - discordInvite: true, - twitter: true, - nameForUrl: true, - }, - }, - mapPool: { - select: { - mode: true, - name: true, - }, - }, - }, - }); - - const result = tournaments.find( - (tournament) => - tournament.organizer.nameForUrl === organizationNameForUrl.toLowerCase() - ); - - if (!result) return result; - - result.organizer.twitter = twitterToUrl(result.organizer.twitter); - result.organizer.discordInvite = discordInviteToUrl( - result.organizer.discordInvite - ); - - return result; -} - -function twitterToUrl(twitter: string | null) { - if (!twitter) return twitter; - - return `https://twitter.com/${twitter}`; -} - -function discordInviteToUrl(discordInvite: string) { - return `https://discord.com/invite/${discordInvite}`; -} diff --git a/server/services/user.ts b/server/services/user.ts deleted file mode 100644 index 24154feee..000000000 --- a/server/services/user.ts +++ /dev/null @@ -1,64 +0,0 @@ -import prisma from "../prisma/client"; -import type { Strategy as DiscordStrategy } from "passport-discord"; - -export async function upsertUser({ - loggedInUser, - refreshToken, -}: { - loggedInUser: DiscordStrategy.Profile; - refreshToken: string; -}) { - return prisma.user.upsert({ - create: { - discordId: loggedInUser.id, - discordName: loggedInUser.username, - discordDiscriminator: loggedInUser.discriminator, - discordAvatar: loggedInUser.avatar, - discordRefreshToken: refreshToken, - ...parseConnections(loggedInUser.connections), - }, - update: { - discordName: loggedInUser.username, - discordDiscriminator: loggedInUser.discriminator, - discordAvatar: loggedInUser.avatar, - }, - where: { - discordId: loggedInUser.id, - }, - }); -} - -function parseConnections( - connections: DiscordStrategy.ConnectionInfo[] | undefined -) { - if (!connections) return null; - - const result: { - twitch?: string; - twitter?: string; - youtubeId?: string; - youtubeName?: string; - } = {}; - - for (const connection of connections) { - if (connection.visibility !== 1 || !connection.verified) continue; - - switch (connection.type) { - case "twitch": - result.twitch = connection.name; - break; - case "twitter": - result.twitter = connection.name; - break; - case "youtube": - result.youtubeId = connection.id; - result.youtubeName = connection.name; - } - } - - return result; -} - -export function findUserById(id: number) { - return prisma.user.findUnique({ where: { id } }); -} diff --git a/server/tsconfig.json b/server/tsconfig.json deleted file mode 100644 index c2bf79ecd..000000000 --- a/server/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "compilerOptions": { - "target": "ES6", - "module": "ESNext", - "sourceMap": true, - "outDir": "dist", - "strict": true, - "noFallthroughCasesInSwitch": true, - "noUnusedParameters": true, - "noUnusedLocals": true, - "lib": ["esnext"], - "esModuleInterop": true, - "moduleResolution": "node", - "baseUrl": "." - } -}