import { Response } from '@alinea/iso';
import { Revision } from 'alinea/backend/History';
import { Config, Connection, Draft, ResolveDefaults } from 'alinea/core';
import { SyncResponse } from './Connection.js';
import { EntryRecord } from './EntryRecord.js';
import { Mutation } from './Mutation.js';
type AuthenticateRequest = (request?: RequestInit) => RequestInit | undefined;
export interface ClientOptions {
    config: Config;
    url: string;
    applyAuth?: AuthenticateRequest;
    unauthorized?: () => void;
    resolveDefaults?: ResolveDefaults;
}
export declare class Client implements Connection {
    options: ClientOptions;
    constructor(options: ClientOptions);
    previewToken(): Promise<string>;
    prepareUpload(file: string): Promise<Connection.UploadResponse>;
    resolve(params: Connection.ResolveParams): Promise<unknown>;
    mutate(mutations: Array<Mutation>): Promise<{
        commitHash: string;
    }>;
    authenticate(applyAuth: AuthenticateRequest, unauthorized: () => void): Client;
    revisions(file: string): Promise<Array<Revision>>;
    revisionData(file: string, revisionId: string): Promise<EntryRecord>;
    syncRequired(contentHash: string): Promise<boolean>;
    sync(contentHashes: Array<string>): Promise<SyncResponse>;
    getDraft(entryId: string): Promise<Draft | undefined>;
    storeDraft(draft: Draft): Promise<void>;
    protected request(endpoint: string, init?: RequestInit): Promise<Response>;
    protected requestJson(endpoint: string, init?: RequestInit): Promise<globalThis.Response>;
}
export {};
