/** * Virus Scan Plugin * Scans files for viruses/malware before upload to storage * Supports multiple providers (VirusTotal, ClamAV, etc.) */ import { BasePlugin } from '../../base/BasePlugin'; import type { StoragePluginFile, StoragePluginContext, BeforeUploadResult, StoragePluginHealth, VirusScanPluginConfig } from '@plyaz/types/storage'; /** * Virus Scan Plugin * Scans files for malware before upload using configurable providers * * @example * ```typescript * import { VirusScanPlugin, VirusTotalProvider } from '@plyaz/storage/plugins'; * * const plugin = new VirusScanPlugin({ * provider: new VirusTotalProvider(), * // API configuration for REST-based providers (managed by plugin) * apiKey: process.env.VIRUSTOTAL_API_KEY!, * apiEndpoint: 'https://www.virustotal.com/api/v3', * priority: 90, // Run after size validation * }); * * const service = new StorageService({ * adapters: [adapter], * plugins: [plugin], * }); * ``` */ export declare class VirusScanPlugin extends BasePlugin { private readonly provider; private readonly rejectOnError; private readonly skipAboveSize?; private readonly skipExtensions; constructor(config: VirusScanPluginConfig); /** * Initialize the plugin * Validates provider is available */ initialize(): Promise; /** * Scan file before upload (BLOCKING) * Rejects upload if file is infected */ beforeUpload(file: StoragePluginFile, _context: StoragePluginContext): Promise; /** * Check if file should be skipped */ private shouldSkipFile; /** * Get file extension from filename */ private getFileExtension; /** * Health check */ healthCheck(): Promise; }