import { FeedResponse, ItemResponse } from './response.js';
import { RetryPolicy } from './retry.js';
import { SessionContainer } from './session.js';
import { Collection, ConnectionInfo, ConsistencyLevel, Database, Document, IndexingDirective, IndexingPolicy, OfferType, PartitionKeyDefinition, Resource } from './types.js';
export type CosmosClientConfig = (ConnectionInfo & CosmosClientConfigBase) | ({
    connectionString: string;
} & CosmosClientConfigBase);
interface CosmosClientConfigBase {
    retryPolicy?: RetryPolicy;
    consistencyLevel?: ConsistencyLevel;
    dbId?: string;
    collId?: string;
    sessions?: SessionContainer;
    enableCrossPartitionQueries?: boolean;
    fetch?: typeof fetch;
}
export declare class CosmosClient {
    private readonly endpoint;
    private readonly signer;
    private readonly retryPolicy;
    private readonly consistencyLevel;
    private readonly dbId;
    private readonly collId;
    private readonly enableCrossPartitionQueries;
    private readonly systemFetch;
    readonly sessions: SessionContainer;
    requestCharges: number;
    retries: {
        count: number;
        delayMs: number;
    };
    constructor(config: CosmosClientConfig);
    getDatabases(args?: GetDatabasesArgs): Promise<FeedResponse<Database>>;
    getDatabase(args?: GetDatabaseArgs): Promise<ItemResponse<Database>>;
    getCollections(args?: GetCollectionsArgs): Promise<FeedResponse<Collection>>;
    getCollection(args?: GetCollectionArgs): Promise<ItemResponse<Collection>>;
    createCollection(args: CreateCollectionArgs): Promise<ItemResponse<Collection>>;
    replaceCollection(args: ReplaceCollectionArgs): Promise<ItemResponse<Collection>>;
    deleteCollection(args?: DeleteCollectionArgs): Promise<Response>;
    getDocuments<T extends Resource>(args: GetDocumentsArgs): Promise<FeedResponse<T & Document>>;
    getDocument<T extends Resource>(args: GetDocumentArgs): Promise<ItemResponse<T & Document>>;
    createDocument<T extends Resource>(args: CreateDocumentArgs): Promise<ItemResponse<T & Document>>;
    replaceDocument<T extends Resource>(args: ReplaceDocumentArgs): Promise<ItemResponse<T & Document>>;
    deleteDocument(args: DeleteDocumentArgs): Promise<Response>;
    queryDocuments<T>(args: QueryDocumentsArgs): Promise<FeedResponse<T>>;
    private getNext;
    private fetchWithRetry;
    private fetch;
    private setHeaders;
}
export type DocumentInit = BufferSource | ReadableStream | string | Resource;
interface CommonArgs {
    activityId?: string;
    consistencyLevel?: ConsistencyLevel;
}
interface CommonGetArgs extends CommonArgs {
    ifNoneMatch?: string;
    ifModifiedSince?: Date;
}
interface CommonGetListArgs extends CommonGetArgs {
    maxItems?: number;
    continuation?: string;
}
export type GetDatabasesArgs = CommonGetListArgs;
export interface GetDatabaseArgs extends CommonGetArgs {
    dbId?: string;
}
export interface GetCollectionsArgs extends CommonGetListArgs {
    dbId?: string;
}
export interface GetCollectionArgs extends CommonGetArgs {
    dbId?: string;
    collId?: string;
}
export interface CreateCollectionArgs extends CommonArgs {
    dbId?: string;
    collId?: string;
    indexingPolicy?: IndexingPolicy;
    partitionKey: PartitionKeyDefinition;
    offerThroughput?: number;
    offerType?: OfferType;
}
export interface ReplaceCollectionArgs extends CommonArgs {
    dbId?: string;
    collId?: string;
    indexingPolicy: IndexingPolicy;
    partitionKey: PartitionKeyDefinition;
    ifMatch?: string;
}
export interface DeleteCollectionArgs extends CommonArgs {
    dbId?: string;
    collId?: string;
    ifMatch?: string;
}
export interface GetDocumentsArgs extends CommonGetListArgs {
    dbId?: string;
    collId?: string;
    partitionKey?: string;
}
export interface GetDocumentArgs extends CommonGetArgs {
    dbId?: string;
    collId?: string;
    docId: string;
    partitionKey: string;
}
export interface QueryDocumentsArgs extends CommonGetListArgs {
    dbId?: string;
    collId?: string;
    query: string;
    parameters?: QueryParameter[];
    partitionKey?: string;
    enableCrossPartition?: boolean;
    populateMetrics?: boolean;
    enableScan?: boolean;
}
export interface QueryParameter {
    name: string;
    value: string | number | boolean | null | undefined;
}
export interface CreateDocumentArgs extends CommonArgs {
    dbId?: string;
    collId?: string;
    document: DocumentInit;
    partitionKey: string;
    isUpsert?: boolean;
    indexingDirective?: IndexingDirective;
}
export interface ReplaceDocumentArgs extends CommonArgs {
    dbId?: string;
    collId?: string;
    docId: string;
    document: DocumentInit;
    partitionKey: string;
    ifMatch?: string;
    indexingDirective?: IndexingDirective;
}
export interface DeleteDocumentArgs extends CommonArgs {
    dbId?: string;
    collId?: string;
    docId: string;
    partitionKey: string;
    ifMatch?: string;
}
export {};
