pangea-server 3.3.39 → 3.3.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
type GeneralUploadParamsConfig = {
|
|
2
|
+
folder: string;
|
|
3
|
+
fileType: string;
|
|
4
|
+
};
|
|
5
|
+
export declare abstract class FileStorage {
|
|
6
|
+
UploadImage(image: UploadableImage, folder: string, previousFile?: string | null): Promise<string>;
|
|
7
|
+
UploadImages(images: UploadableImage[], folder: string): Promise<string[]>;
|
|
8
|
+
UploadVideo(file: MulterFile, folder: string): Promise<string>;
|
|
9
|
+
UploadVideos(files: MulterFile[], folder: string): Promise<string[]>;
|
|
10
|
+
GenerateUploadUrl(config: GeneralUploadParamsConfig): Promise<{
|
|
11
|
+
url: string;
|
|
12
|
+
fileName: string;
|
|
13
|
+
}>;
|
|
14
|
+
GenerateUploadUrls(folder: string, fileTypes: string[]): Promise<{
|
|
15
|
+
url: string;
|
|
16
|
+
fileName: string;
|
|
17
|
+
}[]>;
|
|
18
|
+
DeleteFile(fileName: string): Promise<void>;
|
|
19
|
+
DeleteFiles(fileNames: string[]): Promise<void[]>;
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.FileStorage = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
9
|
+
const fs_1 = __importDefault(require("fs"));
|
|
10
|
+
const aws_sdk_1 = __importDefault(require("aws-sdk"));
|
|
11
|
+
// helpers
|
|
12
|
+
const print_helpers_1 = require("./print.helpers");
|
|
13
|
+
const env_helpers_1 = require("./env.helpers");
|
|
14
|
+
const random_helpers_1 = require("./random.helpers");
|
|
15
|
+
const bucketName = (0, env_helpers_1.getEnvStr)('DIGITAL_OCEAN_SPACES_BUCKET');
|
|
16
|
+
const endpointUrl = 'nyc3.digitaloceanspaces.com';
|
|
17
|
+
const s3 = new aws_sdk_1.default.S3({
|
|
18
|
+
endpoint: new aws_sdk_1.default.Endpoint(endpointUrl),
|
|
19
|
+
accessKeyId: (0, env_helpers_1.getEnvStr)('DIGITAL_OCEAN_SPACES_ACCESS_KEY'),
|
|
20
|
+
secretAccessKey: (0, env_helpers_1.getEnvStr)('DIGITAL_OCEAN_SPACES_SECRET_KEY'),
|
|
21
|
+
});
|
|
22
|
+
class FileStorage {
|
|
23
|
+
async UploadImage(image, folder, previousFile) {
|
|
24
|
+
if (previousFile)
|
|
25
|
+
await this.DeleteFile(previousFile);
|
|
26
|
+
const isString = typeof image === 'string';
|
|
27
|
+
const buffer = isString ? await promises_1.default.readFile(path_1.default.join(process.cwd(), image)) : image.buffer;
|
|
28
|
+
const fileType = isString ? 'image/png' : image.mimetype;
|
|
29
|
+
return uploadFile(buffer, { folder, fileType });
|
|
30
|
+
}
|
|
31
|
+
UploadImages(images, folder) {
|
|
32
|
+
return Promise.all(images.map((image) => this.UploadImage(image, folder)));
|
|
33
|
+
}
|
|
34
|
+
async UploadVideo(file, folder) {
|
|
35
|
+
const stream = fs_1.default.createReadStream(file.path);
|
|
36
|
+
try {
|
|
37
|
+
return await uploadFile(stream, { folder, fileType: file.mimetype });
|
|
38
|
+
}
|
|
39
|
+
finally {
|
|
40
|
+
promises_1.default.unlink(file.path);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
UploadVideos(files, folder) {
|
|
44
|
+
return Promise.all(files.map((file) => this.UploadVideo(file, folder)));
|
|
45
|
+
}
|
|
46
|
+
async GenerateUploadUrl(config) {
|
|
47
|
+
const params = { ...getGeneralUploadParams(config), Expires: 60 };
|
|
48
|
+
const url = await s3.getSignedUrlPromise('putObject', params);
|
|
49
|
+
return { url, fileName: params.Key };
|
|
50
|
+
}
|
|
51
|
+
async GenerateUploadUrls(folder, fileTypes) {
|
|
52
|
+
return Promise.all(fileTypes.map((fileType) => this.GenerateUploadUrl({ folder, fileType })));
|
|
53
|
+
}
|
|
54
|
+
async DeleteFile(fileName) {
|
|
55
|
+
await s3.deleteObject({ Bucket: bucketName, Key: fileName }).promise();
|
|
56
|
+
(0, print_helpers_1.printInfo)('file', `file deleted from ${fileName}`);
|
|
57
|
+
}
|
|
58
|
+
DeleteFiles(fileNames) {
|
|
59
|
+
return Promise.all(fileNames.map((fileName) => this.DeleteFile(fileName)));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.FileStorage = FileStorage;
|
|
63
|
+
// internal functions
|
|
64
|
+
function getGeneralUploadParams(config) {
|
|
65
|
+
const fileName = `${config.folder}/${(0, random_helpers_1.getRandomString)('short')}`;
|
|
66
|
+
return { Bucket: bucketName, Key: fileName, ContentType: config.fileType, ACL: 'public-read' };
|
|
67
|
+
}
|
|
68
|
+
async function uploadFile(body, config) {
|
|
69
|
+
const params = { ...getGeneralUploadParams(config), Body: body };
|
|
70
|
+
const res = await s3.upload(params).promise();
|
|
71
|
+
(0, print_helpers_1.printInfo)('file', `file uploaded to ${res.Location}`);
|
|
72
|
+
return params.Key;
|
|
73
|
+
}
|
package/dist/helpers/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export * from './controllers.helpers';
|
|
|
3
3
|
export * from './encryptor.helpers';
|
|
4
4
|
export * from './env.helpers';
|
|
5
5
|
export * from './error.helpers';
|
|
6
|
-
export * from './file.helpers';
|
|
6
|
+
export * from './file-storage.helpers';
|
|
7
7
|
export * from './gemini.helpers';
|
|
8
8
|
export * from './html-sanitize.helpers';
|
|
9
9
|
export * from './job.helpers';
|
package/dist/helpers/index.js
CHANGED
|
@@ -19,7 +19,7 @@ __exportStar(require("./controllers.helpers"), exports);
|
|
|
19
19
|
__exportStar(require("./encryptor.helpers"), exports);
|
|
20
20
|
__exportStar(require("./env.helpers"), exports);
|
|
21
21
|
__exportStar(require("./error.helpers"), exports);
|
|
22
|
-
__exportStar(require("./file.helpers"), exports);
|
|
22
|
+
__exportStar(require("./file-storage.helpers"), exports);
|
|
23
23
|
__exportStar(require("./gemini.helpers"), exports);
|
|
24
24
|
__exportStar(require("./html-sanitize.helpers"), exports);
|
|
25
25
|
__exportStar(require("./job.helpers"), exports);
|