UNPKG

@vizzly-testing/cli

Version:

Visual review platform for UI developers and designers

83 lines 2.35 kB
import { Buffer } from 'buffer'; import { createServiceLogger } from '../../utils/logger-factory.js'; const logger = createServiceLogger('API-HANDLER'); export const createApiHandler = apiService => { let vizzlyDisabled = false; let screenshotCount = 0; const handleScreenshot = async (buildId, name, image, properties = {}) => { if (vizzlyDisabled) { logger.debug(`Screenshot captured (Vizzly disabled): ${name}`); return { statusCode: 200, body: { success: true, disabled: true, count: ++screenshotCount, message: `Vizzly disabled - ${screenshotCount} screenshots captured but not uploaded` } }; } if (!buildId) { return { statusCode: 400, body: { error: 'Build ID is required for screenshot upload' } }; } if (!apiService) { return { statusCode: 500, body: { error: 'API service not available' } }; } try { const imageBuffer = Buffer.from(image, 'base64'); const result = await apiService.uploadScreenshot(buildId, name, imageBuffer, properties ?? {}); if (result.skipped) { logger.debug(`Screenshot already exists, skipped: ${name}`); } else { logger.debug(`Screenshot uploaded: ${name}`); } if (!result.skipped) { screenshotCount++; } return { statusCode: 200, body: { success: true, name, skipped: result.skipped, count: screenshotCount } }; } catch (uploadError) { logger.error(`❌ Failed to upload screenshot ${name}:`, uploadError.message); vizzlyDisabled = true; const disabledMessage = '⚠️ Vizzly disabled due to upload error - continuing tests without visual testing'; logger.warn(disabledMessage); return { statusCode: 200, body: { success: true, name, disabled: true, message: disabledMessage } }; } }; const getScreenshotCount = () => screenshotCount; const cleanup = () => { vizzlyDisabled = false; screenshotCount = 0; logger.debug('API handler cleanup completed'); }; return { handleScreenshot, getScreenshotCount, cleanup }; };