UNPKG

n8n-nodes-pdf-accessibility

Version:

AI-powered PDF accessibility automation for N8N - comprehensive WCAG compliance analysis, intelligent remediation, and professional audit reporting with 5 integrated accessibility tools

84 lines (83 loc) 3.25 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.OpenAIProvider = void 0; const axios_1 = __importDefault(require("axios")); const base_1 = require("./base"); class OpenAIProvider extends base_1.BaseLLMProvider { getName() { return 'OpenAI'; } getModels() { return [ 'gpt-4-turbo-preview', 'gpt-4-0125-preview', 'gpt-4-1106-preview', 'gpt-4', 'gpt-3.5-turbo', 'gpt-3.5-turbo-16k', ]; } async validateCredentials() { try { if (!this.credentials.apiKey || !this.credentials.apiKey.startsWith('sk-')) { return false; } const response = await axios_1.default.get(`${OpenAIProvider.BASE_URL}/models`, { headers: { 'Authorization': `Bearer ${this.credentials.apiKey}`, 'Content-Type': 'application/json', }, timeout: 10000, }); return response.status === 200; } catch (error) { return false; } } async analyzeAccessibility(text, documentInfo, options) { const model = options.model || this.credentials.model || 'gpt-4-turbo-preview'; const prompt = this.buildAnalysisPrompt(text, documentInfo, options.wcagLevel, options.language || 'en-US'); try { const response = await axios_1.default.post(`${OpenAIProvider.BASE_URL}/chat/completions`, { model, messages: [ { role: 'system', content: 'You are a PDF accessibility expert specializing in WCAG compliance analysis. Always respond with valid JSON only.', }, { role: 'user', content: prompt, }, ], max_tokens: 4000, temperature: 0.1, }, { headers: { 'Authorization': `Bearer ${this.credentials.apiKey}`, 'Content-Type': 'application/json', }, timeout: 60000, }); const analysisText = response.data.choices[0]?.message?.content; if (!analysisText) { throw new Error('No analysis content received from OpenAI'); } return this.parseAnalysisResponse(analysisText, documentInfo.fileName); } catch (error) { if (axios_1.default.isAxiosError(error)) { const status = error.response?.status; const message = error.response?.data?.error?.message || error.message; throw new Error(`OpenAI API Error (${status}): ${message}`); } throw new Error(`OpenAI analysis failed: ${error instanceof Error ? error.message : String(error)}`); } } } exports.OpenAIProvider = OpenAIProvider; OpenAIProvider.BASE_URL = 'https://api.openai.com/v1';