diff --git a/teressa-copeland-homes/src/app/api/sign/[token]/route.ts b/teressa-copeland-homes/src/app/api/sign/[token]/route.ts index 36708d7..ad81d32 100644 --- a/teressa-copeland-homes/src/app/api/sign/[token]/route.ts +++ b/teressa-copeland-homes/src/app/api/sign/[token]/route.ts @@ -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(),