/** * Deployment Verification Types * * Types for canary deployment, health monitoring, and rollback detection. * * @module scanners/deploy/types */ import { z } from "zod"; /** * Supported deployment providers */ export type DeployProvider = "vercel" | "aws" | "gcp" | "railway" | "render" | "fly" | "unknown"; /** * Deployment environment */ export type DeployEnvironment = "production" | "preview" | "staging" | "development"; /** * Deployment status */ export type DeployStatus = "pending" | "building" | "deploying" | "ready" | "failed" | "canceled" | "rolled_back"; /** * Health check result */ export interface HealthCheckResult { endpoint: string; status: "healthy" | "degraded" | "unhealthy" | "timeout"; statusCode?: number; responseTime: number; error?: string; checkedAt: string; } /** * Deployment info */ export interface DeploymentInfo { id: string; provider: DeployProvider; environment: DeployEnvironment; status: DeployStatus; url: string; createdAt: string; readyAt?: string; meta?: { commit?: string; branch?: string; buildTime?: number; }; } /** * Canary deployment config */ export declare const CanaryConfigSchema: z.ZodObject<{ enabled: z.ZodDefault; trafficPercent: z.ZodDefault; duration: z.ZodDefault; thresholds: z.ZodOptional; p95Latency: z.ZodDefault; healthCheckFailures: z.ZodDefault; }, "strip", z.ZodTypeAny, { errorRate: number; p95Latency: number; healthCheckFailures: number; }, { errorRate?: number | undefined; p95Latency?: number | undefined; healthCheckFailures?: number | undefined; }>>; rollbackOnFailure: z.ZodDefault; }, "strip", z.ZodTypeAny, { enabled: boolean; duration: string; trafficPercent: number; rollbackOnFailure: boolean; thresholds?: { errorRate: number; p95Latency: number; healthCheckFailures: number; } | undefined; }, { enabled?: boolean | undefined; duration?: string | undefined; thresholds?: { errorRate?: number | undefined; p95Latency?: number | undefined; healthCheckFailures?: number | undefined; } | undefined; trafficPercent?: number | undefined; rollbackOnFailure?: boolean | undefined; }>; export type CanaryConfig = z.infer; /** * Smoke test definition */ export declare const SmokeTestSchema: z.ZodObject<{ name: z.ZodString; endpoint: z.ZodString; method: z.ZodDefault>; expectedStatus: z.ZodDefault; timeout: z.ZodDefault>; headers: z.ZodOptional>; body: z.ZodOptional>; assertions: z.ZodOptional; path: z.ZodOptional; operator: z.ZodEnum<["eq", "ne", "gt", "lt", "contains", "matches"]>; value: z.ZodUnion<[z.ZodString, z.ZodNumber]>; }, "strip", z.ZodTypeAny, { value: string | number; type: "status" | "body" | "header" | "latency"; operator: "matches" | "eq" | "ne" | "gt" | "lt" | "contains"; path?: string | undefined; }, { value: string | number; type: "status" | "body" | "header" | "latency"; operator: "matches" | "eq" | "ne" | "gt" | "lt" | "contains"; path?: string | undefined; }>, "many">>; }, "strip", z.ZodTypeAny, { method: "GET" | "POST" | "PUT" | "DELETE"; name: string; timeout: number; endpoint: string; expectedStatus: number; headers?: Record | undefined; body?: Record | undefined; assertions?: { value: string | number; type: "status" | "body" | "header" | "latency"; operator: "matches" | "eq" | "ne" | "gt" | "lt" | "contains"; path?: string | undefined; }[] | undefined; }, { name: string; endpoint: string; method?: "GET" | "POST" | "PUT" | "DELETE" | undefined; timeout?: number | undefined; headers?: Record | undefined; body?: Record | undefined; expectedStatus?: number | undefined; assertions?: { value: string | number; type: "status" | "body" | "header" | "latency"; operator: "matches" | "eq" | "ne" | "gt" | "lt" | "contains"; path?: string | undefined; }[] | undefined; }>; export type SmokeTest = z.infer; /** * Deployment config (YAML schema) */ export declare const DeployConfigSchema: z.ZodObject<{ provider: z.ZodOptional>; healthEndpoints: z.ZodDefault>; smokeTests: z.ZodOptional>; expectedStatus: z.ZodDefault; timeout: z.ZodDefault>; headers: z.ZodOptional>; body: z.ZodOptional>; assertions: z.ZodOptional; path: z.ZodOptional; operator: z.ZodEnum<["eq", "ne", "gt", "lt", "contains", "matches"]>; value: z.ZodUnion<[z.ZodString, z.ZodNumber]>; }, "strip", z.ZodTypeAny, { value: string | number; type: "status" | "body" | "header" | "latency"; operator: "matches" | "eq" | "ne" | "gt" | "lt" | "contains"; path?: string | undefined; }, { value: string | number; type: "status" | "body" | "header" | "latency"; operator: "matches" | "eq" | "ne" | "gt" | "lt" | "contains"; path?: string | undefined; }>, "many">>; }, "strip", z.ZodTypeAny, { method: "GET" | "POST" | "PUT" | "DELETE"; name: string; timeout: number; endpoint: string; expectedStatus: number; headers?: Record | undefined; body?: Record | undefined; assertions?: { value: string | number; type: "status" | "body" | "header" | "latency"; operator: "matches" | "eq" | "ne" | "gt" | "lt" | "contains"; path?: string | undefined; }[] | undefined; }, { name: string; endpoint: string; method?: "GET" | "POST" | "PUT" | "DELETE" | undefined; timeout?: number | undefined; headers?: Record | undefined; body?: Record | undefined; expectedStatus?: number | undefined; assertions?: { value: string | number; type: "status" | "body" | "header" | "latency"; operator: "matches" | "eq" | "ne" | "gt" | "lt" | "contains"; path?: string | undefined; }[] | undefined; }>, "many">>; canary: z.ZodOptional; trafficPercent: z.ZodDefault; duration: z.ZodDefault; thresholds: z.ZodOptional; p95Latency: z.ZodDefault; healthCheckFailures: z.ZodDefault; }, "strip", z.ZodTypeAny, { errorRate: number; p95Latency: number; healthCheckFailures: number; }, { errorRate?: number | undefined; p95Latency?: number | undefined; healthCheckFailures?: number | undefined; }>>; rollbackOnFailure: z.ZodDefault; }, "strip", z.ZodTypeAny, { enabled: boolean; duration: string; trafficPercent: number; rollbackOnFailure: boolean; thresholds?: { errorRate: number; p95Latency: number; healthCheckFailures: number; } | undefined; }, { enabled?: boolean | undefined; duration?: string | undefined; thresholds?: { errorRate?: number | undefined; p95Latency?: number | undefined; healthCheckFailures?: number | undefined; } | undefined; trafficPercent?: number | undefined; rollbackOnFailure?: boolean | undefined; }>>; rollback: z.ZodOptional; retainVersions: z.ZodDefault; }, "strip", z.ZodTypeAny, { autoRollback: boolean; retainVersions: number; }, { autoRollback?: boolean | undefined; retainVersions?: number | undefined; }>>; notifications: z.ZodOptional; email: z.ZodOptional>; }, "strip", z.ZodTypeAny, { email?: string[] | undefined; slack?: string | undefined; }, { email?: string[] | undefined; slack?: string | undefined; }>>; }, "strip", z.ZodTypeAny, { healthEndpoints: string[]; provider?: "vercel" | "aws" | "gcp" | "railway" | "render" | "fly" | undefined; canary?: { enabled: boolean; duration: string; trafficPercent: number; rollbackOnFailure: boolean; thresholds?: { errorRate: number; p95Latency: number; healthCheckFailures: number; } | undefined; } | undefined; smokeTests?: { method: "GET" | "POST" | "PUT" | "DELETE"; name: string; timeout: number; endpoint: string; expectedStatus: number; headers?: Record | undefined; body?: Record | undefined; assertions?: { value: string | number; type: "status" | "body" | "header" | "latency"; operator: "matches" | "eq" | "ne" | "gt" | "lt" | "contains"; path?: string | undefined; }[] | undefined; }[] | undefined; rollback?: { autoRollback: boolean; retainVersions: number; } | undefined; notifications?: { email?: string[] | undefined; slack?: string | undefined; } | undefined; }, { provider?: "vercel" | "aws" | "gcp" | "railway" | "render" | "fly" | undefined; canary?: { enabled?: boolean | undefined; duration?: string | undefined; thresholds?: { errorRate?: number | undefined; p95Latency?: number | undefined; healthCheckFailures?: number | undefined; } | undefined; trafficPercent?: number | undefined; rollbackOnFailure?: boolean | undefined; } | undefined; healthEndpoints?: string[] | undefined; smokeTests?: { name: string; endpoint: string; method?: "GET" | "POST" | "PUT" | "DELETE" | undefined; timeout?: number | undefined; headers?: Record | undefined; body?: Record | undefined; expectedStatus?: number | undefined; assertions?: { value: string | number; type: "status" | "body" | "header" | "latency"; operator: "matches" | "eq" | "ne" | "gt" | "lt" | "contains"; path?: string | undefined; }[] | undefined; }[] | undefined; rollback?: { autoRollback?: boolean | undefined; retainVersions?: number | undefined; } | undefined; notifications?: { email?: string[] | undefined; slack?: string | undefined; } | undefined; }>; export type DeployConfig = z.infer; /** * Smoke test result */ export interface SmokeTestResult { name: string; endpoint: string; passed: boolean; statusCode: number; responseTime: number; assertions: Array<{ type: string; expected: string | number; actual: string | number; passed: boolean; }>; error?: string; } /** * Canary analysis result */ export interface CanaryAnalysis { phase: "running" | "passed" | "failed" | "promoted" | "rolled_back"; trafficPercent: number; duration: number; metrics: { errorRate: number; p95Latency: number; requestCount: number; healthChecksPassed: number; healthChecksFailed: number; }; thresholdsPassed: boolean; recommendation: "promote" | "rollback" | "continue"; } /** * Deployment verification result */ export interface DeployVerificationResult { success: boolean; provider: DeployProvider; deployment?: DeploymentInfo; healthChecks: HealthCheckResult[]; smokeTests: SmokeTestResult[]; canary?: CanaryAnalysis; score: { healthScore: number; smokeTestScore: number; canaryScore: number; overallScore: number; }; duration: number; error?: string; } /** * Provider detection result */ export interface ProviderDetection { provider: DeployProvider; confidence: number; indicators: string[]; projectId?: string; configPath?: string; } //# sourceMappingURL=types.d.ts.map