@super-protocol/sdk-js 2.2.0-beta.12 → 2.2.0-beta.120
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 +2 -0
- package/dist/cjs/RIGenerator.js +6 -4
- 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 +929 -122
- package/dist/cjs/contracts/abi.js +1168 -134
- 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 +11 -1
- package/dist/cjs/index.js +19 -2
- package/dist/cjs/models/Offer.d.ts +48 -6
- package/dist/cjs/models/Offer.js +159 -16
- package/dist/cjs/models/Order.d.ts +2 -90
- package/dist/cjs/models/Order.js +20 -91
- package/dist/cjs/models/Provider.js +1 -1
- package/dist/cjs/models/TCB.js +13 -5
- package/dist/cjs/models/TeeOffer.d.ts +35 -13
- package/dist/cjs/models/TeeOffer.js +119 -44
- package/dist/cjs/proto/Compression.d.ts +1 -1
- package/dist/cjs/proto/TRI.d.ts +41 -6
- package/dist/cjs/proto/TRI.js +18 -1
- package/dist/cjs/proto/TeeProperties.d.ts +5 -5
- 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 +77 -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 +109 -0
- package/dist/cjs/providers/storage/StorjStorageProvider.js +26 -3
- 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/Consensus.d.ts +3 -2
- package/dist/cjs/staticModels/Consensus.js +22 -11
- 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 +3 -1
- package/dist/cjs/staticModels/OfferResources.js +33 -8
- package/dist/cjs/staticModels/Offers.js +10 -2
- 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.d.ts +5 -4
- package/dist/cjs/staticModels/Orders.js +7 -6
- package/dist/cjs/staticModels/SecretRequests.d.ts +1 -1
- package/dist/cjs/staticModels/SecretRequests.js +14 -7
- package/dist/cjs/staticModels/TeeOffers.d.ts +0 -2
- package/dist/cjs/staticModels/TeeOffers.js +5 -38
- package/dist/cjs/tee/QuoteParser.d.ts +61 -6
- package/dist/cjs/tee/QuoteParser.js +251 -30
- package/dist/cjs/tee/QuoteValidator.d.ts +13 -0
- package/dist/cjs/tee/QuoteValidator.js +149 -35
- package/dist/cjs/tee/TcbSerializer.d.ts +20 -0
- package/dist/cjs/tee/TcbSerializer.js +27 -0
- package/dist/cjs/tee/TeeBlockVerifier.d.ts +1 -6
- package/dist/cjs/tee/TeeBlockVerifier.js +5 -52
- package/dist/cjs/tee/TeeCertificateService.d.ts +13 -0
- package/dist/cjs/tee/TeeCertificateService.js +42 -0
- package/dist/cjs/tee/errors.d.ts +6 -3
- package/dist/cjs/tee/errors.js +9 -5
- package/dist/cjs/tee/helpers.d.ts +1 -1
- package/dist/cjs/tee/helpers.js +2 -7
- 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 +33 -7
- package/dist/cjs/types/Offer.js +17 -2
- package/dist/cjs/types/OfferVersion.d.ts +13 -0
- package/dist/cjs/types/OfferVersion.js +9 -0
- package/dist/cjs/types/Order.d.ts +8 -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 +2 -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 +6 -1
- package/dist/cjs/utils/CryptoKeysTransformer.js +48 -3
- 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 +17 -0
- package/dist/cjs/utils/helpers/OrderArgsHelper.js +87 -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/cjs/utils/schema-validators/index.d.ts +1 -0
- package/dist/cjs/utils/schema-validators/index.js +6 -0
- package/dist/cjs/utils/schema-validators/validator.d.ts +7 -0
- package/dist/cjs/utils/schema-validators/validator.js +49 -0
- package/dist/mjs/RIGenerator.d.ts +2 -0
- package/dist/mjs/RIGenerator.js +6 -4
- 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 +929 -122
- package/dist/mjs/contracts/abi.js +1166 -132
- 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 +11 -1
- package/dist/mjs/index.js +11 -2
- package/dist/mjs/models/Offer.d.ts +48 -6
- package/dist/mjs/models/Offer.js +161 -18
- package/dist/mjs/models/Order.d.ts +2 -90
- package/dist/mjs/models/Order.js +20 -91
- package/dist/mjs/models/Provider.js +1 -1
- package/dist/mjs/models/TCB.js +13 -5
- package/dist/mjs/models/TeeOffer.d.ts +35 -13
- package/dist/mjs/models/TeeOffer.js +115 -40
- package/dist/mjs/proto/Compression.d.ts +1 -1
- package/dist/mjs/proto/TRI.d.ts +41 -6
- package/dist/mjs/proto/TRI.js +18 -1
- package/dist/mjs/proto/TeeProperties.d.ts +5 -5
- 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 +74 -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 +3 -3
- 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/Consensus.d.ts +3 -2
- package/dist/mjs/staticModels/Consensus.js +22 -11
- 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 +3 -1
- package/dist/mjs/staticModels/OfferResources.js +34 -9
- package/dist/mjs/staticModels/Offers.js +10 -2
- 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.d.ts +5 -4
- package/dist/mjs/staticModels/Orders.js +7 -6
- package/dist/mjs/staticModels/SecretRequests.d.ts +1 -1
- package/dist/mjs/staticModels/SecretRequests.js +15 -8
- package/dist/mjs/staticModels/TeeOffers.d.ts +0 -2
- package/dist/mjs/staticModels/TeeOffers.js +5 -38
- package/dist/mjs/store.js +2 -2
- package/dist/mjs/tee/QuoteParser.d.ts +61 -6
- package/dist/mjs/tee/QuoteParser.js +248 -29
- package/dist/mjs/tee/QuoteValidator.d.ts +13 -0
- package/dist/mjs/tee/QuoteValidator.js +149 -35
- package/dist/mjs/tee/TcbSerializer.d.ts +20 -0
- package/dist/mjs/tee/TcbSerializer.js +23 -0
- package/dist/mjs/tee/TeeBlockVerifier.d.ts +1 -6
- package/dist/mjs/tee/TeeBlockVerifier.js +5 -52
- package/dist/mjs/tee/TeeCertificateService.d.ts +13 -0
- package/dist/mjs/tee/TeeCertificateService.js +35 -0
- package/dist/mjs/tee/errors.d.ts +6 -3
- package/dist/mjs/tee/errors.js +7 -4
- package/dist/mjs/tee/helpers.d.ts +1 -1
- package/dist/mjs/tee/helpers.js +2 -7
- 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 +33 -7
- package/dist/mjs/types/Offer.js +16 -1
- package/dist/mjs/types/OfferVersion.d.ts +13 -0
- package/dist/mjs/types/OfferVersion.js +6 -0
- package/dist/mjs/types/Order.d.ts +8 -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 +2 -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 +6 -1
- package/dist/mjs/utils/CryptoKeysTransformer.js +48 -3
- 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 +17 -0
- package/dist/mjs/utils/helpers/OrderArgsHelper.js +80 -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/dist/mjs/utils/schema-validators/index.d.ts +1 -0
- package/dist/mjs/utils/schema-validators/index.js +2 -0
- package/dist/mjs/utils/schema-validators/validator.d.ts +7 -0
- package/dist/mjs/utils/schema-validators/validator.js +45 -0
- package/package.json +7 -6
|
@@ -39,7 +39,7 @@ export default class StorageContentWriter {
|
|
|
39
39
|
await this.storageKeyValueAdapter.set(`${key}/${this.objectDeletedFlag}`, null, encryptionKey);
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
|
-
async actualizeCacheUpload(key,
|
|
42
|
+
async actualizeCacheUpload(key, cache, encryptionKey) {
|
|
43
43
|
const instances = cache.get(key);
|
|
44
44
|
const instance = instances?.get(this.instanceId);
|
|
45
45
|
if (!instances || !instance) {
|
|
@@ -64,19 +64,19 @@ export default class StorageContentWriter {
|
|
|
64
64
|
const logger = this.logger?.child({ method: this.actualizeCache.name });
|
|
65
65
|
if (this.storageWrites.size) {
|
|
66
66
|
Array.from(this.storageWrites.entries()).forEach(([key, { type, index, encryptionKey }]) => {
|
|
67
|
-
this.queueWriteContent.add(async () => {
|
|
67
|
+
void this.queueWriteContent.add(async () => {
|
|
68
68
|
try {
|
|
69
69
|
switch (type) {
|
|
70
70
|
case ContentWriterType.NEEDS_DELETE:
|
|
71
71
|
await this.actualizeCacheDelete(key, encryptionKey);
|
|
72
72
|
break;
|
|
73
73
|
case ContentWriterType.NEEDS_UPLOAD:
|
|
74
|
-
await this.actualizeCacheUpload(key,
|
|
74
|
+
await this.actualizeCacheUpload(key, cache, encryptionKey);
|
|
75
75
|
break;
|
|
76
76
|
default:
|
|
77
77
|
break;
|
|
78
78
|
}
|
|
79
|
-
// delete only if the current index is up
|
|
79
|
+
// delete only if the current index is up-to-date
|
|
80
80
|
if (index === this.storageWrites.get(key)?.index) {
|
|
81
81
|
this.storageWrites.delete(key);
|
|
82
82
|
}
|
|
@@ -158,4 +158,4 @@ export default class StorageContentWriter {
|
|
|
158
158
|
await this.actualizeCache(cache);
|
|
159
159
|
}
|
|
160
160
|
}
|
|
161
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RvcmFnZUNvbnRlbnRXcml0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3N0b3JhZ2UvU3RvcmFnZUNvbnRlbnRXcml0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLE1BQU0sU0FBUyxDQUFDO0FBQzVCLE9BQU8sTUFBa0IsTUFBTSxpQkFBaUIsQ0FBQztBQWVqRCxNQUFNLENBQU4sSUFBWSxpQkFHWDtBQUhELFdBQVksaUJBQWlCO0lBQzNCLGtEQUE2QixDQUFBO0lBQzdCLGtEQUE2QixDQUFBO0FBQy9CLENBQUMsRUFIVyxpQkFBaUIsS0FBakIsaUJBQWlCLFFBRzVCO0FBRUQsTUFBTSxpQ0FBaUMsR0FBRyxFQUFFLENBQUM7QUFDN0MsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQVFsRCxNQUFNLENBQUMsT0FBTyxPQUFPLG9CQUFvQjtJQUMvQixPQUFPLEdBQXlDLElBQUksQ0FBQztJQUM1QyxRQUFRLENBQVM7SUFDakIsc0JBQXNCLENBQTRCO0lBQ2xELE1BQU0sQ0FBaUI7SUFDdkIsVUFBVSxDQUFTO0lBQ25CLGlCQUFpQixDQUFTO0lBQzFCLGlCQUFpQixDQUFTO0lBQzFCLGlCQUFpQixDQUFRO0lBQ3pCLFdBQVcsQ0FBZTtJQUMzQixhQUFhLEdBQStCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFdEUsWUFBWSxNQUFxQztRQUMvQyxNQUFNLEVBQ0osdUJBQXVCLEVBQ3ZCLFFBQVEsRUFDUixzQkFBc0IsRUFDdEIsVUFBVSxFQUNWLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsV0FBVyxFQUNYLFFBQVEsR0FBRyxJQUFJLEdBQ2hCLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUss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
|
|
@@ -1,23 +1,26 @@
|
|
|
1
1
|
import { Encryption } from '@super-protocol/dto-js';
|
|
2
2
|
import StorageAccess from '../../types/storage/StorageAccess.js';
|
|
3
3
|
import StorageObject from '../../types/storage/StorageObject.js';
|
|
4
|
+
import { IStorageKeyValueAdapter } from './types.js';
|
|
4
5
|
export interface StorageKeyValueAdapterConfig {
|
|
5
6
|
showLogs?: boolean;
|
|
7
|
+
hasEncryption?: boolean;
|
|
6
8
|
}
|
|
7
|
-
export default class StorageKeyValueAdapter<V extends object> {
|
|
9
|
+
export default class StorageKeyValueAdapter<V extends object> implements IStorageKeyValueAdapter<V> {
|
|
10
|
+
private readonly hasEncryption;
|
|
8
11
|
private readonly storageProvider;
|
|
9
12
|
private readonly logger?;
|
|
10
13
|
constructor(storageAccess: StorageAccess, config?: StorageKeyValueAdapterConfig);
|
|
11
|
-
decrypt(encryption: Encryption, key: string): Promise<V | null>;
|
|
12
|
-
encrypt(data: V | null, key: string): Promise<Encryption>;
|
|
14
|
+
protected decrypt(encryption: Encryption, key: string): Promise<V | null>;
|
|
15
|
+
protected encrypt(data: V | null, key: string): Promise<Encryption>;
|
|
13
16
|
private downloadFromStorage;
|
|
14
17
|
private streamToString;
|
|
15
18
|
private storageUpload;
|
|
16
19
|
private storageDelete;
|
|
17
20
|
private storageDownload;
|
|
18
21
|
private storageListFiles;
|
|
19
|
-
set(key: string, value: V | null, privateKey
|
|
22
|
+
set(key: string, value: V | null, privateKey?: string): Promise<void>;
|
|
20
23
|
delete(key: string): Promise<void>;
|
|
21
|
-
get(key: string, privateKey
|
|
24
|
+
get(key: string, privateKey?: string): Promise<V | null>;
|
|
22
25
|
listFiles(key: string): Promise<StorageObject[]>;
|
|
23
26
|
}
|
|
@@ -4,28 +4,35 @@ import getStorageProvider from './getStorageProvider.js';
|
|
|
4
4
|
import logger from '../../logger.js';
|
|
5
5
|
import Crypto from '../../crypto/Crypto.js';
|
|
6
6
|
export default class StorageKeyValueAdapter {
|
|
7
|
+
hasEncryption;
|
|
7
8
|
storageProvider;
|
|
8
9
|
logger;
|
|
9
10
|
constructor(storageAccess, config) {
|
|
10
|
-
if (!storageAccess?.credentials)
|
|
11
|
+
if (!storageAccess?.credentials) {
|
|
11
12
|
throw new Error('Credentials is empty');
|
|
12
|
-
|
|
13
|
+
}
|
|
14
|
+
const { showLogs = true, hasEncryption = true } = config || {};
|
|
15
|
+
this.hasEncryption = hasEncryption;
|
|
13
16
|
this.logger = showLogs ? logger.child({ class: StorageKeyValueAdapter.name }) : null;
|
|
14
17
|
this.storageProvider = getStorageProvider(storageAccess);
|
|
15
18
|
}
|
|
16
19
|
async decrypt(encryption, key) {
|
|
17
|
-
if (!encryption)
|
|
20
|
+
if (!encryption) {
|
|
18
21
|
return null;
|
|
19
|
-
|
|
22
|
+
}
|
|
23
|
+
if (!key) {
|
|
20
24
|
throw new Error('Key cannot be empty!');
|
|
25
|
+
}
|
|
21
26
|
encryption.key = key;
|
|
22
27
|
return JSON.parse(await Crypto.decrypt(encryption));
|
|
23
28
|
}
|
|
24
|
-
|
|
25
|
-
if (data === undefined)
|
|
29
|
+
encrypt(data, key) {
|
|
30
|
+
if (data === undefined) {
|
|
26
31
|
throw new Error('Data cannot be empty!');
|
|
27
|
-
|
|
32
|
+
}
|
|
33
|
+
if (!key) {
|
|
28
34
|
throw new Error('Private cannot be empty!');
|
|
35
|
+
}
|
|
29
36
|
return Crypto.encrypt(JSON.stringify(data), {
|
|
30
37
|
algo: CryptoAlgorithm.AES,
|
|
31
38
|
encoding: Encoding.base64,
|
|
@@ -48,8 +55,11 @@ export default class StorageKeyValueAdapter {
|
|
|
48
55
|
});
|
|
49
56
|
}
|
|
50
57
|
async storageUpload(key, value, privateKey) {
|
|
58
|
+
if (this.hasEncryption && !privateKey) {
|
|
59
|
+
throw new Error('Invalid private key');
|
|
60
|
+
}
|
|
51
61
|
try {
|
|
52
|
-
const encryptedValue = await this.encrypt(value, privateKey);
|
|
62
|
+
const encryptedValue = this.hasEncryption && privateKey ? await this.encrypt(value, privateKey) : value;
|
|
53
63
|
const buffer = Buffer.from(JSON.stringify(encryptedValue));
|
|
54
64
|
await this.storageProvider.uploadFile(Readable.from(buffer), key, buffer.byteLength);
|
|
55
65
|
this.logger?.info({ data: key }, 'Success uploading to storage');
|
|
@@ -70,13 +80,17 @@ export default class StorageKeyValueAdapter {
|
|
|
70
80
|
}
|
|
71
81
|
}
|
|
72
82
|
async storageDownload(key, privateKey) {
|
|
83
|
+
if (this.hasEncryption && !privateKey) {
|
|
84
|
+
throw new Error('Invalid private key');
|
|
85
|
+
}
|
|
73
86
|
try {
|
|
74
87
|
const downloaded = await this.downloadFromStorage(key);
|
|
75
88
|
this.logger?.info({ key }, 'Success download data from storage');
|
|
76
|
-
if (!downloaded)
|
|
89
|
+
if (!downloaded) {
|
|
77
90
|
return null;
|
|
78
|
-
|
|
79
|
-
|
|
91
|
+
}
|
|
92
|
+
const value = JSON.parse(downloaded);
|
|
93
|
+
return this.hasEncryption && privateKey ? await this.decrypt(value, privateKey) : value;
|
|
80
94
|
}
|
|
81
95
|
catch (err) {
|
|
82
96
|
this.logger?.info({
|
|
@@ -103,17 +117,17 @@ export default class StorageKeyValueAdapter {
|
|
|
103
117
|
throw err;
|
|
104
118
|
}
|
|
105
119
|
}
|
|
106
|
-
|
|
120
|
+
set(key, value, privateKey) {
|
|
107
121
|
return this.storageUpload(key, value, privateKey);
|
|
108
122
|
}
|
|
109
|
-
|
|
123
|
+
delete(key) {
|
|
110
124
|
return this.storageDelete(key);
|
|
111
125
|
}
|
|
112
|
-
|
|
126
|
+
get(key, privateKey) {
|
|
113
127
|
return this.storageDownload(key, privateKey);
|
|
114
128
|
}
|
|
115
|
-
|
|
129
|
+
listFiles(key) {
|
|
116
130
|
return this.storageListFiles(key);
|
|
117
131
|
}
|
|
118
132
|
}
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RvcmFnZUtleVZhbHVlQWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvc3RvcmFnZS9TdG9yYWdlS2V5VmFsdWVBZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxFQUFjLGVBQWUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHdkYsT0FBTyxrQkFBa0IsTUFBTSx5QkFBeUIsQ0FBQztBQUV6RCxPQUFPLE1BQWtCLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxNQUFNLE1BQU0sd0JBQXdCLENBQUM7QUFRNUMsTUFBTSxDQUFDLE9BQU8sT0FBTyxzQkFBc0I7SUFHeEIsYUFBYSxDQUFVO0lBQ3ZCLGVBQWUsQ0FBbUI7SUFDbEMsTUFBTSxDQUFpQjtJQUV4QyxZQUFZLGFBQTRCLEVBQUUsTUFBcUM7UUFDN0UsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUNoQyxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUNELE1BQU0sRUFBRSxRQUFRLEdBQUcsSUFBSSxFQUFFLGFBQWEsR0FBRyxJQUFJLEVBQUUsR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQy9ELElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNyRixJQUFJLENBQUMsZUFBZSxHQUFHLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFUyxLQUFLLENBQUMs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
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import StorageAccess from '../../types/storage/StorageAccess.js';
|
|
3
3
|
import { StorageAdapterConfig, CacheEvents } from './StorageAdapter.js';
|
|
4
|
+
import { StorjCredentials } from '@super-protocol/dto-js';
|
|
4
5
|
export type StorjConfig = StorageAdapterConfig;
|
|
5
6
|
export default class StorjAdapter<V extends object> {
|
|
6
7
|
private storageAdapter;
|
|
7
8
|
private readonly logger?;
|
|
8
|
-
constructor(storageAccess: StorageAccess
|
|
9
|
+
constructor(storageAccess: StorageAccess<StorjCredentials>, config: StorjConfig);
|
|
9
10
|
subscribe(cb: (props: {
|
|
10
11
|
type: CacheEvents;
|
|
11
12
|
message: unknown;
|
|
12
|
-
}) => void):
|
|
13
|
+
}) => void): () => void;
|
|
13
14
|
get(key: string, encryptionKey: Buffer): Promise<(V | null)[] | null>;
|
|
14
15
|
has(key: string): Promise<boolean>;
|
|
15
|
-
set(key: string, value: V, encryptionKey: Buffer):
|
|
16
|
-
del(key: string):
|
|
16
|
+
set(key: string, value: V, encryptionKey: Buffer): void;
|
|
17
|
+
del(key: string): void;
|
|
17
18
|
stop(): void;
|
|
18
19
|
shutdown(): Promise<void>;
|
|
19
20
|
}
|
|
@@ -13,30 +13,36 @@ export default class StorjAdapter {
|
|
|
13
13
|
return this.storageAdapter?.subscribe(cb);
|
|
14
14
|
}
|
|
15
15
|
async get(key, encryptionKey) {
|
|
16
|
-
|
|
16
|
+
try {
|
|
17
|
+
return await this.storageAdapter.get(key, encryptionKey);
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
17
20
|
const message = err.message?.toLowerCase() || '';
|
|
18
21
|
if (message.includes('object not found') || message.includes('object has been deleted')) {
|
|
19
22
|
this.logger?.info({ key }, 'Object not found');
|
|
20
23
|
return null;
|
|
21
24
|
}
|
|
22
25
|
throw err;
|
|
23
|
-
}
|
|
26
|
+
}
|
|
24
27
|
}
|
|
25
|
-
|
|
28
|
+
has(key) {
|
|
26
29
|
return this.storageAdapter.has(key);
|
|
27
30
|
}
|
|
28
|
-
|
|
29
|
-
|
|
31
|
+
set(key, value, encryptionKey) {
|
|
32
|
+
try {
|
|
33
|
+
this.storageAdapter.set(key, value, encryptionKey);
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
30
36
|
const message = err.message?.toLowerCase() || '';
|
|
31
37
|
if (message.includes('object has been deleted')) {
|
|
32
38
|
this.logger?.info({ key }, 'Object has been deleted');
|
|
33
39
|
return;
|
|
34
40
|
}
|
|
35
41
|
throw err;
|
|
36
|
-
}
|
|
42
|
+
}
|
|
37
43
|
}
|
|
38
|
-
|
|
39
|
-
|
|
44
|
+
del(key) {
|
|
45
|
+
this.storageAdapter.delete(key);
|
|
40
46
|
}
|
|
41
47
|
stop() {
|
|
42
48
|
this.storageAdapter.stop();
|
|
@@ -45,4 +51,4 @@ export default class StorjAdapter {
|
|
|
45
51
|
await this.storageAdapter.shutdown();
|
|
46
52
|
}
|
|
47
53
|
}
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RvcmpBZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy9zdG9yYWdlL1N0b3JqQWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLE1BQWtCLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxjQUFxRCxNQUFNLHFCQUFxQixDQUFDO0FBS3hGLE1BQU0sQ0FBQyxPQUFPLE9BQU8sWUFBWTtJQUN2QixjQUFjLENBQW9CO0lBQ3pCLE1BQU0sQ0FBaUI7SUFFeEMsWUFBWSxhQUE4QyxFQUFFLE1BQW1CO1FBQzdFLE1BQU0sRUFBRSxRQUFRLEdBQUcsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzNFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELFNBQVMsQ0FBQyxFQUE0RDtRQUNwRSxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQVcsRUFBRSxhQUFxQjtRQUMxQyxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsTUFBTSxPQUFPLEdBQUksR0FBYSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDNUQsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hGLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztnQkFFL0MsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBQ0QsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQztJQUVELEdBQUcsQ0FBQyxHQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsR0FBRyxDQUFDLEdBQVcsRUFBRSxLQUFRLEVBQUUsYUFBcUI7UUFDOUMsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE1BQU0sT0FBTyxHQUFJLEdBQWEsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQzVELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUseUJBQXlCLENBQUMsQ0FBQztnQkFFdEQsT0FBTztZQUNULENBQUM7WUFDRCxNQUFNLEdBQUcsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDO0lBRUQsR0FBRyxDQUFDLEdBQVc7UUFDYixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBSTtRQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRO1FBQ1osTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7Q0FDRiJ9
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { S3Credentials, StorjCredentials, StringifiedCredentials } from '@super-protocol/dto-js';
|
|
2
|
+
export declare enum CredentialsPermissions {
|
|
3
|
+
read = 0,
|
|
4
|
+
write = 1,
|
|
5
|
+
list = 2,
|
|
6
|
+
delete = 3
|
|
7
|
+
}
|
|
8
|
+
export declare class StorjCredentialsManager {
|
|
9
|
+
private accessToken;
|
|
10
|
+
private bucket;
|
|
11
|
+
private access?;
|
|
12
|
+
private project?;
|
|
13
|
+
constructor(storageConfig: Pick<StorjCredentials, 'token' | 'bucket'>);
|
|
14
|
+
getStorageId(entity: string, entityId: string): string;
|
|
15
|
+
create(): Promise<void>;
|
|
16
|
+
acquireCredentials(permissions: CredentialsPermissions[], prefix: string): Promise<StringifiedCredentials<StorjCredentials>>;
|
|
17
|
+
acquireS3Credentials(permissions: CredentialsPermissions[], prefix: string): Promise<S3Credentials>;
|
|
18
|
+
getS3Credentials(stringifiedCredentials: StringifiedCredentials): Promise<S3Credentials>;
|
|
19
|
+
getS3Credentials(storjCredentials: StorjCredentials): Promise<S3Credentials>;
|
|
20
|
+
revokeCredentials(credentialString: StringifiedCredentials<StorjCredentials>): Promise<void>;
|
|
21
|
+
private lazyStorj;
|
|
22
|
+
private lazyAccess;
|
|
23
|
+
private lazyProject;
|
|
24
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export var CredentialsPermissions;
|
|
2
|
+
(function (CredentialsPermissions) {
|
|
3
|
+
CredentialsPermissions[CredentialsPermissions["read"] = 0] = "read";
|
|
4
|
+
CredentialsPermissions[CredentialsPermissions["write"] = 1] = "write";
|
|
5
|
+
CredentialsPermissions[CredentialsPermissions["list"] = 2] = "list";
|
|
6
|
+
CredentialsPermissions[CredentialsPermissions["delete"] = 3] = "delete";
|
|
7
|
+
})(CredentialsPermissions || (CredentialsPermissions = {}));
|
|
8
|
+
export class StorjCredentialsManager {
|
|
9
|
+
accessToken;
|
|
10
|
+
bucket;
|
|
11
|
+
access;
|
|
12
|
+
project;
|
|
13
|
+
constructor(storageConfig) {
|
|
14
|
+
this.accessToken = storageConfig.token;
|
|
15
|
+
this.bucket = storageConfig.bucket;
|
|
16
|
+
}
|
|
17
|
+
getStorageId(entity, entityId) {
|
|
18
|
+
return `${entity}_${entityId}`;
|
|
19
|
+
}
|
|
20
|
+
async create() {
|
|
21
|
+
const project = await this.lazyProject();
|
|
22
|
+
await project.ensureBucket(this.bucket);
|
|
23
|
+
}
|
|
24
|
+
async acquireCredentials(permissions, prefix) {
|
|
25
|
+
const readPerm = permissions.includes(CredentialsPermissions.read), writePerm = permissions.includes(CredentialsPermissions.write), listPerm = permissions.includes(CredentialsPermissions.list), deletePerm = permissions.includes(CredentialsPermissions.delete);
|
|
26
|
+
const storj = await this.lazyStorj();
|
|
27
|
+
const perm = new storj.Permission(readPerm, writePerm, deletePerm, listPerm, 0, 0);
|
|
28
|
+
const sharePrefix = new storj.SharePrefix(this.bucket, prefix + '/');
|
|
29
|
+
const access = await this.lazyAccess();
|
|
30
|
+
const share = await access.share(perm, [sharePrefix], 1);
|
|
31
|
+
return JSON.stringify({
|
|
32
|
+
bucket: this.bucket,
|
|
33
|
+
prefix: prefix + '/',
|
|
34
|
+
token: await share.serialize(),
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
async acquireS3Credentials(permissions, prefix) {
|
|
38
|
+
const storjCreds = await this.acquireCredentials(permissions, prefix);
|
|
39
|
+
return this.getS3Credentials(storjCreds);
|
|
40
|
+
}
|
|
41
|
+
async getS3Credentials(creds) {
|
|
42
|
+
const storjCredentials = typeof creds === 'string' ? JSON.parse(creds) : creds;
|
|
43
|
+
const access = await this.lazyAccess();
|
|
44
|
+
const s3Credentials = await access.registerS3Credentials(storjCredentials.token);
|
|
45
|
+
return {
|
|
46
|
+
accessKeyId: s3Credentials.accessKeyId,
|
|
47
|
+
secretKey: s3Credentials.secretKey,
|
|
48
|
+
endpoint: s3Credentials.endpoint,
|
|
49
|
+
bucket: storjCredentials.bucket,
|
|
50
|
+
prefix: storjCredentials.prefix,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
async revokeCredentials(credentialString) {
|
|
54
|
+
const credentials = JSON.parse(credentialString);
|
|
55
|
+
const storj = await this.lazyStorj();
|
|
56
|
+
const uplink = new storj.Uplink();
|
|
57
|
+
const access = await uplink.parseAccess(credentials.token);
|
|
58
|
+
const project = await this.lazyProject();
|
|
59
|
+
await project.revokeAccess(access);
|
|
60
|
+
}
|
|
61
|
+
async lazyStorj() {
|
|
62
|
+
return await import('@super-protocol/uplink-nodejs');
|
|
63
|
+
}
|
|
64
|
+
async lazyAccess() {
|
|
65
|
+
if (this.access) {
|
|
66
|
+
return this.access;
|
|
67
|
+
}
|
|
68
|
+
const storj = await this.lazyStorj();
|
|
69
|
+
const uplink = new storj.Uplink();
|
|
70
|
+
this.access = await uplink.parseAccess(this.accessToken);
|
|
71
|
+
return this.access;
|
|
72
|
+
}
|
|
73
|
+
async lazyProject() {
|
|
74
|
+
if (this.project) {
|
|
75
|
+
return this.project;
|
|
76
|
+
}
|
|
77
|
+
const access = await this.lazyAccess();
|
|
78
|
+
this.project = await access.openProject();
|
|
79
|
+
return this.project;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RvcmpDcmVkZW50aWFsc01hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3N0b3JhZ2UvU3RvcmpDcmVkZW50aWFsc01hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBU0EsTUFBTSxDQUFOLElBQVksc0JBS1g7QUFMRCxXQUFZLHNCQUFzQjtJQUNoQyxtRUFBSSxDQUFBO0lBQ0oscUVBQUssQ0FBQTtJQUNMLG1FQUFJLENBQUE7SUFDSix1RUFBTSxDQUFBO0FBQ1IsQ0FBQyxFQUxXLHNCQUFzQixLQUF0QixzQkFBc0IsUUFLakM7QUFFRCxNQUFNLE9BQU8sdUJBQXVCO0lBQzFCLFdBQVcsQ0FBUztJQUNwQixNQUFNLENBQVM7SUFDZixNQUFNLENBQVU7SUFDaEIsT0FBTyxDQUFXO0lBRTFCLFlBQVksYUFBeUQ7UUFDbkUsSUFBSSxDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztJQUNyQyxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQWMsRUFBRSxRQUFnQjtRQUMzQyxPQUFPLEdBQUcsTUFBTSxJQUFJLFFBQVEsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTTtRQUNWLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELEtBQUssQ0FBQyxrQkFBa0IsQ0FDdEIsV0FBcUMsRUFDckMsTUFBYztRQUVkLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEVBQ2hFLFNBQVMsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FB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
|
|
@@ -95,7 +95,7 @@ export default class StorJStorageProvider {
|
|
|
95
95
|
for (const key in Object.keys(objects)) {
|
|
96
96
|
const value = objects[key];
|
|
97
97
|
result.push({
|
|
98
|
-
name: value.key,
|
|
98
|
+
name: value.key.substring(this.prefix.length),
|
|
99
99
|
size: value.system.content_length,
|
|
100
100
|
isFolder: value.is_prefix == 1,
|
|
101
101
|
childrenCount: value.custom.count,
|
|
@@ -116,7 +116,7 @@ export default class StorJStorageProvider {
|
|
|
116
116
|
}
|
|
117
117
|
async lazyStorj() {
|
|
118
118
|
if (!this._storj) {
|
|
119
|
-
this._storj = await
|
|
119
|
+
this._storj = await import('@super-protocol/uplink-nodejs');
|
|
120
120
|
}
|
|
121
121
|
return this._storj;
|
|
122
122
|
}
|
|
@@ -136,4 +136,4 @@ export default class StorJStorageProvider {
|
|
|
136
136
|
return this._project;
|
|
137
137
|
}
|
|
138
138
|
}
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RvcmpTdG9yYWdlUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3N0b3JhZ2UvU3RvcmpTdG9yYWdlUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVoQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFakQsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBRXJDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sb0JBQW9CO0lBQ3ZDLE1BQU0sQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUMsQ0FBQyxNQUFNO0lBRXJDLE1BQU0sQ0FBUztJQUNmLE1BQU0sQ0FBUztJQUNmLFdBQVcsQ0FBUztJQUNwQixPQUFPLENBQVU7SUFDakIsUUFBUSxDQUFXO0lBQ25CLE1BQU0sQ0FBTztJQUNiLGlCQUFpQixDQUFVO0lBRW5DLFlBQVksV0FBZ0IsRUFBRSxpQkFBMEI7UUFDdEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDaEIsTUFBTSxLQUFLLENBQUMsK0VBQStFLENBQUMsQ0FBQztRQUMvRixDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFFakIsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUNuQyxDQUFDO2FBQU0sSUFBSSxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakMscUJBQXFCO1lBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVyxD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
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import stream from 'stream';
|
|
3
|
+
import StorageObject from '../../types/storage/StorageObject.js';
|
|
4
|
+
import IStorageProvider, { DownloadConfig } from './IStorageProvider.js';
|
|
5
|
+
import { FSCredentials } from '@super-protocol/dto-js';
|
|
6
|
+
export declare class FSStorageProvider implements IStorageProvider {
|
|
7
|
+
private readonly bucket;
|
|
8
|
+
private readonly prefix;
|
|
9
|
+
constructor(credentials: FSCredentials);
|
|
10
|
+
private getFullPath;
|
|
11
|
+
private writeWithProgress;
|
|
12
|
+
uploadFile(inputStream: stream.Readable, remotePath: string, contentLength: number, progressListener?: ((total: number, current: number) => void) | undefined): Promise<void>;
|
|
13
|
+
downloadFile(remotePath: string, config: DownloadConfig, progressListener?: ((total: number, current: number) => void) | undefined): Promise<stream.Readable>;
|
|
14
|
+
deleteObject(remotePath: string): Promise<void>;
|
|
15
|
+
private ensureDirectoryExists;
|
|
16
|
+
listObjects(remotePath: string): Promise<StorageObject[]>;
|
|
17
|
+
getObjectSize(remotePath: string): Promise<number>;
|
|
18
|
+
getLastModified(remotePath: string): Promise<Date | null>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { access, constants as FS_CONSTANTS, mkdir } from 'fs/promises';
|
|
4
|
+
import { NotFoundError } from '../../errors/index.js';
|
|
5
|
+
export class FSStorageProvider {
|
|
6
|
+
bucket;
|
|
7
|
+
prefix;
|
|
8
|
+
constructor(credentials) {
|
|
9
|
+
this.bucket = credentials.bucket;
|
|
10
|
+
this.prefix = credentials.prefix;
|
|
11
|
+
}
|
|
12
|
+
getFullPath(remotePath) {
|
|
13
|
+
return path.join(this.bucket, this.prefix, remotePath);
|
|
14
|
+
}
|
|
15
|
+
writeWithProgress(inputStream, outputStream, contentLength, progressListener) {
|
|
16
|
+
let bytesWritten = 0;
|
|
17
|
+
return new Promise((resolve, reject) => {
|
|
18
|
+
outputStream.on('close', resolve).on('error', reject);
|
|
19
|
+
inputStream
|
|
20
|
+
.once('data', (chunk) => {
|
|
21
|
+
const canContinue = outputStream.write(chunk);
|
|
22
|
+
if (!canContinue) {
|
|
23
|
+
inputStream.pause();
|
|
24
|
+
outputStream.once('drain', inputStream.resume.bind(inputStream));
|
|
25
|
+
bytesWritten += chunk.length;
|
|
26
|
+
if (!!progressListener) {
|
|
27
|
+
progressListener(contentLength, bytesWritten);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
})
|
|
31
|
+
.on('end', () => {
|
|
32
|
+
outputStream.end();
|
|
33
|
+
})
|
|
34
|
+
.on('error', reject);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
async uploadFile(inputStream, remotePath, contentLength, progressListener) {
|
|
38
|
+
if (!inputStream) {
|
|
39
|
+
throw new Error('Input stream is undefined');
|
|
40
|
+
}
|
|
41
|
+
const fullPath = this.getFullPath(remotePath);
|
|
42
|
+
await this.ensureDirectoryExists(path.dirname(fullPath));
|
|
43
|
+
const outputStream = fs.createWriteStream(fullPath);
|
|
44
|
+
await this.writeWithProgress(inputStream, outputStream, contentLength, progressListener);
|
|
45
|
+
}
|
|
46
|
+
async downloadFile(remotePath, config, progressListener) {
|
|
47
|
+
const offset = config.offset ?? 0;
|
|
48
|
+
const filePath = this.getFullPath(remotePath);
|
|
49
|
+
let stats;
|
|
50
|
+
try {
|
|
51
|
+
stats = await fs.promises.stat(filePath);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
throw new NotFoundError(`File does not exist: ${filePath}`);
|
|
55
|
+
}
|
|
56
|
+
const total = offset + (config.length ?? 0) || stats.size;
|
|
57
|
+
let current = offset;
|
|
58
|
+
const readStream = fs.createReadStream(filePath, {
|
|
59
|
+
start: offset,
|
|
60
|
+
end: total,
|
|
61
|
+
});
|
|
62
|
+
readStream.on('data', (chunk) => {
|
|
63
|
+
current += chunk.length;
|
|
64
|
+
if (progressListener) {
|
|
65
|
+
progressListener(total, current);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
return readStream;
|
|
69
|
+
}
|
|
70
|
+
async deleteObject(remotePath) {
|
|
71
|
+
await fs.promises.rm(this.getFullPath(remotePath), { force: true });
|
|
72
|
+
}
|
|
73
|
+
async ensureDirectoryExists(directory, createIfNotExists = true) {
|
|
74
|
+
try {
|
|
75
|
+
await access(directory, FS_CONSTANTS.F_OK);
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
if (createIfNotExists) {
|
|
79
|
+
await mkdir(directory, { recursive: true });
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
throw new NotFoundError(`Directory does not exist: ${directory}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
async listObjects(remotePath) {
|
|
87
|
+
const fullPath = this.getFullPath(remotePath);
|
|
88
|
+
await this.ensureDirectoryExists(fullPath);
|
|
89
|
+
const dirents = await fs.promises.readdir(fullPath, { withFileTypes: true });
|
|
90
|
+
return Promise.all(dirents.map(async (dirent) => {
|
|
91
|
+
const direntPath = path.join(fullPath, dirent.name);
|
|
92
|
+
const direntStat = await fs.promises.stat(direntPath);
|
|
93
|
+
return {
|
|
94
|
+
name: dirent.name,
|
|
95
|
+
size: direntStat.size,
|
|
96
|
+
isFolder: dirent.isDirectory(),
|
|
97
|
+
createdAt: direntStat.birthtime,
|
|
98
|
+
...(dirent.isDirectory() && {
|
|
99
|
+
childrenCount: (await fs.promises.readdir(direntPath)).length,
|
|
100
|
+
}),
|
|
101
|
+
};
|
|
102
|
+
}));
|
|
103
|
+
}
|
|
104
|
+
async getObjectSize(remotePath) {
|
|
105
|
+
const fileStat = await fs.promises.stat(this.getFullPath(remotePath));
|
|
106
|
+
return fileStat.size;
|
|
107
|
+
}
|
|
108
|
+
async getLastModified(remotePath) {
|
|
109
|
+
const fileStat = await fs.promises.stat(this.getFullPath(remotePath));
|
|
110
|
+
return fileStat.mtime;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMtc3RvcmFnZS1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvc3RvcmFnZS9mcy1zdG9yYWdlLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUk3QixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsSUFBSSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RCxNQUFNLE9BQU8saUJBQWlCO0lBQ1gsTUFBTSxDQUFTO0lBQ2YsTUFBTSxDQUFTO0lBRWhDLFlBQVksV0FBMEI7UUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUNuQyxDQUFDO0lBRU8sV0FBVyxDQUFDLFVBQWtCO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVPLGlCQUFpQixDQUN2QixXQUE0QixFQUM1QixZQUE2QixFQUM3QixhQUFxQixFQUNyQixnQkFBMkQ7UUFFM0QsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBRXJCLE9BQU8sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDM0MsWUFBWSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN0RCxXQUFXO2lCQUNSLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FB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
|