import { Readable } from 'node:stream';
import type { ShareRecord } from './share-types.js';
export interface ZipPlanFile {
    /** Path within the archive (POSIX, no leading /, may contain subdirs). */
    zipPath: string;
    /** Absolute filesystem path of the source file. */
    absolutePath: string;
    /** Modification time used for the entry header. */
    mtimeMs: number;
    /** File size in bytes. */
    size: number;
}
export interface ZipBuildOptions {
    files: ZipPlanFile[];
    /** Whether to deflate a given entry. Defaults to a sensible heuristic. */
    compress?: (f: ZipPlanFile) => boolean;
}
/**
 * Build a streaming ZIP archive as a Node Readable. Files that fail to read
 * are skipped and listed in a synthetic `_xopc_errors.txt` trailer entry.
 */
export declare function createZipStream(opts: ZipBuildOptions): Readable;
export interface PlanDirectoryOpts {
    /** Sub-path inside the share to start from ('' for whole share). */
    rootRelativePath: string;
    /** Maximum entries returned. */
    maxFileCount: number;
    /** Maximum aggregate file size. */
    maxFolderSize: number;
    /** Whether symlinks are followed (and re-validated against workspace). */
    followSymlinks: boolean;
    /** Walk depth cap. */
    maxDepth: number;
}
export declare function planDirectoryFiles(record: ShareRecord, opts: PlanDirectoryOpts): Promise<ZipPlanFile[]>;
