type Authority = string;
type BasinName = string;
/**
 * S2 cloud environment to connect with.
 */
export declare enum S2Cloud {
    /** S2 running on AWS */
    Aws = "aws"
}
/**
 * Endpoint for connecting to an S2 basin.
 */
export declare enum BasinEndpointKind {
    ParentZone = "ParentZone",
    Direct = "Direct"
}
export type BasinEndpoint = {
    kind: BasinEndpointKind.ParentZone;
    authority: Authority;
} | {
    kind: BasinEndpointKind.Direct;
    authority: Authority;
};
/**
 * Endpoints for the S2 environment.
 *
 * You can find the S2 endpoints in our [documentation](https://s2.dev/docs/interface/endpoints)
 */
export declare class S2Endpoints {
    /** Used by `AccountService` requests */
    account: Authority;
    /** Used by `BasinService` and `StreamService` requests */
    basin: BasinEndpoint;
    constructor(account: Authority, basin: BasinEndpoint);
    /**
     * Get S2 endpoints for the specified cloud.
     */
    static forCloud(cloud: S2Cloud): S2Endpoints;
    /**
     * Get S2 endpoints for the specified cell.
     */
    static forCell(cloud: S2Cloud, cellId: string): S2Endpoints;
    /**
     * Get S2 endpoints from environment variables.
     *
     * The following environment variables are used:
     * - `S2_CLOUD`: Valid S2 cloud name. Defaults to AWS.
     * - `S2_ACCOUNT_ENDPOINT`: Overrides the account endpoint.
     * - `S2_BASIN_ENDPOINT`: Overrides the basin endpoint. The prefix `"{basin}."` indicates the
     *   basin endpoint is `ParentZone` else `Direct`.
     */
    static fromEnv(): S2Endpoints;
}
/**
 * Client kind for different S2 services
 */
export type ClientKind = {
    kind: 'Account';
} | {
    kind: 'Basin';
    basin: BasinName;
};
export declare const ClientKind: {
    toAuthority(kind: ClientKind, endpoints: S2Endpoints): Authority;
};
export {};
//# sourceMappingURL=endpoints.d.ts.map