@super-protocol/sdk-js 2.2.0-beta.9 → 2.2.0-beta.90
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/dist/cjs/RIGenerator.d.ts +1 -0
- package/dist/cjs/RIGenerator.js +2 -1
- package/dist/cjs/TIIGenerator.d.ts +2 -1
- package/dist/cjs/TIIGenerator.js +13 -3
- package/dist/cjs/TeeInputGeneratorBase.d.ts +1 -1
- package/dist/cjs/TeeInputGeneratorBase.js +20 -32
- package/dist/cjs/analytics/eventProviders/BrowserEventProvider.d.ts +1 -0
- package/dist/cjs/analytics/eventProviders/BrowserEventProvider.js +3 -3
- package/dist/cjs/analytics/transports/AxiosTransport.js +1 -1
- package/dist/cjs/config.d.ts +0 -1
- package/dist/cjs/config.js +1 -2
- package/dist/cjs/constants.d.ts +5 -4
- package/dist/cjs/constants.js +31 -7
- package/dist/cjs/contracts/abi.d.ts +698 -120
- package/dist/cjs/contracts/abi.js +890 -150
- package/dist/cjs/crypto/index.d.ts +1 -0
- package/dist/cjs/crypto/index.js +16 -1
- package/dist/cjs/errors/base.error.d.ts +3 -0
- package/dist/cjs/errors/base.error.js +19 -0
- package/dist/cjs/errors/index.d.ts +2 -0
- package/dist/cjs/errors/index.js +8 -0
- package/dist/cjs/errors/not-found.error.d.ts +3 -0
- package/dist/cjs/errors/not-found.error.js +8 -0
- package/dist/cjs/errors/utils.d.ts +1 -0
- package/dist/cjs/errors/utils.js +25 -0
- package/dist/cjs/index.d.ts +8 -1
- package/dist/cjs/index.js +15 -2
- package/dist/cjs/models/Offer.d.ts +40 -4
- package/dist/cjs/models/Offer.js +115 -11
- package/dist/cjs/models/Provider.js +1 -1
- package/dist/cjs/models/TCB.js +13 -5
- package/dist/cjs/models/TeeOffer.d.ts +26 -14
- package/dist/cjs/models/TeeOffer.js +79 -42
- package/dist/cjs/proto/TRI.d.ts +39 -4
- package/dist/cjs/proto/TRI.js +18 -1
- package/dist/cjs/providers/storage/IStorageProvider.d.ts +1 -1
- package/dist/cjs/providers/storage/S3StorageProvider.d.ts +8 -7
- package/dist/cjs/providers/storage/S3StorageProvider.js +80 -38
- package/dist/cjs/providers/storage/StorageAdapter.d.ts +9 -7
- package/dist/cjs/providers/storage/StorageAdapter.js +27 -29
- package/dist/cjs/providers/storage/StorageContentWriter.d.ts +2 -2
- package/dist/cjs/providers/storage/StorageContentWriter.js +5 -5
- package/dist/cjs/providers/storage/StorageKeyValueAdapter.d.ts +8 -5
- package/dist/cjs/providers/storage/StorageKeyValueAdapter.js +30 -16
- package/dist/cjs/providers/storage/StorjAdapter.d.ts +5 -4
- package/dist/cjs/providers/storage/StorjAdapter.js +15 -9
- package/dist/cjs/providers/storage/StorjCredentialsManager.d.ts +24 -0
- package/dist/cjs/providers/storage/StorjCredentialsManager.js +86 -0
- package/dist/cjs/providers/storage/StorjStorageProvider.js +2 -2
- package/dist/cjs/providers/storage/fs-storage-provider.d.ts +19 -0
- package/dist/cjs/providers/storage/fs-storage-provider.js +143 -0
- package/dist/cjs/providers/storage/getStorageProvider.js +4 -1
- package/dist/cjs/providers/storage/parseStorageCredentials.d.ts +5 -0
- package/dist/cjs/providers/storage/parseStorageCredentials.js +21 -0
- package/dist/cjs/providers/storage/types.d.ts +22 -0
- package/dist/cjs/staticModels/LoaderSecretsPublicKeys.js +3 -3
- package/dist/cjs/staticModels/LoaderSessions.d.ts +2 -2
- package/dist/cjs/staticModels/LoaderSessions.js +5 -5
- package/dist/cjs/staticModels/OfferResources.d.ts +2 -1
- package/dist/cjs/staticModels/OfferResources.js +24 -8
- package/dist/cjs/staticModels/OffersStorageAllocated.d.ts +1 -2
- package/dist/cjs/staticModels/OffersStorageAllocated.js +10 -10
- package/dist/cjs/staticModels/OffersStorageRequests.js +4 -3
- package/dist/cjs/staticModels/Orders.js +3 -2
- package/dist/cjs/staticModels/SecretRequests.d.ts +2 -2
- package/dist/cjs/staticModels/SecretRequests.js +19 -10
- package/dist/cjs/staticModels/TeeOffers.d.ts +0 -2
- package/dist/cjs/staticModels/TeeOffers.js +2 -33
- package/dist/cjs/tee/QuoteParser.d.ts +61 -6
- package/dist/cjs/tee/QuoteParser.js +248 -29
- package/dist/cjs/tee/QuoteValidator.d.ts +11 -0
- package/dist/cjs/tee/QuoteValidator.js +119 -30
- package/dist/cjs/tee/TeeBlockVerifier.d.ts +3 -4
- package/dist/cjs/tee/TeeBlockVerifier.js +2 -8
- package/dist/cjs/tee/errors.d.ts +6 -3
- package/dist/cjs/tee/errors.js +9 -5
- package/dist/cjs/tee/types.d.ts +50 -9
- package/dist/cjs/tee/types.js +32 -1
- package/dist/cjs/types/DistributedSecretStorage.d.ts +7 -0
- package/dist/cjs/types/Offer.d.ts +4 -3
- package/dist/cjs/types/OfferVersion.d.ts +13 -0
- package/dist/cjs/types/OfferVersion.js +9 -0
- package/dist/cjs/types/Order.d.ts +7 -2
- package/dist/cjs/types/Order.js +3 -1
- package/dist/cjs/types/SlotInfo.d.ts +1 -0
- package/dist/cjs/types/Superpro.d.ts +2 -1
- package/dist/cjs/types/Superpro.js +2 -1
- package/dist/cjs/types/TeeOfferInfo.d.ts +0 -1
- package/dist/cjs/types/index.d.ts +1 -0
- package/dist/cjs/types/index.js +2 -1
- package/dist/cjs/types/storage/StorageAccess.d.ts +3 -3
- package/dist/cjs/utils/CryptoKeysTransformer.d.ts +7 -1
- package/dist/cjs/utils/CryptoKeysTransformer.js +66 -7
- package/dist/cjs/utils/NonceTracker.js +1 -1
- package/dist/cjs/utils/helper.d.ts +7 -1
- package/dist/cjs/utils/helper.js +87 -2
- package/dist/cjs/utils/helpers/OrderArgsHelper.d.ts +16 -0
- package/dist/cjs/utils/helpers/OrderArgsHelper.js +59 -0
- package/dist/cjs/utils/helpers/index.d.ts +2 -0
- package/dist/cjs/utils/helpers/index.js +3 -1
- package/dist/cjs/utils/helpers/uploadObjectToStorage.d.ts +13 -0
- package/dist/cjs/utils/helpers/uploadObjectToStorage.js +55 -0
- package/dist/mjs/RIGenerator.d.ts +1 -0
- package/dist/mjs/RIGenerator.js +2 -1
- package/dist/mjs/TIIGenerator.d.ts +2 -1
- package/dist/mjs/TIIGenerator.js +13 -3
- package/dist/mjs/TeeInputGeneratorBase.d.ts +1 -1
- package/dist/mjs/TeeInputGeneratorBase.js +20 -32
- package/dist/mjs/analytics/eventProviders/BrowserEventProvider.d.ts +1 -0
- package/dist/mjs/analytics/eventProviders/BrowserEventProvider.js +3 -3
- package/dist/mjs/analytics/transports/AxiosTransport.js +1 -1
- package/dist/mjs/config.d.ts +0 -1
- package/dist/mjs/config.js +1 -2
- package/dist/mjs/constants.d.ts +5 -4
- package/dist/mjs/constants.js +30 -6
- package/dist/mjs/contracts/abi.d.ts +698 -120
- package/dist/mjs/contracts/abi.js +890 -150
- package/dist/mjs/crypto/index.d.ts +1 -0
- package/dist/mjs/crypto/index.js +2 -1
- package/dist/mjs/errors/base.error.d.ts +3 -0
- package/dist/mjs/errors/base.error.js +15 -0
- package/dist/mjs/errors/index.d.ts +2 -0
- package/dist/mjs/errors/index.js +3 -0
- package/dist/mjs/errors/not-found.error.d.ts +3 -0
- package/dist/mjs/errors/not-found.error.js +4 -0
- package/dist/mjs/errors/utils.d.ts +1 -0
- package/dist/mjs/errors/utils.js +18 -0
- package/dist/mjs/index.d.ts +8 -1
- package/dist/mjs/index.js +8 -2
- package/dist/mjs/models/Offer.d.ts +40 -4
- package/dist/mjs/models/Offer.js +116 -12
- package/dist/mjs/models/Provider.js +1 -1
- package/dist/mjs/models/TCB.js +13 -5
- package/dist/mjs/models/TeeOffer.d.ts +26 -14
- package/dist/mjs/models/TeeOffer.js +80 -43
- package/dist/mjs/proto/TRI.d.ts +39 -4
- package/dist/mjs/proto/TRI.js +18 -1
- package/dist/mjs/providers/storage/IStorageProvider.d.ts +1 -1
- package/dist/mjs/providers/storage/S3StorageProvider.d.ts +8 -7
- package/dist/mjs/providers/storage/S3StorageProvider.js +77 -38
- package/dist/mjs/providers/storage/StorageAdapter.d.ts +9 -7
- package/dist/mjs/providers/storage/StorageAdapter.js +27 -29
- package/dist/mjs/providers/storage/StorageContentWriter.d.ts +2 -2
- package/dist/mjs/providers/storage/StorageContentWriter.js +5 -5
- package/dist/mjs/providers/storage/StorageKeyValueAdapter.d.ts +8 -5
- package/dist/mjs/providers/storage/StorageKeyValueAdapter.js +30 -16
- package/dist/mjs/providers/storage/StorjAdapter.d.ts +5 -4
- package/dist/mjs/providers/storage/StorjAdapter.js +15 -9
- package/dist/mjs/providers/storage/StorjCredentialsManager.d.ts +24 -0
- package/dist/mjs/providers/storage/StorjCredentialsManager.js +82 -0
- package/dist/mjs/providers/storage/StorjStorageProvider.js +2 -2
- package/dist/mjs/providers/storage/fs-storage-provider.d.ts +19 -0
- package/dist/mjs/providers/storage/fs-storage-provider.js +113 -0
- package/dist/mjs/providers/storage/getStorageProvider.js +4 -1
- package/dist/mjs/providers/storage/parseStorageCredentials.d.ts +5 -0
- package/dist/mjs/providers/storage/parseStorageCredentials.js +17 -0
- package/dist/mjs/providers/storage/types.d.ts +22 -0
- package/dist/mjs/staticModels/LoaderSecretsPublicKeys.js +4 -4
- package/dist/mjs/staticModels/LoaderSessions.d.ts +2 -2
- package/dist/mjs/staticModels/LoaderSessions.js +6 -6
- package/dist/mjs/staticModels/OfferResources.d.ts +2 -1
- package/dist/mjs/staticModels/OfferResources.js +25 -9
- package/dist/mjs/staticModels/OffersStorageAllocated.d.ts +1 -2
- package/dist/mjs/staticModels/OffersStorageAllocated.js +11 -11
- package/dist/mjs/staticModels/OffersStorageRequests.js +5 -4
- package/dist/mjs/staticModels/Orders.js +3 -2
- package/dist/mjs/staticModels/SecretRequests.d.ts +2 -2
- package/dist/mjs/staticModels/SecretRequests.js +20 -11
- package/dist/mjs/staticModels/TeeOffers.d.ts +0 -2
- package/dist/mjs/staticModels/TeeOffers.js +2 -33
- package/dist/mjs/store.js +2 -2
- package/dist/mjs/tee/QuoteParser.d.ts +61 -6
- package/dist/mjs/tee/QuoteParser.js +245 -28
- package/dist/mjs/tee/QuoteValidator.d.ts +11 -0
- package/dist/mjs/tee/QuoteValidator.js +119 -30
- package/dist/mjs/tee/TeeBlockVerifier.d.ts +3 -4
- package/dist/mjs/tee/TeeBlockVerifier.js +2 -8
- package/dist/mjs/tee/errors.d.ts +6 -3
- package/dist/mjs/tee/errors.js +7 -4
- package/dist/mjs/tee/types.d.ts +50 -9
- package/dist/mjs/tee/types.js +28 -2
- package/dist/mjs/types/DistributedSecretStorage.d.ts +7 -0
- package/dist/mjs/types/Offer.d.ts +4 -3
- package/dist/mjs/types/OfferVersion.d.ts +13 -0
- package/dist/mjs/types/OfferVersion.js +6 -0
- package/dist/mjs/types/Order.d.ts +7 -2
- package/dist/mjs/types/Order.js +3 -1
- package/dist/mjs/types/SlotInfo.d.ts +1 -0
- package/dist/mjs/types/Superpro.d.ts +2 -1
- package/dist/mjs/types/Superpro.js +2 -1
- package/dist/mjs/types/TeeOfferInfo.d.ts +0 -1
- package/dist/mjs/types/index.d.ts +1 -0
- package/dist/mjs/types/index.js +2 -1
- package/dist/mjs/types/storage/StorageAccess.d.ts +3 -3
- package/dist/mjs/utils/CryptoKeysTransformer.d.ts +7 -1
- package/dist/mjs/utils/CryptoKeysTransformer.js +66 -7
- package/dist/mjs/utils/NonceTracker.js +1 -1
- package/dist/mjs/utils/helper.d.ts +7 -1
- package/dist/mjs/utils/helper.js +80 -1
- package/dist/mjs/utils/helpers/OrderArgsHelper.d.ts +16 -0
- package/dist/mjs/utils/helpers/OrderArgsHelper.js +52 -0
- package/dist/mjs/utils/helpers/index.d.ts +2 -0
- package/dist/mjs/utils/helpers/index.js +3 -1
- package/dist/mjs/utils/helpers/uploadObjectToStorage.d.ts +13 -0
- package/dist/mjs/utils/helpers/uploadObjectToStorage.js +48 -0
- package/package.json +4 -4
package/dist/mjs/proto/TRI.js
CHANGED
|
@@ -218,6 +218,7 @@ function createBaseTRI() {
|
|
|
218
218
|
args: "",
|
|
219
219
|
encryption: undefined,
|
|
220
220
|
mrsigner: new Uint8Array(0),
|
|
221
|
+
imageHashes: [],
|
|
221
222
|
};
|
|
222
223
|
}
|
|
223
224
|
export const TRI = {
|
|
@@ -237,6 +238,9 @@ export const TRI = {
|
|
|
237
238
|
if (message.mrsigner.length !== 0) {
|
|
238
239
|
writer.uint32(42).bytes(message.mrsigner);
|
|
239
240
|
}
|
|
241
|
+
for (const v of message.imageHashes) {
|
|
242
|
+
Hash.encode(v, writer.uint32(50).fork()).ldelim();
|
|
243
|
+
}
|
|
240
244
|
return writer;
|
|
241
245
|
},
|
|
242
246
|
decode(input, length) {
|
|
@@ -276,6 +280,12 @@ export const TRI = {
|
|
|
276
280
|
}
|
|
277
281
|
message.mrsigner = reader.bytes();
|
|
278
282
|
continue;
|
|
283
|
+
case 6:
|
|
284
|
+
if (tag !== 50) {
|
|
285
|
+
break;
|
|
286
|
+
}
|
|
287
|
+
message.imageHashes.push(Hash.decode(reader, reader.uint32()));
|
|
288
|
+
continue;
|
|
279
289
|
}
|
|
280
290
|
if ((tag & 7) === 4 || tag === 0) {
|
|
281
291
|
break;
|
|
@@ -293,6 +303,9 @@ export const TRI = {
|
|
|
293
303
|
args: isSet(object.args) ? globalThis.String(object.args) : "",
|
|
294
304
|
encryption: isSet(object.encryption) ? Encryption.fromJSON(object.encryption) : undefined,
|
|
295
305
|
mrsigner: isSet(object.mrsigner) ? bytesFromBase64(object.mrsigner) : new Uint8Array(0),
|
|
306
|
+
imageHashes: globalThis.Array.isArray(object?.imageHashes)
|
|
307
|
+
? object.imageHashes.map((e) => Hash.fromJSON(e))
|
|
308
|
+
: [],
|
|
296
309
|
};
|
|
297
310
|
},
|
|
298
311
|
toJSON(message) {
|
|
@@ -312,6 +325,9 @@ export const TRI = {
|
|
|
312
325
|
if (message.mrsigner.length !== 0) {
|
|
313
326
|
obj.mrsigner = base64FromBytes(message.mrsigner);
|
|
314
327
|
}
|
|
328
|
+
if (message.imageHashes?.length) {
|
|
329
|
+
obj.imageHashes = message.imageHashes.map((e) => Hash.toJSON(e));
|
|
330
|
+
}
|
|
315
331
|
return obj;
|
|
316
332
|
},
|
|
317
333
|
create(base) {
|
|
@@ -326,6 +342,7 @@ export const TRI = {
|
|
|
326
342
|
? Encryption.fromPartial(object.encryption)
|
|
327
343
|
: undefined;
|
|
328
344
|
message.mrsigner = object.mrsigner ?? new Uint8Array(0);
|
|
345
|
+
message.imageHashes = object.imageHashes?.map((e) => Hash.fromPartial(e)) || [];
|
|
329
346
|
return message;
|
|
330
347
|
},
|
|
331
348
|
};
|
|
@@ -357,4 +374,4 @@ function base64FromBytes(arr) {
|
|
|
357
374
|
function isSet(value) {
|
|
358
375
|
return value !== null && value !== undefined;
|
|
359
376
|
}
|
|
360
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVFJJLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Byb3RvL1RSSS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQkFBb0I7QUFDcEIsT0FBTyxHQUFHLE1BQU0sdUJBQXVCLENBQUM7QUFFeEMsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQztBQXlCbEMsU0FBUyxvQkFBb0I7SUFDM0IsT0FBTztRQUNMLElBQUksRUFBRSxFQUFFO1FBQ1IsR0FBRyxFQUFFLFNBQVM7UUFDZCxNQUFNLEVBQUUsU0FBUztRQUNqQixVQUFVLEVBQUUsU0FBUztRQUNyQixFQUFFLEVBQUUsU0FBUztRQUNiLEdBQUcsRUFBRSxTQUFTO1FBQ2QsUUFBUSxFQUFFLEVBQUU7S0FDYixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixNQUFNLENBQUMsT0FBbUIsRUFBRSxTQUFxQixHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtRQUNsRSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDeEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDakMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxVQUFV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
|
|
377
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVFJJLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Byb3RvL1RSSS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQkFBb0I7QUFDcEIsT0FBTyxHQUFHLE1BQU0sdUJBQXVCLENBQUM7QUFFeEMsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQztBQTBCbEMsU0FBUyxvQkFBb0I7SUFDM0IsT0FBTztRQUNMLElBQUksRUFBRSxFQUFFO1FBQ1IsR0FBRyxFQUFFLFNBQVM7UUFDZCxNQUFNLEVBQUUsU0FBUztRQUNqQixVQUFVLEVBQUUsU0FBUztRQUNyQixFQUFFLEVBQUUsU0FBUztRQUNiLEdBQUcsRUFBRSxTQUFTO1FBQ2QsUUFBUSxFQUFFLEVBQUU7S0FDYixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixNQUFNLENBQUMsT0FBbUIsRUFBRSxTQUFxQixHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtRQUNsRSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDeEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDakMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxVQUFV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
|
|
@@ -6,7 +6,7 @@ export type DownloadConfig = {
|
|
|
6
6
|
length?: number;
|
|
7
7
|
};
|
|
8
8
|
export default interface IStorageProvider {
|
|
9
|
-
uploadFile(inputStream: stream.Readable, remotePath: string, contentLength: number, progressListener?: (total: number, current: number) => void): Promise<void>;
|
|
9
|
+
uploadFile(inputStream: stream.Readable | Blob, remotePath: string, contentLength: number, progressListener?: (total: number, current: number) => void): Promise<void>;
|
|
10
10
|
downloadFile(remotePath: string, config: DownloadConfig, progressListener?: (total: number, current: number) => void): Promise<stream.Readable>;
|
|
11
11
|
deleteObject(remotePath: string): Promise<void>;
|
|
12
12
|
listObjects(remotePath: string): Promise<StorageObject[]>;
|
|
@@ -2,19 +2,20 @@
|
|
|
2
2
|
import IStorageProvider, { DownloadConfig } from './IStorageProvider.js';
|
|
3
3
|
import { Readable } from 'stream';
|
|
4
4
|
import StorageObject from '../../types/storage/StorageObject.js';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
bucket: string;
|
|
10
|
-
region: string;
|
|
5
|
+
import { S3Credentials } from '@super-protocol/dto-js';
|
|
6
|
+
export type S3ClientConfig = Omit<S3Credentials, 'prefix'> & {
|
|
7
|
+
region?: string;
|
|
8
|
+
prefix?: string;
|
|
11
9
|
};
|
|
12
10
|
export declare class S3StorageProvider implements IStorageProvider {
|
|
13
11
|
private readonly s3Client;
|
|
14
12
|
private readonly bucket;
|
|
13
|
+
private readonly prefix;
|
|
15
14
|
private readonly multipartChunkSizeInBytes;
|
|
15
|
+
private readonly defaultRegion;
|
|
16
16
|
constructor(storageAccess: S3ClientConfig);
|
|
17
|
-
|
|
17
|
+
private applyPrefix;
|
|
18
|
+
uploadFile(inputStream: Readable | Blob, remotePath: string, contentLength: number, progressListener?: ((total: number, current: number) => void) | undefined): Promise<void>;
|
|
18
19
|
private multipartUpload;
|
|
19
20
|
deleteObject(remotePath: string): Promise<void>;
|
|
20
21
|
downloadFile(remotePath: string, config: DownloadConfig, progressListener?: ((total: number, current: number) => void) | undefined): Promise<Readable>;
|
|
@@ -1,43 +1,59 @@
|
|
|
1
1
|
import { AbortMultipartUploadCommand, CompleteMultipartUploadCommand, CreateMultipartUploadCommand, PutObjectCommand, DeleteObjectCommand, GetObjectCommand, HeadObjectCommand, ListObjectsV2Command, S3Client, UploadPartCommand, } from '@aws-sdk/client-s3';
|
|
2
2
|
import { Readable } from 'stream';
|
|
3
3
|
import { getStreamChunks } from '../../utils/helpers/getStreamChunks.js';
|
|
4
|
+
import path from 'path';
|
|
4
5
|
export class S3StorageProvider {
|
|
5
6
|
s3Client;
|
|
6
7
|
bucket;
|
|
8
|
+
prefix;
|
|
7
9
|
multipartChunkSizeInBytes = 64 * 1024 * 1024; // 64MB
|
|
10
|
+
defaultRegion = 'us-east-1';
|
|
8
11
|
constructor(storageAccess) {
|
|
9
|
-
const { accessKeyId,
|
|
12
|
+
const { accessKeyId, secretKey, endpoint, bucket, region, prefix } = storageAccess;
|
|
10
13
|
if (!accessKeyId)
|
|
11
14
|
throw new Error('Access key id is undefined');
|
|
12
|
-
if (!
|
|
15
|
+
if (!secretKey)
|
|
13
16
|
throw new Error('Secret access is undefined');
|
|
14
17
|
if (!endpoint)
|
|
15
18
|
throw new Error('Endpoint is undefined');
|
|
16
19
|
if (!bucket)
|
|
17
20
|
throw new Error('Bucket is undefined');
|
|
18
|
-
if (!
|
|
19
|
-
throw new Error(
|
|
21
|
+
if (prefix && (prefix.startsWith('/') || !prefix.endsWith('/'))) {
|
|
22
|
+
throw new Error(`Prefix is invalid: it must not start with "/" and must end with "/" (prefix=${prefix})`);
|
|
23
|
+
}
|
|
20
24
|
this.bucket = bucket;
|
|
25
|
+
this.prefix = prefix || '';
|
|
21
26
|
this.s3Client = new S3Client({
|
|
22
27
|
credentials: {
|
|
23
28
|
accessKeyId,
|
|
24
|
-
secretAccessKey,
|
|
29
|
+
secretAccessKey: secretKey,
|
|
25
30
|
},
|
|
26
|
-
region,
|
|
31
|
+
region: region || this.defaultRegion,
|
|
27
32
|
endpoint,
|
|
28
33
|
forcePathStyle: true,
|
|
29
34
|
});
|
|
30
35
|
}
|
|
36
|
+
applyPrefix(key) {
|
|
37
|
+
return path.join(this.prefix, '/', key);
|
|
38
|
+
}
|
|
31
39
|
async uploadFile(inputStream, remotePath, contentLength, progressListener) {
|
|
32
40
|
// For performance & cost optimization
|
|
33
41
|
// https://docs.storj.io/dcs/api-reference/s3-compatible-gateway/multipart-upload/multipart-part-size
|
|
42
|
+
const key = this.applyPrefix(remotePath);
|
|
43
|
+
let body;
|
|
44
|
+
if (inputStream instanceof Blob) {
|
|
45
|
+
body = new Uint8Array(await inputStream.arrayBuffer());
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
body = inputStream;
|
|
49
|
+
}
|
|
34
50
|
if (contentLength >= this.multipartChunkSizeInBytes) {
|
|
35
|
-
return this.multipartUpload(inputStream,
|
|
51
|
+
return this.multipartUpload(inputStream, key, contentLength, progressListener);
|
|
36
52
|
}
|
|
37
53
|
const putObjectCommand = new PutObjectCommand({
|
|
38
|
-
Body:
|
|
54
|
+
Body: body,
|
|
39
55
|
Bucket: this.bucket,
|
|
40
|
-
Key:
|
|
56
|
+
Key: key,
|
|
41
57
|
ContentLength: contentLength,
|
|
42
58
|
});
|
|
43
59
|
progressListener?.(contentLength, 0);
|
|
@@ -45,39 +61,59 @@ export class S3StorageProvider {
|
|
|
45
61
|
progressListener?.(contentLength, contentLength);
|
|
46
62
|
}
|
|
47
63
|
async multipartUpload(inputStream, remotePath, contentLength, progressListener) {
|
|
64
|
+
const key = this.applyPrefix(remotePath);
|
|
65
|
+
let transformedStream;
|
|
66
|
+
if (inputStream instanceof Blob) {
|
|
67
|
+
transformedStream = new Uint8Array(await inputStream.arrayBuffer());
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
transformedStream = inputStream;
|
|
71
|
+
}
|
|
48
72
|
const createMultipartUploadCommand = new CreateMultipartUploadCommand({
|
|
49
73
|
Bucket: this.bucket,
|
|
50
|
-
Key:
|
|
74
|
+
Key: key,
|
|
51
75
|
});
|
|
52
76
|
const multipart = await this.s3Client.send(createMultipartUploadCommand);
|
|
53
77
|
if (!multipart.UploadId) {
|
|
54
78
|
throw new Error('UploadId property is empty');
|
|
55
79
|
}
|
|
80
|
+
let totalWritten = 0;
|
|
81
|
+
const uploadId = multipart.UploadId;
|
|
82
|
+
const parts = [];
|
|
83
|
+
const uploadPart = async (chunk, partNumber) => {
|
|
84
|
+
const uploadPartCommand = new UploadPartCommand({
|
|
85
|
+
Body: chunk,
|
|
86
|
+
Bucket: this.bucket,
|
|
87
|
+
Key: key,
|
|
88
|
+
UploadId: uploadId,
|
|
89
|
+
PartNumber: partNumber,
|
|
90
|
+
});
|
|
91
|
+
const response = await this.s3Client.send(uploadPartCommand);
|
|
92
|
+
parts.push({
|
|
93
|
+
ETag: response.ETag,
|
|
94
|
+
PartNumber: partNumber,
|
|
95
|
+
});
|
|
96
|
+
totalWritten += chunk.length;
|
|
97
|
+
progressListener?.(contentLength, totalWritten);
|
|
98
|
+
};
|
|
56
99
|
try {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
parts.push({
|
|
70
|
-
ETag: response.ETag,
|
|
71
|
-
PartNumber: streamChunk.partNumber,
|
|
72
|
-
});
|
|
73
|
-
totalWritten += streamChunk.data.length;
|
|
74
|
-
if (!!progressListener) {
|
|
75
|
-
progressListener(contentLength, totalWritten);
|
|
100
|
+
if (transformedStream instanceof Readable) {
|
|
101
|
+
for await (const streamChunk of getStreamChunks(transformedStream, this.multipartChunkSizeInBytes)) {
|
|
102
|
+
await uploadPart(streamChunk.data, streamChunk.partNumber);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
const chunkSize = this.multipartChunkSizeInBytes;
|
|
107
|
+
let partNumber = 1;
|
|
108
|
+
for (let offset = 0; offset < transformedStream.length; offset += chunkSize) {
|
|
109
|
+
const chunk = transformedStream.slice(offset, offset + chunkSize);
|
|
110
|
+
await uploadPart(chunk, partNumber);
|
|
111
|
+
partNumber++;
|
|
76
112
|
}
|
|
77
113
|
}
|
|
78
114
|
const completeMultipartUploadCommand = new CompleteMultipartUploadCommand({
|
|
79
115
|
Bucket: this.bucket,
|
|
80
|
-
Key:
|
|
116
|
+
Key: key,
|
|
81
117
|
UploadId: multipart.UploadId,
|
|
82
118
|
MultipartUpload: { Parts: parts },
|
|
83
119
|
});
|
|
@@ -86,7 +122,7 @@ export class S3StorageProvider {
|
|
|
86
122
|
catch (uploadingError) {
|
|
87
123
|
const abortMultipartUploadCommand = new AbortMultipartUploadCommand({
|
|
88
124
|
Bucket: this.bucket,
|
|
89
|
-
Key:
|
|
125
|
+
Key: key,
|
|
90
126
|
UploadId: multipart.UploadId,
|
|
91
127
|
});
|
|
92
128
|
await this.s3Client.send(abortMultipartUploadCommand);
|
|
@@ -94,16 +130,18 @@ export class S3StorageProvider {
|
|
|
94
130
|
}
|
|
95
131
|
}
|
|
96
132
|
async deleteObject(remotePath) {
|
|
133
|
+
const key = this.applyPrefix(remotePath);
|
|
97
134
|
const deleteObjectCommand = new DeleteObjectCommand({
|
|
98
135
|
Bucket: this.bucket,
|
|
99
|
-
Key:
|
|
136
|
+
Key: key,
|
|
100
137
|
});
|
|
101
138
|
await this.s3Client.send(deleteObjectCommand);
|
|
102
139
|
}
|
|
103
140
|
async downloadFile(remotePath, config, progressListener) {
|
|
141
|
+
const key = this.applyPrefix(remotePath);
|
|
104
142
|
const getObjectParams = {
|
|
105
143
|
Bucket: this.bucket,
|
|
106
|
-
Key:
|
|
144
|
+
Key: key,
|
|
107
145
|
};
|
|
108
146
|
if (config) {
|
|
109
147
|
const start = config.offset || 0;
|
|
@@ -126,16 +164,16 @@ export class S3StorageProvider {
|
|
|
126
164
|
return getObjectResult.Body;
|
|
127
165
|
}
|
|
128
166
|
async listObjects(remotePath) {
|
|
129
|
-
const
|
|
167
|
+
const key = this.applyPrefix(remotePath.endsWith('/') || remotePath === '' ? remotePath : `${remotePath}/`);
|
|
130
168
|
const listObjectsCommand = new ListObjectsV2Command({
|
|
131
169
|
Bucket: this.bucket,
|
|
132
|
-
Prefix:
|
|
170
|
+
Prefix: key,
|
|
133
171
|
});
|
|
134
172
|
const listObjects = await this.s3Client.send(listObjectsCommand);
|
|
135
173
|
let result = [];
|
|
136
174
|
if (listObjects.Contents) {
|
|
137
175
|
result = listObjects.Contents.map((object) => ({
|
|
138
|
-
name: object.Key || '',
|
|
176
|
+
name: object.Key?.substring(this.prefix.length) || '',
|
|
139
177
|
createdAt: object.LastModified || new Date(),
|
|
140
178
|
size: object.Size || 0,
|
|
141
179
|
}));
|
|
@@ -143,9 +181,10 @@ export class S3StorageProvider {
|
|
|
143
181
|
return result;
|
|
144
182
|
}
|
|
145
183
|
async getMetadata(remotePath) {
|
|
184
|
+
const key = this.applyPrefix(remotePath);
|
|
146
185
|
const headObjectCommand = new HeadObjectCommand({
|
|
147
186
|
Bucket: this.bucket,
|
|
148
|
-
Key:
|
|
187
|
+
Key: key,
|
|
149
188
|
});
|
|
150
189
|
return await this.s3Client.send(headObjectCommand);
|
|
151
190
|
}
|
|
@@ -164,4 +203,4 @@ export class S3StorageProvider {
|
|
|
164
203
|
return metadata.LastModified;
|
|
165
204
|
}
|
|
166
205
|
}
|
|
167
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUzNTdG9yYWdlUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3N0b3JhZ2UvUzNTdG9yYWdlUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLDJCQUEyQixFQUUzQiw4QkFBOEIsRUFDOUIsNEJBQTRCLEVBQzVCLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBRWhCLGlCQUFpQixFQUVqQixvQkFBb0IsRUFDcEIsUUFBUSxFQUNSLGlCQUFpQixHQUNsQixNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFbEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXpFLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQU94QixNQUFNLE9BQU8saUJBQWlCO0lBQ1gsUUFBUSxDQUFXO0lBQ25CLE1BQU0sQ0FBUztJQUNmLE1BQU0sQ0FBUztJQUNmLHlCQUF5QixHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTztJQUNyRCxhQUFhLEdBQUcsV0FBVyxDQUFDO0lBRTdDLFlBQVksYUFBNkI7UUFDdkMsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsYUFBYSxDQUFDO1FBQ25GLElBQUksQ0FBQyxXQUFXO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxTQUFTO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxRQUFRO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxNQUFNO1lBQUUs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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import StorageAccess from '../../types/storage/StorageAccess.js';
|
|
3
|
-
import { Performance } from './types.js';
|
|
3
|
+
import { IStorageAdapter, Performance } from './types.js';
|
|
4
4
|
export interface LRUCacheConfig {
|
|
5
5
|
max: number;
|
|
6
6
|
}
|
|
@@ -12,12 +12,14 @@ export interface StorageAdapterConfig {
|
|
|
12
12
|
readMetadataConcurrency?: number;
|
|
13
13
|
performance?: Performance;
|
|
14
14
|
showLogs?: boolean;
|
|
15
|
+
hasEncryption?: boolean;
|
|
16
|
+
instanceId?: string;
|
|
15
17
|
}
|
|
16
18
|
export declare enum CacheEvents {
|
|
17
19
|
INSTANCES_CHANGED = "INSTANCES_CHANGED",
|
|
18
20
|
KEY_DELETED = "KEY_DELETED"
|
|
19
21
|
}
|
|
20
|
-
export default class StorageAdapter<V extends object> {
|
|
22
|
+
export default class StorageAdapter<V extends object> implements IStorageAdapter<V> {
|
|
21
23
|
private readonly logger?;
|
|
22
24
|
private readonly storageKeyValueAdapter;
|
|
23
25
|
private readonly cache;
|
|
@@ -38,14 +40,14 @@ export default class StorageAdapter<V extends object> {
|
|
|
38
40
|
subscribe(cb: (props: {
|
|
39
41
|
type: CacheEvents;
|
|
40
42
|
message: unknown;
|
|
41
|
-
}) => void):
|
|
43
|
+
}) => void): () => void;
|
|
42
44
|
private publish;
|
|
43
45
|
has(key: string): Promise<boolean>;
|
|
44
|
-
private
|
|
45
|
-
set(key: string, value: V, encryptionKeyBuffer
|
|
46
|
+
private getEncryptionKey;
|
|
47
|
+
set(key: string, value: V, encryptionKeyBuffer?: Buffer): void;
|
|
46
48
|
private setByInstance;
|
|
47
|
-
delete(key: string):
|
|
48
|
-
get(key: string, encryptionKeyBuffer
|
|
49
|
+
delete(key: string): void;
|
|
50
|
+
get(key: string, encryptionKeyBuffer?: Buffer): Promise<(V | null)[] | null>;
|
|
49
51
|
private getQueue;
|
|
50
52
|
private clearQueue;
|
|
51
53
|
private cacheHasNullInstances;
|