import { Context, Service } from 'koishi'; import { Config } from '..'; import { TempFileInfo, TempFileInfoWithData } from '../types'; export declare class ChatLunaStorageService extends Service { config: Config; private lruHead; private lruTail; private lruMap; private backendPath; private storageBackend; constructor(ctx: Context, config: Config); private getStorageConfig; private initStorageBackend; private initializeLRU; private addToLRU; private removeFromLRU; private getLRUVictim; private cleanupByStorageSize; private cleanupByFileCount; private downloadFile; private downloadFileStream; private removeFile; private deleteFileFromBackend; private setupAutoDelete; createTempFile(buffer: Buffer, filename: string, expireHours?: number, mimeType?: string): Promise>; createTempFileFromStream(stream: NodeJS.ReadableStream, filename: string, meta?: { expireHours?: number; mimeType?: string; size?: number; }): Promise>; getTempFile(id: string): Promise | null>; /** * Get a temp file's metadata and a readable stream for its content. * Use this for serving files over HTTP to avoid loading entire files into memory. */ getTempFileStream(id: string): Promise<(TempFileInfo & { stream: NodeJS.ReadableStream; url: string; }) | null>; deleteTempFile(id: string): Promise; } declare module 'koishi' { interface Context { chatluna_storage: ChatLunaStorageService; } interface Tables { chatluna_storage_temp: TempFileInfo; } }