51 lines
1.3 KiB
TypeScript
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 } : {};
|
|
}
|
|
})
|
|
]
|
|
});
|