Metadata attached to a validated payment session.
All fields are guaranteed to be strings after extraction. Empty string ("") is the canonical representation for "not provided" — payment providers store metadata as string key-value pairs, so null/undefined are normalized to "" by extractSessionMetadata. Domain types (e.g. RegistrationIntent.date) may use null for "not provided"; conversion between "" and null happens at the extraction boundary.