| import type { AppRouter } from "@pram/api/routers/index"; | |
| import { env } from "@pram/env/web"; | |
| import { QueryCache, QueryClient } from "@tanstack/react-query"; | |
| import { createTRPCClient, httpBatchLink, TRPCClientError } from "@trpc/client"; | |
| import { createTRPCOptionsProxy } from "@trpc/tanstack-react-query"; | |
| import { toast } from "sonner"; | |
| export const queryClient = new QueryClient({ | |
| queryCache: new QueryCache({ | |
| onError: (error, query) => { | |
| if ( | |
| error instanceof TRPCClientError && | |
| (error.data?.code === "UNAUTHORIZED" || | |
| error.message.toLowerCase().includes("authentication required")) | |
| ) { | |
| return; | |
| } | |
| toast.error(error.message, { | |
| action: { | |
| label: "retry", | |
| onClick: query.invalidate, | |
| }, | |
| }); | |
| }, | |
| }), | |
| }); | |
| export const trpcClient = createTRPCClient<AppRouter>({ | |
| links: [ | |
| httpBatchLink({ | |
| url: `${env.VITE_SERVER_URL}/trpc`, | |
| fetch(url, options) { | |
| return fetch(url, { | |
| ...options, | |
| credentials: "include", | |
| }); | |
| }, | |
| }), | |
| ], | |
| }); | |
| export const trpc = createTRPCOptionsProxy<AppRouter>({ | |
| client: trpcClient, | |
| queryClient, | |
| }); | |