"use client"; import { useState } from "react"; import { useTranslations } from "next-intl"; import { Button } from "@/shared/components"; interface DenoRelayModalProps { isOpen: boolean; onClose: () => void; onDeployed: (poolProxyId: string, relayUrl: string) => void; } export default function DenoRelayModal({ isOpen, onClose, onDeployed }: DenoRelayModalProps) { const t = useTranslations("settings"); const [denoToken, setDenoToken] = useState(""); const [orgDomain, setOrgDomain] = useState(""); const [projectName, setProjectName] = useState( process.env.NEXT_PUBLIC_DENO_RELAY_DEFAULT_PROJECT || "omniroute-deno-relay" ); const [deploying, setDeploying] = useState(false); const [error, setError] = useState(null); const handleDeploy = async () => { if (!denoToken.trim()) { setError(t("denoRelayTokenRequired")); return; } if (!orgDomain.trim()) { setError(t("denoRelayOrgDomainRequired")); return; } setDeploying(true); setError(null); try { const res = await fetch("/api/settings/proxy/deno-deploy", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ denoToken: denoToken.trim(), orgDomain: orgDomain.trim(), projectName: projectName.trim(), }), }); const data = await res.json(); if (!res.ok || !data.success) { setError(data.error?.message || t("denoRelayDeployFailed")); } else { setDenoToken(""); onDeployed(data.poolProxyId as string, data.relayUrl as string); onClose(); } } catch (err) { setError(err instanceof Error ? err.message : t("unknownError")); } finally { setDeploying(false); } }; if (!isOpen) return null; return (

{t("denoRelayModalTitle")}

{t("denoRelayWarning")}
setDenoToken(e.target.value)} className="w-full text-sm bg-surface-alt border border-border rounded px-3 py-2 focus:outline-none focus:border-primary" placeholder="ddo_..." autoComplete="off" />

{t("denoRelayTokenHint")}

setOrgDomain(e.target.value)} className="w-full text-sm bg-surface-alt border border-border rounded px-3 py-2 focus:outline-none focus:border-primary" placeholder="your-org.deno.net" />

{t("denoRelayOrgDomainHint")}

setProjectName(e.target.value)} className="w-full text-sm bg-surface-alt border border-border rounded px-3 py-2 focus:outline-none focus:border-primary" placeholder="omniroute-deno-relay" />
{error && (
{error}
)}

{t("denoRelayFreeTierNote")}

); }