pangea-server 3.3.39 → 3.3.41

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
+ static UploadImage(image: UploadableImage, folder: string, previousFile?: string | null): Promise<string>;
7
+ static UploadImages(images: UploadableImage[], folder: string): Promise<string[]>;
8
+ static UploadVideo(file: MulterFile, folder: string): Promise<string>;
9
+ static UploadVideos(files: MulterFile[], folder: string): Promise<string[]>;
10
+ static GenerateUploadUrl(config: GeneralUploadParamsConfig): Promise<{
11
+ url: string;
12
+ fileName: string;
13
+ }>;
14
+ static GenerateUploadUrls(folder: string, fileTypes: string[]): Promise<{
15
+ url: string;
16
+ fileName: string;
17
+ }[]>;
18
+ static DeleteFile(fileName: string): Promise<void>;
19
+ static 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
+ static 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
+ static UploadImages(images, folder) {
32
+ return Promise.all(images.map((image) => this.UploadImage(image, folder)));
33
+ }
34
+ static 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
+ static UploadVideos(files, folder) {
44
+ return Promise.all(files.map((file) => this.UploadVideo(file, folder)));
45
+ }
46
+ static 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
+ static async GenerateUploadUrls(folder, fileTypes) {
52
+ return Promise.all(fileTypes.map((fileType) => this.GenerateUploadUrl({ folder, fileType })));
53
+ }
54
+ static 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
+ static 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
+ }
@@ -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';
@@ -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);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pangea-server",
3
3
  "description": "",
4
- "version": "3.3.39",
4
+ "version": "3.3.41",
5
5
  "files": [
6
6
  "dist"
7
7
  ],