mirror of
https://github.com/documenso/documenso.git
synced 2025-11-14 00:32:43 +10:00
Improves the existing document rejection process by actually marking a document as completed cancelling further actions. ## Related Issue N/A ## Changes Made - Added a new rejection status for documents - Updated a million areas that check for document completion - Updated email sending, so rejection is confirmed for the rejecting recipient while other recipients are notified that the document is now cancelled. ## Testing Performed - Ran the testing suite to ensure there are no regressions. - Performed manual testing of current core flows.
59 lines
1.3 KiB
TypeScript
59 lines
1.3 KiB
TypeScript
import { z } from 'zod';
|
|
|
|
const ZIpSchema = z.string().ip();
|
|
|
|
export const ZRequestMetadataSchema = z.object({
|
|
ipAddress: ZIpSchema.optional(),
|
|
userAgent: z.string().optional(),
|
|
});
|
|
|
|
export type RequestMetadata = z.infer<typeof ZRequestMetadataSchema>;
|
|
|
|
export type ApiRequestMetadata = {
|
|
/**
|
|
* The general metadata of the request.
|
|
*/
|
|
requestMetadata: RequestMetadata;
|
|
|
|
/**
|
|
* The source of the request.
|
|
*/
|
|
source: 'apiV1' | 'apiV2' | 'app';
|
|
|
|
/**
|
|
* The method of authentication used to access the API.
|
|
*
|
|
* If the request is not authenticated, the value will be `null`.
|
|
*/
|
|
auth: 'api' | 'session' | null;
|
|
|
|
/**
|
|
* The user that is performing the action.
|
|
*
|
|
* If a team API key is used, the user will classified as the team.
|
|
*/
|
|
auditUser?: {
|
|
id: number | null;
|
|
email: string | null;
|
|
name: string | null;
|
|
};
|
|
};
|
|
|
|
export const extractRequestMetadata = (req: Request): RequestMetadata => {
|
|
const forwardedFor = req.headers.get('x-forwarded-for');
|
|
const ip = forwardedFor
|
|
?.split(',')
|
|
.map((ip) => ip.trim())
|
|
.at(0);
|
|
|
|
const parsedIp = ZIpSchema.safeParse(ip);
|
|
|
|
const ipAddress = parsedIp.success ? parsedIp.data : undefined;
|
|
const userAgent = req.headers.get('user-agent');
|
|
|
|
return {
|
|
ipAddress,
|
|
userAgent: userAgent ?? undefined,
|
|
};
|
|
};
|