import { FFetchOptions } from '@fetchkit/ffetch';
import { InternalLogger, Logger } from '../logger.js';
import { FMODataLayer } from '../services.js';
import { Auth, ExecutionContext, Result } from '../types.js';
import { Database } from './database.js';
import { DatabaseNameNormalizationMode } from './database-name.js';
export declare class FMServerConnection implements ExecutionContext {
    private readonly fetchClient;
    private readonly serverUrl;
    private readonly auth;
    private readonly normalizeDatabaseName;
    private useEntityIds;
    private includeSpecialColumns;
    private readonly logger;
    private readonly clarisIdAuthManager;
    private hasWarnedAboutOttoDatabaseNormalization;
    /** @internal Stored so credential-override flows can inherit non-auth config. */
    readonly _fetchClientOptions: FFetchOptions | undefined;
    constructor(config: {
        serverUrl: string;
        auth: Auth;
        fetchClientOptions?: FFetchOptions;
        logger?: Logger;
    });
    /**
     * @internal
     * Sets whether to use FileMaker entity IDs (FMFID/FMTID) in requests
     */
    _setUseEntityIds(useEntityIds: boolean): void;
    /**
     * @internal
     * Gets whether to use FileMaker entity IDs (FMFID/FMTID) in requests
     */
    _getUseEntityIds(): boolean;
    /**
     * @internal
     * Sets whether to include special columns (ROWID and ROWMODID) in requests
     */
    _setIncludeSpecialColumns(includeSpecialColumns: boolean): void;
    /**
     * @internal
     * Gets whether to include special columns (ROWID and ROWMODID) in requests
     */
    _getIncludeSpecialColumns(): boolean;
    /**
     * @internal
     * Gets the base URL for OData requests
     */
    _getBaseUrl(): string;
    private _getAuthorizationHeader;
    /**
     * @internal
     * Gets the logger instance
     */
    _getLogger(): InternalLogger;
    /**
     * @internal
     * Returns the Effect Layer for this connection, composing HttpClient, ODataConfig, and ODataLogger services.
     */
    _getLayer(): FMODataLayer;
    /**
     * @internal
     * Classifies a caught error into a typed FMODataErrorType.
     */
    private _classifyError;
    /**
     * @internal
     * Parses an HTTP error response into a typed FMODataErrorType.
     */
    private _parseHttpError;
    /**
     * @internal
     * Checks parsed JSON data for embedded OData errors.
     */
    private _checkEmbeddedODataError;
    /**
     * @internal
     * Builds the Effect pipeline for an HTTP request.
     * Each step in the pipeline is a discrete Effect, enabling composable error handling.
     */
    private _makeRequestEffect;
    /**
     * @internal
     */
    _makeRequest<T>(url: string, options?: RequestInit & FFetchOptions & {
        normalizeDatabaseName?: boolean;
        databaseNameNormalizationMode?: DatabaseNameNormalizationMode;
        useEntityIds?: boolean;
        includeSpecialColumns?: boolean;
    }): Promise<Result<T>>;
    database<IncludeSpecialColumns extends boolean = false>(name: string, config?: {
        normalizeDatabaseName?: boolean;
        useEntityIds?: boolean;
        includeSpecialColumns?: IncludeSpecialColumns;
    }): Database<IncludeSpecialColumns>;
    /**
     * Lists all available databases from the FileMaker OData service.
     * @returns Promise resolving to an array of database names
     */
    listDatabaseNames(): Promise<string[]>;
}
