
* bootstrap segment app from cms app * tracking logic * schema configuratioj * config form * form saving * Connected order_created * add more fields * Order updated webhook * Order cancelled event * order refunded webhook * order fully paid * update deps * error handling * logger * logs * Add app to workflow * add icon * remove breadcrumbs * Change 400 to 200 response if payload is invalid * link to docs * change semgent.io to segment
30 lines
1.2 KiB
TypeScript
30 lines
1.2 KiB
TypeScript
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<typeof createTrpcContext>;
|