Skip to content

Commit 2c8c280

Browse files
committed
finalize RESERVED_SLUGS
1 parent 7cc8ba4 commit 2c8c280

6 files changed

Lines changed: 19 additions & 12 deletions

File tree

apps/web/app/api/workspaces/[idOrSlug]/exists/route.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { withSession } from "@/lib/auth";
22
import { prisma } from "@dub/prisma";
3-
import { DEFAULT_REDIRECTS, RESERVED_KEYS } from "@dub/utils";
3+
import { DEFAULT_REDIRECTS, RESERVED_SLUGS } from "@dub/utils";
44
import { NextResponse } from "next/server";
55

66
// GET /api/workspaces/[idOrSlug]/exists – check if a project exists
77
export const GET = withSession(async ({ params }) => {
88
const { idOrSlug: slug } = params;
9-
if (RESERVED_KEYS.includes(slug) || DEFAULT_REDIRECTS[slug]) {
9+
if (RESERVED_SLUGS.includes(slug) || DEFAULT_REDIRECTS[slug]) {
1010
return NextResponse.json(1);
1111
}
1212
const project = await prisma.project.findUnique({

apps/web/lib/api/links/utils/key-checks.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
DEFAULT_REDIRECTS,
77
isDubDomain,
88
isReservedKeyGlobal,
9-
RESERVED_KEYS,
9+
RESERVED_SLUGS,
1010
} from "@dub/utils";
1111

1212
export async function keyChecks({
@@ -43,7 +43,7 @@ export async function keyChecks({
4343

4444
if (isDubDomain(domain) && process.env.NEXT_PUBLIC_IS_DUB) {
4545
if (domain === "dub.sh" || domain === "dub.link") {
46-
if (DEFAULT_REDIRECTS[key] || RESERVED_KEYS.includes(key)) {
46+
if (DEFAULT_REDIRECTS[key] || RESERVED_SLUGS.includes(key)) {
4747
return {
4848
error: "Duplicate key: This short link already exists.",
4949
code: "conflict",

apps/web/lib/middleware/utils/app-redirect.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { RESERVED_KEYS } from "@dub/utils";
1+
import { RESERVED_SLUGS } from "@dub/utils";
22

33
const APP_REDIRECTS = {
44
"/account": "/account/settings",
@@ -13,7 +13,7 @@ export const appRedirect = (path: string) => {
1313
}
1414
// Redirect "/[slug]" to "/[slug]/links"
1515
const rootRegex = /^\/([^\/]+)$/;
16-
if (rootRegex.test(path) && !RESERVED_KEYS.includes(path.split("/")[1]))
16+
if (rootRegex.test(path) && !RESERVED_SLUGS.includes(path.split("/")[1]))
1717
return path.replace(rootRegex, "/$1/links");
1818

1919
// Redirect "programs/[programId]/settings" to "programs/[programId]/settings/rewards" (first tab)

apps/web/lib/zod/schemas/workspaces.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import z from "@/lib/zod";
2-
import { DEFAULT_REDIRECTS, RESERVED_KEYS, validSlugRegex } from "@dub/utils";
2+
import { DEFAULT_REDIRECTS, RESERVED_SLUGS, validSlugRegex } from "@dub/utils";
33
import slugify from "@sindresorhus/slugify";
44
import { DomainSchema } from "./domains";
55
import { planSchema, roleSchema } from "./misc";
@@ -133,9 +133,12 @@ export const createWorkspaceSchema = z.object({
133133
.max(48, "Slug must be less than 48 characters")
134134
.transform((v) => slugify(v))
135135
.refine((v) => validSlugRegex.test(v), { message: "Invalid slug format" })
136-
.refine(async (v) => !(RESERVED_KEYS.includes(v) || DEFAULT_REDIRECTS[v]), {
137-
message: "Cannot use reserved slugs",
138-
}),
136+
.refine(
137+
async (v) => !(RESERVED_SLUGS.includes(v) || DEFAULT_REDIRECTS[v]),
138+
{
139+
message: "Cannot use reserved slugs",
140+
},
141+
),
139142
logo: z.string().optional(),
140143
conversionEnabled: z.boolean().optional(),
141144
});

packages/utils/src/constants/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,5 @@ export * from "./misc";
1515
export * from "./plan-compare";
1616
export * from "./pricing";
1717
export * from "./regions";
18-
export * from "./reserved-keys";
18+
export * from "./reserved-slugs";
1919
export * from "./saml";

packages/utils/src/constants/reserved-keys.ts renamed to packages/utils/src/constants/reserved-slugs.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* - cannot be used as a workspace slug
55
*/
66

7-
export const RESERVED_KEYS = [
7+
export const RESERVED_SLUGS = [
88
"va",
99
"static",
1010
"stats",
@@ -48,4 +48,8 @@ export const RESERVED_KEYS = [
4848
"wrapped",
4949
"invoices",
5050
"onboarding",
51+
"programs",
52+
"partners",
53+
"payouts",
54+
"resources",
5155
];

0 commit comments

Comments
 (0)