diff --git a/assets/schemas.json b/assets/schemas.json
index 0ef1e5d9..36778b97 100644
Binary files a/assets/schemas.json and b/assets/schemas.json differ
diff --git a/openapitools.json b/openapitools.json
new file mode 100644
index 00000000..04369381
--- /dev/null
+++ b/openapitools.json
@@ -0,0 +1,7 @@
+{
+ "$schema": "./node_modules/@openapitools/openapi-generator-cli/config.schema.json",
+ "spaces": 2,
+ "generator-cli": {
+ "version": "6.4.0"
+ }
+}
diff --git a/scripts/openapi.js b/scripts/openapi.js
index 86527ada..35654eea 100644
--- a/scripts/openapi.js
+++ b/scripts/openapi.js
@@ -27,34 +27,46 @@ require("missing-native-js-functions");
const openapiPath = path.join(__dirname, "..", "assets", "openapi.json");
const SchemaPath = path.join(__dirname, "..", "assets", "schemas.json");
-let schemas = JSON.parse(fs.readFileSync(SchemaPath, { encoding: "utf8" }));
-
-for (var schema in schemas) {
- const part = schemas[schema];
- for (var key in part.properties) {
- if (part.properties[key].anyOf) {
- const nullIndex = part.properties[key].anyOf.findIndex(
- (x) => x.type == "null",
- );
- if (nullIndex != -1) {
- part.properties[key].nullable = true;
- part.properties[key].anyOf.splice(nullIndex, 1);
-
- if (part.properties[key].anyOf.length == 1) {
- Object.assign(
- part.properties[key],
- part.properties[key].anyOf[0],
- );
- delete part.properties[key].anyOf;
- }
- }
- }
- }
-}
-
-const specification = JSON.parse(
- fs.readFileSync(openapiPath, { encoding: "utf8" }),
-);
+const schemas = JSON.parse(fs.readFileSync(SchemaPath, { encoding: "utf8" }));
+// const specification = JSON.parse(
+// fs.readFileSync(openapiPath, { encoding: "utf8" }),
+// );
+let specification = {
+ openapi: "3.1.0",
+ info: {
+ title: "Fosscord Server",
+ description:
+ "Fosscord is a free open source selfhostable discord compatible chat, voice and video platform",
+ license: {
+ name: "AGPLV3",
+ url: "https://www.gnu.org/licenses/agpl-3.0.en.html",
+ },
+ version: "1.0.0",
+ },
+ externalDocs: {
+ description: "Fosscord Docs",
+ url: "https://docs.fosscord.com",
+ },
+ servers: [
+ {
+ url: "https://staging.fosscord.com/api/",
+ description: "Official Fosscord Instance",
+ },
+ ],
+ components: {
+ securitySchemes: {
+ bearer: {
+ type: "http",
+ scheme: "bearer",
+ description: "Bearer/Bot prefixes are not required.",
+ bearerFormat: "JWT",
+ in: "header",
+ },
+ },
+ },
+ tags: [],
+ paths: {},
+};
function combineSchemas(schemas) {
var definitions = {};
@@ -72,6 +84,11 @@ function combineSchemas(schemas) {
}
for (const key in definitions) {
+ const reg = new RegExp(/^[a-zA-Z0-9\.\-_]+$/, "gm");
+ if (!reg.test(key)) {
+ console.error(`Invalid schema name: ${key} (${reg.test(key)})`);
+ continue;
+ }
specification.components = specification.components || {};
specification.components.schemas =
specification.components.schemas || {};
@@ -102,30 +119,20 @@ function getTag(key) {
function apiRoutes() {
const routes = getRouteDescriptions();
- const tags = Array.from(routes.keys()).map((x) => getTag(x));
- specification.tags = specification.tags || [];
- specification.tags = [...specification.tags.map((x) => x.name), ...tags]
- .unique()
- .map((x) => ({ name: x }));
-
- specification.components = specification.components || {};
- specification.components.securitySchemes = {
- bearer: {
- type: "http",
- scheme: "bearer",
- description: "Bearer/Bot prefixes are not required.",
- },
- };
+ // populate tags
+ const tags = Array.from(routes.keys())
+ .map((x) => getTag(x))
+ .sort((a, b) => a.localeCompare(b));
+ specification.tags = tags.unique().map((x) => ({ name: x }));
routes.forEach((route, pathAndMethod) => {
const [p, method] = pathAndMethod.split("|");
const path = p.replace(/:(\w+)/g, "{$1}");
- specification.paths = specification.paths || {};
let obj = specification.paths[path]?.[method] || {};
obj["x-right-required"] = route.right;
obj["x-permission-required"] = route.permission;
- obj["x-fires-event"] = route.test?.event;
+ obj["x-fires-event"] = route.event;
if (
!NO_AUTHORIZATION_ROUTES.some((x) => {
@@ -136,12 +143,17 @@ function apiRoutes() {
obj.security = [{ bearer: [] }];
}
- if (route.body) {
+ if (route.description) obj.description = route.description;
+ if (route.summary) obj.summary = route.summary;
+
+ if (route.requestBody) {
obj.requestBody = {
required: true,
content: {
"application/json": {
- schema: { $ref: `#/components/schemas/${route.body}` },
+ schema: {
+ $ref: `#/components/schemas/${route.requestBody}`,
+ },
},
},
}.merge(obj.requestBody);
@@ -150,16 +162,9 @@ function apiRoutes() {
if (route.responses) {
for (const [k, v] of Object.entries(route.responses)) {
let schema = {
- allOf: [
- {
- $ref: `#/components/schemas/${v.body}`,
- },
- {
- example: v.body,
- },
- ],
+ $ref: `#/components/schemas/${v.body}`,
};
- if (!v.body) schema = schema.allOf[0];
+ // if (!v.body) schema = schema.allOf[0];
obj.responses = {
[k]: {
@@ -173,12 +178,16 @@ function apiRoutes() {
},
},
}
- : {}),
+ : {
+ description: "No description available",
+ }),
},
}.merge(obj.responses);
delete obj.responses.default;
}
}
+
+ // handles path parameters
if (p.includes(":")) {
obj.parameters = p.match(/:\w+/g)?.map((x) => ({
name: x.replace(":", ""),
@@ -188,16 +197,17 @@ function apiRoutes() {
description: x.replace(":", ""),
}));
}
+
obj.tags = [...(obj.tags || []), getTag(p)].unique();
specification.paths[path] = {
- ...specification.paths[path],
[method]: obj,
};
});
}
function main() {
+ console.log("Generating OpenAPI Specification...");
combineSchemas(schemas);
apiRoutes();
diff --git a/scripts/schema.js b/scripts/schema.js
index c29d5bab..bb3e9ddc 100644
--- a/scripts/schema.js
+++ b/scripts/schema.js
@@ -57,6 +57,8 @@ const Excluded = [
"PropertiesSchema",
"AsyncSchema",
"AnySchema",
+ "SMTPConnection.CustomAuthenticationResponse",
+ "TransportMakeRequestResponse",
];
function modify(obj) {
diff --git a/src/api/routes/applications/#id/bot/index.ts b/src/api/routes/applications/#id/bot/index.ts
index 1df7fba0..5eea27e9 100644
--- a/src/api/routes/applications/#id/bot/index.ts
+++ b/src/api/routes/applications/#id/bot/index.ts
@@ -114,7 +114,7 @@ router.post(
router.patch(
"/",
route({
- body: "BotModifySchema",
+ requestBody: "BotModifySchema",
responses: {
200: {
body: "Application",
diff --git a/src/api/routes/applications/#id/index.ts b/src/api/routes/applications/#id/index.ts
index dec2a9b1..c372869a 100644
--- a/src/api/routes/applications/#id/index.ts
+++ b/src/api/routes/applications/#id/index.ts
@@ -55,7 +55,7 @@ router.get(
router.patch(
"/",
route({
- body: "ApplicationModifySchema",
+ requestBody: "ApplicationModifySchema",
responses: {
200: {
body: "Application",
diff --git a/src/api/routes/applications/index.ts b/src/api/routes/applications/index.ts
index 2290414c..dba0a499 100644
--- a/src/api/routes/applications/index.ts
+++ b/src/api/routes/applications/index.ts
@@ -48,7 +48,7 @@ router.get(
router.post(
"/",
route({
- body: "ApplicationCreateSchema",
+ requestBody: "ApplicationCreateSchema",
responses: {
200: {
body: "Application",
diff --git a/src/api/routes/auth/forgot.ts b/src/api/routes/auth/forgot.ts
index 7e1ba65a..80ffb225 100644
--- a/src/api/routes/auth/forgot.ts
+++ b/src/api/routes/auth/forgot.ts
@@ -31,7 +31,7 @@ const router = Router();
router.post(
"/",
route({
- body: "ForgotPasswordSchema",
+ requestBody: "ForgotPasswordSchema",
responses: {
204: {},
400: {
diff --git a/src/api/routes/auth/login.ts b/src/api/routes/auth/login.ts
index 729bd1cb..19a09f81 100644
--- a/src/api/routes/auth/login.ts
+++ b/src/api/routes/auth/login.ts
@@ -37,7 +37,7 @@ export default router;
router.post(
"/",
route({
- body: "LoginSchema",
+ requestBody: "LoginSchema",
responses: {
200: {
body: "TokenResponse",
diff --git a/src/api/routes/auth/mfa/totp.ts b/src/api/routes/auth/mfa/totp.ts
index 0bfc2c52..4df408f9 100644
--- a/src/api/routes/auth/mfa/totp.ts
+++ b/src/api/routes/auth/mfa/totp.ts
@@ -26,7 +26,7 @@ const router = Router();
router.post(
"/",
route({
- body: "TotpSchema",
+ requestBody: "TotpSchema",
responses: {
200: {
body: "TokenResponse",
diff --git a/src/api/routes/auth/mfa/webauthn.ts b/src/api/routes/auth/mfa/webauthn.ts
index e7278047..b58d2944 100644
--- a/src/api/routes/auth/mfa/webauthn.ts
+++ b/src/api/routes/auth/mfa/webauthn.ts
@@ -42,7 +42,7 @@ function toArrayBuffer(buf: Buffer) {
router.post(
"/",
route({
- body: "WebAuthnTotpSchema",
+ requestBody: "WebAuthnTotpSchema",
responses: {
200: { body: "TokenResponse" },
400: { body: "APIErrorResponse" },
diff --git a/src/api/routes/auth/register.ts b/src/api/routes/auth/register.ts
index 70acedcd..73a28fed 100644
--- a/src/api/routes/auth/register.ts
+++ b/src/api/routes/auth/register.ts
@@ -16,25 +16,25 @@
along with this program. If not, see .
*/
-import { Request, Response, Router } from "express";
import {
- Config,
- generateToken,
- Invite,
- FieldErrors,
- User,
- adjustEmail,
- RegisterSchema,
- ValidRegistrationToken,
-} from "@spacebar/util";
-import {
- route,
- getIpAdress,
IPAnalysis,
+ getIpAdress,
isProxy,
+ route,
verifyCaptcha,
} from "@spacebar/api";
+import {
+ Config,
+ FieldErrors,
+ Invite,
+ RegisterSchema,
+ User,
+ ValidRegistrationToken,
+ adjustEmail,
+ generateToken,
+} from "@spacebar/util";
import bcrypt from "bcrypt";
+import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
import { MoreThan } from "typeorm";
@@ -43,7 +43,7 @@ const router: Router = Router();
router.post(
"/",
route({
- body: "RegisterSchema",
+ requestBody: "RegisterSchema",
responses: {
200: { body: "TokenResponse" },
400: { body: "APIErrorOrCaptchaResponse" },
diff --git a/src/api/routes/auth/reset.ts b/src/api/routes/auth/reset.ts
index 9c17d2b0..cbfa4935 100644
--- a/src/api/routes/auth/reset.ts
+++ b/src/api/routes/auth/reset.ts
@@ -35,7 +35,7 @@ const router = Router();
router.post(
"/",
route({
- body: "PasswordResetSchema",
+ requestBody: "PasswordResetSchema",
responses: {
200: {
body: "TokenResponse",
diff --git a/src/api/routes/auth/verify/index.ts b/src/api/routes/auth/verify/index.ts
index da92f256..a98c17fa 100644
--- a/src/api/routes/auth/verify/index.ts
+++ b/src/api/routes/auth/verify/index.ts
@@ -41,7 +41,7 @@ async function getToken(user: User) {
router.post(
"/",
route({
- body: "VerifyEmailSchema",
+ requestBody: "VerifyEmailSchema",
responses: {
200: {
body: "TokenResponse",
diff --git a/src/api/routes/auth/verify/view-backup-codes-challenge.ts b/src/api/routes/auth/verify/view-backup-codes-challenge.ts
index 63158d9d..5407de82 100644
--- a/src/api/routes/auth/verify/view-backup-codes-challenge.ts
+++ b/src/api/routes/auth/verify/view-backup-codes-challenge.ts
@@ -25,7 +25,7 @@ const router = Router();
router.post(
"/",
route({
- body: "BackupCodesChallengeSchema",
+ requestBody: "BackupCodesChallengeSchema",
responses: {
200: { body: "BackupCodesChallengeResponse" },
400: { body: "APIErrorResponse" },
diff --git a/src/api/routes/channels/#channel_id/index.ts b/src/api/routes/channels/#channel_id/index.ts
index 74e21a02..567c7c92 100644
--- a/src/api/routes/channels/#channel_id/index.ts
+++ b/src/api/routes/channels/#channel_id/index.ts
@@ -107,7 +107,7 @@ router.delete(
router.patch(
"/",
route({
- body: "ChannelModifySchema",
+ requestBody: "ChannelModifySchema",
permission: "MANAGE_CHANNELS",
responses: {
200: {
diff --git a/src/api/routes/channels/#channel_id/invites.ts b/src/api/routes/channels/#channel_id/invites.ts
index 35cdbca8..d2874872 100644
--- a/src/api/routes/channels/#channel_id/invites.ts
+++ b/src/api/routes/channels/#channel_id/invites.ts
@@ -35,7 +35,7 @@ const router: Router = Router();
router.post(
"/",
route({
- body: "InviteCreateSchema",
+ requestBody: "InviteCreateSchema",
permission: "CREATE_INSTANT_INVITE",
right: "CREATE_INVITES",
responses: {
diff --git a/src/api/routes/channels/#channel_id/messages/#message_id/ack.ts b/src/api/routes/channels/#channel_id/messages/#message_id/ack.ts
index f11fdcb2..a6dcae6b 100644
--- a/src/api/routes/channels/#channel_id/messages/#message_id/ack.ts
+++ b/src/api/routes/channels/#channel_id/messages/#message_id/ack.ts
@@ -34,7 +34,7 @@ const router = Router();
router.post(
"/",
route({
- body: "MessageAcknowledgeSchema",
+ requestBody: "MessageAcknowledgeSchema",
responses: {
200: {},
403: {},
diff --git a/src/api/routes/channels/#channel_id/messages/#message_id/index.ts b/src/api/routes/channels/#channel_id/messages/#message_id/index.ts
index 77bc1e0e..6bc03f53 100644
--- a/src/api/routes/channels/#channel_id/messages/#message_id/index.ts
+++ b/src/api/routes/channels/#channel_id/messages/#message_id/index.ts
@@ -52,7 +52,7 @@ const messageUpload = multer({
router.patch(
"/",
route({
- body: "MessageEditSchema",
+ requestBody: "MessageEditSchema",
permission: "SEND_MESSAGES",
right: "SEND_MESSAGES",
responses: {
@@ -152,7 +152,7 @@ router.put(
next();
},
route({
- body: "MessageCreateSchema",
+ requestBody: "MessageCreateSchema",
permission: "SEND_MESSAGES",
right: "SEND_BACKDATED_EVENTS",
responses: {
diff --git a/src/api/routes/channels/#channel_id/messages/bulk-delete.ts b/src/api/routes/channels/#channel_id/messages/bulk-delete.ts
index db1617e2..9b607d59 100644
--- a/src/api/routes/channels/#channel_id/messages/bulk-delete.ts
+++ b/src/api/routes/channels/#channel_id/messages/bulk-delete.ts
@@ -39,7 +39,7 @@ export default router;
router.post(
"/",
route({
- body: "BulkDeleteSchema",
+ requestBody: "BulkDeleteSchema",
responses: {
204: {},
400: {
diff --git a/src/api/routes/channels/#channel_id/messages/index.ts b/src/api/routes/channels/#channel_id/messages/index.ts
index 8e3c43d7..ddc42d28 100644
--- a/src/api/routes/channels/#channel_id/messages/index.ts
+++ b/src/api/routes/channels/#channel_id/messages/index.ts
@@ -220,7 +220,7 @@ router.post(
next();
},
route({
- body: "MessageCreateSchema",
+ requestBody: "MessageCreateSchema",
permission: "SEND_MESSAGES",
right: "SEND_MESSAGES",
responses: {
diff --git a/src/api/routes/channels/#channel_id/permissions.ts b/src/api/routes/channels/#channel_id/permissions.ts
index c6a9def6..d3edb0fa 100644
--- a/src/api/routes/channels/#channel_id/permissions.ts
+++ b/src/api/routes/channels/#channel_id/permissions.ts
@@ -36,7 +36,7 @@ const router: Router = Router();
router.put(
"/:overwrite_id",
route({
- body: "ChannelPermissionOverwriteSchema",
+ requestBody: "ChannelPermissionOverwriteSchema",
permission: "MANAGE_ROLES",
responses: {
204: {},
diff --git a/src/api/routes/channels/#channel_id/webhooks.ts b/src/api/routes/channels/#channel_id/webhooks.ts
index 4e98a1c9..17437301 100644
--- a/src/api/routes/channels/#channel_id/webhooks.ts
+++ b/src/api/routes/channels/#channel_id/webhooks.ts
@@ -54,7 +54,7 @@ router.get(
router.post(
"/",
route({
- body: "WebhookCreateSchema",
+ requestBody: "WebhookCreateSchema",
permission: "MANAGE_WEBHOOKS",
responses: {
200: {
diff --git a/src/api/routes/connections/#connection_name/callback.ts b/src/api/routes/connections/#connection_name/callback.ts
index bc9ba455..ee0db94a 100644
--- a/src/api/routes/connections/#connection_name/callback.ts
+++ b/src/api/routes/connections/#connection_name/callback.ts
@@ -29,7 +29,7 @@ const router = Router();
router.post(
"/",
- route({ body: "ConnectionCallbackSchema" }),
+ route({ requestBody: "ConnectionCallbackSchema" }),
async (req: Request, res: Response) => {
const { connection_name } = req.params;
const connection = ConnectionStore.connections.get(connection_name);
diff --git a/src/api/routes/guilds/#guild_id/bans.ts b/src/api/routes/guilds/#guild_id/bans.ts
index 31aed6b9..b5fd301a 100644
--- a/src/api/routes/guilds/#guild_id/bans.ts
+++ b/src/api/routes/guilds/#guild_id/bans.ts
@@ -16,20 +16,20 @@
along with this program. If not, see .
*/
-import { Request, Response, Router } from "express";
+import { getIpAdress, route } from "@spacebar/api";
import {
+ Ban,
+ BanModeratorSchema,
+ BanRegistrySchema,
DiscordApiErrors,
- emitEvent,
GuildBanAddEvent,
GuildBanRemoveEvent,
- Ban,
- User,
Member,
- BanRegistrySchema,
- BanModeratorSchema,
+ User,
+ emitEvent,
} from "@spacebar/util";
+import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
-import { getIpAdress, route } from "@spacebar/api";
const router: Router = Router();
@@ -97,7 +97,7 @@ router.get(
router.put(
"/:user_id",
- route({ body: "BanCreateSchema", permission: "BAN_MEMBERS" }),
+ route({ requestBody: "BanCreateSchema", permission: "BAN_MEMBERS" }),
async (req: Request, res: Response) => {
const { guild_id } = req.params;
const banned_user_id = req.params.user_id;
@@ -143,7 +143,7 @@ router.put(
router.put(
"/@me",
- route({ body: "BanCreateSchema" }),
+ route({ requestBody: "BanCreateSchema" }),
async (req: Request, res: Response) => {
const { guild_id } = req.params;
diff --git a/src/api/routes/guilds/#guild_id/channels.ts b/src/api/routes/guilds/#guild_id/channels.ts
index d74d9f84..ff167b02 100644
--- a/src/api/routes/guilds/#guild_id/channels.ts
+++ b/src/api/routes/guilds/#guild_id/channels.ts
@@ -16,16 +16,16 @@
along with this program. If not, see .
*/
-import { Router, Response, Request } from "express";
+import { route } from "@spacebar/api";
import {
Channel,
- ChannelUpdateEvent,
- emitEvent,
ChannelModifySchema,
ChannelReorderSchema,
+ ChannelUpdateEvent,
+ emitEvent,
} from "@spacebar/util";
+import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
-import { route } from "@spacebar/api";
const router = Router();
router.get("/", route({}), async (req: Request, res: Response) => {
@@ -37,7 +37,10 @@ router.get("/", route({}), async (req: Request, res: Response) => {
router.post(
"/",
- route({ body: "ChannelModifySchema", permission: "MANAGE_CHANNELS" }),
+ route({
+ requestBody: "ChannelModifySchema",
+ permission: "MANAGE_CHANNELS",
+ }),
async (req: Request, res: Response) => {
// creates a new guild channel https://discord.com/developers/docs/resources/guild#create-guild-channel
const { guild_id } = req.params;
@@ -54,7 +57,10 @@ router.post(
router.patch(
"/",
- route({ body: "ChannelReorderSchema", permission: "MANAGE_CHANNELS" }),
+ route({
+ requestBody: "ChannelReorderSchema",
+ permission: "MANAGE_CHANNELS",
+ }),
async (req: Request, res: Response) => {
// changes guild channel position
const { guild_id } = req.params;
diff --git a/src/api/routes/guilds/#guild_id/emojis.ts b/src/api/routes/guilds/#guild_id/emojis.ts
index c661202e..f8707b24 100644
--- a/src/api/routes/guilds/#guild_id/emojis.ts
+++ b/src/api/routes/guilds/#guild_id/emojis.ts
@@ -16,21 +16,21 @@
along with this program. If not, see .
*/
-import { Router, Request, Response } from "express";
+import { route } from "@spacebar/api";
import {
Config,
DiscordApiErrors,
- emitEvent,
Emoji,
+ EmojiCreateSchema,
+ EmojiModifySchema,
GuildEmojisUpdateEvent,
- handleFile,
Member,
Snowflake,
User,
- EmojiCreateSchema,
- EmojiModifySchema,
+ emitEvent,
+ handleFile,
} from "@spacebar/util";
-import { route } from "@spacebar/api";
+import { Request, Response, Router } from "express";
const router = Router();
@@ -63,7 +63,7 @@ router.get("/:emoji_id", route({}), async (req: Request, res: Response) => {
router.post(
"/",
route({
- body: "EmojiCreateSchema",
+ requestBody: "EmojiCreateSchema",
permission: "MANAGE_EMOJIS_AND_STICKERS",
}),
async (req: Request, res: Response) => {
@@ -113,7 +113,7 @@ router.post(
router.patch(
"/:emoji_id",
route({
- body: "EmojiModifySchema",
+ requestBody: "EmojiModifySchema",
permission: "MANAGE_EMOJIS_AND_STICKERS",
}),
async (req: Request, res: Response) => {
diff --git a/src/api/routes/guilds/#guild_id/index.ts b/src/api/routes/guilds/#guild_id/index.ts
index 672bc92e..46346008 100644
--- a/src/api/routes/guilds/#guild_id/index.ts
+++ b/src/api/routes/guilds/#guild_id/index.ts
@@ -16,21 +16,21 @@
along with this program. If not, see .
*/
-import { Request, Response, Router } from "express";
+import { route } from "@spacebar/api";
import {
DiscordApiErrors,
+ Guild,
+ GuildUpdateEvent,
+ GuildUpdateSchema,
+ Member,
+ SpacebarApiErrors,
emitEvent,
getPermission,
getRights,
- Guild,
- GuildUpdateEvent,
handleFile,
- Member,
- GuildUpdateSchema,
- SpacebarApiErrors,
} from "@spacebar/util";
+import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
-import { route } from "@spacebar/api";
const router = Router();
@@ -55,7 +55,7 @@ router.get("/", route({}), async (req: Request, res: Response) => {
router.patch(
"/",
- route({ body: "GuildUpdateSchema", permission: "MANAGE_GUILD" }),
+ route({ requestBody: "GuildUpdateSchema", permission: "MANAGE_GUILD" }),
async (req: Request, res: Response) => {
const body = req.body as GuildUpdateSchema;
const { guild_id } = req.params;
diff --git a/src/api/routes/guilds/#guild_id/members/#member_id/index.ts b/src/api/routes/guilds/#guild_id/members/#member_id/index.ts
index a14691f2..814c8f8b 100644
--- a/src/api/routes/guilds/#guild_id/members/#member_id/index.ts
+++ b/src/api/routes/guilds/#guild_id/members/#member_id/index.ts
@@ -16,21 +16,21 @@
along with this program. If not, see .
*/
-import { Request, Response, Router } from "express";
+import { route } from "@spacebar/api";
import {
- Member,
+ emitEvent,
+ Emoji,
getPermission,
getRights,
- Role,
- GuildMemberUpdateEvent,
- emitEvent,
- Sticker,
- Emoji,
Guild,
+ GuildMemberUpdateEvent,
handleFile,
+ Member,
MemberChangeSchema,
+ Role,
+ Sticker,
} from "@spacebar/util";
-import { route } from "@spacebar/api";
+import { Request, Response, Router } from "express";
const router = Router();
@@ -47,7 +47,7 @@ router.get("/", route({}), async (req: Request, res: Response) => {
router.patch(
"/",
- route({ body: "MemberChangeSchema" }),
+ route({ requestBody: "MemberChangeSchema" }),
async (req: Request, res: Response) => {
const { guild_id } = req.params;
const member_id =
diff --git a/src/api/routes/guilds/#guild_id/members/#member_id/nick.ts b/src/api/routes/guilds/#guild_id/members/#member_id/nick.ts
index 14e7467f..41aaa84b 100644
--- a/src/api/routes/guilds/#guild_id/members/#member_id/nick.ts
+++ b/src/api/routes/guilds/#guild_id/members/#member_id/nick.ts
@@ -16,15 +16,15 @@
along with this program. If not, see .
*/
-import { getPermission, Member, PermissionResolvable } from "@spacebar/util";
import { route } from "@spacebar/api";
+import { getPermission, Member, PermissionResolvable } from "@spacebar/util";
import { Request, Response, Router } from "express";
const router = Router();
router.patch(
"/",
- route({ body: "MemberNickChangeSchema" }),
+ route({ requestBody: "MemberNickChangeSchema" }),
async (req: Request, res: Response) => {
const { guild_id } = req.params;
let permissionString: PermissionResolvable = "MANAGE_NICKNAMES";
diff --git a/src/api/routes/guilds/#guild_id/profile/index.ts b/src/api/routes/guilds/#guild_id/profile/index.ts
index 8ec22ea4..32de8653 100644
--- a/src/api/routes/guilds/#guild_id/profile/index.ts
+++ b/src/api/routes/guilds/#guild_id/profile/index.ts
@@ -31,7 +31,7 @@ const router = Router();
router.patch(
"/:member_id",
- route({ body: "MemberChangeProfileSchema" }),
+ route({ requestBody: "MemberChangeProfileSchema" }),
async (req: Request, res: Response) => {
const { guild_id } = req.params;
// const member_id =
diff --git a/src/api/routes/guilds/#guild_id/roles/#role_id/index.ts b/src/api/routes/guilds/#guild_id/roles/#role_id/index.ts
index de3fc35b..c7f1a8e8 100644
--- a/src/api/routes/guilds/#guild_id/roles/#role_id/index.ts
+++ b/src/api/routes/guilds/#guild_id/roles/#role_id/index.ts
@@ -16,17 +16,17 @@
along with this program. If not, see .
*/
-import { Router, Request, Response } from "express";
+import { route } from "@spacebar/api";
import {
- Role,
- Member,
- GuildRoleUpdateEvent,
- GuildRoleDeleteEvent,
emitEvent,
+ GuildRoleDeleteEvent,
+ GuildRoleUpdateEvent,
handleFile,
+ Member,
+ Role,
RoleModifySchema,
} from "@spacebar/util";
-import { route } from "@spacebar/api";
+import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
const router = Router();
@@ -69,7 +69,7 @@ router.delete(
router.patch(
"/",
- route({ body: "RoleModifySchema", permission: "MANAGE_ROLES" }),
+ route({ requestBody: "RoleModifySchema", permission: "MANAGE_ROLES" }),
async (req: Request, res: Response) => {
const { role_id, guild_id } = req.params;
const body = req.body as RoleModifySchema;
diff --git a/src/api/routes/guilds/#guild_id/roles/index.ts b/src/api/routes/guilds/#guild_id/roles/index.ts
index f93e9385..0efafab7 100644
--- a/src/api/routes/guilds/#guild_id/roles/index.ts
+++ b/src/api/routes/guilds/#guild_id/roles/index.ts
@@ -16,21 +16,21 @@
along with this program. If not, see .
*/
-import { Request, Response, Router } from "express";
+import { route } from "@spacebar/api";
import {
- Role,
- getPermission,
- Member,
- GuildRoleCreateEvent,
- GuildRoleUpdateEvent,
- emitEvent,
Config,
DiscordApiErrors,
+ emitEvent,
+ getPermission,
+ GuildRoleCreateEvent,
+ GuildRoleUpdateEvent,
+ Member,
+ Role,
RoleModifySchema,
RolePositionUpdateSchema,
Snowflake,
} from "@spacebar/util";
-import { route } from "@spacebar/api";
+import { Request, Response, Router } from "express";
import { Not } from "typeorm";
const router: Router = Router();
@@ -47,7 +47,7 @@ router.get("/", route({}), async (req: Request, res: Response) => {
router.post(
"/",
- route({ body: "RoleModifySchema", permission: "MANAGE_ROLES" }),
+ route({ requestBody: "RoleModifySchema", permission: "MANAGE_ROLES" }),
async (req: Request, res: Response) => {
const guild_id = req.params.guild_id;
const body = req.body as RoleModifySchema;
@@ -104,7 +104,7 @@ router.post(
router.patch(
"/",
- route({ body: "RolePositionUpdateSchema" }),
+ route({ requestBody: "RolePositionUpdateSchema" }),
async (req: Request, res: Response) => {
const { guild_id } = req.params;
const body = req.body as RolePositionUpdateSchema;
diff --git a/src/api/routes/guilds/#guild_id/stickers.ts b/src/api/routes/guilds/#guild_id/stickers.ts
index 84a23670..2e9470ec 100644
--- a/src/api/routes/guilds/#guild_id/stickers.ts
+++ b/src/api/routes/guilds/#guild_id/stickers.ts
@@ -16,21 +16,21 @@
along with this program. If not, see .
*/
+import { route } from "@spacebar/api";
import {
- emitEvent,
GuildStickersUpdateEvent,
Member,
+ ModifyGuildStickerSchema,
Snowflake,
Sticker,
StickerFormatType,
StickerType,
+ emitEvent,
uploadFile,
- ModifyGuildStickerSchema,
} from "@spacebar/util";
-import { Router, Request, Response } from "express";
-import { route } from "@spacebar/api";
-import multer from "multer";
+import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
+import multer from "multer";
const router = Router();
router.get("/", route({}), async (req: Request, res: Response) => {
@@ -54,7 +54,7 @@ router.post(
bodyParser,
route({
permission: "MANAGE_EMOJIS_AND_STICKERS",
- body: "ModifyGuildStickerSchema",
+ requestBody: "ModifyGuildStickerSchema",
}),
async (req: Request, res: Response) => {
if (!req.file) throw new HTTPError("missing file");
@@ -110,7 +110,7 @@ router.get("/:sticker_id", route({}), async (req: Request, res: Response) => {
router.patch(
"/:sticker_id",
route({
- body: "ModifyGuildStickerSchema",
+ requestBody: "ModifyGuildStickerSchema",
permission: "MANAGE_EMOJIS_AND_STICKERS",
}),
async (req: Request, res: Response) => {
diff --git a/src/api/routes/guilds/#guild_id/templates.ts b/src/api/routes/guilds/#guild_id/templates.ts
index 3bd28e05..cb517083 100644
--- a/src/api/routes/guilds/#guild_id/templates.ts
+++ b/src/api/routes/guilds/#guild_id/templates.ts
@@ -16,11 +16,10 @@
along with this program. If not, see .
*/
-import { Request, Response, Router } from "express";
+import { generateCode, route } from "@spacebar/api";
import { Guild, Template } from "@spacebar/util";
+import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
-import { route } from "@spacebar/api";
-import { generateCode } from "@spacebar/api";
const router: Router = Router();
@@ -53,7 +52,7 @@ router.get("/", route({}), async (req: Request, res: Response) => {
router.post(
"/",
- route({ body: "TemplateCreateSchema", permission: "MANAGE_GUILD" }),
+ route({ requestBody: "TemplateCreateSchema", permission: "MANAGE_GUILD" }),
async (req: Request, res: Response) => {
const { guild_id } = req.params;
const guild = await Guild.findOneOrFail({
@@ -115,7 +114,7 @@ router.put(
router.patch(
"/:code",
- route({ body: "TemplateModifySchema", permission: "MANAGE_GUILD" }),
+ route({ requestBody: "TemplateModifySchema", permission: "MANAGE_GUILD" }),
async (req: Request, res: Response) => {
const { code, guild_id } = req.params;
const { name, description } = req.body;
diff --git a/src/api/routes/guilds/#guild_id/vanity-url.ts b/src/api/routes/guilds/#guild_id/vanity-url.ts
index c85c943f..73620f8b 100644
--- a/src/api/routes/guilds/#guild_id/vanity-url.ts
+++ b/src/api/routes/guilds/#guild_id/vanity-url.ts
@@ -16,6 +16,7 @@
along with this program. If not, see .
*/
+import { route } from "@spacebar/api";
import {
Channel,
ChannelType,
@@ -23,8 +24,7 @@ import {
Invite,
VanityUrlSchema,
} from "@spacebar/util";
-import { Router, Request, Response } from "express";
-import { route } from "@spacebar/api";
+import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
const router = Router();
@@ -60,7 +60,7 @@ router.get(
router.patch(
"/",
- route({ body: "VanityUrlSchema", permission: "MANAGE_GUILD" }),
+ route({ requestBody: "VanityUrlSchema", permission: "MANAGE_GUILD" }),
async (req: Request, res: Response) => {
const { guild_id } = req.params;
const body = req.body as VanityUrlSchema;
diff --git a/src/api/routes/guilds/#guild_id/voice-states/#user_id/index.ts b/src/api/routes/guilds/#guild_id/voice-states/#user_id/index.ts
index 791ac102..ff1bc487 100644
--- a/src/api/routes/guilds/#guild_id/voice-states/#user_id/index.ts
+++ b/src/api/routes/guilds/#guild_id/voice-states/#user_id/index.ts
@@ -16,6 +16,7 @@
along with this program. If not, see .
*/
+import { route } from "@spacebar/api";
import {
Channel,
ChannelType,
@@ -26,7 +27,6 @@ import {
VoiceStateUpdateEvent,
VoiceStateUpdateSchema,
} from "@spacebar/util";
-import { route } from "@spacebar/api";
import { Request, Response, Router } from "express";
const router = Router();
@@ -34,7 +34,7 @@ const router = Router();
router.patch(
"/",
- route({ body: "VoiceStateUpdateSchema" }),
+ route({ requestBody: "VoiceStateUpdateSchema" }),
async (req: Request, res: Response) => {
const body = req.body as VoiceStateUpdateSchema;
const { guild_id } = req.params;
diff --git a/src/api/routes/guilds/#guild_id/welcome-screen.ts b/src/api/routes/guilds/#guild_id/welcome-screen.ts
index 696e20db..35320e0c 100644
--- a/src/api/routes/guilds/#guild_id/welcome-screen.ts
+++ b/src/api/routes/guilds/#guild_id/welcome-screen.ts
@@ -16,10 +16,10 @@
along with this program. If not, see .
*/
-import { Request, Response, Router } from "express";
-import { Guild, Member, GuildUpdateWelcomeScreenSchema } from "@spacebar/util";
-import { HTTPError } from "lambert-server";
import { route } from "@spacebar/api";
+import { Guild, GuildUpdateWelcomeScreenSchema, Member } from "@spacebar/util";
+import { Request, Response, Router } from "express";
+import { HTTPError } from "lambert-server";
const router: Router = Router();
@@ -35,7 +35,7 @@ router.get("/", route({}), async (req: Request, res: Response) => {
router.patch(
"/",
route({
- body: "GuildUpdateWelcomeScreenSchema",
+ requestBody: "GuildUpdateWelcomeScreenSchema",
permission: "MANAGE_GUILD",
}),
async (req: Request, res: Response) => {
diff --git a/src/api/routes/guilds/#guild_id/widget.ts b/src/api/routes/guilds/#guild_id/widget.ts
index 77af25dc..2cacd8d3 100644
--- a/src/api/routes/guilds/#guild_id/widget.ts
+++ b/src/api/routes/guilds/#guild_id/widget.ts
@@ -16,9 +16,9 @@
along with this program. If not, see .
*/
-import { Request, Response, Router } from "express";
-import { Guild, WidgetModifySchema } from "@spacebar/util";
import { route } from "@spacebar/api";
+import { Guild, WidgetModifySchema } from "@spacebar/util";
+import { Request, Response, Router } from "express";
const router: Router = Router();
@@ -37,7 +37,7 @@ router.get("/", route({}), async (req: Request, res: Response) => {
// https://discord.com/developers/docs/resources/guild#modify-guild-widget
router.patch(
"/",
- route({ body: "WidgetModifySchema", permission: "MANAGE_GUILD" }),
+ route({ requestBody: "WidgetModifySchema", permission: "MANAGE_GUILD" }),
async (req: Request, res: Response) => {
const body = req.body as WidgetModifySchema;
const { guild_id } = req.params;
diff --git a/src/api/routes/guilds/index.ts b/src/api/routes/guilds/index.ts
index c793d185..55fe088e 100644
--- a/src/api/routes/guilds/index.ts
+++ b/src/api/routes/guilds/index.ts
@@ -16,16 +16,16 @@
along with this program. If not, see .
*/
-import { Router, Request, Response } from "express";
-import {
- Guild,
- Config,
- getRights,
- Member,
- DiscordApiErrors,
- GuildCreateSchema,
-} from "@spacebar/util";
import { route } from "@spacebar/api";
+import {
+ Config,
+ DiscordApiErrors,
+ Guild,
+ GuildCreateSchema,
+ Member,
+ getRights,
+} from "@spacebar/util";
+import { Request, Response, Router } from "express";
const router: Router = Router();
@@ -33,7 +33,7 @@ const router: Router = Router();
router.post(
"/",
- route({ body: "GuildCreateSchema", right: "CREATE_GUILDS" }),
+ route({ requestBody: "GuildCreateSchema", right: "CREATE_GUILDS" }),
async (req: Request, res: Response) => {
const body = req.body as GuildCreateSchema;
diff --git a/src/api/routes/guilds/templates/index.ts b/src/api/routes/guilds/templates/index.ts
index bfbb7d3b..8eff5563 100644
--- a/src/api/routes/guilds/templates/index.ts
+++ b/src/api/routes/guilds/templates/index.ts
@@ -16,18 +16,18 @@
along with this program. If not, see .
*/
-import { Request, Response, Router } from "express";
+import { route } from "@spacebar/api";
import {
- Template,
+ Config,
+ DiscordApiErrors,
Guild,
+ GuildTemplateCreateSchema,
+ Member,
Role,
Snowflake,
- Config,
- Member,
- GuildTemplateCreateSchema,
+ Template,
} from "@spacebar/util";
-import { route } from "@spacebar/api";
-import { DiscordApiErrors } from "@spacebar/util";
+import { Request, Response, Router } from "express";
import fetch from "node-fetch";
const router: Router = Router();
@@ -81,7 +81,7 @@ router.get("/:code", route({}), async (req: Request, res: Response) => {
router.post(
"/:code",
- route({ body: "GuildTemplateCreateSchema" }),
+ route({ requestBody: "GuildTemplateCreateSchema" }),
async (req: Request, res: Response) => {
const {
enabled,
diff --git a/src/api/routes/oauth2/authorize.ts b/src/api/routes/oauth2/authorize.ts
index c041f671..ee4b6eaf 100644
--- a/src/api/routes/oauth2/authorize.ts
+++ b/src/api/routes/oauth2/authorize.ts
@@ -16,18 +16,18 @@
along with this program. If not, see .
*/
-import { Router, Request, Response } from "express";
import { route } from "@spacebar/api";
import {
ApiError,
Application,
ApplicationAuthorizeSchema,
- getPermission,
DiscordApiErrors,
Member,
Permissions,
User,
+ getPermission,
} from "@spacebar/util";
+import { Request, Response, Router } from "express";
const router = Router();
// TODO: scopes, other oauth types
@@ -135,7 +135,7 @@ router.get("/", route({}), async (req: Request, res: Response) => {
router.post(
"/",
- route({ body: "ApplicationAuthorizeSchema" }),
+ route({ requestBody: "ApplicationAuthorizeSchema" }),
async (req: Request, res: Response) => {
const body = req.body as ApplicationAuthorizeSchema;
// const { client_id, scope, response_type, redirect_url } = req.query;
diff --git a/src/api/routes/read-states/ack-bulk.ts b/src/api/routes/read-states/ack-bulk.ts
index 2c51893b..bca2001c 100644
--- a/src/api/routes/read-states/ack-bulk.ts
+++ b/src/api/routes/read-states/ack-bulk.ts
@@ -16,14 +16,14 @@
along with this program. If not, see .
*/
-import { Router, Request, Response } from "express";
import { route } from "@spacebar/api";
import { AckBulkSchema, ReadState } from "@spacebar/util";
+import { Request, Response, Router } from "express";
const router = Router();
router.post(
"/",
- route({ body: "AckBulkSchema" }),
+ route({ requestBody: "AckBulkSchema" }),
async (req: Request, res: Response) => {
const body = req.body as AckBulkSchema;
diff --git a/src/api/routes/users/#id/profile.ts b/src/api/routes/users/#id/profile.ts
index 650873ad..a94eb546 100644
--- a/src/api/routes/users/#id/profile.ts
+++ b/src/api/routes/users/#id/profile.ts
@@ -151,7 +151,7 @@ router.get(
router.patch(
"/",
- route({ body: "UserProfileModifySchema" }),
+ route({ requestBody: "UserProfileModifySchema" }),
async (req: Request, res: Response) => {
const body = req.body as UserProfileModifySchema;
diff --git a/src/api/routes/users/@me/channels.ts b/src/api/routes/users/@me/channels.ts
index 04db4fe9..aaba7b70 100644
--- a/src/api/routes/users/@me/channels.ts
+++ b/src/api/routes/users/@me/channels.ts
@@ -16,14 +16,14 @@
along with this program. If not, see .
*/
-import { Request, Response, Router } from "express";
+import { route } from "@spacebar/api";
import {
- Recipient,
- DmChannelDTO,
Channel,
DmChannelCreateSchema,
+ DmChannelDTO,
+ Recipient,
} from "@spacebar/util";
-import { route } from "@spacebar/api";
+import { Request, Response, Router } from "express";
const router: Router = Router();
@@ -41,7 +41,7 @@ router.get("/", route({}), async (req: Request, res: Response) => {
router.post(
"/",
- route({ body: "DmChannelCreateSchema" }),
+ route({ requestBody: "DmChannelCreateSchema" }),
async (req: Request, res: Response) => {
const body = req.body as DmChannelCreateSchema;
res.json(
diff --git a/src/api/routes/users/@me/connections/#connection_name/#connection_id/index.ts b/src/api/routes/users/@me/connections/#connection_name/#connection_id/index.ts
index 3a4e5e0a..351ec99a 100644
--- a/src/api/routes/users/@me/connections/#connection_name/#connection_id/index.ts
+++ b/src/api/routes/users/@me/connections/#connection_name/#connection_id/index.ts
@@ -29,7 +29,7 @@ const router = Router();
// TODO: connection update schema
router.patch(
"/",
- route({ body: "ConnectionUpdateSchema" }),
+ route({ requestBody: "ConnectionUpdateSchema" }),
async (req: Request, res: Response) => {
const { connection_name, connection_id } = req.params;
const body = req.body as ConnectionUpdateSchema;
diff --git a/src/api/routes/users/@me/guilds/#guild_id/settings.ts b/src/api/routes/users/@me/guilds/#guild_id/settings.ts
index 7e9f2a08..2ae82423 100644
--- a/src/api/routes/users/@me/guilds/#guild_id/settings.ts
+++ b/src/api/routes/users/@me/guilds/#guild_id/settings.ts
@@ -16,14 +16,14 @@
along with this program. If not, see .
*/
-import { Router, Response, Request } from "express";
+import { route } from "@spacebar/api";
import {
Channel,
Member,
OrmUtils,
UserGuildSettingsSchema,
} from "@spacebar/util";
-import { route } from "@spacebar/api";
+import { Request, Response, Router } from "express";
const router = Router();
@@ -38,7 +38,7 @@ router.get("/", route({}), async (req: Request, res: Response) => {
router.patch(
"/",
- route({ body: "UserGuildSettingsSchema" }),
+ route({ requestBody: "UserGuildSettingsSchema" }),
async (req: Request, res: Response) => {
const body = req.body as UserGuildSettingsSchema;
diff --git a/src/api/routes/users/@me/index.ts b/src/api/routes/users/@me/index.ts
index b3eeb964..58697cbf 100644
--- a/src/api/routes/users/@me/index.ts
+++ b/src/api/routes/users/@me/index.ts
@@ -16,21 +16,21 @@
along with this program. If not, see .
*/
-import { Router, Request, Response } from "express";
+import { route } from "@spacebar/api";
import {
- User,
- PrivateUserProjection,
- emitEvent,
- UserUpdateEvent,
- handleFile,
- FieldErrors,
adjustEmail,
Config,
- UserModifySchema,
+ emitEvent,
+ FieldErrors,
generateToken,
+ handleFile,
+ PrivateUserProjection,
+ User,
+ UserModifySchema,
+ UserUpdateEvent,
} from "@spacebar/util";
-import { route } from "@spacebar/api";
import bcrypt from "bcrypt";
+import { Request, Response, Router } from "express";
const router: Router = Router();
@@ -45,7 +45,7 @@ router.get("/", route({}), async (req: Request, res: Response) => {
router.patch(
"/",
- route({ body: "UserModifySchema" }),
+ route({ requestBody: "UserModifySchema" }),
async (req: Request, res: Response) => {
const body = req.body as UserModifySchema;
diff --git a/src/api/routes/users/@me/mfa/codes-verification.ts b/src/api/routes/users/@me/mfa/codes-verification.ts
index 69d45e91..7459ede3 100644
--- a/src/api/routes/users/@me/mfa/codes-verification.ts
+++ b/src/api/routes/users/@me/mfa/codes-verification.ts
@@ -16,21 +16,21 @@
along with this program. If not, see .
*/
-import { Router, Request, Response } from "express";
import { route } from "@spacebar/api";
import {
BackupCode,
- generateMfaBackupCodes,
- User,
CodesVerificationSchema,
DiscordApiErrors,
+ User,
+ generateMfaBackupCodes,
} from "@spacebar/util";
+import { Request, Response, Router } from "express";
const router = Router();
router.post(
"/",
- route({ body: "CodesVerificationSchema" }),
+ route({ requestBody: "CodesVerificationSchema" }),
async (req: Request, res: Response) => {
// const { key, nonce, regenerate } = req.body as CodesVerificationSchema;
const { regenerate } = req.body as CodesVerificationSchema;
diff --git a/src/api/routes/users/@me/mfa/codes.ts b/src/api/routes/users/@me/mfa/codes.ts
index 4ddbf78e..178e25c9 100644
--- a/src/api/routes/users/@me/mfa/codes.ts
+++ b/src/api/routes/users/@me/mfa/codes.ts
@@ -16,16 +16,16 @@
along with this program. If not, see .
*/
-import { Router, Request, Response } from "express";
import { route } from "@spacebar/api";
import {
BackupCode,
FieldErrors,
generateMfaBackupCodes,
- User,
MfaCodesSchema,
+ User,
} from "@spacebar/util";
import bcrypt from "bcrypt";
+import { Request, Response, Router } from "express";
const router = Router();
@@ -33,7 +33,7 @@ const router = Router();
router.post(
"/",
- route({ body: "MfaCodesSchema" }),
+ route({ requestBody: "MfaCodesSchema" }),
async (req: Request, res: Response) => {
const { password, regenerate } = req.body as MfaCodesSchema;
diff --git a/src/api/routes/users/@me/mfa/totp/disable.ts b/src/api/routes/users/@me/mfa/totp/disable.ts
index 9f406423..bade76c3 100644
--- a/src/api/routes/users/@me/mfa/totp/disable.ts
+++ b/src/api/routes/users/@me/mfa/totp/disable.ts
@@ -16,22 +16,22 @@
along with this program. If not, see .
*/
-import { Router, Request, Response } from "express";
import { route } from "@spacebar/api";
-import { verifyToken } from "node-2fa";
-import { HTTPError } from "lambert-server";
import {
- User,
- generateToken,
BackupCode,
TotpDisableSchema,
+ User,
+ generateToken,
} from "@spacebar/util";
+import { Request, Response, Router } from "express";
+import { HTTPError } from "lambert-server";
+import { verifyToken } from "node-2fa";
const router = Router();
router.post(
"/",
- route({ body: "TotpDisableSchema" }),
+ route({ requestBody: "TotpDisableSchema" }),
async (req: Request, res: Response) => {
const body = req.body as TotpDisableSchema;
diff --git a/src/api/routes/users/@me/mfa/totp/enable.ts b/src/api/routes/users/@me/mfa/totp/enable.ts
index 4d6b2763..87bbaec9 100644
--- a/src/api/routes/users/@me/mfa/totp/enable.ts
+++ b/src/api/routes/users/@me/mfa/totp/enable.ts
@@ -16,15 +16,15 @@
along with this program. If not, see .
*/
-import { Router, Request, Response } from "express";
-import {
- User,
- generateToken,
- generateMfaBackupCodes,
- TotpEnableSchema,
-} from "@spacebar/util";
import { route } from "@spacebar/api";
+import {
+ TotpEnableSchema,
+ User,
+ generateMfaBackupCodes,
+ generateToken,
+} from "@spacebar/util";
import bcrypt from "bcrypt";
+import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
import { verifyToken } from "node-2fa";
@@ -32,7 +32,7 @@ const router = Router();
router.post(
"/",
- route({ body: "TotpEnableSchema" }),
+ route({ requestBody: "TotpEnableSchema" }),
async (req: Request, res: Response) => {
const body = req.body as TotpEnableSchema;
diff --git a/src/api/routes/users/@me/mfa/webauthn/credentials/index.ts b/src/api/routes/users/@me/mfa/webauthn/credentials/index.ts
index 29dbb7cf..46bdfdd0 100644
--- a/src/api/routes/users/@me/mfa/webauthn/credentials/index.ts
+++ b/src/api/routes/users/@me/mfa/webauthn/credentials/index.ts
@@ -73,7 +73,7 @@ router.get("/", route({}), async (req: Request, res: Response) => {
router.post(
"/",
- route({ body: "WebAuthnPostSchema" }),
+ route({ requestBody: "WebAuthnPostSchema" }),
async (req: Request, res: Response) => {
if (!WebAuthn.fido2) {
// TODO: I did this for typescript and I can't use !
diff --git a/src/api/routes/users/@me/relationships.ts b/src/api/routes/users/@me/relationships.ts
index e9ea47e6..0c32f27c 100644
--- a/src/api/routes/users/@me/relationships.ts
+++ b/src/api/routes/users/@me/relationships.ts
@@ -16,20 +16,20 @@
along with this program. If not, see .
*/
-import {
- RelationshipAddEvent,
- User,
- PublicUserProjection,
- RelationshipType,
- RelationshipRemoveEvent,
- emitEvent,
- Relationship,
- Config,
-} from "@spacebar/util";
-import { Router, Response, Request } from "express";
-import { HTTPError } from "lambert-server";
-import { DiscordApiErrors } from "@spacebar/util";
import { route } from "@spacebar/api";
+import {
+ Config,
+ DiscordApiErrors,
+ PublicUserProjection,
+ Relationship,
+ RelationshipAddEvent,
+ RelationshipRemoveEvent,
+ RelationshipType,
+ User,
+ emitEvent,
+} from "@spacebar/util";
+import { Request, Response, Router } from "express";
+import { HTTPError } from "lambert-server";
const router = Router();
@@ -60,7 +60,7 @@ router.get("/", route({}), async (req: Request, res: Response) => {
router.put(
"/:id",
- route({ body: "RelationshipPutSchema" }),
+ route({ requestBody: "RelationshipPutSchema" }),
async (req: Request, res: Response) => {
return await updateRelationship(
req,
@@ -77,7 +77,7 @@ router.put(
router.post(
"/",
- route({ body: "RelationshipPostSchema" }),
+ route({ requestBody: "RelationshipPostSchema" }),
async (req: Request, res: Response) => {
return await updateRelationship(
req,
diff --git a/src/api/routes/users/@me/settings.ts b/src/api/routes/users/@me/settings.ts
index 62cfe904..9ea4e673 100644
--- a/src/api/routes/users/@me/settings.ts
+++ b/src/api/routes/users/@me/settings.ts
@@ -16,9 +16,9 @@
along with this program. If not, see .
*/
-import { Router, Response, Request } from "express";
-import { User, UserSettingsSchema } from "@spacebar/util";
import { route } from "@spacebar/api";
+import { User, UserSettingsSchema } from "@spacebar/util";
+import { Request, Response, Router } from "express";
const router = Router();
@@ -32,7 +32,7 @@ router.get("/", route({}), async (req: Request, res: Response) => {
router.patch(
"/",
- route({ body: "UserSettingsSchema" }),
+ route({ requestBody: "UserSettingsSchema" }),
async (req: Request, res: Response) => {
const body = req.body as UserSettingsSchema;
if (body.locale === "en") body.locale = "en-US"; // fix discord client crash on unkown locale
diff --git a/src/api/util/handlers/route.ts b/src/api/util/handlers/route.ts
index 04910ed4..331ac0c2 100644
--- a/src/api/util/handlers/route.ts
+++ b/src/api/util/handlers/route.ts
@@ -52,27 +52,31 @@ export type RouteResponse = {
export interface RouteOptions {
permission?: PermissionResolvable;
right?: RightResolvable;
- body?: `${string}Schema`; // typescript interface name
+ requestBody?: `${string}Schema`; // typescript interface name
responses?: {
[status: number]: {
// body?: `${string}Response`;
body?: string;
};
};
- test?: {
- response?: RouteResponse;
- body?: unknown;
- path?: string;
- event?: EVENT | EVENT[];
- headers?: Record;
- };
+ event?: EVENT | EVENT[];
+ summary?: string;
+ description?: string;
+ // test?: {
+ // response?: RouteResponse;
+ // body?: unknown;
+ // path?: string;
+ // event?: EVENT | EVENT[];
+ // headers?: Record;
+ // };
}
export function route(opts: RouteOptions) {
let validate: AnyValidateFunction | undefined;
- if (opts.body) {
- validate = ajv.getSchema(opts.body);
- if (!validate) throw new Error(`Body schema ${opts.body} not found`);
+ if (opts.requestBody) {
+ validate = ajv.getSchema(opts.requestBody);
+ if (!validate)
+ throw new Error(`Body schema ${opts.requestBody} not found`);
}
return async (req: Request, res: Response, next: NextFunction) => {
diff --git a/src/util/schemas/LazyRequestSchema.ts b/src/util/schemas/LazyRequestSchema.ts
index 63e67416..f69ae1f7 100644
--- a/src/util/schemas/LazyRequestSchema.ts
+++ b/src/util/schemas/LazyRequestSchema.ts
@@ -18,7 +18,9 @@
export interface LazyRequestSchema {
guild_id: string;
- channels?: Record;
+ channels?: {
+ [key: string]: [number, number][];
+ };
activities?: boolean;
threads?: boolean;
typing?: true;
diff --git a/src/util/schemas/UserGuildSettingsSchema.ts b/src/util/schemas/UserGuildSettingsSchema.ts
index c295f767..82edae9c 100644
--- a/src/util/schemas/UserGuildSettingsSchema.ts
+++ b/src/util/schemas/UserGuildSettingsSchema.ts
@@ -16,12 +16,12 @@
along with this program. If not, see .
*/
-import { UserGuildSettings, ChannelOverride } from "@spacebar/util";
+import { ChannelOverride, UserGuildSettings } from "@spacebar/util";
// This sucks. I would use a DeepPartial, my own or typeorms, but they both generate inncorect schema
export interface UserGuildSettingsSchema
extends Partial> {
channel_overrides?: {
- [channel_id: string]: Partial;
+ [channel_id: string]: ChannelOverride;
};
}
diff --git a/src/util/schemas/WebAuthnSchema.ts b/src/util/schemas/WebAuthnSchema.ts
index 652cda34..3f5e0da7 100644
--- a/src/util/schemas/WebAuthnSchema.ts
+++ b/src/util/schemas/WebAuthnSchema.ts
@@ -28,9 +28,9 @@ export interface CreateWebAuthnCredentialSchema {
ticket: string;
}
-export type WebAuthnPostSchema = Partial<
- GenerateWebAuthnCredentialsSchema | CreateWebAuthnCredentialSchema
->;
+export type WebAuthnPostSchema =
+ | GenerateWebAuthnCredentialsSchema
+ | CreateWebAuthnCredentialSchema;
export interface WebAuthnTotpSchema {
code: string;
diff --git a/src/util/schemas/index.ts b/src/util/schemas/index.ts
index 22927146..23d03190 100644
--- a/src/util/schemas/index.ts
+++ b/src/util/schemas/index.ts
@@ -58,7 +58,6 @@ export * from "./PurgeSchema";
export * from "./RegisterSchema";
export * from "./RelationshipPostSchema";
export * from "./RelationshipPutSchema";
-export * from "./responses";
export * from "./RoleModifySchema";
export * from "./RolePositionUpdateSchema";
export * from "./SelectProtocolSchema";
@@ -80,7 +79,4 @@ export * from "./VoiceVideoSchema";
export * from "./WebAuthnSchema";
export * from "./WebhookCreateSchema";
export * from "./WidgetModifySchema";
-export * from "./UserRelationsResponse";
-export * from "./GatewayResponse";
-export * from "./GatewayBotResponse";
-export * from "./UserProfileResponse";
+export * from "./responses";