pangea-server 1.0.84 → 3.1.1

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.
@@ -1,4 +1,6 @@
1
- export declare function deleteFile(fileName: string | null | undefined): Promise<void>;
2
- export declare function deleteFiles(fileNames: string[]): Promise<void[]>;
3
1
  export declare function uploadImage(image: UploadableImage | undefined, previousImage: string | null | undefined, ...folders: string[]): Promise<string>;
4
2
  export declare function uploadImages(images: UploadableImage[] | undefined, ...folders: string[]): Promise<string[]>;
3
+ export declare function uploadVideo(file: MulterFile | undefined, previousVideo: string | null | undefined, ...folders: string[]): Promise<string>;
4
+ export declare function uploadVideos(files: MulterFile[] | undefined, ...folders: string[]): Promise<string[]>;
5
+ export declare function deleteFile(fileName: string | null | undefined): Promise<void>;
6
+ export declare function deleteFiles(fileNames: string[]): Promise<void[]>;
@@ -3,9 +3,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.uploadImages = exports.uploadImage = exports.deleteFiles = exports.deleteFile = void 0;
6
+ exports.deleteFiles = exports.deleteFile = exports.uploadVideos = exports.uploadVideo = exports.uploadImages = exports.uploadImage = void 0;
7
7
  const path_1 = __importDefault(require("path"));
8
8
  const promises_1 = __importDefault(require("fs/promises"));
9
+ const fs_1 = __importDefault(require("fs"));
9
10
  const aws_sdk_1 = __importDefault(require("aws-sdk"));
10
11
  const sharp_1 = __importDefault(require("sharp"));
11
12
  // helpers
@@ -20,17 +21,6 @@ const s3 = new aws_sdk_1.default.S3({
20
21
  accessKeyId: (0, env_helpers_1.getEnvStr)('DIGITAL_OCEAN_SPACES_ACCESS_KEY'),
21
22
  secretAccessKey: (0, env_helpers_1.getEnvStr)('DIGITAL_OCEAN_SPACES_SECRET_KEY'),
22
23
  });
