65 lines
1.9 KiB
TypeScript
65 lines
1.9 KiB
TypeScript
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<ExposeProvider['exposeFile']>[0]) {
|
|
return this.getProvider().exposeFile({
|
|
...optionsArg,
|
|
deleteAfterMillis: optionsArg.deleteAfterMillis ?? this.options.deleteAfterMillis,
|
|
privateUrl: optionsArg.privateUrl ?? this.options.privateUrl,
|
|
});
|
|
}
|
|
|
|
public async exposeFileArray(optionsArg: Parameters<ExposeProvider['exposeFileArray']>[0]) {
|
|
return this.getProvider().exposeFileArray({
|
|
...optionsArg,
|
|
deleteAfterMillis: optionsArg.deleteAfterMillis ?? this.options.deleteAfterMillis,
|
|
privateUrl: optionsArg.privateUrl ?? this.options.privateUrl,
|
|
});
|
|
}
|
|
}
|