/** * Webhook Notification Types (F-011) * * Type definitions and Zod validation schemas for the general-purpose webhook * notification system that enables external integrations. * * Features: * - Multiple event types (browse, content_change, pattern, error, feedback) * - HMAC-SHA256 signature verification * - Retry with exponential backoff * - Event filtering by type and domain * - Delivery tracking and health monitoring */ import { z } from 'zod'; /** * Categories of webhook events */ export type WebhookEventCategory = 'browse' | 'content_change' | 'pattern' | 'error' | 'feedback' | 'system'; export declare const WebhookEventCategorySchema: z.ZodEnum<{ error: "error"; system: "system"; pattern: "pattern"; browse: "browse"; content_change: "content_change"; feedback: "feedback"; }>; /** * Specific event types within each category */ export type WebhookEventType = 'browse.completed' | 'browse.failed' | 'browse.tier_escalation' | 'content_change.detected' | 'content_change.significant' | 'pattern.discovered' | 'pattern.failed' | 'pattern.updated' | 'error.rate_limit' | 'error.bot_detected' | 'error.timeout' | 'error.auth_failure' | 'feedback.submitted' | 'feedback.escalated' | 'feedback.anomaly' | 'system.health' | 'system.quota_warning' | 'system.maintenance'; export declare const WebhookEventTypeSchema: z.ZodEnum<{ "browse.completed": "browse.completed"; "browse.failed": "browse.failed"; "browse.tier_escalation": "browse.tier_escalation"; "content_change.detected": "content_change.detected"; "content_change.significant": "content_change.significant"; "pattern.discovered": "pattern.discovered"; "pattern.failed": "pattern.failed"; "pattern.updated": "pattern.updated"; "error.rate_limit": "error.rate_limit"; "error.bot_detected": "error.bot_detected"; "error.timeout": "error.timeout"; "error.auth_failure": "error.auth_failure"; "feedback.submitted": "feedback.submitted"; "feedback.escalated": "feedback.escalated"; "feedback.anomaly": "feedback.anomaly"; "system.health": "system.health"; "system.quota_warning": "system.quota_warning"; "system.maintenance": "system.maintenance"; }>; /** * Base payload structure for all webhook events */ export interface WebhookPayload { id: string; type: WebhookEventType; category: WebhookEventCategory; tenantId: string; timestamp: number; occurredAt: number; data: T; metadata: { domain?: string; url?: string; requestId?: string; severity?: 'low' | 'medium' | 'high' | 'critical'; }; } /** * Payload data for browse events */ export interface BrowseEventData { url: string; finalUrl: string; domain: string; success: boolean; durationMs: number; tier: 'intelligence' | 'lightweight' | 'playwright'; tierAttempts?: number; contentLength?: number; error?: string; } /** * Payload data for content change events */ export interface ContentChangeEventData { url: string; domain: string; changeType: 'minor' | 'moderate' | 'significant' | 'major'; changePercent: number; previousCheckAt: number; summary?: string; sectionsChanged?: string[]; } /** * Payload data for pattern events */ export interface PatternEventData { patternId: string; patternType: string; domain: string; action: 'discovered' | 'failed' | 'updated'; confidence?: number; previousConfidence?: number; reason?: string; } /** * Payload data for error events */ export interface ErrorEventData { url: string; domain: string; errorType: string; errorCode?: string; message: string; recoverable: boolean; suggestedAction?: string; } /** * Payload data for feedback events */ export interface FeedbackEventData { feedbackId: string; category: string; sentiment: string; severity?: string; domain: string; url: string; message?: string; status: string; } /** * Payload data for system events */ export interface SystemEventData { eventType: string; status: 'healthy' | 'degraded' | 'unhealthy'; message: string; details?: Record; } /** * Configuration for a webhook endpoint */ export interface WebhookEndpoint { id: string; tenantId: string; name: string; description?: string; url: string; secret: string; enabledEvents: WebhookEventType[]; enabledCategories?: WebhookEventCategory[]; domainFilter?: string[]; minSeverity?: 'low' | 'medium' | 'high' | 'critical'; enabled: boolean; maxRetries: number; initialRetryDelayMs: number; maxRetryDelayMs: number; headers?: Record; health: WebhookHealth; createdAt: number; updatedAt: number; } /** * Health status of a webhook endpoint */ export interface WebhookHealth { status: 'healthy' | 'degraded' | 'unhealthy'; totalDeliveries: number; successfulDeliveries: number; failedDeliveries: number; consecutiveFailures: number; lastDeliveryAt?: number; lastDeliveryStatus?: 'success' | 'failure'; lastErrorMessage?: string; avgResponseTimeMs?: number; circuitOpenedAt?: number; } /** * Record of a webhook delivery attempt */ export interface WebhookDelivery { id: string; endpointId: string; eventId: string; eventType: WebhookEventType; status: 'pending' | 'success' | 'failed' | 'retrying'; attempts: number; maxAttempts: number; nextRetryAt?: number; responseStatus?: number; responseTimeMs?: number; errorMessage?: string; idempotencyKey: string; createdAt: number; completedAt?: number; } /** * Zod schema for creating/updating a webhook endpoint */ export declare const WebhookEndpointInputSchema: z.ZodObject<{ name: z.ZodString; description: z.ZodOptional; url: z.ZodString; secret: z.ZodString; enabledEvents: z.ZodArray>; enabledCategories: z.ZodOptional>>; domainFilter: z.ZodOptional>; minSeverity: z.ZodOptional>; enabled: z.ZodDefault; maxRetries: z.ZodDefault; initialRetryDelayMs: z.ZodDefault; maxRetryDelayMs: z.ZodDefault; headers: z.ZodOptional>; }, z.core.$strip>; export type WebhookEndpointInput = z.infer; /** * Zod schema for updating a webhook endpoint */ export declare const WebhookEndpointUpdateSchema: z.ZodObject<{ name: z.ZodOptional; description: z.ZodOptional>; url: z.ZodOptional; enabledEvents: z.ZodOptional>>; enabledCategories: z.ZodOptional>>>; domainFilter: z.ZodOptional>>; minSeverity: z.ZodOptional>>; enabled: z.ZodOptional>; maxRetries: z.ZodOptional>; initialRetryDelayMs: z.ZodOptional>; maxRetryDelayMs: z.ZodOptional>; headers: z.ZodOptional>>; secret: z.ZodOptional; }, z.core.$strip>; export type WebhookEndpointUpdate = z.infer; /** * Result of sending a webhook */ export interface WebhookSendResult { success: boolean; deliveryId: string; endpointId: string; eventId: string; attempts: number; responseStatus?: number; responseTimeMs?: number; error?: string; willRetry?: boolean; nextRetryAt?: number; } /** * Result of testing a webhook endpoint */ export interface WebhookTestResult { success: boolean; endpointId: string; responseStatus?: number; responseTimeMs?: number; error?: string; signatureVerified: boolean; } /** * Statistics for webhook deliveries */ export interface WebhookStats { tenantId: string; period: { start: number; end: number; }; totalEvents: number; totalDeliveries: number; successfulDeliveries: number; failedDeliveries: number; pendingDeliveries: number; byEventType: Record; byEndpoint: Array<{ endpointId: string; name: string; total: number; successful: number; failed: number; health: WebhookHealth['status']; }>; avgResponseTimeMs: number; p95ResponseTimeMs: number; } /** * Get the category from an event type */ export declare function getEventCategory(eventType: WebhookEventType): WebhookEventCategory; /** * Create default webhook health */ export declare function createDefaultHealth(): WebhookHealth; /** * Severity levels for filtering */ export type SeverityLevel = 'low' | 'medium' | 'high' | 'critical'; /** * Severity priority order (for filtering) */ export declare const SEVERITY_PRIORITY: Record; /** * Check if an event meets severity threshold */ export declare function meetsSeverityThreshold(eventSeverity: string | undefined, minSeverity: string | undefined): boolean; //# sourceMappingURL=webhook.d.ts.map