@super-protocol/sdk-js 0.13.6-beta.2 → 0.13.6-beta.4

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/build/index.d.ts CHANGED
@@ -59,5 +59,4 @@ export { default as StorageObject } from "./types/storage/StorageObject";
59
59
  export { default as StorageAccess } from "./types/storage/StorageAccess";
60
60
  export { default as getStorageProvider } from "./providers/storage/getStorageProvider";
61
61
  export { default as IStorageProvider } from "./providers/storage/IStorageProvider";
62
- export * from "./providers/storage/StorjS3StorageProvider";
63
62
  export * as helpers from "./utils/helpers";
package/build/index.js CHANGED
@@ -106,5 +106,4 @@ __exportStar(require("./types/Origins"), exports);
106
106
  exports.ChunkedStorageProvider = __importStar(require("./providers/storage/ChunksDownloadDecorator"));
107
107
  var getStorageProvider_1 = require("./providers/storage/getStorageProvider");
108
108
  Object.defineProperty(exports, "getStorageProvider", { enumerable: true, get: function () { return __importDefault(getStorageProvider_1).default; } });
109
- __exportStar(require("./providers/storage/StorjS3StorageProvider"), exports);
110
109
  exports.helpers = __importStar(require("./utils/helpers"));
@@ -0,0 +1,24 @@
1
+ /// <reference types="node" />
2
+ import IStorageProvider, { DownloadConfig } from "./IStorageProvider";
3
+ import { Readable } from "stream";
4
+ import StorageObject from "../../types/storage/StorageObject";
5
+ export type S3ClientConfig = {
6
+ accessKeyId: string;
7
+ secretAccessKey: string;
8
+ endpoint: string;
9
+ bucket: string;
10
+ };
11
+ export declare class S3StorageProvider implements IStorageProvider {
12
+ private readonly s3Client;
13
+ private readonly bucket;
14
+ private readonly multipartChunkSizeInBytes;
15
+ constructor(storageAccess: S3ClientConfig);
16
+ uploadFile(inputStream: Readable, remotePath: string, contentLength: number, progressListener?: ((total: number, current: number) => void) | undefined): Promise<void>;
17
+ private multipartUpload;
18
+ deleteObject(remotePath: string): Promise<void>;
19
+ downloadFile(remotePath: string, config: DownloadConfig, progressListener?: ((total: number, current: number) => void) | undefined): Promise<Readable>;
20
+ listObjects(remotePath: string): Promise<StorageObject[]>;
21
+ private getMetadata;
22
+ getObjectSize(remotePath: string): Promise<number>;
23
+ getLastModified(remotePath: string): Promise<Date>;
24
+ }
@@ -0,0 +1,357 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __asyncValues = (this && this.__asyncValues) || function (o) {
39
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
40
+ var m = o[Symbol.asyncIterator], i;
41
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
42
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
43
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
44
+ };
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.S3StorageProvider = void 0;
47
+ var aws_sdk_1 = require("aws-sdk");
48
+ var S3StorageProvider = /** @class */ (function () {
49
+ function S3StorageProvider(storageAccess) {
50
+ this.multipartChunkSizeInBytes = 64 * 1024 * 1024; // 64MB
51
+ var accessKeyId = storageAccess.accessKeyId, secretAccessKey = storageAccess.secretAccessKey, endpoint = storageAccess.endpoint, bucket = storageAccess.bucket;
52
+ if (!accessKeyId)
53
+ throw new Error("Access key id is undefined");
54
+ if (!secretAccessKey)
55
+ throw new Error("Secret access is undefined");
56
+ if (!endpoint)
57
+ throw new Error("Endpoint is undefined");
58
+ if (!bucket)
59
+ throw new Error("Bucket is undefined");
60
+ this.bucket = bucket;
61
+ this.s3Client = new aws_sdk_1.S3({
62
+ credentials: {
63
+ accessKeyId: accessKeyId,
64
+ secretAccessKey: secretAccessKey,
65
+ },
66
+ endpoint: endpoint,
67
+ s3ForcePathStyle: true,
68
+ signatureVersion: "v4",
69
+ httpOptions: { timeout: 0 },
70
+ });
71
+ }
72
+ S3StorageProvider.prototype.uploadFile = function (inputStream, remotePath, contentLength, progressListener) {
73
+ return __awaiter(this, void 0, void 0, function () {
74
+ var result;
75
+ return __generator(this, function (_a) {
76
+ switch (_a.label) {
77
+ case 0:
78
+ // For performance & cost optimization
79
+ // https://docs.storj.io/dcs/api-reference/s3-compatible-gateway/multipart-upload/multipart-part-size
80
+ if (inputStream.readableHighWaterMark >= this.multipartChunkSizeInBytes) {
81
+ return [2 /*return*/, this.multipartUpload(inputStream, remotePath, contentLength, progressListener)];
82
+ }
83
+ return [4 /*yield*/, this.s3Client
84
+ .putObject({
85
+ Body: inputStream,
86
+ Bucket: this.bucket,
87
+ Key: remotePath,
88
+ ContentLength: contentLength,
89
+ })
90
+ .on("httpUploadProgress", function (_a) {
91
+ var total = _a.total, loaded = _a.loaded;
92
+ return progressListener === null || progressListener === void 0 ? void 0 : progressListener(total, loaded);
93
+ })
94
+ .promise()];
95
+ case 1:
96
+ result = _a.sent();
97
+ if (result.$response.error) {
98
+ throw result.$response.error;
99
+ }
100
+ return [2 /*return*/];
101
+ }
102
+ });
103
+ });
104
+ };
105
+ S3StorageProvider.prototype.multipartUpload = function (inputStream, remotePath, contentLength, progressListener) {
106
+ var _a, inputStream_1, inputStream_1_1;
107
+ var _b, e_1, _c, _d;
108
+ return __awaiter(this, void 0, void 0, function () {
109
+ var multipart, totalWritten, partNumber, uploadId, parts, buffer, response, e_1_1, doneParams, uploadingError_1;
110
+ return __generator(this, function (_e) {
111
+ switch (_e.label) {
112
+ case 0: return [4 /*yield*/, this.s3Client
113
+ .createMultipartUpload({
114
+ Bucket: this.bucket,
115
+ Key: remotePath,
116
+ })
117
+ .promise()];
118
+ case 1:
119
+ multipart = _e.sent();
120
+ if (!multipart.UploadId) {
121
+ throw new Error("UploadId property is empty");
122
+ }
123
+ _e.label = 2;
124
+ case 2:
125
+ _e.trys.push([2, 19, , 21]);
126
+ totalWritten = 0;
127
+ partNumber = 0;
128
+ uploadId = multipart.UploadId;
129
+ parts = [];
130
+ _e.label = 3;
131
+ case 3:
132
+ _e.trys.push([3, 11, 12, 17]);
133
+ _a = true, inputStream_1 = __asyncValues(inputStream);
134
+ _e.label = 4;
135
+ case 4: return [4 /*yield*/, inputStream_1.next()];
136
+ case 5:
137
+ if (!(inputStream_1_1 = _e.sent(), _b = inputStream_1_1.done, !_b)) return [3 /*break*/, 10];
138
+ _d = inputStream_1_1.value;
139
+ _a = false;
140
+ _e.label = 6;
141
+ case 6:
142
+ _e.trys.push([6, , 8, 9]);
143
+ buffer = _d;
144
+ partNumber++;
145
+ return [4 /*yield*/, this.s3Client
146
+ .uploadPart({
147
+ Body: buffer,
148
+ Bucket: this.bucket,
149
+ Key: remotePath,
150
+ UploadId: uploadId,
151
+ PartNumber: partNumber,
152
+ })
153
+ .promise()];
154
+ case 7:
155
+ response = _e.sent();
156
+ parts.push({
157
+ ETag: response.ETag,
158
+ PartNumber: partNumber,
159
+ });
160
+ totalWritten += buffer.length;
161
+ if (!!progressListener) {
162
+ progressListener(contentLength, totalWritten);
163
+ }
164
+ return [3 /*break*/, 9];
165
+ case 8:
166
+ _a = true;
167
+ return [7 /*endfinally*/];
168
+ case 9: return [3 /*break*/, 4];
169
+ case 10: return [3 /*break*/, 17];
170
+ case 11:
171
+ e_1_1 = _e.sent();
172
+ e_1 = { error: e_1_1 };
173
+ return [3 /*break*/, 17];
174
+ case 12:
175
+ _e.trys.push([12, , 15, 16]);
176
+ if (!(!_a && !_b && (_c = inputStream_1.return))) return [3 /*break*/, 14];
177
+ return [4 /*yield*/, _c.call(inputStream_1)];
178
+ case 13:
179
+ _e.sent();
180
+ _e.label = 14;
181
+ case 14: return [3 /*break*/, 16];
182
+ case 15:
183
+ if (e_1) throw e_1.error;
184
+ return [7 /*endfinally*/];
185
+ case 16: return [7 /*endfinally*/];
186
+ case 17:
187
+ doneParams = {
188
+ Bucket: this.bucket,
189
+ Key: remotePath,
190
+ UploadId: multipart.UploadId,
191
+ MultipartUpload: { Parts: parts },
192
+ };
193
+ return [4 /*yield*/, this.s3Client.completeMultipartUpload(doneParams).promise()];
194
+ case 18:
195
+ _e.sent();
196
+ return [3 /*break*/, 21];
197
+ case 19:
198
+ uploadingError_1 = _e.sent();
199
+ return [4 /*yield*/, this.s3Client
200
+ .abortMultipartUpload({
201
+ Bucket: this.bucket,
202
+ Key: remotePath,
203
+ UploadId: multipart.UploadId,
204
+ })
205
+ .promise()];
206
+ case 20:
207
+ _e.sent();
208
+ throw uploadingError_1;
209
+ case 21: return [2 /*return*/];
210
+ }
211
+ });
212
+ });
213
+ };
214
+ S3StorageProvider.prototype.deleteObject = function (remotePath) {
215
+ return __awaiter(this, void 0, void 0, function () {
216
+ var deleteResult;
217
+ return __generator(this, function (_a) {
218
+ switch (_a.label) {
219
+ case 0: return [4 /*yield*/, this.s3Client
220
+ .deleteObject({
221
+ Bucket: this.bucket,
222
+ Key: remotePath,
223
+ })
224
+ .promise()];
225
+ case 1:
226
+ deleteResult = _a.sent();
227
+ if (deleteResult.$response.error) {
228
+ throw deleteResult.$response.error;
229
+ }
230
+ return [2 /*return*/];
231
+ }
232
+ });
233
+ });
234
+ };
235
+ S3StorageProvider.prototype.downloadFile = function (remotePath, config, progressListener) {
236
+ return __awaiter(this, void 0, void 0, function () {
237
+ var getObjectParams, start, end, downloadStream, current, fileBytesSize_1, _a;
238
+ return __generator(this, function (_b) {
239
+ switch (_b.label) {
240
+ case 0:
241
+ getObjectParams = {
242
+ Bucket: this.bucket,
243
+ Key: remotePath,
244
+ };
245
+ if (config) {
246
+ start = config.offset || 0;
247
+ end = start + (config.length || 0);
248
+ getObjectParams.Range = "bytes=".concat(start, "-").concat(end || "");
249
+ }
250
+ downloadStream = this.s3Client.getObject(getObjectParams).createReadStream();
251
+ current = 0;
252
+ if (!progressListener) return [3 /*break*/, 3];
253
+ _a = config.length;
254
+ if (_a) return [3 /*break*/, 2];
255
+ return [4 /*yield*/, this.getObjectSize(remotePath)];
256
+ case 1:
257
+ _a = (_b.sent());
258
+ _b.label = 2;
259
+ case 2:
260
+ fileBytesSize_1 = _a;
261
+ downloadStream.on("data", function (chunk) {
262
+ current += chunk.length;
263
+ progressListener(fileBytesSize_1, current);
264
+ });
265
+ _b.label = 3;
266
+ case 3: return [2 /*return*/, downloadStream];
267
+ }
268
+ });
269
+ });
270
+ };
271
+ S3StorageProvider.prototype.listObjects = function (remotePath) {
272
+ return __awaiter(this, void 0, void 0, function () {
273
+ var prefix, listObjects, result;
274
+ return __generator(this, function (_a) {
275
+ switch (_a.label) {
276
+ case 0:
277
+ prefix = remotePath.endsWith("/") ? remotePath : "".concat(remotePath, "/");
278
+ return [4 /*yield*/, this.s3Client
279
+ .listObjectsV2({
280
+ Bucket: this.bucket,
281
+ Prefix: prefix,
282
+ })
283
+ .promise()];
284
+ case 1:
285
+ listObjects = _a.sent();
286
+ if (listObjects.$response.error) {
287
+ throw listObjects.$response.error;
288
+ }
289
+ result = [];
290
+ if (listObjects.Contents) {
291
+ result = listObjects.Contents.map(function (object) { return ({
292
+ name: object.Key || "",
293
+ createdAt: object.LastModified || new Date(),
294
+ size: object.Size || 0,
295
+ }); });
296
+ }
297
+ return [2 /*return*/, result];
298
+ }
299
+ });
300
+ });
301
+ };
302
+ S3StorageProvider.prototype.getMetadata = function (remotePath) {
303
+ return __awaiter(this, void 0, void 0, function () {
304
+ var getObjectParams, metadata;
305
+ return __generator(this, function (_a) {
306
+ switch (_a.label) {
307
+ case 0:
308
+ getObjectParams = {
309
+ Bucket: this.bucket,
310
+ Key: remotePath,
311
+ };
312
+ return [4 /*yield*/, this.s3Client.headObject(getObjectParams).promise()];
313
+ case 1:
314
+ metadata = _a.sent();
315
+ if (metadata.$response.error) {
316
+ throw metadata.$response.error;
317
+ }
318
+ return [2 /*return*/, metadata];
319
+ }
320
+ });
321
+ });
322
+ };
323
+ S3StorageProvider.prototype.getObjectSize = function (remotePath) {
324
+ return __awaiter(this, void 0, void 0, function () {
325
+ var metadata;
326
+ return __generator(this, function (_a) {
327
+ switch (_a.label) {
328
+ case 0: return [4 /*yield*/, this.getMetadata(remotePath)];
329
+ case 1:
330
+ metadata = _a.sent();
331
+ if (metadata.ContentLength === undefined) {
332
+ throw new Error("ContentLength property is empty");
333
+ }
334
+ return [2 /*return*/, metadata.ContentLength || 0];
335
+ }
336
+ });
337
+ });
338
+ };
339
+ S3StorageProvider.prototype.getLastModified = function (remotePath) {
340
+ return __awaiter(this, void 0, void 0, function () {
341
+ var metadata;
342
+ return __generator(this, function (_a) {
343
+ switch (_a.label) {
344
+ case 0: return [4 /*yield*/, this.getMetadata(remotePath)];
345
+ case 1:
346
+ metadata = _a.sent();
347
+ if (!metadata.LastModified) {
348
+ throw new Error("LastModified property is empty");
349
+ }
350
+ return [2 /*return*/, metadata.LastModified];
351
+ }
352
+ });
353
+ });
354
+ };
355
+ return S3StorageProvider;
356
+ }());
357
+ exports.S3StorageProvider = S3StorageProvider;
@@ -5,11 +5,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  var dto_js_1 = require("@super-protocol/dto-js");
7
7
  var StorjStorageProvider_1 = __importDefault(require("./StorjStorageProvider"));
