feat(core): add provider defaults, strengthen WebDAV validation, and modernize tests and package metadata
This commit is contained in:
+27
-12
@@ -3,25 +3,32 @@ import { WebDavExposeProvider } from './classes.exposeprovider.webdav.js';
|
||||
import * as plugins from './plugins.js';
|
||||
|
||||
export interface ISmartExposeOptions {
|
||||
deleteAfterMillis?: number,
|
||||
privateUrl?: boolean,
|
||||
exposedBaseUrl: string,
|
||||
deleteAfterMillis?: number;
|
||||
privateUrl?: boolean;
|
||||
exposedBaseUrl: string;
|
||||
webdav?: {
|
||||
webdavCredentials: plugins.smartwebdav.IWebdavClientOptions,
|
||||
webdavSubPath: string,
|
||||
}
|
||||
webdavCredentials: plugins.smartwebdav.IWebdavClientOptions;
|
||||
webdavSubPath: string;
|
||||
};
|
||||
}
|
||||
|
||||
export class SmartExpose {
|
||||
// INSTANCE
|
||||
public taskmanager: plugins.taskbuffer.TaskManager;
|
||||
public provider: ExposeProvider;
|
||||
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) {
|
||||
@@ -30,20 +37,28 @@ export class SmartExpose {
|
||||
webdavSubPath: this.options.webdav.webdavSubPath,
|
||||
});
|
||||
}
|
||||
await this.provider.start();
|
||||
await this.getProvider().start();
|
||||
this.taskmanager.start();
|
||||
}
|
||||
|
||||
public async stop() {
|
||||
await this.provider.stop();
|
||||
await this.getProvider().stop();
|
||||
this.taskmanager.stop();
|
||||
}
|
||||
|
||||
public async exposeFile(optionsArg: Parameters<ExposeProvider['exposeFile']>[0]) {
|
||||
return this.provider.exposeFile(optionsArg);
|
||||
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.provider.exposeFileArray(optionsArg);
|
||||
return this.getProvider().exposeFileArray({
|
||||
...optionsArg,
|
||||
deleteAfterMillis: optionsArg.deleteAfterMillis ?? this.options.deleteAfterMillis,
|
||||
privateUrl: optionsArg.privateUrl ?? this.options.privateUrl,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user