import type { PreviewInfo } from 'alinea/backend/Previews';
import { type AuthResult } from 'alinea/cloud/AuthResult';
import type { Config } from './Config.js';
import type { LocalConnection, Revision, UploadResponse } from './Connection.js';
import type { Draft, DraftKey } from './Draft.js';
import type { CommitRequest } from './db/CommitRequest.js';
import type { Mutation } from './db/Mutation.js';
import type { EntryRecord } from './EntryRecord.js';
import type { AnyQueryResult, GraphQuery } from './Graph.js';
import { ReadonlyTree } from './source/Tree.js';
import type { User } from './User.js';
export type AuthenticateRequest = (request?: RequestInit) => RequestInit | undefined;
export interface ClientOptions {
    config: Config;
    url: string;
    applyAuth?: AuthenticateRequest;
    unauthorized?: () => void;
}
export declare class Client implements LocalConnection {
    #private;
    constructor(options: ClientOptions);
    get url(): string;
    authStatus(): Promise<AuthResult>;
    logout: () => Promise<void>;
    previewToken(request: PreviewInfo): Promise<string>;
    prepareUpload(file: string): Promise<UploadResponse>;
    user(): Promise<User | undefined>;
    resolve<Query extends GraphQuery>(query: Query): Promise<AnyQueryResult<Query>>;
    mutate(mutations: Array<Mutation>): Promise<{
        sha: string;
    }>;
    authenticate(applyAuth: AuthenticateRequest, unauthorized: () => void): Client;
    revisions(file: string): Promise<Array<Revision>>;
    revisionData(file: string, revisionId: string): Promise<EntryRecord | undefined>;
    getTreeIfDifferent(sha: string): Promise<ReadonlyTree | undefined>;
    getBlobs(shas: Array<string>): AsyncGenerator<[sha: string, blob: Uint8Array]>;
    write(request: CommitRequest): Promise<{
        sha: string;
    }>;
    getDraft(key: DraftKey): Promise<Draft | undefined>;
    storeDraft(draft: Draft): Promise<void>;
}
