import { TRPCError } from "@trpc/server" import { redirect } from "next/navigation" import { Lang } from "@/constants/languages" import { login } from "@/constants/routes/handleAuth" import { webviews } from "@/constants/routes/webviews" import { appRouter } from "@/server" import { createContext } from "@/server/context" import { createCallerFactory } from "@/server/trpc" const createCaller = createCallerFactory(appRouter) export function serverClient() { return createCaller(createContext(), { onError: ({ ctx, error, input, path, type }) => { console.error(`[serverClient] error for ${type}: ${path}`, error) if (input) { console.error(`[serverClient] received input:`, input) } if (error instanceof TRPCError) { if (error.code === "UNAUTHORIZED") { let lang = Lang.en let pathname = "/" let fullUrl = "/" if (ctx) { lang = ctx.lang pathname = ctx.pathname fullUrl = ctx.url } const fullPathname = new URL(fullUrl).pathname if (webviews.includes(fullPathname)) { const redirectUrl = `/${lang}/webview/refresh?returnurl=${encodeURIComponent(fullPathname)}` console.error( "Unautorized in webview, redirecting to: ", redirectUrl ) console.log(`[serverClient] onError redirecting to: ${redirectUrl}`) redirect(redirectUrl) } const redirectUrl = `${login[lang]}?redirectTo=${encodeURIComponent(`/${lang}/${pathname}`)}` console.log(`[serverClient] onError redirecting to: ${redirectUrl}`) redirect(redirectUrl) } } }, }) }