23
- async function deleteFile(fileName) {
24
- if (!fileName)
25
- return;
26
- await s3.deleteObject({ Bucket: bucketName, Key: fileName }).promise();
27
- (0, print_helpers_1.printInfo)('file', `file deleted from ${fileName}`);
28
- }
29
- exports.deleteFile = deleteFile;
30
- async function deleteFiles(fileNames) {
31
- return Promise.all(fileNames.map((fileName) => deleteFile(fileName)));
32
- }
33
- exports.deleteFiles = deleteFiles;
34
24
  async function uploadImage(image, previousImage, ...folders) {
35
25
  if (!image)
36
26
  error_helpers_1.AppError.Throw({ statusCodeName: 'BAD_REQUEST', errorCode: 'IMAGE_NOT_SENT' });
@@ -43,21 +33,55 @@ async function uploadImage(image, previousImage, ...folders) {
43
33
  const targetQuality = Math.floor(qualityRatio * 100 * qualityMultiplier);
44
34
  const quality = Math.max(10, Math.min(100, targetQuality));
45
35
  const bufferCompressed = await (0, sharp_1.default)(imageBuffer).png({ quality }).toBuffer();
36
+ return uploadFile(bufferCompressed, 'image/jpeg', ...folders);
37
+ }
38
+ exports.uploadImage = uploadImage;
39
+ function uploadImages(images, ...folders) {
40
+ if (!images)
41
+ error_helpers_1.AppError.Throw({ statusCodeName: 'BAD_REQUEST', errorCode: 'IMAGES_NOT_SENT' });
42
+ return Promise.all(images.map((image) => uploadImage(image, undefined, ...folders)));
43
+ }
44
+ exports.uploadImages = uploadImages;
45
+ async function uploadVideo(file, previousVideo, ...folders) {
46
+ if (!file)
47
+ error_helpers_1.AppError.Throw({ statusCodeName: 'BAD_REQUEST', errorCode: 'VIDEO_NOT_SENT' });
48
+ await deleteFile(previousVideo);
49
+ const stream = fs_1.default.createReadStream(file.path);
50
+ try {
51
+ return uploadFile(stream, file.mimetype, ...folders);
52
+ }
53
+ finally {
54
+ promises_1.default.unlink(file.path);
55
+ }
56
+ }
57
+ exports.uploadVideo = uploadVideo;
58
+ function uploadVideos(files, ...folders) {
59
+ if (!files)
60
+ error_helpers_1.AppError.Throw({ statusCodeName: 'BAD_REQUEST', errorCode: 'VIDEOS_NOT_SENT' });
61
+ return Promise.all(files.map((file) => uploadVideo(file, undefined, ...folders)));
62
+ }
63
+ exports.uploadVideos = uploadVideos;
64
+ async function deleteFile(fileName) {
65
+ if (!fileName)
66
+ return;
67
+ await s3.deleteObject({ Bucket: bucketName, Key: fileName }).promise();
68
+ (0, print_helpers_1.printInfo)('file', `file deleted from ${fileName}`);
69
+ }
70
+ exports.deleteFile = deleteFile;
71
+ function deleteFiles(fileNames) {
72
+ return Promise.all(fileNames.map((fileName) => deleteFile(fileName)));
73
+ }
74
+ exports.deleteFiles = deleteFiles;
75
+ // internal functions
76
+ async function uploadFile(body, contentType, ...folders) {
46
77
  const params = {
47
78
  Bucket: bucketName,
48
79
  Key: `${folders.join('/')}/${(0, random_helpers_1.getRandomString)('short')}`,
49
- Body: bufferCompressed,
50
- ContentType: 'image/jpeg',
80
+ Body: body,
81
+ ContentType: contentType,
51
82
  ACL: 'public-read',
52
83
  };
53
84
  const res = await s3.upload(params).promise();
54
85
  (0, print_helpers_1.printInfo)('file', `file uploaded to ${res.Location}`);
55
86
  return res.Key;
56
87
  }
57
- exports.uploadImage = uploadImage;
58
- async function uploadImages(images, ...folders) {
59
- if (!images)
60
- error_helpers_1.AppError.Throw({ statusCodeName: 'BAD_REQUEST', errorCode: 'IMAGES_NOT_SENT' });
61
- return Promise.all(images.map((image) => uploadImage(image, undefined, ...folders)));
62
- }
63
- exports.uploadImages = uploadImages;
@@ -1,2 +1,5 @@
1
- export declare const uploadSingleImage: (req: Req, res: Res, next: Next) => void;
2
- export declare const uploadMultipleImages: (req: Req, res: Res, next: Next) => void;
1
+ export declare const processImage: (req: Req, res: Res, next: Next) => void;
2
+ export declare const processImages: (req: Req, res: Res, next: Next) => void;
3
+ export declare const processVideo: (req: Req, res: Res, next: Next) => void;
4
+ export declare const processVideos: (req: Req, res: Res, next: Next) => void;
5
+ export declare const processFiles: (req: Req, res: Res, next: Next) => void;
@@ -3,37 +3,30 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.uploadMultipleImages = exports.uploadSingleImage = void 0;
6
+ exports.processFiles = exports.processVideos = exports.processVideo = exports.processImages = exports.processImage = void 0;
7
7
  const multer_1 = __importDefault(require("multer"));
8
8
  // helpers
9
9
  const helpers_1 = require("../helpers");
10
- const storage = multer_1.default.memoryStorage();
11
10
  const invalidInputDataError = new helpers_1.AppError({ statusCodeName: 'BAD_REQUEST', errorCode: 'INVALID_INPUT_DATA' });
12
- exports.uploadSingleImage = createUploadImage('single');
13
- exports.uploadMultipleImages = createUploadImage('multiple');
14
- // internal functions
15
- function createUploadImage(type) {
16
- const map = {
17
- single: {
18
- method: 'single',
19
- field: 'image',
20
- check: (req) => req.file,
21
- },
22
- multiple: {
23
- method: 'array',
24
- field: 'images',
25
- check: (req) => req.files,
26
- },
27
- };
28
- const config = map[type];
11
+ const storage = multer_1.default.diskStorage({});
12
+ exports.processImage = getProcessFn({ method: 'single', field: 'image', types: ['image'] });
13
+ exports.processImages = getProcessFn({ method: 'array', field: 'images', types: ['image'] });
14
+ exports.processVideo = getProcessFn({ method: 'single', field: 'video', types: ['video'] });
15
+ exports.processVideos = getProcessFn({ method: 'array', field: 'videos', types: ['video'] });
16
+ exports.processFiles = getProcessFn({ method: 'array', field: 'files', types: ['image', 'video'] });
17
+ function getProcessFn({ method, field, types }) {
29
18
  return (req, res, next) => {
30
- const upload = (0, multer_1.default)({ storage, fileFilter: getFileFilter('image') })[config.method](config.field);
31
- upload(req, res, (err) => {
19
+ const process = (0, multer_1.default)({ storage, fileFilter: getFileFilter(types) })[method](field);
20
+ process(req, res, (err) => {
32
21
  if (err) {
33
22
  next(err);
34
23
  return;
35
24
  }
36
- if (!config.check(req)) {
25
+ if (method === 'single' && !req.file) {
26
+ next(invalidInputDataError);
27
+ return;
28
+ }
29
+ if (method === 'array' && !req.files) {
37
30
  next(invalidInputDataError);
38
31
  return;
39
32
  }
@@ -41,9 +34,9 @@ function createUploadImage(type) {
41
34
  });
42
35
  };
43
36
  }
44
- function getFileFilter(fileType) {
37
+ function getFileFilter(fileTypes) {
45
38
  return function fileFilter(_req, file, next) {
46
- if (!file.mimetype.startsWith(`${fileType}/`)) {
39
+ if (!fileTypes.some((type) => file.mimetype.startsWith(`${type}/`))) {
47
40
  next(invalidInputDataError);
48
41
  return;
49
42
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pangea-server",
3
3
  "description": "",
4
- "version": "1.0.84",
4
+ "version": "3.1.1",
5
5
  "files": [
6
6
  "dist"
7
7
  ],