from typing import Any import pydantic from app.exceptions import WebhookHandleError from app.models import Event, WebhookEvent def parse_event(event: Any) -> tuple[Event, WebhookEvent]: try: event = Event.model_validate(event) if not event.body: raise WebhookHandleError("Event body is missing", code="BODY_MISSING") webhook_event = WebhookEvent.model_validate_json(event.body) return event, webhook_event except pydantic.ValidationError as exc: raise WebhookHandleError( f"Failed to parse event: {exc.errors()}", code="INVALID_EVENT" ) from exc