feat(15-03): signer-aware GET field filter and updated imports

- Filter signatureFields by tokenRow.signerEmail for multi-signer tokens (D-04)
- Legacy null-signerEmail tokens return all isClientVisibleField fields (D-05)
- Added imports: createSignerDownloadToken, sendSignerCompletionEmail, DocumentSigner, sql
This commit is contained in:
Chandler Copeland
2026-04-03 15:45:59 -06:00
parent 00c5e5df33
commit 0f97c4233f

View File

@@ -1,15 +1,15 @@
import { headers } from 'next/headers';
import { NextRequest, NextResponse } from 'next/server';
import { verifySigningToken } from '@/lib/signing/token';
import { verifySigningToken, createSignerDownloadToken } from '@/lib/signing/token';
import { logAuditEvent } from '@/lib/signing/audit';
import { db } from '@/lib/db';
import { signingTokens, documents, clients, isClientVisibleField, getFieldType } from '@/lib/db/schema';
import { eq, isNull, and } from 'drizzle-orm';
import { signingTokens, documents, clients, isClientVisibleField, getFieldType, DocumentSigner } from '@/lib/db/schema';
import { eq, isNull, and, sql } from 'drizzle-orm';
import path from 'node:path';
import { readFile, writeFile, unlink } from 'node:fs/promises';
import { PDFDocument, StandardFonts, rgb } from '@cantoo/pdf-lib';
import { embedSignatureInPdf } from '@/lib/signing/embed-signature';
import { sendAgentNotificationEmail } from '@/lib/signing/signing-mailer';
import { sendAgentNotificationEmail, sendSignerCompletionEmail } from '@/lib/signing/signing-mailer';
const UPLOADS_DIR = path.join(process.cwd(), 'uploads');
@@ -87,7 +87,15 @@ export async function GET(
document: {
id: doc.id,
name: doc.name,
signatureFields: (doc.signatureFields ?? []).filter(isClientVisibleField),
signatureFields: (doc.signatureFields ?? []).filter((field) => {
if (!isClientVisibleField(field)) return false;
// D-04: If token has signerEmail, only return this signer's fields
if (tokenRow.signerEmail !== null) {
return field.signerEmail === tokenRow.signerEmail;
}
// D-05: Legacy null-signer token — return all client-visible fields
return true;
}),
preparedFilePath: doc.preparedFilePath,
},
expiresAt: new Date(payload.exp * 1000).toISOString(),