import { TRPCError } from "@trpc/server" import { redirect } from "next/navigation" import { NextResponse } from "next/server" import { Lang } from "@/constants/languages" import { webviews } from "@/constants/routes/webviews" import { env } from "@/env/server" import { appRouter } from "@/server" import { createContext } from "@/server/context" import { internalServerError } from "@/server/errors/next" import { createCallerFactory } from "@/server/trpc" const createCaller = createCallerFactory(appRouter) export function serverClient() { return createCaller(createContext(), { onError: ({ ctx, error, input, path, type }) => { console.error(`Server Client error for ${type}: ${path}`) if (input) { console.error(`Received input:`) console.error(input) } console.error(error) if (error instanceof TRPCError) { if (error.code === "UNAUTHORIZED") { const lang = ctx?.lang || Lang.en const langIndex = ctx!.url.indexOf(`/${lang}`) const pathname = ctx?.url.substring(langIndex) if (pathname && webviews.includes(pathname)) { const returnUrl = ctx!.url const redirectUrl = `/${lang}/webview/refresh?returnurl=${encodeURIComponent(returnUrl)}` console.error( "Unautorized in webview, redirecting to: ", redirectUrl ) redirect(redirectUrl) } redirect( `/${lang}/login?redirectTo=${encodeURIComponent(`/${lang}/${pathname}`)}` ) } } throw internalServerError() }, }) }