import type { CVE, CVESearchFilters, CVESearchResult } from '../types/cve.js';
import { BaseCVESourceImplementation, SourceValidationResult, type RequestOptions } from './base.js';
/**
 * MITRE Corporation CVE Source Implementation
 *
 * MITRE is the original CVE numbering authority and maintains the official CVE Services API.
 * This implementation provides access to authoritative CVE records directly from the source.
 *
 * API Documentation: https://cveawg.mitre.org/api-docs/
 * Base URL: https://cveawg.mitre.org/api
 *
 * IMPLEMENTED ENDPOINTS:
 *
 * Public Access (no authentication):
 * - GET /cve/{id} - Retrieve individual CVE records by ID
 *
 * Authenticated Access (requires CVE Program membership):
 * - GET /cve - Search/filter CVE records (Secretariat role)
 * - GET /cve_cursor - Cursor-based pagination (Secretariat role)
 *
 * AUTHENTICATION:
 * MITRE uses a three-header authentication system for CVE Program members:
 * - CVE-API-ORG: Organization short name (env: MITRE_API_ORG or CVE_API_ORG)
 * - CVE-API-USER: Username (env: MITRE_API_USER or CVE_API_USER)
 * - CVE-API-KEY: API key (env: MITRE_API_KEY)
 *
 * FEATURES:
 * Individual CVE lookup (public)
 * Authenticated search (requires CVE Program membership)
 * CVE JSON 5.1 format support
 * CVSS v3.1/v3.0/v2.0 metrics
 * CWE weakness mapping
 * Product/version configuration data
 * Authoritative reference links
 * Exploit indicator detection
 * Multi-container data (CNA + ADP)
 *
 * LIMITATIONS:
 * - Search functionality requires CVE Program membership and Secretariat role
 * - Public access limited to individual CVE ID lookups
 * - Rate limiting applies (respects API guidelines)
 *
 * NOTE: Without authentication, only public read-only access to individual CVE records
 * is available. All administrative, creation, and modification operations require
 * CVE Program membership with appropriate roles.
 */
export declare class MITRESourceImplementation extends BaseCVESourceImplementation {
    /**
     * Override base class authentication headers for MITRE's custom multi-header system.
     *
     * MITRE API requires three specific headers for CVE Program member authentication:
     * - CVE-API-ORG: Organization short name (from MITRE_API_ORG or CVE_API_ORG env var)
     * - CVE-API-USER: Username (from MITRE_API_USER or CVE_API_USER env var)
     * - CVE-API-KEY: API key (from MITRE_API_KEY env var, configured via apiKeyEnvVar)
     *
     * This authentication system is only required for search operations and CVE Program
     * member features. Individual CVE lookups work without authentication.
     *
     * @override Base class getAuthHeaders() method
     * @returns Record of MITRE-specific authentication headers
     */
    protected getAuthHeaders(): Record<string, string>;
    /**
     * Check if authenticated search endpoints can be used.
     * Requires CVE Program membership with proper credentials.
     */
    private hasAuthentication;
    buildSearchRequest(filters: CVESearchFilters): {
        url: string;
        options: RequestOptions;
    };
    buildDetailsRequest(cveId: string): {
        url: string;
        options: RequestOptions;
    };
    normalizeSearchResults(data: Record<string, unknown>): CVESearchResult;
    normalizeCVEData(data: Record<string, unknown>): CVE;
    private mapMITREState;
    private normalizeMITREMetrics;
    private normalizeMITREWeaknesses;
    private normalizeMITREConfigurations;
    private normalizeMITREReferences;
    private formatDate;
    testConnection(): Promise<boolean>;
    /**
     * Validates MITRE-specific configuration
     */
    protected validateSourceSpecificConfig(): SourceValidationResult;
    /**
     * MITRE CVE Services API validation - checks both public and authenticated access
     */
    protected validateSourceSpecificApiKey(): SourceValidationResult;
    /**
     * MITRE API key environment variable from configuration
     */
    getApiKeyEnvironmentVariable(): string | undefined;
    /**
     * Alternative environment variables for MITRE API key
     */
    getAlternativeApiKeyEnvironmentVariables(): string[];
    /**
     * MITRE API key identifier for mapping
     */
    getApiKeyIdentifier(): string;
    /**
     * Check if this source matches MITRE-related identifiers
     */
    matchesSourceIdentifier(identifier: string): boolean;
    /**
     * MITRE API key validation
     */
    canUseApiKey(apiKey: string): boolean;
    private getRequestOptions;
}
//# sourceMappingURL=mitre.d.ts.map