/**
 * Socrata API client for municipal data
 * Used by San Francisco, NYC, Oakland, Sacramento
 */
import { MunicipalProject, MunicipalSearchParams, MunicipalSearchResponse } from '../../types/projects';
import { BaseClientConfig, BaseMunicipalClient, HealthCheck } from '../base-client';
/**
 * Socrata-specific configuration
 */
export interface SocrataClientConfig extends BaseClientConfig {
    appToken?: string;
    userAgent?: string;
}
/**
 * SoQL query parameters
 */
export interface SoQLQuery {
    $select?: string;
    $where?: string;
    $order?: string;
    $limit?: number;
    $offset?: number;
    $q?: string;
}
/**
 * Socrata API client
 */
export declare class SocrataClient extends BaseMunicipalClient {
    private readonly api;
    private readonly appToken?;
    private readonly resetTime;
    private readonly datasetConfig;
    private readonly params;
    constructor(config: SocrataClientConfig, params: MunicipalSearchParams);
    /**
     * Execute a SoQL query against a dataset
     */
    private query;
    /**
     * Search for municipal projects
     */
    search(): Promise<MunicipalSearchResponse>;
    /**
     * Get a project by its URL
     */
    getByUrl(url: string): Promise<MunicipalProject | null>;
    /**
     * Extract project ID from a municipal-intel URL
     */
    private extractIdFromUrl;
    /**
     * Get a specific project by ID
     */
    getProject(id: string): Promise<MunicipalProject | null>;
    /**
     * Get available project types
     */
    getAvailableTypes(): Promise<string[]>;
    /**
     * Check if the data source is healthy
     */
    healthCheck(): Promise<HealthCheck>;
    /**
     * Build SoQL query from search parameters
     */
    private buildSoQLQuery;
    /**
     * Clean query parameters (remove undefined values)
     */
    private cleanParams;
    /**
     * Build ORDER BY clause
     */
    private buildOrderClause;
    /**
     * Get field mapping for this source (returns null if missing)
     */
    private getFieldMapping;
    private getIdField;
    private getTypeField;
    private getDateField;
    private getValueField;
    private getStatusField;
    private getAddressField;
    /**
     * Normalize raw data to MunicipalProject using dataset-specific description
     */
    private normalizeProject;
    /**
     * Generate a project URL for accessing full details
     */
    private generateProjectUrl;
    /**
     * Validate that date parameter is a proper Date object
     */
    private validateDateParameter;
}
