export async function createContext(
ctx: CreateWSSContextFnOptions | CreateNextContextOptions,
): Promise<{
session: Session | null;
req: IncomingMessage | NextApiRequest;
res: ws | NextApiResponse;
prisma: ExtendedPrismaClient;
tenant: string | null;
}> {
const { req, res } = ctx;
const rewriteHeader = req.headers['x-nextjs-rewrite'] as string | undefined;
const tenant = rewriteHeader?.split('tenant=')[1] ?? null;
let session: Session | null;
try {
// @ts-expect-error -- This will fail if called client side
session = await getServerSession(req, res, getAuthOptions(req));
} catch (error) {
session = await getSession(ctx);
}
const contextInner = await createContextInner();
return {
...contextInner,
session,
req,
res,
tenant: tenant ?? contextInner.tenant,
};
}
/** Use this helper for:
* - trpc's `createSSGHelpers` where we don't have req/res
* */
export async function createContextInner(opts?: CreateInnerContextOptions) {
if (!opts) {
return {
session: null,
prisma,
tenant: null,
};
}
if (opts.ctx) {
const rewriteHeader = opts.ctx.req.headers['x-nextjs-rewrite'] as
| string
| undefined;
const tenant = rewriteHeader?.split('tenant=')[1] ?? null;
let session: Session | null;
try {
session = await getServerSession(
opts.ctx.req,
opts.ctx.res,
// @ts-expect-error -- This will fail if called client side
getAuthOptions(opts.ctx.req),
);
} catch (error) {
session = await getSession(opts.ctx);
}
return {
session,
prisma,
tenant,
};
}
return {
session: null,
prisma,
tenant: null,
};
}
export async function createContext(
ctx: CreateWSSContextFnOptions | CreateNextContextOptions,
): Promise<{
session: Session | null;
req: IncomingMessage | NextApiRequest;
res: ws | NextApiResponse;
prisma: ExtendedPrismaClient;
tenant: string | null;
}> {
const { req, res } = ctx;
const rewriteHeader = req.headers['x-nextjs-rewrite'] as string | undefined;
const tenant = rewriteHeader?.split('tenant=')[1] ?? null;
let session: Session | null;
try {
// @ts-expect-error -- This will fail if called client side
session = await getServerSession(req, res, getAuthOptions(req));
} catch (error) {
session = await getSession(ctx);
}
const contextInner = await createContextInner();
return {
...contextInner,
session,
req,
res,
tenant: tenant ?? contextInner.tenant,
};
}
/** Use this helper for:
* - trpc's `createSSGHelpers` where we don't have req/res
* */
export async function createContextInner(opts?: CreateInnerContextOptions) {
if (!opts) {
return {
session: null,
prisma,
tenant: null,
};
}
if (opts.ctx) {
const rewriteHeader = opts.ctx.req.headers['x-nextjs-rewrite'] as
| string
| undefined;
const tenant = rewriteHeader?.split('tenant=')[1] ?? null;
let session: Session | null;
try {
session = await getServerSession(
opts.ctx.req,
opts.ctx.res,
// @ts-expect-error -- This will fail if called client side
getAuthOptions(opts.ctx.req),
);
} catch (error) {
session = await getSession(opts.ctx);
}
return {
session,
prisma,
tenant,
};
}
return {
session: null,
prisma,
tenant: null,
};
}