04e828358a
* fix(analytics): handle null/undefined tracking IDs in embed endpoint PR 26976 introduced strict validation for analytics app schemas, but this broke the embed endpoint when apps are installed with null tracking IDs (apps enabled but not yet configured) Changes: - Add nullishToEmpty preprocessor to convert null/undefined to "" - Update all analytics schemas to handle null gracefully - Change GTM to allowEmpty: true for consistency - Fix createPrefixedIdSchema to not add prefix to empty strings - Add tests for null handling * fix(analytics): add optional() to schemas for type compatibility The preprocess schemas output string type but BookerEvent has trackingId?: string | undefined. Adding .optional() makes the types compatible while preserving null → "" conversion at runtime * refactor: use z.union+transform for proper type inference Replace z.preprocess() with z.union([string, null, undefined]).transform() pattern. This ensures TypeScript correctly infers: - Input: string | null | undefined - Output: string (always) Remove .optional() from tracking ID fields to output string, not string | undefined * fix(analytics): make trackingId optional in metapixel and plausible schemas Address Cubic AI review feedback (confidence 9/10) to keep trackingId optional in the schema to avoid breaking existing payloads that omit the field entirely. The union with null/undefined handles the value transformation, but the property itself must be optional to allow payloads without the key. Co-Authored-By: unknown <> * fix: restore .optional() for missing tracking fields * fix: revert safeUrlSchema to maintain databuddy type compat --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>