@super-protocol/sdk-js 0.15.0 → 0.15.2-beta.0

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.
Files changed (83) hide show
  1. package/build/TIIGenerator.js +129 -239
  2. package/build/connectors/BaseConnector.js +17 -47
  3. package/build/connectors/BlockchainConnector.js +222 -348
  4. package/build/connectors/BlockchainEventsListener.js +38 -92
  5. package/build/contracts/app.json +466 -35
  6. package/build/crypto/Crypto.js +63 -135
  7. package/build/crypto/index.js +1 -1
  8. package/build/crypto/nodejs/AES.js +62 -119
  9. package/build/crypto/nodejs/ARIA.js +61 -118
  10. package/build/crypto/nodejs/ECIES.js +51 -87
  11. package/build/crypto/nodejs/NativeCrypto.js +64 -118
  12. package/build/crypto/nodejs/RSA-Hybrid.js +54 -113
  13. package/build/index.d.ts +5 -0
  14. package/build/index.js +14 -2
  15. package/build/logger.d.ts +3 -1
  16. package/build/logger.js +2 -2
  17. package/build/models/EtlModel.js +65 -114
  18. package/build/models/Offer.js +227 -462
  19. package/build/models/Order.d.ts +4 -0
  20. package/build/models/Order.js +326 -559
  21. package/build/models/Provider.d.ts +2 -0
  22. package/build/models/Provider.js +74 -153
  23. package/build/models/TCB.js +67 -171
  24. package/build/models/TeeOffer.d.ts +1 -0
  25. package/build/models/TeeOffer.js +389 -731
  26. package/build/proto/Compression.js +20 -21
  27. package/build/proto/TRI.js +46 -50
  28. package/build/proto/TeeProperties.js +60 -66
  29. package/build/providers/storage/ChunksDownloadDecorator.d.ts +1 -1
  30. package/build/providers/storage/ChunksDownloadDecorator.js +125 -235
  31. package/build/providers/storage/IStorageProvider.d.ts +1 -1
  32. package/build/providers/storage/S3StorageProvider.js +173 -298
  33. package/build/providers/storage/StorageAdapter.d.ts +60 -0
  34. package/build/providers/storage/StorageAdapter.js +322 -0
  35. package/build/providers/storage/StorageContentWriter.d.ts +46 -0
  36. package/build/providers/storage/StorageContentWriter.js +182 -0
  37. package/build/providers/storage/StorageKeyValueAdapter.d.ts +23 -0
  38. package/build/providers/storage/StorageKeyValueAdapter.js +157 -0
  39. package/build/providers/storage/StorageMetadataReader.d.ts +20 -0
  40. package/build/providers/storage/StorageMetadataReader.js +67 -0
  41. package/build/providers/storage/StorjAdapter.d.ts +19 -0
  42. package/build/providers/storage/StorjAdapter.js +73 -0
  43. package/build/providers/storage/StorjStorageProvider.js +138 -315
  44. package/build/providers/storage/getStorageProvider.js +7 -7
  45. package/build/providers/storage/types.d.ts +7 -0
  46. package/build/providers/storage/types.js +2 -0
  47. package/build/staticModels/ActiveOffers.js +32 -100
  48. package/build/staticModels/ActiveOrders.js +42 -120
  49. package/build/staticModels/BaseStaticModel.js +7 -10
  50. package/build/staticModels/Consensus.d.ts +4 -1
  51. package/build/staticModels/Consensus.js +164 -220
  52. package/build/staticModels/Deposits.js +109 -201
  53. package/build/staticModels/Marks.js +21 -82
  54. package/build/staticModels/ModelPackager.js +34 -84
  55. package/build/staticModels/Offers.js +140 -266
  56. package/build/staticModels/Orders.d.ts +1 -0
  57. package/build/staticModels/Orders.js +286 -429
  58. package/build/staticModels/ProviderRegistry.js +114 -225
  59. package/build/staticModels/Superpro.js +17 -63
  60. package/build/staticModels/SuperproToken.js +90 -169
  61. package/build/staticModels/TeeOffers.js +220 -416
  62. package/build/store.js +2 -2
  63. package/build/types/HardwareInfo.js +2 -2
  64. package/build/types/Order.js +4 -4
  65. package/build/types/Provider.js +1 -1
  66. package/build/types/TeeOfferInfo.js +1 -1
  67. package/build/types/TeeOfferOption.js +2 -2
  68. package/build/types/TeeOfferSlot.js +2 -2
  69. package/build/types/ValueOfferSlot.js +3 -3
  70. package/build/utils/Monitoring.js +24 -28
  71. package/build/utils/NonceTracker.js +56 -121
  72. package/build/utils/PubSub.d.ts +9 -0
  73. package/build/utils/PubSub.js +36 -0
  74. package/build/utils/TxManager.js +121 -215
  75. package/build/utils/compressors/GzipCompressor.js +13 -50
  76. package/build/utils/compressors/UncompressedCompressor.js +10 -13
  77. package/build/utils/helpers/tryWithInterval.js +34 -78
  78. package/build/utils/resourceLoaders/BaseResourceLoader.js +26 -78
  79. package/build/utils/resourceLoaders/StorageProviderLoader.js +33 -97
  80. package/build/utils/resourceLoaders/UrlResourceLoader.js +29 -93
  81. package/build/utils/resourceLoaders/getResourceLoader.js +6 -6
  82. package/build/utils.js +60 -105
  83. package/package.json +4 -1
