feat(core): add provider defaults, strengthen WebDAV validation, and modernize tests and package metadata

This commit is contained in:
2026-05-01 22:31:47 +00:00
parent 157f97cbd7
commit 623788ae25
14 changed files with 8148 additions and 4210 deletions
+27 -12
View File
@@ -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,
});
}
}