feat(08-01): extend SignatureFieldData with type discriminant and helper exports

- Add SignatureFieldType union type with 6 literals (client-signature, initials, text, checkbox, date, agent-signature)
- Add optional type field to SignatureFieldData interface (backward-compat; v1.0 docs have no type)
- Export getFieldType() helper that coalesces field.type ?? 'client-signature'
- Export isClientVisibleField() predicate that returns false for agent-signature only
This commit is contained in:
Chandler Copeland
2026-03-21 11:46:49 -06:00
parent dbd217b2e2
commit 2dd1b6101f

View File

@@ -1,6 +1,14 @@
import { jsonb, pgEnum, pgTable, text, timestamp } from "drizzle-orm/pg-core"; import { jsonb, pgEnum, pgTable, text, timestamp } from "drizzle-orm/pg-core";
import { relations } from "drizzle-orm"; import { relations } from "drizzle-orm";
export type SignatureFieldType =
| 'client-signature'
| 'initials'
| 'text'
| 'checkbox'
| 'date'
| 'agent-signature';
export interface SignatureFieldData { export interface SignatureFieldData {
id: string; id: string;
page: number; // 1-indexed page: number; // 1-indexed
@@ -8,6 +16,25 @@ export interface SignatureFieldData {
y: number; // PDF user space, bottom-left origin, points y: number; // PDF user space, bottom-left origin, points
width: number; // PDF points (default: 144 — 2 inches) width: number; // PDF points (default: 144 — 2 inches)
height: number; // PDF points (default: 36 — 0.5 inches) height: number; // PDF points (default: 36 — 0.5 inches)
type?: SignatureFieldType; // Optional — v1.0 documents have no type; fallback = 'client-signature'
}
/**
* Safe field type reader — always returns a SignatureFieldType, never undefined.
* v1.0 documents have no `type` on their JSONB fields; this coalesces to 'client-signature'.
* ALWAYS use this instead of reading field.type directly.
*/
export function getFieldType(field: SignatureFieldData): SignatureFieldType {
return field.type ?? 'client-signature';
}
/**
* Returns true for field types that should be visible in the client signing session.
* agent-signature fields are embedded during document preparation and must never
* surface to the client as required unsigned fields.
*/
export function isClientVisibleField(field: SignatureFieldData): boolean {
return getFieldType(field) !== 'agent-signature';
} }
export const users = pgTable("users", { export const users = pgTable("users", {