diff --git a/src/api/routes/-/healthz.ts b/src/api/routes/-/healthz.ts
index 6a2f65de..5acd8c8c 100644
--- a/src/api/routes/-/healthz.ts
+++ b/src/api/routes/-/healthz.ts
@@ -20,7 +20,7 @@ import { Router, Response, Request } from "express";
import { route } from "@spacebar/api";
import { getDatabase } from "@spacebar/util";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get("/", route({}), (req: Request, res: Response) => {
if (!getDatabase()) return res.sendStatus(503);
diff --git a/src/api/routes/-/readyz.ts b/src/api/routes/-/readyz.ts
index 6a2f65de..5acd8c8c 100644
--- a/src/api/routes/-/readyz.ts
+++ b/src/api/routes/-/readyz.ts
@@ -20,7 +20,7 @@ import { Router, Response, Request } from "express";
import { route } from "@spacebar/api";
import { getDatabase } from "@spacebar/util";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get("/", route({}), (req: Request, res: Response) => {
if (!getDatabase()) return res.sendStatus(503);
diff --git a/src/api/routes/applications/#id/bot/index.ts b/src/api/routes/applications/#id/bot/index.ts
index af754106..88c348df 100644
--- a/src/api/routes/applications/#id/bot/index.ts
+++ b/src/api/routes/applications/#id/bot/index.ts
@@ -30,7 +30,7 @@ import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
import { verifyToken } from "node-2fa";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.post(
"/",
diff --git a/src/api/routes/applications/#id/entitlements.ts b/src/api/routes/applications/#id/entitlements.ts
index 6388e6b3..63a7e7b9 100644
--- a/src/api/routes/applications/#id/entitlements.ts
+++ b/src/api/routes/applications/#id/entitlements.ts
@@ -19,7 +19,7 @@
import { route } from "@spacebar/api";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/applications/#id/index.ts b/src/api/routes/applications/#id/index.ts
index 2b4bcd88..efb9ecdd 100644
--- a/src/api/routes/applications/#id/index.ts
+++ b/src/api/routes/applications/#id/index.ts
@@ -28,7 +28,7 @@ import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
import { verifyToken } from "node-2fa";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/applications/#id/skus.ts b/src/api/routes/applications/#id/skus.ts
index dc4fad23..0877f4fb 100644
--- a/src/api/routes/applications/#id/skus.ts
+++ b/src/api/routes/applications/#id/skus.ts
@@ -19,7 +19,7 @@
import { route } from "@spacebar/api";
import { Request, Response, Router } from "express";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/applications/detectable.ts b/src/api/routes/applications/detectable.ts
index 5cf9d171..1a111f42 100644
--- a/src/api/routes/applications/detectable.ts
+++ b/src/api/routes/applications/detectable.ts
@@ -19,7 +19,7 @@
import { route } from "@spacebar/api";
import { Request, Response, Router } from "express";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/applications/index.ts b/src/api/routes/applications/index.ts
index 5bba3338..54a01aa9 100644
--- a/src/api/routes/applications/index.ts
+++ b/src/api/routes/applications/index.ts
@@ -27,7 +27,7 @@ import {
} from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/attachments/refresh-urls.ts b/src/api/routes/attachments/refresh-urls.ts
index 7f025e42..b04c12cc 100644
--- a/src/api/routes/attachments/refresh-urls.ts
+++ b/src/api/routes/attachments/refresh-urls.ts
@@ -23,7 +23,7 @@ import {
NewUrlSignatureData,
} from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.post(
"/",
diff --git a/src/api/routes/auth/forgot.ts b/src/api/routes/auth/forgot.ts
index d5a8a2f4..5b4a83cf 100644
--- a/src/api/routes/auth/forgot.ts
+++ b/src/api/routes/auth/forgot.ts
@@ -19,7 +19,7 @@
import { getIpAdress, route, verifyCaptcha } from "@spacebar/api";
import { Config, Email, ForgotPasswordSchema, User } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.post(
"/",
diff --git a/src/api/routes/auth/generate-registration-tokens.ts b/src/api/routes/auth/generate-registration-tokens.ts
index ca5020fb..387375ae 100644
--- a/src/api/routes/auth/generate-registration-tokens.ts
+++ b/src/api/routes/auth/generate-registration-tokens.ts
@@ -20,7 +20,7 @@ import { randomString, route } from "@spacebar/api";
import { Config, ValidRegistrationToken } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
export default router;
router.get(
diff --git a/src/api/routes/auth/location-metadata.ts b/src/api/routes/auth/location-metadata.ts
index 28293e59..2ebfd019 100644
--- a/src/api/routes/auth/location-metadata.ts
+++ b/src/api/routes/auth/location-metadata.ts
@@ -18,7 +18,7 @@
import { IPAnalysis, getIpAdress, route } from "@spacebar/api";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/auth/login.ts b/src/api/routes/auth/login.ts
index a2100333..e76bb658 100644
--- a/src/api/routes/auth/login.ts
+++ b/src/api/routes/auth/login.ts
@@ -30,7 +30,7 @@ import bcrypt from "bcrypt";
import crypto from "crypto";
import { Request, Response, Router } from "express";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
export default router;
router.post(
diff --git a/src/api/routes/auth/logout.ts b/src/api/routes/auth/logout.ts
index 94a3e474..bfbcbe6a 100644
--- a/src/api/routes/auth/logout.ts
+++ b/src/api/routes/auth/logout.ts
@@ -19,7 +19,7 @@
import { route } from "@spacebar/api";
import { Request, Response, Router } from "express";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
export default router;
router.post(
diff --git a/src/api/routes/auth/mfa/totp.ts b/src/api/routes/auth/mfa/totp.ts
index 4df408f9..225fd62e 100644
--- a/src/api/routes/auth/mfa/totp.ts
+++ b/src/api/routes/auth/mfa/totp.ts
@@ -21,7 +21,7 @@ import { BackupCode, TotpSchema, User, generateToken } from "@spacebar/util";
import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
import { verifyToken } from "node-2fa";
-const router = Router();
+const router = Router({ mergeParams: true });
router.post(
"/",
diff --git a/src/api/routes/auth/mfa/webauthn.ts b/src/api/routes/auth/mfa/webauthn.ts
index b58d2944..d904373d 100644
--- a/src/api/routes/auth/mfa/webauthn.ts
+++ b/src/api/routes/auth/mfa/webauthn.ts
@@ -28,7 +28,7 @@ import {
import { Request, Response, Router } from "express";
import { ExpectedAssertionResult } from "fido2-lib";
import { HTTPError } from "lambert-server";
-const router = Router();
+const router = Router({ mergeParams: true });
function toArrayBuffer(buf: Buffer) {
const ab = new ArrayBuffer(buf.length);
diff --git a/src/api/routes/auth/register.ts b/src/api/routes/auth/register.ts
index 9e9d2c98..2a048866 100644
--- a/src/api/routes/auth/register.ts
+++ b/src/api/routes/auth/register.ts
@@ -37,7 +37,7 @@ import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
import { MoreThan } from "typeorm";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.post(
"/",
diff --git a/src/api/routes/auth/reset.ts b/src/api/routes/auth/reset.ts
index da6b11ce..90df676a 100644
--- a/src/api/routes/auth/reset.ts
+++ b/src/api/routes/auth/reset.ts
@@ -28,7 +28,7 @@ import {
import bcrypt from "bcrypt";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
// TODO: the response interface also returns settings, but this route doesn't actually return that.
router.post(
diff --git a/src/api/routes/auth/verify/index.ts b/src/api/routes/auth/verify/index.ts
index 32c3f305..b85120d8 100644
--- a/src/api/routes/auth/verify/index.ts
+++ b/src/api/routes/auth/verify/index.ts
@@ -25,7 +25,7 @@ import {
User,
} from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
async function getToken(user: User) {
const token = await generateToken(user.id);
diff --git a/src/api/routes/auth/verify/resend.ts b/src/api/routes/auth/verify/resend.ts
index 1577d5ec..c9696ebd 100644
--- a/src/api/routes/auth/verify/resend.ts
+++ b/src/api/routes/auth/verify/resend.ts
@@ -20,7 +20,7 @@ import { route } from "@spacebar/api";
import { Email, User } from "@spacebar/util";
import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
-const router = Router();
+const router = Router({ mergeParams: true });
router.post(
"/",
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 5407de82..1889aaaf 100644
--- a/src/api/routes/auth/verify/view-backup-codes-challenge.ts
+++ b/src/api/routes/auth/verify/view-backup-codes-challenge.ts
@@ -20,7 +20,7 @@ import { route } from "@spacebar/api";
import { BackupCodesChallengeSchema, FieldErrors, User } from "@spacebar/util";
import bcrypt from "bcrypt";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.post(
"/",
diff --git a/src/api/routes/beaker.ts b/src/api/routes/beaker.ts
index 200d6a33..62df41e1 100644
--- a/src/api/routes/beaker.ts
+++ b/src/api/routes/beaker.ts
@@ -19,7 +19,7 @@
import { route } from "@spacebar/api";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
// screw off, telemetry requests
router.post(
diff --git a/src/api/routes/channels/#channel_id/attachments.ts b/src/api/routes/channels/#channel_id/attachments.ts
index 5789b06c..df9af9af 100644
--- a/src/api/routes/channels/#channel_id/attachments.ts
+++ b/src/api/routes/channels/#channel_id/attachments.ts
@@ -29,7 +29,7 @@ import { Request, Response, Router } from "express";
import { CloudAttachment } from "../../../../util/entities/CloudAttachment";
import fetch from "node-fetch-commonjs";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.post(
"/",
diff --git a/src/api/routes/channels/#channel_id/directory-entries.ts b/src/api/routes/channels/#channel_id/directory-entries.ts
index da1ff90e..ef01fb40 100644
--- a/src/api/routes/channels/#channel_id/directory-entries.ts
+++ b/src/api/routes/channels/#channel_id/directory-entries.ts
@@ -19,7 +19,7 @@
import { route } from "@spacebar/api";
import { HubDirectoryEntriesResponse } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/channels/#channel_id/followers.ts b/src/api/routes/channels/#channel_id/followers.ts
index 58906e73..f0f18ba0 100644
--- a/src/api/routes/channels/#channel_id/followers.ts
+++ b/src/api/routes/channels/#channel_id/followers.ts
@@ -17,7 +17,7 @@
*/
import { Router } from "express";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
// TODO:
export default router;
diff --git a/src/api/routes/channels/#channel_id/greet.ts b/src/api/routes/channels/#channel_id/greet.ts
index a0b25b99..2052dd43 100644
--- a/src/api/routes/channels/#channel_id/greet.ts
+++ b/src/api/routes/channels/#channel_id/greet.ts
@@ -21,7 +21,7 @@ import { Channel, emitEvent, GreetRequestSchema, Message, MessageCreateEvent, Me
import { Request, Response, Router } from "express";
import { In } from "typeorm";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.post(
"/",
diff --git a/src/api/routes/channels/#channel_id/index.ts b/src/api/routes/channels/#channel_id/index.ts
index 883bb266..9efbfe89 100644
--- a/src/api/routes/channels/#channel_id/index.ts
+++ b/src/api/routes/channels/#channel_id/index.ts
@@ -29,7 +29,7 @@ import {
} from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
// TODO: delete channel
// TODO: Get channel
diff --git a/src/api/routes/channels/#channel_id/invites.ts b/src/api/routes/channels/#channel_id/invites.ts
index e8602729..b283558b 100644
--- a/src/api/routes/channels/#channel_id/invites.ts
+++ b/src/api/routes/channels/#channel_id/invites.ts
@@ -31,7 +31,7 @@ import {
import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.post(
"/",
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 a6dcae6b..e702482c 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
@@ -25,7 +25,7 @@ import {
} from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
// TODO: public read receipts & privacy scoping
// TODO: send read state event to all channel members
diff --git a/src/api/routes/channels/#channel_id/messages/#message_id/crosspost.ts b/src/api/routes/channels/#channel_id/messages/#message_id/crosspost.ts
index 6362941c..6d89c504 100644
--- a/src/api/routes/channels/#channel_id/messages/#message_id/crosspost.ts
+++ b/src/api/routes/channels/#channel_id/messages/#message_id/crosspost.ts
@@ -19,7 +19,7 @@
import { route } from "@spacebar/api";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.post(
"/",
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 351088e1..2439894d 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
@@ -40,7 +40,7 @@ import { HTTPError } from "lambert-server";
import multer from "multer";
import { handleMessage, postHandleMessage, route } from "../../../../../util";
-const router = Router();
+const router = Router({ mergeParams: true });
// TODO: message content/embed string length limit
const messageUpload = multer({
diff --git a/src/api/routes/channels/#channel_id/messages/#message_id/reactions.ts b/src/api/routes/channels/#channel_id/messages/#message_id/reactions.ts
index 4792c534..f99d2145 100644
--- a/src/api/routes/channels/#channel_id/messages/#message_id/reactions.ts
+++ b/src/api/routes/channels/#channel_id/messages/#message_id/reactions.ts
@@ -37,7 +37,7 @@ import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
import { In } from "typeorm";
-const router = Router();
+const router = Router({ mergeParams: true });
// TODO: check if emoji is really an unicode emoji or a prperly encoded external emoji
function getEmoji(emoji: string): PartialEmoji {
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 9b607d59..77fd26d6 100644
--- a/src/api/routes/channels/#channel_id/messages/bulk-delete.ts
+++ b/src/api/routes/channels/#channel_id/messages/bulk-delete.ts
@@ -29,7 +29,7 @@ import {
import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
export default router;
diff --git a/src/api/routes/channels/#channel_id/messages/index.ts b/src/api/routes/channels/#channel_id/messages/index.ts
index a5b77dff..6e240864 100644
--- a/src/api/routes/channels/#channel_id/messages/index.ts
+++ b/src/api/routes/channels/#channel_id/messages/index.ts
@@ -48,7 +48,7 @@ import multer from "multer";
import { FindManyOptions, FindOperator, LessThan, MoreThan, MoreThanOrEqual } from "typeorm";
import { URL } from "url";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
// https://discord.com/developers/docs/resources/channel#create-message
// get messages
diff --git a/src/api/routes/channels/#channel_id/messages/pins/index.ts b/src/api/routes/channels/#channel_id/messages/pins/index.ts
index 6818d902..b12d5957 100644
--- a/src/api/routes/channels/#channel_id/messages/pins/index.ts
+++ b/src/api/routes/channels/#channel_id/messages/pins/index.ts
@@ -30,7 +30,7 @@ import {
import { Request, Response, Router } from "express";
import { IsNull, Not } from "typeorm";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.put(
"/:message_id",
diff --git a/src/api/routes/channels/#channel_id/permissions.ts b/src/api/routes/channels/#channel_id/permissions.ts
index 372a584e..3fcde5ec 100644
--- a/src/api/routes/channels/#channel_id/permissions.ts
+++ b/src/api/routes/channels/#channel_id/permissions.ts
@@ -21,7 +21,7 @@ import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
import { route } from "@spacebar/api";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
// TODO: Only permissions your bot has in the guild or channel can be allowed/denied (unless your bot has a MANAGE_ROLES overwrite in the channel)
diff --git a/src/api/routes/channels/#channel_id/pins.ts b/src/api/routes/channels/#channel_id/pins.ts
index cf225dab..a5aecda7 100644
--- a/src/api/routes/channels/#channel_id/pins.ts
+++ b/src/api/routes/channels/#channel_id/pins.ts
@@ -30,7 +30,7 @@ import {
import { Request, Response, Router } from "express";
import { IsNull, Not } from "typeorm";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
// This is the old endpoint
router.put(
diff --git a/src/api/routes/channels/#channel_id/purge.ts b/src/api/routes/channels/#channel_id/purge.ts
index 012fec1c..01f73b4d 100644
--- a/src/api/routes/channels/#channel_id/purge.ts
+++ b/src/api/routes/channels/#channel_id/purge.ts
@@ -31,7 +31,7 @@ import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
import { Between, FindManyOptions, FindOperator, Not } from "typeorm";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
export default router;
diff --git a/src/api/routes/channels/#channel_id/recipients.ts b/src/api/routes/channels/#channel_id/recipients.ts
index 569bb5cd..025a86f6 100644
--- a/src/api/routes/channels/#channel_id/recipients.ts
+++ b/src/api/routes/channels/#channel_id/recipients.ts
@@ -30,7 +30,7 @@ import {
} from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.put(
"/:user_id",
diff --git a/src/api/routes/channels/#channel_id/typing.ts b/src/api/routes/channels/#channel_id/typing.ts
index bb8d4897..7e6cba41 100644
--- a/src/api/routes/channels/#channel_id/typing.ts
+++ b/src/api/routes/channels/#channel_id/typing.ts
@@ -20,7 +20,7 @@ import { route } from "@spacebar/api";
import { Channel, emitEvent, Member, TypingStartEvent } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.post(
"/",
diff --git a/src/api/routes/channels/#channel_id/webhooks.ts b/src/api/routes/channels/#channel_id/webhooks.ts
index 4e0908b7..a2b43c05 100644
--- a/src/api/routes/channels/#channel_id/webhooks.ts
+++ b/src/api/routes/channels/#channel_id/webhooks.ts
@@ -34,7 +34,7 @@ import crypto from "crypto";
import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/channels/preload-messages.ts b/src/api/routes/channels/preload-messages.ts
index 40bf1295..8ea23adf 100644
--- a/src/api/routes/channels/preload-messages.ts
+++ b/src/api/routes/channels/preload-messages.ts
@@ -19,7 +19,7 @@
import { route } from "@spacebar/api";
import { Config, PreloadMessagesRequestSchema, Message, PreloadMessagesResponseSchema } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.post(
"/",
diff --git a/src/api/routes/collectibles-categories.ts b/src/api/routes/collectibles-categories.ts
index 87e79f55..d662edbd 100644
--- a/src/api/routes/collectibles-categories.ts
+++ b/src/api/routes/collectibles-categories.ts
@@ -20,7 +20,7 @@ import { route } from "@spacebar/api";
import { Request, Response, Router } from "express";
import { CollectiblesCategoriesResponse } from "@spacebar/util";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/collectibles-shop.ts b/src/api/routes/collectibles-shop.ts
index 118c2c0f..066a1e17 100644
--- a/src/api/routes/collectibles-shop.ts
+++ b/src/api/routes/collectibles-shop.ts
@@ -20,7 +20,7 @@ import { route } from "@spacebar/api";
import { Request, Response, Router } from "express";
import { CollectiblesShopResponse } from "@spacebar/util";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/connections/#connection_name/#connection_id/refresh.ts b/src/api/routes/connections/#connection_name/#connection_id/refresh.ts
index d44cf314..46f20aee 100644
--- a/src/api/routes/connections/#connection_name/#connection_id/refresh.ts
+++ b/src/api/routes/connections/#connection_name/#connection_id/refresh.ts
@@ -18,7 +18,7 @@
import { route } from "@spacebar/api";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.post("/", route({}), async (req: Request, res: Response) => {
// TODO:
diff --git a/src/api/routes/connections/#connection_name/authorize.ts b/src/api/routes/connections/#connection_name/authorize.ts
index b43f46d7..37dd4643 100644
--- a/src/api/routes/connections/#connection_name/authorize.ts
+++ b/src/api/routes/connections/#connection_name/authorize.ts
@@ -20,7 +20,7 @@ import { route } from "@spacebar/api";
import { Request, Response, Router } from "express";
import { ConnectionStore, FieldErrors } from "../../../../util";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get("/", route({}), async (req: Request, res: Response) => {
const { connection_name } = req.params;
diff --git a/src/api/routes/connections/#connection_name/callback.ts b/src/api/routes/connections/#connection_name/callback.ts
index ee0db94a..40e0d01c 100644
--- a/src/api/routes/connections/#connection_name/callback.ts
+++ b/src/api/routes/connections/#connection_name/callback.ts
@@ -25,7 +25,7 @@ import {
} from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.post(
"/",
diff --git a/src/api/routes/connections/index.ts b/src/api/routes/connections/index.ts
index 37c20a37..b30d4027 100644
--- a/src/api/routes/connections/index.ts
+++ b/src/api/routes/connections/index.ts
@@ -19,7 +19,7 @@
import { route } from "@spacebar/api";
import { ConnectionConfig } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/discoverable-guilds.ts b/src/api/routes/discoverable-guilds.ts
index 781affe7..ce34aa04 100644
--- a/src/api/routes/discoverable-guilds.ts
+++ b/src/api/routes/discoverable-guilds.ts
@@ -22,7 +22,7 @@ import { route } from "@spacebar/api";
import { Request, Response, Router } from "express";
import { Like } from "typeorm";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/discovery.ts b/src/api/routes/discovery.ts
index dd3cc15d..b2c46505 100644
--- a/src/api/routes/discovery.ts
+++ b/src/api/routes/discovery.ts
@@ -20,7 +20,7 @@ import { route } from "@spacebar/api";
import { Categories } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/categories",
diff --git a/src/api/routes/download.ts b/src/api/routes/download.ts
index 58a4ce76..06588326 100644
--- a/src/api/routes/download.ts
+++ b/src/api/routes/download.ts
@@ -20,7 +20,7 @@ import { route } from "@spacebar/api";
import { FieldErrors, ClientRelease } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/emojis/#emoji_id/source.ts b/src/api/routes/emojis/#emoji_id/source.ts
index 7ce8b42e..28bfd3d3 100644
--- a/src/api/routes/emojis/#emoji_id/source.ts
+++ b/src/api/routes/emojis/#emoji_id/source.ts
@@ -28,7 +28,7 @@ import {
} from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/experiments.ts b/src/api/routes/experiments.ts
index cd206d79..bf120639 100644
--- a/src/api/routes/experiments.ts
+++ b/src/api/routes/experiments.ts
@@ -19,7 +19,7 @@
import { Router, Response, Request } from "express";
import { route } from "@spacebar/api";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get("/", route({}), (req: Request, res: Response) => {
// TODO:
diff --git a/src/api/routes/gateway/bot.ts b/src/api/routes/gateway/bot.ts
index d9101159..df84a017 100644
--- a/src/api/routes/gateway/bot.ts
+++ b/src/api/routes/gateway/bot.ts
@@ -20,7 +20,7 @@ import { route } from "@spacebar/api";
import { Config } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/gateway/index.ts b/src/api/routes/gateway/index.ts
index 9100d5ee..b614870e 100644
--- a/src/api/routes/gateway/index.ts
+++ b/src/api/routes/gateway/index.ts
@@ -20,7 +20,7 @@ import { route } from "@spacebar/api";
import { Config } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/gifs/search.ts b/src/api/routes/gifs/search.ts
index 04e2013a..6c338ccf 100644
--- a/src/api/routes/gifs/search.ts
+++ b/src/api/routes/gifs/search.ts
@@ -28,7 +28,7 @@ import fetch from "node-fetch-commonjs";
import { ProxyAgent } from "proxy-agent";
import http from "http";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/gifs/trending-gifs.ts b/src/api/routes/gifs/trending-gifs.ts
index 34428a54..d0fdc7a1 100644
--- a/src/api/routes/gifs/trending-gifs.ts
+++ b/src/api/routes/gifs/trending-gifs.ts
@@ -28,7 +28,7 @@ import fetch from "node-fetch-commonjs";
import { ProxyAgent } from "proxy-agent";
import http from "http";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/gifs/trending.ts b/src/api/routes/gifs/trending.ts
index c95d8fbb..d858122a 100644
--- a/src/api/routes/gifs/trending.ts
+++ b/src/api/routes/gifs/trending.ts
@@ -28,7 +28,7 @@ import fetch from "node-fetch-commonjs";
import { ProxyAgent } from "proxy-agent";
import http from "http";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/guild-recommendations.ts b/src/api/routes/guild-recommendations.ts
index 3ac31680..dcd512e5 100644
--- a/src/api/routes/guild-recommendations.ts
+++ b/src/api/routes/guild-recommendations.ts
@@ -22,7 +22,7 @@ import { route } from "@spacebar/api";
import { Request, Response, Router } from "express";
import { Like } from "typeorm";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/guilds/#guild_id/audit-logs.ts b/src/api/routes/guilds/#guild_id/audit-logs.ts
index 5dbb0e3f..620f8822 100644
--- a/src/api/routes/guilds/#guild_id/audit-logs.ts
+++ b/src/api/routes/guilds/#guild_id/audit-logs.ts
@@ -18,7 +18,7 @@
import { Router, Response, Request } from "express";
import { route } from "@spacebar/api";
-const router = Router();
+const router = Router({ mergeParams: true });
//TODO: implement audit logs
router.get("/", route({}), async (req: Request, res: Response) => {
diff --git a/src/api/routes/guilds/#guild_id/auto-moderation/rules.ts b/src/api/routes/guilds/#guild_id/auto-moderation/rules.ts
index c09c93c9..15325534 100644
--- a/src/api/routes/guilds/#guild_id/auto-moderation/rules.ts
+++ b/src/api/routes/guilds/#guild_id/auto-moderation/rules.ts
@@ -21,7 +21,7 @@ import { User, AutomodRuleSchema, AutomodRule } from "@spacebar/util";
import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/guilds/#guild_id/bans.ts b/src/api/routes/guilds/#guild_id/bans.ts
index 78951954..ffae8077 100644
--- a/src/api/routes/guilds/#guild_id/bans.ts
+++ b/src/api/routes/guilds/#guild_id/bans.ts
@@ -32,7 +32,7 @@ import {
import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
/* TODO: Deleting the secrets is just a temporary go-around. Views should be implemented for both safety and better handling. */
diff --git a/src/api/routes/guilds/#guild_id/bulk-ban.ts b/src/api/routes/guilds/#guild_id/bulk-ban.ts
index e5f7a0d8..6de43231 100644
--- a/src/api/routes/guilds/#guild_id/bulk-ban.ts
+++ b/src/api/routes/guilds/#guild_id/bulk-ban.ts
@@ -29,7 +29,7 @@ import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
import { Config } from "@spacebar/util";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.post(
"/",
diff --git a/src/api/routes/guilds/#guild_id/channels.ts b/src/api/routes/guilds/#guild_id/channels.ts
index 8f8ee3af..fe383ec5 100644
--- a/src/api/routes/guilds/#guild_id/channels.ts
+++ b/src/api/routes/guilds/#guild_id/channels.ts
@@ -26,7 +26,7 @@ import {
emitEvent,
} from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/guilds/#guild_id/delete.ts b/src/api/routes/guilds/#guild_id/delete.ts
index dee52c81..195190f7 100644
--- a/src/api/routes/guilds/#guild_id/delete.ts
+++ b/src/api/routes/guilds/#guild_id/delete.ts
@@ -21,7 +21,7 @@ import { Guild, GuildDeleteEvent, emitEvent } from "@spacebar/util";
import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
-const router = Router();
+const router = Router({ mergeParams: true });
// discord prefixes this route with /delete instead of using the delete method
// docs are wrong https://discord.com/developers/docs/resources/guild#delete-guild
diff --git a/src/api/routes/guilds/#guild_id/discovery-requirements.ts b/src/api/routes/guilds/#guild_id/discovery-requirements.ts
index 741fa9b3..89727335 100644
--- a/src/api/routes/guilds/#guild_id/discovery-requirements.ts
+++ b/src/api/routes/guilds/#guild_id/discovery-requirements.ts
@@ -19,7 +19,7 @@
import { route } from "@spacebar/api";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/guilds/#guild_id/emojis.ts b/src/api/routes/guilds/#guild_id/emojis.ts
index 22eac91a..19109dc5 100644
--- a/src/api/routes/guilds/#guild_id/emojis.ts
+++ b/src/api/routes/guilds/#guild_id/emojis.ts
@@ -32,7 +32,7 @@ import {
} from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/guilds/#guild_id/index.ts b/src/api/routes/guilds/#guild_id/index.ts
index d2310f6d..2f138d7b 100644
--- a/src/api/routes/guilds/#guild_id/index.ts
+++ b/src/api/routes/guilds/#guild_id/index.ts
@@ -34,7 +34,7 @@ import {
import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/guilds/#guild_id/integrations.ts b/src/api/routes/guilds/#guild_id/integrations.ts
index 3d963af1..e396e235 100644
--- a/src/api/routes/guilds/#guild_id/integrations.ts
+++ b/src/api/routes/guilds/#guild_id/integrations.ts
@@ -18,7 +18,7 @@
import { Router, Response, Request } from "express";
import { route } from "@spacebar/api";
-const router = Router();
+const router = Router({ mergeParams: true });
//TODO: implement integrations list
router.get("/", route({}), async (req: Request, res: Response) => {
diff --git a/src/api/routes/guilds/#guild_id/invites.ts b/src/api/routes/guilds/#guild_id/invites.ts
index e57e1c2d..ec3116c9 100644
--- a/src/api/routes/guilds/#guild_id/invites.ts
+++ b/src/api/routes/guilds/#guild_id/invites.ts
@@ -20,7 +20,7 @@ import { route } from "@spacebar/api";
import { Invite, PublicInviteRelation } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/guilds/#guild_id/member-verification.ts b/src/api/routes/guilds/#guild_id/member-verification.ts
index 2c39093e..20225e2b 100644
--- a/src/api/routes/guilds/#guild_id/member-verification.ts
+++ b/src/api/routes/guilds/#guild_id/member-verification.ts
@@ -18,7 +18,7 @@
import { route } from "@spacebar/api";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
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 a1ee88d2..deaacd8c 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
@@ -35,7 +35,7 @@ import {
} from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
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 5e2bdfe2..5c72429b 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
@@ -20,7 +20,7 @@ import { route } from "@spacebar/api";
import { getPermission, Member, PermissionResolvable } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.patch(
"/",
diff --git a/src/api/routes/guilds/#guild_id/members/#member_id/roles/#role_id/index.ts b/src/api/routes/guilds/#guild_id/members/#member_id/roles/#role_id/index.ts
index 46dd70bb..5a5bfdfd 100644
--- a/src/api/routes/guilds/#guild_id/members/#member_id/roles/#role_id/index.ts
+++ b/src/api/routes/guilds/#guild_id/members/#member_id/roles/#role_id/index.ts
@@ -20,7 +20,7 @@ import { route } from "@spacebar/api";
import { Member } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.delete(
"/",
diff --git a/src/api/routes/guilds/#guild_id/members/index.ts b/src/api/routes/guilds/#guild_id/members/index.ts
index 9260308d..0fa07f22 100644
--- a/src/api/routes/guilds/#guild_id/members/index.ts
+++ b/src/api/routes/guilds/#guild_id/members/index.ts
@@ -22,7 +22,7 @@ import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
import { MoreThan } from "typeorm";
-const router = Router();
+const router = Router({ mergeParams: true });
// TODO: send over websocket
// TODO: check for GUILD_MEMBERS intent
diff --git a/src/api/routes/guilds/#guild_id/messages/search.ts b/src/api/routes/guilds/#guild_id/messages/search.ts
index 94adf9c6..aaf1113f 100644
--- a/src/api/routes/guilds/#guild_id/messages/search.ts
+++ b/src/api/routes/guilds/#guild_id/messages/search.ts
@@ -24,7 +24,7 @@ import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
import { FindManyOptions, In, Like } from "typeorm";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/guilds/#guild_id/premium.ts b/src/api/routes/guilds/#guild_id/premium.ts
index 7b343daf..b72ded26 100644
--- a/src/api/routes/guilds/#guild_id/premium.ts
+++ b/src/api/routes/guilds/#guild_id/premium.ts
@@ -18,7 +18,7 @@
import { Router, Request, Response } from "express";
import { route } from "@spacebar/api";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get("/subscriptions", route({}), async (req: Request, res: Response) => {
// TODO:
diff --git a/src/api/routes/guilds/#guild_id/profile.ts b/src/api/routes/guilds/#guild_id/profile.ts
index b2e713ba..a079b507 100644
--- a/src/api/routes/guilds/#guild_id/profile.ts
+++ b/src/api/routes/guilds/#guild_id/profile.ts
@@ -20,7 +20,7 @@ import { route } from "@spacebar/api";
import { Guild, GuildProfileResponse, GuildVisibilityLevel } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/guilds/#guild_id/profile/index.ts b/src/api/routes/guilds/#guild_id/profile/index.ts
index 60526259..befb1b14 100644
--- a/src/api/routes/guilds/#guild_id/profile/index.ts
+++ b/src/api/routes/guilds/#guild_id/profile/index.ts
@@ -27,7 +27,7 @@ import {
} from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.patch(
"/:member_id",
diff --git a/src/api/routes/guilds/#guild_id/prune.ts b/src/api/routes/guilds/#guild_id/prune.ts
index 2c77340d..9d9de6d3 100644
--- a/src/api/routes/guilds/#guild_id/prune.ts
+++ b/src/api/routes/guilds/#guild_id/prune.ts
@@ -20,7 +20,7 @@ import { route } from "@spacebar/api";
import { Guild, Member, Snowflake } from "@spacebar/util";
import { Request, Response, Router } from "express";
import { IsNull, LessThan } from "typeorm";
-const router = Router();
+const router = Router({ mergeParams: true });
//Returns all inactive members, respecting role hierarchy
const inactiveMembers = async (
diff --git a/src/api/routes/guilds/#guild_id/regions.ts b/src/api/routes/guilds/#guild_id/regions.ts
index b0ae0602..a7fad818 100644
--- a/src/api/routes/guilds/#guild_id/regions.ts
+++ b/src/api/routes/guilds/#guild_id/regions.ts
@@ -20,7 +20,7 @@ import { getIpAdress, getVoiceRegions, route } from "@spacebar/api";
import { Guild } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
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 ea1a782a..3e75f677 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
@@ -29,7 +29,7 @@ import {
import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/guilds/#guild_id/roles/#role_id/member-ids.ts b/src/api/routes/guilds/#guild_id/roles/#role_id/member-ids.ts
index b086193e..6558da58 100644
--- a/src/api/routes/guilds/#guild_id/roles/#role_id/member-ids.ts
+++ b/src/api/routes/guilds/#guild_id/roles/#role_id/member-ids.ts
@@ -20,7 +20,7 @@ import { Router, Request, Response } from "express";
import { Member } from "@spacebar/util";
import { route } from "@spacebar/api";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get("/", route({}), async (req: Request, res: Response) => {
const { guild_id, role_id } = req.params;
diff --git a/src/api/routes/guilds/#guild_id/roles/#role_id/members.ts b/src/api/routes/guilds/#guild_id/roles/#role_id/members.ts
index 539cd5d8..b1506b0b 100644
--- a/src/api/routes/guilds/#guild_id/roles/#role_id/members.ts
+++ b/src/api/routes/guilds/#guild_id/roles/#role_id/members.ts
@@ -20,7 +20,7 @@ import { Router, Request, Response } from "express";
import { DiscordApiErrors, Member, partition } from "@spacebar/util";
import { route } from "@spacebar/api";
-const router = Router();
+const router = Router({ mergeParams: true });
router.patch(
"/",
diff --git a/src/api/routes/guilds/#guild_id/roles/index.ts b/src/api/routes/guilds/#guild_id/roles/index.ts
index bd944324..d2267700 100644
--- a/src/api/routes/guilds/#guild_id/roles/index.ts
+++ b/src/api/routes/guilds/#guild_id/roles/index.ts
@@ -32,7 +32,7 @@ import {
import { Request, Response, Router } from "express";
import { Not } from "typeorm";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get("/", route({}), async (req: Request, res: Response) => {
const guild_id = req.params.guild_id;
diff --git a/src/api/routes/guilds/#guild_id/roles/member-counts.ts b/src/api/routes/guilds/#guild_id/roles/member-counts.ts
index 6502069a..5574e59e 100644
--- a/src/api/routes/guilds/#guild_id/roles/member-counts.ts
+++ b/src/api/routes/guilds/#guild_id/roles/member-counts.ts
@@ -20,7 +20,7 @@ import { Request, Response, Router } from "express";
import { Role, Member } from "@spacebar/util";
import { route } from "@spacebar/api";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get("/", route({}), async (req: Request, res: Response) => {
const { guild_id } = req.params;
diff --git a/src/api/routes/guilds/#guild_id/stickers.ts b/src/api/routes/guilds/#guild_id/stickers.ts
index 88f9a40e..b0ac01a2 100644
--- a/src/api/routes/guilds/#guild_id/stickers.ts
+++ b/src/api/routes/guilds/#guild_id/stickers.ts
@@ -31,7 +31,7 @@ import {
import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
import multer from "multer";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/guilds/#guild_id/templates.ts b/src/api/routes/guilds/#guild_id/templates.ts
index a9c6182f..ef9d12c6 100644
--- a/src/api/routes/guilds/#guild_id/templates.ts
+++ b/src/api/routes/guilds/#guild_id/templates.ts
@@ -21,7 +21,7 @@ import { Guild, Template } from "@spacebar/util";
import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
const TemplateGuildProjection: (keyof Guild)[] = [
"id",
diff --git a/src/api/routes/guilds/#guild_id/vanity-url.ts b/src/api/routes/guilds/#guild_id/vanity-url.ts
index 34595ca6..2d63e6df 100644
--- a/src/api/routes/guilds/#guild_id/vanity-url.ts
+++ b/src/api/routes/guilds/#guild_id/vanity-url.ts
@@ -27,7 +27,7 @@ import {
import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
-const router = Router();
+const router = Router({ mergeParams: true });
const InviteRegex = /\W/g;
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 00820b06..1944033a 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
@@ -29,7 +29,7 @@ import {
} from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
//TODO need more testing when community guild and voice stage channel are working
router.patch(
diff --git a/src/api/routes/guilds/#guild_id/webhooks.ts b/src/api/routes/guilds/#guild_id/webhooks.ts
index 47e19947..6e985708 100644
--- a/src/api/routes/guilds/#guild_id/webhooks.ts
+++ b/src/api/routes/guilds/#guild_id/webhooks.ts
@@ -19,7 +19,7 @@
import { route } from "@spacebar/api";
import { Config, Webhook } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/guilds/#guild_id/welcome-screen.ts b/src/api/routes/guilds/#guild_id/welcome-screen.ts
index 81000b4b..fa28bda2 100644
--- a/src/api/routes/guilds/#guild_id/welcome-screen.ts
+++ b/src/api/routes/guilds/#guild_id/welcome-screen.ts
@@ -25,7 +25,7 @@ import {
} from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/guilds/#guild_id/widget.json.ts b/src/api/routes/guilds/#guild_id/widget.json.ts
index f0518184..75678a90 100644
--- a/src/api/routes/guilds/#guild_id/widget.json.ts
+++ b/src/api/routes/guilds/#guild_id/widget.json.ts
@@ -27,7 +27,7 @@ import {
} from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
// Undocumented API notes:
// An invite is created for the widget_channel_id on request (only if an existing one created by the widget doesn't already exist)
diff --git a/src/api/routes/guilds/#guild_id/widget.png.ts b/src/api/routes/guilds/#guild_id/widget.png.ts
index c42b33e0..005b2672 100644
--- a/src/api/routes/guilds/#guild_id/widget.png.ts
+++ b/src/api/routes/guilds/#guild_id/widget.png.ts
@@ -26,7 +26,7 @@ import { HTTPError } from "lambert-server";
import path from "path";
import { storage } from "../../../../cdn/util/Storage";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
// TODO: use svg templates instead of node-canvas for improved performance and to change it easily
diff --git a/src/api/routes/guilds/#guild_id/widget.ts b/src/api/routes/guilds/#guild_id/widget.ts
index cae0d6be..6773c366 100644
--- a/src/api/routes/guilds/#guild_id/widget.ts
+++ b/src/api/routes/guilds/#guild_id/widget.ts
@@ -20,7 +20,7 @@ import { route } from "@spacebar/api";
import { Guild, WidgetModifySchema } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
// https://discord.com/developers/docs/resources/guild#get-guild-widget-settings
router.get(
diff --git a/src/api/routes/guilds/automations/email-domain-lookup.ts b/src/api/routes/guilds/automations/email-domain-lookup.ts
index ebb76d7a..889f85c2 100644
--- a/src/api/routes/guilds/automations/email-domain-lookup.ts
+++ b/src/api/routes/guilds/automations/email-domain-lookup.ts
@@ -27,7 +27,7 @@ import emailProviders from "email-providers/all.json";
import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
-const router = Router();
+const router = Router({ mergeParams: true });
router.post(
"/",
diff --git a/src/api/routes/guilds/index.ts b/src/api/routes/guilds/index.ts
index a740e60b..c6965c30 100644
--- a/src/api/routes/guilds/index.ts
+++ b/src/api/routes/guilds/index.ts
@@ -27,7 +27,7 @@ import {
} from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
//TODO: create default channel
diff --git a/src/api/routes/guilds/templates/index.ts b/src/api/routes/guilds/templates/index.ts
index 9023a4a7..30f22794 100644
--- a/src/api/routes/guilds/templates/index.ts
+++ b/src/api/routes/guilds/templates/index.ts
@@ -27,7 +27,7 @@ import {
} from "@spacebar/util";
import { Request, Response, Router } from "express";
import fetch from "node-fetch-commonjs";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get(
"/:code",
diff --git a/src/api/routes/hub-waitlist.ts b/src/api/routes/hub-waitlist.ts
index a6501e0e..8a36e297 100644
--- a/src/api/routes/hub-waitlist.ts
+++ b/src/api/routes/hub-waitlist.ts
@@ -22,7 +22,7 @@ import {
HubWaitlistSignupSchema,
} from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.post(
"/signup",
diff --git a/src/api/routes/invites/index.ts b/src/api/routes/invites/index.ts
index 28a3b429..22191881 100644
--- a/src/api/routes/invites/index.ts
+++ b/src/api/routes/invites/index.ts
@@ -30,7 +30,7 @@ import {
import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get(
"/:code",
diff --git a/src/api/routes/oauth2/applications/@me.ts b/src/api/routes/oauth2/applications/@me.ts
index 0c23bdb1..254a835e 100644
--- a/src/api/routes/oauth2/applications/@me.ts
+++ b/src/api/routes/oauth2/applications/@me.ts
@@ -24,7 +24,7 @@ import {
} from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/oauth2/authorize.ts b/src/api/routes/oauth2/authorize.ts
index 63f403a1..515d77be 100644
--- a/src/api/routes/oauth2/authorize.ts
+++ b/src/api/routes/oauth2/authorize.ts
@@ -29,7 +29,7 @@ import {
getPermission,
} from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
// TODO: scopes, other oauth types
diff --git a/src/api/routes/oauth2/tokens.ts b/src/api/routes/oauth2/tokens.ts
index 86290721..6b85bab5 100644
--- a/src/api/routes/oauth2/tokens.ts
+++ b/src/api/routes/oauth2/tokens.ts
@@ -18,7 +18,7 @@
import { Router, Request, Response } from "express";
import { route } from "@spacebar/api";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get("/", route({}), async (req: Request, res: Response) => {
//TODO
diff --git a/src/api/routes/outbound-promotions.ts b/src/api/routes/outbound-promotions.ts
index 1d4564da..f1f9a292 100644
--- a/src/api/routes/outbound-promotions.ts
+++ b/src/api/routes/outbound-promotions.ts
@@ -19,7 +19,7 @@
import { Request, Response, Router } from "express";
import { route } from "@spacebar/api";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get("/", route({}), async (req: Request, res: Response) => {
//TODO
diff --git a/src/api/routes/partners/#guild_id/requirements.ts b/src/api/routes/partners/#guild_id/requirements.ts
index 5e15676a..30ec8b3f 100644
--- a/src/api/routes/partners/#guild_id/requirements.ts
+++ b/src/api/routes/partners/#guild_id/requirements.ts
@@ -19,7 +19,7 @@
import { Router, Request, Response } from "express";
import { route } from "@spacebar/api";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get("/", route({}), async (req: Request, res: Response) => {
const { guild_id } = req.params;
diff --git a/src/api/routes/ping.ts b/src/api/routes/ping.ts
index 73330239..55e4b7d5 100644
--- a/src/api/routes/ping.ts
+++ b/src/api/routes/ping.ts
@@ -20,7 +20,7 @@ import { route } from "@spacebar/api";
import { Config } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/policies/instance/config.ts b/src/api/routes/policies/instance/config.ts
index 6cd1dc2d..9df7ef16 100755
--- a/src/api/routes/policies/instance/config.ts
+++ b/src/api/routes/policies/instance/config.ts
@@ -20,7 +20,7 @@ import { route } from "@spacebar/api";
import { Config, getRights } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/policies/instance/domains.ts b/src/api/routes/policies/instance/domains.ts
index afeb0e85..a4cc0aa1 100644
--- a/src/api/routes/policies/instance/domains.ts
+++ b/src/api/routes/policies/instance/domains.ts
@@ -19,7 +19,7 @@
import { route } from "@spacebar/api";
import { Config } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/policies/instance/index.ts b/src/api/routes/policies/instance/index.ts
index 6e269a5c..8fc214f8 100644
--- a/src/api/routes/policies/instance/index.ts
+++ b/src/api/routes/policies/instance/index.ts
@@ -19,7 +19,7 @@
import { route } from "@spacebar/api";
import { Config } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/policies/instance/limits.ts b/src/api/routes/policies/instance/limits.ts
index 9852459d..0d0ed326 100644
--- a/src/api/routes/policies/instance/limits.ts
+++ b/src/api/routes/policies/instance/limits.ts
@@ -19,7 +19,7 @@
import { route } from "@spacebar/api";
import { Config } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/policies/stats.ts b/src/api/routes/policies/stats.ts
index b2cd3d5a..9c17e997 100644
--- a/src/api/routes/policies/stats.ts
+++ b/src/api/routes/policies/stats.ts
@@ -26,7 +26,7 @@ import {
User,
} from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/read-states/ack-bulk.ts b/src/api/routes/read-states/ack-bulk.ts
index 2f41937b..566cb4e4 100644
--- a/src/api/routes/read-states/ack-bulk.ts
+++ b/src/api/routes/read-states/ack-bulk.ts
@@ -19,7 +19,7 @@
import { route } from "@spacebar/api";
import { AckBulkSchema, ReadState } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.post(
"/",
diff --git a/src/api/routes/safety-hub/@me/index.ts b/src/api/routes/safety-hub/@me/index.ts
index 854d0742..75c9638b 100644
--- a/src/api/routes/safety-hub/@me/index.ts
+++ b/src/api/routes/safety-hub/@me/index.ts
@@ -20,7 +20,7 @@ import { route } from "@spacebar/api";
import { User, AccountStandingResponse } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/scheduled-maintenances/upcoming.json.ts b/src/api/routes/scheduled-maintenances/upcoming.json.ts
index 18f99ec9..de4dcbf1 100644
--- a/src/api/routes/scheduled-maintenances/upcoming.json.ts
+++ b/src/api/routes/scheduled-maintenances/upcoming.json.ts
@@ -18,7 +18,7 @@
import { Router, Request, Response } from "express";
import { route } from "@spacebar/api";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get("/", route({}), async (req: Request, res: Response) => {
res.json({
diff --git a/src/api/routes/science.ts b/src/api/routes/science.ts
index d5cdc173..2d2d5195 100644
--- a/src/api/routes/science.ts
+++ b/src/api/routes/science.ts
@@ -19,7 +19,7 @@
import { route } from "@spacebar/api";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.post(
"/",
diff --git a/src/api/routes/stage-instances.ts b/src/api/routes/stage-instances.ts
index 1d4564da..f1f9a292 100644
--- a/src/api/routes/stage-instances.ts
+++ b/src/api/routes/stage-instances.ts
@@ -19,7 +19,7 @@
import { Request, Response, Router } from "express";
import { route } from "@spacebar/api";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get("/", route({}), async (req: Request, res: Response) => {
//TODO
diff --git a/src/api/routes/sticker-packs/index.ts b/src/api/routes/sticker-packs/index.ts
index 569d1104..7d2fe178 100644
--- a/src/api/routes/sticker-packs/index.ts
+++ b/src/api/routes/sticker-packs/index.ts
@@ -20,7 +20,7 @@ import { route } from "@spacebar/api";
import { StickerPack } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/stickers/#sticker_id/index.ts b/src/api/routes/stickers/#sticker_id/index.ts
index 2ea81bf9..ddbc3978 100644
--- a/src/api/routes/stickers/#sticker_id/index.ts
+++ b/src/api/routes/stickers/#sticker_id/index.ts
@@ -19,7 +19,7 @@
import { route } from "@spacebar/api";
import { Sticker } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/stop.ts b/src/api/routes/stop.ts
index 79e132d7..bf4af562 100644
--- a/src/api/routes/stop.ts
+++ b/src/api/routes/stop.ts
@@ -19,7 +19,7 @@
import { route } from "@spacebar/api";
import { Request, Response, Router } from "express";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.post(
"/",
diff --git a/src/api/routes/store/published-listings/applications.ts b/src/api/routes/store/published-listings/applications.ts
index 5ee63e53..1881d657 100644
--- a/src/api/routes/store/published-listings/applications.ts
+++ b/src/api/routes/store/published-listings/applications.ts
@@ -19,7 +19,7 @@
import { Request, Response, Router } from "express";
import { route } from "@spacebar/api";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get("/:id", route({}), async (req: Request, res: Response) => {
//TODO
diff --git a/src/api/routes/store/published-listings/applications/#id/subscription-plans.ts b/src/api/routes/store/published-listings/applications/#id/subscription-plans.ts
index a15e0bf7..b8f5963f 100644
--- a/src/api/routes/store/published-listings/applications/#id/subscription-plans.ts
+++ b/src/api/routes/store/published-listings/applications/#id/subscription-plans.ts
@@ -19,7 +19,7 @@
import { Request, Response, Router } from "express";
import { route } from "@spacebar/api";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get("/", route({}), async (req: Request, res: Response) => {
//TODO
diff --git a/src/api/routes/store/published-listings/skus.ts b/src/api/routes/store/published-listings/skus.ts
index 5ee63e53..1881d657 100644
--- a/src/api/routes/store/published-listings/skus.ts
+++ b/src/api/routes/store/published-listings/skus.ts
@@ -19,7 +19,7 @@
import { Request, Response, Router } from "express";
import { route } from "@spacebar/api";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get("/:id", route({}), async (req: Request, res: Response) => {
//TODO
diff --git a/src/api/routes/store/published-listings/skus/#sku_id/subscription-plans.ts b/src/api/routes/store/published-listings/skus/#sku_id/subscription-plans.ts
index 4ea35c18..f2ea23cc 100644
--- a/src/api/routes/store/published-listings/skus/#sku_id/subscription-plans.ts
+++ b/src/api/routes/store/published-listings/skus/#sku_id/subscription-plans.ts
@@ -19,7 +19,7 @@
import { Request, Response, Router } from "express";
import { route } from "@spacebar/api";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
const skus = new Map([
[
diff --git a/src/api/routes/teams.ts b/src/api/routes/teams.ts
index 1328f661..142248b6 100644
--- a/src/api/routes/teams.ts
+++ b/src/api/routes/teams.ts
@@ -28,7 +28,7 @@ import {
} from "@spacebar/util";
import { HTTPError } from "lambert-server";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/template.ts.disabled b/src/api/routes/template.ts.disabled
index c9d78a03..2de95f5f 100644
--- a/src/api/routes/template.ts.disabled
+++ b/src/api/routes/template.ts.disabled
@@ -2,7 +2,7 @@
import { Router, Request, Response } from "express";
import { route } from "@spacebar/api";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get("/",route({}), async (req: Request, res: Response) => {
res.json({});
diff --git a/src/api/routes/track.ts b/src/api/routes/track.ts
index 099da18b..644302cd 100644
--- a/src/api/routes/track.ts
+++ b/src/api/routes/track.ts
@@ -19,7 +19,7 @@
import { Router, Response, Request } from "express";
import { route } from "@spacebar/api";
-const router = Router();
+const router = Router({ mergeParams: true });
router.post("/", route({}), (req: Request, res: Response) => {
// TODO:
diff --git a/src/api/routes/updates.ts b/src/api/routes/updates.ts
index 04a455b6..5262dc2d 100644
--- a/src/api/routes/updates.ts
+++ b/src/api/routes/updates.ts
@@ -20,7 +20,7 @@ import { route } from "@spacebar/api";
import { FieldErrors, ClientRelease } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/users/#id/delete.ts b/src/api/routes/users/#id/delete.ts
index 5b1a682c..4c7747c9 100644
--- a/src/api/routes/users/#id/delete.ts
+++ b/src/api/routes/users/#id/delete.ts
@@ -26,7 +26,7 @@ import {
} from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.post(
"/",
diff --git a/src/api/routes/users/#id/index.ts b/src/api/routes/users/#id/index.ts
index 1bd413d3..882fa2b7 100644
--- a/src/api/routes/users/#id/index.ts
+++ b/src/api/routes/users/#id/index.ts
@@ -20,7 +20,7 @@ import { route } from "@spacebar/api";
import { User } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/users/#id/messages.ts b/src/api/routes/users/#id/messages.ts
index 12c9d439..4d724575 100644
--- a/src/api/routes/users/#id/messages.ts
+++ b/src/api/routes/users/#id/messages.ts
@@ -19,7 +19,7 @@
import { route } from "@spacebar/api";
import { Config, DmMessagesResponseSchema, Message, User } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/users/#id/profile.ts b/src/api/routes/users/#id/profile.ts
index ffae3b17..dacdb9e9 100644
--- a/src/api/routes/users/#id/profile.ts
+++ b/src/api/routes/users/#id/profile.ts
@@ -31,7 +31,7 @@ import {
} from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/users/#id/relationships.ts b/src/api/routes/users/#id/relationships.ts
index 3737ca00..4c92c789 100644
--- a/src/api/routes/users/#id/relationships.ts
+++ b/src/api/routes/users/#id/relationships.ts
@@ -20,7 +20,7 @@ import { route } from "@spacebar/api";
import { User, UserRelationsResponse } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/users/@me/activities/statistics/applications.ts b/src/api/routes/users/@me/activities/statistics/applications.ts
index 5e797ce8..a9bc5961 100644
--- a/src/api/routes/users/@me/activities/statistics/applications.ts
+++ b/src/api/routes/users/@me/activities/statistics/applications.ts
@@ -19,7 +19,7 @@
import { Router, Response, Request } from "express";
import { route } from "@spacebar/api";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get("/", route({}), (req: Request, res: Response) => {
// TODO:
diff --git a/src/api/routes/users/@me/affinities/guilds.ts b/src/api/routes/users/@me/affinities/guilds.ts
index e4966148..30fe8879 100644
--- a/src/api/routes/users/@me/affinities/guilds.ts
+++ b/src/api/routes/users/@me/affinities/guilds.ts
@@ -19,7 +19,7 @@
import { Router, Response, Request } from "express";
import { route } from "@spacebar/api";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get("/", route({}), (req: Request, res: Response) => {
// TODO:
diff --git a/src/api/routes/users/@me/affinities/users.ts b/src/api/routes/users/@me/affinities/users.ts
index 76fb8aa6..038f4108 100644
--- a/src/api/routes/users/@me/affinities/users.ts
+++ b/src/api/routes/users/@me/affinities/users.ts
@@ -19,7 +19,7 @@
import { Router, Response, Request } from "express";
import { route } from "@spacebar/api";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get("/", route({}), (req: Request, res: Response) => {
// TODO:
diff --git a/src/api/routes/users/@me/applications/#app_id/entitlements.ts b/src/api/routes/users/@me/applications/#app_id/entitlements.ts
index 1d4564da..f1f9a292 100644
--- a/src/api/routes/users/@me/applications/#app_id/entitlements.ts
+++ b/src/api/routes/users/@me/applications/#app_id/entitlements.ts
@@ -19,7 +19,7 @@
import { Request, Response, Router } from "express";
import { route } from "@spacebar/api";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get("/", route({}), async (req: Request, res: Response) => {
//TODO
diff --git a/src/api/routes/users/@me/billing/country-code.ts b/src/api/routes/users/@me/billing/country-code.ts
index 2a43a396..1907536a 100644
--- a/src/api/routes/users/@me/billing/country-code.ts
+++ b/src/api/routes/users/@me/billing/country-code.ts
@@ -19,7 +19,7 @@
import { Request, Response, Router } from "express";
import { route } from "@spacebar/api";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get("/", route({}), async (req: Request, res: Response) => {
//TODO
diff --git a/src/api/routes/users/@me/billing/payment-sources.ts b/src/api/routes/users/@me/billing/payment-sources.ts
index 5e797ce8..a9bc5961 100644
--- a/src/api/routes/users/@me/billing/payment-sources.ts
+++ b/src/api/routes/users/@me/billing/payment-sources.ts
@@ -19,7 +19,7 @@
import { Router, Response, Request } from "express";
import { route } from "@spacebar/api";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get("/", route({}), (req: Request, res: Response) => {
// TODO:
diff --git a/src/api/routes/users/@me/billing/subscriptions.ts b/src/api/routes/users/@me/billing/subscriptions.ts
index 1d4564da..f1f9a292 100644
--- a/src/api/routes/users/@me/billing/subscriptions.ts
+++ b/src/api/routes/users/@me/billing/subscriptions.ts
@@ -19,7 +19,7 @@
import { Request, Response, Router } from "express";
import { route } from "@spacebar/api";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get("/", route({}), async (req: Request, res: Response) => {
//TODO
diff --git a/src/api/routes/users/@me/channels.ts b/src/api/routes/users/@me/channels.ts
index 8a8fadd9..5ee36da1 100644
--- a/src/api/routes/users/@me/channels.ts
+++ b/src/api/routes/users/@me/channels.ts
@@ -25,7 +25,7 @@ import {
} from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/users/@me/collectibles-marketing.ts b/src/api/routes/users/@me/collectibles-marketing.ts
index e0443101..131f4370 100644
--- a/src/api/routes/users/@me/collectibles-marketing.ts
+++ b/src/api/routes/users/@me/collectibles-marketing.ts
@@ -20,7 +20,7 @@ import { route } from "@spacebar/api";
import { Request, Response, Router } from "express";
import { CollectiblesMarketingResponse } from "@spacebar/util";
-const router = Router();
+const router = Router({ mergeParams: true });
// Unsure what this endpoint does, it seems to only affect the visual style of the shop tab in home
router.get(
diff --git a/src/api/routes/users/@me/collectibles-purchases.ts b/src/api/routes/users/@me/collectibles-purchases.ts
index 5c134505..9491e30a 100644
--- a/src/api/routes/users/@me/collectibles-purchases.ts
+++ b/src/api/routes/users/@me/collectibles-purchases.ts
@@ -19,7 +19,7 @@
import { route } from "@spacebar/api";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
// Unsure what this endpoint does, it seems to only affect the visual style of the shop tab in home
router.get(
diff --git a/src/api/routes/users/@me/connections/#connection_name/#connection_id/access-token.ts b/src/api/routes/users/@me/connections/#connection_name/#connection_id/access-token.ts
index 789a7878..a422050f 100644
--- a/src/api/routes/users/@me/connections/#connection_name/#connection_id/access-token.ts
+++ b/src/api/routes/users/@me/connections/#connection_name/#connection_id/access-token.ts
@@ -26,7 +26,7 @@ import {
RefreshableConnection,
} from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
// TODO: this route is only used for spotify, twitch, and youtube. (battlenet seems to be able to PUT, maybe others also)
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 351ec99a..f499d24d 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
@@ -24,7 +24,7 @@ import {
emitEvent,
} from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
// TODO: connection update schema
router.patch(
diff --git a/src/api/routes/users/@me/connections/index.ts b/src/api/routes/users/@me/connections/index.ts
index 620ce3b5..e02b912a 100644
--- a/src/api/routes/users/@me/connections/index.ts
+++ b/src/api/routes/users/@me/connections/index.ts
@@ -20,7 +20,7 @@ import { Request, Response, Router } from "express";
import { route } from "@spacebar/api";
import { ConnectedAccount, ConnectedAccountDTO } from "@spacebar/util";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get("/", route({}), async (req: Request, res: Response) => {
const connections = await ConnectedAccount.find({
diff --git a/src/api/routes/users/@me/delete.ts b/src/api/routes/users/@me/delete.ts
index e36a1e92..ac5e31e0 100644
--- a/src/api/routes/users/@me/delete.ts
+++ b/src/api/routes/users/@me/delete.ts
@@ -22,7 +22,7 @@ import bcrypt from "bcrypt";
import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
-const router = Router();
+const router = Router({ mergeParams: true });
router.post(
"/",
diff --git a/src/api/routes/users/@me/devices.ts b/src/api/routes/users/@me/devices.ts
index 099da18b..644302cd 100644
--- a/src/api/routes/users/@me/devices.ts
+++ b/src/api/routes/users/@me/devices.ts
@@ -19,7 +19,7 @@
import { Router, Response, Request } from "express";
import { route } from "@spacebar/api";
-const router = Router();
+const router = Router({ mergeParams: true });
router.post("/", route({}), (req: Request, res: Response) => {
// TODO:
diff --git a/src/api/routes/users/@me/disable.ts b/src/api/routes/users/@me/disable.ts
index b4d03e62..07e06055 100644
--- a/src/api/routes/users/@me/disable.ts
+++ b/src/api/routes/users/@me/disable.ts
@@ -21,7 +21,7 @@ import { User } from "@spacebar/util";
import bcrypt from "bcrypt";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.post(
"/",
diff --git a/src/api/routes/users/@me/email-settings.ts b/src/api/routes/users/@me/email-settings.ts
index 4c9e16b1..c5575009 100644
--- a/src/api/routes/users/@me/email-settings.ts
+++ b/src/api/routes/users/@me/email-settings.ts
@@ -19,7 +19,7 @@
import { Router, Response, Request } from "express";
import { route } from "@spacebar/api";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get("/", route({}), (req: Request, res: Response) => {
// TODO:
diff --git a/src/api/routes/users/@me/entitlements.ts b/src/api/routes/users/@me/entitlements.ts
index 7f552622..fd953eee 100644
--- a/src/api/routes/users/@me/entitlements.ts
+++ b/src/api/routes/users/@me/entitlements.ts
@@ -19,7 +19,7 @@
import { Router, Response, Request } from "express";
import { route } from "@spacebar/api";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get("/gifts", route({}), (req: Request, res: Response) => {
// TODO:
diff --git a/src/api/routes/users/@me/guilds.ts b/src/api/routes/users/@me/guilds.ts
index 0bce432b..78adbbd4 100644
--- a/src/api/routes/users/@me/guilds.ts
+++ b/src/api/routes/users/@me/guilds.ts
@@ -29,7 +29,7 @@ import {
import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get(
"/",
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 ac6586ce..9d78773d 100644
--- a/src/api/routes/users/@me/guilds/#guild_id/settings.ts
+++ b/src/api/routes/users/@me/guilds/#guild_id/settings.ts
@@ -25,7 +25,7 @@ import {
} from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
// GET doesn't exist on discord.com
router.get(
diff --git a/src/api/routes/users/@me/guilds/premium/subscription-slots.ts b/src/api/routes/users/@me/guilds/premium/subscription-slots.ts
index 5e797ce8..a9bc5961 100644
--- a/src/api/routes/users/@me/guilds/premium/subscription-slots.ts
+++ b/src/api/routes/users/@me/guilds/premium/subscription-slots.ts
@@ -19,7 +19,7 @@
import { Router, Response, Request } from "express";
import { route } from "@spacebar/api";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get("/", route({}), (req: Request, res: Response) => {
// TODO:
diff --git a/src/api/routes/users/@me/index.ts b/src/api/routes/users/@me/index.ts
index c10e1f12..d05e1812 100644
--- a/src/api/routes/users/@me/index.ts
+++ b/src/api/routes/users/@me/index.ts
@@ -31,7 +31,7 @@ import {
import bcrypt from "bcrypt";
import { Request, Response, Router } from "express";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/users/@me/library.ts b/src/api/routes/users/@me/library.ts
index 54d9b04f..845cd171 100644
--- a/src/api/routes/users/@me/library.ts
+++ b/src/api/routes/users/@me/library.ts
@@ -19,7 +19,7 @@
import { Router, Response, Request } from "express";
import { route } from "@spacebar/api";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get("/", route({}), (req: Request, res: Response) => {
// TODO:
diff --git a/src/api/routes/users/@me/mfa/codes-verification.ts b/src/api/routes/users/@me/mfa/codes-verification.ts
index f71704a9..953648fb 100644
--- a/src/api/routes/users/@me/mfa/codes-verification.ts
+++ b/src/api/routes/users/@me/mfa/codes-verification.ts
@@ -26,7 +26,7 @@ import {
} from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.post(
"/",
diff --git a/src/api/routes/users/@me/mfa/codes.ts b/src/api/routes/users/@me/mfa/codes.ts
index f9cfc4c4..48f3d268 100644
--- a/src/api/routes/users/@me/mfa/codes.ts
+++ b/src/api/routes/users/@me/mfa/codes.ts
@@ -27,7 +27,7 @@ import {
import bcrypt from "bcrypt";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
// TODO: This route is replaced with users/@me/mfa/codes-verification in newer clients
diff --git a/src/api/routes/users/@me/mfa/totp/disable.ts b/src/api/routes/users/@me/mfa/totp/disable.ts
index 362152d7..8ec65736 100644
--- a/src/api/routes/users/@me/mfa/totp/disable.ts
+++ b/src/api/routes/users/@me/mfa/totp/disable.ts
@@ -27,7 +27,7 @@ import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
import { verifyToken } from "node-2fa";
-const router = Router();
+const router = Router({ mergeParams: true });
router.post(
"/",
diff --git a/src/api/routes/users/@me/mfa/totp/enable.ts b/src/api/routes/users/@me/mfa/totp/enable.ts
index 19836e4d..774c7487 100644
--- a/src/api/routes/users/@me/mfa/totp/enable.ts
+++ b/src/api/routes/users/@me/mfa/totp/enable.ts
@@ -28,7 +28,7 @@ import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
import { verifyToken } from "node-2fa";
-const router = Router();
+const router = Router({ mergeParams: true });
router.post(
"/",
diff --git a/src/api/routes/users/@me/mfa/webauthn/credentials/#key_id/index.ts b/src/api/routes/users/@me/mfa/webauthn/credentials/#key_id/index.ts
index 9cf42def..a0f42daa 100644
--- a/src/api/routes/users/@me/mfa/webauthn/credentials/#key_id/index.ts
+++ b/src/api/routes/users/@me/mfa/webauthn/credentials/#key_id/index.ts
@@ -19,7 +19,7 @@
import { route } from "@spacebar/api";
import { SecurityKey, User } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.delete(
"/",
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 f383ffb7..78c7470d 100644
--- a/src/api/routes/users/@me/mfa/webauthn/credentials/index.ts
+++ b/src/api/routes/users/@me/mfa/webauthn/credentials/index.ts
@@ -33,7 +33,7 @@ import bcrypt from "bcrypt";
import { Request, Response, Router } from "express";
import { ExpectedAttestationResult } from "fido2-lib";
import { HTTPError } from "lambert-server";
-const router = Router();
+const router = Router({ mergeParams: true });
const isGenerateSchema = (
body: WebAuthnPostSchema,
diff --git a/src/api/routes/users/@me/notes.ts b/src/api/routes/users/@me/notes.ts
index 365e73b4..64d0032f 100644
--- a/src/api/routes/users/@me/notes.ts
+++ b/src/api/routes/users/@me/notes.ts
@@ -20,7 +20,7 @@ import { route } from "@spacebar/api";
import { Note, Snowflake, User, emitEvent } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get(
"/:id",
diff --git a/src/api/routes/users/@me/relationships.ts b/src/api/routes/users/@me/relationships.ts
index bce0a654..e8064615 100644
--- a/src/api/routes/users/@me/relationships.ts
+++ b/src/api/routes/users/@me/relationships.ts
@@ -31,7 +31,7 @@ import {
import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
-const router = Router();
+const router = Router({ mergeParams: true });
const userProjection: (keyof User)[] = [
"relationships",
diff --git a/src/api/routes/users/@me/settings-proto/1.ts b/src/api/routes/users/@me/settings-proto/1.ts
index 0f21fee3..334a7015 100644
--- a/src/api/routes/users/@me/settings-proto/1.ts
+++ b/src/api/routes/users/@me/settings-proto/1.ts
@@ -30,7 +30,7 @@ import {
import { PreloadedUserSettings } from "discord-protos";
import { JsonValue } from "@protobuf-ts/runtime";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
//#region Protobuf
router.get(
diff --git a/src/api/routes/users/@me/settings-proto/2.ts b/src/api/routes/users/@me/settings-proto/2.ts
index 44d4eeed..9c989758 100644
--- a/src/api/routes/users/@me/settings-proto/2.ts
+++ b/src/api/routes/users/@me/settings-proto/2.ts
@@ -30,7 +30,7 @@ import {
import { FrecencyUserSettings } from "discord-protos";
import { JsonValue } from "@protobuf-ts/runtime";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
//#region Protobuf
router.get(
diff --git a/src/api/routes/users/@me/settings.ts b/src/api/routes/users/@me/settings.ts
index 172f779c..bdca9571 100644
--- a/src/api/routes/users/@me/settings.ts
+++ b/src/api/routes/users/@me/settings.ts
@@ -20,7 +20,7 @@ import { route } from "@spacebar/api";
import { User, UserSettingsSchema } from "@spacebar/util";
import { Request, Response, Router } from "express";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/voice/regions.ts b/src/api/routes/voice/regions.ts
index 10a8b21d..9fdd6fde 100644
--- a/src/api/routes/voice/regions.ts
+++ b/src/api/routes/voice/regions.ts
@@ -19,7 +19,7 @@
import { getIpAdress, getVoiceRegions, route } from "@spacebar/api";
import { Request, Response, Router } from "express";
-const router: Router = Router();
+const router: Router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/webhooks/#webhook_id/#token/github.ts b/src/api/routes/webhooks/#webhook_id/#token/github.ts
index 1938ba1b..f5d098b3 100644
--- a/src/api/routes/webhooks/#webhook_id/#token/github.ts
+++ b/src/api/routes/webhooks/#webhook_id/#token/github.ts
@@ -4,7 +4,7 @@ import { NextFunction, Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
import { executeWebhook } from "../../../../util/handlers/Webhook";
-const router = Router();
+const router = Router({ mergeParams: true });
const parseGitHubWebhook = (
req: Request,
diff --git a/src/api/routes/webhooks/#webhook_id/#token/index.ts b/src/api/routes/webhooks/#webhook_id/#token/index.ts
index 2467a7db..18de03f1 100644
--- a/src/api/routes/webhooks/#webhook_id/#token/index.ts
+++ b/src/api/routes/webhooks/#webhook_id/#token/index.ts
@@ -13,7 +13,7 @@ import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
import multer from "multer";
import { executeWebhook } from "../../../../util/handlers/Webhook";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
diff --git a/src/api/routes/webhooks/#webhook_id/index.ts b/src/api/routes/webhooks/#webhook_id/index.ts
index 8f7a93b7..213f9288 100644
--- a/src/api/routes/webhooks/#webhook_id/index.ts
+++ b/src/api/routes/webhooks/#webhook_id/index.ts
@@ -13,7 +13,7 @@ import {
} from "@spacebar/util";
import { Request, Response, Router } from "express";
import { HTTPError } from "lambert-server";
-const router = Router();
+const router = Router({ mergeParams: true });
router.get(
"/",
|