import type { ExposeProvider } from './classes.exposeprovider.js'; import { WebDavExposeProvider } from './classes.exposeprovider.webdav.js'; import * as plugins from './plugins.js'; export interface ISmartExposeOptions { deleteAfterMillis?: number; privateUrl?: boolean; exposedBaseUrl: string; webdav?: { webdavCredentials: plugins.smartwebdav.IWebdavClientOptions; webdavSubPath: string; }; } export class SmartExpose { // INSTANCE public taskmanager!: plugins.taskbuffer.TaskManager; public provider!: ExposeProvider; public options: ISmartExposeOptions; constructor(optionsArg: ISmartExposeOptions) { this.options = optionsArg; } private getProvider(): ExposeProvider { if (!this.provider) { throw new Error('No expose provider has been configured.'); } return this.provider; } public async start() { this.taskmanager = new plugins.taskbuffer.TaskManager(); if (this.options.webdav) { this.provider = new WebDavExposeProvider(this, { webdavCredentials: this.options.webdav.webdavCredentials, webdavSubPath: this.options.webdav.webdavSubPath, }); } await this.getProvider().start(); this.taskmanager.start(); } public async stop() { await this.getProvider().stop(); this.taskmanager.stop(); } public async exposeFile(optionsArg: Parameters[0]) { return this.getProvider().exposeFile({ ...optionsArg, deleteAfterMillis: optionsArg.deleteAfterMillis ?? this.options.deleteAfterMillis, privateUrl: optionsArg.privateUrl ?? this.options.privateUrl, }); } public async exposeFileArray(optionsArg: Parameters[0]) { return this.getProvider().exposeFileArray({ ...optionsArg, deleteAfterMillis: optionsArg.deleteAfterMillis ?? this.options.deleteAfterMillis, privateUrl: optionsArg.privateUrl ?? this.options.privateUrl, }); } }