import fsp from 'node:fs/promises';
import type { Request } from 'express';
import type { Adapter as AdapterInterface, AuthResponse, Method, User } from 'nephele';
import Resource from './Resource.js';
export type AdapterConfig = {
    root: string;
    followLinks?: boolean;
    properties?: 'meta-files' | 'disallow' | 'emulate';
    locks?: 'meta-files' | 'disallow' | 'emulate';
    contentEtagMaxBytes?: number;
};
export default class Adapter implements AdapterInterface {
    root: string;
    followLinks: boolean;
    properties: 'meta-files' | 'disallow' | 'emulate';
    locks: 'meta-files' | 'disallow' | 'emulate';
    stat: typeof fsp.stat;
    contentEtagMaxBytes: number;
    constructor({ root, followLinks, properties, locks, contentEtagMaxBytes, }: AdapterConfig);
    urlToRelativePath(url: URL, baseUrl: URL): string | null;
    urlToAbsolutePath(url: URL, baseUrl: URL): string | null;
    getUid(user: User): Promise<number>;
    getGid(user: User): Promise<number>;
    getGids(user: User): Promise<number[]>;
    getComplianceClasses(_url: URL, _request: Request, _response: AuthResponse): Promise<string[]>;
    getAllowedMethods(_url: URL, _request: Request, _response: AuthResponse): Promise<never[]>;
    getOptionsResponseCacheControl(_url: URL, _request: Request, _response: AuthResponse): Promise<string>;
    isAuthorized(url: URL, method: string, baseUrl: URL, user: User): Promise<boolean>;
    getResource(url: URL, baseUrl: URL): Promise<Resource>;
    newResource(url: URL, baseUrl: URL): Promise<Resource>;
    newCollection(url: URL, baseUrl: URL): Promise<Resource>;
    getMethod(method: string): typeof Method;
}
