import * as trpcNext from "@trpc/server/adapters/next"; import { SALEOR_AUTHORIZATION_BEARER_HEADER, SALEOR_API_URL_HEADER } from "@saleor/app-sdk/const"; import { inferAsyncReturnType } from "@trpc/server"; const getBaseUrl = (headers: { [name: string]: string | string[] | undefined }): string => { const { host, "x-forwarded-proto": xForwardedProto = "http" } = headers; const xForwardedProtos = Array.isArray(xForwardedProto) ? xForwardedProto.join(",") : xForwardedProto; const protocols = xForwardedProtos.split(","); // prefer https over other protocols const protocol = protocols.find((el) => el === "https") || protocols[0]; return `${protocol}://${host}`; }; export const createTrpcContext = async ({ res, req }: trpcNext.CreateNextContextOptions) => { const baseUrl = getBaseUrl(req.headers); return { token: req.headers[SALEOR_AUTHORIZATION_BEARER_HEADER] as string | undefined, saleorApiUrl: req.headers[SALEOR_API_URL_HEADER] as string | undefined, appId: undefined as undefined | string, ssr: undefined as undefined | boolean, baseUrl, }; }; export type TrpcContext = inferAsyncReturnType;