import type { CapgoCliInvokeOptions } from '../utils';
import { invokeCapgoCliApi } from '../utils';
export declare const MANIFEST_UPLOAD_PROTOCOL_VERSION: 1;
export type ManifestUploadAction = 'upload_if_doesnt_exist' | 'reuse' | 'upload';
export type ManifestUploadFileHashFormat = 'sha256_hex' | 'rsa_v2_base64' | 'rsa_v3_hex';
export interface ManifestUploadRequestEntry {
    id: number;
    file_name: string;
    compression: 'none' | 'brotli';
    file_hash: string;
    uploaded_bytes_sha256: string;
    uploaded_bytes_size: number;
}
export interface ManifestUploadRequest {
    protocol_version: typeof MANIFEST_UPLOAD_PROTOCOL_VERSION;
    version_id: number;
    delta_encryption: {
        enabled: boolean;
    };
    manifest_upload_auto_enabled: boolean;
    file_hash_format: ManifestUploadFileHashFormat;
    entries: ManifestUploadRequestEntry[];
}
interface ManifestUploadAuthorization {
    type: 'header';
    header_name: string;
    token_prefix: string;
    expires_at: number;
}
export interface ManifestUploadTarget {
    id: string;
    protocol: 'tus';
    upload_url: string;
    existence_check_url_prefix: string;
    authorization: ManifestUploadAuthorization;
}
interface ManifestUploadResponseEntry {
    id: number;
    action?: ManifestUploadAction;
    upload_target?: string;
    s3_path?: string;
    s3_path_suffix?: string;
    upload_token?: string;
    file_size_receipt?: string;
}
export interface ManifestUploadResponse {
    protocol_version: number;
    version_id: number;
    default_action: ManifestUploadAction;
    default_s3_path_prefix?: string;
    default_upload_target?: string;
    upload_targets: ManifestUploadTarget[];
    entries: ManifestUploadResponseEntry[];
}
export interface ResolvedManifestUploadEntry {
    request: ManifestUploadRequestEntry;
    action: ManifestUploadAction;
    s3Path: string;
    uploadTarget?: ManifestUploadTarget;
    uploadAuthorization?: {
        headerName: string;
        value: string;
    };
    fileSizeReceipt?: string;
}
export interface ResolvedManifestUpload {
    response: ManifestUploadResponse;
    entries: ResolvedManifestUploadEntry[];
}
export declare function manifestUploadFileHashFormat(encryptionEnabled: boolean, supportsHexChecksum: boolean): ManifestUploadFileHashFormat;
export declare function isManifestUploadAutoEnabled(userRequestedDelta: boolean, fullZipEnabled: boolean): boolean;
type ManifestUploadInvoke = typeof invokeCapgoCliApi;
export declare function resolveManifestUploadResponse(request: ManifestUploadRequest, input: unknown): ResolvedManifestUpload;
export declare function requestManifestUpload(apikey: string, request: ManifestUploadRequest, options?: Pick<CapgoCliInvokeOptions, 'supaHost' | 'supaAnon'>, invoke?: ManifestUploadInvoke): Promise<ResolvedManifestUpload>;
export {};
