Files
sign/packages/trpc/server/context.ts

62 lines
1.3 KiB
TypeScript
Raw Normal View History

import { z } from 'zod';
2023-06-09 18:21:18 +10:00
import { getServerSession } from '@documenso/lib/next-auth/get-server-session';
import type { ApiRequestMetadata } from '@documenso/lib/universal/extract-request-metadata';
import { extractNextApiRequestMetadata } from '@documenso/lib/universal/extract-request-metadata';
2023-06-09 18:21:18 +10:00
import type { CreateNextContextOptions } from './adapters/next';
type CreateTrpcContext = CreateNextContextOptions & {
requestSource: 'apiV1' | 'apiV2' | 'app';
};
export const createTrpcContext = async ({
req,
res,
requestSource,
}: Omit<CreateTrpcContext, 'info'>) => {
const { session, user } = await getServerSession({ req, res });
2023-06-09 18:21:18 +10:00
const metadata: ApiRequestMetadata = {
requestMetadata: extractNextApiRequestMetadata(req),
source: requestSource,
auth: null,
};
const teamId = z.coerce
.number()
.optional()
.catch(() => undefined)
.parse(req.headers['x-team-id']);
2023-06-09 18:21:18 +10:00
if (!session) {
return {
session: null,
user: null,
teamId,
2024-01-30 17:31:27 +11:00
req,
metadata,
2023-06-09 18:21:18 +10:00
};
}
if (!user) {
return {
session: null,
user: null,
teamId,
2024-01-30 17:31:27 +11:00
req,
metadata,
};
}
2023-06-09 18:21:18 +10:00
return {
session,
user,
teamId,
2024-01-30 17:31:27 +11:00
req,
metadata,
2023-06-09 18:21:18 +10:00
};
};
export type TrpcContext = Awaited<ReturnType<typeof createTrpcContext>>;