Files
freno-dev/src/lib/api.ts
2026-01-04 11:14:54 -05:00

51 lines
1.3 KiB
TypeScript

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<AppRouter>({
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 } : {};
}
})
]
});