diff --git a/backend/app/api/routes/events.py b/backend/app/api/routes/events.py deleted file mode 100644 index 6b70a577..00000000 --- a/backend/app/api/routes/events.py +++ /dev/null @@ -1,332 +0,0 @@ -import logging -from datetime import datetime, timedelta, timezone -from typing import Annotated - -from dishka import FromDishka -from dishka.integrations.fastapi import DishkaRoute -from fastapi import APIRouter, Depends, HTTPException, Query, Request - -from app.api.dependencies import admin_user, current_user -from app.core.correlation import CorrelationContext -from app.core.utils import get_client_ip -from app.domain.enums import EventType, SortOrder, UserRole -from app.domain.events import BaseEvent, DomainEvent, EventFilter, EventMetadata -from app.domain.user import User -from app.schemas_pydantic.common import ErrorResponse -from app.schemas_pydantic.events import ( - DeleteEventResponse, - EventFilterRequest, - EventListResponse, - EventStatistics, - PublishEventRequest, - PublishEventResponse, - ReplayAggregateResponse, -) -from app.services.event_service import EventService -from app.services.execution_service import ExecutionService -from app.services.kafka_event_service import KafkaEventService -from app.settings import Settings - -router = APIRouter(prefix="/events", tags=["events"], route_class=DishkaRoute) - - -@router.get( - "/executions/{execution_id}/events", - response_model=EventListResponse, - responses={403: {"model": ErrorResponse, "description": "Not the owner of this execution"}}, -) -async def get_execution_events( - execution_id: str, - current_user: Annotated[User, Depends(current_user)], - event_service: FromDishka[EventService], - execution_service: FromDishka[ExecutionService], - include_system_events: Annotated[bool, Query(description="Include system-generated events")] = False, - limit: Annotated[int, Query(ge=1, le=1000)] = 100, - skip: Annotated[int, Query(ge=0)] = 0, -) -> EventListResponse: - """Get events for a specific execution.""" - # Check execution ownership first (before checking events) - execution = await execution_service.get_execution_result(execution_id) - if execution.user_id and execution.user_id != current_user.user_id and current_user.role != UserRole.ADMIN: - raise HTTPException(status_code=403, detail="Access denied") - - result = await event_service.get_execution_events( - execution_id=execution_id, - user_id=current_user.user_id, - user_role=current_user.role, - include_system_events=include_system_events, - limit=limit, - skip=skip, - ) - - if result is None: - raise HTTPException(status_code=403, detail="Access denied") - - return EventListResponse.model_validate(result) - - -@router.get("/user", response_model=EventListResponse) -async def get_user_events( - current_user: Annotated[User, Depends(current_user)], - event_service: FromDishka[EventService], - event_types: Annotated[list[EventType] | None, Query(description="Filter by event types")] = None, - start_time: Annotated[datetime | None, Query(description="Filter events after this time")] = None, - end_time: Annotated[datetime | None, Query(description="Filter events before this time")] = None, - limit: Annotated[int, Query(ge=1, le=1000)] = 100, - skip: Annotated[int, Query(ge=0)] = 0, - sort_order: Annotated[SortOrder, Query(description="Sort order by timestamp")] = SortOrder.DESC, -) -> EventListResponse: - """Get events for the current user.""" - result = await event_service.get_user_events_paginated( - user_id=current_user.user_id, - event_types=event_types, - start_time=start_time, - end_time=end_time, - limit=limit, - skip=skip, - sort_order=sort_order, - ) - - return EventListResponse.model_validate(result) - - -@router.post( - "/query", - response_model=EventListResponse, - responses={403: {"model": ErrorResponse, "description": "Cannot query other users' events"}}, -) -async def query_events( - current_user: Annotated[User, Depends(current_user)], - filter_request: EventFilterRequest, - event_service: FromDishka[EventService], -) -> EventListResponse: - """Query events with advanced filters.""" - event_filter = EventFilter.model_validate(filter_request) - - result = await event_service.query_events_advanced( - user_id=current_user.user_id, - user_role=current_user.role, - filters=event_filter, - sort_by=filter_request.sort_by, - limit=filter_request.limit, - skip=filter_request.skip, - ) - if result is None: - raise HTTPException(status_code=403, detail="Cannot query other users' events") - - return EventListResponse.model_validate(result) - - -@router.get("/correlation/{correlation_id}", response_model=EventListResponse) -async def get_events_by_correlation( - correlation_id: str, - current_user: Annotated[User, Depends(current_user)], - event_service: FromDishka[EventService], - include_all_users: Annotated[bool, Query(description="Include events from all users (admin only)")] = False, - limit: Annotated[int, Query(ge=1, le=1000)] = 100, - skip: Annotated[int, Query(ge=0)] = 0, -) -> EventListResponse: - """Get all events sharing a correlation ID.""" - result = await event_service.get_events_by_correlation( - correlation_id=correlation_id, - user_id=current_user.user_id, - user_role=current_user.role, - include_all_users=include_all_users, - limit=limit, - skip=skip, - ) - - return EventListResponse.model_validate(result) - - -@router.get("/current-request", response_model=EventListResponse) -async def get_current_request_events( - current_user: Annotated[User, Depends(current_user)], - event_service: FromDishka[EventService], - limit: Annotated[int, Query(ge=1, le=1000)] = 100, - skip: Annotated[int, Query(ge=0)] = 0, -) -> EventListResponse: - """Get events associated with the current HTTP request's correlation ID.""" - correlation_id = CorrelationContext.get_correlation_id() - if not correlation_id: - return EventListResponse(events=[], total=0, limit=limit, skip=skip, has_more=False) - - result = await event_service.get_events_by_correlation( - correlation_id=correlation_id, - user_id=current_user.user_id, - user_role=current_user.role, - include_all_users=False, - limit=limit, - skip=skip, - ) - - return EventListResponse.model_validate(result) - - -@router.get("/statistics", response_model=EventStatistics) -async def get_event_statistics( - current_user: Annotated[User, Depends(current_user)], - event_service: FromDishka[EventService], - start_time: Annotated[ - datetime | None, Query(description="Start time for statistics (defaults to 24 hours ago)") - ] = None, - end_time: Annotated[datetime | None, Query(description="End time for statistics (defaults to now)")] = None, - include_all_users: Annotated[bool, Query(description="Include stats from all users (admin only)")] = False, -) -> EventStatistics: - """Get aggregated event statistics for a time range.""" - if not start_time: - start_time = datetime.now(timezone.utc) - timedelta(days=1) # 24 hours ago - if not end_time: - end_time = datetime.now(timezone.utc) - - stats = await event_service.get_event_statistics( - user_id=current_user.user_id, - user_role=current_user.role, - start_time=start_time, - end_time=end_time, - include_all_users=include_all_users, - ) - - return EventStatistics.model_validate(stats) - - -@router.get( - "/{event_id}", - response_model=DomainEvent, - responses={404: {"model": ErrorResponse, "description": "Event not found"}}, -) -async def get_event( - event_id: str, current_user: Annotated[User, Depends(current_user)], event_service: FromDishka[EventService] -) -> DomainEvent: - """Get a specific event by ID.""" - event = await event_service.get_event(event_id=event_id, user_id=current_user.user_id, user_role=current_user.role) - if event is None: - raise HTTPException(status_code=404, detail="Event not found") - return event - - -@router.post("/publish", response_model=PublishEventResponse) -async def publish_custom_event( - admin: Annotated[User, Depends(admin_user)], - event_request: PublishEventRequest, - request: Request, - event_service: FromDishka[KafkaEventService], - settings: FromDishka[Settings], -) -> PublishEventResponse: - """Publish a custom event to Kafka (admin only).""" - base_meta = EventMetadata( - service_name=settings.SERVICE_NAME, - service_version=settings.SERVICE_VERSION, - user_id=admin.user_id, - ip_address=get_client_ip(request), - user_agent=request.headers.get("user-agent"), - ) - # Merge any additional metadata provided in request (extra allowed) - if event_request.metadata: - base_meta = base_meta.model_copy(update=event_request.metadata) - - event_id = await event_service.publish_event( - event_type=event_request.event_type, - payload=event_request.payload, - aggregate_id=event_request.aggregate_id, - correlation_id=event_request.correlation_id, - metadata=base_meta, - ) - - return PublishEventResponse(event_id=event_id, status="published", timestamp=datetime.now(timezone.utc)) - - -@router.delete( - "/{event_id}", - response_model=DeleteEventResponse, - responses={404: {"model": ErrorResponse, "description": "Event not found"}}, -) -async def delete_event( - event_id: str, - admin: Annotated[User, Depends(admin_user)], - event_service: FromDishka[EventService], - logger: FromDishka[logging.Logger], -) -> DeleteEventResponse: - """Delete and archive an event (admin only).""" - result = await event_service.delete_event_with_archival(event_id=event_id, deleted_by=str(admin.email)) - - if result is None: - raise HTTPException(status_code=404, detail="Event not found") - - logger.warning( - "Event deleted by admin", - extra={ - "event_id": event_id, - "admin_email": admin.email, - "event_type": result.event_type, - "aggregate_id": result.aggregate_id, - "correlation_id": result.metadata.correlation_id, - }, - ) - - return DeleteEventResponse( - message="Event deleted and archived", event_id=event_id, deleted_at=datetime.now(timezone.utc) - ) - - -@router.post( - "/replay/{aggregate_id}", - response_model=ReplayAggregateResponse, - responses={404: {"model": ErrorResponse, "description": "No events found for the aggregate"}}, -) -async def replay_aggregate_events( - aggregate_id: str, - admin: Annotated[User, Depends(admin_user)], - event_service: FromDishka[EventService], - kafka_event_service: FromDishka[KafkaEventService], - settings: FromDishka[Settings], - logger: FromDishka[logging.Logger], - target_service: Annotated[str | None, Query(description="Service to replay events to")] = None, - dry_run: Annotated[bool, Query(description="If true, only show what would be replayed")] = True, -) -> ReplayAggregateResponse: - """Replay all events for an aggregate (admin only).""" - replay_info = await event_service.get_aggregate_replay_info(aggregate_id) - if not replay_info: - raise HTTPException(status_code=404, detail=f"No events found for aggregate {aggregate_id}") - - if dry_run: - return ReplayAggregateResponse( - dry_run=True, - aggregate_id=aggregate_id, - event_count=replay_info.event_count, - event_types=replay_info.event_types, - start_time=replay_info.start_time, - end_time=replay_info.end_time, - ) - - # Perform actual replay - replay_correlation_id = f"replay_{CorrelationContext.get_correlation_id()}" - replayed_count = 0 - - for event in replay_info.events: - try: - meta = EventMetadata( - service_name=settings.SERVICE_NAME, - service_version=settings.SERVICE_VERSION, - user_id=admin.user_id, - ) - # Extract payload fields (exclude base event fields + event_type discriminator) - base_fields = set(BaseEvent.model_fields.keys()) | {"event_type"} - extra_fields = {k: v for k, v in event.model_dump().items() if k not in base_fields} - await kafka_event_service.publish_event( - event_type=event.event_type, - payload=extra_fields, - aggregate_id=aggregate_id, - correlation_id=replay_correlation_id, - metadata=meta, - ) - replayed_count += 1 - except Exception as e: - logger.error(f"Failed to replay event {event.event_id}: {e}") - - return ReplayAggregateResponse( - dry_run=False, - aggregate_id=aggregate_id, - replayed_count=replayed_count, - replay_correlation_id=replay_correlation_id, - ) diff --git a/backend/app/api/routes/execution.py b/backend/app/api/routes/execution.py index fe69638d..42340cb2 100644 --- a/backend/app/api/routes/execution.py +++ b/backend/app/api/routes/execution.py @@ -23,7 +23,6 @@ ExecutionResponse, ExecutionResult, ResourceLimits, - RetryExecutionRequest, ) from app.services.event_service import EventService from app.services.execution_service import ExecutionService @@ -75,8 +74,6 @@ async def create_execution( lang=execution.lang, lang_version=execution.lang_version, user_id=current_user.user_id, - client_ip=get_client_ip(request), - user_agent=request.headers.get("user-agent"), idempotency_key=idempotency_key, ) return ExecutionResponse.model_validate(exec_result) @@ -129,8 +126,6 @@ async def cancel_execution( async def retry_execution( original_execution: Annotated[ExecutionInDB, Depends(get_execution_with_access)], current_user: Annotated[User, Depends(current_user)], - retry_request: RetryExecutionRequest, - request: Request, execution_service: FromDishka[ExecutionService], ) -> ExecutionResponse: """Retry a failed or completed execution.""" @@ -138,16 +133,11 @@ async def retry_execution( if original_execution.status in [ExecutionStatus.RUNNING, ExecutionStatus.QUEUED]: raise HTTPException(status_code=400, detail=f"Cannot retry execution in {original_execution.status} state") - # Convert UserResponse to User object - client_ip = get_client_ip(request) - user_agent = request.headers.get("user-agent") new_result = await execution_service.execute_script( script=original_execution.script, lang=original_execution.lang, lang_version=original_execution.lang_version, user_id=current_user.user_id, - client_ip=client_ip, - user_agent=user_agent, ) return ExecutionResponse.model_validate(new_result) diff --git a/backend/app/domain/events/typed.py b/backend/app/domain/events/typed.py index 7e887a36..7ce79bb0 100644 --- a/backend/app/domain/events/typed.py +++ b/backend/app/domain/events/typed.py @@ -4,6 +4,7 @@ from pydantic import BaseModel, ConfigDict, Discriminator, Field, TypeAdapter +from app.core.correlation import CorrelationContext from app.domain.enums import ( Environment, EventType, @@ -34,10 +35,8 @@ class EventMetadata(BaseModel): service_name: str service_version: str - correlation_id: str = Field(default_factory=lambda: str(uuid4())) + correlation_id: str = Field(default_factory=CorrelationContext.get_correlation_id) user_id: str = Field(default_factory=lambda: str(uuid4())) - ip_address: str | None = None - user_agent: str | None = None environment: Environment = Environment.PRODUCTION diff --git a/backend/app/main.py b/backend/app/main.py index d11242f2..afcf28c6 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -6,7 +6,6 @@ from app.api.routes import ( auth, dlq, - events, execution, health, notifications, @@ -116,7 +115,6 @@ def create_app(settings: Settings | None = None) -> FastAPI: app.include_router(health.router, prefix=settings.API_V1_STR) app.include_router(dlq.router, prefix=settings.API_V1_STR) app.include_router(sse.router, prefix=settings.API_V1_STR) - app.include_router(events.router, prefix=settings.API_V1_STR) app.include_router(admin_events_router, prefix=settings.API_V1_STR) app.include_router(admin_settings_router, prefix=settings.API_V1_STR) app.include_router(admin_users_router, prefix=settings.API_V1_STR) diff --git a/backend/app/schemas_pydantic/events.py b/backend/app/schemas_pydantic/events.py index c3c36e73..70ab8c5e 100644 --- a/backend/app/schemas_pydantic/events.py +++ b/backend/app/schemas_pydantic/events.py @@ -1,11 +1,8 @@ -from datetime import datetime, timedelta, timezone -from typing import Any -from uuid import uuid4 +from datetime import datetime -from pydantic import BaseModel, ConfigDict, Field, field_validator +from pydantic import BaseModel, ConfigDict -from app.domain.enums import Environment, EventType, SortOrder -from app.domain.events import DomainEvent +from app.domain.enums import EventType class EventTypeCountSchema(BaseModel): @@ -35,123 +32,6 @@ class ServiceEventCountSchema(BaseModel): count: int -class EventMetadataResponse(BaseModel): - """Pydantic schema for event metadata in API responses.""" - - model_config = ConfigDict(from_attributes=True) - - service_name: str - service_version: str - correlation_id: str - user_id: str | None = None - ip_address: str | None = None - user_agent: str | None = None - environment: Environment = Environment.PRODUCTION - - -class EventSummaryResponse(BaseModel): - """Lightweight event summary for lists and related events display.""" - - model_config = ConfigDict(from_attributes=True) - - event_id: str - event_type: EventType - timestamp: datetime - aggregate_id: str | None = None - - -class EventListResponse(BaseModel): - model_config = ConfigDict(from_attributes=True) - - events: list[DomainEvent] - total: int - limit: int - skip: int - has_more: bool - - -class EventFilterRequest(BaseModel): - """Request model for filtering events.""" - - event_types: list[EventType] | None = Field(None, description="Filter by event types") - aggregate_id: str | None = Field(None, description="Filter by aggregate ID") - correlation_id: str | None = Field(None, description="Filter by correlation ID") - user_id: str | None = Field(None, description="Filter by user ID (admin only)") - service_name: str | None = Field(None, description="Filter by service name") - start_time: datetime | None = Field(None, description="Filter events after this time") - end_time: datetime | None = Field(None, description="Filter events before this time") - search_text: str | None = Field(None, description="Full-text search in event data") - sort_by: str = Field("timestamp", description="Field to sort by") - sort_order: SortOrder = Field(SortOrder.DESC, description="Sort order") - limit: int = Field(100, ge=1, le=1000, description="Maximum events to return") - skip: int = Field(0, ge=0, description="Number of events to skip") - - @field_validator("sort_by") - @classmethod - def validate_sort_field(cls, v: str) -> str: - allowed_fields = {"timestamp", "event_type", "aggregate_id", "correlation_id", "stored_at"} - if v not in allowed_fields: - raise ValueError(f"Sort field must be one of {allowed_fields}") - return v - - -class PublishEventRequest(BaseModel): - """Request model for publishing events.""" - - event_type: EventType = Field(..., description="Type of event to publish") - payload: dict[str, Any] = Field(..., description="Event payload data") - aggregate_id: str | None = Field(None, description="Aggregate root ID") - correlation_id: str | None = Field(None, description="Correlation ID") - causation_id: str | None = Field(None, description="ID of causing event") - metadata: dict[str, Any] | None = Field(None, description="Additional metadata") - - -class EventBase(BaseModel): - """Base event model for API responses.""" - - event_id: str = Field(default_factory=lambda: str(uuid4())) - event_type: EventType - event_version: str = "1.0" - timestamp: datetime = Field(default_factory=lambda: datetime.now(timezone.utc)) - aggregate_id: str | None = None - correlation_id: str | None = None - causation_id: str | None = None # ID of the event that caused this event - metadata: EventMetadataResponse - payload: dict[str, Any] - - model_config = ConfigDict( - json_schema_extra={ - "example": { - "event_id": "550e8400-e29b-41d4-a716-446655440000", - "event_type": EventType.EXECUTION_REQUESTED, - "event_version": "1.0", - "timestamp": "2024-01-20T10:30:00Z", - "aggregate_id": "execution-123", - "correlation_id": "request-456", - "metadata": { - "user_id": "user-789", - "service_name": "api-gateway", - "service_version": "1.0.0", - "ip_address": "192.168.1.1", - }, - "payload": { - "execution_id": "execution-123", - "script": "print('hello')", - "language": "python", - "version": "3.11", - }, - } - } - ) - - -class EventInDB(EventBase): - """Event as stored in database.""" - - stored_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc)) - ttl_expires_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc) + timedelta(days=30)) - - class EventStatistics(BaseModel): """Event statistics response.""" @@ -183,74 +63,3 @@ class EventStatistics(BaseModel): } }, ) - - -class EventProjection(BaseModel): - """Configuration for event projections.""" - - name: str - description: str | None = None - source_events: list[EventType] # Event types to include - aggregation_pipeline: list[dict[str, Any]] - output_collection: str - refresh_interval_seconds: int = 300 # 5 minutes default - last_updated: datetime | None = None - - model_config = ConfigDict( - json_schema_extra={ - "example": { - "name": "execution_summary", - "description": "Summary of executions by user and status", - "source_events": [EventType.EXECUTION_REQUESTED, EventType.EXECUTION_COMPLETED], - "aggregation_pipeline": [ - {"$match": {"event_type": {"$in": [EventType.EXECUTION_REQUESTED, EventType.EXECUTION_COMPLETED]}}}, - { - "$group": { - "_id": {"user_id": "$metadata.user_id", "status": "$payload.status"}, - "count": {"$sum": 1}, - } - }, - ], - "output_collection": "execution_summary", - "refresh_interval_seconds": 300, - } - } - ) - - -class ResourceUsage(BaseModel): - """Resource usage statistics.""" - - cpu_seconds: float - memory_mb_seconds: float - disk_io_mb: float - network_io_mb: float - - -class PublishEventResponse(BaseModel): - """Response model for publishing events""" - - event_id: str - status: str - timestamp: datetime - - -class DeleteEventResponse(BaseModel): - """Response model for deleting events""" - - message: str - event_id: str - deleted_at: datetime - - -class ReplayAggregateResponse(BaseModel): - """Response model for replaying aggregate events""" - - dry_run: bool - aggregate_id: str - event_count: int | None = None - event_types: list[EventType] | None = None - start_time: datetime | None = None - end_time: datetime | None = None - replayed_count: int | None = None - replay_correlation_id: str | None = None diff --git a/backend/app/schemas_pydantic/execution.py b/backend/app/schemas_pydantic/execution.py index d2b9be30..2fc60a25 100644 --- a/backend/app/schemas_pydantic/execution.py +++ b/backend/app/schemas_pydantic/execution.py @@ -139,13 +139,6 @@ class CancelExecutionRequest(BaseModel): reason: str = Field("User requested cancellation", description="Reason for cancellation") -class RetryExecutionRequest(BaseModel): - """Model for retrying an execution.""" - - reason: str | None = Field(None, description="Reason for retry") - preserve_output: bool = Field(False, description="Keep output from previous attempt") - - class ExecutionListResponse(BaseModel): """Model for paginated execution list.""" diff --git a/backend/app/services/execution_service.py b/backend/app/services/execution_service.py index 19c6b883..4c3c2c75 100644 --- a/backend/app/services/execution_service.py +++ b/backend/app/services/execution_service.py @@ -1,11 +1,9 @@ import logging -from contextlib import contextmanager from datetime import datetime, timezone from time import time -from typing import Any, Generator +from typing import Any from uuid import uuid4 -from app.core.correlation import CorrelationContext from app.core.metrics import ExecutionMetrics from app.db.repositories import ExecutionRepository from app.domain.enums import CancelStatus, EventType, ExecutionStatus, QueuePriority @@ -72,15 +70,6 @@ def __init__( self.idempotency_manager = idempotency_manager self._runtime_settings = runtime_settings - @contextmanager - def _track_active_execution(self) -> Generator[None, None, None]: # noqa: D401 - """Increment active executions on enter and decrement on exit.""" - self.metrics.increment_active_executions() - try: - yield - finally: - self.metrics.decrement_active_executions() - async def get_k8s_resource_limits(self) -> ResourceLimitsDomain: effective = await self._runtime_settings.get_effective_settings() return ResourceLimitsDomain( @@ -95,32 +84,12 @@ async def get_k8s_resource_limits(self) -> ResourceLimitsDomain: async def get_example_scripts(self) -> dict[str, str]: return self.settings.EXAMPLE_SCRIPTS - def _create_event_metadata( - self, - user_id: str, - client_ip: str | None = None, - user_agent: str | None = None, - ) -> EventMetadata: - """ - Create standardized event metadata. - - Args: - user_id: User identifier. - client_ip: Client IP address. - user_agent: User agent string. - - Returns: - EventMetadata instance. - """ - correlation_id = CorrelationContext.get_correlation_id() - + def _create_event_metadata(self, user_id: str) -> EventMetadata: + """Create standardized event metadata.""" return EventMetadata( - correlation_id=correlation_id, service_name="execution-service", service_version="2.0.0", user_id=user_id, - ip_address=client_ip, - user_agent=user_agent, ) async def execute_script( @@ -128,12 +97,9 @@ async def execute_script( script: str, user_id: str, *, - client_ip: str | None, - user_agent: str | None, lang: str = "python", lang_version: str = "3.11", priority: QueuePriority = QueuePriority.NORMAL, - timeout_override: int | None = None, ) -> DomainExecution: """ Execute a script by creating an execution record and publishing an event. @@ -144,7 +110,6 @@ async def execute_script( lang_version: Language version. user_id: ID of the user requesting execution. priority: Execution priority (1-10, lower is higher priority). - timeout_override: Override default timeout in seconds. Returns: DomainExecution record with queued status. @@ -163,13 +128,13 @@ async def execute_script( "lang_version": lang_version, "script_length": len(script), "priority": priority, - "timeout_override": timeout_override, }, ) runtime_cfg = RUNTIME_REGISTRY[lang][lang_version] - with self._track_active_execution(): + self.metrics.increment_active_executions() + try: # Create execution record created_execution = await self.execution_repo.create_execution( DomainExecutionCreate( @@ -192,9 +157,8 @@ async def execute_script( ) # Metadata and event — use admin-configurable limits - metadata = self._create_event_metadata(user_id=user_id, client_ip=client_ip, user_agent=user_agent) + metadata = self._create_event_metadata(user_id=user_id) effective = await self._runtime_settings.get_effective_settings() - timeout = timeout_override or effective.max_timeout_seconds event = ExecutionRequestedEvent( execution_id=created_execution.execution_id, aggregate_id=created_execution.execution_id, @@ -204,7 +168,7 @@ async def execute_script( runtime_image=runtime_cfg.image, runtime_command=runtime_cfg.command, runtime_filename=runtime_cfg.file_name, - timeout_seconds=timeout, + timeout_seconds=effective.max_timeout_seconds, cpu_limit=effective.cpu_limit, memory_limit=effective.memory_limit, cpu_request=self.settings.K8S_POD_CPU_REQUEST, @@ -238,6 +202,8 @@ async def execute_script( }, ) return created_execution + finally: + self.metrics.decrement_active_executions() async def cancel_execution( self, @@ -307,8 +273,6 @@ async def execute_script_idempotent( script: str, user_id: str, *, - client_ip: str | None, - user_agent: str | None, lang: str = "python", lang_version: str = "3.11", idempotency_key: str | None = None, @@ -319,8 +283,6 @@ async def execute_script_idempotent( Args: script: The code to execute. user_id: ID of the user requesting execution. - client_ip: Client IP address. - user_agent: User agent string. lang: Programming language. lang_version: Language version. idempotency_key: Optional HTTP idempotency key. @@ -334,8 +296,6 @@ async def execute_script_idempotent( lang=lang, lang_version=lang_version, user_id=user_id, - client_ip=client_ip, - user_agent=user_agent, ) pseudo_event = BaseEvent( @@ -380,8 +340,6 @@ async def execute_script_idempotent( lang=lang, lang_version=lang_version, user_id=user_id, - client_ip=client_ip, - user_agent=user_agent, ) await self.idempotency_manager.mark_completed_with_json( diff --git a/backend/app/services/kafka_event_service.py b/backend/app/services/kafka_event_service.py index 4baa5853..4e21fec5 100644 --- a/backend/app/services/kafka_event_service.py +++ b/backend/app/services/kafka_event_service.py @@ -1,15 +1,10 @@ import logging import time -from datetime import datetime, timezone -from typing import Any -from uuid import uuid4 from opentelemetry import trace -from app.core.correlation import CorrelationContext from app.core.metrics import EventMetrics -from app.domain.enums import EventType, ExecutionStatus -from app.domain.events import DomainEvent, DomainEventAdapter, EventMetadata +from app.domain.events import DomainEvent from app.events.core import UnifiedProducer from app.settings import Settings @@ -29,135 +24,20 @@ def __init__( self.metrics = event_metrics self.settings = settings - async def publish_event( - self, - event_type: EventType, - payload: dict[str, Any], - aggregate_id: str | None, - correlation_id: str | None = None, - metadata: EventMetadata | None = None, - ) -> str: - """ - Build a typed DomainEvent from parameters and publish to Kafka. + async def publish_event(self, event: DomainEvent, key: str) -> str: + """Publish a typed DomainEvent to Kafka. The producer persists the event to MongoDB before publishing. """ with tracer.start_as_current_span("publish_event") as span: - span.set_attribute("event.type", event_type) - if aggregate_id is not None: - span.set_attribute("aggregate.id", aggregate_id) - - start_time = time.time() - - if not correlation_id: - correlation_id = CorrelationContext.get_correlation_id() - - event_metadata = metadata or EventMetadata( - service_name=self.settings.SERVICE_NAME, - service_version=self.settings.SERVICE_VERSION, - correlation_id=correlation_id or str(uuid4()), - ) - if correlation_id and event_metadata.correlation_id != correlation_id: - event_metadata = event_metadata.model_copy(update={"correlation_id": correlation_id}) - - event_id = str(uuid4()) - timestamp = datetime.now(timezone.utc) - - # Create typed domain event via discriminated union adapter - event_data = { - "event_id": event_id, - "event_type": event_type, - "event_version": "1.0", - "timestamp": timestamp, - "aggregate_id": aggregate_id, - "metadata": event_metadata, - **payload, - } - domain_event = DomainEventAdapter.validate_python(event_data) - - await self.kafka_producer.produce(event_to_produce=domain_event, key=aggregate_id or domain_event.event_id) - self.metrics.record_event_published(event_type) - self.metrics.record_event_processing_duration(time.time() - start_time, event_type) - self.logger.info("Event published", extra={"event_type": event_type, "event_id": domain_event.event_id}) - return domain_event.event_id - - async def publish_execution_event( - self, - event_type: EventType, - execution_id: str, - status: ExecutionStatus, - metadata: EventMetadata | None = None, - error_message: str | None = None, - ) -> str: - """Publish execution-related event using provided metadata (no framework coupling).""" - self.logger.info( - "Publishing execution event", - extra={ - "event_type": event_type, - "execution_id": execution_id, - "status": status, - }, - ) - - payload = {"execution_id": execution_id, "status": status} - - if error_message: - payload["error_message"] = error_message - - event_id = await self.publish_event( - event_type=event_type, - payload=payload, - aggregate_id=execution_id, - metadata=metadata, - ) - - self.logger.info( - "Execution event published successfully", - extra={ - "event_type": event_type, - "execution_id": execution_id, - "event_id": event_id, - }, - ) - - return event_id - - async def publish_pod_event( - self, - event_type: EventType, - pod_name: str, - execution_id: str, - namespace: str = "integr8scode", - status: str | None = None, - metadata: EventMetadata | None = None, - ) -> str: - """Publish pod-related event""" - payload = {"pod_name": pod_name, "execution_id": execution_id, "namespace": namespace} - - if status: - payload["status"] = status - - return await self.publish_event( - event_type=event_type, - payload=payload, - aggregate_id=execution_id, - metadata=metadata, - ) - - async def publish_domain_event(self, event: DomainEvent, key: str | None = None) -> str: - """Publish a pre-built DomainEvent to Kafka. - - The producer persists the event to MongoDB before publishing. - """ - with tracer.start_as_current_span("publish_domain_event") as span: span.set_attribute("event.type", event.event_type) if event.aggregate_id: span.set_attribute("aggregate.id", event.aggregate_id) start_time = time.time() - await self.kafka_producer.produce(event_to_produce=event, key=key or event.aggregate_id or event.event_id) + await self.kafka_producer.produce(event_to_produce=event, key=key) self.metrics.record_event_published(event.event_type) self.metrics.record_event_processing_duration(time.time() - start_time, event.event_type) - self.logger.info("Domain event published", extra={"event_id": event.event_id}) + self.logger.info("Event published", extra={"event_type": event.event_type, "event_id": event.event_id}) return event.event_id diff --git a/backend/app/services/notification_service.py b/backend/app/services/notification_service.py index 5d169af1..4de201e9 100644 --- a/backend/app/services/notification_service.py +++ b/backend/app/services/notification_service.py @@ -212,7 +212,7 @@ async def _publish_notification_created_event(self, notification: DomainNotifica user_id=notification.user_id, ), ) - await self.event_service.publish_domain_event(event, key=notification.user_id) + await self.event_service.publish_event(event, key=notification.user_id) except Exception as e: self.logger.error(f"Failed to publish notification created event: {e}") diff --git a/backend/app/services/pod_monitor/monitor.py b/backend/app/services/pod_monitor/monitor.py index c514c114..5a1efdc4 100644 --- a/backend/app/services/pod_monitor/monitor.py +++ b/backend/app/services/pod_monitor/monitor.py @@ -199,7 +199,7 @@ async def _publish_event(self, event: DomainEvent, pod: k8s_client.V1Pod) -> Non execution_id = getattr(event, "execution_id", None) or event.aggregate_id key = str(execution_id or (pod.metadata.name if pod.metadata else "unknown")) - await self._kafka_event_service.publish_domain_event(event=event, key=key) + await self._kafka_event_service.publish_event(event=event, key=key) phase = pod.status.phase if pod.status else "Unknown" self._metrics.record_pod_monitor_event_published(event.event_type, phase) diff --git a/backend/app/services/user_settings_service.py b/backend/app/services/user_settings_service.py index 28ede701..0721c072 100644 --- a/backend/app/services/user_settings_service.py +++ b/backend/app/services/user_settings_service.py @@ -6,6 +6,7 @@ from app.db.repositories import UserSettingsRepository from app.domain.enums import EventType, Theme +from app.domain.events import EventMetadata, UserSettingsUpdatedEvent from app.domain.user import ( DomainEditorSettings, DomainNotificationSettings, @@ -96,17 +97,19 @@ async def update_user_settings( async def _publish_settings_event(self, user_id: str, changes: dict[str, Any], reason: str | None) -> None: """Publish settings update event with typed payload fields.""" - await self.event_service.publish_event( - event_type=EventType.USER_SETTINGS_UPDATED, + event = UserSettingsUpdatedEvent( aggregate_id=f"user_settings_{user_id}", - payload={ - "user_id": user_id, - "changed_fields": list(changes.keys()), - "reason": reason, - **changes, - }, - metadata=None, + user_id=user_id, + changed_fields=list(changes.keys()), + reason=reason, + metadata=EventMetadata( + service_name="integr8scode-user-settings", + service_version="1.0.0", + user_id=user_id, + ), + **changes, ) + await self.event_service.publish_event(event, key=f"user_settings_{user_id}") async def update_theme(self, user_id: str, theme: Theme) -> DomainUserSettings: """Update user's theme preference""" @@ -171,16 +174,18 @@ async def restore_settings_to_point(self, user_id: str, timestamp: datetime) -> await self.repository.create_snapshot(settings) self._add_to_cache(user_id, settings) - await self.event_service.publish_event( - event_type=EventType.USER_SETTINGS_UPDATED, + restore_event = UserSettingsUpdatedEvent( aggregate_id=f"user_settings_{user_id}", - payload={ - "user_id": user_id, - "changed_fields": [], - "reason": f"Settings restored to {timestamp.isoformat()}", - }, - metadata=None, + user_id=user_id, + changed_fields=[], + reason=f"Settings restored to {timestamp.isoformat()}", + metadata=EventMetadata( + service_name="integr8scode-user-settings", + service_version="1.0.0", + user_id=user_id, + ), ) + await self.event_service.publish_event(restore_event, key=f"user_settings_{user_id}") return settings diff --git a/backend/tests/e2e/services/events/test_kafka_event_service.py b/backend/tests/e2e/services/events/test_kafka_event_service.py index d2781fd9..1320aaf9 100644 --- a/backend/tests/e2e/services/events/test_kafka_event_service.py +++ b/backend/tests/e2e/services/events/test_kafka_event_service.py @@ -1,7 +1,8 @@ import pytest from app.db.repositories import EventRepository -from app.domain.enums import EventType, ExecutionStatus +from app.domain.events import EventMetadata, UserRegisteredEvent from app.services.kafka_event_service import KafkaEventService +from app.settings import Settings from dishka import AsyncContainer pytestmark = [pytest.mark.e2e, pytest.mark.kafka, pytest.mark.mongodb] @@ -11,56 +12,20 @@ async def test_publish_user_registered_event(scope: AsyncContainer) -> None: svc: KafkaEventService = await scope.get(KafkaEventService) repo: EventRepository = await scope.get(EventRepository) + settings: Settings = await scope.get(Settings) - event_id = await svc.publish_event( - event_type=EventType.USER_REGISTERED, - payload={"user_id": "u1", "username": "alice", "email": "alice@example.com"}, + event = UserRegisteredEvent( aggregate_id="u1", + user_id="u1", + username="alice", + email="alice@example.com", + metadata=EventMetadata( + service_name=settings.SERVICE_NAME, + service_version=settings.SERVICE_VERSION, + user_id="u1", + ), ) + event_id = await svc.publish_event(event, key="u1") assert isinstance(event_id, str) and event_id stored = await repo.get_event(event_id) assert stored is not None and stored.event_id == event_id - - -@pytest.mark.asyncio -async def test_publish_execution_event(scope: AsyncContainer) -> None: - svc: KafkaEventService = await scope.get(KafkaEventService) - repo: EventRepository = await scope.get(EventRepository) - - event_id = await svc.publish_execution_event( - event_type=EventType.EXECUTION_QUEUED, - execution_id="exec1", - status=ExecutionStatus.QUEUED, - metadata=None, - error_message=None, - ) - assert isinstance(event_id, str) and event_id - assert await repo.get_event(event_id) is not None - - -@pytest.mark.asyncio -async def test_publish_pod_event_and_without_metadata(scope: AsyncContainer) -> None: - svc: KafkaEventService = await scope.get(KafkaEventService) - repo: EventRepository = await scope.get(EventRepository) - - # Pod event - eid = await svc.publish_pod_event( - event_type=EventType.POD_CREATED, - pod_name="executor-pod1", - execution_id="exec1", - namespace="ns", - status="pending", - metadata=None, - ) - assert isinstance(eid, str) - assert await repo.get_event(eid) is not None - - # Generic event without metadata - eid2 = await svc.publish_event( - event_type=EventType.USER_LOGGED_IN, - payload={"user_id": "u2", "login_method": "password"}, - aggregate_id="u2", - metadata=None, - ) - assert isinstance(eid2, str) - assert await repo.get_event(eid2) is not None diff --git a/backend/tests/e2e/services/execution/test_execution_service.py b/backend/tests/e2e/services/execution/test_execution_service.py index 8e64963b..8fd44ada 100644 --- a/backend/tests/e2e/services/execution/test_execution_service.py +++ b/backend/tests/e2e/services/execution/test_execution_service.py @@ -57,8 +57,7 @@ async def test_execute_simple_script(self, scope: AsyncContainer) -> None: result = await svc.execute_script( script="print('hello world')", user_id=user_id, - client_ip="127.0.0.1", - user_agent="pytest", + lang="python", lang_version="3.11", ) @@ -83,11 +82,9 @@ async def test_execute_script_with_custom_timeout( result = await svc.execute_script( script="import time; time.sleep(1); print('done')", user_id=user_id, - client_ip="127.0.0.1", - user_agent="pytest", + lang="python", lang_version="3.11", - timeout_override=30, ) assert result.execution_id is not None @@ -108,8 +105,7 @@ async def test_execute_script_returns_unique_ids( result1 = await svc.execute_script( script="print(1)", user_id=user_id, - client_ip="127.0.0.1", - user_agent="pytest", + lang="python", lang_version="3.11", ) @@ -117,8 +113,7 @@ async def test_execute_script_returns_unique_ids( result2 = await svc.execute_script( script="print(2)", user_id=user_id, - client_ip="127.0.0.1", - user_agent="pytest", + lang="python", lang_version="3.11", ) @@ -139,8 +134,7 @@ async def test_get_execution_result(self, scope: AsyncContainer) -> None: exec_result = await svc.execute_script( script="print('test')", user_id=user_id, - client_ip="127.0.0.1", - user_agent="pytest", + lang="python", lang_version="3.11", ) @@ -176,8 +170,7 @@ async def test_get_execution_events(self, scope: AsyncContainer) -> None: exec_result = await exec_svc.execute_script( script="print('events test')", user_id=user_id, - client_ip="127.0.0.1", - user_agent="pytest", + lang="python", lang_version="3.11", ) @@ -203,8 +196,7 @@ async def test_get_execution_events_with_filter( exec_result = await exec_svc.execute_script( script="print('filter test')", user_id=user_id, - client_ip="127.0.0.1", - user_agent="pytest", + lang="python", lang_version="3.11", ) @@ -233,8 +225,7 @@ async def test_get_user_executions(self, scope: AsyncContainer) -> None: await svc.execute_script( script=f"print({i})", user_id=user_id, - client_ip="127.0.0.1", - user_agent="pytest", + lang="python", lang_version="3.11", ) @@ -260,8 +251,7 @@ async def test_get_user_executions_pagination( await svc.execute_script( script=f"print({i})", user_id=user_id, - client_ip="127.0.0.1", - user_agent="pytest", + lang="python", lang_version="3.11", ) @@ -290,8 +280,7 @@ async def test_get_user_executions_filter_by_language( await svc.execute_script( script="print('python')", user_id=user_id, - client_ip="127.0.0.1", - user_agent="pytest", + lang="python", lang_version="3.11", ) @@ -322,8 +311,7 @@ async def test_count_user_executions(self, scope: AsyncContainer) -> None: await svc.execute_script( script="print('count')", user_id=user_id, - client_ip="127.0.0.1", - user_agent="pytest", + lang="python", lang_version="3.11", ) @@ -347,8 +335,7 @@ async def test_delete_execution(self, scope: AsyncContainer) -> None: exec_result = await svc.execute_script( script="print('to delete')", user_id=user_id, - client_ip="127.0.0.1", - user_agent="pytest", + lang="python", lang_version="3.11", ) @@ -386,8 +373,7 @@ async def test_get_execution_stats(self, scope: AsyncContainer) -> None: await svc.execute_script( script=f"print({i})", user_id=user_id, - client_ip="127.0.0.1", - user_agent="pytest", + lang="python", lang_version="3.11", ) diff --git a/backend/tests/e2e/services/saga/test_saga_service.py b/backend/tests/e2e/services/saga/test_saga_service.py index 2f2e8f4c..2e7a3c89 100644 --- a/backend/tests/e2e/services/saga/test_saga_service.py +++ b/backend/tests/e2e/services/saga/test_saga_service.py @@ -216,8 +216,7 @@ async def test_admin_has_access_to_any_execution( exec_result = await exec_svc.execute_script( script="print('admin access test')", user_id="other_user", - client_ip="127.0.0.1", - user_agent="pytest", + lang="python", lang_version="3.11", ) @@ -240,8 +239,7 @@ async def test_user_has_access_to_own_execution( exec_result = await exec_svc.execute_script( script="print('owner access test')", user_id=user_id, - client_ip="127.0.0.1", - user_agent="pytest", + lang="python", lang_version="3.11", ) @@ -263,8 +261,7 @@ async def test_user_no_access_to_other_execution( exec_result = await exec_svc.execute_script( script="print('no access test')", user_id="owner_user", - client_ip="127.0.0.1", - user_agent="pytest", + lang="python", lang_version="3.11", ) @@ -301,8 +298,7 @@ async def test_get_execution_sagas_access_denied( exec_result = await exec_svc.execute_script( script="print('saga access denied')", user_id="owner_user", - client_ip="127.0.0.1", - user_agent="pytest", + lang="python", lang_version="3.11", ) @@ -323,8 +319,7 @@ async def test_get_execution_sagas_owner_access( exec_result = await exec_svc.execute_script( script="print('owner sagas')", user_id=user_id, - client_ip="127.0.0.1", - user_agent="pytest", + lang="python", lang_version="3.11", ) diff --git a/backend/tests/e2e/test_events_routes.py b/backend/tests/e2e/test_events_routes.py deleted file mode 100644 index cb9be1f2..00000000 --- a/backend/tests/e2e/test_events_routes.py +++ /dev/null @@ -1,436 +0,0 @@ -import pytest -from app.domain.enums import EventType -from app.domain.events import DomainEvent, ExecutionRequestedEvent -from app.schemas_pydantic.events import ( - DeleteEventResponse, - EventListResponse, - EventStatistics, - PublishEventResponse, - ReplayAggregateResponse, -) -from app.schemas_pydantic.execution import ExecutionResponse -from httpx import AsyncClient -from pydantic import TypeAdapter - -DomainEventAdapter: TypeAdapter[DomainEvent] = TypeAdapter(DomainEvent) - -pytestmark = [pytest.mark.e2e, pytest.mark.kafka] - -# Events are stored in MongoDB by the producer BEFORE publishing to Kafka. -# By the time the created_execution fixture returns, EXECUTION_REQUESTED is -# already in the event store. No waiting needed for any of these tests. - - -class TestExecutionEvents: - """Tests for GET /api/v1/events/executions/{execution_id}/events.""" - - @pytest.mark.asyncio - async def test_get_execution_events( - self, test_user: AsyncClient, created_execution: ExecutionResponse - ) -> None: - """Get events for a specific execution.""" - response = await test_user.get( - f"/api/v1/events/executions/{created_execution.execution_id}/events", - params={"limit": 10}, - ) - - assert response.status_code == 200 - result = EventListResponse.model_validate(response.json()) - assert result.limit == 10 - assert result.skip == 0 - assert isinstance(result.has_more, bool) - # EXECUTION_REQUESTED is stored synchronously by the API handler. - # Async workers may add more events (SAGA_STARTED, etc.). - requested = [e for e in result.events if isinstance(e, ExecutionRequestedEvent)] - assert len(requested) == 1 - assert requested[0].execution_id == created_execution.execution_id - - @pytest.mark.asyncio - async def test_get_execution_events_pagination( - self, test_user: AsyncClient, created_execution: ExecutionResponse - ) -> None: - """Pagination works for execution events.""" - response = await test_user.get( - f"/api/v1/events/executions/{created_execution.execution_id}/events", - params={"limit": 5, "skip": 0}, - ) - - assert response.status_code == 200 - result = EventListResponse.model_validate(response.json()) - assert result.limit == 5 - assert result.skip == 0 - assert len(result.events) <= 5 - assert result.total >= 1 - - @pytest.mark.asyncio - async def test_get_execution_events_access_denied( - self, test_user: AsyncClient, another_user: AsyncClient, - created_execution: ExecutionResponse - ) -> None: - """Cannot access another user's execution events.""" - response = await another_user.get( - f"/api/v1/events/executions/{created_execution.execution_id}/events" - ) - - assert response.status_code == 403 - - -class TestUserEvents: - """Tests for GET /api/v1/events/user.""" - - @pytest.mark.asyncio - async def test_get_user_events( - self, test_user: AsyncClient, created_execution: ExecutionResponse - ) -> None: - """Get events for current user.""" - response = await test_user.get("/api/v1/events/user", params={"limit": 10}) - - assert response.status_code == 200 - result = EventListResponse.model_validate(response.json()) - assert result.total >= 1 - assert len(result.events) >= 1 - assert len(result.events) <= min(result.total, 10) - - @pytest.mark.asyncio - async def test_get_user_events_with_filters( - self, test_user: AsyncClient, created_execution: ExecutionResponse - ) -> None: - """Filter user events by event types.""" - response = await test_user.get( - "/api/v1/events/user", - params={ - "event_types": [EventType.EXECUTION_REQUESTED], - "limit": 10, - }, - ) - - assert response.status_code == 200 - result = EventListResponse.model_validate(response.json()) - assert result.limit == 10 - for e in result.events: - assert e.event_type == EventType.EXECUTION_REQUESTED - - @pytest.mark.asyncio - async def test_get_user_events_unauthenticated( - self, client: AsyncClient - ) -> None: - """Unauthenticated request returns 401.""" - response = await client.get("/api/v1/events/user") - assert response.status_code == 401 - - -class TestQueryEvents: - """Tests for POST /api/v1/events/query.""" - - @pytest.mark.asyncio - async def test_query_events( - self, test_user: AsyncClient, created_execution: ExecutionResponse - ) -> None: - """Query events with filters.""" - response = await test_user.post( - "/api/v1/events/query", - json={ - "event_types": [EventType.EXECUTION_REQUESTED], - "limit": 50, - "skip": 0, - }, - ) - - assert response.status_code == 200 - result = EventListResponse.model_validate(response.json()) - assert result.limit == 50 - assert len(result.events) >= 1 - for e in result.events: - assert e.event_type == EventType.EXECUTION_REQUESTED - - @pytest.mark.asyncio - async def test_query_events_with_correlation_id( - self, test_user: AsyncClient - ) -> None: - """Query events by correlation ID returns empty for nonexistent.""" - response = await test_user.post( - "/api/v1/events/query", - json={ - "correlation_id": "nonexistent-correlation-123", - "limit": 100, - }, - ) - - assert response.status_code == 200 - result = EventListResponse.model_validate(response.json()) - assert isinstance(result.events, list) - assert result.total == 0 - - -class TestCorrelationEvents: - """Tests for GET /api/v1/events/correlation/{correlation_id}.""" - - @pytest.mark.asyncio - async def test_get_events_by_nonexistent_correlation( - self, test_user: AsyncClient - ) -> None: - """Get events by nonexistent correlation ID returns empty.""" - response = await test_user.get( - "/api/v1/events/correlation/nonexistent-correlation-xyz" - ) - - assert response.status_code == 200 - result = EventListResponse.model_validate(response.json()) - assert isinstance(result.events, list) - assert result.total == 0 - - -class TestCurrentRequestEvents: - """Tests for GET /api/v1/events/current-request.""" - - @pytest.mark.asyncio - async def test_get_current_request_events( - self, test_user: AsyncClient - ) -> None: - """Get events for current request correlation.""" - response = await test_user.get("/api/v1/events/current-request") - - assert response.status_code == 200 - result = EventListResponse.model_validate(response.json()) - assert isinstance(result.events, list) - - -class TestEventStatistics: - """Tests for GET /api/v1/events/statistics.""" - - @pytest.mark.asyncio - async def test_get_event_statistics( - self, test_user: AsyncClient, created_execution: ExecutionResponse - ) -> None: - """Get event statistics for current user.""" - response = await test_user.get("/api/v1/events/statistics") - - assert response.status_code == 200 - stats = EventStatistics.model_validate(response.json()) - - assert stats.total_events >= 1 - assert len(stats.events_by_type) >= 1 - assert len(stats.events_by_service) >= 1 - assert any(e.event_type == EventType.EXECUTION_REQUESTED for e in stats.events_by_type) - - @pytest.mark.asyncio - async def test_get_event_statistics_with_time_range( - self, test_user: AsyncClient, created_execution: ExecutionResponse - ) -> None: - """Get event statistics with time range.""" - response = await test_user.get( - "/api/v1/events/statistics", - params={ - "start_time": "2024-01-01T00:00:00Z", - "end_time": "2030-01-01T00:00:00Z", - }, - ) - - assert response.status_code == 200 - stats = EventStatistics.model_validate(response.json()) - assert stats.total_events >= 1 - assert len(stats.events_by_type) >= 1 - - -class TestSingleEvent: - """Tests for GET /api/v1/events/{event_id}.""" - - @pytest.mark.asyncio - async def test_get_event_not_found(self, test_user: AsyncClient) -> None: - """Get nonexistent event returns 404.""" - response = await test_user.get("/api/v1/events/nonexistent-event-id") - - assert response.status_code == 404 - - @pytest.mark.asyncio - async def test_get_event_by_id( - self, test_user: AsyncClient, created_execution: ExecutionResponse - ) -> None: - """Get single event by ID.""" - events_resp = await test_user.get("/api/v1/events/user", params={"limit": 10}) - assert events_resp.status_code == 200 - events_result = EventListResponse.model_validate(events_resp.json()) - assert events_result.events - event_id = events_result.events[0].event_id - - response = await test_user.get(f"/api/v1/events/{event_id}") - - assert response.status_code == 200 - event = DomainEventAdapter.validate_python(response.json()) - assert event.event_id == event_id - - -class TestPublishEvent: - """Tests for POST /api/v1/events/publish (admin only).""" - - @pytest.mark.asyncio - async def test_publish_event_admin_only( - self, test_admin: AsyncClient - ) -> None: - """Admin can publish custom events.""" - response = await test_admin.post( - "/api/v1/events/publish", - json={ - "event_type": EventType.SYSTEM_ERROR, - "payload": { - "error_type": "test_error", - "message": "Test error message", - "service_name": "test-service", - }, - "aggregate_id": "test-aggregate-123", - }, - ) - - assert response.status_code == 200 - result = PublishEventResponse.model_validate(response.json()) - assert result.event_id is not None - assert result.status == "published" - assert result.timestamp is not None - - @pytest.mark.asyncio - async def test_publish_event_forbidden_for_user( - self, test_user: AsyncClient - ) -> None: - """Regular user cannot publish events.""" - response = await test_user.post( - "/api/v1/events/publish", - json={ - "event_type": EventType.SYSTEM_ERROR, - "payload": { - "error_type": "test_error", - "message": "Test error message", - "service_name": "test-service", - }, - }, - ) - - assert response.status_code == 403 - - -class TestDeleteEvent: - """Tests for DELETE /api/v1/events/{event_id} (admin only).""" - - @pytest.mark.asyncio - async def test_delete_event_admin_only( - self, test_admin: AsyncClient - ) -> None: - """Admin can delete events.""" - publish_response = await test_admin.post( - "/api/v1/events/publish", - json={ - "event_type": EventType.SYSTEM_ERROR, - "payload": { - "error_type": "test_delete_error", - "message": "Event to be deleted", - "service_name": "test-service", - }, - "aggregate_id": "delete-test-agg", - }, - ) - - assert publish_response.status_code == 200 - event_id = publish_response.json()["event_id"] - - delete_response = await test_admin.delete( - f"/api/v1/events/{event_id}" - ) - - assert delete_response.status_code == 200 - result = DeleteEventResponse.model_validate(delete_response.json()) - assert result.event_id == event_id - assert "deleted" in result.message.lower() - - # Verify event is actually gone - get_resp = await test_admin.get(f"/api/v1/events/{event_id}") - assert get_resp.status_code == 404 - - @pytest.mark.asyncio - async def test_delete_event_forbidden_for_user( - self, test_user: AsyncClient - ) -> None: - """Regular user cannot delete events.""" - response = await test_user.delete("/api/v1/events/some-event-id") - - assert response.status_code == 403 - - -class TestReplayAggregateEvents: - """Tests for POST /api/v1/events/replay/{aggregate_id}.""" - - @pytest.mark.asyncio - async def test_replay_events_dry_run( - self, test_admin: AsyncClient, created_execution_admin: ExecutionResponse - ) -> None: - """Replay events in dry run mode.""" - response = await test_admin.post( - f"/api/v1/events/replay/{created_execution_admin.execution_id}", - params={"dry_run": True}, - ) - - assert response.status_code == 200 - result = ReplayAggregateResponse.model_validate(response.json()) - assert result.dry_run is True - assert result.aggregate_id == created_execution_admin.execution_id - assert result.event_count is not None and result.event_count >= 1 - assert result.event_types is not None and len(result.event_types) >= 1 - - @pytest.mark.asyncio - async def test_replay_events_not_found( - self, test_admin: AsyncClient - ) -> None: - """Replay nonexistent aggregate returns 404.""" - response = await test_admin.post( - "/api/v1/events/replay/nonexistent-aggregate", - params={"dry_run": True}, - ) - - assert response.status_code == 404 - - @pytest.mark.asyncio - async def test_replay_events_forbidden_for_user( - self, test_user: AsyncClient - ) -> None: - """Regular user cannot replay events.""" - response = await test_user.post( - "/api/v1/events/replay/some-aggregate", - params={"dry_run": True}, - ) - - assert response.status_code == 403 - - -class TestEventIsolation: - """Tests for event access isolation between users.""" - - @pytest.mark.asyncio - async def test_user_cannot_access_other_users_events( - self, - test_user: AsyncClient, - another_user: AsyncClient, - created_execution: ExecutionResponse, - ) -> None: - """User cannot access another user's execution events.""" - response = await another_user.get( - f"/api/v1/events/executions/{created_execution.execution_id}/events" - ) - - assert response.status_code == 403 - - @pytest.mark.asyncio - async def test_user_events_only_shows_own_events( - self, - test_user: AsyncClient, - another_user: AsyncClient, - created_execution: ExecutionResponse, - ) -> None: - """User events endpoint only returns user's own events.""" - events_resp = await test_user.get("/api/v1/events/user") - assert events_resp.status_code == 200 - user_event_ids = {e.event_id for e in EventListResponse.model_validate(events_resp.json()).events} - - another_response = await another_user.get("/api/v1/events/user") - assert another_response.status_code == 200 - another_event_ids = {e.event_id for e in EventListResponse.model_validate(another_response.json()).events} - - assert len(user_event_ids) >= 1, "test_user should have events from created_execution" - assert user_event_ids.isdisjoint(another_event_ids) diff --git a/backend/tests/e2e/test_execution_routes.py b/backend/tests/e2e/test_execution_routes.py index f73979d9..d83bfd8c 100644 --- a/backend/tests/e2e/test_execution_routes.py +++ b/backend/tests/e2e/test_execution_routes.py @@ -20,7 +20,6 @@ ExecutionResponse, ExecutionResult, ResourceLimits, - RetryExecutionRequest, ) from httpx import AsyncClient from pydantic import TypeAdapter @@ -250,10 +249,8 @@ async def test_retry_completed_execution( request = ExecutionRequest(script="print('original')", lang="python", lang_version="3.11") original, _ = await submit_and_wait(test_user, event_waiter, request) - retry_req = RetryExecutionRequest() retry_response = await test_user.post( f"/api/v1/executions/{original.execution_id}/retry", - json=retry_req.model_dump(), ) assert retry_response.status_code == 200 @@ -279,10 +276,8 @@ async def test_retry_running_execution_fails( exec_response = ExecutionResponse.model_validate(response.json()) - retry_req = RetryExecutionRequest() retry_response = await test_user.post( f"/api/v1/executions/{exec_response.execution_id}/retry", - json=retry_req.model_dump(), ) assert retry_response.status_code == 400 @@ -296,10 +291,8 @@ async def test_retry_other_users_execution_forbidden( request = ExecutionRequest(script="print('owned')", lang="python", lang_version="3.11") original, _ = await submit_and_wait(test_user, event_waiter, request) - retry_req = RetryExecutionRequest() retry_response = await another_user.post( f"/api/v1/executions/{original.execution_id}/retry", - json=retry_req.model_dump(), ) assert retry_response.status_code == 403 diff --git a/backend/tests/load/monkey_runner.py b/backend/tests/load/monkey_runner.py index e44d9586..a116a9e1 100644 --- a/backend/tests/load/monkey_runner.py +++ b/backend/tests/load/monkey_runner.py @@ -41,13 +41,10 @@ def build_monkey_catalog(cfg: LoadConfig) -> list[tuple[str, str]]: ("POST", "/execute"), ("GET", "/k8s-limits"), ("GET", "/example-scripts"), - ("GET", "/events/types/list"), ("GET", "/notifications"), ("POST", "/notifications/mark-all-read"), ("GET", "/user/settings/"), ("PUT", "/user/settings/theme"), - ("GET", "/events/user"), - ("GET", "/events/statistics"), # Wrong/unsupported paths to test 404 handling ("GET", "/nope"), ("POST", "/does-not-exist"), diff --git a/backend/tests/unit/events/test_metadata_model.py b/backend/tests/unit/events/test_metadata_model.py index a99ac70e..aae3644f 100644 --- a/backend/tests/unit/events/test_metadata_model.py +++ b/backend/tests/unit/events/test_metadata_model.py @@ -5,7 +5,7 @@ def test_metadata_creation() -> None: m = EventMetadata(service_name="svc", service_version="1") assert m.service_name == "svc" assert m.service_version == "1" - assert m.correlation_id # auto-generated + assert m.correlation_id == "" # empty until filled by publish_event def test_metadata_with_user() -> None: diff --git a/backend/tests/unit/schemas_pydantic/test_events_schemas.py b/backend/tests/unit/schemas_pydantic/test_events_schemas.py deleted file mode 100644 index b2fb4b9e..00000000 --- a/backend/tests/unit/schemas_pydantic/test_events_schemas.py +++ /dev/null @@ -1,17 +0,0 @@ -import pytest -from app.domain.enums import SortOrder -from app.schemas_pydantic.events import EventFilterRequest - - -def test_event_filter_request_sort_validator_accepts_allowed_fields() -> None: - req = EventFilterRequest(sort_by="timestamp", sort_order=SortOrder.DESC) - assert req.sort_by == "timestamp" - - for field in ("event_type", "aggregate_id", "correlation_id", "stored_at"): - req2 = EventFilterRequest(sort_by=field) - assert req2.sort_by == field - - -def test_event_filter_request_sort_validator_rejects_invalid() -> None: - with pytest.raises(ValueError): - EventFilterRequest(sort_by="not-a-field") diff --git a/docs/reference/openapi.json b/docs/reference/openapi.json index 87611a9c..16ebea1a 100644 --- a/docs/reference/openapi.json +++ b/docs/reference/openapi.json @@ -388,16 +388,6 @@ } } ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RetryExecutionRequest" - } - } - } - }, "responses": { "200": { "description": "Successful Response", @@ -2001,58 +1991,70 @@ } } }, - "/api/v1/events/executions/{execution_id}/events": { - "get": { + "/api/v1/admin/events/browse": { + "post": { "tags": [ - "events" + "admin-events" ], - "summary": "Get Execution Events", - "description": "Get events for a specific execution.", - "operationId": "get_execution_events_api_v1_events_executions__execution_id__events_get", - "parameters": [ - { - "name": "execution_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Execution Id" + "summary": "Browse Events", + "description": "Browse events with filtering, sorting, and pagination.", + "operationId": "browse_events_api_v1_admin_events_browse_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EventBrowseRequest" + } } }, - { - "name": "include_system_events", - "in": "query", - "required": false, - "schema": { - "type": "boolean", - "description": "Include system-generated events", - "default": false, - "title": "Include System Events" - }, - "description": "Include system-generated events" - }, - { - "name": "limit", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "maximum": 1000, - "minimum": 1, - "default": 100, - "title": "Limit" + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EventBrowseResponse" + } + } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/api/v1/admin/events/stats": { + "get": { + "tags": [ + "admin-events" + ], + "summary": "Get Event Stats", + "description": "Get event statistics for a given lookback window.", + "operationId": "get_event_stats_api_v1_admin_events_stats_get", + "parameters": [ { - "name": "skip", + "name": "hours", "in": "query", "required": false, "schema": { "type": "integer", - "minimum": 0, - "default": 0, - "title": "Skip" - } + "maximum": 168, + "minimum": 1, + "description": "Lookback window in hours (max 168)", + "default": 24, + "title": "Hours" + }, + "description": "Lookback window in hours (max 168)" } ], "responses": { @@ -2061,17 +2063,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EventListResponse" - } - } - } - }, - "403": { - "description": "Not the owner of this execution", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/EventStatsResponse" } } } @@ -2089,14 +2081,14 @@ } } }, - "/api/v1/events/user": { + "/api/v1/admin/events/export/csv": { "get": { "tags": [ - "events" + "admin-events" ], - "summary": "Get User Events", - "description": "Get events for the current user.", - "operationId": "get_user_events_api_v1_events_user_get", + "summary": "Export Events Csv", + "description": "Export filtered events as a downloadable CSV file.", + "operationId": "export_events_csv_api_v1_admin_events_export_csv_get", "parameters": [ { "name": "event_types", @@ -2114,10 +2106,10 @@ "type": "null" } ], - "description": "Filter by event types", + "description": "Event types (repeat param for multiple)", "title": "Event Types" }, - "description": "Filter by event types" + "description": "Event types (repeat param for multiple)" }, { "name": "start_time", @@ -2133,10 +2125,10 @@ "type": "null" } ], - "description": "Filter events after this time", + "description": "Start time", "title": "Start Time" }, - "description": "Filter events after this time" + "description": "Start time" }, { "name": "end_time", @@ -2152,10 +2144,10 @@ "type": "null" } ], - "description": "Filter events before this time", + "description": "End time", "title": "End Time" }, - "description": "Filter events before this time" + "description": "End time" }, { "name": "limit", @@ -2163,95 +2155,19 @@ "required": false, "schema": { "type": "integer", - "maximum": 1000, + "maximum": 50000, "minimum": 1, - "default": 100, + "default": 10000, "title": "Limit" } - }, - { - "name": "skip", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "minimum": 0, - "default": 0, - "title": "Skip" - } - }, - { - "name": "sort_order", - "in": "query", - "required": false, - "schema": { - "$ref": "#/components/schemas/SortOrder", - "description": "Sort order by timestamp", - "default": "desc" - }, - "description": "Sort order by timestamp" - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EventListResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } } - } - } - }, - "/api/v1/events/query": { - "post": { - "tags": [ - "events" ], - "summary": "Query Events", - "description": "Query events with advanced filters.", - "operationId": "query_events_api_v1_events_query_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EventFilterRequest" - } - } - }, - "required": true - }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/EventListResponse" - } - } - } - }, - "403": { - "description": "Cannot query other users' events", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": {} } } }, @@ -2268,150 +2184,108 @@ } } }, - "/api/v1/events/correlation/{correlation_id}": { + "/api/v1/admin/events/export/json": { "get": { "tags": [ - "events" + "admin-events" ], - "summary": "Get Events By Correlation", - "description": "Get all events sharing a correlation ID.", - "operationId": "get_events_by_correlation_api_v1_events_correlation__correlation_id__get", + "summary": "Export Events Json", + "description": "Export events as JSON with comprehensive filtering.", + "operationId": "export_events_json_api_v1_admin_events_export_json_get", "parameters": [ { - "name": "correlation_id", - "in": "path", - "required": true, + "name": "event_types", + "in": "query", + "required": false, "schema": { - "type": "string", - "title": "Correlation Id" - } + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/components/schemas/EventType" + } + }, + { + "type": "null" + } + ], + "description": "Event types (repeat param for multiple)", + "title": "Event Types" + }, + "description": "Event types (repeat param for multiple)" }, { - "name": "include_all_users", + "name": "aggregate_id", "in": "query", "required": false, "schema": { - "type": "boolean", - "description": "Include events from all users (admin only)", - "default": false, - "title": "Include All Users" + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Aggregate ID filter", + "title": "Aggregate Id" }, - "description": "Include events from all users (admin only)" + "description": "Aggregate ID filter" }, { - "name": "limit", + "name": "correlation_id", "in": "query", "required": false, "schema": { - "type": "integer", - "maximum": 1000, - "minimum": 1, - "default": 100, - "title": "Limit" - } + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Correlation ID filter", + "title": "Correlation Id" + }, + "description": "Correlation ID filter" }, { - "name": "skip", + "name": "user_id", "in": "query", "required": false, "schema": { - "type": "integer", - "minimum": 0, - "default": 0, - "title": "Skip" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EventListResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" } - } - } - } - } - } - }, - "/api/v1/events/current-request": { - "get": { - "tags": [ - "events" - ], - "summary": "Get Current Request Events", - "description": "Get events associated with the current HTTP request's correlation ID.", - "operationId": "get_current_request_events_api_v1_events_current_request_get", - "parameters": [ - { - "name": "limit", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "maximum": 1000, - "minimum": 1, - "default": 100, - "title": "Limit" - } + ], + "description": "User ID filter", + "title": "User Id" + }, + "description": "User ID filter" }, { - "name": "skip", + "name": "service_name", "in": "query", "required": false, "schema": { - "type": "integer", - "minimum": 0, - "default": 0, - "title": "Skip" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EventListResponse" + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" } - } - } + ], + "description": "Service name filter", + "title": "Service Name" + }, + "description": "Service name filter" }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - } - } - }, - "/api/v1/events/statistics": { - "get": { - "tags": [ - "events" - ], - "summary": "Get Event Statistics", - "description": "Get aggregated event statistics for a time range.", - "operationId": "get_event_statistics_api_v1_events_statistics_get", - "parameters": [ { "name": "start_time", "in": "query", @@ -2426,10 +2300,10 @@ "type": "null" } ], - "description": "Start time for statistics (defaults to 24 hours ago)", + "description": "Start time", "title": "Start Time" }, - "description": "Start time for statistics (defaults to 24 hours ago)" + "description": "Start time" }, { "name": "end_time", @@ -2445,22 +2319,22 @@ "type": "null" } ], - "description": "End time for statistics (defaults to now)", + "description": "End time", "title": "End Time" }, - "description": "End time for statistics (defaults to now)" + "description": "End time" }, { - "name": "include_all_users", + "name": "limit", "in": "query", "required": false, "schema": { - "type": "boolean", - "description": "Include stats from all users (admin only)", - "default": false, - "title": "Include All Users" - }, - "description": "Include stats from all users (admin only)" + "type": "integer", + "maximum": 50000, + "minimum": 1, + "default": 10000, + "title": "Limit" + } } ], "responses": { @@ -2468,9 +2342,7 @@ "description": "Successful Response", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/EventStatistics" - } + "schema": {} } } }, @@ -2487,14 +2359,14 @@ } } }, - "/api/v1/events/{event_id}": { + "/api/v1/admin/events/{event_id}": { "get": { "tags": [ - "events" + "admin-events" ], - "summary": "Get Event", - "description": "Get a specific event by ID.", - "operationId": "get_event_api_v1_events__event_id__get", + "summary": "Get Event Detail", + "description": "Get detailed information about a single event, including related events and timeline.", + "operationId": "get_event_detail_api_v1_admin_events__event_id__get", "parameters": [ { "name": "event_id", @@ -2512,242 +2384,7 @@ "content": { "application/json": { "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/ExecutionRequestedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionAcceptedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionQueuedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionStartedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionRunningEvent" - }, - { - "$ref": "#/components/schemas/ExecutionCompletedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionFailedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionTimeoutEvent" - }, - { - "$ref": "#/components/schemas/ExecutionCancelledEvent" - }, - { - "$ref": "#/components/schemas/PodCreatedEvent" - }, - { - "$ref": "#/components/schemas/PodScheduledEvent" - }, - { - "$ref": "#/components/schemas/PodRunningEvent" - }, - { - "$ref": "#/components/schemas/PodSucceededEvent" - }, - { - "$ref": "#/components/schemas/PodFailedEvent" - }, - { - "$ref": "#/components/schemas/PodTerminatedEvent" - }, - { - "$ref": "#/components/schemas/PodDeletedEvent" - }, - { - "$ref": "#/components/schemas/ResultStoredEvent" - }, - { - "$ref": "#/components/schemas/ResultFailedEvent" - }, - { - "$ref": "#/components/schemas/UserSettingsUpdatedEvent" - }, - { - "$ref": "#/components/schemas/UserRegisteredEvent" - }, - { - "$ref": "#/components/schemas/UserLoginEvent" - }, - { - "$ref": "#/components/schemas/UserLoggedInEvent" - }, - { - "$ref": "#/components/schemas/UserLoggedOutEvent" - }, - { - "$ref": "#/components/schemas/UserUpdatedEvent" - }, - { - "$ref": "#/components/schemas/UserDeletedEvent" - }, - { - "$ref": "#/components/schemas/NotificationCreatedEvent" - }, - { - "$ref": "#/components/schemas/NotificationSentEvent" - }, - { - "$ref": "#/components/schemas/NotificationDeliveredEvent" - }, - { - "$ref": "#/components/schemas/NotificationFailedEvent" - }, - { - "$ref": "#/components/schemas/NotificationReadEvent" - }, - { - "$ref": "#/components/schemas/NotificationAllReadEvent" - }, - { - "$ref": "#/components/schemas/NotificationClickedEvent" - }, - { - "$ref": "#/components/schemas/NotificationPreferencesUpdatedEvent" - }, - { - "$ref": "#/components/schemas/SagaStartedEvent" - }, - { - "$ref": "#/components/schemas/SagaCompletedEvent" - }, - { - "$ref": "#/components/schemas/SagaFailedEvent" - }, - { - "$ref": "#/components/schemas/SagaCancelledEvent" - }, - { - "$ref": "#/components/schemas/SagaCompensatingEvent" - }, - { - "$ref": "#/components/schemas/SagaCompensatedEvent" - }, - { - "$ref": "#/components/schemas/CreatePodCommandEvent" - }, - { - "$ref": "#/components/schemas/DeletePodCommandEvent" - }, - { - "$ref": "#/components/schemas/AllocateResourcesCommandEvent" - }, - { - "$ref": "#/components/schemas/ReleaseResourcesCommandEvent" - }, - { - "$ref": "#/components/schemas/ScriptSavedEvent" - }, - { - "$ref": "#/components/schemas/ScriptDeletedEvent" - }, - { - "$ref": "#/components/schemas/ScriptSharedEvent" - }, - { - "$ref": "#/components/schemas/SecurityViolationEvent" - }, - { - "$ref": "#/components/schemas/RateLimitExceededEvent" - }, - { - "$ref": "#/components/schemas/AuthFailedEvent" - }, - { - "$ref": "#/components/schemas/ResourceLimitExceededEvent" - }, - { - "$ref": "#/components/schemas/QuotaExceededEvent" - }, - { - "$ref": "#/components/schemas/SystemErrorEvent" - }, - { - "$ref": "#/components/schemas/ServiceUnhealthyEvent" - }, - { - "$ref": "#/components/schemas/ServiceRecoveredEvent" - }, - { - "$ref": "#/components/schemas/DLQMessageReceivedEvent" - }, - { - "$ref": "#/components/schemas/DLQMessageRetriedEvent" - }, - { - "$ref": "#/components/schemas/DLQMessageDiscardedEvent" - } - ], - "discriminator": { - "propertyName": "event_type", - "mapping": { - "execution_requested": "#/components/schemas/ExecutionRequestedEvent", - "execution_accepted": "#/components/schemas/ExecutionAcceptedEvent", - "execution_queued": "#/components/schemas/ExecutionQueuedEvent", - "execution_started": "#/components/schemas/ExecutionStartedEvent", - "execution_running": "#/components/schemas/ExecutionRunningEvent", - "execution_completed": "#/components/schemas/ExecutionCompletedEvent", - "execution_failed": "#/components/schemas/ExecutionFailedEvent", - "execution_timeout": "#/components/schemas/ExecutionTimeoutEvent", - "execution_cancelled": "#/components/schemas/ExecutionCancelledEvent", - "pod_created": "#/components/schemas/PodCreatedEvent", - "pod_scheduled": "#/components/schemas/PodScheduledEvent", - "pod_running": "#/components/schemas/PodRunningEvent", - "pod_succeeded": "#/components/schemas/PodSucceededEvent", - "pod_failed": "#/components/schemas/PodFailedEvent", - "pod_terminated": "#/components/schemas/PodTerminatedEvent", - "pod_deleted": "#/components/schemas/PodDeletedEvent", - "result_stored": "#/components/schemas/ResultStoredEvent", - "result_failed": "#/components/schemas/ResultFailedEvent", - "user_settings_updated": "#/components/schemas/UserSettingsUpdatedEvent", - "user_registered": "#/components/schemas/UserRegisteredEvent", - "user_login": "#/components/schemas/UserLoginEvent", - "user_logged_in": "#/components/schemas/UserLoggedInEvent", - "user_logged_out": "#/components/schemas/UserLoggedOutEvent", - "user_updated": "#/components/schemas/UserUpdatedEvent", - "user_deleted": "#/components/schemas/UserDeletedEvent", - "notification_created": "#/components/schemas/NotificationCreatedEvent", - "notification_sent": "#/components/schemas/NotificationSentEvent", - "notification_delivered": "#/components/schemas/NotificationDeliveredEvent", - "notification_failed": "#/components/schemas/NotificationFailedEvent", - "notification_read": "#/components/schemas/NotificationReadEvent", - "notification_all_read": "#/components/schemas/NotificationAllReadEvent", - "notification_clicked": "#/components/schemas/NotificationClickedEvent", - "notification_preferences_updated": "#/components/schemas/NotificationPreferencesUpdatedEvent", - "saga_started": "#/components/schemas/SagaStartedEvent", - "saga_completed": "#/components/schemas/SagaCompletedEvent", - "saga_failed": "#/components/schemas/SagaFailedEvent", - "saga_cancelled": "#/components/schemas/SagaCancelledEvent", - "saga_compensating": "#/components/schemas/SagaCompensatingEvent", - "saga_compensated": "#/components/schemas/SagaCompensatedEvent", - "create_pod_command": "#/components/schemas/CreatePodCommandEvent", - "delete_pod_command": "#/components/schemas/DeletePodCommandEvent", - "allocate_resources_command": "#/components/schemas/AllocateResourcesCommandEvent", - "release_resources_command": "#/components/schemas/ReleaseResourcesCommandEvent", - "script_saved": "#/components/schemas/ScriptSavedEvent", - "script_deleted": "#/components/schemas/ScriptDeletedEvent", - "script_shared": "#/components/schemas/ScriptSharedEvent", - "security_violation": "#/components/schemas/SecurityViolationEvent", - "rate_limit_exceeded": "#/components/schemas/RateLimitExceededEvent", - "auth_failed": "#/components/schemas/AuthFailedEvent", - "resource_limit_exceeded": "#/components/schemas/ResourceLimitExceededEvent", - "quota_exceeded": "#/components/schemas/QuotaExceededEvent", - "system_error": "#/components/schemas/SystemErrorEvent", - "service_unhealthy": "#/components/schemas/ServiceUnhealthyEvent", - "service_recovered": "#/components/schemas/ServiceRecoveredEvent", - "dlq_message_received": "#/components/schemas/DLQMessageReceivedEvent", - "dlq_message_retried": "#/components/schemas/DLQMessageRetriedEvent", - "dlq_message_discarded": "#/components/schemas/DLQMessageDiscardedEvent" - } - }, - "title": "Response Get Event Api V1 Events Event Id Get" + "$ref": "#/components/schemas/EventDetailResponse" } } } @@ -2776,11 +2413,11 @@ }, "delete": { "tags": [ - "events" + "admin-events" ], "summary": "Delete Event", - "description": "Delete and archive an event (admin only).", - "operationId": "delete_event_api_v1_events__event_id__delete", + "description": "Delete and archive an event by ID.", + "operationId": "delete_event_api_v1_admin_events__event_id__delete", "parameters": [ { "name": "event_id", @@ -2798,7 +2435,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeleteEventResponse" + "$ref": "#/components/schemas/EventDeleteResponse" } } } @@ -2826,19 +2463,19 @@ } } }, - "/api/v1/events/publish": { + "/api/v1/admin/events/replay": { "post": { "tags": [ - "events" + "admin-events" ], - "summary": "Publish Custom Event", - "description": "Publish a custom event to Kafka (admin only).", - "operationId": "publish_custom_event_api_v1_events_publish_post", + "summary": "Replay Events", + "description": "Replay events by filter criteria, with optional dry-run mode.", + "operationId": "replay_events_api_v1_admin_events_replay_post", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PublishEventRequest" + "$ref": "#/components/schemas/EventReplayRequest" } } }, @@ -2850,17 +2487,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PublishEventResponse" + "$ref": "#/components/schemas/EventReplayResponse" + } + } + } + }, + "404": { + "description": "No events match the replay filter", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, "422": { - "description": "Validation Error", + "description": "Empty filter or too many events to replay", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -2868,53 +2515,23 @@ } } }, - "/api/v1/events/replay/{aggregate_id}": { - "post": { + "/api/v1/admin/events/replay/{session_id}/status": { + "get": { "tags": [ - "events" + "admin-events" ], - "summary": "Replay Aggregate Events", - "description": "Replay all events for an aggregate (admin only).", - "operationId": "replay_aggregate_events_api_v1_events_replay__aggregate_id__post", + "summary": "Get Replay Status", + "description": "Get the status and progress of a replay session.", + "operationId": "get_replay_status_api_v1_admin_events_replay__session_id__status_get", "parameters": [ { - "name": "aggregate_id", + "name": "session_id", "in": "path", "required": true, "schema": { "type": "string", - "title": "Aggregate Id" + "title": "Session Id" } - }, - { - "name": "target_service", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Service to replay events to", - "title": "Target Service" - }, - "description": "Service to replay events to" - }, - { - "name": "dry_run", - "in": "query", - "required": false, - "schema": { - "type": "boolean", - "description": "If true, only show what would be replayed", - "default": true, - "title": "Dry Run" - }, - "description": "If true, only show what would be replayed" } ], "responses": { @@ -2923,13 +2540,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ReplayAggregateResponse" + "$ref": "#/components/schemas/EventReplayStatusResponse" } } } }, "404": { - "description": "No events found for the aggregate", + "description": "Replay session not found", "content": { "application/json": { "schema": { @@ -2951,89 +2568,93 @@ } } }, - "/api/v1/admin/events/browse": { - "post": { + "/api/v1/admin/settings/": { + "get": { "tags": [ - "admin-events" + "admin", + "settings" ], - "summary": "Browse Events", - "description": "Browse events with filtering, sorting, and pagination.", - "operationId": "browse_events_api_v1_admin_events_browse_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EventBrowseRequest" - } - } - }, - "required": true - }, + "summary": "Get System Settings", + "description": "Get the current system-wide settings.", + "operationId": "get_system_settings_api_v1_admin_settings__get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EventBrowseResponse" + "$ref": "#/components/schemas/SystemSettingsSchema" } } } }, - "422": { - "description": "Validation Error", + "500": { + "description": "Failed to load system settings", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "$ref": "#/components/schemas/ErrorResponse" } } } } } - } - }, - "/api/v1/admin/events/stats": { - "get": { + }, + "put": { "tags": [ - "admin-events" - ], - "summary": "Get Event Stats", - "description": "Get event statistics for a given lookback window.", - "operationId": "get_event_stats_api_v1_admin_events_stats_get", - "parameters": [ - { - "name": "hours", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "maximum": 168, - "minimum": 1, - "description": "Lookback window in hours (max 168)", - "default": 24, - "title": "Hours" - }, - "description": "Lookback window in hours (max 168)" - } + "admin", + "settings" ], + "summary": "Update System Settings", + "description": "Replace system-wide settings.", + "operationId": "update_system_settings_api_v1_admin_settings__put", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemSettingsSchema" + } + } + }, + "required": true + }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EventStatsResponse" + "$ref": "#/components/schemas/SystemSettingsSchema" } } } }, - "422": { - "description": "Validation Error", + "400": { + "description": "Invalid settings values", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "422": { + "description": "Settings validation failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Failed to save settings", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -3041,93 +2662,168 @@ } } }, - "/api/v1/admin/events/export/csv": { + "/api/v1/admin/settings/reset": { + "post": { + "tags": [ + "admin", + "settings" + ], + "summary": "Reset System Settings", + "description": "Reset system-wide settings to defaults.", + "operationId": "reset_system_settings_api_v1_admin_settings_reset_post", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemSettingsSchema" + } + } + } + }, + "500": { + "description": "Failed to reset settings", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/api/v1/admin/users/": { "get": { "tags": [ - "admin-events" + "admin", + "users" ], - "summary": "Export Events Csv", - "description": "Export filtered events as a downloadable CSV file.", - "operationId": "export_events_csv_api_v1_admin_events_export_csv_get", + "summary": "List Users", + "description": "List all users with optional search and role filtering.", + "operationId": "list_users_api_v1_admin_users__get", "parameters": [ { - "name": "event_types", + "name": "limit", "in": "query", "required": false, "schema": { - "anyOf": [ - { - "type": "array", - "items": { - "$ref": "#/components/schemas/EventType" - } - }, - { - "type": "null" - } - ], - "description": "Event types (repeat param for multiple)", - "title": "Event Types" - }, - "description": "Event types (repeat param for multiple)" + "type": "integer", + "maximum": 1000, + "minimum": 1, + "default": 100, + "title": "Limit" + } }, { - "name": "start_time", + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 0, + "default": 0, + "title": "Offset" + } + }, + { + "name": "search", "in": "query", "required": false, "schema": { "anyOf": [ { - "type": "string", - "format": "date-time" + "type": "string" }, { "type": "null" } ], - "description": "Start time", - "title": "Start Time" + "description": "Search by username or email", + "title": "Search" }, - "description": "Start time" + "description": "Search by username or email" }, { - "name": "end_time", + "name": "role", "in": "query", "required": false, "schema": { "anyOf": [ { - "type": "string", - "format": "date-time" + "$ref": "#/components/schemas/UserRole" }, { "type": "null" } ], - "description": "End time", - "title": "End Time" + "description": "Filter by user role", + "title": "Role" }, - "description": "End time" + "description": "Filter by user role" + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserListResponse" + } + } + } }, - { - "name": "limit", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "maximum": 50000, - "minimum": 1, - "default": 10000, - "title": "Limit" + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } } } + } + }, + "post": { + "tags": [ + "admin", + "users" ], + "summary": "Create User", + "description": "Create a new user (admin only).", + "operationId": "create_user_api_v1_admin_users__post", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserCreate" + } + } + } + }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { - "schema": {} + "schema": { + "$ref": "#/components/schemas/UserResponse" + } + } + } + }, + "409": { + "description": "Username already exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } } } }, @@ -3144,165 +2840,116 @@ } } }, - "/api/v1/admin/events/export/json": { + "/api/v1/admin/users/{user_id}": { "get": { "tags": [ - "admin-events" + "admin", + "users" ], - "summary": "Export Events Json", - "description": "Export events as JSON with comprehensive filtering.", - "operationId": "export_events_json_api_v1_admin_events_export_json_get", + "summary": "Get User", + "description": "Get a user by ID.", + "operationId": "get_user_api_v1_admin_users__user_id__get", "parameters": [ { - "name": "event_types", - "in": "query", - "required": false, + "name": "user_id", + "in": "path", + "required": true, "schema": { - "anyOf": [ - { - "type": "array", - "items": { - "$ref": "#/components/schemas/EventType" - } - }, - { - "type": "null" + "type": "string", + "title": "User Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserResponse" } - ], - "description": "Event types (repeat param for multiple)", - "title": "Event Types" - }, - "description": "Event types (repeat param for multiple)" + } + } }, - { - "name": "aggregate_id", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" + "404": { + "description": "User not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } - ], - "description": "Aggregate ID filter", - "title": "Aggregate Id" - }, - "description": "Aggregate ID filter" + } + } }, - { - "name": "correlation_id", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" } - ], - "description": "Correlation ID filter", - "title": "Correlation Id" - }, - "description": "Correlation ID filter" - }, + } + } + } + } + }, + "put": { + "tags": [ + "admin", + "users" + ], + "summary": "Update User", + "description": "Update a user's profile fields.", + "operationId": "update_user_api_v1_admin_users__user_id__put", + "parameters": [ { "name": "user_id", - "in": "query", - "required": false, + "in": "path", + "required": true, "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "User ID filter", + "type": "string", "title": "User Id" - }, - "description": "User ID filter" - }, - { - "name": "service_name", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Service name filter", - "title": "Service Name" - }, - "description": "Service name filter" - }, - { - "name": "start_time", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "description": "Start time", - "title": "Start Time" - }, - "description": "Start time" - }, - { - "name": "end_time", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "description": "End time", - "title": "End Time" - }, - "description": "End time" - }, - { - "name": "limit", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "maximum": 50000, - "minimum": 1, - "default": 10000, - "title": "Limit" } } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserUpdate" + } + } + } + }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { - "schema": {} + "schema": { + "$ref": "#/components/schemas/UserResponse" + } + } + } + }, + "404": { + "description": "User not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Failed to update user", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } } } }, @@ -3317,25 +2964,36 @@ } } } - } - }, - "/api/v1/admin/events/{event_id}": { - "get": { + }, + "delete": { "tags": [ - "admin-events" + "admin", + "users" ], - "summary": "Get Event Detail", - "description": "Get detailed information about a single event, including related events and timeline.", - "operationId": "get_event_detail_api_v1_admin_events__event_id__get", + "summary": "Delete User", + "description": "Delete a user and optionally cascade-delete their data.", + "operationId": "delete_user_api_v1_admin_users__user_id__delete", "parameters": [ { - "name": "event_id", + "name": "user_id", "in": "path", "required": true, "schema": { "type": "string", - "title": "Event Id" + "title": "User Id" } + }, + { + "name": "cascade", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "description": "Cascade delete user's data", + "default": true, + "title": "Cascade" + }, + "description": "Cascade delete user's data" } ], "responses": { @@ -3344,13 +3002,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EventDetailResponse" + "$ref": "#/components/schemas/DeleteUserResponse" } } } }, - "404": { - "description": "Event not found", + "400": { + "description": "Cannot delete your own account", "content": { "application/json": { "schema": { @@ -3370,22 +3028,25 @@ } } } - }, - "delete": { + } + }, + "/api/v1/admin/users/{user_id}/overview": { + "get": { "tags": [ - "admin-events" + "admin", + "users" ], - "summary": "Delete Event", - "description": "Delete and archive an event by ID.", - "operationId": "delete_event_api_v1_admin_events__event_id__delete", + "summary": "Get User Overview", + "description": "Get a comprehensive overview of a user including stats and rate limits.", + "operationId": "get_user_overview_api_v1_admin_users__user_id__overview_get", "parameters": [ { - "name": "event_id", + "name": "user_id", "in": "path", "required": true, "schema": { "type": "string", - "title": "Event Id" + "title": "User Id" } } ], @@ -3395,13 +3056,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EventDeleteResponse" + "$ref": "#/components/schemas/AdminUserOverview" } } } }, "404": { - "description": "Event not found", + "description": "User not found", "content": { "application/json": { "schema": { @@ -3423,23 +3084,35 @@ } } }, - "/api/v1/admin/events/replay": { + "/api/v1/admin/users/{user_id}/reset-password": { "post": { "tags": [ - "admin-events" + "admin", + "users" + ], + "summary": "Reset User Password", + "description": "Reset a user's password.", + "operationId": "reset_user_password_api_v1_admin_users__user_id__reset_password_post", + "parameters": [ + { + "name": "user_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "User Id" + } + } ], - "summary": "Replay Events", - "description": "Replay events by filter criteria, with optional dry-run mode.", - "operationId": "replay_events_api_v1_admin_events_replay_post", "requestBody": { + "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EventReplayRequest" + "$ref": "#/components/schemas/PasswordResetRequest" } } - }, - "required": true + } }, "responses": { "200": { @@ -3447,13 +3120,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EventReplayResponse" + "$ref": "#/components/schemas/MessageResponse" } } } }, - "404": { - "description": "No events match the replay filter", + "500": { + "description": "Failed to reset password", "content": { "application/json": { "schema": { @@ -3463,11 +3136,11 @@ } }, "422": { - "description": "Empty filter or too many events to replay", + "description": "Validation Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/HTTPValidationError" } } } @@ -3475,22 +3148,23 @@ } } }, - "/api/v1/admin/events/replay/{session_id}/status": { + "/api/v1/admin/users/{user_id}/rate-limits": { "get": { "tags": [ - "admin-events" + "admin", + "users" ], - "summary": "Get Replay Status", - "description": "Get the status and progress of a replay session.", - "operationId": "get_replay_status_api_v1_admin_events_replay__session_id__status_get", + "summary": "Get User Rate Limits", + "description": "Get rate limit configuration for a user.", + "operationId": "get_user_rate_limits_api_v1_admin_users__user_id__rate_limits_get", "parameters": [ { - "name": "session_id", + "name": "user_id", "in": "path", "required": true, "schema": { "type": "string", - "title": "Session Id" + "title": "User Id" } } ], @@ -3500,17 +3174,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EventReplayStatusResponse" - } - } - } - }, - "404": { - "description": "Replay session not found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/UserRateLimitsResponse" } } } @@ -3526,57 +3190,35 @@ } } } - } - }, - "/api/v1/admin/settings/": { - "get": { + }, + "put": { "tags": [ "admin", - "settings" + "users" ], - "summary": "Get System Settings", - "description": "Get the current system-wide settings.", - "operationId": "get_system_settings_api_v1_admin_settings__get", - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SystemSettingsSchema" - } - } - } - }, - "500": { - "description": "Failed to load system settings", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } + "summary": "Update User Rate Limits", + "description": "Update rate limit rules for a user.", + "operationId": "update_user_rate_limits_api_v1_admin_users__user_id__rate_limits_put", + "parameters": [ + { + "name": "user_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "User Id" } } - } - }, - "put": { - "tags": [ - "admin", - "settings" ], - "summary": "Update System Settings", - "description": "Replace system-wide settings.", - "operationId": "update_system_settings_api_v1_admin_settings__put", "requestBody": { + "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SystemSettingsSchema" + "$ref": "#/components/schemas/RateLimitUpdateRequest" } } - }, - "required": true + } }, "responses": { "200": { @@ -3584,37 +3226,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SystemSettingsSchema" - } - } - } - }, - "400": { - "description": "Invalid settings values", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/RateLimitUpdateResponse" } } } }, "422": { - "description": "Settings validation failed", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "500": { - "description": "Failed to save settings", + "description": "Validation Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/HTTPValidationError" } } } @@ -3622,32 +3244,43 @@ } } }, - "/api/v1/admin/settings/reset": { + "/api/v1/admin/users/{user_id}/rate-limits/reset": { "post": { "tags": [ "admin", - "settings" + "users" + ], + "summary": "Reset User Rate Limits", + "description": "Reset a user's rate limits to defaults.", + "operationId": "reset_user_rate_limits_api_v1_admin_users__user_id__rate_limits_reset_post", + "parameters": [ + { + "name": "user_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "User Id" + } + } ], - "summary": "Reset System Settings", - "description": "Reset system-wide settings to defaults.", - "operationId": "reset_system_settings_api_v1_admin_settings_reset_post", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SystemSettingsSchema" + "$ref": "#/components/schemas/MessageResponse" } } } }, - "500": { - "description": "Failed to reset settings", + "422": { + "description": "Validation Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/HTTPValidationError" } } } @@ -3655,74 +3288,24 @@ } } }, - "/api/v1/admin/users/": { - "get": { + "/api/v1/admin/users/{user_id}/unlock": { + "post": { "tags": [ "admin", "users" ], - "summary": "List Users", - "description": "List all users with optional search and role filtering.", - "operationId": "list_users_api_v1_admin_users__get", + "summary": "Unlock User", + "description": "Unlock a user account that was locked due to failed login attempts.", + "operationId": "unlock_user_api_v1_admin_users__user_id__unlock_post", "parameters": [ { - "name": "limit", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "maximum": 1000, - "minimum": 1, - "default": 100, - "title": "Limit" - } - }, - { - "name": "offset", - "in": "query", - "required": false, + "name": "user_id", + "in": "path", + "required": true, "schema": { - "type": "integer", - "minimum": 0, - "default": 0, - "title": "Offset" + "type": "string", + "title": "User Id" } - }, - { - "name": "search", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Search by username or email", - "title": "Search" - }, - "description": "Search by username or email" - }, - { - "name": "role", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "$ref": "#/components/schemas/UserRole" - }, - { - "type": "null" - } - ], - "description": "Filter by user role", - "title": "Role" - }, - "description": "Filter by user role" } ], "responses": { @@ -3731,7 +3314,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserListResponse" + "$ref": "#/components/schemas/UnlockResponse" + } + } + } + }, + "404": { + "description": "User not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -3747,24 +3340,45 @@ } } } + } + }, + "/api/v1/user/settings/": { + "get": { + "tags": [ + "user-settings" + ], + "summary": "Get User Settings", + "description": "Get the authenticated user's settings.", + "operationId": "get_user_settings_api_v1_user_settings__get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserSettings" + } + } + } + } + } }, - "post": { + "put": { "tags": [ - "admin", - "users" + "user-settings" ], - "summary": "Create User", - "description": "Create a new user (admin only).", - "operationId": "create_user_api_v1_admin_users__post", + "summary": "Update User Settings", + "description": "Update the authenticated user's settings.", + "operationId": "update_user_settings_api_v1_user_settings__put", "requestBody": { - "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserCreate" + "$ref": "#/components/schemas/UserSettingsUpdate" } } - } + }, + "required": true }, "responses": { "200": { @@ -3772,17 +3386,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserResponse" - } - } - } - }, - "409": { - "description": "Username already exists", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/UserSettings" } } } @@ -3800,43 +3404,31 @@ } } }, - "/api/v1/admin/users/{user_id}": { - "get": { + "/api/v1/user/settings/theme": { + "put": { "tags": [ - "admin", - "users" + "user-settings" ], - "summary": "Get User", - "description": "Get a user by ID.", - "operationId": "get_user_api_v1_admin_users__user_id__get", - "parameters": [ - { - "name": "user_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "User Id" + "summary": "Update Theme", + "description": "Update the user's theme preference.", + "operationId": "update_theme_api_v1_user_settings_theme_put", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ThemeUpdateRequest" + } } - } - ], + }, + "required": true + }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserResponse" - } - } - } - }, - "404": { - "description": "User not found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/UserSettings" } } } @@ -3852,35 +3444,25 @@ } } } - }, + } + }, + "/api/v1/user/settings/notifications": { "put": { "tags": [ - "admin", - "users" - ], - "summary": "Update User", - "description": "Update a user's profile fields.", - "operationId": "update_user_api_v1_admin_users__user_id__put", - "parameters": [ - { - "name": "user_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "User Id" - } - } + "user-settings" ], + "summary": "Update Notification Settings", + "description": "Update notification preferences.", + "operationId": "update_notification_settings_api_v1_user_settings_notifications_put", "requestBody": { - "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserUpdate" + "$ref": "#/components/schemas/NotificationSettings" } } - } + }, + "required": true }, "responses": { "200": { @@ -3888,27 +3470,49 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserResponse" + "$ref": "#/components/schemas/UserSettings" } } } }, - "404": { - "description": "User not found", + "422": { + "description": "Validation Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/HTTPValidationError" } } } + } + } + } + }, + "/api/v1/user/settings/editor": { + "put": { + "tags": [ + "user-settings" + ], + "summary": "Update Editor Settings", + "description": "Update code editor preferences.", + "operationId": "update_editor_settings_api_v1_user_settings_editor_put", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EditorSettings" + } + } }, - "500": { - "description": "Failed to update user", + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/UserSettings" } } } @@ -3924,36 +3528,30 @@ } } } - }, - "delete": { + } + }, + "/api/v1/user/settings/history": { + "get": { "tags": [ - "admin", - "users" + "user-settings" ], - "summary": "Delete User", - "description": "Delete a user and optionally cascade-delete their data.", - "operationId": "delete_user_api_v1_admin_users__user_id__delete", + "summary": "Get Settings History", + "description": "Get the change history for the user's settings.", + "operationId": "get_settings_history_api_v1_user_settings_history_get", "parameters": [ { - "name": "user_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "User Id" - } - }, - { - "name": "cascade", + "name": "limit", "in": "query", "required": false, "schema": { - "type": "boolean", - "description": "Cascade delete user's data", - "default": true, - "title": "Cascade" + "type": "integer", + "maximum": 200, + "minimum": 1, + "description": "Maximum number of history entries", + "default": 50, + "title": "Limit" }, - "description": "Cascade delete user's data" + "description": "Maximum number of history entries" } ], "responses": { @@ -3962,17 +3560,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeleteUserResponse" - } - } - } - }, - "400": { - "description": "Cannot delete your own account", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/SettingsHistoryResponse" } } } @@ -3990,43 +3578,31 @@ } } }, - "/api/v1/admin/users/{user_id}/overview": { - "get": { + "/api/v1/user/settings/restore": { + "post": { "tags": [ - "admin", - "users" + "user-settings" ], - "summary": "Get User Overview", - "description": "Get a comprehensive overview of a user including stats and rate limits.", - "operationId": "get_user_overview_api_v1_admin_users__user_id__overview_get", - "parameters": [ - { - "name": "user_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "User Id" + "summary": "Restore Settings", + "description": "Restore settings to a previous point in time.", + "operationId": "restore_settings_api_v1_user_settings_restore_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RestoreSettingsRequest" + } } - } - ], + }, + "required": true + }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AdminUserOverview" - } - } - } - }, - "404": { - "description": "User not found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/UserSettings" } } } @@ -4044,23 +3620,22 @@ } } }, - "/api/v1/admin/users/{user_id}/reset-password": { - "post": { + "/api/v1/user/settings/custom/{key}": { + "put": { "tags": [ - "admin", - "users" + "user-settings" ], - "summary": "Reset User Password", - "description": "Reset a user's password.", - "operationId": "reset_user_password_api_v1_admin_users__user_id__reset_password_post", + "summary": "Update Custom Setting", + "description": "Set or update a single custom setting by key.", + "operationId": "update_custom_setting_api_v1_user_settings_custom__key__put", "parameters": [ { - "name": "user_id", + "name": "key", "in": "path", "required": true, "schema": { "type": "string", - "title": "User Id" + "title": "Key" } } ], @@ -4069,7 +3644,8 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PasswordResetRequest" + "type": "object", + "title": "Value" } } } @@ -4080,17 +3656,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MessageResponse" - } - } - } - }, - "500": { - "description": "Failed to reset password", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "$ref": "#/components/schemas/UserSettings" } } } @@ -4108,23 +3674,112 @@ } } }, - "/api/v1/admin/users/{user_id}/rate-limits": { + "/api/v1/notifications": { "get": { "tags": [ - "admin", - "users" + "notifications" ], - "summary": "Get User Rate Limits", - "description": "Get rate limit configuration for a user.", - "operationId": "get_user_rate_limits_api_v1_admin_users__user_id__rate_limits_get", + "summary": "Get Notifications", + "description": "List notifications for the authenticated user.", + "operationId": "get_notifications_api_v1_notifications_get", "parameters": [ { - "name": "user_id", - "in": "path", - "required": true, + "name": "status", + "in": "query", + "required": false, "schema": { - "type": "string", - "title": "User Id" + "anyOf": [ + { + "$ref": "#/components/schemas/NotificationStatus" + }, + { + "type": "null" + } + ], + "title": "Status" + } + }, + { + "name": "include_tags", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ], + "description": "Only notifications with any of these tags", + "title": "Include Tags" + }, + "description": "Only notifications with any of these tags" + }, + { + "name": "exclude_tags", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ], + "description": "Exclude notifications with any of these tags", + "title": "Exclude Tags" + }, + "description": "Exclude notifications with any of these tags" + }, + { + "name": "tag_prefix", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Only notifications having a tag starting with this prefix", + "title": "Tag Prefix" + }, + "description": "Only notifications having a tag starting with this prefix" + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "maximum": 100, + "minimum": 1, + "default": 50, + "title": "Limit" + } + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 0, + "default": 0, + "title": "Offset" } } ], @@ -4134,7 +3789,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserRateLimitsResponse" + "$ref": "#/components/schemas/NotificationListResponse" } } } @@ -4150,23 +3805,96 @@ } } } - }, + } + }, + "/api/v1/notifications/{notification_id}/read": { "put": { "tags": [ - "admin", - "users" + "notifications" ], - "summary": "Update User Rate Limits", - "description": "Update rate limit rules for a user.", - "operationId": "update_user_rate_limits_api_v1_admin_users__user_id__rate_limits_put", + "summary": "Mark Notification Read", + "description": "Mark a single notification as read.", + "operationId": "mark_notification_read_api_v1_notifications__notification_id__read_put", "parameters": [ { - "name": "user_id", + "name": "notification_id", "in": "path", "required": true, "schema": { "type": "string", - "title": "User Id" + "title": "Notification Id" + } + } + ], + "responses": { + "204": { + "description": "Successful Response" + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/api/v1/notifications/mark-all-read": { + "post": { + "tags": [ + "notifications" + ], + "summary": "Mark All Read", + "description": "Mark all notifications as read.", + "operationId": "mark_all_read_api_v1_notifications_mark_all_read_post", + "responses": { + "204": { + "description": "Successful Response" + } + } + } + }, + "/api/v1/notifications/subscriptions": { + "get": { + "tags": [ + "notifications" + ], + "summary": "Get Subscriptions", + "description": "Get all notification channel subscriptions for the authenticated user.", + "operationId": "get_subscriptions_api_v1_notifications_subscriptions_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SubscriptionsResponse" + } + } + } + } + } + } + }, + "/api/v1/notifications/subscriptions/{channel}": { + "put": { + "tags": [ + "notifications" + ], + "summary": "Update Subscription", + "description": "Update subscription settings for a notification channel.", + "operationId": "update_subscription_api_v1_notifications_subscriptions__channel__put", + "parameters": [ + { + "name": "channel", + "in": "path", + "required": true, + "schema": { + "$ref": "#/components/schemas/NotificationChannel" } } ], @@ -4175,7 +3903,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RateLimitUpdateRequest" + "$ref": "#/components/schemas/SubscriptionUpdate" } } } @@ -4186,7 +3914,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RateLimitUpdateResponse" + "$ref": "#/components/schemas/NotificationSubscription" } } } @@ -4204,23 +3932,44 @@ } } }, - "/api/v1/admin/users/{user_id}/rate-limits/reset": { - "post": { + "/api/v1/notifications/unread-count": { + "get": { "tags": [ - "admin", - "users" + "notifications" ], - "summary": "Reset User Rate Limits", - "description": "Reset a user's rate limits to defaults.", - "operationId": "reset_user_rate_limits_api_v1_admin_users__user_id__rate_limits_reset_post", + "summary": "Get Unread Count", + "description": "Get the count of unread notifications.", + "operationId": "get_unread_count_api_v1_notifications_unread_count_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UnreadCountResponse" + } + } + } + } + } + } + }, + "/api/v1/notifications/{notification_id}": { + "delete": { + "tags": [ + "notifications" + ], + "summary": "Delete Notification", + "description": "Delete a notification.", + "operationId": "delete_notification_api_v1_notifications__notification_id__delete", "parameters": [ { - "name": "user_id", + "name": "notification_id", "in": "path", "required": true, "schema": { "type": "string", - "title": "User Id" + "title": "Notification Id" } } ], @@ -4230,7 +3979,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MessageResponse" + "$ref": "#/components/schemas/DeleteNotificationResponse" } } } @@ -4248,23 +3997,22 @@ } } }, - "/api/v1/admin/users/{user_id}/unlock": { - "post": { + "/api/v1/sagas/{saga_id}": { + "get": { "tags": [ - "admin", - "users" + "sagas" ], - "summary": "Unlock User", - "description": "Unlock a user account that was locked due to failed login attempts.", - "operationId": "unlock_user_api_v1_admin_users__user_id__unlock_post", + "summary": "Get Saga Status", + "description": "Get saga status by ID.", + "operationId": "get_saga_status_api_v1_sagas__saga_id__get", "parameters": [ { - "name": "user_id", + "name": "saga_id", "in": "path", "required": true, "schema": { "type": "string", - "title": "User Id" + "title": "Saga Id" } } ], @@ -4274,13 +4022,23 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UnlockResponse" + "$ref": "#/components/schemas/SagaStatusResponse" } } } }, - "404": { - "description": "User not found", + "403": { + "description": "Access denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Saga not found", "content": { "application/json": { "schema": { @@ -4302,51 +4060,83 @@ } } }, - "/api/v1/user/settings/": { + "/api/v1/sagas/execution/{execution_id}": { "get": { "tags": [ - "user-settings" + "sagas" + ], + "summary": "Get Execution Sagas", + "description": "Get all sagas for an execution.", + "operationId": "get_execution_sagas_api_v1_sagas_execution__execution_id__get", + "parameters": [ + { + "name": "execution_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Execution Id" + } + }, + { + "name": "state", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/SagaState" + }, + { + "type": "null" + } + ], + "description": "Filter by saga state", + "title": "State" + }, + "description": "Filter by saga state" + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "maximum": 1000, + "minimum": 1, + "default": 100, + "title": "Limit" + } + }, + { + "name": "skip", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 0, + "default": 0, + "title": "Skip" + } + } ], - "summary": "Get User Settings", - "description": "Get the authenticated user's settings.", - "operationId": "get_user_settings_api_v1_user_settings__get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserSettings" + "$ref": "#/components/schemas/SagaListResponse" } } } - } - } - }, - "put": { - "tags": [ - "user-settings" - ], - "summary": "Update User Settings", - "description": "Update the authenticated user's settings.", - "operationId": "update_user_settings_api_v1_user_settings__put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserSettingsUpdate" - } - } }, - "required": true - }, - "responses": { - "200": { - "description": "Successful Response", + "403": { + "description": "Access denied", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserSettings" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -4364,31 +4154,64 @@ } } }, - "/api/v1/user/settings/theme": { - "put": { + "/api/v1/sagas/": { + "get": { "tags": [ - "user-settings" + "sagas" ], - "summary": "Update Theme", - "description": "Update the user's theme preference.", - "operationId": "update_theme_api_v1_user_settings_theme_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThemeUpdateRequest" - } + "summary": "List Sagas", + "description": "List sagas accessible by the current user.", + "operationId": "list_sagas_api_v1_sagas__get", + "parameters": [ + { + "name": "state", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/SagaState" + }, + { + "type": "null" + } + ], + "description": "Filter by saga state", + "title": "State" + }, + "description": "Filter by saga state" + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "maximum": 1000, + "minimum": 1, + "default": 100, + "title": "Limit" } }, - "required": true - }, + { + "name": "skip", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 0, + "default": 0, + "title": "Skip" + } + } + ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserSettings" + "$ref": "#/components/schemas/SagaListResponse" } } } @@ -4406,73 +4229,62 @@ } } }, - "/api/v1/user/settings/notifications": { - "put": { + "/api/v1/sagas/{saga_id}/cancel": { + "post": { "tags": [ - "user-settings" + "sagas" ], - "summary": "Update Notification Settings", - "description": "Update notification preferences.", - "operationId": "update_notification_settings_api_v1_user_settings_notifications_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/NotificationSettings" - } + "summary": "Cancel Saga", + "description": "Cancel a running saga.", + "operationId": "cancel_saga_api_v1_sagas__saga_id__cancel_post", + "parameters": [ + { + "name": "saga_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Saga Id" } - }, - "required": true - }, + } + ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserSettings" + "$ref": "#/components/schemas/SagaCancellationResponse" } } } }, - "422": { - "description": "Validation Error", + "400": { + "description": "Saga is not in a cancellable state", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "$ref": "#/components/schemas/ErrorResponse" } } } - } - } - } - }, - "/api/v1/user/settings/editor": { - "put": { - "tags": [ - "user-settings" - ], - "summary": "Update Editor Settings", - "description": "Update code editor preferences.", - "operationId": "update_editor_settings_api_v1_user_settings_editor_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EditorSettings" + }, + "403": { + "description": "Access denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } } } }, - "required": true - }, - "responses": { - "200": { - "description": "Successful Response", + "404": { + "description": "Saga not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserSettings" + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -4489,1090 +4301,663 @@ } } } - }, - "/api/v1/user/settings/history": { - "get": { - "tags": [ - "user-settings" - ], - "summary": "Get Settings History", - "description": "Get the change history for the user's settings.", - "operationId": "get_settings_history_api_v1_user_settings_history_get", - "parameters": [ - { - "name": "limit", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "maximum": 200, - "minimum": 1, - "description": "Maximum number of history entries", - "default": 50, - "title": "Limit" - }, - "description": "Maximum number of history entries" - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SettingsHistoryResponse" - } - } - } + } + }, + "components": { + "schemas": { + "AdminUserOverview": { + "properties": { + "user": { + "$ref": "#/components/schemas/UserResponse" }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - } - } - }, - "/api/v1/user/settings/restore": { - "post": { - "tags": [ - "user-settings" - ], - "summary": "Restore Settings", - "description": "Restore settings to a previous point in time.", - "operationId": "restore_settings_api_v1_user_settings_restore_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RestoreSettingsRequest" - } - } + "stats": { + "$ref": "#/components/schemas/EventStatistics" }, - "required": true - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserSettings" - } - } - } + "derived_counts": { + "$ref": "#/components/schemas/DerivedCounts" }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - } - } - }, - "/api/v1/user/settings/custom/{key}": { - "put": { - "tags": [ - "user-settings" - ], - "summary": "Update Custom Setting", - "description": "Set or update a single custom setting by key.", - "operationId": "update_custom_setting_api_v1_user_settings_custom__key__put", - "parameters": [ - { - "name": "key", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Key" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "title": "Value" - } - } - } - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserSettings" - } - } - } + "rate_limit_summary": { + "$ref": "#/components/schemas/RateLimitSummary" }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - } - } - }, - "/api/v1/notifications": { - "get": { - "tags": [ - "notifications" - ], - "summary": "Get Notifications", - "description": "List notifications for the authenticated user.", - "operationId": "get_notifications_api_v1_notifications_get", - "parameters": [ - { - "name": "status", - "in": "query", - "required": false, - "schema": { - "anyOf": [ + "recent_events": { + "items": { + "oneOf": [ { - "$ref": "#/components/schemas/NotificationStatus" + "$ref": "#/components/schemas/ExecutionRequestedEvent" }, { - "type": "null" - } - ], - "title": "Status" - } - }, - { - "name": "include_tags", - "in": "query", - "required": false, - "schema": { - "anyOf": [ + "$ref": "#/components/schemas/ExecutionAcceptedEvent" + }, { - "type": "array", - "items": { - "type": "string" - } + "$ref": "#/components/schemas/ExecutionQueuedEvent" }, { - "type": "null" - } - ], - "description": "Only notifications with any of these tags", - "title": "Include Tags" - }, - "description": "Only notifications with any of these tags" - }, - { - "name": "exclude_tags", - "in": "query", - "required": false, - "schema": { - "anyOf": [ + "$ref": "#/components/schemas/ExecutionStartedEvent" + }, { - "type": "array", - "items": { - "type": "string" - } + "$ref": "#/components/schemas/ExecutionRunningEvent" }, { - "type": "null" - } - ], - "description": "Exclude notifications with any of these tags", - "title": "Exclude Tags" - }, - "description": "Exclude notifications with any of these tags" - }, - { - "name": "tag_prefix", - "in": "query", - "required": false, - "schema": { - "anyOf": [ + "$ref": "#/components/schemas/ExecutionCompletedEvent" + }, { - "type": "string" + "$ref": "#/components/schemas/ExecutionFailedEvent" }, { - "type": "null" - } - ], - "description": "Only notifications having a tag starting with this prefix", - "title": "Tag Prefix" - }, - "description": "Only notifications having a tag starting with this prefix" - }, - { - "name": "limit", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "maximum": 100, - "minimum": 1, - "default": 50, - "title": "Limit" - } - }, - { - "name": "offset", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "minimum": 0, - "default": 0, - "title": "Offset" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/NotificationListResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "$ref": "#/components/schemas/ExecutionTimeoutEvent" + }, + { + "$ref": "#/components/schemas/ExecutionCancelledEvent" + }, + { + "$ref": "#/components/schemas/PodCreatedEvent" + }, + { + "$ref": "#/components/schemas/PodScheduledEvent" + }, + { + "$ref": "#/components/schemas/PodRunningEvent" + }, + { + "$ref": "#/components/schemas/PodSucceededEvent" + }, + { + "$ref": "#/components/schemas/PodFailedEvent" + }, + { + "$ref": "#/components/schemas/PodTerminatedEvent" + }, + { + "$ref": "#/components/schemas/PodDeletedEvent" + }, + { + "$ref": "#/components/schemas/ResultStoredEvent" + }, + { + "$ref": "#/components/schemas/ResultFailedEvent" + }, + { + "$ref": "#/components/schemas/UserSettingsUpdatedEvent" + }, + { + "$ref": "#/components/schemas/UserRegisteredEvent" + }, + { + "$ref": "#/components/schemas/UserLoginEvent" + }, + { + "$ref": "#/components/schemas/UserLoggedInEvent" + }, + { + "$ref": "#/components/schemas/UserLoggedOutEvent" + }, + { + "$ref": "#/components/schemas/UserUpdatedEvent" + }, + { + "$ref": "#/components/schemas/UserDeletedEvent" + }, + { + "$ref": "#/components/schemas/NotificationCreatedEvent" + }, + { + "$ref": "#/components/schemas/NotificationSentEvent" + }, + { + "$ref": "#/components/schemas/NotificationDeliveredEvent" + }, + { + "$ref": "#/components/schemas/NotificationFailedEvent" + }, + { + "$ref": "#/components/schemas/NotificationReadEvent" + }, + { + "$ref": "#/components/schemas/NotificationAllReadEvent" + }, + { + "$ref": "#/components/schemas/NotificationClickedEvent" + }, + { + "$ref": "#/components/schemas/NotificationPreferencesUpdatedEvent" + }, + { + "$ref": "#/components/schemas/SagaStartedEvent" + }, + { + "$ref": "#/components/schemas/SagaCompletedEvent" + }, + { + "$ref": "#/components/schemas/SagaFailedEvent" + }, + { + "$ref": "#/components/schemas/SagaCancelledEvent" + }, + { + "$ref": "#/components/schemas/SagaCompensatingEvent" + }, + { + "$ref": "#/components/schemas/SagaCompensatedEvent" + }, + { + "$ref": "#/components/schemas/CreatePodCommandEvent" + }, + { + "$ref": "#/components/schemas/DeletePodCommandEvent" + }, + { + "$ref": "#/components/schemas/AllocateResourcesCommandEvent" + }, + { + "$ref": "#/components/schemas/ReleaseResourcesCommandEvent" + }, + { + "$ref": "#/components/schemas/ScriptSavedEvent" + }, + { + "$ref": "#/components/schemas/ScriptDeletedEvent" + }, + { + "$ref": "#/components/schemas/ScriptSharedEvent" + }, + { + "$ref": "#/components/schemas/SecurityViolationEvent" + }, + { + "$ref": "#/components/schemas/RateLimitExceededEvent" + }, + { + "$ref": "#/components/schemas/AuthFailedEvent" + }, + { + "$ref": "#/components/schemas/ResourceLimitExceededEvent" + }, + { + "$ref": "#/components/schemas/QuotaExceededEvent" + }, + { + "$ref": "#/components/schemas/SystemErrorEvent" + }, + { + "$ref": "#/components/schemas/ServiceUnhealthyEvent" + }, + { + "$ref": "#/components/schemas/ServiceRecoveredEvent" + }, + { + "$ref": "#/components/schemas/DLQMessageReceivedEvent" + }, + { + "$ref": "#/components/schemas/DLQMessageRetriedEvent" + }, + { + "$ref": "#/components/schemas/DLQMessageDiscardedEvent" + } + ], + "discriminator": { + "propertyName": "event_type", + "mapping": { + "allocate_resources_command": "#/components/schemas/AllocateResourcesCommandEvent", + "auth_failed": "#/components/schemas/AuthFailedEvent", + "create_pod_command": "#/components/schemas/CreatePodCommandEvent", + "delete_pod_command": "#/components/schemas/DeletePodCommandEvent", + "dlq_message_discarded": "#/components/schemas/DLQMessageDiscardedEvent", + "dlq_message_received": "#/components/schemas/DLQMessageReceivedEvent", + "dlq_message_retried": "#/components/schemas/DLQMessageRetriedEvent", + "execution_accepted": "#/components/schemas/ExecutionAcceptedEvent", + "execution_cancelled": "#/components/schemas/ExecutionCancelledEvent", + "execution_completed": "#/components/schemas/ExecutionCompletedEvent", + "execution_failed": "#/components/schemas/ExecutionFailedEvent", + "execution_queued": "#/components/schemas/ExecutionQueuedEvent", + "execution_requested": "#/components/schemas/ExecutionRequestedEvent", + "execution_running": "#/components/schemas/ExecutionRunningEvent", + "execution_started": "#/components/schemas/ExecutionStartedEvent", + "execution_timeout": "#/components/schemas/ExecutionTimeoutEvent", + "notification_all_read": "#/components/schemas/NotificationAllReadEvent", + "notification_clicked": "#/components/schemas/NotificationClickedEvent", + "notification_created": "#/components/schemas/NotificationCreatedEvent", + "notification_delivered": "#/components/schemas/NotificationDeliveredEvent", + "notification_failed": "#/components/schemas/NotificationFailedEvent", + "notification_preferences_updated": "#/components/schemas/NotificationPreferencesUpdatedEvent", + "notification_read": "#/components/schemas/NotificationReadEvent", + "notification_sent": "#/components/schemas/NotificationSentEvent", + "pod_created": "#/components/schemas/PodCreatedEvent", + "pod_deleted": "#/components/schemas/PodDeletedEvent", + "pod_failed": "#/components/schemas/PodFailedEvent", + "pod_running": "#/components/schemas/PodRunningEvent", + "pod_scheduled": "#/components/schemas/PodScheduledEvent", + "pod_succeeded": "#/components/schemas/PodSucceededEvent", + "pod_terminated": "#/components/schemas/PodTerminatedEvent", + "quota_exceeded": "#/components/schemas/QuotaExceededEvent", + "rate_limit_exceeded": "#/components/schemas/RateLimitExceededEvent", + "release_resources_command": "#/components/schemas/ReleaseResourcesCommandEvent", + "resource_limit_exceeded": "#/components/schemas/ResourceLimitExceededEvent", + "result_failed": "#/components/schemas/ResultFailedEvent", + "result_stored": "#/components/schemas/ResultStoredEvent", + "saga_cancelled": "#/components/schemas/SagaCancelledEvent", + "saga_compensated": "#/components/schemas/SagaCompensatedEvent", + "saga_compensating": "#/components/schemas/SagaCompensatingEvent", + "saga_completed": "#/components/schemas/SagaCompletedEvent", + "saga_failed": "#/components/schemas/SagaFailedEvent", + "saga_started": "#/components/schemas/SagaStartedEvent", + "script_deleted": "#/components/schemas/ScriptDeletedEvent", + "script_saved": "#/components/schemas/ScriptSavedEvent", + "script_shared": "#/components/schemas/ScriptSharedEvent", + "security_violation": "#/components/schemas/SecurityViolationEvent", + "service_recovered": "#/components/schemas/ServiceRecoveredEvent", + "service_unhealthy": "#/components/schemas/ServiceUnhealthyEvent", + "system_error": "#/components/schemas/SystemErrorEvent", + "user_deleted": "#/components/schemas/UserDeletedEvent", + "user_logged_in": "#/components/schemas/UserLoggedInEvent", + "user_logged_out": "#/components/schemas/UserLoggedOutEvent", + "user_login": "#/components/schemas/UserLoginEvent", + "user_registered": "#/components/schemas/UserRegisteredEvent", + "user_settings_updated": "#/components/schemas/UserSettingsUpdatedEvent", + "user_updated": "#/components/schemas/UserUpdatedEvent" } } - } - } - } - } - }, - "/api/v1/notifications/{notification_id}/read": { - "put": { - "tags": [ - "notifications" - ], - "summary": "Mark Notification Read", - "description": "Mark a single notification as read.", - "operationId": "mark_notification_read_api_v1_notifications__notification_id__read_put", - "parameters": [ - { - "name": "notification_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Notification Id" - } + }, + "type": "array", + "title": "Recent Events", + "default": [] } + }, + "type": "object", + "required": [ + "user", + "stats", + "derived_counts", + "rate_limit_summary" ], - "responses": { - "204": { - "description": "Successful Response" - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - } - } - }, - "/api/v1/notifications/mark-all-read": { - "post": { - "tags": [ - "notifications" - ], - "summary": "Mark All Read", - "description": "Mark all notifications as read.", - "operationId": "mark_all_read_api_v1_notifications_mark_all_read_post", - "responses": { - "204": { - "description": "Successful Response" - } - } - } - }, - "/api/v1/notifications/subscriptions": { - "get": { - "tags": [ - "notifications" - ], - "summary": "Get Subscriptions", - "description": "Get all notification channel subscriptions for the authenticated user.", - "operationId": "get_subscriptions_api_v1_notifications_subscriptions_get", - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SubscriptionsResponse" - } + "title": "AdminUserOverview" + }, + "AllocateResourcesCommandEvent": { + "properties": { + "event_id": { + "type": "string", + "title": "Event Id" + }, + "event_type": { + "type": "string", + "enum": [ + "allocate_resources_command" + ], + "const": "allocate_resources_command", + "title": "Event Type", + "default": "allocate_resources_command" + }, + "event_version": { + "type": "string", + "title": "Event Version", + "default": "1.0" + }, + "timestamp": { + "type": "string", + "format": "date-time", + "title": "Timestamp" + }, + "aggregate_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" } - } - } - } - } - }, - "/api/v1/notifications/subscriptions/{channel}": { - "put": { - "tags": [ - "notifications" - ], - "summary": "Update Subscription", - "description": "Update subscription settings for a notification channel.", - "operationId": "update_subscription_api_v1_notifications_subscriptions__channel__put", - "parameters": [ - { - "name": "channel", - "in": "path", - "required": true, - "schema": { - "$ref": "#/components/schemas/NotificationChannel" - } + ], + "title": "Aggregate Id" + }, + "metadata": { + "$ref": "#/components/schemas/EventMetadata" + }, + "execution_id": { + "type": "string", + "title": "Execution Id" + }, + "cpu_request": { + "type": "string", + "title": "Cpu Request" + }, + "memory_request": { + "type": "string", + "title": "Memory Request" } + }, + "type": "object", + "required": [ + "event_id", + "event_type", + "event_version", + "timestamp", + "metadata" ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SubscriptionUpdate" + "title": "AllocateResourcesCommandEvent" + }, + "AuthFailedEvent": { + "properties": { + "event_id": { + "type": "string", + "title": "Event Id" + }, + "event_type": { + "type": "string", + "enum": [ + "auth_failed" + ], + "const": "auth_failed", + "title": "Event Type", + "default": "auth_failed" + }, + "event_version": { + "type": "string", + "title": "Event Version", + "default": "1.0" + }, + "timestamp": { + "type": "string", + "format": "date-time", + "title": "Timestamp" + }, + "aggregate_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" } - } - } - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/NotificationSubscription" - } + ], + "title": "Aggregate Id" + }, + "metadata": { + "$ref": "#/components/schemas/EventMetadata" + }, + "username": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" } - } + ], + "title": "Username" }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } + "reason": { + "type": "string", + "title": "Reason" + }, + "ip_address": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" } - } + ], + "title": "Ip Address" } - } - } - }, - "/api/v1/notifications/unread-count": { - "get": { - "tags": [ - "notifications" + }, + "type": "object", + "required": [ + "event_id", + "event_type", + "event_version", + "timestamp", + "metadata" ], - "summary": "Get Unread Count", - "description": "Get the count of unread notifications.", - "operationId": "get_unread_count_api_v1_notifications_unread_count_get", - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UnreadCountResponse" - } + "title": "AuthFailedEvent" + }, + "Body_login_api_v1_auth_login_post": { + "properties": { + "grant_type": { + "anyOf": [ + { + "type": "string", + "pattern": "^password$" + }, + { + "type": "null" } - } - } - } - } - }, - "/api/v1/notifications/{notification_id}": { - "delete": { - "tags": [ - "notifications" - ], - "summary": "Delete Notification", - "description": "Delete a notification.", - "operationId": "delete_notification_api_v1_notifications__notification_id__delete", - "parameters": [ - { - "name": "notification_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Notification Id" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeleteNotificationResponse" - } + ], + "title": "Grant Type" + }, + "username": { + "type": "string", + "title": "Username" + }, + "password": { + "type": "string", + "format": "password", + "title": "Password" + }, + "scope": { + "type": "string", + "title": "Scope", + "default": "" + }, + "client_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" } - } + ], + "title": "Client Id" }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } + "client_secret": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" } - } + ], + "format": "password", + "title": "Client Secret" } - } - } - }, - "/api/v1/sagas/{saga_id}": { - "get": { - "tags": [ - "sagas" + }, + "type": "object", + "required": [ + "username", + "password" ], - "summary": "Get Saga Status", - "description": "Get saga status by ID.", - "operationId": "get_saga_status_api_v1_sagas__saga_id__get", - "parameters": [ - { - "name": "saga_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Saga Id" - } + "title": "Body_login_api_v1_auth_login_post" + }, + "CancelExecutionRequest": { + "properties": { + "reason": { + "type": "string", + "title": "Reason", + "description": "Reason for cancellation", + "default": "User requested cancellation" } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SagaStatusResponse" - } - } - } + }, + "type": "object", + "title": "CancelExecutionRequest", + "description": "Model for cancelling an execution." + }, + "CancelResponse": { + "properties": { + "execution_id": { + "type": "string", + "title": "Execution Id" }, - "403": { - "description": "Access denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "status": { + "$ref": "#/components/schemas/CancelStatus" }, - "404": { - "description": "Saga not found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "message": { + "type": "string", + "title": "Message" }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } + "event_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" } - } + ], + "title": "Event Id", + "description": "Event ID for the cancellation event, if published" } - } - } - }, - "/api/v1/sagas/execution/{execution_id}": { - "get": { - "tags": [ - "sagas" + }, + "type": "object", + "required": [ + "execution_id", + "status", + "message" ], - "summary": "Get Execution Sagas", - "description": "Get all sagas for an execution.", - "operationId": "get_execution_sagas_api_v1_sagas_execution__execution_id__get", - "parameters": [ - { - "name": "execution_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Execution Id" - } - }, - { - "name": "state", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "$ref": "#/components/schemas/SagaState" - }, - { - "type": "null" - } - ], - "description": "Filter by saga state", - "title": "State" - }, - "description": "Filter by saga state" - }, - { - "name": "limit", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "maximum": 1000, - "minimum": 1, - "default": 100, - "title": "Limit" - } + "title": "CancelResponse", + "description": "Model for execution cancellation response." + }, + "CancelStatus": { + "type": "string", + "enum": [ + "already_cancelled", + "cancellation_requested" + ], + "title": "CancelStatus", + "description": "Outcome of a cancel request." + }, + "CleanupResponse": { + "properties": { + "removed_sessions": { + "type": "integer", + "title": "Removed Sessions" }, - { - "name": "skip", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "minimum": 0, - "default": 0, - "title": "Skip" - } + "message": { + "type": "string", + "title": "Message" } + }, + "type": "object", + "required": [ + "removed_sessions", + "message" ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SagaListResponse" - } - } - } + "title": "CleanupResponse", + "description": "Response schema for cleanup operations" + }, + "ContainerStatusInfo": { + "properties": { + "name": { + "type": "string", + "title": "Name" }, - "403": { - "description": "Access denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "ready": { + "type": "boolean", + "title": "Ready", + "default": false }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } + "restart_count": { + "type": "integer", + "title": "Restart Count", + "default": 0 + }, + "state": { + "type": "string", + "title": "State", + "default": "unknown" } - } - } - }, - "/api/v1/sagas/": { - "get": { - "tags": [ - "sagas" + }, + "type": "object", + "required": [ + "name" ], - "summary": "List Sagas", - "description": "List sagas accessible by the current user.", - "operationId": "list_sagas_api_v1_sagas__get", - "parameters": [ - { - "name": "state", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "$ref": "#/components/schemas/SagaState" - }, - { - "type": "null" - } - ], - "description": "Filter by saga state", - "title": "State" - }, - "description": "Filter by saga state" + "title": "ContainerStatusInfo", + "description": "Container status information from Kubernetes pod." + }, + "CreatePodCommandEvent": { + "properties": { + "event_id": { + "type": "string", + "title": "Event Id" }, - { - "name": "limit", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "maximum": 1000, - "minimum": 1, - "default": 100, - "title": "Limit" - } + "event_type": { + "type": "string", + "enum": [ + "create_pod_command" + ], + "const": "create_pod_command", + "title": "Event Type", + "default": "create_pod_command" }, - { - "name": "skip", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "minimum": 0, - "default": 0, - "title": "Skip" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SagaListResponse" - } - } - } + "event_version": { + "type": "string", + "title": "Event Version", + "default": "1.0" }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - } - } - }, - "/api/v1/sagas/{saga_id}/cancel": { - "post": { - "tags": [ - "sagas" - ], - "summary": "Cancel Saga", - "description": "Cancel a running saga.", - "operationId": "cancel_saga_api_v1_sagas__saga_id__cancel_post", - "parameters": [ - { - "name": "saga_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Saga Id" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SagaCancellationResponse" - } - } - } + "timestamp": { + "type": "string", + "format": "date-time", + "title": "Timestamp" }, - "400": { - "description": "Saga is not in a cancellable state", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "aggregate_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" } - } + ], + "title": "Aggregate Id" }, - "403": { - "description": "Access denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "metadata": { + "$ref": "#/components/schemas/EventMetadata" }, - "404": { - "description": "Saga not found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + "saga_id": { + "type": "string", + "title": "Saga Id" }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - } - } - } - }, - "components": { - "schemas": { - "AdminUserOverview": { - "properties": { - "user": { - "$ref": "#/components/schemas/UserResponse" + "execution_id": { + "type": "string", + "title": "Execution Id" }, - "stats": { - "$ref": "#/components/schemas/EventStatistics" + "script": { + "type": "string", + "title": "Script" }, - "derived_counts": { - "$ref": "#/components/schemas/DerivedCounts" + "language": { + "type": "string", + "title": "Language" }, - "rate_limit_summary": { - "$ref": "#/components/schemas/RateLimitSummary" + "language_version": { + "type": "string", + "title": "Language Version" }, - "recent_events": { - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/ExecutionRequestedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionAcceptedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionQueuedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionStartedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionRunningEvent" - }, - { - "$ref": "#/components/schemas/ExecutionCompletedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionFailedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionTimeoutEvent" - }, - { - "$ref": "#/components/schemas/ExecutionCancelledEvent" - }, - { - "$ref": "#/components/schemas/PodCreatedEvent" - }, - { - "$ref": "#/components/schemas/PodScheduledEvent" - }, - { - "$ref": "#/components/schemas/PodRunningEvent" - }, - { - "$ref": "#/components/schemas/PodSucceededEvent" - }, - { - "$ref": "#/components/schemas/PodFailedEvent" - }, - { - "$ref": "#/components/schemas/PodTerminatedEvent" - }, - { - "$ref": "#/components/schemas/PodDeletedEvent" - }, - { - "$ref": "#/components/schemas/ResultStoredEvent" - }, - { - "$ref": "#/components/schemas/ResultFailedEvent" - }, - { - "$ref": "#/components/schemas/UserSettingsUpdatedEvent" - }, - { - "$ref": "#/components/schemas/UserRegisteredEvent" - }, - { - "$ref": "#/components/schemas/UserLoginEvent" - }, - { - "$ref": "#/components/schemas/UserLoggedInEvent" - }, - { - "$ref": "#/components/schemas/UserLoggedOutEvent" - }, - { - "$ref": "#/components/schemas/UserUpdatedEvent" - }, - { - "$ref": "#/components/schemas/UserDeletedEvent" - }, - { - "$ref": "#/components/schemas/NotificationCreatedEvent" - }, - { - "$ref": "#/components/schemas/NotificationSentEvent" - }, - { - "$ref": "#/components/schemas/NotificationDeliveredEvent" - }, - { - "$ref": "#/components/schemas/NotificationFailedEvent" - }, - { - "$ref": "#/components/schemas/NotificationReadEvent" - }, - { - "$ref": "#/components/schemas/NotificationAllReadEvent" - }, - { - "$ref": "#/components/schemas/NotificationClickedEvent" - }, - { - "$ref": "#/components/schemas/NotificationPreferencesUpdatedEvent" - }, - { - "$ref": "#/components/schemas/SagaStartedEvent" - }, - { - "$ref": "#/components/schemas/SagaCompletedEvent" - }, - { - "$ref": "#/components/schemas/SagaFailedEvent" - }, - { - "$ref": "#/components/schemas/SagaCancelledEvent" - }, - { - "$ref": "#/components/schemas/SagaCompensatingEvent" - }, - { - "$ref": "#/components/schemas/SagaCompensatedEvent" - }, - { - "$ref": "#/components/schemas/CreatePodCommandEvent" - }, - { - "$ref": "#/components/schemas/DeletePodCommandEvent" - }, - { - "$ref": "#/components/schemas/AllocateResourcesCommandEvent" - }, - { - "$ref": "#/components/schemas/ReleaseResourcesCommandEvent" - }, - { - "$ref": "#/components/schemas/ScriptSavedEvent" - }, - { - "$ref": "#/components/schemas/ScriptDeletedEvent" - }, - { - "$ref": "#/components/schemas/ScriptSharedEvent" - }, - { - "$ref": "#/components/schemas/SecurityViolationEvent" - }, - { - "$ref": "#/components/schemas/RateLimitExceededEvent" - }, - { - "$ref": "#/components/schemas/AuthFailedEvent" - }, - { - "$ref": "#/components/schemas/ResourceLimitExceededEvent" - }, - { - "$ref": "#/components/schemas/QuotaExceededEvent" - }, - { - "$ref": "#/components/schemas/SystemErrorEvent" - }, - { - "$ref": "#/components/schemas/ServiceUnhealthyEvent" - }, - { - "$ref": "#/components/schemas/ServiceRecoveredEvent" - }, - { - "$ref": "#/components/schemas/DLQMessageReceivedEvent" - }, - { - "$ref": "#/components/schemas/DLQMessageRetriedEvent" - }, - { - "$ref": "#/components/schemas/DLQMessageDiscardedEvent" - } - ], - "discriminator": { - "propertyName": "event_type", - "mapping": { - "allocate_resources_command": "#/components/schemas/AllocateResourcesCommandEvent", - "auth_failed": "#/components/schemas/AuthFailedEvent", - "create_pod_command": "#/components/schemas/CreatePodCommandEvent", - "delete_pod_command": "#/components/schemas/DeletePodCommandEvent", - "dlq_message_discarded": "#/components/schemas/DLQMessageDiscardedEvent", - "dlq_message_received": "#/components/schemas/DLQMessageReceivedEvent", - "dlq_message_retried": "#/components/schemas/DLQMessageRetriedEvent", - "execution_accepted": "#/components/schemas/ExecutionAcceptedEvent", - "execution_cancelled": "#/components/schemas/ExecutionCancelledEvent", - "execution_completed": "#/components/schemas/ExecutionCompletedEvent", - "execution_failed": "#/components/schemas/ExecutionFailedEvent", - "execution_queued": "#/components/schemas/ExecutionQueuedEvent", - "execution_requested": "#/components/schemas/ExecutionRequestedEvent", - "execution_running": "#/components/schemas/ExecutionRunningEvent", - "execution_started": "#/components/schemas/ExecutionStartedEvent", - "execution_timeout": "#/components/schemas/ExecutionTimeoutEvent", - "notification_all_read": "#/components/schemas/NotificationAllReadEvent", - "notification_clicked": "#/components/schemas/NotificationClickedEvent", - "notification_created": "#/components/schemas/NotificationCreatedEvent", - "notification_delivered": "#/components/schemas/NotificationDeliveredEvent", - "notification_failed": "#/components/schemas/NotificationFailedEvent", - "notification_preferences_updated": "#/components/schemas/NotificationPreferencesUpdatedEvent", - "notification_read": "#/components/schemas/NotificationReadEvent", - "notification_sent": "#/components/schemas/NotificationSentEvent", - "pod_created": "#/components/schemas/PodCreatedEvent", - "pod_deleted": "#/components/schemas/PodDeletedEvent", - "pod_failed": "#/components/schemas/PodFailedEvent", - "pod_running": "#/components/schemas/PodRunningEvent", - "pod_scheduled": "#/components/schemas/PodScheduledEvent", - "pod_succeeded": "#/components/schemas/PodSucceededEvent", - "pod_terminated": "#/components/schemas/PodTerminatedEvent", - "quota_exceeded": "#/components/schemas/QuotaExceededEvent", - "rate_limit_exceeded": "#/components/schemas/RateLimitExceededEvent", - "release_resources_command": "#/components/schemas/ReleaseResourcesCommandEvent", - "resource_limit_exceeded": "#/components/schemas/ResourceLimitExceededEvent", - "result_failed": "#/components/schemas/ResultFailedEvent", - "result_stored": "#/components/schemas/ResultStoredEvent", - "saga_cancelled": "#/components/schemas/SagaCancelledEvent", - "saga_compensated": "#/components/schemas/SagaCompensatedEvent", - "saga_compensating": "#/components/schemas/SagaCompensatingEvent", - "saga_completed": "#/components/schemas/SagaCompletedEvent", - "saga_failed": "#/components/schemas/SagaFailedEvent", - "saga_started": "#/components/schemas/SagaStartedEvent", - "script_deleted": "#/components/schemas/ScriptDeletedEvent", - "script_saved": "#/components/schemas/ScriptSavedEvent", - "script_shared": "#/components/schemas/ScriptSharedEvent", - "security_violation": "#/components/schemas/SecurityViolationEvent", - "service_recovered": "#/components/schemas/ServiceRecoveredEvent", - "service_unhealthy": "#/components/schemas/ServiceUnhealthyEvent", - "system_error": "#/components/schemas/SystemErrorEvent", - "user_deleted": "#/components/schemas/UserDeletedEvent", - "user_logged_in": "#/components/schemas/UserLoggedInEvent", - "user_logged_out": "#/components/schemas/UserLoggedOutEvent", - "user_login": "#/components/schemas/UserLoginEvent", - "user_registered": "#/components/schemas/UserRegisteredEvent", - "user_settings_updated": "#/components/schemas/UserSettingsUpdatedEvent", - "user_updated": "#/components/schemas/UserUpdatedEvent" - } - } - }, - "type": "array", - "title": "Recent Events", - "default": [] - } - }, - "type": "object", - "required": [ - "user", - "stats", - "derived_counts", - "rate_limit_summary" - ], - "title": "AdminUserOverview" - }, - "AllocateResourcesCommandEvent": { - "properties": { - "event_id": { + "runtime_image": { "type": "string", - "title": "Event Id" + "title": "Runtime Image" }, - "event_type": { - "type": "string", - "enum": [ - "allocate_resources_command" - ], - "const": "allocate_resources_command", - "title": "Event Type", - "default": "allocate_resources_command" - }, - "event_version": { - "type": "string", - "title": "Event Version", - "default": "1.0" + "runtime_command": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Runtime Command" }, - "timestamp": { + "runtime_filename": { "type": "string", - "format": "date-time", - "title": "Timestamp" + "title": "Runtime Filename" }, - "aggregate_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Aggregate Id" + "timeout_seconds": { + "type": "integer", + "title": "Timeout Seconds" }, - "metadata": { - "$ref": "#/components/schemas/EventMetadata" + "cpu_limit": { + "type": "string", + "title": "Cpu Limit" }, - "execution_id": { + "memory_limit": { "type": "string", - "title": "Execution Id" + "title": "Memory Limit" }, "cpu_request": { "type": "string", @@ -5581,6 +4966,10 @@ "memory_request": { "type": "string", "title": "Memory Request" + }, + "priority": { + "$ref": "#/components/schemas/QueuePriority", + "default": "normal" } }, "type": "object", @@ -5591,423 +4980,82 @@ "timestamp", "metadata" ], - "title": "AllocateResourcesCommandEvent" + "title": "CreatePodCommandEvent" }, - "AuthFailedEvent": { + "DLQBatchRetryResponse": { "properties": { - "event_id": { - "type": "string", - "title": "Event Id" - }, - "event_type": { - "type": "string", - "enum": [ - "auth_failed" - ], - "const": "auth_failed", - "title": "Event Type", - "default": "auth_failed" + "total": { + "type": "integer", + "title": "Total" }, - "event_version": { - "type": "string", - "title": "Event Version", - "default": "1.0" + "successful": { + "type": "integer", + "title": "Successful" }, - "timestamp": { - "type": "string", - "format": "date-time", - "title": "Timestamp" + "failed": { + "type": "integer", + "title": "Failed" }, - "aggregate_id": { - "anyOf": [ + "details": { + "items": { + "$ref": "#/components/schemas/DLQRetryResult" + }, + "type": "array", + "title": "Details" + } + }, + "type": "object", + "required": [ + "total", + "successful", + "failed", + "details" + ], + "title": "DLQBatchRetryResponse", + "description": "Response model for batch retry operation." + }, + "DLQMessageDetail": { + "properties": { + "event": { + "oneOf": [ { - "type": "string" + "$ref": "#/components/schemas/ExecutionRequestedEvent" }, { - "type": "null" - } - ], - "title": "Aggregate Id" - }, - "metadata": { - "$ref": "#/components/schemas/EventMetadata" - }, - "username": { - "anyOf": [ + "$ref": "#/components/schemas/ExecutionAcceptedEvent" + }, { - "type": "string" + "$ref": "#/components/schemas/ExecutionQueuedEvent" }, { - "type": "null" - } - ], - "title": "Username" - }, - "reason": { - "type": "string", - "title": "Reason" - }, - "ip_address": { - "anyOf": [ + "$ref": "#/components/schemas/ExecutionStartedEvent" + }, { - "type": "string" + "$ref": "#/components/schemas/ExecutionRunningEvent" }, { - "type": "null" - } - ], - "title": "Ip Address" - } - }, - "type": "object", - "required": [ - "event_id", - "event_type", - "event_version", - "timestamp", - "metadata" - ], - "title": "AuthFailedEvent" - }, - "Body_login_api_v1_auth_login_post": { - "properties": { - "grant_type": { - "anyOf": [ + "$ref": "#/components/schemas/ExecutionCompletedEvent" + }, { - "type": "string", - "pattern": "^password$" + "$ref": "#/components/schemas/ExecutionFailedEvent" }, { - "type": "null" - } - ], - "title": "Grant Type" - }, - "username": { - "type": "string", - "title": "Username" - }, - "password": { - "type": "string", - "format": "password", - "title": "Password" - }, - "scope": { - "type": "string", - "title": "Scope", - "default": "" - }, - "client_id": { - "anyOf": [ + "$ref": "#/components/schemas/ExecutionTimeoutEvent" + }, { - "type": "string" + "$ref": "#/components/schemas/ExecutionCancelledEvent" }, { - "type": "null" - } - ], - "title": "Client Id" - }, - "client_secret": { - "anyOf": [ + "$ref": "#/components/schemas/PodCreatedEvent" + }, { - "type": "string" + "$ref": "#/components/schemas/PodScheduledEvent" }, { - "type": "null" - } - ], - "format": "password", - "title": "Client Secret" - } - }, - "type": "object", - "required": [ - "username", - "password" - ], - "title": "Body_login_api_v1_auth_login_post" - }, - "CancelExecutionRequest": { - "properties": { - "reason": { - "type": "string", - "title": "Reason", - "description": "Reason for cancellation", - "default": "User requested cancellation" - } - }, - "type": "object", - "title": "CancelExecutionRequest", - "description": "Model for cancelling an execution." - }, - "CancelResponse": { - "properties": { - "execution_id": { - "type": "string", - "title": "Execution Id" - }, - "status": { - "type": "string", - "title": "Status" - }, - "message": { - "type": "string", - "title": "Message" - }, - "event_id": { - "anyOf": [ + "$ref": "#/components/schemas/PodRunningEvent" + }, { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Event Id", - "description": "Event ID for the cancellation event, if published" - } - }, - "type": "object", - "required": [ - "execution_id", - "status", - "message" - ], - "title": "CancelResponse", - "description": "Model for execution cancellation response." - }, - "CleanupResponse": { - "properties": { - "removed_sessions": { - "type": "integer", - "title": "Removed Sessions" - }, - "message": { - "type": "string", - "title": "Message" - } - }, - "type": "object", - "required": [ - "removed_sessions", - "message" - ], - "title": "CleanupResponse", - "description": "Response schema for cleanup operations" - }, - "ContainerStatusInfo": { - "properties": { - "name": { - "type": "string", - "title": "Name" - }, - "ready": { - "type": "boolean", - "title": "Ready", - "default": false - }, - "restart_count": { - "type": "integer", - "title": "Restart Count", - "default": 0 - }, - "state": { - "type": "string", - "title": "State", - "default": "unknown" - } - }, - "type": "object", - "required": [ - "name" - ], - "title": "ContainerStatusInfo", - "description": "Container status information from Kubernetes pod." - }, - "CreatePodCommandEvent": { - "properties": { - "event_id": { - "type": "string", - "title": "Event Id" - }, - "event_type": { - "type": "string", - "enum": [ - "create_pod_command" - ], - "const": "create_pod_command", - "title": "Event Type", - "default": "create_pod_command" - }, - "event_version": { - "type": "string", - "title": "Event Version", - "default": "1.0" - }, - "timestamp": { - "type": "string", - "format": "date-time", - "title": "Timestamp" - }, - "aggregate_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Aggregate Id" - }, - "metadata": { - "$ref": "#/components/schemas/EventMetadata" - }, - "saga_id": { - "type": "string", - "title": "Saga Id" - }, - "execution_id": { - "type": "string", - "title": "Execution Id" - }, - "script": { - "type": "string", - "title": "Script" - }, - "language": { - "type": "string", - "title": "Language" - }, - "language_version": { - "type": "string", - "title": "Language Version" - }, - "runtime_image": { - "type": "string", - "title": "Runtime Image" - }, - "runtime_command": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Runtime Command" - }, - "runtime_filename": { - "type": "string", - "title": "Runtime Filename" - }, - "timeout_seconds": { - "type": "integer", - "title": "Timeout Seconds" - }, - "cpu_limit": { - "type": "string", - "title": "Cpu Limit" - }, - "memory_limit": { - "type": "string", - "title": "Memory Limit" - }, - "cpu_request": { - "type": "string", - "title": "Cpu Request" - }, - "memory_request": { - "type": "string", - "title": "Memory Request" - }, - "priority": { - "$ref": "#/components/schemas/QueuePriority", - "default": "normal" - } - }, - "type": "object", - "required": [ - "event_id", - "event_type", - "event_version", - "timestamp", - "metadata" - ], - "title": "CreatePodCommandEvent" - }, - "DLQBatchRetryResponse": { - "properties": { - "total": { - "type": "integer", - "title": "Total" - }, - "successful": { - "type": "integer", - "title": "Successful" - }, - "failed": { - "type": "integer", - "title": "Failed" - }, - "details": { - "items": { - "$ref": "#/components/schemas/DLQRetryResult" - }, - "type": "array", - "title": "Details" - } - }, - "type": "object", - "required": [ - "total", - "successful", - "failed", - "details" - ], - "title": "DLQBatchRetryResponse", - "description": "Response model for batch retry operation." - }, - "DLQMessageDetail": { - "properties": { - "event": { - "oneOf": [ - { - "$ref": "#/components/schemas/ExecutionRequestedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionAcceptedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionQueuedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionStartedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionRunningEvent" - }, - { - "$ref": "#/components/schemas/ExecutionCompletedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionFailedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionTimeoutEvent" - }, - { - "$ref": "#/components/schemas/ExecutionCancelledEvent" - }, - { - "$ref": "#/components/schemas/PodCreatedEvent" - }, - { - "$ref": "#/components/schemas/PodScheduledEvent" - }, - { - "$ref": "#/components/schemas/PodRunningEvent" - }, - { - "$ref": "#/components/schemas/PodSucceededEvent" + "$ref": "#/components/schemas/PodSucceededEvent" }, { "$ref": "#/components/schemas/PodFailedEvent" @@ -6379,1273 +5427,125 @@ "type": "string" }, { - "type": "null" - } - ], - "title": "Aggregate Id" - }, - "metadata": { - "$ref": "#/components/schemas/EventMetadata" - }, - "dlq_event_id": { - "type": "string", - "title": "Dlq Event Id" - }, - "original_topic": { - "type": "string", - "title": "Original Topic" - }, - "original_event_type": { - "type": "string", - "title": "Original Event Type" - }, - "reason": { - "type": "string", - "title": "Reason" - }, - "retry_count": { - "type": "integer", - "title": "Retry Count" - } - }, - "type": "object", - "required": [ - "event_id", - "event_type", - "event_version", - "timestamp", - "metadata" - ], - "title": "DLQMessageDiscardedEvent", - "description": "Emitted when a DLQ message is discarded (max retries exceeded or manual discard)." - }, - "DLQMessageReceivedEvent": { - "properties": { - "event_id": { - "type": "string", - "title": "Event Id" - }, - "event_type": { - "type": "string", - "enum": [ - "dlq_message_received" - ], - "const": "dlq_message_received", - "title": "Event Type", - "default": "dlq_message_received" - }, - "event_version": { - "type": "string", - "title": "Event Version", - "default": "1.0" - }, - "timestamp": { - "type": "string", - "format": "date-time", - "title": "Timestamp" - }, - "aggregate_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Aggregate Id" - }, - "metadata": { - "$ref": "#/components/schemas/EventMetadata" - }, - "dlq_event_id": { - "type": "string", - "title": "Dlq Event Id" - }, - "original_topic": { - "type": "string", - "title": "Original Topic" - }, - "original_event_type": { - "type": "string", - "title": "Original Event Type" - }, - "error": { - "type": "string", - "title": "Error" - }, - "retry_count": { - "type": "integer", - "title": "Retry Count" - }, - "producer_id": { - "type": "string", - "title": "Producer Id" - }, - "failed_at": { - "type": "string", - "format": "date-time", - "title": "Failed At" - } - }, - "type": "object", - "required": [ - "event_id", - "event_type", - "event_version", - "timestamp", - "metadata" - ], - "title": "DLQMessageReceivedEvent", - "description": "Emitted when a message is received and persisted in the DLQ." - }, - "DLQMessageResponse": { - "properties": { - "event": { - "oneOf": [ - { - "$ref": "#/components/schemas/ExecutionRequestedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionAcceptedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionQueuedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionStartedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionRunningEvent" - }, - { - "$ref": "#/components/schemas/ExecutionCompletedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionFailedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionTimeoutEvent" - }, - { - "$ref": "#/components/schemas/ExecutionCancelledEvent" - }, - { - "$ref": "#/components/schemas/PodCreatedEvent" - }, - { - "$ref": "#/components/schemas/PodScheduledEvent" - }, - { - "$ref": "#/components/schemas/PodRunningEvent" - }, - { - "$ref": "#/components/schemas/PodSucceededEvent" - }, - { - "$ref": "#/components/schemas/PodFailedEvent" - }, - { - "$ref": "#/components/schemas/PodTerminatedEvent" - }, - { - "$ref": "#/components/schemas/PodDeletedEvent" - }, - { - "$ref": "#/components/schemas/ResultStoredEvent" - }, - { - "$ref": "#/components/schemas/ResultFailedEvent" - }, - { - "$ref": "#/components/schemas/UserSettingsUpdatedEvent" - }, - { - "$ref": "#/components/schemas/UserRegisteredEvent" - }, - { - "$ref": "#/components/schemas/UserLoginEvent" - }, - { - "$ref": "#/components/schemas/UserLoggedInEvent" - }, - { - "$ref": "#/components/schemas/UserLoggedOutEvent" - }, - { - "$ref": "#/components/schemas/UserUpdatedEvent" - }, - { - "$ref": "#/components/schemas/UserDeletedEvent" - }, - { - "$ref": "#/components/schemas/NotificationCreatedEvent" - }, - { - "$ref": "#/components/schemas/NotificationSentEvent" - }, - { - "$ref": "#/components/schemas/NotificationDeliveredEvent" - }, - { - "$ref": "#/components/schemas/NotificationFailedEvent" - }, - { - "$ref": "#/components/schemas/NotificationReadEvent" - }, - { - "$ref": "#/components/schemas/NotificationAllReadEvent" - }, - { - "$ref": "#/components/schemas/NotificationClickedEvent" - }, - { - "$ref": "#/components/schemas/NotificationPreferencesUpdatedEvent" - }, - { - "$ref": "#/components/schemas/SagaStartedEvent" - }, - { - "$ref": "#/components/schemas/SagaCompletedEvent" - }, - { - "$ref": "#/components/schemas/SagaFailedEvent" - }, - { - "$ref": "#/components/schemas/SagaCancelledEvent" - }, - { - "$ref": "#/components/schemas/SagaCompensatingEvent" - }, - { - "$ref": "#/components/schemas/SagaCompensatedEvent" - }, - { - "$ref": "#/components/schemas/CreatePodCommandEvent" - }, - { - "$ref": "#/components/schemas/DeletePodCommandEvent" - }, - { - "$ref": "#/components/schemas/AllocateResourcesCommandEvent" - }, - { - "$ref": "#/components/schemas/ReleaseResourcesCommandEvent" - }, - { - "$ref": "#/components/schemas/ScriptSavedEvent" - }, - { - "$ref": "#/components/schemas/ScriptDeletedEvent" - }, - { - "$ref": "#/components/schemas/ScriptSharedEvent" - }, - { - "$ref": "#/components/schemas/SecurityViolationEvent" - }, - { - "$ref": "#/components/schemas/RateLimitExceededEvent" - }, - { - "$ref": "#/components/schemas/AuthFailedEvent" - }, - { - "$ref": "#/components/schemas/ResourceLimitExceededEvent" - }, - { - "$ref": "#/components/schemas/QuotaExceededEvent" - }, - { - "$ref": "#/components/schemas/SystemErrorEvent" - }, - { - "$ref": "#/components/schemas/ServiceUnhealthyEvent" - }, - { - "$ref": "#/components/schemas/ServiceRecoveredEvent" - }, - { - "$ref": "#/components/schemas/DLQMessageReceivedEvent" - }, - { - "$ref": "#/components/schemas/DLQMessageRetriedEvent" - }, - { - "$ref": "#/components/schemas/DLQMessageDiscardedEvent" - } - ], - "title": "Event", - "discriminator": { - "propertyName": "event_type", - "mapping": { - "allocate_resources_command": "#/components/schemas/AllocateResourcesCommandEvent", - "auth_failed": "#/components/schemas/AuthFailedEvent", - "create_pod_command": "#/components/schemas/CreatePodCommandEvent", - "delete_pod_command": "#/components/schemas/DeletePodCommandEvent", - "dlq_message_discarded": "#/components/schemas/DLQMessageDiscardedEvent", - "dlq_message_received": "#/components/schemas/DLQMessageReceivedEvent", - "dlq_message_retried": "#/components/schemas/DLQMessageRetriedEvent", - "execution_accepted": "#/components/schemas/ExecutionAcceptedEvent", - "execution_cancelled": "#/components/schemas/ExecutionCancelledEvent", - "execution_completed": "#/components/schemas/ExecutionCompletedEvent", - "execution_failed": "#/components/schemas/ExecutionFailedEvent", - "execution_queued": "#/components/schemas/ExecutionQueuedEvent", - "execution_requested": "#/components/schemas/ExecutionRequestedEvent", - "execution_running": "#/components/schemas/ExecutionRunningEvent", - "execution_started": "#/components/schemas/ExecutionStartedEvent", - "execution_timeout": "#/components/schemas/ExecutionTimeoutEvent", - "notification_all_read": "#/components/schemas/NotificationAllReadEvent", - "notification_clicked": "#/components/schemas/NotificationClickedEvent", - "notification_created": "#/components/schemas/NotificationCreatedEvent", - "notification_delivered": "#/components/schemas/NotificationDeliveredEvent", - "notification_failed": "#/components/schemas/NotificationFailedEvent", - "notification_preferences_updated": "#/components/schemas/NotificationPreferencesUpdatedEvent", - "notification_read": "#/components/schemas/NotificationReadEvent", - "notification_sent": "#/components/schemas/NotificationSentEvent", - "pod_created": "#/components/schemas/PodCreatedEvent", - "pod_deleted": "#/components/schemas/PodDeletedEvent", - "pod_failed": "#/components/schemas/PodFailedEvent", - "pod_running": "#/components/schemas/PodRunningEvent", - "pod_scheduled": "#/components/schemas/PodScheduledEvent", - "pod_succeeded": "#/components/schemas/PodSucceededEvent", - "pod_terminated": "#/components/schemas/PodTerminatedEvent", - "quota_exceeded": "#/components/schemas/QuotaExceededEvent", - "rate_limit_exceeded": "#/components/schemas/RateLimitExceededEvent", - "release_resources_command": "#/components/schemas/ReleaseResourcesCommandEvent", - "resource_limit_exceeded": "#/components/schemas/ResourceLimitExceededEvent", - "result_failed": "#/components/schemas/ResultFailedEvent", - "result_stored": "#/components/schemas/ResultStoredEvent", - "saga_cancelled": "#/components/schemas/SagaCancelledEvent", - "saga_compensated": "#/components/schemas/SagaCompensatedEvent", - "saga_compensating": "#/components/schemas/SagaCompensatingEvent", - "saga_completed": "#/components/schemas/SagaCompletedEvent", - "saga_failed": "#/components/schemas/SagaFailedEvent", - "saga_started": "#/components/schemas/SagaStartedEvent", - "script_deleted": "#/components/schemas/ScriptDeletedEvent", - "script_saved": "#/components/schemas/ScriptSavedEvent", - "script_shared": "#/components/schemas/ScriptSharedEvent", - "security_violation": "#/components/schemas/SecurityViolationEvent", - "service_recovered": "#/components/schemas/ServiceRecoveredEvent", - "service_unhealthy": "#/components/schemas/ServiceUnhealthyEvent", - "system_error": "#/components/schemas/SystemErrorEvent", - "user_deleted": "#/components/schemas/UserDeletedEvent", - "user_logged_in": "#/components/schemas/UserLoggedInEvent", - "user_logged_out": "#/components/schemas/UserLoggedOutEvent", - "user_login": "#/components/schemas/UserLoginEvent", - "user_registered": "#/components/schemas/UserRegisteredEvent", - "user_settings_updated": "#/components/schemas/UserSettingsUpdatedEvent", - "user_updated": "#/components/schemas/UserUpdatedEvent" - } - } - }, - "original_topic": { - "type": "string", - "title": "Original Topic" - }, - "error": { - "type": "string", - "title": "Error" - }, - "retry_count": { - "type": "integer", - "title": "Retry Count" - }, - "failed_at": { - "type": "string", - "format": "date-time", - "title": "Failed At" - }, - "status": { - "$ref": "#/components/schemas/DLQMessageStatus" - }, - "producer_id": { - "type": "string", - "title": "Producer Id" - }, - "dlq_offset": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Dlq Offset" - }, - "dlq_partition": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Dlq Partition" - }, - "last_error": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Last Error" - }, - "next_retry_at": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "title": "Next Retry At" - } - }, - "type": "object", - "required": [ - "event", - "original_topic", - "error", - "retry_count", - "failed_at", - "status", - "producer_id" - ], - "title": "DLQMessageResponse", - "description": "Response model for a DLQ message. Mirrors DLQMessage for direct model_validate." - }, - "DLQMessageRetriedEvent": { - "properties": { - "event_id": { - "type": "string", - "title": "Event Id" - }, - "event_type": { - "type": "string", - "enum": [ - "dlq_message_retried" - ], - "const": "dlq_message_retried", - "title": "Event Type", - "default": "dlq_message_retried" - }, - "event_version": { - "type": "string", - "title": "Event Version", - "default": "1.0" - }, - "timestamp": { - "type": "string", - "format": "date-time", - "title": "Timestamp" - }, - "aggregate_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Aggregate Id" - }, - "metadata": { - "$ref": "#/components/schemas/EventMetadata" - }, - "dlq_event_id": { - "type": "string", - "title": "Dlq Event Id" - }, - "original_topic": { - "type": "string", - "title": "Original Topic" - }, - "original_event_type": { - "type": "string", - "title": "Original Event Type" - }, - "retry_count": { - "type": "integer", - "title": "Retry Count" - }, - "retry_topic": { - "type": "string", - "title": "Retry Topic" - } - }, - "type": "object", - "required": [ - "event_id", - "event_type", - "event_version", - "timestamp", - "metadata" - ], - "title": "DLQMessageRetriedEvent", - "description": "Emitted when a DLQ message is retried." - }, - "DLQMessageStatus": { - "type": "string", - "enum": [ - "pending", - "scheduled", - "retried", - "discarded" - ], - "title": "DLQMessageStatus", - "description": "Status of a message in the Dead Letter Queue." - }, - "DLQMessagesResponse": { - "properties": { - "messages": { - "items": { - "$ref": "#/components/schemas/DLQMessageResponse" - }, - "type": "array", - "title": "Messages" - }, - "total": { - "type": "integer", - "title": "Total" - }, - "offset": { - "type": "integer", - "title": "Offset" - }, - "limit": { - "type": "integer", - "title": "Limit" - } - }, - "type": "object", - "required": [ - "messages", - "total", - "offset", - "limit" - ], - "title": "DLQMessagesResponse", - "description": "Response model for listing DLQ messages." - }, - "DLQRetryResult": { - "properties": { - "event_id": { - "type": "string", - "title": "Event Id" - }, - "status": { - "type": "string", - "title": "Status" - }, - "error": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Error" - } - }, - "type": "object", - "required": [ - "event_id", - "status" - ], - "title": "DLQRetryResult" - }, - "DLQTopicSummaryResponse": { - "properties": { - "topic": { - "type": "string", - "title": "Topic" - }, - "total_messages": { - "type": "integer", - "title": "Total Messages" - }, - "status_breakdown": { - "additionalProperties": { - "type": "integer" - }, - "type": "object", - "title": "Status Breakdown" - }, - "oldest_message": { - "type": "string", - "format": "date-time", - "title": "Oldest Message" - }, - "newest_message": { - "type": "string", - "format": "date-time", - "title": "Newest Message" - }, - "avg_retry_count": { - "type": "number", - "title": "Avg Retry Count" - }, - "max_retry_count": { - "type": "integer", - "title": "Max Retry Count" - } - }, - "type": "object", - "required": [ - "topic", - "total_messages", - "status_breakdown", - "oldest_message", - "newest_message", - "avg_retry_count", - "max_retry_count" - ], - "title": "DLQTopicSummaryResponse", - "description": "Response model for topic summary." - }, - "DeleteEventResponse": { - "properties": { - "message": { - "type": "string", - "title": "Message" - }, - "event_id": { - "type": "string", - "title": "Event Id" - }, - "deleted_at": { - "type": "string", - "format": "date-time", - "title": "Deleted At" - } - }, - "type": "object", - "required": [ - "message", - "event_id", - "deleted_at" - ], - "title": "DeleteEventResponse", - "description": "Response model for deleting events" - }, - "DeleteNotificationResponse": { - "properties": { - "message": { - "type": "string", - "title": "Message" - } - }, - "type": "object", - "required": [ - "message" - ], - "title": "DeleteNotificationResponse", - "description": "Response schema for notification deletion" - }, - "DeletePodCommandEvent": { - "properties": { - "event_id": { - "type": "string", - "title": "Event Id" - }, - "event_type": { - "type": "string", - "enum": [ - "delete_pod_command" - ], - "const": "delete_pod_command", - "title": "Event Type", - "default": "delete_pod_command" - }, - "event_version": { - "type": "string", - "title": "Event Version", - "default": "1.0" - }, - "timestamp": { - "type": "string", - "format": "date-time", - "title": "Timestamp" - }, - "aggregate_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Aggregate Id" - }, - "metadata": { - "$ref": "#/components/schemas/EventMetadata" - }, - "saga_id": { - "type": "string", - "title": "Saga Id" - }, - "execution_id": { - "type": "string", - "title": "Execution Id" - }, - "reason": { - "type": "string", - "title": "Reason" - }, - "pod_name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Pod Name" - }, - "namespace": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Namespace" - } - }, - "type": "object", - "required": [ - "event_id", - "event_type", - "event_version", - "timestamp", - "metadata" - ], - "title": "DeletePodCommandEvent" - }, - "DeleteResponse": { - "properties": { - "message": { - "type": "string", - "title": "Message" - }, - "execution_id": { - "type": "string", - "title": "Execution Id" - } - }, - "type": "object", - "required": [ - "message", - "execution_id" - ], - "title": "DeleteResponse", - "description": "Model for execution deletion response." - }, - "DeleteUserResponse": { - "properties": { - "user_deleted": { - "type": "boolean", - "title": "User Deleted" - }, - "executions": { - "type": "integer", - "title": "Executions", - "default": 0 - }, - "saved_scripts": { - "type": "integer", - "title": "Saved Scripts", - "default": 0 - }, - "notifications": { - "type": "integer", - "title": "Notifications", - "default": 0 - }, - "user_settings": { - "type": "integer", - "title": "User Settings", - "default": 0 - }, - "events": { - "type": "integer", - "title": "Events", - "default": 0 - }, - "sagas": { - "type": "integer", - "title": "Sagas", - "default": 0 - } - }, - "type": "object", - "required": [ - "user_deleted" - ], - "title": "DeleteUserResponse", - "description": "Response model for user deletion." - }, - "DerivedCounts": { - "properties": { - "succeeded": { - "type": "integer", - "title": "Succeeded", - "default": 0 - }, - "failed": { - "type": "integer", - "title": "Failed", - "default": 0 - }, - "timeout": { - "type": "integer", - "title": "Timeout", - "default": 0 - }, - "cancelled": { - "type": "integer", - "title": "Cancelled", - "default": 0 - }, - "terminal_total": { - "type": "integer", - "title": "Terminal Total", - "default": 0 - } - }, - "type": "object", - "title": "DerivedCounts" - }, - "EditorSettings": { - "properties": { - "theme": { - "type": "string", - "title": "Theme", - "default": "auto" - }, - "font_size": { - "type": "integer", - "title": "Font Size", - "default": 14 - }, - "tab_size": { - "type": "integer", - "title": "Tab Size", - "default": 4 - }, - "use_tabs": { - "type": "boolean", - "title": "Use Tabs", - "default": false - }, - "word_wrap": { - "type": "boolean", - "title": "Word Wrap", - "default": true - }, - "show_line_numbers": { - "type": "boolean", - "title": "Show Line Numbers", - "default": true - } - }, - "type": "object", - "title": "EditorSettings", - "description": "Code editor preferences" - }, - "EndpointGroup": { - "type": "string", - "enum": [ - "execution", - "admin", - "sse", - "websocket", - "auth", - "public", - "api" - ], - "title": "EndpointGroup" - }, - "EndpointUsageStats": { - "properties": { - "algorithm": { - "$ref": "#/components/schemas/RateLimitAlgorithm" - }, - "remaining": { - "type": "integer", - "title": "Remaining" - } - }, - "type": "object", - "required": [ - "algorithm", - "remaining" - ], - "title": "EndpointUsageStats", - "description": "Usage statistics for a single endpoint (IETF RateLimit-style)." - }, - "Environment": { - "type": "string", - "enum": [ - "development", - "staging", - "production", - "test" - ], - "title": "Environment", - "description": "Deployment environments." - }, - "ErrorResponse": { - "properties": { - "detail": { - "type": "string", - "title": "Detail", - "description": "Human-readable error message" - }, - "type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Type", - "description": "Error type identifier" - } - }, - "type": "object", - "required": [ - "detail" - ], - "title": "ErrorResponse" - }, - "EventBrowseRequest": { - "properties": { - "filters": { - "$ref": "#/components/schemas/EventFilter" - }, - "skip": { - "type": "integer", - "title": "Skip", - "default": 0 - }, - "limit": { - "type": "integer", - "maximum": 500.0, - "title": "Limit", - "default": 50 - } - }, - "type": "object", - "required": [ - "filters" - ], - "title": "EventBrowseRequest", - "description": "Request model for browsing events" - }, - "EventBrowseResponse": { - "properties": { - "events": { - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/ExecutionRequestedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionAcceptedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionQueuedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionStartedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionRunningEvent" - }, - { - "$ref": "#/components/schemas/ExecutionCompletedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionFailedEvent" - }, - { - "$ref": "#/components/schemas/ExecutionTimeoutEvent" - }, - { - "$ref": "#/components/schemas/ExecutionCancelledEvent" - }, - { - "$ref": "#/components/schemas/PodCreatedEvent" - }, - { - "$ref": "#/components/schemas/PodScheduledEvent" - }, - { - "$ref": "#/components/schemas/PodRunningEvent" - }, - { - "$ref": "#/components/schemas/PodSucceededEvent" - }, - { - "$ref": "#/components/schemas/PodFailedEvent" - }, - { - "$ref": "#/components/schemas/PodTerminatedEvent" - }, - { - "$ref": "#/components/schemas/PodDeletedEvent" - }, - { - "$ref": "#/components/schemas/ResultStoredEvent" - }, - { - "$ref": "#/components/schemas/ResultFailedEvent" - }, - { - "$ref": "#/components/schemas/UserSettingsUpdatedEvent" - }, - { - "$ref": "#/components/schemas/UserRegisteredEvent" - }, - { - "$ref": "#/components/schemas/UserLoginEvent" - }, - { - "$ref": "#/components/schemas/UserLoggedInEvent" - }, - { - "$ref": "#/components/schemas/UserLoggedOutEvent" - }, - { - "$ref": "#/components/schemas/UserUpdatedEvent" - }, - { - "$ref": "#/components/schemas/UserDeletedEvent" - }, - { - "$ref": "#/components/schemas/NotificationCreatedEvent" - }, - { - "$ref": "#/components/schemas/NotificationSentEvent" - }, - { - "$ref": "#/components/schemas/NotificationDeliveredEvent" - }, - { - "$ref": "#/components/schemas/NotificationFailedEvent" - }, - { - "$ref": "#/components/schemas/NotificationReadEvent" - }, - { - "$ref": "#/components/schemas/NotificationAllReadEvent" - }, - { - "$ref": "#/components/schemas/NotificationClickedEvent" - }, - { - "$ref": "#/components/schemas/NotificationPreferencesUpdatedEvent" - }, - { - "$ref": "#/components/schemas/SagaStartedEvent" - }, - { - "$ref": "#/components/schemas/SagaCompletedEvent" - }, - { - "$ref": "#/components/schemas/SagaFailedEvent" - }, - { - "$ref": "#/components/schemas/SagaCancelledEvent" - }, - { - "$ref": "#/components/schemas/SagaCompensatingEvent" - }, - { - "$ref": "#/components/schemas/SagaCompensatedEvent" - }, - { - "$ref": "#/components/schemas/CreatePodCommandEvent" - }, - { - "$ref": "#/components/schemas/DeletePodCommandEvent" - }, - { - "$ref": "#/components/schemas/AllocateResourcesCommandEvent" - }, - { - "$ref": "#/components/schemas/ReleaseResourcesCommandEvent" - }, - { - "$ref": "#/components/schemas/ScriptSavedEvent" - }, - { - "$ref": "#/components/schemas/ScriptDeletedEvent" - }, - { - "$ref": "#/components/schemas/ScriptSharedEvent" - }, - { - "$ref": "#/components/schemas/SecurityViolationEvent" - }, - { - "$ref": "#/components/schemas/RateLimitExceededEvent" - }, - { - "$ref": "#/components/schemas/AuthFailedEvent" - }, - { - "$ref": "#/components/schemas/ResourceLimitExceededEvent" - }, - { - "$ref": "#/components/schemas/QuotaExceededEvent" - }, - { - "$ref": "#/components/schemas/SystemErrorEvent" - }, - { - "$ref": "#/components/schemas/ServiceUnhealthyEvent" - }, - { - "$ref": "#/components/schemas/ServiceRecoveredEvent" - }, - { - "$ref": "#/components/schemas/DLQMessageReceivedEvent" - }, - { - "$ref": "#/components/schemas/DLQMessageRetriedEvent" - }, - { - "$ref": "#/components/schemas/DLQMessageDiscardedEvent" - } - ], - "discriminator": { - "propertyName": "event_type", - "mapping": { - "allocate_resources_command": "#/components/schemas/AllocateResourcesCommandEvent", - "auth_failed": "#/components/schemas/AuthFailedEvent", - "create_pod_command": "#/components/schemas/CreatePodCommandEvent", - "delete_pod_command": "#/components/schemas/DeletePodCommandEvent", - "dlq_message_discarded": "#/components/schemas/DLQMessageDiscardedEvent", - "dlq_message_received": "#/components/schemas/DLQMessageReceivedEvent", - "dlq_message_retried": "#/components/schemas/DLQMessageRetriedEvent", - "execution_accepted": "#/components/schemas/ExecutionAcceptedEvent", - "execution_cancelled": "#/components/schemas/ExecutionCancelledEvent", - "execution_completed": "#/components/schemas/ExecutionCompletedEvent", - "execution_failed": "#/components/schemas/ExecutionFailedEvent", - "execution_queued": "#/components/schemas/ExecutionQueuedEvent", - "execution_requested": "#/components/schemas/ExecutionRequestedEvent", - "execution_running": "#/components/schemas/ExecutionRunningEvent", - "execution_started": "#/components/schemas/ExecutionStartedEvent", - "execution_timeout": "#/components/schemas/ExecutionTimeoutEvent", - "notification_all_read": "#/components/schemas/NotificationAllReadEvent", - "notification_clicked": "#/components/schemas/NotificationClickedEvent", - "notification_created": "#/components/schemas/NotificationCreatedEvent", - "notification_delivered": "#/components/schemas/NotificationDeliveredEvent", - "notification_failed": "#/components/schemas/NotificationFailedEvent", - "notification_preferences_updated": "#/components/schemas/NotificationPreferencesUpdatedEvent", - "notification_read": "#/components/schemas/NotificationReadEvent", - "notification_sent": "#/components/schemas/NotificationSentEvent", - "pod_created": "#/components/schemas/PodCreatedEvent", - "pod_deleted": "#/components/schemas/PodDeletedEvent", - "pod_failed": "#/components/schemas/PodFailedEvent", - "pod_running": "#/components/schemas/PodRunningEvent", - "pod_scheduled": "#/components/schemas/PodScheduledEvent", - "pod_succeeded": "#/components/schemas/PodSucceededEvent", - "pod_terminated": "#/components/schemas/PodTerminatedEvent", - "quota_exceeded": "#/components/schemas/QuotaExceededEvent", - "rate_limit_exceeded": "#/components/schemas/RateLimitExceededEvent", - "release_resources_command": "#/components/schemas/ReleaseResourcesCommandEvent", - "resource_limit_exceeded": "#/components/schemas/ResourceLimitExceededEvent", - "result_failed": "#/components/schemas/ResultFailedEvent", - "result_stored": "#/components/schemas/ResultStoredEvent", - "saga_cancelled": "#/components/schemas/SagaCancelledEvent", - "saga_compensated": "#/components/schemas/SagaCompensatedEvent", - "saga_compensating": "#/components/schemas/SagaCompensatingEvent", - "saga_completed": "#/components/schemas/SagaCompletedEvent", - "saga_failed": "#/components/schemas/SagaFailedEvent", - "saga_started": "#/components/schemas/SagaStartedEvent", - "script_deleted": "#/components/schemas/ScriptDeletedEvent", - "script_saved": "#/components/schemas/ScriptSavedEvent", - "script_shared": "#/components/schemas/ScriptSharedEvent", - "security_violation": "#/components/schemas/SecurityViolationEvent", - "service_recovered": "#/components/schemas/ServiceRecoveredEvent", - "service_unhealthy": "#/components/schemas/ServiceUnhealthyEvent", - "system_error": "#/components/schemas/SystemErrorEvent", - "user_deleted": "#/components/schemas/UserDeletedEvent", - "user_logged_in": "#/components/schemas/UserLoggedInEvent", - "user_logged_out": "#/components/schemas/UserLoggedOutEvent", - "user_login": "#/components/schemas/UserLoginEvent", - "user_registered": "#/components/schemas/UserRegisteredEvent", - "user_settings_updated": "#/components/schemas/UserSettingsUpdatedEvent", - "user_updated": "#/components/schemas/UserUpdatedEvent" - } + "type": "null" } - }, - "type": "array", - "title": "Events" + ], + "title": "Aggregate Id" }, - "total": { - "type": "integer", - "title": "Total" + "metadata": { + "$ref": "#/components/schemas/EventMetadata" }, - "skip": { - "type": "integer", - "title": "Skip" + "dlq_event_id": { + "type": "string", + "title": "Dlq Event Id" }, - "limit": { + "original_topic": { + "type": "string", + "title": "Original Topic" + }, + "original_event_type": { + "$ref": "#/components/schemas/EventType" + }, + "reason": { + "type": "string", + "title": "Reason" + }, + "retry_count": { "type": "integer", - "title": "Limit" + "title": "Retry Count" } }, "type": "object", "required": [ - "events", - "total", - "skip", - "limit" + "event_id", + "event_type", + "event_version", + "timestamp", + "metadata" ], - "title": "EventBrowseResponse", - "description": "Response model for browsing events" + "title": "DLQMessageDiscardedEvent", + "description": "Emitted when a DLQ message is discarded (max retries exceeded or manual discard)." }, - "EventDeleteResponse": { + "DLQMessageReceivedEvent": { "properties": { - "message": { - "type": "string", - "title": "Message" - }, "event_id": { "type": "string", "title": "Event Id" + }, + "event_type": { + "type": "string", + "enum": [ + "dlq_message_received" + ], + "const": "dlq_message_received", + "title": "Event Type", + "default": "dlq_message_received" + }, + "event_version": { + "type": "string", + "title": "Event Version", + "default": "1.0" + }, + "timestamp": { + "type": "string", + "format": "date-time", + "title": "Timestamp" + }, + "aggregate_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Aggregate Id" + }, + "metadata": { + "$ref": "#/components/schemas/EventMetadata" + }, + "dlq_event_id": { + "type": "string", + "title": "Dlq Event Id" + }, + "original_topic": { + "type": "string", + "title": "Original Topic" + }, + "original_event_type": { + "$ref": "#/components/schemas/EventType" + }, + "error": { + "type": "string", + "title": "Error" + }, + "retry_count": { + "type": "integer", + "title": "Retry Count" + }, + "producer_id": { + "type": "string", + "title": "Producer Id" + }, + "failed_at": { + "type": "string", + "format": "date-time", + "title": "Failed At" } }, "type": "object", "required": [ - "message", - "event_id" + "event_id", + "event_type", + "event_version", + "timestamp", + "metadata" ], - "title": "EventDeleteResponse", - "description": "Response model for event deletion" + "title": "DLQMessageReceivedEvent", + "description": "Emitted when a message is received and persisted in the DLQ." }, - "EventDetailResponse": { + "DLQMessageResponse": { "properties": { "event": { "oneOf": [ @@ -7818,112 +5718,385 @@ "$ref": "#/components/schemas/DLQMessageRetriedEvent" }, { - "$ref": "#/components/schemas/DLQMessageDiscardedEvent" + "$ref": "#/components/schemas/DLQMessageDiscardedEvent" + } + ], + "title": "Event", + "discriminator": { + "propertyName": "event_type", + "mapping": { + "allocate_resources_command": "#/components/schemas/AllocateResourcesCommandEvent", + "auth_failed": "#/components/schemas/AuthFailedEvent", + "create_pod_command": "#/components/schemas/CreatePodCommandEvent", + "delete_pod_command": "#/components/schemas/DeletePodCommandEvent", + "dlq_message_discarded": "#/components/schemas/DLQMessageDiscardedEvent", + "dlq_message_received": "#/components/schemas/DLQMessageReceivedEvent", + "dlq_message_retried": "#/components/schemas/DLQMessageRetriedEvent", + "execution_accepted": "#/components/schemas/ExecutionAcceptedEvent", + "execution_cancelled": "#/components/schemas/ExecutionCancelledEvent", + "execution_completed": "#/components/schemas/ExecutionCompletedEvent", + "execution_failed": "#/components/schemas/ExecutionFailedEvent", + "execution_queued": "#/components/schemas/ExecutionQueuedEvent", + "execution_requested": "#/components/schemas/ExecutionRequestedEvent", + "execution_running": "#/components/schemas/ExecutionRunningEvent", + "execution_started": "#/components/schemas/ExecutionStartedEvent", + "execution_timeout": "#/components/schemas/ExecutionTimeoutEvent", + "notification_all_read": "#/components/schemas/NotificationAllReadEvent", + "notification_clicked": "#/components/schemas/NotificationClickedEvent", + "notification_created": "#/components/schemas/NotificationCreatedEvent", + "notification_delivered": "#/components/schemas/NotificationDeliveredEvent", + "notification_failed": "#/components/schemas/NotificationFailedEvent", + "notification_preferences_updated": "#/components/schemas/NotificationPreferencesUpdatedEvent", + "notification_read": "#/components/schemas/NotificationReadEvent", + "notification_sent": "#/components/schemas/NotificationSentEvent", + "pod_created": "#/components/schemas/PodCreatedEvent", + "pod_deleted": "#/components/schemas/PodDeletedEvent", + "pod_failed": "#/components/schemas/PodFailedEvent", + "pod_running": "#/components/schemas/PodRunningEvent", + "pod_scheduled": "#/components/schemas/PodScheduledEvent", + "pod_succeeded": "#/components/schemas/PodSucceededEvent", + "pod_terminated": "#/components/schemas/PodTerminatedEvent", + "quota_exceeded": "#/components/schemas/QuotaExceededEvent", + "rate_limit_exceeded": "#/components/schemas/RateLimitExceededEvent", + "release_resources_command": "#/components/schemas/ReleaseResourcesCommandEvent", + "resource_limit_exceeded": "#/components/schemas/ResourceLimitExceededEvent", + "result_failed": "#/components/schemas/ResultFailedEvent", + "result_stored": "#/components/schemas/ResultStoredEvent", + "saga_cancelled": "#/components/schemas/SagaCancelledEvent", + "saga_compensated": "#/components/schemas/SagaCompensatedEvent", + "saga_compensating": "#/components/schemas/SagaCompensatingEvent", + "saga_completed": "#/components/schemas/SagaCompletedEvent", + "saga_failed": "#/components/schemas/SagaFailedEvent", + "saga_started": "#/components/schemas/SagaStartedEvent", + "script_deleted": "#/components/schemas/ScriptDeletedEvent", + "script_saved": "#/components/schemas/ScriptSavedEvent", + "script_shared": "#/components/schemas/ScriptSharedEvent", + "security_violation": "#/components/schemas/SecurityViolationEvent", + "service_recovered": "#/components/schemas/ServiceRecoveredEvent", + "service_unhealthy": "#/components/schemas/ServiceUnhealthyEvent", + "system_error": "#/components/schemas/SystemErrorEvent", + "user_deleted": "#/components/schemas/UserDeletedEvent", + "user_logged_in": "#/components/schemas/UserLoggedInEvent", + "user_logged_out": "#/components/schemas/UserLoggedOutEvent", + "user_login": "#/components/schemas/UserLoginEvent", + "user_registered": "#/components/schemas/UserRegisteredEvent", + "user_settings_updated": "#/components/schemas/UserSettingsUpdatedEvent", + "user_updated": "#/components/schemas/UserUpdatedEvent" + } + } + }, + "original_topic": { + "type": "string", + "title": "Original Topic" + }, + "error": { + "type": "string", + "title": "Error" + }, + "retry_count": { + "type": "integer", + "title": "Retry Count" + }, + "failed_at": { + "type": "string", + "format": "date-time", + "title": "Failed At" + }, + "status": { + "$ref": "#/components/schemas/DLQMessageStatus" + }, + "producer_id": { + "type": "string", + "title": "Producer Id" + }, + "dlq_offset": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Dlq Offset" + }, + "dlq_partition": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Dlq Partition" + }, + "last_error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Last Error" + }, + "next_retry_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" } ], - "title": "Event", - "discriminator": { - "propertyName": "event_type", - "mapping": { - "allocate_resources_command": "#/components/schemas/AllocateResourcesCommandEvent", - "auth_failed": "#/components/schemas/AuthFailedEvent", - "create_pod_command": "#/components/schemas/CreatePodCommandEvent", - "delete_pod_command": "#/components/schemas/DeletePodCommandEvent", - "dlq_message_discarded": "#/components/schemas/DLQMessageDiscardedEvent", - "dlq_message_received": "#/components/schemas/DLQMessageReceivedEvent", - "dlq_message_retried": "#/components/schemas/DLQMessageRetriedEvent", - "execution_accepted": "#/components/schemas/ExecutionAcceptedEvent", - "execution_cancelled": "#/components/schemas/ExecutionCancelledEvent", - "execution_completed": "#/components/schemas/ExecutionCompletedEvent", - "execution_failed": "#/components/schemas/ExecutionFailedEvent", - "execution_queued": "#/components/schemas/ExecutionQueuedEvent", - "execution_requested": "#/components/schemas/ExecutionRequestedEvent", - "execution_running": "#/components/schemas/ExecutionRunningEvent", - "execution_started": "#/components/schemas/ExecutionStartedEvent", - "execution_timeout": "#/components/schemas/ExecutionTimeoutEvent", - "notification_all_read": "#/components/schemas/NotificationAllReadEvent", - "notification_clicked": "#/components/schemas/NotificationClickedEvent", - "notification_created": "#/components/schemas/NotificationCreatedEvent", - "notification_delivered": "#/components/schemas/NotificationDeliveredEvent", - "notification_failed": "#/components/schemas/NotificationFailedEvent", - "notification_preferences_updated": "#/components/schemas/NotificationPreferencesUpdatedEvent", - "notification_read": "#/components/schemas/NotificationReadEvent", - "notification_sent": "#/components/schemas/NotificationSentEvent", - "pod_created": "#/components/schemas/PodCreatedEvent", - "pod_deleted": "#/components/schemas/PodDeletedEvent", - "pod_failed": "#/components/schemas/PodFailedEvent", - "pod_running": "#/components/schemas/PodRunningEvent", - "pod_scheduled": "#/components/schemas/PodScheduledEvent", - "pod_succeeded": "#/components/schemas/PodSucceededEvent", - "pod_terminated": "#/components/schemas/PodTerminatedEvent", - "quota_exceeded": "#/components/schemas/QuotaExceededEvent", - "rate_limit_exceeded": "#/components/schemas/RateLimitExceededEvent", - "release_resources_command": "#/components/schemas/ReleaseResourcesCommandEvent", - "resource_limit_exceeded": "#/components/schemas/ResourceLimitExceededEvent", - "result_failed": "#/components/schemas/ResultFailedEvent", - "result_stored": "#/components/schemas/ResultStoredEvent", - "saga_cancelled": "#/components/schemas/SagaCancelledEvent", - "saga_compensated": "#/components/schemas/SagaCompensatedEvent", - "saga_compensating": "#/components/schemas/SagaCompensatingEvent", - "saga_completed": "#/components/schemas/SagaCompletedEvent", - "saga_failed": "#/components/schemas/SagaFailedEvent", - "saga_started": "#/components/schemas/SagaStartedEvent", - "script_deleted": "#/components/schemas/ScriptDeletedEvent", - "script_saved": "#/components/schemas/ScriptSavedEvent", - "script_shared": "#/components/schemas/ScriptSharedEvent", - "security_violation": "#/components/schemas/SecurityViolationEvent", - "service_recovered": "#/components/schemas/ServiceRecoveredEvent", - "service_unhealthy": "#/components/schemas/ServiceUnhealthyEvent", - "system_error": "#/components/schemas/SystemErrorEvent", - "user_deleted": "#/components/schemas/UserDeletedEvent", - "user_logged_in": "#/components/schemas/UserLoggedInEvent", - "user_logged_out": "#/components/schemas/UserLoggedOutEvent", - "user_login": "#/components/schemas/UserLoginEvent", - "user_registered": "#/components/schemas/UserRegisteredEvent", - "user_settings_updated": "#/components/schemas/UserSettingsUpdatedEvent", - "user_updated": "#/components/schemas/UserUpdatedEvent" + "title": "Next Retry At" + } + }, + "type": "object", + "required": [ + "event", + "original_topic", + "error", + "retry_count", + "failed_at", + "status", + "producer_id" + ], + "title": "DLQMessageResponse", + "description": "Response model for a DLQ message. Mirrors DLQMessage for direct model_validate." + }, + "DLQMessageRetriedEvent": { + "properties": { + "event_id": { + "type": "string", + "title": "Event Id" + }, + "event_type": { + "type": "string", + "enum": [ + "dlq_message_retried" + ], + "const": "dlq_message_retried", + "title": "Event Type", + "default": "dlq_message_retried" + }, + "event_version": { + "type": "string", + "title": "Event Version", + "default": "1.0" + }, + "timestamp": { + "type": "string", + "format": "date-time", + "title": "Timestamp" + }, + "aggregate_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" } - } + ], + "title": "Aggregate Id" }, - "related_events": { + "metadata": { + "$ref": "#/components/schemas/EventMetadata" + }, + "dlq_event_id": { + "type": "string", + "title": "Dlq Event Id" + }, + "original_topic": { + "type": "string", + "title": "Original Topic" + }, + "original_event_type": { + "$ref": "#/components/schemas/EventType" + }, + "retry_count": { + "type": "integer", + "title": "Retry Count" + }, + "retry_topic": { + "type": "string", + "title": "Retry Topic" + } + }, + "type": "object", + "required": [ + "event_id", + "event_type", + "event_version", + "timestamp", + "metadata" + ], + "title": "DLQMessageRetriedEvent", + "description": "Emitted when a DLQ message is retried." + }, + "DLQMessageStatus": { + "type": "string", + "enum": [ + "pending", + "scheduled", + "retried", + "discarded" + ], + "title": "DLQMessageStatus", + "description": "Status of a message in the Dead Letter Queue." + }, + "DLQMessagesResponse": { + "properties": { + "messages": { "items": { - "$ref": "#/components/schemas/EventSummary" + "$ref": "#/components/schemas/DLQMessageResponse" }, "type": "array", - "title": "Related Events" + "title": "Messages" }, - "timeline": { - "items": { - "$ref": "#/components/schemas/EventSummary" + "total": { + "type": "integer", + "title": "Total" + }, + "offset": { + "type": "integer", + "title": "Offset" + }, + "limit": { + "type": "integer", + "title": "Limit" + } + }, + "type": "object", + "required": [ + "messages", + "total", + "offset", + "limit" + ], + "title": "DLQMessagesResponse", + "description": "Response model for listing DLQ messages." + }, + "DLQRetryResult": { + "properties": { + "event_id": { + "type": "string", + "title": "Event Id" + }, + "status": { + "type": "string", + "title": "Status" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Error" + } + }, + "type": "object", + "required": [ + "event_id", + "status" + ], + "title": "DLQRetryResult" + }, + "DLQTopicSummaryResponse": { + "properties": { + "topic": { + "type": "string", + "title": "Topic" + }, + "total_messages": { + "type": "integer", + "title": "Total Messages" + }, + "status_breakdown": { + "additionalProperties": { + "type": "integer" }, - "type": "array", - "title": "Timeline" + "type": "object", + "title": "Status Breakdown" + }, + "oldest_message": { + "type": "string", + "format": "date-time", + "title": "Oldest Message" + }, + "newest_message": { + "type": "string", + "format": "date-time", + "title": "Newest Message" + }, + "avg_retry_count": { + "type": "number", + "title": "Avg Retry Count" + }, + "max_retry_count": { + "type": "integer", + "title": "Max Retry Count" } }, "type": "object", "required": [ - "event", - "related_events", - "timeline" + "topic", + "total_messages", + "status_breakdown", + "oldest_message", + "newest_message", + "avg_retry_count", + "max_retry_count" ], - "title": "EventDetailResponse", - "description": "Response model for event detail" + "title": "DLQTopicSummaryResponse", + "description": "Response model for topic summary." }, - "EventFilter": { + "DeleteNotificationResponse": { "properties": { - "event_types": { - "anyOf": [ - { - "items": { - "$ref": "#/components/schemas/EventType" - }, - "type": "array" - }, - { - "type": "null" - } + "message": { + "type": "string", + "title": "Message" + } + }, + "type": "object", + "required": [ + "message" + ], + "title": "DeleteNotificationResponse", + "description": "Response schema for notification deletion" + }, + "DeletePodCommandEvent": { + "properties": { + "event_id": { + "type": "string", + "title": "Event Id" + }, + "event_type": { + "type": "string", + "enum": [ + "delete_pod_command" ], - "title": "Event Types" + "const": "delete_pod_command", + "title": "Event Type", + "default": "delete_pod_command" + }, + "event_version": { + "type": "string", + "title": "Event Version", + "default": "1.0" + }, + "timestamp": { + "type": "string", + "format": "date-time", + "title": "Timestamp" }, "aggregate_id": { "anyOf": [ @@ -7936,53 +6109,22 @@ ], "title": "Aggregate Id" }, - "correlation_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Correlation Id" + "metadata": { + "$ref": "#/components/schemas/EventMetadata" }, - "user_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "User Id" + "saga_id": { + "type": "string", + "title": "Saga Id" }, - "start_time": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "title": "Start Time" + "execution_id": { + "type": "string", + "title": "Execution Id" }, - "end_time": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "title": "End Time" + "reason": { + "type": "string", + "title": "Reason" }, - "service_name": { + "pod_name": { "anyOf": [ { "type": "string" @@ -7991,9 +6133,9 @@ "type": "null" } ], - "title": "Service Name" + "title": "Pod Name" }, - "search_text": { + "namespace": { "anyOf": [ { "type": "string" @@ -8002,105 +6144,199 @@ "type": "null" } ], - "title": "Search Text" + "title": "Namespace" + } + }, + "type": "object", + "required": [ + "event_id", + "event_type", + "event_version", + "timestamp", + "metadata" + ], + "title": "DeletePodCommandEvent" + }, + "DeleteResponse": { + "properties": { + "message": { + "type": "string", + "title": "Message" + }, + "execution_id": { + "type": "string", + "title": "Execution Id" + } + }, + "type": "object", + "required": [ + "message", + "execution_id" + ], + "title": "DeleteResponse", + "description": "Model for execution deletion response." + }, + "DeleteUserResponse": { + "properties": { + "user_deleted": { + "type": "boolean", + "title": "User Deleted" + }, + "executions": { + "type": "integer", + "title": "Executions", + "default": 0 + }, + "saved_scripts": { + "type": "integer", + "title": "Saved Scripts", + "default": 0 + }, + "notifications": { + "type": "integer", + "title": "Notifications", + "default": 0 + }, + "user_settings": { + "type": "integer", + "title": "User Settings", + "default": 0 + }, + "events": { + "type": "integer", + "title": "Events", + "default": 0 + }, + "sagas": { + "type": "integer", + "title": "Sagas", + "default": 0 + } + }, + "type": "object", + "required": [ + "user_deleted" + ], + "title": "DeleteUserResponse", + "description": "Response model for user deletion." + }, + "DerivedCounts": { + "properties": { + "succeeded": { + "type": "integer", + "title": "Succeeded", + "default": 0 + }, + "failed": { + "type": "integer", + "title": "Failed", + "default": 0 + }, + "timeout": { + "type": "integer", + "title": "Timeout", + "default": 0 + }, + "cancelled": { + "type": "integer", + "title": "Cancelled", + "default": 0 + }, + "terminal_total": { + "type": "integer", + "title": "Terminal Total", + "default": 0 + } + }, + "type": "object", + "title": "DerivedCounts" + }, + "EditorSettings": { + "properties": { + "theme": { + "$ref": "#/components/schemas/Theme", + "default": "auto" + }, + "font_size": { + "type": "integer", + "title": "Font Size", + "default": 14 + }, + "tab_size": { + "type": "integer", + "title": "Tab Size", + "default": 4 + }, + "use_tabs": { + "type": "boolean", + "title": "Use Tabs", + "default": false + }, + "word_wrap": { + "type": "boolean", + "title": "Word Wrap", + "default": true + }, + "show_line_numbers": { + "type": "boolean", + "title": "Show Line Numbers", + "default": true } }, "type": "object", - "title": "EventFilter", - "description": "Filter criteria for browsing events" + "title": "EditorSettings", + "description": "Code editor preferences" + }, + "EndpointGroup": { + "type": "string", + "enum": [ + "execution", + "admin", + "sse", + "websocket", + "auth", + "public", + "api" + ], + "title": "EndpointGroup" }, - "EventFilterRequest": { + "EndpointUsageStats": { "properties": { - "event_types": { - "anyOf": [ - { - "items": { - "$ref": "#/components/schemas/EventType" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Event Types", - "description": "Filter by event types" - }, - "aggregate_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Aggregate Id", - "description": "Filter by aggregate ID" - }, - "correlation_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Correlation Id", - "description": "Filter by correlation ID" - }, - "user_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "User Id", - "description": "Filter by user ID (admin only)" - }, - "service_name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Service Name", - "description": "Filter by service name" - }, - "start_time": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "title": "Start Time", - "description": "Filter events after this time" + "algorithm": { + "$ref": "#/components/schemas/RateLimitAlgorithm" }, - "end_time": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "title": "End Time", - "description": "Filter events before this time" + "remaining": { + "type": "integer", + "title": "Remaining" + } + }, + "type": "object", + "required": [ + "algorithm", + "remaining" + ], + "title": "EndpointUsageStats", + "description": "Usage statistics for a single endpoint (IETF RateLimit-style)." + }, + "Environment": { + "type": "string", + "enum": [ + "development", + "staging", + "production", + "test" + ], + "title": "Environment", + "description": "Deployment environments." + }, + "ErrorResponse": { + "properties": { + "detail": { + "type": "string", + "title": "Detail", + "description": "Human-readable error message" }, - "search_text": { + "type": { "anyOf": [ { "type": "string" @@ -8109,41 +6345,41 @@ "type": "null" } ], - "title": "Search Text", - "description": "Full-text search in event data" - }, - "sort_by": { - "type": "string", - "title": "Sort By", - "description": "Field to sort by", - "default": "timestamp" - }, - "sort_order": { - "$ref": "#/components/schemas/SortOrder", - "description": "Sort order", - "default": "desc" - }, - "limit": { - "type": "integer", - "maximum": 1000.0, - "minimum": 1.0, - "title": "Limit", - "description": "Maximum events to return", - "default": 100 + "title": "Type", + "description": "Error type identifier" + } + }, + "type": "object", + "required": [ + "detail" + ], + "title": "ErrorResponse" + }, + "EventBrowseRequest": { + "properties": { + "filters": { + "$ref": "#/components/schemas/EventFilter" }, "skip": { "type": "integer", - "minimum": 0.0, "title": "Skip", - "description": "Number of events to skip", "default": 0 + }, + "limit": { + "type": "integer", + "maximum": 500.0, + "title": "Limit", + "default": 50 } }, "type": "object", - "title": "EventFilterRequest", - "description": "Request model for filtering events." + "required": [ + "filters" + ], + "title": "EventBrowseRequest", + "description": "Request model for browsing events" }, - "EventListResponse": { + "EventBrowseResponse": { "properties": { "events": { "items": { @@ -8384,47 +6620,350 @@ } }, "type": "array", - "title": "Events" - }, - "total": { - "type": "integer", - "title": "Total" - }, - "limit": { - "type": "integer", - "title": "Limit" - }, - "skip": { - "type": "integer", - "title": "Skip" + "title": "Events" + }, + "total": { + "type": "integer", + "title": "Total" + }, + "skip": { + "type": "integer", + "title": "Skip" + }, + "limit": { + "type": "integer", + "title": "Limit" + } + }, + "type": "object", + "required": [ + "events", + "total", + "skip", + "limit" + ], + "title": "EventBrowseResponse", + "description": "Response model for browsing events" + }, + "EventDeleteResponse": { + "properties": { + "message": { + "type": "string", + "title": "Message" + }, + "event_id": { + "type": "string", + "title": "Event Id" + } + }, + "type": "object", + "required": [ + "message", + "event_id" + ], + "title": "EventDeleteResponse", + "description": "Response model for event deletion" + }, + "EventDetailResponse": { + "properties": { + "event": { + "oneOf": [ + { + "$ref": "#/components/schemas/ExecutionRequestedEvent" + }, + { + "$ref": "#/components/schemas/ExecutionAcceptedEvent" + }, + { + "$ref": "#/components/schemas/ExecutionQueuedEvent" + }, + { + "$ref": "#/components/schemas/ExecutionStartedEvent" + }, + { + "$ref": "#/components/schemas/ExecutionRunningEvent" + }, + { + "$ref": "#/components/schemas/ExecutionCompletedEvent" + }, + { + "$ref": "#/components/schemas/ExecutionFailedEvent" + }, + { + "$ref": "#/components/schemas/ExecutionTimeoutEvent" + }, + { + "$ref": "#/components/schemas/ExecutionCancelledEvent" + }, + { + "$ref": "#/components/schemas/PodCreatedEvent" + }, + { + "$ref": "#/components/schemas/PodScheduledEvent" + }, + { + "$ref": "#/components/schemas/PodRunningEvent" + }, + { + "$ref": "#/components/schemas/PodSucceededEvent" + }, + { + "$ref": "#/components/schemas/PodFailedEvent" + }, + { + "$ref": "#/components/schemas/PodTerminatedEvent" + }, + { + "$ref": "#/components/schemas/PodDeletedEvent" + }, + { + "$ref": "#/components/schemas/ResultStoredEvent" + }, + { + "$ref": "#/components/schemas/ResultFailedEvent" + }, + { + "$ref": "#/components/schemas/UserSettingsUpdatedEvent" + }, + { + "$ref": "#/components/schemas/UserRegisteredEvent" + }, + { + "$ref": "#/components/schemas/UserLoginEvent" + }, + { + "$ref": "#/components/schemas/UserLoggedInEvent" + }, + { + "$ref": "#/components/schemas/UserLoggedOutEvent" + }, + { + "$ref": "#/components/schemas/UserUpdatedEvent" + }, + { + "$ref": "#/components/schemas/UserDeletedEvent" + }, + { + "$ref": "#/components/schemas/NotificationCreatedEvent" + }, + { + "$ref": "#/components/schemas/NotificationSentEvent" + }, + { + "$ref": "#/components/schemas/NotificationDeliveredEvent" + }, + { + "$ref": "#/components/schemas/NotificationFailedEvent" + }, + { + "$ref": "#/components/schemas/NotificationReadEvent" + }, + { + "$ref": "#/components/schemas/NotificationAllReadEvent" + }, + { + "$ref": "#/components/schemas/NotificationClickedEvent" + }, + { + "$ref": "#/components/schemas/NotificationPreferencesUpdatedEvent" + }, + { + "$ref": "#/components/schemas/SagaStartedEvent" + }, + { + "$ref": "#/components/schemas/SagaCompletedEvent" + }, + { + "$ref": "#/components/schemas/SagaFailedEvent" + }, + { + "$ref": "#/components/schemas/SagaCancelledEvent" + }, + { + "$ref": "#/components/schemas/SagaCompensatingEvent" + }, + { + "$ref": "#/components/schemas/SagaCompensatedEvent" + }, + { + "$ref": "#/components/schemas/CreatePodCommandEvent" + }, + { + "$ref": "#/components/schemas/DeletePodCommandEvent" + }, + { + "$ref": "#/components/schemas/AllocateResourcesCommandEvent" + }, + { + "$ref": "#/components/schemas/ReleaseResourcesCommandEvent" + }, + { + "$ref": "#/components/schemas/ScriptSavedEvent" + }, + { + "$ref": "#/components/schemas/ScriptDeletedEvent" + }, + { + "$ref": "#/components/schemas/ScriptSharedEvent" + }, + { + "$ref": "#/components/schemas/SecurityViolationEvent" + }, + { + "$ref": "#/components/schemas/RateLimitExceededEvent" + }, + { + "$ref": "#/components/schemas/AuthFailedEvent" + }, + { + "$ref": "#/components/schemas/ResourceLimitExceededEvent" + }, + { + "$ref": "#/components/schemas/QuotaExceededEvent" + }, + { + "$ref": "#/components/schemas/SystemErrorEvent" + }, + { + "$ref": "#/components/schemas/ServiceUnhealthyEvent" + }, + { + "$ref": "#/components/schemas/ServiceRecoveredEvent" + }, + { + "$ref": "#/components/schemas/DLQMessageReceivedEvent" + }, + { + "$ref": "#/components/schemas/DLQMessageRetriedEvent" + }, + { + "$ref": "#/components/schemas/DLQMessageDiscardedEvent" + } + ], + "title": "Event", + "discriminator": { + "propertyName": "event_type", + "mapping": { + "allocate_resources_command": "#/components/schemas/AllocateResourcesCommandEvent", + "auth_failed": "#/components/schemas/AuthFailedEvent", + "create_pod_command": "#/components/schemas/CreatePodCommandEvent", + "delete_pod_command": "#/components/schemas/DeletePodCommandEvent", + "dlq_message_discarded": "#/components/schemas/DLQMessageDiscardedEvent", + "dlq_message_received": "#/components/schemas/DLQMessageReceivedEvent", + "dlq_message_retried": "#/components/schemas/DLQMessageRetriedEvent", + "execution_accepted": "#/components/schemas/ExecutionAcceptedEvent", + "execution_cancelled": "#/components/schemas/ExecutionCancelledEvent", + "execution_completed": "#/components/schemas/ExecutionCompletedEvent", + "execution_failed": "#/components/schemas/ExecutionFailedEvent", + "execution_queued": "#/components/schemas/ExecutionQueuedEvent", + "execution_requested": "#/components/schemas/ExecutionRequestedEvent", + "execution_running": "#/components/schemas/ExecutionRunningEvent", + "execution_started": "#/components/schemas/ExecutionStartedEvent", + "execution_timeout": "#/components/schemas/ExecutionTimeoutEvent", + "notification_all_read": "#/components/schemas/NotificationAllReadEvent", + "notification_clicked": "#/components/schemas/NotificationClickedEvent", + "notification_created": "#/components/schemas/NotificationCreatedEvent", + "notification_delivered": "#/components/schemas/NotificationDeliveredEvent", + "notification_failed": "#/components/schemas/NotificationFailedEvent", + "notification_preferences_updated": "#/components/schemas/NotificationPreferencesUpdatedEvent", + "notification_read": "#/components/schemas/NotificationReadEvent", + "notification_sent": "#/components/schemas/NotificationSentEvent", + "pod_created": "#/components/schemas/PodCreatedEvent", + "pod_deleted": "#/components/schemas/PodDeletedEvent", + "pod_failed": "#/components/schemas/PodFailedEvent", + "pod_running": "#/components/schemas/PodRunningEvent", + "pod_scheduled": "#/components/schemas/PodScheduledEvent", + "pod_succeeded": "#/components/schemas/PodSucceededEvent", + "pod_terminated": "#/components/schemas/PodTerminatedEvent", + "quota_exceeded": "#/components/schemas/QuotaExceededEvent", + "rate_limit_exceeded": "#/components/schemas/RateLimitExceededEvent", + "release_resources_command": "#/components/schemas/ReleaseResourcesCommandEvent", + "resource_limit_exceeded": "#/components/schemas/ResourceLimitExceededEvent", + "result_failed": "#/components/schemas/ResultFailedEvent", + "result_stored": "#/components/schemas/ResultStoredEvent", + "saga_cancelled": "#/components/schemas/SagaCancelledEvent", + "saga_compensated": "#/components/schemas/SagaCompensatedEvent", + "saga_compensating": "#/components/schemas/SagaCompensatingEvent", + "saga_completed": "#/components/schemas/SagaCompletedEvent", + "saga_failed": "#/components/schemas/SagaFailedEvent", + "saga_started": "#/components/schemas/SagaStartedEvent", + "script_deleted": "#/components/schemas/ScriptDeletedEvent", + "script_saved": "#/components/schemas/ScriptSavedEvent", + "script_shared": "#/components/schemas/ScriptSharedEvent", + "security_violation": "#/components/schemas/SecurityViolationEvent", + "service_recovered": "#/components/schemas/ServiceRecoveredEvent", + "service_unhealthy": "#/components/schemas/ServiceUnhealthyEvent", + "system_error": "#/components/schemas/SystemErrorEvent", + "user_deleted": "#/components/schemas/UserDeletedEvent", + "user_logged_in": "#/components/schemas/UserLoggedInEvent", + "user_logged_out": "#/components/schemas/UserLoggedOutEvent", + "user_login": "#/components/schemas/UserLoginEvent", + "user_registered": "#/components/schemas/UserRegisteredEvent", + "user_settings_updated": "#/components/schemas/UserSettingsUpdatedEvent", + "user_updated": "#/components/schemas/UserUpdatedEvent" + } + } + }, + "related_events": { + "items": { + "$ref": "#/components/schemas/EventSummary" + }, + "type": "array", + "title": "Related Events" }, - "has_more": { - "type": "boolean", - "title": "Has More" + "timeline": { + "items": { + "$ref": "#/components/schemas/EventSummary" + }, + "type": "array", + "title": "Timeline" } }, "type": "object", "required": [ - "events", - "total", - "limit", - "skip", - "has_more" + "event", + "related_events", + "timeline" ], - "title": "EventListResponse" + "title": "EventDetailResponse", + "description": "Response model for event detail" }, - "EventMetadata": { + "EventFilter": { "properties": { - "service_name": { - "type": "string", - "title": "Service Name" + "event_types": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/EventType" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Event Types" }, - "service_version": { - "type": "string", - "title": "Service Version" + "aggregate_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Aggregate Id" }, "correlation_id": { - "type": "string", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], "title": "Correlation Id" }, "user_id": { @@ -8438,7 +6977,31 @@ ], "title": "User Id" }, - "ip_address": { + "start_time": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Start Time" + }, + "end_time": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "End Time" + }, + "service_name": { "anyOf": [ { "type": "string" @@ -8447,9 +7010,9 @@ "type": "null" } ], - "title": "Ip Address" + "title": "Service Name" }, - "user_agent": { + "search_text": { "anyOf": [ { "type": "string" @@ -8458,7 +7021,30 @@ "type": "null" } ], - "title": "User Agent" + "title": "Search Text" + } + }, + "type": "object", + "title": "EventFilter", + "description": "Filter criteria for browsing events" + }, + "EventMetadata": { + "properties": { + "service_name": { + "type": "string", + "title": "Service Name" + }, + "service_version": { + "type": "string", + "title": "Service Version" + }, + "correlation_id": { + "type": "string", + "title": "Correlation Id" + }, + "user_id": { + "type": "string", + "title": "User Id" }, "environment": { "$ref": "#/components/schemas/Environment", @@ -8582,8 +7168,7 @@ "title": "Session Id" }, "status": { - "type": "string", - "title": "Status" + "$ref": "#/components/schemas/ReplayStatus" }, "events_preview": { "anyOf": [ @@ -8617,8 +7202,7 @@ "title": "Session Id" }, "status": { - "type": "string", - "title": "Status" + "$ref": "#/components/schemas/ReplayStatus" }, "total_events": { "type": "integer", @@ -11502,99 +10086,6 @@ ], "title": "PodTerminatedEvent" }, - "PublishEventRequest": { - "properties": { - "event_type": { - "$ref": "#/components/schemas/EventType", - "description": "Type of event to publish" - }, - "payload": { - "type": "object", - "title": "Payload", - "description": "Event payload data" - }, - "aggregate_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Aggregate Id", - "description": "Aggregate root ID" - }, - "correlation_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Correlation Id", - "description": "Correlation ID" - }, - "causation_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Causation Id", - "description": "ID of causing event" - }, - "metadata": { - "anyOf": [ - { - "type": "object" - }, - { - "type": "null" - } - ], - "title": "Metadata", - "description": "Additional metadata" - } - }, - "type": "object", - "required": [ - "event_type", - "payload" - ], - "title": "PublishEventRequest", - "description": "Request model for publishing events." - }, - "PublishEventResponse": { - "properties": { - "event_id": { - "type": "string", - "title": "Event Id" - }, - "status": { - "type": "string", - "title": "Status" - }, - "timestamp": { - "type": "string", - "format": "date-time", - "title": "Timestamp" - } - }, - "type": "object", - "required": [ - "event_id", - "status", - "timestamp" - ], - "title": "PublishEventResponse", - "description": "Response model for publishing events" - }, "QueuePriority": { "type": "string", "enum": [ @@ -12010,96 +10501,6 @@ ], "title": "ReleaseResourcesCommandEvent" }, - "ReplayAggregateResponse": { - "properties": { - "dry_run": { - "type": "boolean", - "title": "Dry Run" - }, - "aggregate_id": { - "type": "string", - "title": "Aggregate Id" - }, - "event_count": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Event Count" - }, - "event_types": { - "anyOf": [ - { - "items": { - "$ref": "#/components/schemas/EventType" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Event Types" - }, - "start_time": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "title": "Start Time" - }, - "end_time": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "title": "End Time" - }, - "replayed_count": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Replayed Count" - }, - "replay_correlation_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Replay Correlation Id" - } - }, - "type": "object", - "required": [ - "dry_run", - "aggregate_id" - ], - "title": "ReplayAggregateResponse", - "description": "Response model for replaying aggregate events" - }, "ReplayConfigSchema": { "properties": { "replay_type": { @@ -13037,31 +11438,6 @@ ], "title": "ResultStoredEvent" }, - "RetryExecutionRequest": { - "properties": { - "reason": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Reason", - "description": "Reason for retry" - }, - "preserve_output": { - "type": "boolean", - "title": "Preserve Output", - "description": "Keep output from previous attempt", - "default": false - } - }, - "type": "object", - "title": "RetryExecutionRequest", - "description": "Model for retrying an execution." - }, "RetryPolicyRequest": { "properties": { "topic": { @@ -14677,15 +13053,6 @@ "title": "SettingsHistoryResponse", "description": "Response model for settings history (limited snapshot of recent changes)" }, - "SortOrder": { - "type": "string", - "enum": [ - "asc", - "desc" - ], - "title": "SortOrder", - "description": "Sort order for queries." - }, "StorageType": { "type": "string", "enum": [ diff --git a/frontend/src/components/editor/CodeMirrorEditor.svelte b/frontend/src/components/editor/CodeMirrorEditor.svelte index 427fc1dc..98c21888 100644 --- a/frontend/src/components/editor/CodeMirrorEditor.svelte +++ b/frontend/src/components/editor/CodeMirrorEditor.svelte @@ -32,8 +32,8 @@ function getThemeExtension() { // Only use dark theme if explicitly set OR auto + dark mode active - const useDark = settings.theme === 'one-dark' || - (settings.theme !== 'github' && document.documentElement.classList.contains('dark')); + const useDark = settings.theme === 'dark' || + (settings.theme !== 'light' && document.documentElement.classList.contains('dark')); return useDark ? oneDark : githubLight; } diff --git a/frontend/src/components/editor/__tests__/CodeMirrorEditor.test.ts b/frontend/src/components/editor/__tests__/CodeMirrorEditor.test.ts index ba17f832..286a2c11 100644 --- a/frontend/src/components/editor/__tests__/CodeMirrorEditor.test.ts +++ b/frontend/src/components/editor/__tests__/CodeMirrorEditor.test.ts @@ -116,8 +116,8 @@ describe('CodeMirrorEditor', () => { describe('theme selection', () => { it.each([ - { theme: 'github', darkClass: false, expectedTheme: 'githubLight-theme' }, - { theme: 'one-dark', darkClass: false, expectedTheme: 'oneDark-theme' }, + { theme: 'light', darkClass: false, expectedTheme: 'githubLight-theme' }, + { theme: 'dark', darkClass: false, expectedTheme: 'oneDark-theme' }, { theme: 'auto', darkClass: true, expectedTheme: 'oneDark-theme' }, { theme: 'auto', darkClass: false, expectedTheme: 'githubLight-theme' }, ])('selects $expectedTheme for theme=$theme dark=$darkClass', async ({ theme, darkClass, expectedTheme }) => { diff --git a/frontend/src/lib/api/index.ts b/frontend/src/lib/api/index.ts index 25da2c33..47665926 100644 --- a/frontend/src/lib/api/index.ts +++ b/frontend/src/lib/api/index.ts @@ -1,4 +1,4 @@ // This file is auto-generated by @hey-api/openapi-ts -export { browseEventsApiV1AdminEventsBrowsePost, cancelExecutionApiV1ExecutionsExecutionIdCancelPost, cancelReplaySessionApiV1ReplaySessionsSessionIdCancelPost, cancelSagaApiV1SagasSagaIdCancelPost, cleanupOldSessionsApiV1ReplayCleanupPost, createExecutionApiV1ExecutePost, createReplaySessionApiV1ReplaySessionsPost, createSavedScriptApiV1ScriptsPost, createUserApiV1AdminUsersPost, deleteEventApiV1AdminEventsEventIdDelete, deleteEventApiV1EventsEventIdDelete, deleteExecutionApiV1ExecutionsExecutionIdDelete, deleteNotificationApiV1NotificationsNotificationIdDelete, deleteSavedScriptApiV1ScriptsScriptIdDelete, deleteUserApiV1AdminUsersUserIdDelete, discardDlqMessageApiV1DlqMessagesEventIdDelete, executionEventsApiV1EventsExecutionsExecutionIdGet, exportEventsCsvApiV1AdminEventsExportCsvGet, exportEventsJsonApiV1AdminEventsExportJsonGet, getCurrentRequestEventsApiV1EventsCurrentRequestGet, getCurrentUserProfileApiV1AuthMeGet, getDlqMessageApiV1DlqMessagesEventIdGet, getDlqMessagesApiV1DlqMessagesGet, getDlqTopicsApiV1DlqTopicsGet, getEventApiV1EventsEventIdGet, getEventDetailApiV1AdminEventsEventIdGet, getEventsByCorrelationApiV1EventsCorrelationCorrelationIdGet, getEventStatisticsApiV1EventsStatisticsGet, getEventStatsApiV1AdminEventsStatsGet, getExampleScriptsApiV1ExampleScriptsGet, getExecutionEventsApiV1EventsExecutionsExecutionIdEventsGet, getExecutionEventsApiV1ExecutionsExecutionIdEventsGet, getExecutionSagasApiV1SagasExecutionExecutionIdGet, getK8sResourceLimitsApiV1K8sLimitsGet, getNotificationsApiV1NotificationsGet, getReplaySessionApiV1ReplaySessionsSessionIdGet, getReplayStatusApiV1AdminEventsReplaySessionIdStatusGet, getResultApiV1ExecutionsExecutionIdResultGet, getSagaStatusApiV1SagasSagaIdGet, getSavedScriptApiV1ScriptsScriptIdGet, getSettingsHistoryApiV1UserSettingsHistoryGet, getSubscriptionsApiV1NotificationsSubscriptionsGet, getSystemSettingsApiV1AdminSettingsGet, getUnreadCountApiV1NotificationsUnreadCountGet, getUserApiV1AdminUsersUserIdGet, getUserEventsApiV1EventsUserGet, getUserExecutionsApiV1UserExecutionsGet, getUserOverviewApiV1AdminUsersUserIdOverviewGet, getUserRateLimitsApiV1AdminUsersUserIdRateLimitsGet, getUserSettingsApiV1UserSettingsGet, listReplaySessionsApiV1ReplaySessionsGet, listSagasApiV1SagasGet, listSavedScriptsApiV1ScriptsGet, listUsersApiV1AdminUsersGet, livenessApiV1HealthLiveGet, loginApiV1AuthLoginPost, logoutApiV1AuthLogoutPost, markAllReadApiV1NotificationsMarkAllReadPost, markNotificationReadApiV1NotificationsNotificationIdReadPut, notificationStreamApiV1EventsNotificationsStreamGet, type Options, pauseReplaySessionApiV1ReplaySessionsSessionIdPausePost, publishCustomEventApiV1EventsPublishPost, queryEventsApiV1EventsQueryPost, registerApiV1AuthRegisterPost, replayAggregateEventsApiV1EventsReplayAggregateIdPost, replayEventsApiV1AdminEventsReplayPost, resetSystemSettingsApiV1AdminSettingsResetPost, resetUserPasswordApiV1AdminUsersUserIdResetPasswordPost, resetUserRateLimitsApiV1AdminUsersUserIdRateLimitsResetPost, restoreSettingsApiV1UserSettingsRestorePost, resumeReplaySessionApiV1ReplaySessionsSessionIdResumePost, retryDlqMessagesApiV1DlqRetryPost, retryExecutionApiV1ExecutionsExecutionIdRetryPost, setRetryPolicyApiV1DlqRetryPolicyPost, startReplaySessionApiV1ReplaySessionsSessionIdStartPost, unlockUserApiV1AdminUsersUserIdUnlockPost, updateCustomSettingApiV1UserSettingsCustomKeyPut, updateEditorSettingsApiV1UserSettingsEditorPut, updateNotificationSettingsApiV1UserSettingsNotificationsPut, updateSavedScriptApiV1ScriptsScriptIdPut, updateSubscriptionApiV1NotificationsSubscriptionsChannelPut, updateSystemSettingsApiV1AdminSettingsPut, updateThemeApiV1UserSettingsThemePut, updateUserApiV1AdminUsersUserIdPut, updateUserRateLimitsApiV1AdminUsersUserIdRateLimitsPut, updateUserSettingsApiV1UserSettingsPut } from './sdk.gen'; -export type { AdminUserOverview, AllocateResourcesCommandEvent, AuthFailedEvent, BodyLoginApiV1AuthLoginPost, BrowseEventsApiV1AdminEventsBrowsePostData, BrowseEventsApiV1AdminEventsBrowsePostError, BrowseEventsApiV1AdminEventsBrowsePostErrors, BrowseEventsApiV1AdminEventsBrowsePostResponse, BrowseEventsApiV1AdminEventsBrowsePostResponses, CancelExecutionApiV1ExecutionsExecutionIdCancelPostData, CancelExecutionApiV1ExecutionsExecutionIdCancelPostError, CancelExecutionApiV1ExecutionsExecutionIdCancelPostErrors, CancelExecutionApiV1ExecutionsExecutionIdCancelPostResponse, CancelExecutionApiV1ExecutionsExecutionIdCancelPostResponses, CancelExecutionRequest, CancelReplaySessionApiV1ReplaySessionsSessionIdCancelPostData, CancelReplaySessionApiV1ReplaySessionsSessionIdCancelPostError, CancelReplaySessionApiV1ReplaySessionsSessionIdCancelPostErrors, CancelReplaySessionApiV1ReplaySessionsSessionIdCancelPostResponse, CancelReplaySessionApiV1ReplaySessionsSessionIdCancelPostResponses, CancelResponse, CancelSagaApiV1SagasSagaIdCancelPostData, CancelSagaApiV1SagasSagaIdCancelPostError, CancelSagaApiV1SagasSagaIdCancelPostErrors, CancelSagaApiV1SagasSagaIdCancelPostResponse, CancelSagaApiV1SagasSagaIdCancelPostResponses, CleanupOldSessionsApiV1ReplayCleanupPostData, CleanupOldSessionsApiV1ReplayCleanupPostError, CleanupOldSessionsApiV1ReplayCleanupPostErrors, CleanupOldSessionsApiV1ReplayCleanupPostResponse, CleanupOldSessionsApiV1ReplayCleanupPostResponses, CleanupResponse, ClientOptions, ContainerStatusInfo, CreateExecutionApiV1ExecutePostData, CreateExecutionApiV1ExecutePostError, CreateExecutionApiV1ExecutePostErrors, CreateExecutionApiV1ExecutePostResponse, CreateExecutionApiV1ExecutePostResponses, CreatePodCommandEvent, CreateReplaySessionApiV1ReplaySessionsPostData, CreateReplaySessionApiV1ReplaySessionsPostError, CreateReplaySessionApiV1ReplaySessionsPostErrors, CreateReplaySessionApiV1ReplaySessionsPostResponse, CreateReplaySessionApiV1ReplaySessionsPostResponses, CreateSavedScriptApiV1ScriptsPostData, CreateSavedScriptApiV1ScriptsPostError, CreateSavedScriptApiV1ScriptsPostErrors, CreateSavedScriptApiV1ScriptsPostResponse, CreateSavedScriptApiV1ScriptsPostResponses, CreateUserApiV1AdminUsersPostData, CreateUserApiV1AdminUsersPostError, CreateUserApiV1AdminUsersPostErrors, CreateUserApiV1AdminUsersPostResponse, CreateUserApiV1AdminUsersPostResponses, DeleteEventApiV1AdminEventsEventIdDeleteData, DeleteEventApiV1AdminEventsEventIdDeleteError, DeleteEventApiV1AdminEventsEventIdDeleteErrors, DeleteEventApiV1AdminEventsEventIdDeleteResponse, DeleteEventApiV1AdminEventsEventIdDeleteResponses, DeleteEventApiV1EventsEventIdDeleteData, DeleteEventApiV1EventsEventIdDeleteError, DeleteEventApiV1EventsEventIdDeleteErrors, DeleteEventApiV1EventsEventIdDeleteResponse, DeleteEventApiV1EventsEventIdDeleteResponses, DeleteEventResponse, DeleteExecutionApiV1ExecutionsExecutionIdDeleteData, DeleteExecutionApiV1ExecutionsExecutionIdDeleteError, DeleteExecutionApiV1ExecutionsExecutionIdDeleteErrors, DeleteExecutionApiV1ExecutionsExecutionIdDeleteResponse, DeleteExecutionApiV1ExecutionsExecutionIdDeleteResponses, DeleteNotificationApiV1NotificationsNotificationIdDeleteData, DeleteNotificationApiV1NotificationsNotificationIdDeleteError, DeleteNotificationApiV1NotificationsNotificationIdDeleteErrors, DeleteNotificationApiV1NotificationsNotificationIdDeleteResponse, DeleteNotificationApiV1NotificationsNotificationIdDeleteResponses, DeleteNotificationResponse, DeletePodCommandEvent, DeleteResponse, DeleteSavedScriptApiV1ScriptsScriptIdDeleteData, DeleteSavedScriptApiV1ScriptsScriptIdDeleteError, DeleteSavedScriptApiV1ScriptsScriptIdDeleteErrors, DeleteSavedScriptApiV1ScriptsScriptIdDeleteResponse, DeleteSavedScriptApiV1ScriptsScriptIdDeleteResponses, DeleteUserApiV1AdminUsersUserIdDeleteData, DeleteUserApiV1AdminUsersUserIdDeleteError, DeleteUserApiV1AdminUsersUserIdDeleteErrors, DeleteUserApiV1AdminUsersUserIdDeleteResponse, DeleteUserApiV1AdminUsersUserIdDeleteResponses, DeleteUserResponse, DerivedCounts, DiscardDlqMessageApiV1DlqMessagesEventIdDeleteData, DiscardDlqMessageApiV1DlqMessagesEventIdDeleteError, DiscardDlqMessageApiV1DlqMessagesEventIdDeleteErrors, DiscardDlqMessageApiV1DlqMessagesEventIdDeleteResponse, DiscardDlqMessageApiV1DlqMessagesEventIdDeleteResponses, DlqBatchRetryResponse, DlqMessageDetail, DlqMessageDiscardedEvent, DlqMessageReceivedEvent, DlqMessageResponse, DlqMessageRetriedEvent, DlqMessagesResponse, DlqMessageStatus, DlqRetryResult, DlqTopicSummaryResponse, EditorSettings, EndpointGroup, EndpointUsageStats, Environment, ErrorResponse, EventBrowseRequest, EventBrowseResponse, EventDeleteResponse, EventDetailResponse, EventFilter, EventFilterRequest, EventListResponse, EventMetadata, EventReplayRequest, EventReplayResponse, EventReplayStatusResponse, EventReplayStatusResponseWritable, EventStatistics, EventStatsResponse, EventSummary, EventType, EventTypeCountSchema, ExampleScripts, ExecutionAcceptedEvent, ExecutionCancelledEvent, ExecutionCompletedEvent, ExecutionErrorType, ExecutionEventsApiV1EventsExecutionsExecutionIdGetData, ExecutionEventsApiV1EventsExecutionsExecutionIdGetError, ExecutionEventsApiV1EventsExecutionsExecutionIdGetErrors, ExecutionEventsApiV1EventsExecutionsExecutionIdGetResponse, ExecutionEventsApiV1EventsExecutionsExecutionIdGetResponses, ExecutionFailedEvent, ExecutionListResponse, ExecutionQueuedEvent, ExecutionRequest, ExecutionRequestedEvent, ExecutionResponse, ExecutionResult, ExecutionRunningEvent, ExecutionStartedEvent, ExecutionStatus, ExecutionTimeoutEvent, ExportEventsCsvApiV1AdminEventsExportCsvGetData, ExportEventsCsvApiV1AdminEventsExportCsvGetError, ExportEventsCsvApiV1AdminEventsExportCsvGetErrors, ExportEventsCsvApiV1AdminEventsExportCsvGetResponses, ExportEventsJsonApiV1AdminEventsExportJsonGetData, ExportEventsJsonApiV1AdminEventsExportJsonGetError, ExportEventsJsonApiV1AdminEventsExportJsonGetErrors, ExportEventsJsonApiV1AdminEventsExportJsonGetResponses, GetCurrentRequestEventsApiV1EventsCurrentRequestGetData, GetCurrentRequestEventsApiV1EventsCurrentRequestGetError, GetCurrentRequestEventsApiV1EventsCurrentRequestGetErrors, GetCurrentRequestEventsApiV1EventsCurrentRequestGetResponse, GetCurrentRequestEventsApiV1EventsCurrentRequestGetResponses, GetCurrentUserProfileApiV1AuthMeGetData, GetCurrentUserProfileApiV1AuthMeGetResponse, GetCurrentUserProfileApiV1AuthMeGetResponses, GetDlqMessageApiV1DlqMessagesEventIdGetData, GetDlqMessageApiV1DlqMessagesEventIdGetError, GetDlqMessageApiV1DlqMessagesEventIdGetErrors, GetDlqMessageApiV1DlqMessagesEventIdGetResponse, GetDlqMessageApiV1DlqMessagesEventIdGetResponses, GetDlqMessagesApiV1DlqMessagesGetData, GetDlqMessagesApiV1DlqMessagesGetError, GetDlqMessagesApiV1DlqMessagesGetErrors, GetDlqMessagesApiV1DlqMessagesGetResponse, GetDlqMessagesApiV1DlqMessagesGetResponses, GetDlqTopicsApiV1DlqTopicsGetData, GetDlqTopicsApiV1DlqTopicsGetResponse, GetDlqTopicsApiV1DlqTopicsGetResponses, GetEventApiV1EventsEventIdGetData, GetEventApiV1EventsEventIdGetError, GetEventApiV1EventsEventIdGetErrors, GetEventApiV1EventsEventIdGetResponse, GetEventApiV1EventsEventIdGetResponses, GetEventDetailApiV1AdminEventsEventIdGetData, GetEventDetailApiV1AdminEventsEventIdGetError, GetEventDetailApiV1AdminEventsEventIdGetErrors, GetEventDetailApiV1AdminEventsEventIdGetResponse, GetEventDetailApiV1AdminEventsEventIdGetResponses, GetEventsByCorrelationApiV1EventsCorrelationCorrelationIdGetData, GetEventsByCorrelationApiV1EventsCorrelationCorrelationIdGetError, GetEventsByCorrelationApiV1EventsCorrelationCorrelationIdGetErrors, GetEventsByCorrelationApiV1EventsCorrelationCorrelationIdGetResponse, GetEventsByCorrelationApiV1EventsCorrelationCorrelationIdGetResponses, GetEventStatisticsApiV1EventsStatisticsGetData, GetEventStatisticsApiV1EventsStatisticsGetError, GetEventStatisticsApiV1EventsStatisticsGetErrors, GetEventStatisticsApiV1EventsStatisticsGetResponse, GetEventStatisticsApiV1EventsStatisticsGetResponses, GetEventStatsApiV1AdminEventsStatsGetData, GetEventStatsApiV1AdminEventsStatsGetError, GetEventStatsApiV1AdminEventsStatsGetErrors, GetEventStatsApiV1AdminEventsStatsGetResponse, GetEventStatsApiV1AdminEventsStatsGetResponses, GetExampleScriptsApiV1ExampleScriptsGetData, GetExampleScriptsApiV1ExampleScriptsGetResponse, GetExampleScriptsApiV1ExampleScriptsGetResponses, GetExecutionEventsApiV1EventsExecutionsExecutionIdEventsGetData, GetExecutionEventsApiV1EventsExecutionsExecutionIdEventsGetError, GetExecutionEventsApiV1EventsExecutionsExecutionIdEventsGetErrors, GetExecutionEventsApiV1EventsExecutionsExecutionIdEventsGetResponse, GetExecutionEventsApiV1EventsExecutionsExecutionIdEventsGetResponses, GetExecutionEventsApiV1ExecutionsExecutionIdEventsGetData, GetExecutionEventsApiV1ExecutionsExecutionIdEventsGetError, GetExecutionEventsApiV1ExecutionsExecutionIdEventsGetErrors, GetExecutionEventsApiV1ExecutionsExecutionIdEventsGetResponse, GetExecutionEventsApiV1ExecutionsExecutionIdEventsGetResponses, GetExecutionSagasApiV1SagasExecutionExecutionIdGetData, GetExecutionSagasApiV1SagasExecutionExecutionIdGetError, GetExecutionSagasApiV1SagasExecutionExecutionIdGetErrors, GetExecutionSagasApiV1SagasExecutionExecutionIdGetResponse, GetExecutionSagasApiV1SagasExecutionExecutionIdGetResponses, GetK8sResourceLimitsApiV1K8sLimitsGetData, GetK8sResourceLimitsApiV1K8sLimitsGetResponse, GetK8sResourceLimitsApiV1K8sLimitsGetResponses, GetNotificationsApiV1NotificationsGetData, GetNotificationsApiV1NotificationsGetError, GetNotificationsApiV1NotificationsGetErrors, GetNotificationsApiV1NotificationsGetResponse, GetNotificationsApiV1NotificationsGetResponses, GetReplaySessionApiV1ReplaySessionsSessionIdGetData, GetReplaySessionApiV1ReplaySessionsSessionIdGetError, GetReplaySessionApiV1ReplaySessionsSessionIdGetErrors, GetReplaySessionApiV1ReplaySessionsSessionIdGetResponse, GetReplaySessionApiV1ReplaySessionsSessionIdGetResponses, GetReplayStatusApiV1AdminEventsReplaySessionIdStatusGetData, GetReplayStatusApiV1AdminEventsReplaySessionIdStatusGetError, GetReplayStatusApiV1AdminEventsReplaySessionIdStatusGetErrors, GetReplayStatusApiV1AdminEventsReplaySessionIdStatusGetResponse, GetReplayStatusApiV1AdminEventsReplaySessionIdStatusGetResponses, GetResultApiV1ExecutionsExecutionIdResultGetData, GetResultApiV1ExecutionsExecutionIdResultGetError, GetResultApiV1ExecutionsExecutionIdResultGetErrors, GetResultApiV1ExecutionsExecutionIdResultGetResponse, GetResultApiV1ExecutionsExecutionIdResultGetResponses, GetSagaStatusApiV1SagasSagaIdGetData, GetSagaStatusApiV1SagasSagaIdGetError, GetSagaStatusApiV1SagasSagaIdGetErrors, GetSagaStatusApiV1SagasSagaIdGetResponse, GetSagaStatusApiV1SagasSagaIdGetResponses, GetSavedScriptApiV1ScriptsScriptIdGetData, GetSavedScriptApiV1ScriptsScriptIdGetError, GetSavedScriptApiV1ScriptsScriptIdGetErrors, GetSavedScriptApiV1ScriptsScriptIdGetResponse, GetSavedScriptApiV1ScriptsScriptIdGetResponses, GetSettingsHistoryApiV1UserSettingsHistoryGetData, GetSettingsHistoryApiV1UserSettingsHistoryGetError, GetSettingsHistoryApiV1UserSettingsHistoryGetErrors, GetSettingsHistoryApiV1UserSettingsHistoryGetResponse, GetSettingsHistoryApiV1UserSettingsHistoryGetResponses, GetSubscriptionsApiV1NotificationsSubscriptionsGetData, GetSubscriptionsApiV1NotificationsSubscriptionsGetResponse, GetSubscriptionsApiV1NotificationsSubscriptionsGetResponses, GetSystemSettingsApiV1AdminSettingsGetData, GetSystemSettingsApiV1AdminSettingsGetError, GetSystemSettingsApiV1AdminSettingsGetErrors, GetSystemSettingsApiV1AdminSettingsGetResponse, GetSystemSettingsApiV1AdminSettingsGetResponses, GetUnreadCountApiV1NotificationsUnreadCountGetData, GetUnreadCountApiV1NotificationsUnreadCountGetResponse, GetUnreadCountApiV1NotificationsUnreadCountGetResponses, GetUserApiV1AdminUsersUserIdGetData, GetUserApiV1AdminUsersUserIdGetError, GetUserApiV1AdminUsersUserIdGetErrors, GetUserApiV1AdminUsersUserIdGetResponse, GetUserApiV1AdminUsersUserIdGetResponses, GetUserEventsApiV1EventsUserGetData, GetUserEventsApiV1EventsUserGetError, GetUserEventsApiV1EventsUserGetErrors, GetUserEventsApiV1EventsUserGetResponse, GetUserEventsApiV1EventsUserGetResponses, GetUserExecutionsApiV1UserExecutionsGetData, GetUserExecutionsApiV1UserExecutionsGetError, GetUserExecutionsApiV1UserExecutionsGetErrors, GetUserExecutionsApiV1UserExecutionsGetResponse, GetUserExecutionsApiV1UserExecutionsGetResponses, GetUserOverviewApiV1AdminUsersUserIdOverviewGetData, GetUserOverviewApiV1AdminUsersUserIdOverviewGetError, GetUserOverviewApiV1AdminUsersUserIdOverviewGetErrors, GetUserOverviewApiV1AdminUsersUserIdOverviewGetResponse, GetUserOverviewApiV1AdminUsersUserIdOverviewGetResponses, GetUserRateLimitsApiV1AdminUsersUserIdRateLimitsGetData, GetUserRateLimitsApiV1AdminUsersUserIdRateLimitsGetError, GetUserRateLimitsApiV1AdminUsersUserIdRateLimitsGetErrors, GetUserRateLimitsApiV1AdminUsersUserIdRateLimitsGetResponse, GetUserRateLimitsApiV1AdminUsersUserIdRateLimitsGetResponses, GetUserSettingsApiV1UserSettingsGetData, GetUserSettingsApiV1UserSettingsGetResponse, GetUserSettingsApiV1UserSettingsGetResponses, HourlyEventCountSchema, HttpValidationError, KafkaTopic, LanguageInfo, ListReplaySessionsApiV1ReplaySessionsGetData, ListReplaySessionsApiV1ReplaySessionsGetError, ListReplaySessionsApiV1ReplaySessionsGetErrors, ListReplaySessionsApiV1ReplaySessionsGetResponse, ListReplaySessionsApiV1ReplaySessionsGetResponses, ListSagasApiV1SagasGetData, ListSagasApiV1SagasGetError, ListSagasApiV1SagasGetErrors, ListSagasApiV1SagasGetResponse, ListSagasApiV1SagasGetResponses, ListSavedScriptsApiV1ScriptsGetData, ListSavedScriptsApiV1ScriptsGetResponse, ListSavedScriptsApiV1ScriptsGetResponses, ListUsersApiV1AdminUsersGetData, ListUsersApiV1AdminUsersGetError, ListUsersApiV1AdminUsersGetErrors, ListUsersApiV1AdminUsersGetResponse, ListUsersApiV1AdminUsersGetResponses, LivenessApiV1HealthLiveGetData, LivenessApiV1HealthLiveGetResponse, LivenessApiV1HealthLiveGetResponses, LivenessResponse, LoginApiV1AuthLoginPostData, LoginApiV1AuthLoginPostError, LoginApiV1AuthLoginPostErrors, LoginApiV1AuthLoginPostResponse, LoginApiV1AuthLoginPostResponses, LoginMethod, LoginResponse, LogLevel, LogoutApiV1AuthLogoutPostData, LogoutApiV1AuthLogoutPostResponse, LogoutApiV1AuthLogoutPostResponses, ManualRetryRequest, MarkAllReadApiV1NotificationsMarkAllReadPostData, MarkAllReadApiV1NotificationsMarkAllReadPostResponse, MarkAllReadApiV1NotificationsMarkAllReadPostResponses, MarkNotificationReadApiV1NotificationsNotificationIdReadPutData, MarkNotificationReadApiV1NotificationsNotificationIdReadPutError, MarkNotificationReadApiV1NotificationsNotificationIdReadPutErrors, MarkNotificationReadApiV1NotificationsNotificationIdReadPutResponse, MarkNotificationReadApiV1NotificationsNotificationIdReadPutResponses, MessageResponse, NotificationAllReadEvent, NotificationChannel, NotificationClickedEvent, NotificationCreatedEvent, NotificationDeliveredEvent, NotificationFailedEvent, NotificationListResponse, NotificationPreferencesUpdatedEvent, NotificationReadEvent, NotificationResponse, NotificationSentEvent, NotificationSettings, NotificationSeverity, NotificationStatus, NotificationStreamApiV1EventsNotificationsStreamGetData, NotificationStreamApiV1EventsNotificationsStreamGetResponse, NotificationStreamApiV1EventsNotificationsStreamGetResponses, NotificationSubscription, PasswordResetRequest, PauseReplaySessionApiV1ReplaySessionsSessionIdPausePostData, PauseReplaySessionApiV1ReplaySessionsSessionIdPausePostError, PauseReplaySessionApiV1ReplaySessionsSessionIdPausePostErrors, PauseReplaySessionApiV1ReplaySessionsSessionIdPausePostResponse, PauseReplaySessionApiV1ReplaySessionsSessionIdPausePostResponses, PodCreatedEvent, PodDeletedEvent, PodFailedEvent, PodRunningEvent, PodScheduledEvent, PodSucceededEvent, PodTerminatedEvent, PublishCustomEventApiV1EventsPublishPostData, PublishCustomEventApiV1EventsPublishPostError, PublishCustomEventApiV1EventsPublishPostErrors, PublishCustomEventApiV1EventsPublishPostResponse, PublishCustomEventApiV1EventsPublishPostResponses, PublishEventRequest, PublishEventResponse, QueryEventsApiV1EventsQueryPostData, QueryEventsApiV1EventsQueryPostError, QueryEventsApiV1EventsQueryPostErrors, QueryEventsApiV1EventsQueryPostResponse, QueryEventsApiV1EventsQueryPostResponses, QueuePriority, QuotaExceededEvent, RateLimitAlgorithm, RateLimitExceededEvent, RateLimitRuleRequest, RateLimitRuleResponse, RateLimitSummary, RateLimitUpdateRequest, RateLimitUpdateResponse, RegisterApiV1AuthRegisterPostData, RegisterApiV1AuthRegisterPostError, RegisterApiV1AuthRegisterPostErrors, RegisterApiV1AuthRegisterPostResponse, RegisterApiV1AuthRegisterPostResponses, ReleaseResourcesCommandEvent, ReplayAggregateEventsApiV1EventsReplayAggregateIdPostData, ReplayAggregateEventsApiV1EventsReplayAggregateIdPostError, ReplayAggregateEventsApiV1EventsReplayAggregateIdPostErrors, ReplayAggregateEventsApiV1EventsReplayAggregateIdPostResponse, ReplayAggregateEventsApiV1EventsReplayAggregateIdPostResponses, ReplayAggregateResponse, ReplayConfigSchema, ReplayError, ReplayEventsApiV1AdminEventsReplayPostData, ReplayEventsApiV1AdminEventsReplayPostError, ReplayEventsApiV1AdminEventsReplayPostErrors, ReplayEventsApiV1AdminEventsReplayPostResponse, ReplayEventsApiV1AdminEventsReplayPostResponses, ReplayFilter, ReplayFilterSchema, ReplayRequest, ReplayResponse, ReplaySession, ReplayStatus, ReplayTarget, ReplayType, ResetSystemSettingsApiV1AdminSettingsResetPostData, ResetSystemSettingsApiV1AdminSettingsResetPostError, ResetSystemSettingsApiV1AdminSettingsResetPostErrors, ResetSystemSettingsApiV1AdminSettingsResetPostResponse, ResetSystemSettingsApiV1AdminSettingsResetPostResponses, ResetUserPasswordApiV1AdminUsersUserIdResetPasswordPostData, ResetUserPasswordApiV1AdminUsersUserIdResetPasswordPostError, ResetUserPasswordApiV1AdminUsersUserIdResetPasswordPostErrors, ResetUserPasswordApiV1AdminUsersUserIdResetPasswordPostResponse, ResetUserPasswordApiV1AdminUsersUserIdResetPasswordPostResponses, ResetUserRateLimitsApiV1AdminUsersUserIdRateLimitsResetPostData, ResetUserRateLimitsApiV1AdminUsersUserIdRateLimitsResetPostError, ResetUserRateLimitsApiV1AdminUsersUserIdRateLimitsResetPostErrors, ResetUserRateLimitsApiV1AdminUsersUserIdRateLimitsResetPostResponse, ResetUserRateLimitsApiV1AdminUsersUserIdRateLimitsResetPostResponses, ResourceLimitExceededEvent, ResourceLimits, ResourceUsage, ResourceUsageDomain, RestoreSettingsApiV1UserSettingsRestorePostData, RestoreSettingsApiV1UserSettingsRestorePostError, RestoreSettingsApiV1UserSettingsRestorePostErrors, RestoreSettingsApiV1UserSettingsRestorePostResponse, RestoreSettingsApiV1UserSettingsRestorePostResponses, RestoreSettingsRequest, ResultFailedEvent, ResultStoredEvent, ResumeReplaySessionApiV1ReplaySessionsSessionIdResumePostData, ResumeReplaySessionApiV1ReplaySessionsSessionIdResumePostError, ResumeReplaySessionApiV1ReplaySessionsSessionIdResumePostErrors, ResumeReplaySessionApiV1ReplaySessionsSessionIdResumePostResponse, ResumeReplaySessionApiV1ReplaySessionsSessionIdResumePostResponses, RetryDlqMessagesApiV1DlqRetryPostData, RetryDlqMessagesApiV1DlqRetryPostError, RetryDlqMessagesApiV1DlqRetryPostErrors, RetryDlqMessagesApiV1DlqRetryPostResponse, RetryDlqMessagesApiV1DlqRetryPostResponses, RetryExecutionApiV1ExecutionsExecutionIdRetryPostData, RetryExecutionApiV1ExecutionsExecutionIdRetryPostError, RetryExecutionApiV1ExecutionsExecutionIdRetryPostErrors, RetryExecutionApiV1ExecutionsExecutionIdRetryPostResponse, RetryExecutionApiV1ExecutionsExecutionIdRetryPostResponses, RetryExecutionRequest, RetryPolicyRequest, RetryStrategy, SagaCancellationResponse, SagaCancelledEvent, SagaCompensatedEvent, SagaCompensatingEvent, SagaCompletedEvent, SagaFailedEvent, SagaListResponse, SagaStartedEvent, SagaState, SagaStatusResponse, SavedScriptCreateRequest, SavedScriptResponse, SavedScriptUpdate, ScriptDeletedEvent, ScriptSavedEvent, ScriptSharedEvent, SecurityViolationEvent, ServiceEventCountSchema, ServiceRecoveredEvent, ServiceUnhealthyEvent, SessionConfigSummary, SessionSummary, SessionSummaryWritable, SetRetryPolicyApiV1DlqRetryPolicyPostData, SetRetryPolicyApiV1DlqRetryPolicyPostError, SetRetryPolicyApiV1DlqRetryPolicyPostErrors, SetRetryPolicyApiV1DlqRetryPolicyPostResponse, SetRetryPolicyApiV1DlqRetryPolicyPostResponses, SettingsHistoryEntry, SettingsHistoryResponse, SortOrder, SseControlEvent, SseExecutionEventData, StartReplaySessionApiV1ReplaySessionsSessionIdStartPostData, StartReplaySessionApiV1ReplaySessionsSessionIdStartPostError, StartReplaySessionApiV1ReplaySessionsSessionIdStartPostErrors, StartReplaySessionApiV1ReplaySessionsSessionIdStartPostResponse, StartReplaySessionApiV1ReplaySessionsSessionIdStartPostResponses, StorageType, SubscriptionsResponse, SubscriptionUpdate, SystemErrorEvent, SystemSettingsSchema, Theme, ThemeUpdateRequest, UnlockResponse, UnlockUserApiV1AdminUsersUserIdUnlockPostData, UnlockUserApiV1AdminUsersUserIdUnlockPostError, UnlockUserApiV1AdminUsersUserIdUnlockPostErrors, UnlockUserApiV1AdminUsersUserIdUnlockPostResponse, UnlockUserApiV1AdminUsersUserIdUnlockPostResponses, UnreadCountResponse, UpdateCustomSettingApiV1UserSettingsCustomKeyPutData, UpdateCustomSettingApiV1UserSettingsCustomKeyPutError, UpdateCustomSettingApiV1UserSettingsCustomKeyPutErrors, UpdateCustomSettingApiV1UserSettingsCustomKeyPutResponse, UpdateCustomSettingApiV1UserSettingsCustomKeyPutResponses, UpdateEditorSettingsApiV1UserSettingsEditorPutData, UpdateEditorSettingsApiV1UserSettingsEditorPutError, UpdateEditorSettingsApiV1UserSettingsEditorPutErrors, UpdateEditorSettingsApiV1UserSettingsEditorPutResponse, UpdateEditorSettingsApiV1UserSettingsEditorPutResponses, UpdateNotificationSettingsApiV1UserSettingsNotificationsPutData, UpdateNotificationSettingsApiV1UserSettingsNotificationsPutError, UpdateNotificationSettingsApiV1UserSettingsNotificationsPutErrors, UpdateNotificationSettingsApiV1UserSettingsNotificationsPutResponse, UpdateNotificationSettingsApiV1UserSettingsNotificationsPutResponses, UpdateSavedScriptApiV1ScriptsScriptIdPutData, UpdateSavedScriptApiV1ScriptsScriptIdPutError, UpdateSavedScriptApiV1ScriptsScriptIdPutErrors, UpdateSavedScriptApiV1ScriptsScriptIdPutResponse, UpdateSavedScriptApiV1ScriptsScriptIdPutResponses, UpdateSubscriptionApiV1NotificationsSubscriptionsChannelPutData, UpdateSubscriptionApiV1NotificationsSubscriptionsChannelPutError, UpdateSubscriptionApiV1NotificationsSubscriptionsChannelPutErrors, UpdateSubscriptionApiV1NotificationsSubscriptionsChannelPutResponse, UpdateSubscriptionApiV1NotificationsSubscriptionsChannelPutResponses, UpdateSystemSettingsApiV1AdminSettingsPutData, UpdateSystemSettingsApiV1AdminSettingsPutError, UpdateSystemSettingsApiV1AdminSettingsPutErrors, UpdateSystemSettingsApiV1AdminSettingsPutResponse, UpdateSystemSettingsApiV1AdminSettingsPutResponses, UpdateThemeApiV1UserSettingsThemePutData, UpdateThemeApiV1UserSettingsThemePutError, UpdateThemeApiV1UserSettingsThemePutErrors, UpdateThemeApiV1UserSettingsThemePutResponse, UpdateThemeApiV1UserSettingsThemePutResponses, UpdateUserApiV1AdminUsersUserIdPutData, UpdateUserApiV1AdminUsersUserIdPutError, UpdateUserApiV1AdminUsersUserIdPutErrors, UpdateUserApiV1AdminUsersUserIdPutResponse, UpdateUserApiV1AdminUsersUserIdPutResponses, UpdateUserRateLimitsApiV1AdminUsersUserIdRateLimitsPutData, UpdateUserRateLimitsApiV1AdminUsersUserIdRateLimitsPutError, UpdateUserRateLimitsApiV1AdminUsersUserIdRateLimitsPutErrors, UpdateUserRateLimitsApiV1AdminUsersUserIdRateLimitsPutResponse, UpdateUserRateLimitsApiV1AdminUsersUserIdRateLimitsPutResponses, UpdateUserSettingsApiV1UserSettingsPutData, UpdateUserSettingsApiV1UserSettingsPutError, UpdateUserSettingsApiV1UserSettingsPutErrors, UpdateUserSettingsApiV1UserSettingsPutResponse, UpdateUserSettingsApiV1UserSettingsPutResponses, UserCreate, UserDeletedEvent, UserEventCountSchema, UserListResponse, UserLoggedInEvent, UserLoggedOutEvent, UserLoginEvent, UserRateLimitConfigResponse, UserRateLimitsResponse, UserRegisteredEvent, UserResponse, UserRole, UserSettings, UserSettingsUpdate, UserSettingsUpdatedEvent, UserUpdate, UserUpdatedEvent, ValidationError } from './types.gen'; +export { browseEventsApiV1AdminEventsBrowsePost, cancelExecutionApiV1ExecutionsExecutionIdCancelPost, cancelReplaySessionApiV1ReplaySessionsSessionIdCancelPost, cancelSagaApiV1SagasSagaIdCancelPost, cleanupOldSessionsApiV1ReplayCleanupPost, createExecutionApiV1ExecutePost, createReplaySessionApiV1ReplaySessionsPost, createSavedScriptApiV1ScriptsPost, createUserApiV1AdminUsersPost, deleteEventApiV1AdminEventsEventIdDelete, deleteExecutionApiV1ExecutionsExecutionIdDelete, deleteNotificationApiV1NotificationsNotificationIdDelete, deleteSavedScriptApiV1ScriptsScriptIdDelete, deleteUserApiV1AdminUsersUserIdDelete, discardDlqMessageApiV1DlqMessagesEventIdDelete, executionEventsApiV1EventsExecutionsExecutionIdGet, exportEventsCsvApiV1AdminEventsExportCsvGet, exportEventsJsonApiV1AdminEventsExportJsonGet, getCurrentUserProfileApiV1AuthMeGet, getDlqMessageApiV1DlqMessagesEventIdGet, getDlqMessagesApiV1DlqMessagesGet, getDlqTopicsApiV1DlqTopicsGet, getEventDetailApiV1AdminEventsEventIdGet, getEventStatsApiV1AdminEventsStatsGet, getExampleScriptsApiV1ExampleScriptsGet, getExecutionEventsApiV1ExecutionsExecutionIdEventsGet, getExecutionSagasApiV1SagasExecutionExecutionIdGet, getK8sResourceLimitsApiV1K8sLimitsGet, getNotificationsApiV1NotificationsGet, getReplaySessionApiV1ReplaySessionsSessionIdGet, getReplayStatusApiV1AdminEventsReplaySessionIdStatusGet, getResultApiV1ExecutionsExecutionIdResultGet, getSagaStatusApiV1SagasSagaIdGet, getSavedScriptApiV1ScriptsScriptIdGet, getSettingsHistoryApiV1UserSettingsHistoryGet, getSubscriptionsApiV1NotificationsSubscriptionsGet, getSystemSettingsApiV1AdminSettingsGet, getUnreadCountApiV1NotificationsUnreadCountGet, getUserApiV1AdminUsersUserIdGet, getUserExecutionsApiV1UserExecutionsGet, getUserOverviewApiV1AdminUsersUserIdOverviewGet, getUserRateLimitsApiV1AdminUsersUserIdRateLimitsGet, getUserSettingsApiV1UserSettingsGet, listReplaySessionsApiV1ReplaySessionsGet, listSagasApiV1SagasGet, listSavedScriptsApiV1ScriptsGet, listUsersApiV1AdminUsersGet, livenessApiV1HealthLiveGet, loginApiV1AuthLoginPost, logoutApiV1AuthLogoutPost, markAllReadApiV1NotificationsMarkAllReadPost, markNotificationReadApiV1NotificationsNotificationIdReadPut, notificationStreamApiV1EventsNotificationsStreamGet, type Options, pauseReplaySessionApiV1ReplaySessionsSessionIdPausePost, registerApiV1AuthRegisterPost, replayEventsApiV1AdminEventsReplayPost, resetSystemSettingsApiV1AdminSettingsResetPost, resetUserPasswordApiV1AdminUsersUserIdResetPasswordPost, resetUserRateLimitsApiV1AdminUsersUserIdRateLimitsResetPost, restoreSettingsApiV1UserSettingsRestorePost, resumeReplaySessionApiV1ReplaySessionsSessionIdResumePost, retryDlqMessagesApiV1DlqRetryPost, retryExecutionApiV1ExecutionsExecutionIdRetryPost, setRetryPolicyApiV1DlqRetryPolicyPost, startReplaySessionApiV1ReplaySessionsSessionIdStartPost, unlockUserApiV1AdminUsersUserIdUnlockPost, updateCustomSettingApiV1UserSettingsCustomKeyPut, updateEditorSettingsApiV1UserSettingsEditorPut, updateNotificationSettingsApiV1UserSettingsNotificationsPut, updateSavedScriptApiV1ScriptsScriptIdPut, updateSubscriptionApiV1NotificationsSubscriptionsChannelPut, updateSystemSettingsApiV1AdminSettingsPut, updateThemeApiV1UserSettingsThemePut, updateUserApiV1AdminUsersUserIdPut, updateUserRateLimitsApiV1AdminUsersUserIdRateLimitsPut, updateUserSettingsApiV1UserSettingsPut } from './sdk.gen'; +export type { AdminUserOverview, AllocateResourcesCommandEvent, AuthFailedEvent, BodyLoginApiV1AuthLoginPost, BrowseEventsApiV1AdminEventsBrowsePostData, BrowseEventsApiV1AdminEventsBrowsePostError, BrowseEventsApiV1AdminEventsBrowsePostErrors, BrowseEventsApiV1AdminEventsBrowsePostResponse, BrowseEventsApiV1AdminEventsBrowsePostResponses, CancelExecutionApiV1ExecutionsExecutionIdCancelPostData, CancelExecutionApiV1ExecutionsExecutionIdCancelPostError, CancelExecutionApiV1ExecutionsExecutionIdCancelPostErrors, CancelExecutionApiV1ExecutionsExecutionIdCancelPostResponse, CancelExecutionApiV1ExecutionsExecutionIdCancelPostResponses, CancelExecutionRequest, CancelReplaySessionApiV1ReplaySessionsSessionIdCancelPostData, CancelReplaySessionApiV1ReplaySessionsSessionIdCancelPostError, CancelReplaySessionApiV1ReplaySessionsSessionIdCancelPostErrors, CancelReplaySessionApiV1ReplaySessionsSessionIdCancelPostResponse, CancelReplaySessionApiV1ReplaySessionsSessionIdCancelPostResponses, CancelResponse, CancelSagaApiV1SagasSagaIdCancelPostData, CancelSagaApiV1SagasSagaIdCancelPostError, CancelSagaApiV1SagasSagaIdCancelPostErrors, CancelSagaApiV1SagasSagaIdCancelPostResponse, CancelSagaApiV1SagasSagaIdCancelPostResponses, CancelStatus, CleanupOldSessionsApiV1ReplayCleanupPostData, CleanupOldSessionsApiV1ReplayCleanupPostError, CleanupOldSessionsApiV1ReplayCleanupPostErrors, CleanupOldSessionsApiV1ReplayCleanupPostResponse, CleanupOldSessionsApiV1ReplayCleanupPostResponses, CleanupResponse, ClientOptions, ContainerStatusInfo, CreateExecutionApiV1ExecutePostData, CreateExecutionApiV1ExecutePostError, CreateExecutionApiV1ExecutePostErrors, CreateExecutionApiV1ExecutePostResponse, CreateExecutionApiV1ExecutePostResponses, CreatePodCommandEvent, CreateReplaySessionApiV1ReplaySessionsPostData, CreateReplaySessionApiV1ReplaySessionsPostError, CreateReplaySessionApiV1ReplaySessionsPostErrors, CreateReplaySessionApiV1ReplaySessionsPostResponse, CreateReplaySessionApiV1ReplaySessionsPostResponses, CreateSavedScriptApiV1ScriptsPostData, CreateSavedScriptApiV1ScriptsPostError, CreateSavedScriptApiV1ScriptsPostErrors, CreateSavedScriptApiV1ScriptsPostResponse, CreateSavedScriptApiV1ScriptsPostResponses, CreateUserApiV1AdminUsersPostData, CreateUserApiV1AdminUsersPostError, CreateUserApiV1AdminUsersPostErrors, CreateUserApiV1AdminUsersPostResponse, CreateUserApiV1AdminUsersPostResponses, DeleteEventApiV1AdminEventsEventIdDeleteData, DeleteEventApiV1AdminEventsEventIdDeleteError, DeleteEventApiV1AdminEventsEventIdDeleteErrors, DeleteEventApiV1AdminEventsEventIdDeleteResponse, DeleteEventApiV1AdminEventsEventIdDeleteResponses, DeleteExecutionApiV1ExecutionsExecutionIdDeleteData, DeleteExecutionApiV1ExecutionsExecutionIdDeleteError, DeleteExecutionApiV1ExecutionsExecutionIdDeleteErrors, DeleteExecutionApiV1ExecutionsExecutionIdDeleteResponse, DeleteExecutionApiV1ExecutionsExecutionIdDeleteResponses, DeleteNotificationApiV1NotificationsNotificationIdDeleteData, DeleteNotificationApiV1NotificationsNotificationIdDeleteError, DeleteNotificationApiV1NotificationsNotificationIdDeleteErrors, DeleteNotificationApiV1NotificationsNotificationIdDeleteResponse, DeleteNotificationApiV1NotificationsNotificationIdDeleteResponses, DeleteNotificationResponse, DeletePodCommandEvent, DeleteResponse, DeleteSavedScriptApiV1ScriptsScriptIdDeleteData, DeleteSavedScriptApiV1ScriptsScriptIdDeleteError, DeleteSavedScriptApiV1ScriptsScriptIdDeleteErrors, DeleteSavedScriptApiV1ScriptsScriptIdDeleteResponse, DeleteSavedScriptApiV1ScriptsScriptIdDeleteResponses, DeleteUserApiV1AdminUsersUserIdDeleteData, DeleteUserApiV1AdminUsersUserIdDeleteError, DeleteUserApiV1AdminUsersUserIdDeleteErrors, DeleteUserApiV1AdminUsersUserIdDeleteResponse, DeleteUserApiV1AdminUsersUserIdDeleteResponses, DeleteUserResponse, DerivedCounts, DiscardDlqMessageApiV1DlqMessagesEventIdDeleteData, DiscardDlqMessageApiV1DlqMessagesEventIdDeleteError, DiscardDlqMessageApiV1DlqMessagesEventIdDeleteErrors, DiscardDlqMessageApiV1DlqMessagesEventIdDeleteResponse, DiscardDlqMessageApiV1DlqMessagesEventIdDeleteResponses, DlqBatchRetryResponse, DlqMessageDetail, DlqMessageDiscardedEvent, DlqMessageReceivedEvent, DlqMessageResponse, DlqMessageRetriedEvent, DlqMessagesResponse, DlqMessageStatus, DlqRetryResult, DlqTopicSummaryResponse, EditorSettings, EndpointGroup, EndpointUsageStats, Environment, ErrorResponse, EventBrowseRequest, EventBrowseResponse, EventDeleteResponse, EventDetailResponse, EventFilter, EventMetadata, EventReplayRequest, EventReplayResponse, EventReplayStatusResponse, EventReplayStatusResponseWritable, EventStatistics, EventStatsResponse, EventSummary, EventType, EventTypeCountSchema, ExampleScripts, ExecutionAcceptedEvent, ExecutionCancelledEvent, ExecutionCompletedEvent, ExecutionErrorType, ExecutionEventsApiV1EventsExecutionsExecutionIdGetData, ExecutionEventsApiV1EventsExecutionsExecutionIdGetError, ExecutionEventsApiV1EventsExecutionsExecutionIdGetErrors, ExecutionEventsApiV1EventsExecutionsExecutionIdGetResponse, ExecutionEventsApiV1EventsExecutionsExecutionIdGetResponses, ExecutionFailedEvent, ExecutionListResponse, ExecutionQueuedEvent, ExecutionRequest, ExecutionRequestedEvent, ExecutionResponse, ExecutionResult, ExecutionRunningEvent, ExecutionStartedEvent, ExecutionStatus, ExecutionTimeoutEvent, ExportEventsCsvApiV1AdminEventsExportCsvGetData, ExportEventsCsvApiV1AdminEventsExportCsvGetError, ExportEventsCsvApiV1AdminEventsExportCsvGetErrors, ExportEventsCsvApiV1AdminEventsExportCsvGetResponses, ExportEventsJsonApiV1AdminEventsExportJsonGetData, ExportEventsJsonApiV1AdminEventsExportJsonGetError, ExportEventsJsonApiV1AdminEventsExportJsonGetErrors, ExportEventsJsonApiV1AdminEventsExportJsonGetResponses, GetCurrentUserProfileApiV1AuthMeGetData, GetCurrentUserProfileApiV1AuthMeGetResponse, GetCurrentUserProfileApiV1AuthMeGetResponses, GetDlqMessageApiV1DlqMessagesEventIdGetData, GetDlqMessageApiV1DlqMessagesEventIdGetError, GetDlqMessageApiV1DlqMessagesEventIdGetErrors, GetDlqMessageApiV1DlqMessagesEventIdGetResponse, GetDlqMessageApiV1DlqMessagesEventIdGetResponses, GetDlqMessagesApiV1DlqMessagesGetData, GetDlqMessagesApiV1DlqMessagesGetError, GetDlqMessagesApiV1DlqMessagesGetErrors, GetDlqMessagesApiV1DlqMessagesGetResponse, GetDlqMessagesApiV1DlqMessagesGetResponses, GetDlqTopicsApiV1DlqTopicsGetData, GetDlqTopicsApiV1DlqTopicsGetResponse, GetDlqTopicsApiV1DlqTopicsGetResponses, GetEventDetailApiV1AdminEventsEventIdGetData, GetEventDetailApiV1AdminEventsEventIdGetError, GetEventDetailApiV1AdminEventsEventIdGetErrors, GetEventDetailApiV1AdminEventsEventIdGetResponse, GetEventDetailApiV1AdminEventsEventIdGetResponses, GetEventStatsApiV1AdminEventsStatsGetData, GetEventStatsApiV1AdminEventsStatsGetError, GetEventStatsApiV1AdminEventsStatsGetErrors, GetEventStatsApiV1AdminEventsStatsGetResponse, GetEventStatsApiV1AdminEventsStatsGetResponses, GetExampleScriptsApiV1ExampleScriptsGetData, GetExampleScriptsApiV1ExampleScriptsGetResponse, GetExampleScriptsApiV1ExampleScriptsGetResponses, GetExecutionEventsApiV1ExecutionsExecutionIdEventsGetData, GetExecutionEventsApiV1ExecutionsExecutionIdEventsGetError, GetExecutionEventsApiV1ExecutionsExecutionIdEventsGetErrors, GetExecutionEventsApiV1ExecutionsExecutionIdEventsGetResponse, GetExecutionEventsApiV1ExecutionsExecutionIdEventsGetResponses, GetExecutionSagasApiV1SagasExecutionExecutionIdGetData, GetExecutionSagasApiV1SagasExecutionExecutionIdGetError, GetExecutionSagasApiV1SagasExecutionExecutionIdGetErrors, GetExecutionSagasApiV1SagasExecutionExecutionIdGetResponse, GetExecutionSagasApiV1SagasExecutionExecutionIdGetResponses, GetK8sResourceLimitsApiV1K8sLimitsGetData, GetK8sResourceLimitsApiV1K8sLimitsGetResponse, GetK8sResourceLimitsApiV1K8sLimitsGetResponses, GetNotificationsApiV1NotificationsGetData, GetNotificationsApiV1NotificationsGetError, GetNotificationsApiV1NotificationsGetErrors, GetNotificationsApiV1NotificationsGetResponse, GetNotificationsApiV1NotificationsGetResponses, GetReplaySessionApiV1ReplaySessionsSessionIdGetData, GetReplaySessionApiV1ReplaySessionsSessionIdGetError, GetReplaySessionApiV1ReplaySessionsSessionIdGetErrors, GetReplaySessionApiV1ReplaySessionsSessionIdGetResponse, GetReplaySessionApiV1ReplaySessionsSessionIdGetResponses, GetReplayStatusApiV1AdminEventsReplaySessionIdStatusGetData, GetReplayStatusApiV1AdminEventsReplaySessionIdStatusGetError, GetReplayStatusApiV1AdminEventsReplaySessionIdStatusGetErrors, GetReplayStatusApiV1AdminEventsReplaySessionIdStatusGetResponse, GetReplayStatusApiV1AdminEventsReplaySessionIdStatusGetResponses, GetResultApiV1ExecutionsExecutionIdResultGetData, GetResultApiV1ExecutionsExecutionIdResultGetError, GetResultApiV1ExecutionsExecutionIdResultGetErrors, GetResultApiV1ExecutionsExecutionIdResultGetResponse, GetResultApiV1ExecutionsExecutionIdResultGetResponses, GetSagaStatusApiV1SagasSagaIdGetData, GetSagaStatusApiV1SagasSagaIdGetError, GetSagaStatusApiV1SagasSagaIdGetErrors, GetSagaStatusApiV1SagasSagaIdGetResponse, GetSagaStatusApiV1SagasSagaIdGetResponses, GetSavedScriptApiV1ScriptsScriptIdGetData, GetSavedScriptApiV1ScriptsScriptIdGetError, GetSavedScriptApiV1ScriptsScriptIdGetErrors, GetSavedScriptApiV1ScriptsScriptIdGetResponse, GetSavedScriptApiV1ScriptsScriptIdGetResponses, GetSettingsHistoryApiV1UserSettingsHistoryGetData, GetSettingsHistoryApiV1UserSettingsHistoryGetError, GetSettingsHistoryApiV1UserSettingsHistoryGetErrors, GetSettingsHistoryApiV1UserSettingsHistoryGetResponse, GetSettingsHistoryApiV1UserSettingsHistoryGetResponses, GetSubscriptionsApiV1NotificationsSubscriptionsGetData, GetSubscriptionsApiV1NotificationsSubscriptionsGetResponse, GetSubscriptionsApiV1NotificationsSubscriptionsGetResponses, GetSystemSettingsApiV1AdminSettingsGetData, GetSystemSettingsApiV1AdminSettingsGetError, GetSystemSettingsApiV1AdminSettingsGetErrors, GetSystemSettingsApiV1AdminSettingsGetResponse, GetSystemSettingsApiV1AdminSettingsGetResponses, GetUnreadCountApiV1NotificationsUnreadCountGetData, GetUnreadCountApiV1NotificationsUnreadCountGetResponse, GetUnreadCountApiV1NotificationsUnreadCountGetResponses, GetUserApiV1AdminUsersUserIdGetData, GetUserApiV1AdminUsersUserIdGetError, GetUserApiV1AdminUsersUserIdGetErrors, GetUserApiV1AdminUsersUserIdGetResponse, GetUserApiV1AdminUsersUserIdGetResponses, GetUserExecutionsApiV1UserExecutionsGetData, GetUserExecutionsApiV1UserExecutionsGetError, GetUserExecutionsApiV1UserExecutionsGetErrors, GetUserExecutionsApiV1UserExecutionsGetResponse, GetUserExecutionsApiV1UserExecutionsGetResponses, GetUserOverviewApiV1AdminUsersUserIdOverviewGetData, GetUserOverviewApiV1AdminUsersUserIdOverviewGetError, GetUserOverviewApiV1AdminUsersUserIdOverviewGetErrors, GetUserOverviewApiV1AdminUsersUserIdOverviewGetResponse, GetUserOverviewApiV1AdminUsersUserIdOverviewGetResponses, GetUserRateLimitsApiV1AdminUsersUserIdRateLimitsGetData, GetUserRateLimitsApiV1AdminUsersUserIdRateLimitsGetError, GetUserRateLimitsApiV1AdminUsersUserIdRateLimitsGetErrors, GetUserRateLimitsApiV1AdminUsersUserIdRateLimitsGetResponse, GetUserRateLimitsApiV1AdminUsersUserIdRateLimitsGetResponses, GetUserSettingsApiV1UserSettingsGetData, GetUserSettingsApiV1UserSettingsGetResponse, GetUserSettingsApiV1UserSettingsGetResponses, HourlyEventCountSchema, HttpValidationError, KafkaTopic, LanguageInfo, ListReplaySessionsApiV1ReplaySessionsGetData, ListReplaySessionsApiV1ReplaySessionsGetError, ListReplaySessionsApiV1ReplaySessionsGetErrors, ListReplaySessionsApiV1ReplaySessionsGetResponse, ListReplaySessionsApiV1ReplaySessionsGetResponses, ListSagasApiV1SagasGetData, ListSagasApiV1SagasGetError, ListSagasApiV1SagasGetErrors, ListSagasApiV1SagasGetResponse, ListSagasApiV1SagasGetResponses, ListSavedScriptsApiV1ScriptsGetData, ListSavedScriptsApiV1ScriptsGetResponse, ListSavedScriptsApiV1ScriptsGetResponses, ListUsersApiV1AdminUsersGetData, ListUsersApiV1AdminUsersGetError, ListUsersApiV1AdminUsersGetErrors, ListUsersApiV1AdminUsersGetResponse, ListUsersApiV1AdminUsersGetResponses, LivenessApiV1HealthLiveGetData, LivenessApiV1HealthLiveGetResponse, LivenessApiV1HealthLiveGetResponses, LivenessResponse, LoginApiV1AuthLoginPostData, LoginApiV1AuthLoginPostError, LoginApiV1AuthLoginPostErrors, LoginApiV1AuthLoginPostResponse, LoginApiV1AuthLoginPostResponses, LoginMethod, LoginResponse, LogLevel, LogoutApiV1AuthLogoutPostData, LogoutApiV1AuthLogoutPostResponse, LogoutApiV1AuthLogoutPostResponses, ManualRetryRequest, MarkAllReadApiV1NotificationsMarkAllReadPostData, MarkAllReadApiV1NotificationsMarkAllReadPostResponse, MarkAllReadApiV1NotificationsMarkAllReadPostResponses, MarkNotificationReadApiV1NotificationsNotificationIdReadPutData, MarkNotificationReadApiV1NotificationsNotificationIdReadPutError, MarkNotificationReadApiV1NotificationsNotificationIdReadPutErrors, MarkNotificationReadApiV1NotificationsNotificationIdReadPutResponse, MarkNotificationReadApiV1NotificationsNotificationIdReadPutResponses, MessageResponse, NotificationAllReadEvent, NotificationChannel, NotificationClickedEvent, NotificationCreatedEvent, NotificationDeliveredEvent, NotificationFailedEvent, NotificationListResponse, NotificationPreferencesUpdatedEvent, NotificationReadEvent, NotificationResponse, NotificationSentEvent, NotificationSettings, NotificationSeverity, NotificationStatus, NotificationStreamApiV1EventsNotificationsStreamGetData, NotificationStreamApiV1EventsNotificationsStreamGetResponse, NotificationStreamApiV1EventsNotificationsStreamGetResponses, NotificationSubscription, PasswordResetRequest, PauseReplaySessionApiV1ReplaySessionsSessionIdPausePostData, PauseReplaySessionApiV1ReplaySessionsSessionIdPausePostError, PauseReplaySessionApiV1ReplaySessionsSessionIdPausePostErrors, PauseReplaySessionApiV1ReplaySessionsSessionIdPausePostResponse, PauseReplaySessionApiV1ReplaySessionsSessionIdPausePostResponses, PodCreatedEvent, PodDeletedEvent, PodFailedEvent, PodRunningEvent, PodScheduledEvent, PodSucceededEvent, PodTerminatedEvent, QueuePriority, QuotaExceededEvent, RateLimitAlgorithm, RateLimitExceededEvent, RateLimitRuleRequest, RateLimitRuleResponse, RateLimitSummary, RateLimitUpdateRequest, RateLimitUpdateResponse, RegisterApiV1AuthRegisterPostData, RegisterApiV1AuthRegisterPostError, RegisterApiV1AuthRegisterPostErrors, RegisterApiV1AuthRegisterPostResponse, RegisterApiV1AuthRegisterPostResponses, ReleaseResourcesCommandEvent, ReplayConfigSchema, ReplayError, ReplayEventsApiV1AdminEventsReplayPostData, ReplayEventsApiV1AdminEventsReplayPostError, ReplayEventsApiV1AdminEventsReplayPostErrors, ReplayEventsApiV1AdminEventsReplayPostResponse, ReplayEventsApiV1AdminEventsReplayPostResponses, ReplayFilter, ReplayFilterSchema, ReplayRequest, ReplayResponse, ReplaySession, ReplayStatus, ReplayTarget, ReplayType, ResetSystemSettingsApiV1AdminSettingsResetPostData, ResetSystemSettingsApiV1AdminSettingsResetPostError, ResetSystemSettingsApiV1AdminSettingsResetPostErrors, ResetSystemSettingsApiV1AdminSettingsResetPostResponse, ResetSystemSettingsApiV1AdminSettingsResetPostResponses, ResetUserPasswordApiV1AdminUsersUserIdResetPasswordPostData, ResetUserPasswordApiV1AdminUsersUserIdResetPasswordPostError, ResetUserPasswordApiV1AdminUsersUserIdResetPasswordPostErrors, ResetUserPasswordApiV1AdminUsersUserIdResetPasswordPostResponse, ResetUserPasswordApiV1AdminUsersUserIdResetPasswordPostResponses, ResetUserRateLimitsApiV1AdminUsersUserIdRateLimitsResetPostData, ResetUserRateLimitsApiV1AdminUsersUserIdRateLimitsResetPostError, ResetUserRateLimitsApiV1AdminUsersUserIdRateLimitsResetPostErrors, ResetUserRateLimitsApiV1AdminUsersUserIdRateLimitsResetPostResponse, ResetUserRateLimitsApiV1AdminUsersUserIdRateLimitsResetPostResponses, ResourceLimitExceededEvent, ResourceLimits, ResourceUsage, ResourceUsageDomain, RestoreSettingsApiV1UserSettingsRestorePostData, RestoreSettingsApiV1UserSettingsRestorePostError, RestoreSettingsApiV1UserSettingsRestorePostErrors, RestoreSettingsApiV1UserSettingsRestorePostResponse, RestoreSettingsApiV1UserSettingsRestorePostResponses, RestoreSettingsRequest, ResultFailedEvent, ResultStoredEvent, ResumeReplaySessionApiV1ReplaySessionsSessionIdResumePostData, ResumeReplaySessionApiV1ReplaySessionsSessionIdResumePostError, ResumeReplaySessionApiV1ReplaySessionsSessionIdResumePostErrors, ResumeReplaySessionApiV1ReplaySessionsSessionIdResumePostResponse, ResumeReplaySessionApiV1ReplaySessionsSessionIdResumePostResponses, RetryDlqMessagesApiV1DlqRetryPostData, RetryDlqMessagesApiV1DlqRetryPostError, RetryDlqMessagesApiV1DlqRetryPostErrors, RetryDlqMessagesApiV1DlqRetryPostResponse, RetryDlqMessagesApiV1DlqRetryPostResponses, RetryExecutionApiV1ExecutionsExecutionIdRetryPostData, RetryExecutionApiV1ExecutionsExecutionIdRetryPostError, RetryExecutionApiV1ExecutionsExecutionIdRetryPostErrors, RetryExecutionApiV1ExecutionsExecutionIdRetryPostResponse, RetryExecutionApiV1ExecutionsExecutionIdRetryPostResponses, RetryPolicyRequest, RetryStrategy, SagaCancellationResponse, SagaCancelledEvent, SagaCompensatedEvent, SagaCompensatingEvent, SagaCompletedEvent, SagaFailedEvent, SagaListResponse, SagaStartedEvent, SagaState, SagaStatusResponse, SavedScriptCreateRequest, SavedScriptResponse, SavedScriptUpdate, ScriptDeletedEvent, ScriptSavedEvent, ScriptSharedEvent, SecurityViolationEvent, ServiceEventCountSchema, ServiceRecoveredEvent, ServiceUnhealthyEvent, SessionConfigSummary, SessionSummary, SessionSummaryWritable, SetRetryPolicyApiV1DlqRetryPolicyPostData, SetRetryPolicyApiV1DlqRetryPolicyPostError, SetRetryPolicyApiV1DlqRetryPolicyPostErrors, SetRetryPolicyApiV1DlqRetryPolicyPostResponse, SetRetryPolicyApiV1DlqRetryPolicyPostResponses, SettingsHistoryEntry, SettingsHistoryResponse, SseControlEvent, SseExecutionEventData, StartReplaySessionApiV1ReplaySessionsSessionIdStartPostData, StartReplaySessionApiV1ReplaySessionsSessionIdStartPostError, StartReplaySessionApiV1ReplaySessionsSessionIdStartPostErrors, StartReplaySessionApiV1ReplaySessionsSessionIdStartPostResponse, StartReplaySessionApiV1ReplaySessionsSessionIdStartPostResponses, StorageType, SubscriptionsResponse, SubscriptionUpdate, SystemErrorEvent, SystemSettingsSchema, Theme, ThemeUpdateRequest, UnlockResponse, UnlockUserApiV1AdminUsersUserIdUnlockPostData, UnlockUserApiV1AdminUsersUserIdUnlockPostError, UnlockUserApiV1AdminUsersUserIdUnlockPostErrors, UnlockUserApiV1AdminUsersUserIdUnlockPostResponse, UnlockUserApiV1AdminUsersUserIdUnlockPostResponses, UnreadCountResponse, UpdateCustomSettingApiV1UserSettingsCustomKeyPutData, UpdateCustomSettingApiV1UserSettingsCustomKeyPutError, UpdateCustomSettingApiV1UserSettingsCustomKeyPutErrors, UpdateCustomSettingApiV1UserSettingsCustomKeyPutResponse, UpdateCustomSettingApiV1UserSettingsCustomKeyPutResponses, UpdateEditorSettingsApiV1UserSettingsEditorPutData, UpdateEditorSettingsApiV1UserSettingsEditorPutError, UpdateEditorSettingsApiV1UserSettingsEditorPutErrors, UpdateEditorSettingsApiV1UserSettingsEditorPutResponse, UpdateEditorSettingsApiV1UserSettingsEditorPutResponses, UpdateNotificationSettingsApiV1UserSettingsNotificationsPutData, UpdateNotificationSettingsApiV1UserSettingsNotificationsPutError, UpdateNotificationSettingsApiV1UserSettingsNotificationsPutErrors, UpdateNotificationSettingsApiV1UserSettingsNotificationsPutResponse, UpdateNotificationSettingsApiV1UserSettingsNotificationsPutResponses, UpdateSavedScriptApiV1ScriptsScriptIdPutData, UpdateSavedScriptApiV1ScriptsScriptIdPutError, UpdateSavedScriptApiV1ScriptsScriptIdPutErrors, UpdateSavedScriptApiV1ScriptsScriptIdPutResponse, UpdateSavedScriptApiV1ScriptsScriptIdPutResponses, UpdateSubscriptionApiV1NotificationsSubscriptionsChannelPutData, UpdateSubscriptionApiV1NotificationsSubscriptionsChannelPutError, UpdateSubscriptionApiV1NotificationsSubscriptionsChannelPutErrors, UpdateSubscriptionApiV1NotificationsSubscriptionsChannelPutResponse, UpdateSubscriptionApiV1NotificationsSubscriptionsChannelPutResponses, UpdateSystemSettingsApiV1AdminSettingsPutData, UpdateSystemSettingsApiV1AdminSettingsPutError, UpdateSystemSettingsApiV1AdminSettingsPutErrors, UpdateSystemSettingsApiV1AdminSettingsPutResponse, UpdateSystemSettingsApiV1AdminSettingsPutResponses, UpdateThemeApiV1UserSettingsThemePutData, UpdateThemeApiV1UserSettingsThemePutError, UpdateThemeApiV1UserSettingsThemePutErrors, UpdateThemeApiV1UserSettingsThemePutResponse, UpdateThemeApiV1UserSettingsThemePutResponses, UpdateUserApiV1AdminUsersUserIdPutData, UpdateUserApiV1AdminUsersUserIdPutError, UpdateUserApiV1AdminUsersUserIdPutErrors, UpdateUserApiV1AdminUsersUserIdPutResponse, UpdateUserApiV1AdminUsersUserIdPutResponses, UpdateUserRateLimitsApiV1AdminUsersUserIdRateLimitsPutData, UpdateUserRateLimitsApiV1AdminUsersUserIdRateLimitsPutError, UpdateUserRateLimitsApiV1AdminUsersUserIdRateLimitsPutErrors, UpdateUserRateLimitsApiV1AdminUsersUserIdRateLimitsPutResponse, UpdateUserRateLimitsApiV1AdminUsersUserIdRateLimitsPutResponses, UpdateUserSettingsApiV1UserSettingsPutData, UpdateUserSettingsApiV1UserSettingsPutError, UpdateUserSettingsApiV1UserSettingsPutErrors, UpdateUserSettingsApiV1UserSettingsPutResponse, UpdateUserSettingsApiV1UserSettingsPutResponses, UserCreate, UserDeletedEvent, UserEventCountSchema, UserListResponse, UserLoggedInEvent, UserLoggedOutEvent, UserLoginEvent, UserRateLimitConfigResponse, UserRateLimitsResponse, UserRegisteredEvent, UserResponse, UserRole, UserSettings, UserSettingsUpdate, UserSettingsUpdatedEvent, UserUpdate, UserUpdatedEvent, ValidationError } from './types.gen'; diff --git a/frontend/src/lib/api/sdk.gen.ts b/frontend/src/lib/api/sdk.gen.ts index 533afd04..743e059c 100644 --- a/frontend/src/lib/api/sdk.gen.ts +++ b/frontend/src/lib/api/sdk.gen.ts @@ -2,7 +2,7 @@ import { type Client, type Options as Options2, type TDataShape, urlSearchParamsBodySerializer } from './client'; import { client } from './client.gen'; -import type { BrowseEventsApiV1AdminEventsBrowsePostData, BrowseEventsApiV1AdminEventsBrowsePostErrors, BrowseEventsApiV1AdminEventsBrowsePostResponses, CancelExecutionApiV1ExecutionsExecutionIdCancelPostData, CancelExecutionApiV1ExecutionsExecutionIdCancelPostErrors, CancelExecutionApiV1ExecutionsExecutionIdCancelPostResponses, CancelReplaySessionApiV1ReplaySessionsSessionIdCancelPostData, CancelReplaySessionApiV1ReplaySessionsSessionIdCancelPostErrors, CancelReplaySessionApiV1ReplaySessionsSessionIdCancelPostResponses, CancelSagaApiV1SagasSagaIdCancelPostData, CancelSagaApiV1SagasSagaIdCancelPostErrors, CancelSagaApiV1SagasSagaIdCancelPostResponses, CleanupOldSessionsApiV1ReplayCleanupPostData, CleanupOldSessionsApiV1ReplayCleanupPostErrors, CleanupOldSessionsApiV1ReplayCleanupPostResponses, CreateExecutionApiV1ExecutePostData, CreateExecutionApiV1ExecutePostErrors, CreateExecutionApiV1ExecutePostResponses, CreateReplaySessionApiV1ReplaySessionsPostData, CreateReplaySessionApiV1ReplaySessionsPostErrors, CreateReplaySessionApiV1ReplaySessionsPostResponses, CreateSavedScriptApiV1ScriptsPostData, CreateSavedScriptApiV1ScriptsPostErrors, CreateSavedScriptApiV1ScriptsPostResponses, CreateUserApiV1AdminUsersPostData, CreateUserApiV1AdminUsersPostErrors, CreateUserApiV1AdminUsersPostResponses, DeleteEventApiV1AdminEventsEventIdDeleteData, DeleteEventApiV1AdminEventsEventIdDeleteErrors, DeleteEventApiV1AdminEventsEventIdDeleteResponses, DeleteEventApiV1EventsEventIdDeleteData, DeleteEventApiV1EventsEventIdDeleteErrors, DeleteEventApiV1EventsEventIdDeleteResponses, DeleteExecutionApiV1ExecutionsExecutionIdDeleteData, DeleteExecutionApiV1ExecutionsExecutionIdDeleteErrors, DeleteExecutionApiV1ExecutionsExecutionIdDeleteResponses, DeleteNotificationApiV1NotificationsNotificationIdDeleteData, DeleteNotificationApiV1NotificationsNotificationIdDeleteErrors, DeleteNotificationApiV1NotificationsNotificationIdDeleteResponses, DeleteSavedScriptApiV1ScriptsScriptIdDeleteData, DeleteSavedScriptApiV1ScriptsScriptIdDeleteErrors, DeleteSavedScriptApiV1ScriptsScriptIdDeleteResponses, DeleteUserApiV1AdminUsersUserIdDeleteData, DeleteUserApiV1AdminUsersUserIdDeleteErrors, DeleteUserApiV1AdminUsersUserIdDeleteResponses, DiscardDlqMessageApiV1DlqMessagesEventIdDeleteData, DiscardDlqMessageApiV1DlqMessagesEventIdDeleteErrors, DiscardDlqMessageApiV1DlqMessagesEventIdDeleteResponses, ExecutionEventsApiV1EventsExecutionsExecutionIdGetData, ExecutionEventsApiV1EventsExecutionsExecutionIdGetErrors, ExecutionEventsApiV1EventsExecutionsExecutionIdGetResponses, ExportEventsCsvApiV1AdminEventsExportCsvGetData, ExportEventsCsvApiV1AdminEventsExportCsvGetErrors, ExportEventsCsvApiV1AdminEventsExportCsvGetResponses, ExportEventsJsonApiV1AdminEventsExportJsonGetData, ExportEventsJsonApiV1AdminEventsExportJsonGetErrors, ExportEventsJsonApiV1AdminEventsExportJsonGetResponses, GetCurrentRequestEventsApiV1EventsCurrentRequestGetData, GetCurrentRequestEventsApiV1EventsCurrentRequestGetErrors, GetCurrentRequestEventsApiV1EventsCurrentRequestGetResponses, GetCurrentUserProfileApiV1AuthMeGetData, GetCurrentUserProfileApiV1AuthMeGetResponses, GetDlqMessageApiV1DlqMessagesEventIdGetData, GetDlqMessageApiV1DlqMessagesEventIdGetErrors, GetDlqMessageApiV1DlqMessagesEventIdGetResponses, GetDlqMessagesApiV1DlqMessagesGetData, GetDlqMessagesApiV1DlqMessagesGetErrors, GetDlqMessagesApiV1DlqMessagesGetResponses, GetDlqTopicsApiV1DlqTopicsGetData, GetDlqTopicsApiV1DlqTopicsGetResponses, GetEventApiV1EventsEventIdGetData, GetEventApiV1EventsEventIdGetErrors, GetEventApiV1EventsEventIdGetResponses, GetEventDetailApiV1AdminEventsEventIdGetData, GetEventDetailApiV1AdminEventsEventIdGetErrors, GetEventDetailApiV1AdminEventsEventIdGetResponses, GetEventsByCorrelationApiV1EventsCorrelationCorrelationIdGetData, GetEventsByCorrelationApiV1EventsCorrelationCorrelationIdGetErrors, GetEventsByCorrelationApiV1EventsCorrelationCorrelationIdGetResponses, GetEventStatisticsApiV1EventsStatisticsGetData, GetEventStatisticsApiV1EventsStatisticsGetErrors, GetEventStatisticsApiV1EventsStatisticsGetResponses, GetEventStatsApiV1AdminEventsStatsGetData, GetEventStatsApiV1AdminEventsStatsGetErrors, GetEventStatsApiV1AdminEventsStatsGetResponses, GetExampleScriptsApiV1ExampleScriptsGetData, GetExampleScriptsApiV1ExampleScriptsGetResponses, GetExecutionEventsApiV1EventsExecutionsExecutionIdEventsGetData, GetExecutionEventsApiV1EventsExecutionsExecutionIdEventsGetErrors, GetExecutionEventsApiV1EventsExecutionsExecutionIdEventsGetResponses, GetExecutionEventsApiV1ExecutionsExecutionIdEventsGetData, GetExecutionEventsApiV1ExecutionsExecutionIdEventsGetErrors, GetExecutionEventsApiV1ExecutionsExecutionIdEventsGetResponses, GetExecutionSagasApiV1SagasExecutionExecutionIdGetData, GetExecutionSagasApiV1SagasExecutionExecutionIdGetErrors, GetExecutionSagasApiV1SagasExecutionExecutionIdGetResponses, GetK8sResourceLimitsApiV1K8sLimitsGetData, GetK8sResourceLimitsApiV1K8sLimitsGetResponses, GetNotificationsApiV1NotificationsGetData, GetNotificationsApiV1NotificationsGetErrors, GetNotificationsApiV1NotificationsGetResponses, GetReplaySessionApiV1ReplaySessionsSessionIdGetData, GetReplaySessionApiV1ReplaySessionsSessionIdGetErrors, GetReplaySessionApiV1ReplaySessionsSessionIdGetResponses, GetReplayStatusApiV1AdminEventsReplaySessionIdStatusGetData, GetReplayStatusApiV1AdminEventsReplaySessionIdStatusGetErrors, GetReplayStatusApiV1AdminEventsReplaySessionIdStatusGetResponses, GetResultApiV1ExecutionsExecutionIdResultGetData, GetResultApiV1ExecutionsExecutionIdResultGetErrors, GetResultApiV1ExecutionsExecutionIdResultGetResponses, GetSagaStatusApiV1SagasSagaIdGetData, GetSagaStatusApiV1SagasSagaIdGetErrors, GetSagaStatusApiV1SagasSagaIdGetResponses, GetSavedScriptApiV1ScriptsScriptIdGetData, GetSavedScriptApiV1ScriptsScriptIdGetErrors, GetSavedScriptApiV1ScriptsScriptIdGetResponses, GetSettingsHistoryApiV1UserSettingsHistoryGetData, GetSettingsHistoryApiV1UserSettingsHistoryGetErrors, GetSettingsHistoryApiV1UserSettingsHistoryGetResponses, GetSubscriptionsApiV1NotificationsSubscriptionsGetData, GetSubscriptionsApiV1NotificationsSubscriptionsGetResponses, GetSystemSettingsApiV1AdminSettingsGetData, GetSystemSettingsApiV1AdminSettingsGetErrors, GetSystemSettingsApiV1AdminSettingsGetResponses, GetUnreadCountApiV1NotificationsUnreadCountGetData, GetUnreadCountApiV1NotificationsUnreadCountGetResponses, GetUserApiV1AdminUsersUserIdGetData, GetUserApiV1AdminUsersUserIdGetErrors, GetUserApiV1AdminUsersUserIdGetResponses, GetUserEventsApiV1EventsUserGetData, GetUserEventsApiV1EventsUserGetErrors, GetUserEventsApiV1EventsUserGetResponses, GetUserExecutionsApiV1UserExecutionsGetData, GetUserExecutionsApiV1UserExecutionsGetErrors, GetUserExecutionsApiV1UserExecutionsGetResponses, GetUserOverviewApiV1AdminUsersUserIdOverviewGetData, GetUserOverviewApiV1AdminUsersUserIdOverviewGetErrors, GetUserOverviewApiV1AdminUsersUserIdOverviewGetResponses, GetUserRateLimitsApiV1AdminUsersUserIdRateLimitsGetData, GetUserRateLimitsApiV1AdminUsersUserIdRateLimitsGetErrors, GetUserRateLimitsApiV1AdminUsersUserIdRateLimitsGetResponses, GetUserSettingsApiV1UserSettingsGetData, GetUserSettingsApiV1UserSettingsGetResponses, ListReplaySessionsApiV1ReplaySessionsGetData, ListReplaySessionsApiV1ReplaySessionsGetErrors, ListReplaySessionsApiV1ReplaySessionsGetResponses, ListSagasApiV1SagasGetData, ListSagasApiV1SagasGetErrors, ListSagasApiV1SagasGetResponses, ListSavedScriptsApiV1ScriptsGetData, ListSavedScriptsApiV1ScriptsGetResponses, ListUsersApiV1AdminUsersGetData, ListUsersApiV1AdminUsersGetErrors, ListUsersApiV1AdminUsersGetResponses, LivenessApiV1HealthLiveGetData, LivenessApiV1HealthLiveGetResponses, LoginApiV1AuthLoginPostData, LoginApiV1AuthLoginPostErrors, LoginApiV1AuthLoginPostResponses, LogoutApiV1AuthLogoutPostData, LogoutApiV1AuthLogoutPostResponses, MarkAllReadApiV1NotificationsMarkAllReadPostData, MarkAllReadApiV1NotificationsMarkAllReadPostResponses, MarkNotificationReadApiV1NotificationsNotificationIdReadPutData, MarkNotificationReadApiV1NotificationsNotificationIdReadPutErrors, MarkNotificationReadApiV1NotificationsNotificationIdReadPutResponses, NotificationStreamApiV1EventsNotificationsStreamGetData, NotificationStreamApiV1EventsNotificationsStreamGetResponses, PauseReplaySessionApiV1ReplaySessionsSessionIdPausePostData, PauseReplaySessionApiV1ReplaySessionsSessionIdPausePostErrors, PauseReplaySessionApiV1ReplaySessionsSessionIdPausePostResponses, PublishCustomEventApiV1EventsPublishPostData, PublishCustomEventApiV1EventsPublishPostErrors, PublishCustomEventApiV1EventsPublishPostResponses, QueryEventsApiV1EventsQueryPostData, QueryEventsApiV1EventsQueryPostErrors, QueryEventsApiV1EventsQueryPostResponses, RegisterApiV1AuthRegisterPostData, RegisterApiV1AuthRegisterPostErrors, RegisterApiV1AuthRegisterPostResponses, ReplayAggregateEventsApiV1EventsReplayAggregateIdPostData, ReplayAggregateEventsApiV1EventsReplayAggregateIdPostErrors, ReplayAggregateEventsApiV1EventsReplayAggregateIdPostResponses, ReplayEventsApiV1AdminEventsReplayPostData, ReplayEventsApiV1AdminEventsReplayPostErrors, ReplayEventsApiV1AdminEventsReplayPostResponses, ResetSystemSettingsApiV1AdminSettingsResetPostData, ResetSystemSettingsApiV1AdminSettingsResetPostErrors, ResetSystemSettingsApiV1AdminSettingsResetPostResponses, ResetUserPasswordApiV1AdminUsersUserIdResetPasswordPostData, ResetUserPasswordApiV1AdminUsersUserIdResetPasswordPostErrors, ResetUserPasswordApiV1AdminUsersUserIdResetPasswordPostResponses, ResetUserRateLimitsApiV1AdminUsersUserIdRateLimitsResetPostData, ResetUserRateLimitsApiV1AdminUsersUserIdRateLimitsResetPostErrors, ResetUserRateLimitsApiV1AdminUsersUserIdRateLimitsResetPostResponses, RestoreSettingsApiV1UserSettingsRestorePostData, RestoreSettingsApiV1UserSettingsRestorePostErrors, RestoreSettingsApiV1UserSettingsRestorePostResponses, ResumeReplaySessionApiV1ReplaySessionsSessionIdResumePostData, ResumeReplaySessionApiV1ReplaySessionsSessionIdResumePostErrors, ResumeReplaySessionApiV1ReplaySessionsSessionIdResumePostResponses, RetryDlqMessagesApiV1DlqRetryPostData, RetryDlqMessagesApiV1DlqRetryPostErrors, RetryDlqMessagesApiV1DlqRetryPostResponses, RetryExecutionApiV1ExecutionsExecutionIdRetryPostData, RetryExecutionApiV1ExecutionsExecutionIdRetryPostErrors, RetryExecutionApiV1ExecutionsExecutionIdRetryPostResponses, SetRetryPolicyApiV1DlqRetryPolicyPostData, SetRetryPolicyApiV1DlqRetryPolicyPostErrors, SetRetryPolicyApiV1DlqRetryPolicyPostResponses, StartReplaySessionApiV1ReplaySessionsSessionIdStartPostData, StartReplaySessionApiV1ReplaySessionsSessionIdStartPostErrors, StartReplaySessionApiV1ReplaySessionsSessionIdStartPostResponses, UnlockUserApiV1AdminUsersUserIdUnlockPostData, UnlockUserApiV1AdminUsersUserIdUnlockPostErrors, UnlockUserApiV1AdminUsersUserIdUnlockPostResponses, UpdateCustomSettingApiV1UserSettingsCustomKeyPutData, UpdateCustomSettingApiV1UserSettingsCustomKeyPutErrors, UpdateCustomSettingApiV1UserSettingsCustomKeyPutResponses, UpdateEditorSettingsApiV1UserSettingsEditorPutData, UpdateEditorSettingsApiV1UserSettingsEditorPutErrors, UpdateEditorSettingsApiV1UserSettingsEditorPutResponses, UpdateNotificationSettingsApiV1UserSettingsNotificationsPutData, UpdateNotificationSettingsApiV1UserSettingsNotificationsPutErrors, UpdateNotificationSettingsApiV1UserSettingsNotificationsPutResponses, UpdateSavedScriptApiV1ScriptsScriptIdPutData, UpdateSavedScriptApiV1ScriptsScriptIdPutErrors, UpdateSavedScriptApiV1ScriptsScriptIdPutResponses, UpdateSubscriptionApiV1NotificationsSubscriptionsChannelPutData, UpdateSubscriptionApiV1NotificationsSubscriptionsChannelPutErrors, UpdateSubscriptionApiV1NotificationsSubscriptionsChannelPutResponses, UpdateSystemSettingsApiV1AdminSettingsPutData, UpdateSystemSettingsApiV1AdminSettingsPutErrors, UpdateSystemSettingsApiV1AdminSettingsPutResponses, UpdateThemeApiV1UserSettingsThemePutData, UpdateThemeApiV1UserSettingsThemePutErrors, UpdateThemeApiV1UserSettingsThemePutResponses, UpdateUserApiV1AdminUsersUserIdPutData, UpdateUserApiV1AdminUsersUserIdPutErrors, UpdateUserApiV1AdminUsersUserIdPutResponses, UpdateUserRateLimitsApiV1AdminUsersUserIdRateLimitsPutData, UpdateUserRateLimitsApiV1AdminUsersUserIdRateLimitsPutErrors, UpdateUserRateLimitsApiV1AdminUsersUserIdRateLimitsPutResponses, UpdateUserSettingsApiV1UserSettingsPutData, UpdateUserSettingsApiV1UserSettingsPutErrors, UpdateUserSettingsApiV1UserSettingsPutResponses } from './types.gen'; +import type { BrowseEventsApiV1AdminEventsBrowsePostData, BrowseEventsApiV1AdminEventsBrowsePostErrors, BrowseEventsApiV1AdminEventsBrowsePostResponses, CancelExecutionApiV1ExecutionsExecutionIdCancelPostData, CancelExecutionApiV1ExecutionsExecutionIdCancelPostErrors, CancelExecutionApiV1ExecutionsExecutionIdCancelPostResponses, CancelReplaySessionApiV1ReplaySessionsSessionIdCancelPostData, CancelReplaySessionApiV1ReplaySessionsSessionIdCancelPostErrors, CancelReplaySessionApiV1ReplaySessionsSessionIdCancelPostResponses, CancelSagaApiV1SagasSagaIdCancelPostData, CancelSagaApiV1SagasSagaIdCancelPostErrors, CancelSagaApiV1SagasSagaIdCancelPostResponses, CleanupOldSessionsApiV1ReplayCleanupPostData, CleanupOldSessionsApiV1ReplayCleanupPostErrors, CleanupOldSessionsApiV1ReplayCleanupPostResponses, CreateExecutionApiV1ExecutePostData, CreateExecutionApiV1ExecutePostErrors, CreateExecutionApiV1ExecutePostResponses, CreateReplaySessionApiV1ReplaySessionsPostData, CreateReplaySessionApiV1ReplaySessionsPostErrors, CreateReplaySessionApiV1ReplaySessionsPostResponses, CreateSavedScriptApiV1ScriptsPostData, CreateSavedScriptApiV1ScriptsPostErrors, CreateSavedScriptApiV1ScriptsPostResponses, CreateUserApiV1AdminUsersPostData, CreateUserApiV1AdminUsersPostErrors, CreateUserApiV1AdminUsersPostResponses, DeleteEventApiV1AdminEventsEventIdDeleteData, DeleteEventApiV1AdminEventsEventIdDeleteErrors, DeleteEventApiV1AdminEventsEventIdDeleteResponses, DeleteExecutionApiV1ExecutionsExecutionIdDeleteData, DeleteExecutionApiV1ExecutionsExecutionIdDeleteErrors, DeleteExecutionApiV1ExecutionsExecutionIdDeleteResponses, DeleteNotificationApiV1NotificationsNotificationIdDeleteData, DeleteNotificationApiV1NotificationsNotificationIdDeleteErrors, DeleteNotificationApiV1NotificationsNotificationIdDeleteResponses, DeleteSavedScriptApiV1ScriptsScriptIdDeleteData, DeleteSavedScriptApiV1ScriptsScriptIdDeleteErrors, DeleteSavedScriptApiV1ScriptsScriptIdDeleteResponses, DeleteUserApiV1AdminUsersUserIdDeleteData, DeleteUserApiV1AdminUsersUserIdDeleteErrors, DeleteUserApiV1AdminUsersUserIdDeleteResponses, DiscardDlqMessageApiV1DlqMessagesEventIdDeleteData, DiscardDlqMessageApiV1DlqMessagesEventIdDeleteErrors, DiscardDlqMessageApiV1DlqMessagesEventIdDeleteResponses, ExecutionEventsApiV1EventsExecutionsExecutionIdGetData, ExecutionEventsApiV1EventsExecutionsExecutionIdGetErrors, ExecutionEventsApiV1EventsExecutionsExecutionIdGetResponses, ExportEventsCsvApiV1AdminEventsExportCsvGetData, ExportEventsCsvApiV1AdminEventsExportCsvGetErrors, ExportEventsCsvApiV1AdminEventsExportCsvGetResponses, ExportEventsJsonApiV1AdminEventsExportJsonGetData, ExportEventsJsonApiV1AdminEventsExportJsonGetErrors, ExportEventsJsonApiV1AdminEventsExportJsonGetResponses, GetCurrentUserProfileApiV1AuthMeGetData, GetCurrentUserProfileApiV1AuthMeGetResponses, GetDlqMessageApiV1DlqMessagesEventIdGetData, GetDlqMessageApiV1DlqMessagesEventIdGetErrors, GetDlqMessageApiV1DlqMessagesEventIdGetResponses, GetDlqMessagesApiV1DlqMessagesGetData, GetDlqMessagesApiV1DlqMessagesGetErrors, GetDlqMessagesApiV1DlqMessagesGetResponses, GetDlqTopicsApiV1DlqTopicsGetData, GetDlqTopicsApiV1DlqTopicsGetResponses, GetEventDetailApiV1AdminEventsEventIdGetData, GetEventDetailApiV1AdminEventsEventIdGetErrors, GetEventDetailApiV1AdminEventsEventIdGetResponses, GetEventStatsApiV1AdminEventsStatsGetData, GetEventStatsApiV1AdminEventsStatsGetErrors, GetEventStatsApiV1AdminEventsStatsGetResponses, GetExampleScriptsApiV1ExampleScriptsGetData, GetExampleScriptsApiV1ExampleScriptsGetResponses, GetExecutionEventsApiV1ExecutionsExecutionIdEventsGetData, GetExecutionEventsApiV1ExecutionsExecutionIdEventsGetErrors, GetExecutionEventsApiV1ExecutionsExecutionIdEventsGetResponses, GetExecutionSagasApiV1SagasExecutionExecutionIdGetData, GetExecutionSagasApiV1SagasExecutionExecutionIdGetErrors, GetExecutionSagasApiV1SagasExecutionExecutionIdGetResponses, GetK8sResourceLimitsApiV1K8sLimitsGetData, GetK8sResourceLimitsApiV1K8sLimitsGetResponses, GetNotificationsApiV1NotificationsGetData, GetNotificationsApiV1NotificationsGetErrors, GetNotificationsApiV1NotificationsGetResponses, GetReplaySessionApiV1ReplaySessionsSessionIdGetData, GetReplaySessionApiV1ReplaySessionsSessionIdGetErrors, GetReplaySessionApiV1ReplaySessionsSessionIdGetResponses, GetReplayStatusApiV1AdminEventsReplaySessionIdStatusGetData, GetReplayStatusApiV1AdminEventsReplaySessionIdStatusGetErrors, GetReplayStatusApiV1AdminEventsReplaySessionIdStatusGetResponses, GetResultApiV1ExecutionsExecutionIdResultGetData, GetResultApiV1ExecutionsExecutionIdResultGetErrors, GetResultApiV1ExecutionsExecutionIdResultGetResponses, GetSagaStatusApiV1SagasSagaIdGetData, GetSagaStatusApiV1SagasSagaIdGetErrors, GetSagaStatusApiV1SagasSagaIdGetResponses, GetSavedScriptApiV1ScriptsScriptIdGetData, GetSavedScriptApiV1ScriptsScriptIdGetErrors, GetSavedScriptApiV1ScriptsScriptIdGetResponses, GetSettingsHistoryApiV1UserSettingsHistoryGetData, GetSettingsHistoryApiV1UserSettingsHistoryGetErrors, GetSettingsHistoryApiV1UserSettingsHistoryGetResponses, GetSubscriptionsApiV1NotificationsSubscriptionsGetData, GetSubscriptionsApiV1NotificationsSubscriptionsGetResponses, GetSystemSettingsApiV1AdminSettingsGetData, GetSystemSettingsApiV1AdminSettingsGetErrors, GetSystemSettingsApiV1AdminSettingsGetResponses, GetUnreadCountApiV1NotificationsUnreadCountGetData, GetUnreadCountApiV1NotificationsUnreadCountGetResponses, GetUserApiV1AdminUsersUserIdGetData, GetUserApiV1AdminUsersUserIdGetErrors, GetUserApiV1AdminUsersUserIdGetResponses, GetUserExecutionsApiV1UserExecutionsGetData, GetUserExecutionsApiV1UserExecutionsGetErrors, GetUserExecutionsApiV1UserExecutionsGetResponses, GetUserOverviewApiV1AdminUsersUserIdOverviewGetData, GetUserOverviewApiV1AdminUsersUserIdOverviewGetErrors, GetUserOverviewApiV1AdminUsersUserIdOverviewGetResponses, GetUserRateLimitsApiV1AdminUsersUserIdRateLimitsGetData, GetUserRateLimitsApiV1AdminUsersUserIdRateLimitsGetErrors, GetUserRateLimitsApiV1AdminUsersUserIdRateLimitsGetResponses, GetUserSettingsApiV1UserSettingsGetData, GetUserSettingsApiV1UserSettingsGetResponses, ListReplaySessionsApiV1ReplaySessionsGetData, ListReplaySessionsApiV1ReplaySessionsGetErrors, ListReplaySessionsApiV1ReplaySessionsGetResponses, ListSagasApiV1SagasGetData, ListSagasApiV1SagasGetErrors, ListSagasApiV1SagasGetResponses, ListSavedScriptsApiV1ScriptsGetData, ListSavedScriptsApiV1ScriptsGetResponses, ListUsersApiV1AdminUsersGetData, ListUsersApiV1AdminUsersGetErrors, ListUsersApiV1AdminUsersGetResponses, LivenessApiV1HealthLiveGetData, LivenessApiV1HealthLiveGetResponses, LoginApiV1AuthLoginPostData, LoginApiV1AuthLoginPostErrors, LoginApiV1AuthLoginPostResponses, LogoutApiV1AuthLogoutPostData, LogoutApiV1AuthLogoutPostResponses, MarkAllReadApiV1NotificationsMarkAllReadPostData, MarkAllReadApiV1NotificationsMarkAllReadPostResponses, MarkNotificationReadApiV1NotificationsNotificationIdReadPutData, MarkNotificationReadApiV1NotificationsNotificationIdReadPutErrors, MarkNotificationReadApiV1NotificationsNotificationIdReadPutResponses, NotificationStreamApiV1EventsNotificationsStreamGetData, NotificationStreamApiV1EventsNotificationsStreamGetResponses, PauseReplaySessionApiV1ReplaySessionsSessionIdPausePostData, PauseReplaySessionApiV1ReplaySessionsSessionIdPausePostErrors, PauseReplaySessionApiV1ReplaySessionsSessionIdPausePostResponses, RegisterApiV1AuthRegisterPostData, RegisterApiV1AuthRegisterPostErrors, RegisterApiV1AuthRegisterPostResponses, ReplayEventsApiV1AdminEventsReplayPostData, ReplayEventsApiV1AdminEventsReplayPostErrors, ReplayEventsApiV1AdminEventsReplayPostResponses, ResetSystemSettingsApiV1AdminSettingsResetPostData, ResetSystemSettingsApiV1AdminSettingsResetPostErrors, ResetSystemSettingsApiV1AdminSettingsResetPostResponses, ResetUserPasswordApiV1AdminUsersUserIdResetPasswordPostData, ResetUserPasswordApiV1AdminUsersUserIdResetPasswordPostErrors, ResetUserPasswordApiV1AdminUsersUserIdResetPasswordPostResponses, ResetUserRateLimitsApiV1AdminUsersUserIdRateLimitsResetPostData, ResetUserRateLimitsApiV1AdminUsersUserIdRateLimitsResetPostErrors, ResetUserRateLimitsApiV1AdminUsersUserIdRateLimitsResetPostResponses, RestoreSettingsApiV1UserSettingsRestorePostData, RestoreSettingsApiV1UserSettingsRestorePostErrors, RestoreSettingsApiV1UserSettingsRestorePostResponses, ResumeReplaySessionApiV1ReplaySessionsSessionIdResumePostData, ResumeReplaySessionApiV1ReplaySessionsSessionIdResumePostErrors, ResumeReplaySessionApiV1ReplaySessionsSessionIdResumePostResponses, RetryDlqMessagesApiV1DlqRetryPostData, RetryDlqMessagesApiV1DlqRetryPostErrors, RetryDlqMessagesApiV1DlqRetryPostResponses, RetryExecutionApiV1ExecutionsExecutionIdRetryPostData, RetryExecutionApiV1ExecutionsExecutionIdRetryPostErrors, RetryExecutionApiV1ExecutionsExecutionIdRetryPostResponses, SetRetryPolicyApiV1DlqRetryPolicyPostData, SetRetryPolicyApiV1DlqRetryPolicyPostErrors, SetRetryPolicyApiV1DlqRetryPolicyPostResponses, StartReplaySessionApiV1ReplaySessionsSessionIdStartPostData, StartReplaySessionApiV1ReplaySessionsSessionIdStartPostErrors, StartReplaySessionApiV1ReplaySessionsSessionIdStartPostResponses, UnlockUserApiV1AdminUsersUserIdUnlockPostData, UnlockUserApiV1AdminUsersUserIdUnlockPostErrors, UnlockUserApiV1AdminUsersUserIdUnlockPostResponses, UpdateCustomSettingApiV1UserSettingsCustomKeyPutData, UpdateCustomSettingApiV1UserSettingsCustomKeyPutErrors, UpdateCustomSettingApiV1UserSettingsCustomKeyPutResponses, UpdateEditorSettingsApiV1UserSettingsEditorPutData, UpdateEditorSettingsApiV1UserSettingsEditorPutErrors, UpdateEditorSettingsApiV1UserSettingsEditorPutResponses, UpdateNotificationSettingsApiV1UserSettingsNotificationsPutData, UpdateNotificationSettingsApiV1UserSettingsNotificationsPutErrors, UpdateNotificationSettingsApiV1UserSettingsNotificationsPutResponses, UpdateSavedScriptApiV1ScriptsScriptIdPutData, UpdateSavedScriptApiV1ScriptsScriptIdPutErrors, UpdateSavedScriptApiV1ScriptsScriptIdPutResponses, UpdateSubscriptionApiV1NotificationsSubscriptionsChannelPutData, UpdateSubscriptionApiV1NotificationsSubscriptionsChannelPutErrors, UpdateSubscriptionApiV1NotificationsSubscriptionsChannelPutResponses, UpdateSystemSettingsApiV1AdminSettingsPutData, UpdateSystemSettingsApiV1AdminSettingsPutErrors, UpdateSystemSettingsApiV1AdminSettingsPutResponses, UpdateThemeApiV1UserSettingsThemePutData, UpdateThemeApiV1UserSettingsThemePutErrors, UpdateThemeApiV1UserSettingsThemePutResponses, UpdateUserApiV1AdminUsersUserIdPutData, UpdateUserApiV1AdminUsersUserIdPutErrors, UpdateUserApiV1AdminUsersUserIdPutResponses, UpdateUserRateLimitsApiV1AdminUsersUserIdRateLimitsPutData, UpdateUserRateLimitsApiV1AdminUsersUserIdRateLimitsPutErrors, UpdateUserRateLimitsApiV1AdminUsersUserIdRateLimitsPutResponses, UpdateUserSettingsApiV1UserSettingsPutData, UpdateUserSettingsApiV1UserSettingsPutErrors, UpdateUserSettingsApiV1UserSettingsPutResponses } from './types.gen'; export type Options = Options2 & { /** @@ -101,14 +101,7 @@ export const cancelExecutionApiV1ExecutionsExecutionIdCancelPost = (options: Options) => (options.client ?? client).post({ - url: '/api/v1/executions/{execution_id}/retry', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options.headers - } -}); +export const retryExecutionApiV1ExecutionsExecutionIdRetryPost = (options: Options) => (options.client ?? client).post({ url: '/api/v1/executions/{execution_id}/retry', ...options }); /** * Get Execution Events @@ -334,90 +327,6 @@ export const notificationStreamApiV1EventsNotificationsStreamGet = (options: Options) => (options.client ?? client).get({ url: '/api/v1/events/executions/{execution_id}', ...options }); -/** - * Get Execution Events - * - * Get events for a specific execution. - */ -export const getExecutionEventsApiV1EventsExecutionsExecutionIdEventsGet = (options: Options) => (options.client ?? client).get({ url: '/api/v1/events/executions/{execution_id}/events', ...options }); - -/** - * Get User Events - * - * Get events for the current user. - */ -export const getUserEventsApiV1EventsUserGet = (options?: Options) => (options?.client ?? client).get({ url: '/api/v1/events/user', ...options }); - -/** - * Query Events - * - * Query events with advanced filters. - */ -export const queryEventsApiV1EventsQueryPost = (options: Options) => (options.client ?? client).post({ - url: '/api/v1/events/query', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options.headers - } -}); - -/** - * Get Events By Correlation - * - * Get all events sharing a correlation ID. - */ -export const getEventsByCorrelationApiV1EventsCorrelationCorrelationIdGet = (options: Options) => (options.client ?? client).get({ url: '/api/v1/events/correlation/{correlation_id}', ...options }); - -/** - * Get Current Request Events - * - * Get events associated with the current HTTP request's correlation ID. - */ -export const getCurrentRequestEventsApiV1EventsCurrentRequestGet = (options?: Options) => (options?.client ?? client).get({ url: '/api/v1/events/current-request', ...options }); - -/** - * Get Event Statistics - * - * Get aggregated event statistics for a time range. - */ -export const getEventStatisticsApiV1EventsStatisticsGet = (options?: Options) => (options?.client ?? client).get({ url: '/api/v1/events/statistics', ...options }); - -/** - * Delete Event - * - * Delete and archive an event (admin only). - */ -export const deleteEventApiV1EventsEventIdDelete = (options: Options) => (options.client ?? client).delete({ url: '/api/v1/events/{event_id}', ...options }); - -/** - * Get Event - * - * Get a specific event by ID. - */ -export const getEventApiV1EventsEventIdGet = (options: Options) => (options.client ?? client).get({ url: '/api/v1/events/{event_id}', ...options }); - -/** - * Publish Custom Event - * - * Publish a custom event to Kafka (admin only). - */ -export const publishCustomEventApiV1EventsPublishPost = (options: Options) => (options.client ?? client).post({ - url: '/api/v1/events/publish', - ...options, - headers: { - 'Content-Type': 'application/json', - ...options.headers - } -}); - -/** - * Replay Aggregate Events - * - * Replay all events for an aggregate (admin only). - */ -export const replayAggregateEventsApiV1EventsReplayAggregateIdPost = (options: Options) => (options.client ?? client).post({ url: '/api/v1/events/replay/{aggregate_id}', ...options }); - /** * Browse Events * diff --git a/frontend/src/lib/api/types.gen.ts b/frontend/src/lib/api/types.gen.ts index a1d0a324..42ed10f1 100644 --- a/frontend/src/lib/api/types.gen.ts +++ b/frontend/src/lib/api/types.gen.ts @@ -264,10 +264,7 @@ export type CancelResponse = { * Execution Id */ execution_id: string; - /** - * Status - */ - status: string; + status: CancelStatus; /** * Message */ @@ -280,6 +277,13 @@ export type CancelResponse = { event_id?: string | null; }; +/** + * CancelStatus + * + * Outcome of a cancel request. + */ +export type CancelStatus = 'already_cancelled' | 'cancellation_requested'; + /** * CleanupResponse * @@ -642,10 +646,7 @@ export type DlqMessageDiscardedEvent = { * Original Topic */ original_topic?: string; - /** - * Original Event Type - */ - original_event_type?: string; + original_event_type?: EventType; /** * Reason */ @@ -691,10 +692,7 @@ export type DlqMessageReceivedEvent = { * Original Topic */ original_topic?: string; - /** - * Original Event Type - */ - original_event_type?: string; + original_event_type?: EventType; /** * Error */ @@ -911,10 +909,7 @@ export type DlqMessageRetriedEvent = { * Original Topic */ original_topic?: string; - /** - * Original Event Type - */ - original_event_type?: string; + original_event_type?: EventType; /** * Retry Count */ @@ -1012,26 +1007,6 @@ export type DlqTopicSummaryResponse = { max_retry_count: number; }; -/** - * DeleteEventResponse - * - * Response model for deleting events - */ -export type DeleteEventResponse = { - /** - * Message - */ - message: string; - /** - * Event Id - */ - event_id: string; - /** - * Deleted At - */ - deleted_at: string; -}; - /** * DeleteNotificationResponse * @@ -1175,10 +1150,7 @@ export type DerivedCounts = { * Code editor preferences */ export type EditorSettings = { - /** - * Theme - */ - theme?: string; + theme?: Theme; /** * Font Size */ @@ -1589,224 +1561,6 @@ export type EventFilter = { search_text?: string | null; }; -/** - * EventFilterRequest - * - * Request model for filtering events. - */ -export type EventFilterRequest = { - /** - * Event Types - * - * Filter by event types - */ - event_types?: Array | null; - /** - * Aggregate Id - * - * Filter by aggregate ID - */ - aggregate_id?: string | null; - /** - * Correlation Id - * - * Filter by correlation ID - */ - correlation_id?: string | null; - /** - * User Id - * - * Filter by user ID (admin only) - */ - user_id?: string | null; - /** - * Service Name - * - * Filter by service name - */ - service_name?: string | null; - /** - * Start Time - * - * Filter events after this time - */ - start_time?: string | null; - /** - * End Time - * - * Filter events before this time - */ - end_time?: string | null; - /** - * Search Text - * - * Full-text search in event data - */ - search_text?: string | null; - /** - * Sort By - * - * Field to sort by - */ - sort_by?: string; - /** - * Sort order - */ - sort_order?: SortOrder; - /** - * Limit - * - * Maximum events to return - */ - limit?: number; - /** - * Skip - * - * Number of events to skip - */ - skip?: number; -}; - -/** - * EventListResponse - */ -export type EventListResponse = { - /** - * Events - */ - events: Array<({ - event_type: 'execution_requested'; - } & ExecutionRequestedEvent) | ({ - event_type: 'execution_accepted'; - } & ExecutionAcceptedEvent) | ({ - event_type: 'execution_queued'; - } & ExecutionQueuedEvent) | ({ - event_type: 'execution_started'; - } & ExecutionStartedEvent) | ({ - event_type: 'execution_running'; - } & ExecutionRunningEvent) | ({ - event_type: 'execution_completed'; - } & ExecutionCompletedEvent) | ({ - event_type: 'execution_failed'; - } & ExecutionFailedEvent) | ({ - event_type: 'execution_timeout'; - } & ExecutionTimeoutEvent) | ({ - event_type: 'execution_cancelled'; - } & ExecutionCancelledEvent) | ({ - event_type: 'pod_created'; - } & PodCreatedEvent) | ({ - event_type: 'pod_scheduled'; - } & PodScheduledEvent) | ({ - event_type: 'pod_running'; - } & PodRunningEvent) | ({ - event_type: 'pod_succeeded'; - } & PodSucceededEvent) | ({ - event_type: 'pod_failed'; - } & PodFailedEvent) | ({ - event_type: 'pod_terminated'; - } & PodTerminatedEvent) | ({ - event_type: 'pod_deleted'; - } & PodDeletedEvent) | ({ - event_type: 'result_stored'; - } & ResultStoredEvent) | ({ - event_type: 'result_failed'; - } & ResultFailedEvent) | ({ - event_type: 'user_settings_updated'; - } & UserSettingsUpdatedEvent) | ({ - event_type: 'user_registered'; - } & UserRegisteredEvent) | ({ - event_type: 'user_login'; - } & UserLoginEvent) | ({ - event_type: 'user_logged_in'; - } & UserLoggedInEvent) | ({ - event_type: 'user_logged_out'; - } & UserLoggedOutEvent) | ({ - event_type: 'user_updated'; - } & UserUpdatedEvent) | ({ - event_type: 'user_deleted'; - } & UserDeletedEvent) | ({ - event_type: 'notification_created'; - } & NotificationCreatedEvent) | ({ - event_type: 'notification_sent'; - } & NotificationSentEvent) | ({ - event_type: 'notification_delivered'; - } & NotificationDeliveredEvent) | ({ - event_type: 'notification_failed'; - } & NotificationFailedEvent) | ({ - event_type: 'notification_read'; - } & NotificationReadEvent) | ({ - event_type: 'notification_all_read'; - } & NotificationAllReadEvent) | ({ - event_type: 'notification_clicked'; - } & NotificationClickedEvent) | ({ - event_type: 'notification_preferences_updated'; - } & NotificationPreferencesUpdatedEvent) | ({ - event_type: 'saga_started'; - } & SagaStartedEvent) | ({ - event_type: 'saga_completed'; - } & SagaCompletedEvent) | ({ - event_type: 'saga_failed'; - } & SagaFailedEvent) | ({ - event_type: 'saga_cancelled'; - } & SagaCancelledEvent) | ({ - event_type: 'saga_compensating'; - } & SagaCompensatingEvent) | ({ - event_type: 'saga_compensated'; - } & SagaCompensatedEvent) | ({ - event_type: 'create_pod_command'; - } & CreatePodCommandEvent) | ({ - event_type: 'delete_pod_command'; - } & DeletePodCommandEvent) | ({ - event_type: 'allocate_resources_command'; - } & AllocateResourcesCommandEvent) | ({ - event_type: 'release_resources_command'; - } & ReleaseResourcesCommandEvent) | ({ - event_type: 'script_saved'; - } & ScriptSavedEvent) | ({ - event_type: 'script_deleted'; - } & ScriptDeletedEvent) | ({ - event_type: 'script_shared'; - } & ScriptSharedEvent) | ({ - event_type: 'security_violation'; - } & SecurityViolationEvent) | ({ - event_type: 'rate_limit_exceeded'; - } & RateLimitExceededEvent) | ({ - event_type: 'auth_failed'; - } & AuthFailedEvent) | ({ - event_type: 'resource_limit_exceeded'; - } & ResourceLimitExceededEvent) | ({ - event_type: 'quota_exceeded'; - } & QuotaExceededEvent) | ({ - event_type: 'system_error'; - } & SystemErrorEvent) | ({ - event_type: 'service_unhealthy'; - } & ServiceUnhealthyEvent) | ({ - event_type: 'service_recovered'; - } & ServiceRecoveredEvent) | ({ - event_type: 'dlq_message_received'; - } & DlqMessageReceivedEvent) | ({ - event_type: 'dlq_message_retried'; - } & DlqMessageRetriedEvent) | ({ - event_type: 'dlq_message_discarded'; - } & DlqMessageDiscardedEvent)>; - /** - * Total - */ - total: number; - /** - * Limit - */ - limit: number; - /** - * Skip - */ - skip: number; - /** - * Has More - */ - has_more: boolean; -}; - /** * EventMetadata * @@ -1828,15 +1582,7 @@ export type EventMetadata = { /** * User Id */ - user_id?: string | null; - /** - * Ip Address - */ - ip_address?: string | null; - /** - * User Agent - */ - user_agent?: string | null; + user_id?: string; environment?: Environment; }; @@ -1898,10 +1644,7 @@ export type EventReplayResponse = { * Session Id */ session_id?: string | null; - /** - * Status - */ - status: string; + status: ReplayStatus; /** * Events Preview */ @@ -1918,10 +1661,7 @@ export type EventReplayStatusResponse = { * Session Id */ session_id: string; - /** - * Status - */ - status: string; + status: ReplayStatus; /** * Total Events */ @@ -3583,75 +3323,9 @@ export type PodTerminatedEvent = { }; /** - * PublishEventRequest + * QueuePriority * - * Request model for publishing events. - */ -export type PublishEventRequest = { - /** - * Type of event to publish - */ - event_type: EventType; - /** - * Payload - * - * Event payload data - */ - payload: { - [key: string]: unknown; - }; - /** - * Aggregate Id - * - * Aggregate root ID - */ - aggregate_id?: string | null; - /** - * Correlation Id - * - * Correlation ID - */ - correlation_id?: string | null; - /** - * Causation Id - * - * ID of causing event - */ - causation_id?: string | null; - /** - * Metadata - * - * Additional metadata - */ - metadata?: { - [key: string]: unknown; - } | null; -}; - -/** - * PublishEventResponse - * - * Response model for publishing events - */ -export type PublishEventResponse = { - /** - * Event Id - */ - event_id: string; - /** - * Status - */ - status: string; - /** - * Timestamp - */ - timestamp: string; -}; - -/** - * QueuePriority - * - * Execution priority, ordered highest to lowest. + * Execution priority, ordered highest to lowest. */ export type QueuePriority = 'critical' | 'high' | 'normal' | 'low' | 'background'; @@ -3912,46 +3586,6 @@ export type ReleaseResourcesCommandEvent = { memory_request?: string; }; -/** - * ReplayAggregateResponse - * - * Response model for replaying aggregate events - */ -export type ReplayAggregateResponse = { - /** - * Dry Run - */ - dry_run: boolean; - /** - * Aggregate Id - */ - aggregate_id: string; - /** - * Event Count - */ - event_count?: number | null; - /** - * Event Types - */ - event_types?: Array | null; - /** - * Start Time - */ - start_time?: string | null; - /** - * End Time - */ - end_time?: string | null; - /** - * Replayed Count - */ - replayed_count?: number | null; - /** - * Replay Correlation Id - */ - replay_correlation_id?: string | null; -}; - /** * ReplayConfigSchema */ @@ -4465,26 +4099,6 @@ export type ResultStoredEvent = { size_bytes?: number; }; -/** - * RetryExecutionRequest - * - * Model for retrying an execution. - */ -export type RetryExecutionRequest = { - /** - * Reason - * - * Reason for retry - */ - reason?: string | null; - /** - * Preserve Output - * - * Keep output from previous attempt - */ - preserve_output?: boolean; -}; - /** * RetryPolicyRequest * @@ -5463,13 +5077,6 @@ export type SettingsHistoryResponse = { limit: number; }; -/** - * SortOrder - * - * Sort order for queries. - */ -export type SortOrder = 'asc' | 'desc'; - /** * StorageType * @@ -6256,10 +5863,7 @@ export type EventReplayStatusResponseWritable = { * Session Id */ session_id: string; - /** - * Status - */ - status: string; + status: ReplayStatus; /** * Total Events */ @@ -6554,7 +6158,7 @@ export type CancelExecutionApiV1ExecutionsExecutionIdCancelPostResponses = { export type CancelExecutionApiV1ExecutionsExecutionIdCancelPostResponse = CancelExecutionApiV1ExecutionsExecutionIdCancelPostResponses[keyof CancelExecutionApiV1ExecutionsExecutionIdCancelPostResponses]; export type RetryExecutionApiV1ExecutionsExecutionIdRetryPostData = { - body: RetryExecutionRequest; + body?: never; path: { /** * Execution Id @@ -7519,519 +7123,6 @@ export type ExecutionEventsApiV1EventsExecutionsExecutionIdGetResponses = { export type ExecutionEventsApiV1EventsExecutionsExecutionIdGetResponse = ExecutionEventsApiV1EventsExecutionsExecutionIdGetResponses[keyof ExecutionEventsApiV1EventsExecutionsExecutionIdGetResponses]; -export type GetExecutionEventsApiV1EventsExecutionsExecutionIdEventsGetData = { - body?: never; - path: { - /** - * Execution Id - */ - execution_id: string; - }; - query?: { - /** - * Include System Events - * - * Include system-generated events - */ - include_system_events?: boolean; - /** - * Limit - */ - limit?: number; - /** - * Skip - */ - skip?: number; - }; - url: '/api/v1/events/executions/{execution_id}/events'; -}; - -export type GetExecutionEventsApiV1EventsExecutionsExecutionIdEventsGetErrors = { - /** - * Not the owner of this execution - */ - 403: ErrorResponse; - /** - * Validation Error - */ - 422: HttpValidationError; -}; - -export type GetExecutionEventsApiV1EventsExecutionsExecutionIdEventsGetError = GetExecutionEventsApiV1EventsExecutionsExecutionIdEventsGetErrors[keyof GetExecutionEventsApiV1EventsExecutionsExecutionIdEventsGetErrors]; - -export type GetExecutionEventsApiV1EventsExecutionsExecutionIdEventsGetResponses = { - /** - * Successful Response - */ - 200: EventListResponse; -}; - -export type GetExecutionEventsApiV1EventsExecutionsExecutionIdEventsGetResponse = GetExecutionEventsApiV1EventsExecutionsExecutionIdEventsGetResponses[keyof GetExecutionEventsApiV1EventsExecutionsExecutionIdEventsGetResponses]; - -export type GetUserEventsApiV1EventsUserGetData = { - body?: never; - path?: never; - query?: { - /** - * Event Types - * - * Filter by event types - */ - event_types?: Array | null; - /** - * Start Time - * - * Filter events after this time - */ - start_time?: string | null; - /** - * End Time - * - * Filter events before this time - */ - end_time?: string | null; - /** - * Limit - */ - limit?: number; - /** - * Skip - */ - skip?: number; - /** - * Sort order by timestamp - */ - sort_order?: SortOrder; - }; - url: '/api/v1/events/user'; -}; - -export type GetUserEventsApiV1EventsUserGetErrors = { - /** - * Validation Error - */ - 422: HttpValidationError; -}; - -export type GetUserEventsApiV1EventsUserGetError = GetUserEventsApiV1EventsUserGetErrors[keyof GetUserEventsApiV1EventsUserGetErrors]; - -export type GetUserEventsApiV1EventsUserGetResponses = { - /** - * Successful Response - */ - 200: EventListResponse; -}; - -export type GetUserEventsApiV1EventsUserGetResponse = GetUserEventsApiV1EventsUserGetResponses[keyof GetUserEventsApiV1EventsUserGetResponses]; - -export type QueryEventsApiV1EventsQueryPostData = { - body: EventFilterRequest; - path?: never; - query?: never; - url: '/api/v1/events/query'; -}; - -export type QueryEventsApiV1EventsQueryPostErrors = { - /** - * Cannot query other users' events - */ - 403: ErrorResponse; - /** - * Validation Error - */ - 422: HttpValidationError; -}; - -export type QueryEventsApiV1EventsQueryPostError = QueryEventsApiV1EventsQueryPostErrors[keyof QueryEventsApiV1EventsQueryPostErrors]; - -export type QueryEventsApiV1EventsQueryPostResponses = { - /** - * Successful Response - */ - 200: EventListResponse; -}; - -export type QueryEventsApiV1EventsQueryPostResponse = QueryEventsApiV1EventsQueryPostResponses[keyof QueryEventsApiV1EventsQueryPostResponses]; - -export type GetEventsByCorrelationApiV1EventsCorrelationCorrelationIdGetData = { - body?: never; - path: { - /** - * Correlation Id - */ - correlation_id: string; - }; - query?: { - /** - * Include All Users - * - * Include events from all users (admin only) - */ - include_all_users?: boolean; - /** - * Limit - */ - limit?: number; - /** - * Skip - */ - skip?: number; - }; - url: '/api/v1/events/correlation/{correlation_id}'; -}; - -export type GetEventsByCorrelationApiV1EventsCorrelationCorrelationIdGetErrors = { - /** - * Validation Error - */ - 422: HttpValidationError; -}; - -export type GetEventsByCorrelationApiV1EventsCorrelationCorrelationIdGetError = GetEventsByCorrelationApiV1EventsCorrelationCorrelationIdGetErrors[keyof GetEventsByCorrelationApiV1EventsCorrelationCorrelationIdGetErrors]; - -export type GetEventsByCorrelationApiV1EventsCorrelationCorrelationIdGetResponses = { - /** - * Successful Response - */ - 200: EventListResponse; -}; - -export type GetEventsByCorrelationApiV1EventsCorrelationCorrelationIdGetResponse = GetEventsByCorrelationApiV1EventsCorrelationCorrelationIdGetResponses[keyof GetEventsByCorrelationApiV1EventsCorrelationCorrelationIdGetResponses]; - -export type GetCurrentRequestEventsApiV1EventsCurrentRequestGetData = { - body?: never; - path?: never; - query?: { - /** - * Limit - */ - limit?: number; - /** - * Skip - */ - skip?: number; - }; - url: '/api/v1/events/current-request'; -}; - -export type GetCurrentRequestEventsApiV1EventsCurrentRequestGetErrors = { - /** - * Validation Error - */ - 422: HttpValidationError; -}; - -export type GetCurrentRequestEventsApiV1EventsCurrentRequestGetError = GetCurrentRequestEventsApiV1EventsCurrentRequestGetErrors[keyof GetCurrentRequestEventsApiV1EventsCurrentRequestGetErrors]; - -export type GetCurrentRequestEventsApiV1EventsCurrentRequestGetResponses = { - /** - * Successful Response - */ - 200: EventListResponse; -}; - -export type GetCurrentRequestEventsApiV1EventsCurrentRequestGetResponse = GetCurrentRequestEventsApiV1EventsCurrentRequestGetResponses[keyof GetCurrentRequestEventsApiV1EventsCurrentRequestGetResponses]; - -export type GetEventStatisticsApiV1EventsStatisticsGetData = { - body?: never; - path?: never; - query?: { - /** - * Start Time - * - * Start time for statistics (defaults to 24 hours ago) - */ - start_time?: string | null; - /** - * End Time - * - * End time for statistics (defaults to now) - */ - end_time?: string | null; - /** - * Include All Users - * - * Include stats from all users (admin only) - */ - include_all_users?: boolean; - }; - url: '/api/v1/events/statistics'; -}; - -export type GetEventStatisticsApiV1EventsStatisticsGetErrors = { - /** - * Validation Error - */ - 422: HttpValidationError; -}; - -export type GetEventStatisticsApiV1EventsStatisticsGetError = GetEventStatisticsApiV1EventsStatisticsGetErrors[keyof GetEventStatisticsApiV1EventsStatisticsGetErrors]; - -export type GetEventStatisticsApiV1EventsStatisticsGetResponses = { - /** - * Successful Response - */ - 200: EventStatistics; -}; - -export type GetEventStatisticsApiV1EventsStatisticsGetResponse = GetEventStatisticsApiV1EventsStatisticsGetResponses[keyof GetEventStatisticsApiV1EventsStatisticsGetResponses]; - -export type DeleteEventApiV1EventsEventIdDeleteData = { - body?: never; - path: { - /** - * Event Id - */ - event_id: string; - }; - query?: never; - url: '/api/v1/events/{event_id}'; -}; - -export type DeleteEventApiV1EventsEventIdDeleteErrors = { - /** - * Event not found - */ - 404: ErrorResponse; - /** - * Validation Error - */ - 422: HttpValidationError; -}; - -export type DeleteEventApiV1EventsEventIdDeleteError = DeleteEventApiV1EventsEventIdDeleteErrors[keyof DeleteEventApiV1EventsEventIdDeleteErrors]; - -export type DeleteEventApiV1EventsEventIdDeleteResponses = { - /** - * Successful Response - */ - 200: DeleteEventResponse; -}; - -export type DeleteEventApiV1EventsEventIdDeleteResponse = DeleteEventApiV1EventsEventIdDeleteResponses[keyof DeleteEventApiV1EventsEventIdDeleteResponses]; - -export type GetEventApiV1EventsEventIdGetData = { - body?: never; - path: { - /** - * Event Id - */ - event_id: string; - }; - query?: never; - url: '/api/v1/events/{event_id}'; -}; - -export type GetEventApiV1EventsEventIdGetErrors = { - /** - * Event not found - */ - 404: ErrorResponse; - /** - * Validation Error - */ - 422: HttpValidationError; -}; - -export type GetEventApiV1EventsEventIdGetError = GetEventApiV1EventsEventIdGetErrors[keyof GetEventApiV1EventsEventIdGetErrors]; - -export type GetEventApiV1EventsEventIdGetResponses = { - /** - * Response Get Event Api V1 Events Event Id Get - * - * Successful Response - */ - 200: ({ - event_type: 'execution_requested'; - } & ExecutionRequestedEvent) | ({ - event_type: 'execution_accepted'; - } & ExecutionAcceptedEvent) | ({ - event_type: 'execution_queued'; - } & ExecutionQueuedEvent) | ({ - event_type: 'execution_started'; - } & ExecutionStartedEvent) | ({ - event_type: 'execution_running'; - } & ExecutionRunningEvent) | ({ - event_type: 'execution_completed'; - } & ExecutionCompletedEvent) | ({ - event_type: 'execution_failed'; - } & ExecutionFailedEvent) | ({ - event_type: 'execution_timeout'; - } & ExecutionTimeoutEvent) | ({ - event_type: 'execution_cancelled'; - } & ExecutionCancelledEvent) | ({ - event_type: 'pod_created'; - } & PodCreatedEvent) | ({ - event_type: 'pod_scheduled'; - } & PodScheduledEvent) | ({ - event_type: 'pod_running'; - } & PodRunningEvent) | ({ - event_type: 'pod_succeeded'; - } & PodSucceededEvent) | ({ - event_type: 'pod_failed'; - } & PodFailedEvent) | ({ - event_type: 'pod_terminated'; - } & PodTerminatedEvent) | ({ - event_type: 'pod_deleted'; - } & PodDeletedEvent) | ({ - event_type: 'result_stored'; - } & ResultStoredEvent) | ({ - event_type: 'result_failed'; - } & ResultFailedEvent) | ({ - event_type: 'user_settings_updated'; - } & UserSettingsUpdatedEvent) | ({ - event_type: 'user_registered'; - } & UserRegisteredEvent) | ({ - event_type: 'user_login'; - } & UserLoginEvent) | ({ - event_type: 'user_logged_in'; - } & UserLoggedInEvent) | ({ - event_type: 'user_logged_out'; - } & UserLoggedOutEvent) | ({ - event_type: 'user_updated'; - } & UserUpdatedEvent) | ({ - event_type: 'user_deleted'; - } & UserDeletedEvent) | ({ - event_type: 'notification_created'; - } & NotificationCreatedEvent) | ({ - event_type: 'notification_sent'; - } & NotificationSentEvent) | ({ - event_type: 'notification_delivered'; - } & NotificationDeliveredEvent) | ({ - event_type: 'notification_failed'; - } & NotificationFailedEvent) | ({ - event_type: 'notification_read'; - } & NotificationReadEvent) | ({ - event_type: 'notification_all_read'; - } & NotificationAllReadEvent) | ({ - event_type: 'notification_clicked'; - } & NotificationClickedEvent) | ({ - event_type: 'notification_preferences_updated'; - } & NotificationPreferencesUpdatedEvent) | ({ - event_type: 'saga_started'; - } & SagaStartedEvent) | ({ - event_type: 'saga_completed'; - } & SagaCompletedEvent) | ({ - event_type: 'saga_failed'; - } & SagaFailedEvent) | ({ - event_type: 'saga_cancelled'; - } & SagaCancelledEvent) | ({ - event_type: 'saga_compensating'; - } & SagaCompensatingEvent) | ({ - event_type: 'saga_compensated'; - } & SagaCompensatedEvent) | ({ - event_type: 'create_pod_command'; - } & CreatePodCommandEvent) | ({ - event_type: 'delete_pod_command'; - } & DeletePodCommandEvent) | ({ - event_type: 'allocate_resources_command'; - } & AllocateResourcesCommandEvent) | ({ - event_type: 'release_resources_command'; - } & ReleaseResourcesCommandEvent) | ({ - event_type: 'script_saved'; - } & ScriptSavedEvent) | ({ - event_type: 'script_deleted'; - } & ScriptDeletedEvent) | ({ - event_type: 'script_shared'; - } & ScriptSharedEvent) | ({ - event_type: 'security_violation'; - } & SecurityViolationEvent) | ({ - event_type: 'rate_limit_exceeded'; - } & RateLimitExceededEvent) | ({ - event_type: 'auth_failed'; - } & AuthFailedEvent) | ({ - event_type: 'resource_limit_exceeded'; - } & ResourceLimitExceededEvent) | ({ - event_type: 'quota_exceeded'; - } & QuotaExceededEvent) | ({ - event_type: 'system_error'; - } & SystemErrorEvent) | ({ - event_type: 'service_unhealthy'; - } & ServiceUnhealthyEvent) | ({ - event_type: 'service_recovered'; - } & ServiceRecoveredEvent) | ({ - event_type: 'dlq_message_received'; - } & DlqMessageReceivedEvent) | ({ - event_type: 'dlq_message_retried'; - } & DlqMessageRetriedEvent) | ({ - event_type: 'dlq_message_discarded'; - } & DlqMessageDiscardedEvent); -}; - -export type GetEventApiV1EventsEventIdGetResponse = GetEventApiV1EventsEventIdGetResponses[keyof GetEventApiV1EventsEventIdGetResponses]; - -export type PublishCustomEventApiV1EventsPublishPostData = { - body: PublishEventRequest; - path?: never; - query?: never; - url: '/api/v1/events/publish'; -}; - -export type PublishCustomEventApiV1EventsPublishPostErrors = { - /** - * Validation Error - */ - 422: HttpValidationError; -}; - -export type PublishCustomEventApiV1EventsPublishPostError = PublishCustomEventApiV1EventsPublishPostErrors[keyof PublishCustomEventApiV1EventsPublishPostErrors]; - -export type PublishCustomEventApiV1EventsPublishPostResponses = { - /** - * Successful Response - */ - 200: PublishEventResponse; -}; - -export type PublishCustomEventApiV1EventsPublishPostResponse = PublishCustomEventApiV1EventsPublishPostResponses[keyof PublishCustomEventApiV1EventsPublishPostResponses]; - -export type ReplayAggregateEventsApiV1EventsReplayAggregateIdPostData = { - body?: never; - path: { - /** - * Aggregate Id - */ - aggregate_id: string; - }; - query?: { - /** - * Target Service - * - * Service to replay events to - */ - target_service?: string | null; - /** - * Dry Run - * - * If true, only show what would be replayed - */ - dry_run?: boolean; - }; - url: '/api/v1/events/replay/{aggregate_id}'; -}; - -export type ReplayAggregateEventsApiV1EventsReplayAggregateIdPostErrors = { - /** - * No events found for the aggregate - */ - 404: ErrorResponse; - /** - * Validation Error - */ - 422: HttpValidationError; -}; - -export type ReplayAggregateEventsApiV1EventsReplayAggregateIdPostError = ReplayAggregateEventsApiV1EventsReplayAggregateIdPostErrors[keyof ReplayAggregateEventsApiV1EventsReplayAggregateIdPostErrors]; - -export type ReplayAggregateEventsApiV1EventsReplayAggregateIdPostResponses = { - /** - * Successful Response - */ - 200: ReplayAggregateResponse; -}; - -export type ReplayAggregateEventsApiV1EventsReplayAggregateIdPostResponse = ReplayAggregateEventsApiV1EventsReplayAggregateIdPostResponses[keyof ReplayAggregateEventsApiV1EventsReplayAggregateIdPostResponses]; - export type BrowseEventsApiV1AdminEventsBrowsePostData = { body: EventBrowseRequest; path?: never; diff --git a/frontend/src/routes/Editor.svelte b/frontend/src/routes/Editor.svelte index 3b8b6272..33f9ed36 100644 --- a/frontend/src/routes/Editor.svelte +++ b/frontend/src/routes/Editor.svelte @@ -71,7 +71,7 @@ let exampleScripts: Record = {}; let savedScripts = $state([]); let showOptions = $state(false); - let editorSettings = $derived({ ...{ theme: 'auto', font_size: 14, tab_size: 4, use_tabs: false, word_wrap: true, show_line_numbers: true }, ...userSettingsStore.editorSettings }); + let editorSettings = $derived({ ...{ theme: 'auto' as const, font_size: 14, tab_size: 4, use_tabs: false, word_wrap: true, show_line_numbers: true }, ...userSettingsStore.editorSettings }); let fileInput: HTMLInputElement; let editorRef: CodeMirrorEditor; let nameEditedByUser = false;