import { createTRPCProxyClient, httpBatchLink, loggerLink } from "@trpc/client"; import type { AppRouter } from "~/server/api/root"; const getBaseUrl = () => { if (typeof window !== "undefined") return ""; const domain = import.meta.env.VITE_DOMAIN; if (domain) return domain; return `http://localhost:${process.env.PORT ?? 3000}`; }; /** * Get CSRF token from cookies */ function getCSRFToken(): string | undefined { if (typeof document === "undefined") return undefined; const value = `; ${document.cookie}`; const parts = value.split(`; csrf-token=`); if (parts.length === 2) { return parts.pop()?.split(";").shift(); } return undefined; } export const api = createTRPCProxyClient({ links: [ ...(process.env.NODE_ENV === "development" ? [ loggerLink({ enabled: (opts) => { const is401 = opts.direction === "down" && opts.result instanceof Error && opts.result.message?.includes("UNAUTHORIZED"); return !is401; } }) ] : []), httpBatchLink({ url: `${getBaseUrl()}/api/trpc`, headers: () => { const csrfToken = getCSRFToken(); return csrfToken ? { "x-csrf-token": csrfToken } : {}; } }) ] });