The wire shape of a published integration event.
occurredAt is an ISO-8601 string, not a Date: the in-memory broker's
JsonSerializer round-trips payloads through JSON.parse, so a Date
would arrive at the consumer as a string regardless of what the producer
put in — declaring the field a string is the honest type on every transport.
It is named occurredAt (not occurredOn, the Date-typed field the
events-plugin DomainEvent carries) so the two cannot be conflated.
Unknown extra top-level fields are allowed by the consumer's structural check, so an additive envelope change on a later framework version is not a breaking deployment.
id: string
Producer-assigned event identity (runtime.uuid()).
type: string
The definition's semantic event name.
version: number
The definition's contract version.
occurredAt: string
Publish time as an ISO-8601 string (new Date(runtime.now()).toISOString()).
correlationId: string
ID of the chain root this event descends from, when propagated.
causationId: string
ID of the event that directly caused this one, when propagated.
aggregateId: string
ID of the aggregate the event concerns, when supplied.
aggregateVersion: number
Version of the aggregate the event concerns, when supplied.