diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/settings/trust-portal/actions/check-dns-record.ts b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/settings/trust-portal/actions/check-dns-record.ts index 4d4eede516..c799cef1ea 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/settings/trust-portal/actions/check-dns-record.ts +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/settings/trust-portal/actions/check-dns-record.ts @@ -94,7 +94,9 @@ export const checkDnsRecordAction = authActionClient Array.isArray(record.txt) && record.txt.length > 0 ) { - return record.txt.includes(expectedTxtValue); + return record.txt.some( + (txt: string) => txt === expectedTxtValue, + ); } return false; }); @@ -103,13 +105,19 @@ export const checkDnsRecordAction = authActionClient const isVerified = isCnameVerified && isTxtVerified; if (!isVerified) { - throw new Error( - "Error verifying DNS records. Please ensure both CNAME and TXT records are correctly configured, or wait a few minutes and try again.", - ); + return { + success: false, + isCnameVerified, + isTxtVerified, + error: "Error verifying DNS records. Please ensure both CNAME and TXT records are correctly configured, or wait a few minutes and try again.", + }; } if (!env.VERCEL_PROJECT_ID) { - throw new Error("Vercel project ID is not set."); + return { + success: false, + error: "Vercel project ID is not set.", + }; } const isExistingRecord = await vercel.projects.getProjectDomains({ @@ -157,5 +165,7 @@ export const checkDnsRecordAction = authActionClient return { success: true, + isCnameVerified, + isTxtVerified, }; }); diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/settings/trust-portal/components/TrustPortalDomain.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/settings/trust-portal/components/TrustPortalDomain.tsx index 5e01cc7367..975e7913fd 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/settings/trust-portal/components/TrustPortalDomain.tsx +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/settings/trust-portal/components/TrustPortalDomain.tsx @@ -32,7 +32,7 @@ import { AlertCircle, CheckCircle, } from "lucide-react"; -import React from "react"; +import React, { useEffect, useState } from "react"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@comp/ui/tooltip"; const trustPortalDomainSchema = z.object({ @@ -57,6 +57,15 @@ export function TrustPortalDomain({ orgId: string; }) { const t = useI18n(); + const [isCnameVerified, setIsCnameVerified] = useState(false); + const [isTxtVerified, setIsTxtVerified] = useState(false); + + useEffect(() => { + const isCnameVerified = localStorage.getItem(`${initialDomain}-isCnameVerified`); + const isTxtVerified = localStorage.getItem(`${initialDomain}-isTxtVerified`); + setIsCnameVerified(isCnameVerified === "true"); + setIsTxtVerified(isTxtVerified === "true"); + }, []); const updateCustomDomain = useAction(customDomainAction, { onSuccess: (data) => { @@ -69,7 +78,28 @@ export function TrustPortalDomain({ const checkDnsRecord = useAction(checkDnsRecordAction, { onSuccess: (data) => { - toast.success("DNS record verified."); + if (data?.data?.error) { + toast.error(data.data.error); + + if (data.data?.isCnameVerified) { + setIsCnameVerified(true); + localStorage.setItem(`${initialDomain}-isCnameVerified`, "true"); + } + if (data.data?.isTxtVerified) { + setIsTxtVerified(true); + localStorage.setItem(`${initialDomain}-isTxtVerified`, "true"); + } + } else { + if (data.data?.isCnameVerified) { + setIsCnameVerified(true); + localStorage.removeItem(`${initialDomain}-isTxtVerified`); + } + if (data.data?.isTxtVerified) { + setIsTxtVerified(true); + localStorage.removeItem(`${initialDomain}-isCnameVerified`); + } + toast.success("DNS record verified."); + } }, onError: (error) => { toast.error("DNS record verification failed, check the records are valid or try again later."); @@ -174,10 +204,11 @@ export function TrustPortalDomain({ {form.watch("domain") === initialDomain && !domainVerified && (
| Verified | Type | Name | Value | @@ -185,6 +216,13 @@ export function TrustPortalDomain({
|---|---|---|---|
|
+ {isCnameVerified ? (
+ |
CNAME |
@@ -223,6 +261,13 @@ export function TrustPortalDomain({
|
|
|
+ {isTxtVerified ? (
+ |
TXT |
@@ -265,7 +310,7 @@ export function TrustPortalDomain({
|