52 lines
1.1 KiB
TypeScript
52 lines
1.1 KiB
TypeScript
import { cookies, headers } from "next/headers"
|
|
|
|
import { Lang } from "@/constants/languages"
|
|
|
|
import { auth } from "@/auth"
|
|
|
|
type CreateContextOptions = {
|
|
auth: typeof auth
|
|
lang: Lang
|
|
pathname: string
|
|
uid?: string | null
|
|
url: string
|
|
webToken: string | undefined
|
|
}
|
|
|
|
/** Use this helper for:
|
|
* - testing, where we dont have to Mock Next.js' req/res
|
|
* - trpc's `createSSGHelpers` where we don't have req/res
|
|
**/
|
|
export function createContextInner(opts: CreateContextOptions) {
|
|
return {
|
|
auth: opts.auth,
|
|
lang: opts.lang,
|
|
pathname: opts.pathname,
|
|
uid: opts.uid,
|
|
url: opts.url,
|
|
webToken: opts.webToken,
|
|
}
|
|
}
|
|
|
|
/**
|
|
* This is the actual context you'll use in your router
|
|
* @link https://trpc.io/docs/context
|
|
**/
|
|
export function createContext() {
|
|
const h = headers()
|
|
|
|
const cookie = cookies()
|
|
const webviewTokenCookie = cookie.get("webviewToken")
|
|
|
|
return createContextInner({
|
|
auth,
|
|
lang: h.get("x-lang") as Lang,
|
|
pathname: h.get("x-pathname")!,
|
|
uid: h.get("x-uid"),
|
|
url: h.get("x-url")!,
|
|
webToken: webviewTokenCookie?.value,
|
|
})
|
|
}
|
|
|
|
export type Context = ReturnType<typeof createContext>
|