Skip to main content
Glama
audit-executor.ts2.75 kB
import { AxeAdapter } from '../../adapters/axe-adapter.js'; import { LighthouseAdapter } from '../../adapters/lighthouse-adapter.js'; import { WaveAdapter } from '../../adapters/wave-adapter.js'; import { Normaliser } from '../normalisation/normaliser.js'; import type { NormalisedAuditResult } from '../../types/normalised.js'; import type { AuditConfig } from './audit-config.js'; export class AuditExecutor { private readonly axeAdapter: AxeAdapter; private readonly lighthouseAdapter: LighthouseAdapter; private readonly waveAdapter: WaveAdapter; private readonly normaliser: Normaliser; constructor() { this.axeAdapter = new AxeAdapter(); this.lighthouseAdapter = new LighthouseAdapter(); this.waveAdapter = new WaveAdapter(); this.normaliser = new Normaliser(); } async executeAxeAudit(url: string, config?: AuditConfig): Promise<NormalisedAuditResult> { const options: { timeout?: number; browser?: 'chromium' | 'firefox' | 'webkit'; tags?: string[]; rules?: Record<string, { enabled: boolean }>; } = {}; if (config?.timeout !== undefined) { options.timeout = config.timeout; } if (config?.browser !== undefined) { options.browser = config.browser; } if (config?.tags !== undefined) { options.tags = config.tags; } if (config?.rules !== undefined) { options.rules = config.rules; } const result = await this.axeAdapter.audit(url, options); return this.normaliser.normaliseAxeResult(result); } async executeLighthouseAudit(url: string, config?: AuditConfig): Promise<NormalisedAuditResult> { const options: { timeout?: number; categories?: string[]; onlyCategories?: string[]; skipAudits?: string[]; } = {}; if (config?.timeout !== undefined) { options.timeout = config.timeout; } if (config?.categories !== undefined) { options.categories = config.categories; } if (config?.onlyCategories !== undefined) { options.onlyCategories = config.onlyCategories; } if (config?.skipAudits !== undefined) { options.skipAudits = config.skipAudits; } const result = await this.lighthouseAdapter.audit(url, options); return this.normaliser.normaliseLighthouseResult(result); } async executeWaveAudit(url: string, config?: AuditConfig & { apiKey?: string }): Promise<NormalisedAuditResult> { const options: { apiKey?: string } = {}; if (config?.apiKey !== undefined) { options.apiKey = config.apiKey; } const result = await this.waveAdapter.audit(url, options); return this.normaliser.normaliseWaveResult(result); } async close(): Promise<void> { await this.axeAdapter.close(); } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Duds/accessibility-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server