import { AgentDispatchClient } from './AgentDispatchClient.js';
import { ConnectorClient } from './ConnectorClient.js';
import { EgressClient } from './EgressClient.js';
import { IngressClient } from './IngressClient.js';
import { RoomServiceClient } from './RoomServiceClient.js';
import { SipClient } from './SipClient.js';
import '@livekit/protocol';
import './ClientOptions.js';
import './ServiceBase.js';
import './grants.js';
import 'jose';

/** Server host and non-auth options, shared by both authentication modes. */
interface LiveKitAPICommonOptions {
    /** Server host, including protocol. Falls back to the `LIVEKIT_URL` env var. */
    host?: string;
    /** Optional timeout, in seconds, for all server requests. */
    requestTimeout?: number;
    /**
     * Whether to fail over to alternative regions on retryable errors (LiveKit
     * Cloud hosts only). Defaults to true; set to false to disable.
     */
    failover?: boolean;
}
/** API key and secret authentication (recommended for backend use). */
interface ApiKeyAuth {
    /** API key. Falls back to the `LIVEKIT_API_KEY` env var. */
    apiKey?: string;
    /** API secret. Falls back to the `LIVEKIT_API_SECRET` env var. */
    secret?: string;
    token?: never;
}
/** Pre-signed token authentication (client-side use; no secret required). */
interface TokenAuth {
    /** Pre-signed token, sent verbatim. Falls back to the `LIVEKIT_TOKEN` env var. */
    token: string;
    apiKey?: never;
    secret?: never;
}
/**
 * Options for {@link LiveKitAPI}. Provide either an `apiKey` and `secret` or a
 * pre-signed `token` — the two modes are mutually exclusive. Any omitted value
 * falls back to its environment variable (`LIVEKIT_URL`, `LIVEKIT_API_KEY`,
 * `LIVEKIT_API_SECRET`, `LIVEKIT_TOKEN`).
 */
type LiveKitAPIOptions = LiveKitAPICommonOptions & (ApiKeyAuth | TokenAuth);
/**
 * A single entry point to every LiveKit server API, exposing each service
 * through a property, e.g. `api.room.createRoom(...)`.
 *
 * @example
 * ```ts
 * const api = new LiveKitAPI({ apiKey, secret }); // or new LiveKitAPI() to read from env
 * await api.room.createRoom({ name: 'my-room' });
 * ```
 */
declare class LiveKitAPI {
    private readonly _room;
    private readonly _egress;
    private readonly _ingress;
    private readonly _sip;
    private readonly _agentDispatch;
    private readonly _connector;
    /**
     * @param options - server host, credentials, and client options; each value
     *   falls back to its environment variable when omitted.
     */
    constructor(options?: LiveKitAPIOptions);
    get room(): RoomServiceClient;
    get egress(): EgressClient;
    get ingress(): IngressClient;
    get sip(): SipClient;
    get agentDispatch(): AgentDispatchClient;
    get connector(): ConnectorClient;
}

export { LiveKitAPI, type LiveKitAPIOptions };
