import { FetchClient } from "./fetchClient.js";
/**
 * ClientOptions is used to configure the HTTPClient and provide the necessary
 * authentication information.
 *
 * @example
 * ```
 * const axiom = new Axiom({
 *     token: "my-token",
 *     orgId: "my-org-id",
 * })
 * ```
 *
 * @example
 * ```
 * // Using an edge domain for lower latency ingestion
 * const axiom = new Axiom({
 *     token: "my-token",
 *     edge: "eu-central-1.aws.edge.axiom.co",
 * })
 * ```
 *
 * @example
 * ```
 * // Using both url (for API operations) and edge (for ingest/query)
 * const axiom = new Axiom({
 *     token: "my-token",
 *     url: "https://api.eu.axiom.co",
 *     edge: "eu-central-1.aws.edge.axiom.co",
 * })
 * ```
 */
export interface ClientOptions {
    /**
     * an API or personal token to use for authentication, you can get one
     * from @{link: Axiom settings | https://app.axiom.co/api-tokens}.
     */
    token: string;
    /**
     * the ID of the organization to use, you can get this from Axiom settings page of your
     * organization. This is only needed if you are using a personal token.
     */
    orgId?: string;
    /**
     * URI of the Axiom API endpoint. Used for all API operations (datasets, users, etc.).
     * When edge options are set, this is used for non-ingest/query operations only.
     *
     * @example "https://api.eu.axiom.co"
     */
    url?: string;
    /**
     * The Axiom edge domain for ingestion and query operations.
     * Specify just the domain without scheme (https:// is added automatically).
     * When set, ingest and query operations are routed to this edge endpoint.
     * Can be used together with `url` - in that case, `url` handles API operations
     * while `edge` handles ingest/query.
     *
     * @example "eu-central-1.aws.edge.axiom.co"
     */
    edge?: string;
    /**
     * The Axiom edge URL for ingestion and query operations.
     * Specify the full URL with scheme.
     * Takes precedence over `edge` if both are set.
     * If the URL has a custom path, it is used as-is.
     * If the URL has no path, the edge path format is used.
     *
     * @example "https://eu-central-1.aws.edge.axiom.co"
     * @example "http://localhost:3400/ingest"
     */
    edgeUrl?: string;
    onError?: (error: Error) => void;
}
/**
 * Resolves the ingest endpoint URL based on the client options.
 *
 * Priority: edgeUrl > edge > url > default cloud endpoint
 *
 * Edge endpoints use: /v1/ingest/{dataset}
 * Legacy endpoints use: /v1/datasets/{dataset}/ingest
 *
 * @param options - The client options
 * @param dataset - The dataset name to ingest into
 * @returns The full URL to use for ingestion
 */
export declare function resolveIngestUrl(options: Pick<ClientOptions, 'url' | 'edge' | 'edgeUrl'>, dataset: string): string;
export default abstract class HTTPClient {
    protected readonly client: FetchClient;
    protected readonly clientOptions: ClientOptions;
    constructor({ orgId, token, url, edge, edgeUrl, onError }: ClientOptions);
}
//# sourceMappingURL=httpClient.d.ts.map