Meeting-booking wire contracts + validation factory. Server-safe zod module with its OWN per-file subpath (`./schemas/meeting-booking-schema`) — zod is an optional peer; never re-export through a broad barrel. Guide: [`docs/EMBEDDING_HUBSPOT_MEETINGS.md`](../../docs/EMBEDDING_HUBSPOT_MEETINGS.md). ## Exports | Export | Description | |---|---| | `makeBookingSchema(formFields, legalConsent)` | FACTORY (per-link questions can't be static). Client builds from the availability payload; the server REBUILDS from the link's own metadata — consent enforcement flows from the rebuild. NOT `.strict()` (humanity signals ride alongside) | | `MeetingAvailability` | Sanitized availability wire type (epoch-ms slots, NO timezone — client-side rendering) | | `BookingConfirmation` | Whitelisted booking result: `{ meetingId, title, startTimeMs, durationMs }` | | `MeetingBookingErrorCode` | `SLOT_TAKEN \| VALIDATION \| LINK_GONE \| TEMPORARILY_UNAVAILABLE \| MEETING_UNAVAILABLE` | | `SUPPORTED_FORM_FIELD_TYPES` / `isSupportedFormField()` | ONE set driving renderer + validator; fail-closed = type ∉ set | | `isValidIanaTimezone()` / `isValidBcp47Locale()` | POST-only presentation-field validators (reject, never coerce). NOT `Intl.supportedValuesOf` — that list excludes `'UTC'` | | `MeetingBookingPayload` | `z.infer` of the factory schema |