@@ -8,33 +8,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
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
11
  var __asyncValues = (this && this.__asyncValues) || function (o) {
39
12
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
40
13
  var m = o[Symbol.asyncIterator], i;
@@ -44,11 +17,11 @@ var __asyncValues = (this && this.__asyncValues) || function (o) {
44
17
  };
45
18
  Object.defineProperty(exports, "__esModule", { value: true });
46
19
  exports.S3StorageProvider = void 0;
47
- var aws_sdk_1 = require("aws-sdk");
48
- var S3StorageProvider = /** @class */ (function () {
49
- function S3StorageProvider(storageAccess) {
20
+ const aws_sdk_1 = require("aws-sdk");
21
+ class S3StorageProvider {
22
+ constructor(storageAccess) {
50
23
  this.multipartChunkSizeInBytes = 64 * 1024 * 1024; // 64MB
51
- var accessKeyId = storageAccess.accessKeyId, secretAccessKey = storageAccess.secretAccessKey, endpoint = storageAccess.endpoint, bucket = storageAccess.bucket;
24
+ const { accessKeyId, secretAccessKey, endpoint, bucket } = storageAccess;
52
25
  if (!accessKeyId)
53
26
  throw new Error("Access key id is undefined");
54
27
  if (!secretAccessKey)
@@ -60,89 +33,62 @@ var S3StorageProvider = /** @class */ (function () {
60
33
  this.bucket = bucket;
61
34
  this.s3Client = new aws_sdk_1.S3({
62
35
  credentials: {
63
- accessKeyId: accessKeyId,
64
- secretAccessKey: secretAccessKey,
36
+ accessKeyId,
37
+ secretAccessKey,
65
38
  },
66
- endpoint: endpoint,
39
+ endpoint,
67
40
  s3ForcePathStyle: true,
68
41
  signatureVersion: "v4",
69
42
  httpOptions: { timeout: 0 },
70
43
  });
71
44
  }
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
- });
45
+ uploadFile(inputStream, remotePath, contentLength, progressListener) {
46
+ return __awaiter(this, void 0, void 0, function* () {
47
+ // For performance & cost optimization
48
+ // https://docs.storj.io/dcs/api-reference/s3-compatible-gateway/multipart-upload/multipart-part-size
49
+ if (inputStream.readableHighWaterMark >= this.multipartChunkSizeInBytes) {
50
+ return this.multipartUpload(inputStream, remotePath, contentLength, progressListener);
51
+ }
52
+ const result = yield this.s3Client
53
+ .putObject({
54
+ Body: inputStream,
55
+ Bucket: this.bucket,
56
+ Key: remotePath,
57
+ ContentLength: contentLength,
58
+ })
59
+ .on("httpUploadProgress", ({ total, loaded }) => progressListener === null || progressListener === void 0 ? void 0 : progressListener(total, loaded))
60
+ .promise();
61
+ if (result.$response.error) {
62
+ throw result.$response.error;
63
+ }
103
64
  });
104
- };
105
- S3StorageProvider.prototype.multipartUpload = function (inputStream, remotePath, contentLength, progressListener) {
65
+ }
66
+ multipartUpload(inputStream, remotePath, contentLength, progressListener) {
106
67
  var _a, inputStream_1, inputStream_1_1;
107
68
  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];
69
+ return __awaiter(this, void 0, void 0, function* () {
70
+ const multipart = yield this.s3Client
71
+ .createMultipartUpload({
72
+ Bucket: this.bucket,
73
+ Key: remotePath,
74
+ })
75
+ .promise();
76
+ if (!multipart.UploadId) {
77
+ throw new Error("UploadId property is empty");
78
+ }
79
+ try {
80
+ let totalWritten = 0;
81
+ let partNumber = 0;
82
+ const uploadId = multipart.UploadId;
83
+ const parts = [];
84
+ try {
85
+ for (_a = true, inputStream_1 = __asyncValues(inputStream); inputStream_1_1 = yield inputStream_1.next(), _b = inputStream_1_1.done, !_b;) {
138
86
  _d = inputStream_1_1.value;
139
87
  _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
88
+ try {
89
+ const buffer = _d;
90
+ partNumber++;
91
+ const response = yield this.s3Client
146
92
  .uploadPart({
147
93
  Body: buffer,
148
94
  Bucket: this.bucket,
@@ -150,208 +96,137 @@ var S3StorageProvider = /** @class */ (function () {
150
96
  UploadId: uploadId,
151
97
  PartNumber: partNumber,
152
98
  })
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);
99
+ .promise();
100
+ parts.push({
101
+ ETag: response.ETag,
102
+ PartNumber: partNumber,
103
+ });
104
+ totalWritten += buffer.length;
105
+ if (!!progressListener) {
106
+ progressListener(contentLength, totalWritten);
107
+ }
163
108
  }
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;
109
+ finally {
110
+ _a = true;
229
111
  }
230
- return [2 /*return*/];
112
+ }
231
113
  }
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];
114
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
115
+ finally {
116
+ try {
117
+ if (!_a && !_b && (_c = inputStream_1.return)) yield _c.call(inputStream_1);
118
+ }
119
+ finally { if (e_1) throw e_1.error; }
267
120
  }
268
- });
121
+ const doneParams = {
122
+ Bucket: this.bucket,
123
+ Key: remotePath,
124
+ UploadId: multipart.UploadId,
125
+ MultipartUpload: { Parts: parts },
126
+ };
127
+ yield this.s3Client.completeMultipartUpload(doneParams).promise();
128
+ }
129
+ catch (uploadingError) {
130
+ yield this.s3Client
131
+ .abortMultipartUpload({
132
+ Bucket: this.bucket,
133
+ Key: remotePath,
134
+ UploadId: multipart.UploadId,
135
+ })
136
+ .promise();
137
+ throw uploadingError;
138
+ }
269
139
  });
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
- });
140
+ }
141
+ deleteObject(remotePath) {
142
+ return __awaiter(this, void 0, void 0, function* () {
143
+ const deleteResult = yield this.s3Client
144
+ .deleteObject({
145
+ Bucket: this.bucket,
146
+ Key: remotePath,
147
+ })
148
+ .promise();
149
+ if (deleteResult.$response.error) {
150
+ throw deleteResult.$response.error;
151
+ }
300
152
  });
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
- });
153
+ }
154
+ downloadFile(remotePath, config, progressListener) {
155
+ return __awaiter(this, void 0, void 0, function* () {
156
+ const getObjectParams = {
157
+ Bucket: this.bucket,
158
+ Key: remotePath,
159
+ };
160
+ if (config) {
161
+ const start = config.offset || 0;
162
+ const end = start + (config.length || 0);
163
+ getObjectParams.Range = `bytes=${start}-${end || ""}`;
164
+ }
165
+ const downloadStream = this.s3Client.getObject(getObjectParams).createReadStream();
166
+ let current = 0;
167
+ if (progressListener) {
168
+ const fileBytesSize = config.length || (yield this.getObjectSize(remotePath));
169
+ downloadStream.on("data", (chunk) => {
170
+ current += chunk.length;
171
+ progressListener(fileBytesSize, current);
172
+ });
173
+ }
174
+ return downloadStream;
321
175
  });
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
- });
176
+ }
177
+ listObjects(remotePath) {
178
+ return __awaiter(this, void 0, void 0, function* () {
179
+ const prefix = remotePath.endsWith("/") ? remotePath : `${remotePath}/`;
180
+ const listObjects = yield this.s3Client
181
+ .listObjectsV2({
182
+ Bucket: this.bucket,
183
+ Prefix: prefix,
184
+ })
185
+ .promise();
186
+ if (listObjects.$response.error) {
187
+ throw listObjects.$response.error;
188
+ }
189
+ let result = [];
190
+ if (listObjects.Contents) {
191
+ result = listObjects.Contents.map((object) => ({
192
+ name: object.Key || "",
193
+ createdAt: object.LastModified || new Date(),
194
+ size: object.Size || 0,
195
+ }));
196
+ }
197
+ return result;
337
198
  });
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
- });
199
+ }
200
+ getMetadata(remotePath) {
201
+ return __awaiter(this, void 0, void 0, function* () {
202
+ const getObjectParams = {
203
+ Bucket: this.bucket,
204
+ Key: remotePath,
205
+ };
206
+ const metadata = yield this.s3Client.headObject(getObjectParams).promise();
207
+ if (metadata.$response.error) {
208
+ throw metadata.$response.error;
209
+ }
210
+ return metadata;
353
211
  });
354
- };
355
- return S3StorageProvider;
356
- }());
212
+ }
213
+ getObjectSize(remotePath) {
214
+ return __awaiter(this, void 0, void 0, function* () {
215
+ const metadata = yield this.getMetadata(remotePath);
216
+ if (metadata.ContentLength === undefined) {
217
+ throw new Error("ContentLength property is empty");
218
+ }
219
+ return metadata.ContentLength || 0;
220
+ });
221
+ }
222
+ getLastModified(remotePath) {
223
+ return __awaiter(this, void 0, void 0, function* () {
224
+ const metadata = yield this.getMetadata(remotePath);
225
+ if (!metadata.LastModified) {
226
+ throw new Error("LastModified property is empty");
227
+ }
228
+ return metadata.LastModified;
229
+ });
230
+ }
231
+ }
357
232
  exports.S3StorageProvider = S3StorageProvider;
