import { Readable } from 'node:stream';
import type { Resource as ResourceInterface, User } from 'nephele';
import type Adapter from './Adapter.js';
import Properties from './Properties.js';
import Lock from './Lock.js';
export type MetaStorage = {
    props?: {
        [name: string]: any;
    };
    locks?: {
        [token: string]: {
            username: string;
            date: number;
            timeout: number;
            scope: 'exclusive' | 'shared';
            depth: '0' | 'infinity';
            provisional: boolean;
            owner: any;
        };
    };
};
export default class Resource implements ResourceInterface {
    adapter: Adapter;
    baseUrl: URL;
    path: string;
    key: string;
    private meta;
    private createCollection;
    private collection;
    private inStorage;
    private etag;
    private size;
    private contentType;
    private lastModified;
    private metaReadyPromise;
    constructor({ adapter, baseUrl, path: pathname, exists, collection, }: {
        adapter: Adapter;
        baseUrl: URL;
        path: string;
        exists?: boolean;
        collection?: boolean;
    });
    getLocks(): Promise<Lock[]>;
    getLocksByUser(user: User): Promise<Lock[]>;
    createLockForUser(user: User): Promise<Lock>;
    getProperties(): Promise<Properties>;
    getStream(range?: {
        start: number;
        end: number;
    }): Promise<Readable>;
    setStream(input: Readable, _user: User, mediaType?: string): Promise<void>;
    create(_user: User): Promise<void>;
    delete(_user: User): Promise<void>;
    copy(destination: URL, baseUrl: URL, user: User): Promise<void>;
    move(destination: URL, baseUrl: URL, user: User): Promise<void>;
    getLength(): Promise<number>;
    getEtag(): Promise<string>;
    getMediaType(): Promise<string | null>;
    getLastModified(): Promise<Date | null>;
    getCanonicalName(): Promise<string>;
    getCanonicalPath(): Promise<string>;
    getCanonicalUrl(): Promise<URL>;
    listKeys(prefix?: string, maxKeys?: number): AsyncGenerator<{
        key: string;
        size: number;
        type: string;
    }, void, unknown>;
    isCollection(): Promise<boolean>;
    isEmpty(): Promise<boolean>;
    isRoot(key?: string): boolean;
    getInternalMembers(_user: User): Promise<Resource[]>;
    exists(key?: string): Promise<boolean>;
    existsInStorage(key?: string): Promise<boolean>;
    resourceTreeExists(key?: string): Promise<boolean>;
    createEmptyDir(key: string): Promise<void>;
    deleteEmptyDir(key: string): Promise<void>;
    getMetadata(): Promise<MetaStorage>;
    translateMetadata(meta: MetaStorage): {
        [k: string]: string;
    };
    saveMetadata(meta: MetaStorage): Promise<void>;
}
