Files
smartexpose/ts/classes.smartexpose.ts
T

65 lines
1.9 KiB
TypeScript
Raw Normal View History

2024-04-22 13:13:00 +02:00
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;
2024-04-24 18:14:57 +02:00
webdav?: {
webdavCredentials: plugins.smartwebdav.IWebdavClientOptions;
webdavSubPath: string;
};
2024-04-24 18:14:57 +02:00
}
2024-04-22 13:13:00 +02:00
2024-04-24 18:14:57 +02:00
export class SmartExpose {
2024-04-22 13:13:00 +02:00
// INSTANCE
public taskmanager!: plugins.taskbuffer.TaskManager;
public provider!: ExposeProvider;
2024-04-22 13:13:00 +02:00
public options: ISmartExposeOptions;
2024-04-24 18:14:57 +02:00
constructor(optionsArg: ISmartExposeOptions) {
2024-04-22 13:13:00 +02:00
this.options = optionsArg;
}
2024-04-24 18:02:21 +02:00
private getProvider(): ExposeProvider {
if (!this.provider) {
throw new Error('No expose provider has been configured.');
}
return this.provider;
}
2024-04-24 18:02:21 +02:00
public async start() {
this.taskmanager = new plugins.taskbuffer.TaskManager();
2024-04-24 18:14:57 +02:00
if (this.options.webdav) {
this.provider = new WebDavExposeProvider(this, {
webdavCredentials: this.options.webdav.webdavCredentials,
webdavSubPath: this.options.webdav.webdavSubPath,
});
}
await this.getProvider().start();
2024-04-24 18:02:21 +02:00
this.taskmanager.start();
}
public async stop() {
await this.getProvider().stop();
2024-04-24 18:02:21 +02:00
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,
});
2024-04-24 18:02:21 +02:00
}
2024-04-26 13:51:45 +02:00
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,
});
2024-04-26 13:51:45 +02:00
}
2024-04-22 13:13:00 +02:00
}