2025-03-03 14:49:28 +11:00
|
|
|
import type { Session } from '@prisma/client';
|
2025-01-02 15:33:37 +11:00
|
|
|
import type { Context } from 'hono';
|
2025-01-11 15:33:20 +11:00
|
|
|
import { z } from 'zod';
|
2023-06-09 18:21:18 +10:00
|
|
|
|
2025-01-02 15:33:37 +11:00
|
|
|
import type { SessionUser } from '@documenso/auth/server/lib/session/session';
|
2025-02-16 00:44:01 +11:00
|
|
|
import { getOptionalSession } from '@documenso/auth/server/lib/utils/get-session';
|
2025-01-11 15:33:20 +11:00
|
|
|
import type { ApiRequestMetadata } from '@documenso/lib/universal/extract-request-metadata';
|
2025-01-02 15:33:37 +11:00
|
|
|
import { extractRequestMetadata } from '@documenso/lib/universal/extract-request-metadata';
|
2023-06-09 18:21:18 +10:00
|
|
|
|
2025-01-02 15:33:37 +11:00
|
|
|
type CreateTrpcContextOptions = {
|
|
|
|
|
c: Context;
|
|
|
|
|
requestSource: 'app' | 'apiV1' | 'apiV2';
|
2025-01-11 15:33:20 +11:00
|
|
|
};
|
|
|
|
|
|
2025-01-19 22:07:02 +11:00
|
|
|
export const createTrpcContext = async ({
|
2025-01-02 15:33:37 +11:00
|
|
|
c,
|
2025-01-19 22:07:02 +11:00
|
|
|
requestSource,
|
2025-01-02 15:33:37 +11:00
|
|
|
}: CreateTrpcContextOptions): Promise<TrpcContext> => {
|
2025-02-16 00:44:01 +11:00
|
|
|
const { session, user } = await getOptionalSession(c);
|
2025-01-02 15:33:37 +11:00
|
|
|
|
|
|
|
|
const req = c.req.raw;
|
2023-06-09 18:21:18 +10:00
|
|
|
|
2025-01-11 15:33:20 +11:00
|
|
|
const metadata: ApiRequestMetadata = {
|
2025-01-02 15:33:37 +11:00
|
|
|
requestMetadata: extractRequestMetadata(req),
|
2025-01-11 15:33:20 +11:00
|
|
|
source: requestSource,
|
|
|
|
|
auth: null,
|
|
|
|
|
};
|
|
|
|
|
|
2025-01-02 15:33:37 +11:00
|
|
|
const rawTeamId = req.headers.get('x-team-id') || undefined;
|
|
|
|
|
|
2025-01-11 15:33:20 +11:00
|
|
|
const teamId = z.coerce
|
|
|
|
|
.number()
|
|
|
|
|
.optional()
|
|
|
|
|
.catch(() => undefined)
|
2025-01-02 15:33:37 +11:00
|
|
|
.parse(rawTeamId);
|
2025-01-11 15:33:20 +11:00
|
|
|
|
2025-01-02 15:33:37 +11:00
|
|
|
if (!session || !user) {
|
2023-09-28 17:32:31 +10:00
|
|
|
return {
|
|
|
|
|
session: null,
|
|
|
|
|
user: null,
|
2025-01-11 15:33:20 +11:00
|
|
|
teamId,
|
2024-01-30 17:31:27 +11:00
|
|
|
req,
|
2025-01-11 15:33:20 +11:00
|
|
|
metadata,
|
2023-09-28 17:32:31 +10:00
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-09 18:21:18 +10:00
|
|
|
return {
|
|
|
|
|
session,
|
2023-09-28 17:32:31 +10:00
|
|
|
user,
|
2025-01-11 15:33:20 +11:00
|
|
|
teamId,
|
2024-01-30 17:31:27 +11:00
|
|
|
req,
|
2025-01-11 15:33:20 +11:00
|
|
|
metadata,
|
2023-06-09 18:21:18 +10:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
2025-01-02 15:33:37 +11:00
|
|
|
export type TrpcContext = (
|
|
|
|
|
| {
|
|
|
|
|
session: null;
|
|
|
|
|
user: null;
|
|
|
|
|
}
|
|
|
|
|
| {
|
|
|
|
|
session: Session;
|
|
|
|
|
user: SessionUser;
|
|
|
|
|
}
|
|
|
|
|
) & {
|
|
|
|
|
teamId: number | undefined;
|
|
|
|
|
req: Request;
|
|
|
|
|
metadata: ApiRequestMetadata;
|
|
|
|
|
};
|