/** * SMI-865: Quarantine Repository - CRUD operations for skill quarantine management * * Provides: * - Create, Read, Update, Delete operations for quarantine entries * - Review workflow management * - Integration with AuditLogger for audit trail * - Query filtering and pagination * * Severity Categories: * - MALICIOUS: Permanent quarantine, security threat detected * - SUSPICIOUS: Manual review required before import * - RISKY: Can import with warnings displayed * - LOW_QUALITY: Can import with reduced quality score */ import type { Database as DatabaseType } from '../../db/database-interface.js'; import type { QuarantineReviewStatus } from '../../db/quarantine-schema.js'; import type { AuditLogger } from '../../security/AuditLogger.js'; import type { QuarantineEntry, QuarantineCreateInput, QuarantineUpdateInput, QuarantineQueryFilter, PaginatedQuarantineResults, QuarantineStats, ReviewDecision } from './types.js'; export type { QuarantineEntry, QuarantineCreateInput, QuarantineUpdateInput, QuarantineQueryFilter, PaginatedQuarantineResults, QuarantineStats, ReviewDecision, } from './types.js'; /** * Repository for quarantine CRUD operations * * @example * ```typescript * const repo = new QuarantineRepository(db, auditLogger) * * // Quarantine a suspicious skill * const entry = repo.create({ * skillId: 'community/suspicious-skill', * source: 'github', * quarantineReason: 'Obfuscated code detected', * severity: 'SUSPICIOUS', * detectedPatterns: ['eval()', 'obfuscated variables'] * }) * * // Review and approve/reject * const decision = repo.review(entry.id, { * reviewedBy: 'security-team', * reviewStatus: 'approved', * reviewNotes: 'Manual review confirmed safe after code analysis' * }) * ``` */ export declare class QuarantineRepository { private db; private auditLogger?; private stmts; constructor(db: DatabaseType, auditLogger?: AuditLogger); /** * Ensure the quarantine table exists */ private ensureTableExists; /** * Prepare SQL statements for performance */ private prepareStatements; /** * Log audit event if AuditLogger is available */ private logAudit; /** * Create a new quarantine entry * * @param input - Quarantine entry data * @returns Created quarantine entry */ create(input: QuarantineCreateInput): QuarantineEntry; /** * Find a quarantine entry by ID * * @param id - Quarantine entry ID * @returns Quarantine entry or null if not found */ findById(id: string): QuarantineEntry | null; /** * Find all quarantine entries for a skill * * @param skillId - Skill ID * @returns Array of quarantine entries */ findBySkillId(skillId: string): QuarantineEntry[]; /** * Check if a skill is quarantined * * @param skillId - Skill ID * @returns True if skill has any pending quarantine entries */ isQuarantined(skillId: string): boolean; /** * Get the most severe quarantine entry for a skill * * @param skillId - Skill ID * @returns Most severe quarantine entry or null */ getMostSevere(skillId: string): QuarantineEntry | null; /** * Find all quarantine entries with pagination * * @param options - Pagination options * @returns Paginated quarantine results */ findAll(options?: { limit?: number; offset?: number; }): PaginatedQuarantineResults; /** * Query quarantine entries with filters * * @param filter - Query filters * @returns Paginated quarantine results */ query(filter: QuarantineQueryFilter): PaginatedQuarantineResults; /** * Update a quarantine entry * * @param id - Quarantine entry ID * @param input - Update data * @returns Updated entry or null if not found */ update(id: string, input: QuarantineUpdateInput): QuarantineEntry | null; /** * Review a quarantine entry * * @param id - Quarantine entry ID * @param reviewInput - Review data * @returns Review decision with import guidance */ review(id: string, reviewInput: { reviewedBy: string; reviewStatus: QuarantineReviewStatus; reviewNotes?: string; }): ReviewDecision | null; /** * Delete a quarantine entry * * @param id - Quarantine entry ID * @returns True if entry was deleted */ delete(id: string): boolean; /** * Delete all quarantine entries for a skill * * @param skillId - Skill ID * @returns Number of deleted entries */ deleteBySkillId(skillId: string): number; /** * Get quarantine statistics * * @returns Quarantine statistics */ getStats(): QuarantineStats; /** * Count all quarantine entries * * @returns Total count */ count(): number; /** * Execute a function within a transaction * * @param fn - Function to execute * @returns Result of the function */ transaction(fn: () => T): T; } //# sourceMappingURL=QuarantineRepository.d.ts.map