import { type NxtError } from './error.ts';
export type FileRef = {
    file?: string;
    offset?: number;
    start?: number;
    end?: number;
};
export declare const assertFileRef: (input: unknown) => FileRef;
export type FileRefs = Array<FileRef>;
export declare const assertFileRefs: (input: unknown) => FileRefs;
export interface File {
    id: string & import('typia').tags.Pattern<'^[0-9A-Za-z~][0-9A-Za-z~._: -]*$'>;
    size: (number & import('typia').tags.Minimum<0> & import('typia').tags.Type<'uint64'>) | null;
    seekable: boolean;
    deleted: boolean;
    refs: FileRefs;
    tags: string[];
    resumable: string;
    mimeType: string;
    encoding: string;
    hash: string & import('typia').tags.Pattern<'^([A-Fa-f0-9]{32})?$'>;
    btime: number & import('typia').tags.Minimum<0> & import('typia').tags.Type<'uint64'>;
    completed: boolean;
    error: NxtError[] | NxtError | null;
}
export declare const assertFile: (input: unknown) => File;
export interface FileStats extends File {
    position: (number & import('typia').tags.Minimum<0> & import('typia').tags.Type<'uint64'>) | null;
    uploading: boolean | null;
    zones: string[];
    replicas: string[];
    locations: string[];
    ranges: Array<[
        start: number & import('typia').tags.Minimum<0>,
        end: number & import('typia').tags.Minimum<0>
    ]>;
    progress?: number & import('typia').tags.Minimum<0> & import('typia').tags.Maximum<1>;
    speed?: number & import('typia').tags.Minimum<0>;
    complete: boolean;
}
export declare const assertFileStats: (input: unknown) => FileStats;
export declare const stringifyFileStats: (input: FileStats) => string;
