package events import ( "context" "encoding/json" "time" ) // Envelope is the canonical incoming event envelope. type Envelope struct { EventID string `json:"event_id"` Type string `json:"type"` ClientID string `json:"client_id"` OccurredAt time.Time `json:"occurred_at"` PublishedAt time.Time `json:"published_at,omitempty"` Data json.RawMessage `json:"data"` } // Service parses incoming messages and builds outbound payload bytes. type Service interface { Parse(data []byte) (*Envelope, error) BuildPayload(ctx context.Context, envelope *Envelope) ([]byte, error) } // Payload is the stable outbound JSON body. type Payload struct { EventID string `json:"event_id"` Type string `json:"type"` ClientID string `json:"client_id"` OccurredAt string `json:"occurred_at"` PublishedAt string `json:"published_at,omitempty"` Data json.RawMessage `json:"data"` }