diff --git a/apps/web/app/(ee)/api/stripe/webhook/checkout-session-completed.ts b/apps/web/app/(ee)/api/stripe/webhook/checkout-session-completed.ts index b6b565be0f9..a427a43c914 100644 --- a/apps/web/app/(ee)/api/stripe/webhook/checkout-session-completed.ts +++ b/apps/web/app/(ee)/api/stripe/webhook/checkout-session-completed.ts @@ -133,15 +133,6 @@ export async function checkoutSessionCompleted( variant: "marketing", })), ), - // enable dub.link premium default domain for the workspace - prisma.defaultDomains.update({ - where: { - projectId: workspaceId, - }, - data: { - dublink: true, - }, - }), // expire tokens cache tokenCache.expireMany({ hashedKeys: updatedWorkspace.restrictedTokens.map( diff --git a/apps/web/app/(ee)/api/stripe/webhook/customer-subscription-deleted.ts b/apps/web/app/(ee)/api/stripe/webhook/customer-subscription-deleted.ts index 692c3d65197..dbfa3ae87a0 100644 --- a/apps/web/app/(ee)/api/stripe/webhook/customer-subscription-deleted.ts +++ b/apps/web/app/(ee)/api/stripe/webhook/customer-subscription-deleted.ts @@ -118,17 +118,6 @@ export async function customerSubscriptionDeleted( paymentFailedAt: null, }, }), - - // disable dub.link premium default domain for the workspace - prisma.defaultDomains.update({ - where: { - projectId: workspace.id, - }, - data: { - dublink: false, - }, - }), - // remove logo from all domains for the workspace prisma.domain.updateMany({ where: { diff --git a/apps/web/app/api/domains/default/route.ts b/apps/web/app/api/domains/default/route.ts index 0bdf0e92153..a88af222933 100644 --- a/apps/web/app/api/domains/default/route.ts +++ b/apps/web/app/api/domains/default/route.ts @@ -1,4 +1,3 @@ -import { DubApiError } from "@/lib/api/errors"; import { withWorkspace } from "@/lib/auth"; import { getDefaultDomainsQuerySchema } from "@/lib/zod/schemas/domains"; import { prisma } from "@dub/prisma"; @@ -17,7 +16,6 @@ export const GET = withWorkspace( }, select: { dubsh: true, - dublink: true, chatgpt: true, sptifi: true, gitnew: true, @@ -60,21 +58,12 @@ export const PATCH = withWorkspace( await req.json(), ); - if (workspace.plan === "free" && defaultDomains.includes("dub.link")) { - throw new DubApiError({ - code: "forbidden", - message: - "You can only use dub.link on a Pro plan and above. Upgrade to Pro to use this domain.", - }); - } - const response = await prisma.defaultDomains.update({ where: { projectId: workspace.id, }, data: { dubsh: defaultDomains.includes("dub.sh"), - dublink: defaultDomains.includes("dub.link"), chatgpt: defaultDomains.includes("chatg.pt"), sptifi: defaultDomains.includes("spti.fi"), gitnew: defaultDomains.includes("git.new"), diff --git a/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/settings/domains/default/page-client.tsx b/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/settings/domains/default/page-client.tsx index d115c3f03e7..b4ef38e81a5 100644 --- a/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/settings/domains/default/page-client.tsx +++ b/apps/web/app/app.dub.co/(dashboard)/[slug]/(ee)/settings/domains/default/page-client.tsx @@ -5,7 +5,7 @@ import useDefaultDomains from "@/lib/swr/use-default-domains"; import useWorkspace from "@/lib/swr/use-workspace"; import { DomainCardTitleColumn } from "@/ui/domains/domain-card-title-column"; import { UpgradeRequiredToast } from "@/ui/shared/upgrade-required-toast"; -import { Logo, Switch, TooltipContent } from "@dub/ui"; +import { Logo, Switch } from "@dub/ui"; import { Amazon, CalendarDays, @@ -75,9 +75,7 @@ export function DefaultDomains() {
- {DUB_DOMAINS.filter( - (domain) => domain.slug !== "dub.link" || !flags?.noDubLink, - ).map(({ slug, description }) => { + {DUB_DOMAINS.map(({ slug, description }) => { return (
- ) : undefined) - } + disabledTooltip={permissionsError ?? undefined} checked={defaultDomains?.includes(slug)} fn={() => { const oldDefaultDomains = defaultDomains.slice(); diff --git a/apps/web/lib/edge-config/get-feature-flags.ts b/apps/web/lib/edge-config/get-feature-flags.ts index 8e2aa591870..95d219d69bc 100644 --- a/apps/web/lib/edge-config/get-feature-flags.ts +++ b/apps/web/lib/edge-config/get-feature-flags.ts @@ -16,7 +16,6 @@ export const getFeatureFlags = async ({ } const workspaceFeatures: Record = { - noDubLink: false, analyticsSettingsSiteVisitTracking: false, }; diff --git a/apps/web/lib/edge-config/is-reserved-username.ts b/apps/web/lib/edge-config/is-reserved-username.ts index f8798a036df..48a4e23a666 100644 --- a/apps/web/lib/edge-config/is-reserved-username.ts +++ b/apps/web/lib/edge-config/is-reserved-username.ts @@ -1,7 +1,7 @@ import { get } from "@vercel/edge-config"; /** - * Only for dub.sh / dub.link domains + * Only for dub.sh domain * Check if a username is reserved – should only be available on Pro+ */ export const isReservedUsername = async (key: string) => { diff --git a/apps/web/lib/swr/use-default-domains.ts b/apps/web/lib/swr/use-default-domains.ts index 39bd7b5db48..5aee474b00a 100644 --- a/apps/web/lib/swr/use-default-domains.ts +++ b/apps/web/lib/swr/use-default-domains.ts @@ -1,10 +1,9 @@ import { fetcher } from "@dub/utils"; -import { useMemo } from "react"; import useSWR from "swr"; import useWorkspace from "./use-workspace"; export default function useDefaultDomains(opts: { search?: string } = {}) { - const { id: workspaceId, flags } = useWorkspace(); + const { id: workspaceId } = useWorkspace(); const { data, error, mutate } = useSWR( workspaceId && @@ -18,14 +17,8 @@ export default function useDefaultDomains(opts: { search?: string } = {}) { }, ); - const defaultDomains = useMemo(() => { - return flags?.noDubLink - ? data?.filter((domain) => domain !== "dub.link") - : data; - }, [data, flags]); - return { - defaultDomains, + defaultDomains: data, loading: !data && !error, mutate, error, diff --git a/apps/web/lib/swr/use-domains.ts b/apps/web/lib/swr/use-domains.ts index 12b8228223a..de00121bcc1 100644 --- a/apps/web/lib/swr/use-domains.ts +++ b/apps/web/lib/swr/use-domains.ts @@ -87,8 +87,6 @@ export default function useDomains({ activeWorkspaceDomains.find(({ primary }) => primary)?.slug || activeWorkspaceDomains[0].slug ); - } else if (activeDefaultDomains.find(({ slug }) => slug === "dub.link")) { - return "dub.link"; } return SHORT_DOMAIN; }, [activeDefaultDomains, activeWorkspaceDomains]); diff --git a/apps/web/lib/types.ts b/apps/web/lib/types.ts index ef5d375ca9f..8a2d017e50a 100644 --- a/apps/web/lib/types.ts +++ b/apps/web/lib/types.ts @@ -260,7 +260,7 @@ export type UtmTemplateWithUserProps = UtmTemplateProps & { export type PlanProps = (typeof plans)[number]; -export type BetaFeatures = "noDubLink" | "analyticsSettingsSiteVisitTracking"; +export type BetaFeatures = "analyticsSettingsSiteVisitTracking"; export type PartnerBetaFeatures = "postbacks"; diff --git a/apps/web/lib/zod/schemas/workspaces.ts b/apps/web/lib/zod/schemas/workspaces.ts index b4f8250b95a..7ea0a99494f 100644 --- a/apps/web/lib/zod/schemas/workspaces.ts +++ b/apps/web/lib/zod/schemas/workspaces.ts @@ -102,9 +102,7 @@ export const WorkspaceSchema = z ), dotLinkClaimed: z .boolean() - .describe( - "Whether the workspace has claimed a free .link domain. (dub.link/free)", - ), + .describe("Whether the workspace has claimed a free .link domain."), createdAt: z .date() .describe("The date and time when the workspace was created."), diff --git a/apps/web/ui/domains/domain-card-title-column.tsx b/apps/web/ui/domains/domain-card-title-column.tsx index 049fd3c4e70..31157c9ec07 100644 --- a/apps/web/ui/domains/domain-card-title-column.tsx +++ b/apps/web/ui/domains/domain-card-title-column.tsx @@ -1,6 +1,5 @@ import { ArrowTurnRight2, Flag2, Globe } from "@dub/ui/icons"; import { cn, getPrettyUrl, punycode } from "@dub/utils"; -import { Star } from "lucide-react"; export function DomainCardTitleColumn({ domain, @@ -51,11 +50,6 @@ export function DomainCardTitleColumn({ Primary - ) : defaultDomain && domain === "dub.link" ? ( - - - Premium - ) : null}
{(!defaultDomain || description) && ( diff --git a/apps/web/ui/links/use-available-domains.ts b/apps/web/ui/links/use-available-domains.ts index be48f059d77..fdac2b2e877 100644 --- a/apps/web/ui/links/use-available-domains.ts +++ b/apps/web/ui/links/use-available-domains.ts @@ -60,7 +60,7 @@ export function useAvailableDomains( // If domain not found at all, return all active domains return [ ...sortDomains(activeWorkspaceDomains || []), - ...sortDomains(activeDefaultDomains, "dub.link"), + ...sortDomains(activeDefaultDomains, "dub.sh"), ]; } @@ -71,7 +71,7 @@ export function useAvailableDomains( return [ ...sortDomains(activeWorkspaceDomains || []), ...(isDefaultDomain ? [] : [domain]), - ...sortDomains(activeDefaultDomains, "dub.link"), + ...sortDomains(activeDefaultDomains, "dub.sh"), ...(isDefaultDomain ? [domain] : []), ]; } @@ -83,8 +83,8 @@ export function useAvailableDomains( ...domain, isWorkspaceDomain: true, })), - // Default domains next, with dub.link first, then alphabetically - ...sortDomains(activeDefaultDomains, "dub.link").map((domain) => ({ + // Default domains next, with dub.sh first, then alphabetically + ...sortDomains(activeDefaultDomains, "dub.sh").map((domain) => ({ ...domain, isWorkspaceDomain: false, })), diff --git a/packages/prisma/schema/domain.prisma b/packages/prisma/schema/domain.prisma index 5bb19ddbfd5..2ae451e303b 100644 --- a/packages/prisma/schema/domain.prisma +++ b/packages/prisma/schema/domain.prisma @@ -47,7 +47,6 @@ model RegisteredDomain { model DefaultDomains { id String @id @default(cuid()) - dublink Boolean @default(false) dubsh Boolean @default(true) chatgpt Boolean @default(true) sptifi Boolean @default(true) diff --git a/packages/utils/src/constants/dub-domains.ts b/packages/utils/src/constants/dub-domains.ts index 623560896e2..10a33eebd73 100644 --- a/packages/utils/src/constants/dub-domains.ts +++ b/packages/utils/src/constants/dub-domains.ts @@ -14,18 +14,6 @@ export const DUB_DOMAINS = [ }, ...(process.env.NEXT_PUBLIC_IS_DUB ? [ - { - id: "clxp3lfsb00011na8tfs7t0lx", - slug: "dub.link", - verified: true, - primary: true, - archived: false, - placeholder: "https://dub.co/help/article/dub-links", - allowedHostnames: [], - description: - "Premium short domain on Dub – only available on our Pro plan and above.", - projectId: DUB_WORKSPACE_ID, - }, { id: "clce1z7cs00y8rbstk4xtnj0k", slug: "chatg.pt", diff --git a/packages/utils/src/constants/pricing/pricing-plan-compare-features.tsx b/packages/utils/src/constants/pricing/pricing-plan-compare-features.tsx index 05d915d71e2..b37b91cb9e2 100644 --- a/packages/utils/src/constants/pricing/pricing-plan-compare-features.tsx +++ b/packages/utils/src/constants/pricing/pricing-plan-compare-features.tsx @@ -415,18 +415,6 @@ export const PRICING_PLAN_COMPARE_FEATURES: { { text: () => <>SSL certificates, }, - { - check: { - default: true, - free: false, - }, - text: () => ( - <> - Premium dub.link domain - - ), - href: "https://dub.co/help/article/default-dub-domains#premium-dublink-domain", - }, { check: { default: true, diff --git a/packages/utils/src/constants/reserved-slugs.ts b/packages/utils/src/constants/reserved-slugs.ts index 5d14d6b8c3e..576e39e3734 100644 --- a/packages/utils/src/constants/reserved-slugs.ts +++ b/packages/utils/src/constants/reserved-slugs.ts @@ -1,6 +1,6 @@ /** * Check if a key is reserved: - * - cannot be registered for a short link (only for dub.sh / dub.link domains) + * - cannot be registered for a short link (only for dub.sh domain) * - cannot be used as a workspace slug */