@@ -0,0 +1,60 @@
1
+ /// <reference types="node" />
2
+ import StorageAccess from "../../types/storage/StorageAccess";
3
+ import { Performance } from "./types";
4
+ export interface LRUCacheConfig {
5
+ max: number;
6
+ }
7
+ export interface StorageAdapterConfig {
8
+ lruCache: LRUCacheConfig;
9
+ writeInterval: number;
10
+ readInterval: number;
11
+ objectDeletedFlag: string;
12
+ readMetadataConcurrency?: number;
13
+ performance?: Performance;
14
+ showLogs?: boolean;
15
+ }
16
+ export declare enum CacheEvents {
17
+ INSTANCES_CHANGED = "INSTANCES_CHANGED",
18
+ KEY_DELETED = "KEY_DELETED"
19
+ }
20
+ export default class StorageAdapter<V extends object> {
21
+ private readonly logger?;
22
+ private readonly storageKeyValueAdapter;
23
+ private readonly cache;
24
+ private readonly encryptionKeys;
25
+ private readonly contentWriter;
26
+ private readonly metadataReader;
27
+ private readonly instanceId;
28
+ private timeout;
29
+ private readonly readInterval;
30
+ private readonly queues;
31
+ private readonly queueReadMetadata;
32
+ private readonly isUpdating;
33
+ private readonly pubSub;
34
+ private readonly eventName;
35
+ private readonly performance?;
36
+ constructor(storageAccess: StorageAccess, config: StorageAdapterConfig);
37
+ private generateHash;
38
+ subscribe(cb: (props: {
39
+ type: CacheEvents;
40
+ message: unknown;
41
+ }) => void): Promise<() => Promise<void>>;
42
+ private publish;
43
+ has(key: string): Promise<boolean>;
44
+ private getEnryptionKey;
45
+ set(key: string, value: V, encryptionKeyBuffer: Buffer): Promise<void>;
46
+ private setByInstance;
47
+ delete(key: string): Promise<void>;
48
+ get(key: string, encryptionKeyBuffer: Buffer): Promise<(V | null)[] | null>;
49
+ private getQueue;
50
+ private clearQueue;
51
+ private cacheHasNullInstances;
52
+ private fetchNullValues;
53
+ clear(): void;
54
+ run(): void;
55
+ private checkUpdates;
56
+ private startUpdatesChecking;
57
+ private stopUpdatesChecking;
58
+ stop(): void;
59
+ shutdown(): Promise<void>;
60
+ }