8
+ var S3StorageProvider_1 = require("./S3StorageProvider");
8
9
  exports.default = (function (storageAccess) {
9
10
  var key = storageAccess.storageType;
10
11
  switch (key) {
11
12
  case dto_js_1.StorageType.StorJ:
12
13
  return new StorjStorageProvider_1.default(storageAccess.credentials, storageAccess.maximumConcurrent);
14
+ case dto_js_1.StorageType.S3:
15
+ return new S3StorageProvider_1.S3StorageProvider(storageAccess.credentials);
13
16
  default:
14
17
  throw Error("Unsupported storageType ".concat(key));
15
18
  }
@@ -1,8 +1,8 @@
1
1
  type StorageObject = {
2
2
  name: string;
3
3
  size: number;
4
- isFolder: boolean;
5
- childrenCount: number;
4
+ isFolder?: boolean;
5
+ childrenCount?: number;
6
6
  createdAt: Date;
7
7
  };
8
8
  export default StorageObject;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@super-protocol/sdk-js",
3
- "version": "0.13.6-beta.2",
3
+ "version": "0.13.6-beta.4",
4
4
  "main": "build/index.js",
5
5
  "license": "MIT",
6
6
  "files": [
@@ -52,7 +52,7 @@
52
52
  "typescript": "^4.4.4"
53
53
  },
54
54
  "dependencies": {
55
- "@super-protocol/dto-js": "0.0.24",
55
+ "@super-protocol/dto-js": "0.0.28",
56
56
  "@super-protocol/tee-lib": "^0.1.2",
57
57
  "@super-protocol/uplink-nodejs": "1.2.16",
58
58
  "aws-sdk": "^2.1418.0",
@@ -1,26 +0,0 @@
1
- /// <reference types="node" />
2
- import { S3 } from "aws-sdk";
3
- export interface ObjectMetadata {
4
- name: string;
5
- size: number;
6
- createdAt: Date;
7
- }
8
- export type S3ClientConfig = {
9
- accessKeyId: string;
10
- secretAccessKey: string;
11
- endpoint: string;
12
- bucket: string;
13
- };
14
- export declare class StorjS3StorageProvider {
15
- private readonly s3Client;
16
- private readonly bucket;
17
- constructor(storageAccess: S3ClientConfig);
18
- private storageUpload;
19
- private storageDelete;
20
- private storageDownload;
21
- private storageListFiles;
22
- uploadFile(key: string, value: Buffer): Promise<void>;
23
- deleteFile(key: string): Promise<void>;
24
- downloadFile(key: string): Promise<S3.Body>;
25
- listObjects(key: string): Promise<ObjectMetadata[]>;
26
- }
@@ -1,188 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.StorjS3StorageProvider = void 0;
40
- var aws_sdk_1 = require("aws-sdk");
41
- // TODO add streams support https://superprotocol.atlassian.net/browse/SP-3203
42
- var StorjS3StorageProvider = /** @class */ (function () {
43
- function StorjS3StorageProvider(storageAccess) {
44
- var accessKeyId = storageAccess.accessKeyId, secretAccessKey = storageAccess.secretAccessKey, endpoint = storageAccess.endpoint, bucket = storageAccess.bucket;
45
- if (!accessKeyId)
46
- throw new Error("Access key id is undefined");
47
- if (!secretAccessKey)
48
- throw new Error("Secret access is undefined");
49
- if (!endpoint)
50
- throw new Error("Endpoint is undefined");
51
- if (!bucket)
52
- throw new Error("Bucket is undefined");
53
- this.bucket = bucket;
54
- this.s3Client = new aws_sdk_1.S3({
55
- credentials: {
56
- accessKeyId: accessKeyId,
57
- secretAccessKey: secretAccessKey,
58
- },
59
- endpoint: endpoint,
60
- s3ForcePathStyle: true,
61
- signatureVersion: "v4",
62
- httpOptions: { timeout: 0 },
63
- });
64
- }
65
- StorjS3StorageProvider.prototype.storageUpload = function (remotePath, value) {
66
- return __awaiter(this, void 0, void 0, function () {
67
- var result;
68
- return __generator(this, function (_a) {
69
- switch (_a.label) {
70
- case 0: return [4 /*yield*/, this.s3Client
71
- .putObject({
72
- ACL: "public-read",
73
- Body: value,
74
- Bucket: this.bucket,
75
- Key: remotePath,
76
- })
77
- .promise()];
78
- case 1:
79
- result = _a.sent();
80
- if (result.$response.error) {
81
- throw result.$response.error;
82
- }
83
- return [2 /*return*/];
84
- }
85
- });
86
- });
87
- };
88
- StorjS3StorageProvider.prototype.storageDelete = function (key) {
89
- return __awaiter(this, void 0, void 0, function () {
90
- var deleteResult;
91
- return __generator(this, function (_a) {
92
- switch (_a.label) {
93
- case 0: return [4 /*yield*/, this.s3Client
94
- .deleteObject({
95
- Bucket: this.bucket,
96
- Key: key,
97
- })
98
- .promise()];
99
- case 1:
100
- deleteResult = _a.sent();
101
- if (deleteResult.$response.error) {
102
- throw deleteResult.$response.error;
103
- }
104
- return [2 /*return*/];
105
- }
106
- });
107
- });
108
- };
109
- StorjS3StorageProvider.prototype.storageDownload = function (filepath) {
110
- return __awaiter(this, void 0, void 0, function () {
111
- var downloadStream;
112
- return __generator(this, function (_a) {
113
- switch (_a.label) {
114
- case 0: return [4 /*yield*/, this.s3Client
115
- .getObject({
116
- Bucket: this.bucket,
117
- Key: filepath,
118
- })
119
- .promise()];
120
- case 1:
121
- downloadStream = _a.sent();
122
- if (downloadStream.$response.error) {
123
- throw downloadStream.$response.error;
124
- }
125
- return [2 /*return*/, downloadStream.Body || Buffer.from([])];
126
- }
127
- });
128
- });
129
- };
130
- StorjS3StorageProvider.prototype.storageListFiles = function (key) {
131
- return __awaiter(this, void 0, void 0, function () {
132
- var prefix, listObjects, result;
133
- return __generator(this, function (_a) {
134
- switch (_a.label) {
135
- case 0:
136
- prefix = key.endsWith("/") ? key : "".concat(key, "/");
137
- return [4 /*yield*/, this.s3Client
138
- .listObjectsV2({
139
- Bucket: this.bucket,
140
- Prefix: prefix,
141
- })
142
- .promise()];
143
- case 1:
144
- listObjects = _a.sent();
145
- result = [];
146
- if (listObjects.Contents) {
147
- result = listObjects.Contents.map(function (object) { return ({
148
- name: object.Key || "",
149
- createdAt: object.LastModified || new Date(),
150
- size: object.Size || 0,
151
- }); });
152
- }
153
- return [2 /*return*/, result];
154
- }
155
- });
156
- });
157
- };
158
- StorjS3StorageProvider.prototype.uploadFile = function (key, value) {
159
- return __awaiter(this, void 0, void 0, function () {
160
- return __generator(this, function (_a) {
161
- return [2 /*return*/, this.storageUpload(key, value)];
162
- });
163
- });
164
- };
165
- StorjS3StorageProvider.prototype.deleteFile = function (key) {
166
- return __awaiter(this, void 0, void 0, function () {
167
- return __generator(this, function (_a) {
168
- return [2 /*return*/, this.storageDelete(key)];
169
- });
170
- });
171
- };
172
- StorjS3StorageProvider.prototype.downloadFile = function (key) {
173
- return __awaiter(this, void 0, void 0, function () {
174
- return __generator(this, function (_a) {
175
- return [2 /*return*/, this.storageDownload(key)];
176
- });
177
- });
178
- };
179
- StorjS3StorageProvider.prototype.listObjects = function (key) {
180
- return __awaiter(this, void 0, void 0, function () {
181
- return __generator(this, function (_a) {
182
- return [2 /*return*/, this.storageListFiles(key)];
183
- });
184
- });
185
- };
186
- return StorjS3StorageProvider;
187
- }());
188
- exports.StorjS3StorageProvider = StorjS3StorageProvider;