import type { Request } from 'express';
import type { S3ClientConfig } from '@aws-sdk/client-s3';
import { S3 } from '@aws-sdk/client-s3';
import type { Adapter as AdapterInterface, AuthResponse, Method, User } from 'nephele';
import Resource from './Resource.js';
export type AdapterConfig = {
    s3Config: S3ClientConfig;
    bucket: string;
    uploadQueueSize?: number;
    root?: string;
};
export default class Adapter implements AdapterInterface {
    s3: S3;
    bucket: string;
    uploadQueueSize: number;
    root: string;
    constructor({ s3Config, bucket, uploadQueueSize, root }: AdapterConfig);
    urlToRelativePath(url: URL, baseUrl: URL): string | null;
    relativePathToUrl(pathname: string, baseUrl: URL): URL;
    relativePathToKey(pathname: string): string;
    keyToRelativePath(key: string): string;
    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;
}
