Compare commits

..

5 Commits

Author SHA1 Message Date
157f97cbd7 update description 2024-05-29 14:13:03 +02:00
c35355a846 1.0.6 2024-04-26 13:51:46 +02:00
d82d9e4cfa fix(core): update 2024-04-26 13:51:45 +02:00
43b5dac24a 1.0.5 2024-04-24 18:24:19 +02:00
c391c180fd fix(core): update 2024-04-24 18:24:19 +02:00
6 changed files with 63 additions and 23 deletions

View File

@ -1,6 +1,6 @@
{
"name": "@push.rocks/smartexpose",
"version": "1.0.4",
"version": "1.0.6",
"private": false,
"description": "a package to expose things to the internet",
"main": "dist_ts/index.js",
@ -36,12 +36,12 @@
},
"repository": {
"type": "git",
"url": "git+https://code.foss.global/push.rocks/smartexpose.git"
"url": "https://code.foss.global/push.rocks/smartexpose.git"
},
"bugs": {
"url": "https://code.foss.global/push.rocks/smartexpose/issues"
},
"homepage": "https://code.foss.global/push.rocks/smartexpose#readme",
"homepage": "https://code.foss.global/push.rocks/smartexpose",
"browserslist": [
"last 1 chrome versions"
],

1
readme.hints.md Normal file
View File

@ -0,0 +1 @@

View File

@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@push.rocks/smartexpose',
version: '1.0.4',
version: '1.0.6',
description: 'a package to expose things to the internet'
}

View File

@ -28,6 +28,16 @@ export abstract class ExposeProvider {
status: 'created' | 'updated';
}>;
public abstract exposeFileArray(optionsArg: {
smartFiles: plugins.smartfile.SmartFile[],
deleteAfterMillis?: number,
privateUrl?: boolean,
}): Promise<{
url: string;
id: string;
status: 'created' | 'updated';
}[]>;
public abstract start(): Promise<void>;
public abstract stop(): Promise<void>;

View File

@ -39,39 +39,50 @@ export class WebDavExposeProvider extends ExposeProvider {
this.webdavClient = new plugins.smartwebdav.WebdavClient(this.options.webdavCredentials);
await this.ensureBaseDir();
await this.houseKeeping();
this.smartExposeRef.taskmanager.addAndScheduleTask(new plugins.taskbuffer.Task({
this.smartExposeRef.taskmanager.addAndScheduleTask(
new plugins.taskbuffer.Task({
name: 'webdavHousekeeping',
taskFunction: async () => {
await this.houseKeeping();
},
}), '0 * * * * *')
}),
'0 * * * * *'
);
}
public async stop(): Promise<void> {
// Nothing to do here
}
public async exposeFile(optionsArg: {
smartFile: plugins.smartfile.SmartFile;
deleteAfterMillis?: number;
privateUrl?: boolean;
}): Promise<{ url: string; id: string; status: 'created' | 'updated' }> {
public async exposeFile(
optionsArg: Parameters<ExposeProvider['exposeFile']>[0]
): Promise<{ url: string; id: string; status: 'created' | 'updated' }> {
await this.ensureBaseDir();
const fileId = plugins.smartunique.shortId(30);
console.log(`Expsing file under id: ${fileId}. (${
plugins.smartformat.prettyBytes(optionsArg.smartFile.contents.length)
})`);
console.log(
`Expsing file under id: ${fileId}. (${plugins.smartformat.prettyBytes(
optionsArg.smartFile.contents.length
)})`
);
const webdavFilePath = await this.getFilePathById(fileId);
const fileToUpload = await plugins.smartfile.SmartFile.fromBuffer(webdavFilePath, optionsArg.smartFile.contents);
const fileToUpload = await plugins.smartfile.SmartFile.fromBuffer(
webdavFilePath,
optionsArg.smartFile.contents
);
await this.webdavClient.uploadSmartFileArray([fileToUpload]);
console.log(`checking file presence: ${webdavFilePath}`);
const existsOnWebdav = await this.webdavClient.wdClient.exists(webdavFilePath);
const publicUrl = plugins.smartpath.join(this.smartExposeRef.options.exposedBaseUrl, webdavFilePath);
console.log(`cehcking for file at ${publicUrl}`)
const publicUrl = plugins.smartpath.join(
this.smartExposeRef.options.exposedBaseUrl,
webdavFilePath
);
console.log(`cehcking for file at ${publicUrl}`);
const response = await plugins.smartrequest.getBinary(publicUrl);
plugins.smartexpect.expect(response.body).toEqual(fileToUpload.contents);
if (optionsArg.deleteAfterMillis) {
console.log(`Scheduling deletion of file with id: ${fileId} in ${optionsArg.deleteAfterMillis}ms...`);
console.log(
`Scheduling deletion of file with id: ${fileId} in ${optionsArg.deleteAfterMillis}ms...`
);
plugins.smartdelay.delayFor(optionsArg.deleteAfterMillis).then(() => {
console.log(`Deleting file with id: ${fileId}...`);
this.deleteFileById(fileId);
@ -85,6 +96,20 @@ export class WebDavExposeProvider extends ExposeProvider {
};
}
public async exposeFileArray(optionsArg: Parameters<ExposeProvider['exposeFileArray']>[0]) {
const returnArray = [];
for (const smartFile of optionsArg.smartFiles) {
returnArray.push(
await this.exposeFile({
smartFile,
deleteAfterMillis: optionsArg.deleteAfterMillis,
privateUrl: optionsArg.privateUrl,
})
);
}
return returnArray;
}
public async wipeAll(): Promise<{ id: string; status: 'deleted' | 'failed' | 'notfound' }[]> {
const directoryContents = await this.webdavClient.listDirectory(this.options.webdavSubPath);
await this.webdavClient.ensureEmptyDirectory(this.options.webdavSubPath);

View File

@ -42,4 +42,8 @@ export class SmartExpose {
public async exposeFile(optionsArg: Parameters<ExposeProvider['exposeFile']>[0]) {
return this.provider.exposeFile(optionsArg);
}
public async exposeFileArray(optionsArg: Parameters<ExposeProvider['exposeFileArray']>[0]) {
return this.provider.exposeFileArray(optionsArg);
}
}