chore: merge main, resolve biome formatting conflicts

Merge origin/main into feat/document-file-conversion. Conflicts were
format-only (Tailwind class ordering, single-line vs multi-line) plus
two semantic merges:

- files.helpers.ts: combine main's pending-PDF download path with the
  branch's original-source-file (DOCX/PNG/JPEG) download path
- download-pdf.ts: combine main's versionToFilenameSuffix helper with
  the branch's server-provided Content-Disposition filename support
This commit is contained in:
ephraimduncan
2026-05-12 11:28:47 +00:00
1495 changed files with 22068 additions and 33465 deletions
@@ -1,11 +1,10 @@
import { FieldType, ReadStatus, SigningStatus } from '@prisma/client';
import { AppError, AppErrorCode } from '@documenso/lib/errors/app-error';
import { getDocumentByToken } from '@documenso/lib/server-only/document/get-document-by-token';
import { signFieldWithToken } from '@documenso/lib/server-only/field/sign-field-with-token';
import { getRecipientByToken } from '@documenso/lib/server-only/recipient/get-recipient-by-token';
import { extractDocumentAuthMethods } from '@documenso/lib/utils/document-auth';
import { prisma } from '@documenso/prisma';
import { FieldType, ReadStatus, SigningStatus } from '@prisma/client';
import { procedure } from '../trpc';
import {
@@ -31,9 +30,7 @@ export const applyMultiSignSignatureRoute = procedure
);
// Check if all documents have been viewed
const hasUnviewedDocuments = envelopes.some(
(envelope) => envelope.recipient.readStatus !== ReadStatus.OPENED,
);
const hasUnviewedDocuments = envelopes.some((envelope) => envelope.recipient.readStatus !== ReadStatus.OPENED);
if (hasUnviewedDocuments) {
throw new AppError(AppErrorCode.INVALID_REQUEST, {
@@ -53,8 +50,7 @@ export const applyMultiSignSignatureRoute = procedure
derivedRecipientActionAuth.recipientActionAuthRequired
) {
throw new AppError(AppErrorCode.INVALID_REQUEST, {
message:
'Documents that require additional authentication cannot be multi signed at the moment',
message: 'Documents that require additional authentication cannot be multi signed at the moment',
});
}
}
@@ -10,9 +10,5 @@ export const ZApplyMultiSignSignatureResponseSchema = z.object({
success: z.boolean(),
});
export type TApplyMultiSignSignatureRequestSchema = z.infer<
typeof ZApplyMultiSignSignatureRequestSchema
>;
export type TApplyMultiSignSignatureResponseSchema = z.infer<
typeof ZApplyMultiSignSignatureResponseSchema
>;
export type TApplyMultiSignSignatureRequestSchema = z.infer<typeof ZApplyMultiSignSignatureRequestSchema>;
export type TApplyMultiSignSignatureResponseSchema = z.infer<typeof ZApplyMultiSignSignatureResponseSchema>;
@@ -1,9 +1,8 @@
import { EnvelopeType } from '@prisma/client';
import { AppError, AppErrorCode } from '@documenso/lib/errors/app-error';
import { verifyEmbeddingPresignToken } from '@documenso/lib/server-only/embedding-presign/verify-embedding-presign-token';
import { createEnvelope } from '@documenso/lib/server-only/envelope/create-envelope';
import { mapSecondaryIdToDocumentId } from '@documenso/lib/utils/envelope';
import { EnvelopeType } from '@prisma/client';
import { procedure } from '../trpc';
import {
@@ -19,9 +18,7 @@ export const createEmbeddingDocumentRoute = procedure
try {
const authorizationHeader = req.headers.get('authorization');
const [presignToken] = (authorizationHeader || '')
.split('Bearer ')
.filter((s) => s.length > 0);
const [presignToken] = (authorizationHeader || '').split('Bearer ').filter((s) => s.length > 0);
if (!presignToken) {
throw new AppError(AppErrorCode.UNAUTHORIZED, {
@@ -1,5 +1,3 @@
import { z } from 'zod';
import { ZDocumentEmailSettingsSchema } from '@documenso/lib/types/document-email';
import {
ZDocumentMetaDateFormatSchema,
@@ -24,6 +22,7 @@ import { ZFieldAndMetaSchema } from '@documenso/lib/types/field-meta';
import { zEmail } from '@documenso/lib/utils/zod';
import { RecipientRole } from '@documenso/prisma/client';
import { DocumentSigningOrder } from '@documenso/prisma/generated/types';
import { z } from 'zod';
import { ZDocumentExternalIdSchema, ZDocumentTitleSchema } from '../document-router/schema';
@@ -75,6 +74,4 @@ export const ZCreateEmbeddingDocumentResponseSchema = z.object({
documentId: z.number(),
});
export type TCreateEmbeddingDocumentRequestSchema = z.infer<
typeof ZCreateEmbeddingDocumentRequestSchema
>;
export type TCreateEmbeddingDocumentRequestSchema = z.infer<typeof ZCreateEmbeddingDocumentRequestSchema>;
@@ -1,7 +1,4 @@
import {
ZCreateEnvelopeRequestSchema,
ZCreateEnvelopeResponseSchema,
} from '../envelope-router/create-envelope.types';
import { ZCreateEnvelopeRequestSchema, ZCreateEnvelopeResponseSchema } from '../envelope-router/create-envelope.types';
export const ZCreateEmbeddingEnvelopeRequestSchema = ZCreateEnvelopeRequestSchema;
@@ -6,9 +6,9 @@ import { getApiTokenByToken } from '@documenso/lib/server-only/public-api/get-ap
import { procedure } from '../trpc';
import {
createEmbeddingPresignTokenMeta,
ZCreateEmbeddingPresignTokenRequestSchema,
ZCreateEmbeddingPresignTokenResponseSchema,
createEmbeddingPresignTokenMeta,
} from './create-embedding-presign-token.types';
/**
@@ -46,7 +46,7 @@ export const createEmbeddingPresignTokenRoute = procedure
if (!organisationClaim.flags.embedAuthoring) {
throw new AppError(AppErrorCode.UNAUTHORIZED, {
message: 'You do not have permission to create embedding presign tokens',
message: 'Embedded Authoring is not included in your current plan. Please contact support.',
});
}
}
@@ -7,8 +7,7 @@ export const createEmbeddingPresignTokenMeta: TrpcRouteMeta = {
method: 'POST',
path: '/embedding/create-presign-token',
summary: 'Create embedding presign token',
description:
'Creates a presign token for embedding operations with configurable expiration time',
description: 'Creates a presign token for embedding operations with configurable expiration time',
tags: ['Embedding'],
},
};
@@ -35,10 +34,6 @@ export const ZCreateEmbeddingPresignTokenResponseSchema = z.object({
expiresIn: z.number().describe('Expiration time in seconds'),
});
export type TCreateEmbeddingPresignTokenRequestSchema = z.infer<
typeof ZCreateEmbeddingPresignTokenRequestSchema
>;
export type TCreateEmbeddingPresignTokenRequestSchema = z.infer<typeof ZCreateEmbeddingPresignTokenRequestSchema>;
export type TCreateEmbeddingPresignTokenResponseSchema = z.infer<
typeof ZCreateEmbeddingPresignTokenResponseSchema
>;
export type TCreateEmbeddingPresignTokenResponseSchema = z.infer<typeof ZCreateEmbeddingPresignTokenResponseSchema>;
@@ -1,10 +1,9 @@
import { EnvelopeType } from '@prisma/client';
import { AppError, AppErrorCode } from '@documenso/lib/errors/app-error';
import { verifyEmbeddingPresignToken } from '@documenso/lib/server-only/embedding-presign/verify-embedding-presign-token';
import { createEnvelope } from '@documenso/lib/server-only/envelope/create-envelope';
import { mapSecondaryIdToTemplateId } from '@documenso/lib/utils/envelope';
import { prisma } from '@documenso/prisma';
import { EnvelopeType } from '@prisma/client';
import { procedure } from '../trpc';
import {
@@ -20,9 +19,7 @@ export const createEmbeddingTemplateRoute = procedure
try {
const authorizationHeader = req.headers.get('authorization');
const [presignToken] = (authorizationHeader || '')
.split('Bearer ')
.filter((s) => s.length > 0);
const [presignToken] = (authorizationHeader || '').split('Bearer ').filter((s) => s.length > 0);
if (!presignToken) {
throw new AppError(AppErrorCode.UNAUTHORIZED, {
@@ -1,6 +1,3 @@
import { DocumentSigningOrder, RecipientRole } from '@prisma/client';
import { z } from 'zod';
import { ZDocumentEmailSettingsSchema } from '@documenso/lib/types/document-email';
import {
ZDocumentMetaDateFormatSchema,
@@ -23,6 +20,8 @@ import {
} from '@documenso/lib/types/field';
import { ZFieldAndMetaSchema } from '@documenso/lib/types/field-meta';
import { ZRecipientEmailSchema } from '@documenso/lib/types/recipient';
import { DocumentSigningOrder, RecipientRole } from '@prisma/client';
import { z } from 'zod';
import { ZDocumentTitleSchema } from '../document-router/schema';
@@ -72,6 +71,4 @@ export const ZCreateEmbeddingTemplateResponseSchema = z.object({
templateId: z.number(),
});
export type TCreateEmbeddingTemplateRequestSchema = z.infer<
typeof ZCreateEmbeddingTemplateRequestSchema
>;
export type TCreateEmbeddingTemplateRequestSchema = z.infer<typeof ZCreateEmbeddingTemplateRequestSchema>;
@@ -1,5 +1,3 @@
import { z } from 'zod';
import { ZDocumentLiteSchema } from '@documenso/lib/types/document';
import { ZRecipientLiteSchema } from '@documenso/lib/types/recipient';
import DocumentDataSchema from '@documenso/prisma/generated/zod/modelSchema/DocumentDataSchema';
@@ -7,6 +5,7 @@ import DocumentMetaSchema from '@documenso/prisma/generated/zod/modelSchema/Docu
import EnvelopeItemSchema from '@documenso/prisma/generated/zod/modelSchema/EnvelopeItemSchema';
import FieldSchema from '@documenso/prisma/generated/zod/modelSchema/FieldSchema';
import SignatureSchema from '@documenso/prisma/generated/zod/modelSchema/SignatureSchema';
import { z } from 'zod';
export const ZGetMultiSignDocumentRequestSchema = z.object({
token: z.string().min(1, { message: 'Token is required' }),
@@ -49,6 +48,4 @@ export const ZGetMultiSignDocumentResponseSchema = ZDocumentLiteSchema.extend({
});
export type TGetMultiSignDocumentRequestSchema = z.infer<typeof ZGetMultiSignDocumentRequestSchema>;
export type TGetMultiSignDocumentResponseSchema = z.infer<
typeof ZGetMultiSignDocumentResponseSchema
>;
export type TGetMultiSignDocumentResponseSchema = z.infer<typeof ZGetMultiSignDocumentResponseSchema>;
@@ -24,9 +24,7 @@ export const updateEmbeddingDocumentRoute = procedure
try {
const authorizationHeader = ctx.req.headers.get('authorization');
const [presignToken] = (authorizationHeader || '')
.split('Bearer ')
.filter((s) => s.length > 0);
const [presignToken] = (authorizationHeader || '').split('Bearer ').filter((s) => s.length > 0);
if (!presignToken) {
throw new AppError(AppErrorCode.UNAUTHORIZED, {
@@ -1,5 +1,3 @@
import { z } from 'zod';
import { ZDocumentEmailSettingsSchema } from '@documenso/lib/types/document-email';
import {
ZDocumentMetaDateFormatSchema,
@@ -23,6 +21,7 @@ import {
import { ZFieldAndMetaSchema } from '@documenso/lib/types/field-meta';
import { zEmail } from '@documenso/lib/utils/zod';
import { DocumentSigningOrder, RecipientRole } from '@documenso/prisma/generated/types';
import { z } from 'zod';
import { ZDocumentExternalIdSchema, ZDocumentTitleSchema } from '../document-router/schema';
@@ -76,6 +75,4 @@ export const ZUpdateEmbeddingDocumentResponseSchema = z.object({
documentId: z.number(),
});
export type TUpdateEmbeddingDocumentRequestSchema = z.infer<
typeof ZUpdateEmbeddingDocumentRequestSchema
>;
export type TUpdateEmbeddingDocumentRequestSchema = z.infer<typeof ZUpdateEmbeddingDocumentRequestSchema>;
@@ -1,15 +1,11 @@
import { DocumentStatus, EnvelopeType } from '@prisma/client';
import pMap from 'p-map';
import { match } from 'ts-pattern';
import { AppError, AppErrorCode } from '@documenso/lib/errors/app-error';
import { verifyEmbeddingPresignToken } from '@documenso/lib/server-only/embedding-presign/verify-embedding-presign-token';
import { getEnvelopeWhereInput } from '@documenso/lib/server-only/envelope/get-envelope-by-id';
import { updateEnvelope } from '@documenso/lib/server-only/envelope/update-envelope';
import { UNSAFE_createEnvelopeItems } from '@documenso/lib/server-only/envelope-item/create-envelope-items';
import { UNSAFE_deleteEnvelopeItem } from '@documenso/lib/server-only/envelope-item/delete-envelope-item';
import { UNSAFE_replaceEnvelopeItemPdf } from '@documenso/lib/server-only/envelope-item/replace-envelope-item-pdf';
import { UNSAFE_updateEnvelopeItems } from '@documenso/lib/server-only/envelope-item/update-envelope-items';
import { getEnvelopeWhereInput } from '@documenso/lib/server-only/envelope/get-envelope-by-id';
import { updateEnvelope } from '@documenso/lib/server-only/envelope/update-envelope';
import { setFieldsForDocument } from '@documenso/lib/server-only/field/set-fields-for-document';
import { setFieldsForTemplate } from '@documenso/lib/server-only/field/set-fields-for-template';
import { setDocumentRecipients } from '@documenso/lib/server-only/recipient/set-document-recipients';
@@ -18,6 +14,9 @@ import { nanoid } from '@documenso/lib/universal/id';
import { PRESIGNED_ENVELOPE_ITEM_ID_PREFIX } from '@documenso/lib/utils/embed-config';
import { getEnvelopeItemPermissions } from '@documenso/lib/utils/envelope';
import { prisma } from '@documenso/prisma';
import { DocumentStatus, EnvelopeType } from '@prisma/client';
import pMap from 'p-map';
import { match } from 'ts-pattern';
import { procedure } from '../trpc';
import {
@@ -104,9 +103,7 @@ export const updateEmbeddingEnvelopeRoute = procedure
// Handle existing envelope items.
if (!isNewEnvelopeItem) {
const envelopeItem = envelope.envelopeItems.find(
(envelopeItem) => envelopeItem.id === item.id,
);
const envelopeItem = envelope.envelopeItems.find((envelopeItem) => envelopeItem.id === item.id);
if (!envelopeItem) {
throw new AppError(AppErrorCode.NOT_FOUND, {
@@ -135,8 +132,7 @@ export const updateEmbeddingEnvelopeRoute = procedure
return;
}
const hasEnvelopeItemChanged =
envelopeItem.title !== item.title || envelopeItem.order !== item.order;
const hasEnvelopeItemChanged = envelopeItem.title !== item.title || envelopeItem.order !== item.order;
if (hasEnvelopeItemChanged) {
envelopeItemsToUpdate.push({
@@ -453,8 +449,7 @@ export const updateEmbeddingEnvelopeRoute = procedure
.exhaustive();
// Step 5: Handle attachments (set semantics: delete all existing, create new).
let hasEnvelopeAttachmentsChanged =
envelope.envelopeAttachments.length !== data.attachments.length;
let hasEnvelopeAttachmentsChanged = envelope.envelopeAttachments.length !== data.attachments.length;
data.attachments.forEach((attachment) => {
const foundAttachment = envelope.envelopeAttachments.find((a) => a.id === attachment.id);
@@ -1,10 +1,4 @@
import { z } from 'zod';
import { zfd } from 'zod-form-data';
import {
ZDocumentAccessAuthTypesSchema,
ZDocumentActionAuthTypesSchema,
} from '@documenso/lib/types/document-auth';
import { ZDocumentAccessAuthTypesSchema, ZDocumentActionAuthTypesSchema } from '@documenso/lib/types/document-auth';
import { ZDocumentMetaUpdateSchema } from '@documenso/lib/types/document-meta';
import {
ZClampedFieldHeightSchema,
@@ -16,13 +10,11 @@ import {
import { ZEnvelopeFieldAndMetaSchema } from '@documenso/lib/types/field-meta';
import { EnvelopeAttachmentSchema } from '@documenso/prisma/generated/zod/modelSchema/EnvelopeAttachmentSchema';
import { ZSetEnvelopeRecipientSchema } from '@documenso/trpc/server/envelope-router/set-envelope-recipients.types';
import { z } from 'zod';
import { zfd } from 'zod-form-data';
import { zfdFile, zodFormData } from '../../utils/zod-form-data';
import {
ZDocumentExternalIdSchema,
ZDocumentTitleSchema,
ZDocumentVisibilitySchema,
} from '../document-router/schema';
import { ZDocumentExternalIdSchema, ZDocumentTitleSchema, ZDocumentVisibilitySchema } from '../document-router/schema';
export const ZUpdateEmbeddingEnvelopePayloadSchema = z.object({
envelopeId: z.string(),
@@ -23,9 +23,7 @@ export const updateEmbeddingTemplateRoute = procedure
try {
const authorizationHeader = ctx.req.headers.get('authorization');
const [presignToken] = (authorizationHeader || '')
.split('Bearer ')
.filter((s) => s.length > 0);
const [presignToken] = (authorizationHeader || '').split('Bearer ').filter((s) => s.length > 0);
if (!presignToken) {
throw new AppError(AppErrorCode.UNAUTHORIZED, {
@@ -1,6 +1,3 @@
import { DocumentSigningOrder, RecipientRole } from '@prisma/client';
import { z } from 'zod';
import { ZDocumentEmailSettingsSchema } from '@documenso/lib/types/document-email';
import {
ZDocumentMetaDateFormatSchema,
@@ -23,6 +20,8 @@ import {
} from '@documenso/lib/types/field';
import { ZFieldAndMetaSchema } from '@documenso/lib/types/field-meta';
import { ZRecipientEmailSchema } from '@documenso/lib/types/recipient';
import { DocumentSigningOrder, RecipientRole } from '@prisma/client';
import { z } from 'zod';
import { ZDocumentTitleSchema } from '../document-router/schema';
@@ -76,6 +75,4 @@ export const ZUpdateEmbeddingTemplateResponseSchema = z.object({
templateId: z.number(),
});
export type TUpdateEmbeddingTemplateRequestSchema = z.infer<
typeof ZUpdateEmbeddingTemplateRequestSchema
>;
export type TUpdateEmbeddingTemplateRequestSchema = z.infer<typeof ZUpdateEmbeddingTemplateRequestSchema>;
@@ -3,9 +3,9 @@ import { verifyEmbeddingPresignToken } from '@documenso/lib/server-only/embeddin
import { procedure } from '../trpc';
import {
verifyEmbeddingPresignTokenMeta,
ZVerifyEmbeddingPresignTokenRequestSchema,
ZVerifyEmbeddingPresignTokenResponseSchema,
verifyEmbeddingPresignTokenMeta,
} from './verify-embedding-presign-token.types';
/**
@@ -7,17 +7,13 @@ export const verifyEmbeddingPresignTokenMeta: TrpcRouteMeta = {
method: 'POST',
path: '/embedding/verify-presign-token',
summary: 'Verify embedding presign token',
description:
'Verifies a presign token for embedding operations and returns the associated API token',
description: 'Verifies a presign token for embedding operations and returns the associated API token',
tags: ['Embedding'],
},
};
export const ZVerifyEmbeddingPresignTokenRequestSchema = z.object({
token: z
.string()
.min(1, { message: 'Token is required' })
.describe('The presign token to verify'),
token: z.string().min(1, { message: 'Token is required' }).describe('The presign token to verify'),
scope: z.string().optional().describe('The scope to verify'),
});
@@ -25,10 +21,6 @@ export const ZVerifyEmbeddingPresignTokenResponseSchema = z.object({
success: z.boolean(),
});
export type TVerifyEmbeddingPresignTokenRequestSchema = z.infer<
typeof ZVerifyEmbeddingPresignTokenRequestSchema
>;
export type TVerifyEmbeddingPresignTokenRequestSchema = z.infer<typeof ZVerifyEmbeddingPresignTokenRequestSchema>;
export type TVerifyEmbeddingPresignTokenResponseSchema = z.infer<
typeof ZVerifyEmbeddingPresignTokenResponseSchema
>;
export type TVerifyEmbeddingPresignTokenResponseSchema = z.infer<typeof ZVerifyEmbeddingPresignTokenResponseSchema>;