@peacom/core 0.0.91 → 0.0.92

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peacom/core",
3
- "version": "0.0.91",
3
+ "version": "0.0.92",
4
4
  "type": "commonjs",
5
5
  "dependencies": {
6
6
  "@aws-sdk/client-s3": "^3.350.0",
@@ -8,10 +8,30 @@ interface FileProp {
8
8
  contentType: string;
9
9
  }
10
10
  export declare const createPreSignedUrl: ({ fileName, contentType }: FileProp) => Promise<string>;
11
+ export declare const getS3UrlKey: (url: string) => string;
11
12
  export declare const getUrlInfo: (str: string) => Promise<FileInfo>;
12
13
  export declare const uploadS3FromUrl: ({ url, mimeType, name }: {
13
14
  url?: string | undefined;
14
15
  mimeType?: string | undefined;
15
16
  name?: string | undefined;
16
17
  }, folder?: string) => Promise<FileInfo>;
18
+ interface GetObjectRangeProp {
19
+ bucket: string;
20
+ key: string;
21
+ start: number;
22
+ end: number;
23
+ }
24
+ interface DownloadLargeFileProps {
25
+ url: string;
26
+ outputFile: string;
27
+ chunkSize: number;
28
+ onError?(err: Error): void;
29
+ }
30
+ export declare const getObjectRange: ({ bucket, key, start, end }: GetObjectRangeProp) => Promise<import("@aws-sdk/client-s3").GetObjectCommandOutput>;
31
+ export declare const getRangeAndLength: (contentRange: string) => {
32
+ start: number;
33
+ end: number;
34
+ length: number;
35
+ };
36
+ export declare const downloadS3Url: ({ url, outputFile, onError, chunkSize }: DownloadLargeFileProps) => Promise<void>;
17
37
  export {};
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.uploadS3FromUrl = exports.getUrlInfo = exports.createPreSignedUrl = exports.uploadLocalFileToS3 = exports.getS3Url = void 0;
3
+ exports.downloadS3Url = exports.getRangeAndLength = exports.getObjectRange = exports.uploadS3FromUrl = exports.getUrlInfo = exports.getS3UrlKey = exports.createPreSignedUrl = exports.uploadLocalFileToS3 = exports.getS3Url = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const fs = require("fs");
6
6
  const path = require("path");
@@ -45,10 +45,14 @@ const createPreSignedUrl = ({ fileName, contentType }) => {
45
45
  return (0, s3_request_presigner_1.getSignedUrl)(constants_1.s3, command, { expiresIn: 3600 });
46
46
  };
47
47
  exports.createPreSignedUrl = createPreSignedUrl;
48
+ const getS3UrlKey = (url) => {
49
+ return (0, util_1.rightString)(url, url.length -
50
+ `https://${constants_1.S3_INFO.BUCKET}.s3.${constants_1.S3_OPTION.region}.amazonaws.com/`.length);
51
+ };
52
+ exports.getS3UrlKey = getS3UrlKey;
48
53
  const getUrlInfo = (str) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
49
54
  const fileInfo = (0, util_1.getFileInfoFromUrl)(str);
50
- const key = (0, util_1.rightString)(str, str.length -
51
- `https://${constants_1.S3_INFO.BUCKET}.s3.${constants_1.S3_OPTION.region}.amazonaws.com/`.length);
55
+ const key = (0, exports.getS3UrlKey)(str);
52
56
  const input = {
53
57
  // GetObjectRequest
54
58
  Bucket: constants_1.S3_INFO.BUCKET,
@@ -84,4 +88,55 @@ const uploadS3FromUrl = ({ url = "", mimeType = "", name = "" }, folder = consta
84
88
  return Object.assign(Object.assign({}, fileInfo), { url: uploadUrl });
85
89
  });
86
90
  exports.uploadS3FromUrl = uploadS3FromUrl;
91
+ const isComplete = ({ end, length }) => end === length - 1;
92
+ const getObjectRange = ({ bucket, key, start, end }) => {
93
+ const command = new client_s3_1.GetObjectCommand({
94
+ Bucket: bucket,
95
+ Key: key,
96
+ Range: `bytes=${start}-${end}`,
97
+ });
98
+ return constants_1.s3.send(command);
99
+ };
100
+ exports.getObjectRange = getObjectRange;
101
+ const getRangeAndLength = (contentRange) => {
102
+ const [range, length] = contentRange.split("/");
103
+ const [start, end] = range.split("-");
104
+ return {
105
+ start: parseInt(start),
106
+ end: parseInt(end),
107
+ length: parseInt(length),
108
+ };
109
+ };
110
+ exports.getRangeAndLength = getRangeAndLength;
111
+ const downloadS3Url = ({ url, outputFile, onError, chunkSize }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
112
+ const key = (0, exports.getS3UrlKey)(url);
113
+ const writeStream = fs.createWriteStream(outputFile).on("error", (err) => {
114
+ if (onError) {
115
+ onError(err);
116
+ }
117
+ });
118
+ let rangeAndLength = { start: -1, end: -1, length: -1 };
119
+ try {
120
+ while (!isComplete(rangeAndLength)) {
121
+ const { end } = rangeAndLength;
122
+ const nextRange = { start: end + 1, end: end + chunkSize };
123
+ console.log(`Downloading bytes ${nextRange.start} to ${nextRange.end}`);
124
+ const { ContentRange, Body } = yield (0, exports.getObjectRange)(Object.assign({ bucket: constants_1.S3_INFO.BUCKET, key }, nextRange));
125
+ if (Body) {
126
+ writeStream.write(yield Body.transformToByteArray());
127
+ }
128
+ rangeAndLength = (0, exports.getRangeAndLength)(ContentRange || '');
129
+ }
130
+ }
131
+ catch (e) {
132
+ try {
133
+ fs.unlinkSync(outputFile);
134
+ }
135
+ catch (e2) {
136
+ console.log(e2.message);
137
+ }
138
+ throw e;
139
+ }
140
+ });
141
+ exports.downloadS3Url = downloadS3Url;
87
142
  //# sourceMappingURL=s3.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"s3.service.js","sourceRoot":"","sources":["../../../../../../../../packages/core/src/lib/service/storage/aws/s3.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"s3.service.js","sourceRoot":"","sources":["../../../../../../../../packages/core/src/lib/service/storage/aws/s3.service.ts"],"names":[],"mappings":"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"}