/** * Comprehensive Webhook Types * All webhook event definitions and configurations */ import { ModelProvider } from './vendors'; export interface WebhookConfig { id: string; project_id: string; name: string; description?: string; url: string; events: WebhookEvent[]; status: WebhookStatus; filters?: WebhookFilter[]; retry_config: RetryConfig; security: WebhookSecurity; metadata: Record; created_at: Date; updated_at: Date; last_triggered_at?: Date; } export declare enum WebhookStatus { ACTIVE = "active", PAUSED = "paused", DISABLED = "disabled", FAILED = "failed" } export declare enum WebhookEvent { REQUEST_STARTED = "request.started", REQUEST_COMPLETED = "request.completed", REQUEST_FAILED = "request.failed", REQUEST_TIMEOUT = "request.timeout", MODEL_CALLED = "model.called", MODEL_RESPONSE = "model.response", MODEL_ERROR = "model.error", ROUTING_DECISION = "routing.decision", FALLBACK_TRIGGERED = "fallback.triggered", COST_THRESHOLD_EXCEEDED = "cost.threshold_exceeded", BUDGET_WARNING = "budget.warning", BUDGET_EXCEEDED = "budget.exceeded", LATENCY_WARNING = "latency.warning", LATENCY_SLA_BREACH = "latency.sla_breach", CIRCUIT_BREAKER_OPENED = "circuit_breaker.opened", CIRCUIT_BREAKER_CLOSED = "circuit_breaker.closed", CIRCUIT_BREAKER_HALF_OPEN = "circuit_breaker.half_open", RATE_LIMIT_EXCEEDED = "rate_limit.exceeded", RATE_LIMIT_WARNING = "rate_limit.warning", SAFETY_VIOLATION = "safety.violation", CONTENT_MODERATION_FLAGGED = "content_moderation.flagged", PII_DETECTED = "pii.detected", EXPERIMENT_STARTED = "experiment.started", EXPERIMENT_COMPLETED = "experiment.completed", EXPERIMENT_VARIANT_ASSIGNED = "experiment.variant_assigned", CONNECTOR_STATUS_CHANGED = "connector.status_changed", CREDENTIAL_EXPIRING = "credential.expiring", CREDENTIAL_EXPIRED = "credential.expired", QUOTA_WARNING = "quota.warning", QUOTA_EXCEEDED = "quota.exceeded" } export interface WebhookFilter { attribute: WebhookFilterAttribute; operator: 'eq' | 'ne' | 'in' | 'contains'; value: string | string[]; } export declare enum WebhookFilterAttribute { PROVIDER = "provider", MODEL = "model", USER_ID = "user_id", PROJECT_ID = "project_id", STATUS = "status", COST_RANGE = "cost_range", LATENCY_RANGE = "latency_range" } export interface RetryConfig { max_attempts: number; initial_delay_ms: number; max_delay_ms: number; backoff_multiplier: number; retry_on_status_codes?: number[]; } export interface WebhookSecurity { signing_secret: string; signature_header: string; signature_algorithm: 'sha256' | 'sha512'; verify_ssl: boolean; custom_headers?: Record; timeout_ms: number; } export interface WebhookPayload { event: WebhookEvent; timestamp: Date; event_id: string; project_id: string; data: WebhookEventData; metadata?: Record; } export type WebhookEventData = RequestStartedData | RequestCompletedData | RequestFailedData | RequestTimeoutData | ModelCalledData | ModelResponseData | ModelErrorData | RoutingDecisionData | FallbackTriggeredData | CostThresholdExceededData | BudgetWarningData | BudgetExceededData | LatencyWarningData | LatencySLABreachData | CircuitBreakerOpenedData | CircuitBreakerClosedData | CircuitBreakerHalfOpenData | RateLimitExceededData | RateLimitWarningData | SafetyViolationData | ContentModerationFlaggedData | PIIDetectedData | ExperimentStartedData | ExperimentCompletedData | ExperimentVariantAssignedData | ConnectorStatusChangedData | CredentialExpiringData | CredentialExpiredData | QuotaWarningData | QuotaExceededData; export interface RequestStartedData { event_type: WebhookEvent.REQUEST_STARTED; request_id: string; user_id?: string; routing_policy_id: string; prompt_length: number; timestamp: Date; } export interface RequestCompletedData { event_type: WebhookEvent.REQUEST_COMPLETED; request_id: string; user_id?: string; connector_id: string; provider: ModelProvider; model: string; latency_ms: number; cost: number; token_usage: { prompt_tokens: number; completion_tokens: number; total_tokens: number; }; success: boolean; timestamp: Date; } export interface RequestFailedData { event_type: WebhookEvent.REQUEST_FAILED; request_id: string; user_id?: string; connector_id: string; provider: ModelProvider; model: string; error_code: string; error_message: string; retry_count: number; timestamp: Date; } export interface RequestTimeoutData { event_type: WebhookEvent.REQUEST_TIMEOUT; request_id: string; user_id?: string; connector_id: string; provider: ModelProvider; model: string; timeout_ms: number; elapsed_ms: number; timestamp: Date; } export interface ModelCalledData { event_type: WebhookEvent.MODEL_CALLED; request_id: string; connector_id: string; provider: ModelProvider; model: string; prompt_length: number; parameters: Record; timestamp: Date; } export interface ModelResponseData { event_type: WebhookEvent.MODEL_RESPONSE; request_id: string; connector_id: string; provider: ModelProvider; model: string; response_length: number; latency_ms: number; cost: number; token_usage: { prompt_tokens: number; completion_tokens: number; total_tokens: number; }; confidence_score?: number; timestamp: Date; } export interface ModelErrorData { event_type: WebhookEvent.MODEL_ERROR; request_id: string; connector_id: string; provider: ModelProvider; model: string; error_code: string; error_message: string; error_type: 'rate_limit' | 'authentication' | 'timeout' | 'server_error' | 'validation' | 'unknown'; timestamp: Date; } export interface RoutingDecisionData { event_type: WebhookEvent.ROUTING_DECISION; request_id: string; routing_policy_id: string; strategy: string; selected_connector_id: string; candidate_connectors: string[]; decision_metadata: Record; timestamp: Date; } export interface FallbackTriggeredData { event_type: WebhookEvent.FALLBACK_TRIGGERED; request_id: string; primary_connector_id: string; fallback_connector_id: string; trigger_reason: string; attempt_count: number; timestamp: Date; } export interface CostThresholdExceededData { event_type: WebhookEvent.COST_THRESHOLD_EXCEEDED; request_id: string; connector_id: string; cost: number; threshold: number; timestamp: Date; } export interface BudgetWarningData { event_type: WebhookEvent.BUDGET_WARNING; project_id: string; budget_type: 'daily' | 'monthly'; current_spend: number; budget_limit: number; utilization_percentage: number; timestamp: Date; } export interface BudgetExceededData { event_type: WebhookEvent.BUDGET_EXCEEDED; project_id: string; budget_type: 'daily' | 'monthly'; current_spend: number; budget_limit: number; timestamp: Date; } export interface LatencyWarningData { event_type: WebhookEvent.LATENCY_WARNING; request_id: string; connector_id: string; latency_ms: number; warning_threshold_ms: number; timestamp: Date; } export interface LatencySLABreachData { event_type: WebhookEvent.LATENCY_SLA_BREACH; connector_id: string; provider: ModelProvider; model: string; actual_latency_p95_ms: number; sla_latency_p95_ms: number; breach_duration_minutes: number; timestamp: Date; } export interface CircuitBreakerOpenedData { event_type: WebhookEvent.CIRCUIT_BREAKER_OPENED; connector_id: string; provider: ModelProvider; model: string; failure_count: number; failure_threshold: number; timestamp: Date; } export interface CircuitBreakerClosedData { event_type: WebhookEvent.CIRCUIT_BREAKER_CLOSED; connector_id: string; provider: ModelProvider; model: string; success_count: number; timestamp: Date; } export interface CircuitBreakerHalfOpenData { event_type: WebhookEvent.CIRCUIT_BREAKER_HALF_OPEN; connector_id: string; provider: ModelProvider; model: string; timestamp: Date; } export interface RateLimitExceededData { event_type: WebhookEvent.RATE_LIMIT_EXCEEDED; request_id: string; connector_id?: string; scope: 'user' | 'project' | 'connector'; scope_id: string; limit: number; window_seconds: number; timestamp: Date; } export interface RateLimitWarningData { event_type: WebhookEvent.RATE_LIMIT_WARNING; connector_id?: string; scope: 'user' | 'project' | 'connector'; scope_id: string; current_count: number; limit: number; utilization_percentage: number; timestamp: Date; } export interface SafetyViolationData { event_type: WebhookEvent.SAFETY_VIOLATION; request_id: string; user_id?: string; violation_type: string; severity: 'low' | 'medium' | 'high' | 'critical'; content_snippet?: string; action_taken: 'blocked' | 'flagged' | 'logged'; timestamp: Date; } export interface ContentModerationFlaggedData { event_type: WebhookEvent.CONTENT_MODERATION_FLAGGED; request_id: string; user_id?: string; flagged_content_type: 'prompt' | 'response'; categories: string[]; scores: Record; timestamp: Date; } export interface PIIDetectedData { event_type: WebhookEvent.PII_DETECTED; request_id: string; user_id?: string; detected_in: 'prompt' | 'response'; pii_types: string[]; redaction_applied: boolean; timestamp: Date; } export interface ExperimentStartedData { event_type: WebhookEvent.EXPERIMENT_STARTED; experiment_id: string; experiment_name: string; experiment_type: string; variants: Array<{ id: string; name: string; connector_id: string; }>; timestamp: Date; } export interface ExperimentCompletedData { event_type: WebhookEvent.EXPERIMENT_COMPLETED; experiment_id: string; experiment_name: string; duration_hours: number; total_requests: number; winner_variant_id?: string; results: Array<{ variant_id: string; metrics: Record; }>; timestamp: Date; } export interface ExperimentVariantAssignedData { event_type: WebhookEvent.EXPERIMENT_VARIANT_ASSIGNED; experiment_id: string; request_id: string; user_id?: string; variant_id: string; variant_name: string; connector_id: string; timestamp: Date; } export interface ConnectorStatusChangedData { event_type: WebhookEvent.CONNECTOR_STATUS_CHANGED; connector_id: string; provider: ModelProvider; model: string; old_status: string; new_status: string; reason?: string; timestamp: Date; } export interface CredentialExpiringData { event_type: WebhookEvent.CREDENTIAL_EXPIRING; connector_id: string; credential_type: string; expires_at: Date; days_until_expiry: number; timestamp: Date; } export interface CredentialExpiredData { event_type: WebhookEvent.CREDENTIAL_EXPIRED; connector_id: string; credential_type: string; expired_at: Date; timestamp: Date; } export interface QuotaWarningData { event_type: WebhookEvent.QUOTA_WARNING; project_id: string; quota_type: 'requests' | 'tokens' | 'cost'; current_usage: number; quota_limit: number; utilization_percentage: number; period: 'daily' | 'monthly'; timestamp: Date; } export interface QuotaExceededData { event_type: WebhookEvent.QUOTA_EXCEEDED; project_id: string; quota_type: 'requests' | 'tokens' | 'cost'; current_usage: number; quota_limit: number; period: 'daily' | 'monthly'; timestamp: Date; } export interface WebhookDelivery { id: string; webhook_config_id: string; event: WebhookEvent; payload: WebhookPayload; status: DeliveryStatus; attempts: DeliveryAttempt[]; created_at: Date; completed_at?: Date; } export declare enum DeliveryStatus { PENDING = "pending", DELIVERED = "delivered", FAILED = "failed", RETRYING = "retrying", EXPIRED = "expired" } export interface DeliveryAttempt { attempt_number: number; timestamp: Date; http_status?: number; response_body?: string; error?: string; latency_ms: number; } export interface WebhookSignature { timestamp: number; signature: string; algorithm: string; } export interface SignatureVerificationResult { valid: boolean; error?: string; timestamp_age_seconds?: number; } //# sourceMappingURL=webhooks.d.ts.map