import FilesService from "./FilesService.js";
import type { AssetQuery, AssetResult, ProcessedImage } from '../types/index.js';
declare class AssetsService extends FilesService {
    private assetTempDir;
    private itemsService;
    private systemItemsService;
    constructor(params?: {
        accountability?: any;
    });
    getAsset(id: string | number, query: AssetQuery, bypassPermissions?: boolean): Promise<AssetResult>;
    /**
     * Get file buffer from storage (works for both LOCAL and S3)
     */
    private getFileBuffer;
    /**
     * Generate a filename for processed/resized images
     * Format: {originalName}_processed_{hash}.jpg
     */
    getProcessedFilename(originalFilename: string, query: AssetQuery): string;
    /**
     * Try to get a processed image from storage
     * Returns null if not found
     */
    private getProcessedFromStorage;
    /**
     * Save processed image to storage
     */
    private saveProcessedToStorage;
    /**
     * Process image from buffer instead of file path.
     *
     * DoS hardening (A13): output width/height are clamped to a max, the decoder is
     * given a pixel limit (decompression-bomb defense), quality is clamped to 1–100,
     * and fit/format are validated against allowlists. Caps are configurable:
     *  - ASSET_MAX_DIMENSION  (default 5000)  — max output width/height in px
     *  - ASSET_MAX_INPUT_PIXELS (default 100_000_000 = 100MP) — sharp limitInputPixels
     */
    processImageBuffer(inputBuffer: Buffer, { width, height, fit, quality, withoutEnlargement, format }: AssetQuery): Promise<ProcessedImage>;
    /**
     * Delete processed/resized versions of an image when the original is deleted.
     * Overrides the no-op in FilesService.
     */
    protected deleteProcessedVersions(file: any): Promise<void>;
}
export default AssetsService;
//# sourceMappingURL=AssetsService.d.ts.map