Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
157f97cbd7 | |||
c35355a846 | |||
d82d9e4cfa | |||
43b5dac24a | |||
c391c180fd |
@ -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
1
readme.hints.md
Normal file
@ -0,0 +1 @@
|
||||
|
@ -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'
|
||||
}
|
||||
|
@ -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>;
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user