package events import ( "context" "encoding/json" "time" "go.mongodb.org/mongo-driver/v2/bson" ) // Envelope is the canonical incoming event envelope. type Envelope struct { EventID string `json:"event_id"` Type string `json:"type"` OrganizationRef bson.ObjectID `json:"organization_ref"` 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"` OrganizationRef bson.ObjectID `json:"organization_ref"` OccurredAt string `json:"occurred_at"` PublishedAt string `json:"published_at,omitempty"` Data json.RawMessage `json:"data"` }