@super-protocol/sdk-js 2.2.0-beta.55 → 2.2.0-beta.57
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/index.d.ts +1 -0
- package/dist/cjs/index.js +5 -2
- package/dist/cjs/providers/storage/S3StorageProvider.d.ts +2 -0
- package/dist/cjs/providers/storage/S3StorageProvider.js +27 -14
- package/dist/cjs/providers/storage/StorjCredentialsManager.d.ts +25 -0
- package/dist/cjs/providers/storage/StorjCredentialsManager.js +107 -0
- package/dist/mjs/index.d.ts +1 -0
- package/dist/mjs/index.js +2 -1
- package/dist/mjs/providers/storage/S3StorageProvider.d.ts +2 -0
- package/dist/mjs/providers/storage/S3StorageProvider.js +27 -14
- package/dist/mjs/providers/storage/StorjCredentialsManager.d.ts +25 -0
- package/dist/mjs/providers/storage/StorjCredentialsManager.js +80 -0
- package/package.json +1 -1
package/dist/cjs/index.d.ts
CHANGED
|
@@ -65,6 +65,7 @@ export { default as StorageAccess } from './types/storage/StorageAccess.js';
|
|
|
65
65
|
export { default as getStorageProvider } from './providers/storage/getStorageProvider.js';
|
|
66
66
|
export { default as IStorageProvider } from './providers/storage/IStorageProvider.js';
|
|
67
67
|
export { parseStorageCredentials } from './providers/storage/parseStorageCredentials.js';
|
|
68
|
+
export { CredentialsPermissions, StorjCredentialsManager, } from './providers/storage/StorjCredentialsManager.js';
|
|
68
69
|
export * from './utils/CryptoKeysTransformer.js';
|
|
69
70
|
export * as helpers from './utils/helpers/index.js';
|
|
70
71
|
export * as constants from './constants.js';
|
package/dist/cjs/index.js
CHANGED
|
@@ -29,7 +29,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
29
29
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
30
30
|
};
|
|
31
31
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
-
exports.FetchTransport = exports.AxiosTransport = exports.BrowserEventProvider = exports.NodeEventProvider = exports.Analytics = exports.TeeBlockVerifier = exports.QuoteValidator = exports.TeeSgxParser = exports.Web3TransactionRevertedByEvmError = exports.constants = exports.helpers = exports.parseStorageCredentials = exports.getStorageProvider = exports.ContentWriterType = exports.StorageContentWriter = exports.CacheEvents = exports.StorageAdapter = exports.StorageKeyValueAdapter = exports.StorageMetadataReader = exports.StorjAdapter = exports.ChunkedStorageProvider = exports.TCB = exports.Offer = exports.TeeOffer = exports.Provider = exports.Order = exports.SecretRequests = exports.OffersStorageRequests = exports.OffersStorageAllocated = exports.OfferResources = exports.LoaderSecretsPublicKeys = exports.LoaderSessions = exports.Deposits = exports.Marks = exports.Superpro = exports.SuperproToken = exports.ProviderRegistry = exports.TeeOffers = exports.Offers = exports.ActiveOffers = exports.ActiveOrders = exports.Orders = exports.Consensus = exports.RIGenerator = exports.TIIGenerator = exports.Crypto = exports.BlockchainEventsListener = exports.BlockchainConnector = void 0;
|
|
32
|
+
exports.FetchTransport = exports.AxiosTransport = exports.BrowserEventProvider = exports.NodeEventProvider = exports.Analytics = exports.TeeBlockVerifier = exports.QuoteValidator = exports.TeeSgxParser = exports.Web3TransactionRevertedByEvmError = exports.constants = exports.helpers = exports.StorjCredentialsManager = exports.CredentialsPermissions = exports.parseStorageCredentials = exports.getStorageProvider = exports.ContentWriterType = exports.StorageContentWriter = exports.CacheEvents = exports.StorageAdapter = exports.StorageKeyValueAdapter = exports.StorageMetadataReader = exports.StorjAdapter = exports.ChunkedStorageProvider = exports.TCB = exports.Offer = exports.TeeOffer = exports.Provider = exports.Order = exports.SecretRequests = exports.OffersStorageRequests = exports.OffersStorageAllocated = exports.OfferResources = exports.LoaderSecretsPublicKeys = exports.LoaderSessions = exports.Deposits = exports.Marks = exports.Superpro = exports.SuperproToken = exports.ProviderRegistry = exports.TeeOffers = exports.Offers = exports.ActiveOffers = exports.ActiveOrders = exports.Orders = exports.Consensus = exports.RIGenerator = exports.TIIGenerator = exports.Crypto = exports.BlockchainEventsListener = exports.BlockchainConnector = void 0;
|
|
33
33
|
var BlockchainConnector_js_1 = require("./connectors/BlockchainConnector.js");
|
|
34
34
|
Object.defineProperty(exports, "BlockchainConnector", { enumerable: true, get: function () { return __importDefault(BlockchainConnector_js_1).default; } });
|
|
35
35
|
__exportStar(require("./connectors/BlockchainConnector.js"), exports);
|
|
@@ -128,6 +128,9 @@ var getStorageProvider_js_1 = require("./providers/storage/getStorageProvider.js
|
|
|
128
128
|
Object.defineProperty(exports, "getStorageProvider", { enumerable: true, get: function () { return __importDefault(getStorageProvider_js_1).default; } });
|
|
129
129
|
var parseStorageCredentials_js_1 = require("./providers/storage/parseStorageCredentials.js");
|
|
130
130
|
Object.defineProperty(exports, "parseStorageCredentials", { enumerable: true, get: function () { return parseStorageCredentials_js_1.parseStorageCredentials; } });
|
|
131
|
+
var StorjCredentialsManager_js_1 = require("./providers/storage/StorjCredentialsManager.js");
|
|
132
|
+
Object.defineProperty(exports, "CredentialsPermissions", { enumerable: true, get: function () { return StorjCredentialsManager_js_1.CredentialsPermissions; } });
|
|
133
|
+
Object.defineProperty(exports, "StorjCredentialsManager", { enumerable: true, get: function () { return StorjCredentialsManager_js_1.StorjCredentialsManager; } });
|
|
131
134
|
__exportStar(require("./utils/CryptoKeysTransformer.js"), exports);
|
|
132
135
|
exports.helpers = __importStar(require("./utils/helpers/index.js"));
|
|
133
136
|
exports.constants = __importStar(require("./constants.js"));
|
|
@@ -153,4 +156,4 @@ Object.defineProperty(exports, "AxiosTransport", { enumerable: true, get: functi
|
|
|
153
156
|
var FetchTransport_js_1 = require("./analytics/transports/FetchTransport.js");
|
|
154
157
|
Object.defineProperty(exports, "FetchTransport", { enumerable: true, get: function () { return __importDefault(FetchTransport_js_1).default; } });
|
|
155
158
|
__exportStar(require("./utils/cache/index.js"), exports);
|
|
156
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
159
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4RUFBcUY7QUFBNUUsOElBQUEsT0FBTyxPQUF1QjtBQUV2QyxzRUFBb0Q7QUFJcEQsd0ZBQStGO0FBQXRGLHdKQUFBLE9BQU8sT0FBNEI7QUFFNUMsOENBQXNEO0FBQTdDLG1IQUFBLE9BQU8sT0FBVTtBQUMxQixvREFBa0M7QUFFbEMscURBQTREO0FBQW5ELGdJQUFBLE9BQU8sT0FBZ0I7QUFDaEMsb0RBQWtDO0FBRWxDLG1EQUEwRDtBQUFqRCw4SEFBQSxPQUFPLE9BQWU7QUFDL0Isb0RBQWtDO0FBRWxDLDREQUFtRTtBQUExRCwwSEFBQSxPQUFPLE9BQWE7QUFDN0IsOERBQTRDO0FBRTVDLHNEQUE2RDtBQUFwRCxvSEFBQSxPQUFPLE9BQVU7QUFDMUIsMkRBQXlDO0FBRXpDLGtFQUF5RTtBQUFoRSxnSUFBQSxPQUFPLE9BQWdCO0FBQ2hDLGlFQUErQztBQUUvQyxrRUFBeUU7QUFBaEUsZ0lBQUEsT0FBTyxPQUFnQjtBQUNoQyxpRUFBK0M7QUFFL0Msc0RBQTZEO0FBQXBELG9IQUFBLE9BQU8sT0FBVTtBQUMxQiwyREFBeUM7QUFFekMsNERBQW1FO0FBQTFELDBIQUFBLE9BQU8sT0FBYTtBQUM3Qiw4REFBNEM7QUFFNUMsMEVBQWlGO0FBQXhFLHdJQUFBLE9BQU8sT0FBb0I7QUFDcEMscUVBQW1EO0FBRW5ELG9FQUEyRTtBQUFsRSxrSUFBQSxPQUFPLE9BQWlCO0FBQ2pDLGtFQUFnRDtBQUVoRCwwREFBaUU7QUFBeEQsd0hBQUEsT0FBTyxPQUFZO0FBQzVCLDZEQUEyQztBQUUzQyxvREFBMkQ7QUFBbEQsa0hBQUEsT0FBTyxPQUFTO0FBQ3pCLDBEQUF3QztBQUV4QywwREFBaUU7QUFBeEQsd0hBQUEsT0FBTyxPQUFZO0FBQzVCLDZEQUEyQztBQUUzQyxzRUFBNkU7QUFBcEUsb0lBQUEsT0FBTyxPQUFrQjtBQUNsQyxtRUFBaUQ7QUFFakQsd0ZBQStGO0FBQXRGLHNKQUFBLE9BQU8sT0FBMkI7QUFDM0MsNEVBQTBEO0FBRTFELHNFQUE2RTtBQUFwRSxvSUFBQSxPQUFPLE9BQWtCO0FBQ2xDLG1FQUFpRDtBQUVqRCxzRkFBNkY7QUFBcEYsb0pBQUEsT0FBTyxPQUEwQjtBQUMxQywyRUFBeUQ7QUFFekQsb0ZBQTJGO0FBQWxGLGtKQUFBLE9BQU8sT0FBeUI7QUFDekMsMEVBQXdEO0FBRXhELHNFQUE2RTtBQUFwRSxvSUFBQSxPQUFPLE9BQWtCO0FBQ2xDLG1FQUFpRDtBQUVqRCw4Q0FBcUQ7QUFBNUMsa0hBQUEsT0FBTyxPQUFTO0FBQ3pCLG9EQUFrQztBQUVsQyxvREFBMkQ7QUFBbEQsd0hBQUEsT0FBTyxPQUFZO0FBQzVCLHVEQUFxQztBQUVyQyxvREFBMkQ7QUFBbEQsd0hBQUEsT0FBTyxPQUFZO0FBQzVCLHVEQUFxQztBQUVyQyw4Q0FBcUQ7QUFBNUMsa0hBQUEsT0FBTyxPQUFTO0FBQ3pCLG9EQUFrQztBQUVsQywwQ0FBaUQ7QUFBeEMsOEdBQUEsT0FBTyxPQUFPO0FBQ3ZCLGtEQUFnQztBQUVoQyxtREFBaUM7QUFFakMseUdBQXlGO0FBQ3pGLHVFQUEyRjtBQUFsRixnSUFBQSxPQUFPLE9BQWdCO0FBQ2hDLHlGQUdzRDtBQUZwRCxrSkFBQSxPQUFPLE9BQXlCO0FBR2xDLDJGQUFrRztBQUF6RixvSkFBQSxPQUFPLE9BQTBCO0FBQzFDLDJFQUkrQztBQUg3QyxvSUFBQSxPQUFPLE9BQWtCO0FBQ3pCLGdIQUFBLFdBQVcsT0FBQTtBQUdiLHVGQUlxRDtBQUhuRCxnSkFBQSxPQUFPLE9BQXdCO0FBRS9CLDRIQUFBLGlCQUFpQixPQUFBO0FBTW5CLG1GQUEwRjtBQUFqRiw0SUFBQSxPQUFPLE9BQXNCO0FBRXRDLDZGQUF5RjtBQUFoRixxSUFBQSx1QkFBdUIsT0FBQTtBQUNoQyw2RkFHd0Q7QUFGdEQsb0lBQUEsc0JBQXNCLE9BQUE7QUFDdEIscUlBQUEsdUJBQXVCLE9BQUE7QUFHekIsbUVBQWlEO0FBQ2pELG9FQUFvRDtBQUNwRCw0REFBNEM7QUFFNUMscURBQXlFO0FBQWhFLGlJQUFBLGlDQUFpQyxPQUFBO0FBRTFDLDBCQUF3QjtBQUV4Qix1REFBb0Q7QUFBM0MsOEdBQUEsWUFBWSxPQUFBO0FBQ3JCLDZEQUF5RDtBQUFoRCxtSEFBQSxjQUFjLE9BQUE7QUFDdkIsb0RBQWtDO0FBQ2xDLGlFQUE2RDtBQUFwRCx1SEFBQSxnQkFBZ0IsT0FBQTtBQUV6Qix1REFBcUM7QUFDckMseURBQWdFO0FBQXZELDBIQUFBLE9BQU8sT0FBYTtBQUM3Qix3RkFBK0Y7QUFBdEYsMElBQUEsT0FBTyxPQUFxQjtBQUNyQyw4RkFBcUc7QUFBNUYsZ0pBQUEsT0FBTyxPQUF3QjtBQUN4Qyw4RUFBcUY7QUFBNUUsb0lBQUEsT0FBTyxPQUFrQjtBQUNsQyw4RUFBcUY7QUFBNUUsb0lBQUEsT0FBTyxPQUFrQjtBQUNsQyx5REFBdUMifQ==
|
|
@@ -9,9 +9,11 @@ export type S3ClientConfig = S3Credentials & {
|
|
|
9
9
|
export declare class S3StorageProvider implements IStorageProvider {
|
|
10
10
|
private readonly s3Client;
|
|
11
11
|
private readonly bucket;
|
|
12
|
+
private readonly prefix;
|
|
12
13
|
private readonly multipartChunkSizeInBytes;
|
|
13
14
|
private readonly defaultRegion;
|
|
14
15
|
constructor(storageAccess: S3ClientConfig);
|
|
16
|
+
private applyPrefix;
|
|
15
17
|
uploadFile(inputStream: Readable, remotePath: string, contentLength: number, progressListener?: ((total: number, current: number) => void) | undefined): Promise<void>;
|
|
16
18
|
private multipartUpload;
|
|
17
19
|
deleteObject(remotePath: string): Promise<void>;
|
|
@@ -7,10 +7,11 @@ const getStreamChunks_js_1 = require("../../utils/helpers/getStreamChunks.js");
|
|
|
7
7
|
class S3StorageProvider {
|
|
8
8
|
s3Client;
|
|
9
9
|
bucket;
|
|
10
|
+
prefix;
|
|
10
11
|
multipartChunkSizeInBytes = 64 * 1024 * 1024; // 64MB
|
|
11
12
|
defaultRegion = 'us-east-1';
|
|
12
13
|
constructor(storageAccess) {
|
|
13
|
-
const { accessKeyId, secretKey, endpoint, bucket, region } = storageAccess;
|
|
14
|
+
const { accessKeyId, secretKey, endpoint, bucket, region, prefix } = storageAccess;
|
|
14
15
|
if (!accessKeyId)
|
|
15
16
|
throw new Error('Access key id is undefined');
|
|
16
17
|
if (!secretKey)
|
|
@@ -19,7 +20,11 @@ class S3StorageProvider {
|
|
|
19
20
|
throw new Error('Endpoint is undefined');
|
|
20
21
|
if (!bucket)
|
|
21
22
|
throw new Error('Bucket is undefined');
|
|
23
|
+
if (prefix.startsWith('/') || !prefix.endsWith('/')) {
|
|
24
|
+
throw new Error(`Prefix is invalid: it must not start with "/" and must end with "/" (prefix=${prefix})`);
|
|
25
|
+
}
|
|
22
26
|
this.bucket = bucket;
|
|
27
|
+
this.prefix = prefix;
|
|
23
28
|
this.s3Client = new client_s3_1.S3Client({
|
|
24
29
|
credentials: {
|
|
25
30
|
accessKeyId,
|
|
@@ -30,16 +35,20 @@ class S3StorageProvider {
|
|
|
30
35
|
forcePathStyle: true,
|
|
31
36
|
});
|
|
32
37
|
}
|
|
38
|
+
applyPrefix(key) {
|
|
39
|
+
return `${this.prefix}${key}`;
|
|
40
|
+
}
|
|
33
41
|
async uploadFile(inputStream, remotePath, contentLength, progressListener) {
|
|
34
42
|
// For performance & cost optimization
|
|
35
43
|
// https://docs.storj.io/dcs/api-reference/s3-compatible-gateway/multipart-upload/multipart-part-size
|
|
44
|
+
const key = this.applyPrefix(remotePath);
|
|
36
45
|
if (contentLength >= this.multipartChunkSizeInBytes) {
|
|
37
|
-
return this.multipartUpload(inputStream,
|
|
46
|
+
return this.multipartUpload(inputStream, key, contentLength, progressListener);
|
|
38
47
|
}
|
|
39
48
|
const putObjectCommand = new client_s3_1.PutObjectCommand({
|
|
40
49
|
Body: inputStream,
|
|
41
50
|
Bucket: this.bucket,
|
|
42
|
-
Key:
|
|
51
|
+
Key: key,
|
|
43
52
|
ContentLength: contentLength,
|
|
44
53
|
});
|
|
45
54
|
progressListener?.(contentLength, 0);
|
|
@@ -47,9 +56,10 @@ class S3StorageProvider {
|
|
|
47
56
|
progressListener?.(contentLength, contentLength);
|
|
48
57
|
}
|
|
49
58
|
async multipartUpload(inputStream, remotePath, contentLength, progressListener) {
|
|
59
|
+
const key = this.applyPrefix(remotePath);
|
|
50
60
|
const createMultipartUploadCommand = new client_s3_1.CreateMultipartUploadCommand({
|
|
51
61
|
Bucket: this.bucket,
|
|
52
|
-
Key:
|
|
62
|
+
Key: key,
|
|
53
63
|
});
|
|
54
64
|
const multipart = await this.s3Client.send(createMultipartUploadCommand);
|
|
55
65
|
if (!multipart.UploadId) {
|
|
@@ -63,7 +73,7 @@ class S3StorageProvider {
|
|
|
63
73
|
const uploadPartCommand = new client_s3_1.UploadPartCommand({
|
|
64
74
|
Body: streamChunk.data,
|
|
65
75
|
Bucket: this.bucket,
|
|
66
|
-
Key:
|
|
76
|
+
Key: key,
|
|
67
77
|
UploadId: uploadId,
|
|
68
78
|
PartNumber: streamChunk.partNumber,
|
|
69
79
|
});
|
|
@@ -79,7 +89,7 @@ class S3StorageProvider {
|
|
|
79
89
|
}
|
|
80
90
|
const completeMultipartUploadCommand = new client_s3_1.CompleteMultipartUploadCommand({
|
|
81
91
|
Bucket: this.bucket,
|
|
82
|
-
Key:
|
|
92
|
+
Key: key,
|
|
83
93
|
UploadId: multipart.UploadId,
|
|
84
94
|
MultipartUpload: { Parts: parts },
|
|
85
95
|
});
|
|
@@ -88,7 +98,7 @@ class S3StorageProvider {
|
|
|
88
98
|
catch (uploadingError) {
|
|
89
99
|
const abortMultipartUploadCommand = new client_s3_1.AbortMultipartUploadCommand({
|
|
90
100
|
Bucket: this.bucket,
|
|
91
|
-
Key:
|
|
101
|
+
Key: key,
|
|
92
102
|
UploadId: multipart.UploadId,
|
|
93
103
|
});
|
|
94
104
|
await this.s3Client.send(abortMultipartUploadCommand);
|
|
@@ -96,16 +106,18 @@ class S3StorageProvider {
|
|
|
96
106
|
}
|
|
97
107
|
}
|
|
98
108
|
async deleteObject(remotePath) {
|
|
109
|
+
const key = this.applyPrefix(remotePath);
|
|
99
110
|
const deleteObjectCommand = new client_s3_1.DeleteObjectCommand({
|
|
100
111
|
Bucket: this.bucket,
|
|
101
|
-
Key:
|
|
112
|
+
Key: key,
|
|
102
113
|
});
|
|
103
114
|
await this.s3Client.send(deleteObjectCommand);
|
|
104
115
|
}
|
|
105
116
|
async downloadFile(remotePath, config, progressListener) {
|
|
117
|
+
const key = this.applyPrefix(remotePath);
|
|
106
118
|
const getObjectParams = {
|
|
107
119
|
Bucket: this.bucket,
|
|
108
|
-
Key:
|
|
120
|
+
Key: key,
|
|
109
121
|
};
|
|
110
122
|
if (config) {
|
|
111
123
|
const start = config.offset || 0;
|
|
@@ -128,16 +140,16 @@ class S3StorageProvider {
|
|
|
128
140
|
return getObjectResult.Body;
|
|
129
141
|
}
|
|
130
142
|
async listObjects(remotePath) {
|
|
131
|
-
const
|
|
143
|
+
const key = this.applyPrefix(remotePath.endsWith('/') || remotePath === '' ? remotePath : `${remotePath}/`);
|
|
132
144
|
const listObjectsCommand = new client_s3_1.ListObjectsV2Command({
|
|
133
145
|
Bucket: this.bucket,
|
|
134
|
-
Prefix:
|
|
146
|
+
Prefix: key,
|
|
135
147
|
});
|
|
136
148
|
const listObjects = await this.s3Client.send(listObjectsCommand);
|
|
137
149
|
let result = [];
|
|
138
150
|
if (listObjects.Contents) {
|
|
139
151
|
result = listObjects.Contents.map((object) => ({
|
|
140
|
-
name: object.Key || '',
|
|
152
|
+
name: object.Key?.replace(this.prefix, '') || '',
|
|
141
153
|
createdAt: object.LastModified || new Date(),
|
|
142
154
|
size: object.Size || 0,
|
|
143
155
|
}));
|
|
@@ -145,9 +157,10 @@ class S3StorageProvider {
|
|
|
145
157
|
return result;
|
|
146
158
|
}
|
|
147
159
|
async getMetadata(remotePath) {
|
|
160
|
+
const key = this.applyPrefix(remotePath);
|
|
148
161
|
const headObjectCommand = new client_s3_1.HeadObjectCommand({
|
|
149
162
|
Bucket: this.bucket,
|
|
150
|
-
Key:
|
|
163
|
+
Key: key,
|
|
151
164
|
});
|
|
152
165
|
return await this.s3Client.send(headObjectCommand);
|
|
153
166
|
}
|
|
@@ -167,4 +180,4 @@ class S3StorageProvider {
|
|
|
167
180
|
}
|
|
168
181
|
}
|
|
169
182
|
exports.S3StorageProvider = S3StorageProvider;
|
|
170
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
183
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUzNTdG9yYWdlUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3N0b3JhZ2UvUzNTdG9yYWdlUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsa0RBYzRCO0FBRTVCLG1DQUFrQztBQUVsQywrRUFBeUU7QUFPekUsTUFBYSxpQkFBaUI7SUFDWCxRQUFRLENBQVc7SUFDbkIsTUFBTSxDQUFTO0lBQ2YsTUFBTSxDQUFTO0lBQ2YseUJBQXlCLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPO0lBQ3JELGFBQWEsR0FBRyxXQUFXLENBQUM7SUFFN0MsWUFBWSxhQUE2QjtRQUN2QyxNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxhQUFhLENBQUM7UUFDbkYsSUFBSSxDQUFDLFdBQVc7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLFNBQVM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFFBQVE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLE1BQU07WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDcEQsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BELE1BQU0sSUFBSSxLQUFLLENBQ2IsK0VBQStFLE1BQU0sR0FBRyxDQUN6RixDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUks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
|
|
@@ -0,0 +1,25 @@
|
|
|
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 _uplink;
|
|
12
|
+
private _access?;
|
|
13
|
+
private _project?;
|
|
14
|
+
constructor(storageConfig: Pick<StorjCredentials, 'token' | 'bucket'>);
|
|
15
|
+
getStorageId(entity: string, entityId: string): string;
|
|
16
|
+
create(): Promise<void>;
|
|
17
|
+
acquireCredentials(permissions: CredentialsPermissions[], prefix: string): Promise<StringifiedCredentials<StorjCredentials>>;
|
|
18
|
+
acquireS3Credentials(permissions: CredentialsPermissions[], prefix: string): Promise<S3Credentials>;
|
|
19
|
+
getS3Credentials(stringifiedCredentials: StringifiedCredentials): Promise<S3Credentials>;
|
|
20
|
+
getS3Credentials(storjCredentials: StorjCredentials): Promise<S3Credentials>;
|
|
21
|
+
revokeCredentials(credentialString: StringifiedCredentials<StorjCredentials>): Promise<void>;
|
|
22
|
+
private parseAccess;
|
|
23
|
+
private lazyAccess;
|
|
24
|
+
private lazyProject;
|
|
25
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.StorjCredentialsManager = exports.CredentialsPermissions = void 0;
|
|
27
|
+
const storj = __importStar(require("@super-protocol/uplink-nodejs"));
|
|
28
|
+
var CredentialsPermissions;
|
|
29
|
+
(function (CredentialsPermissions) {
|
|
30
|
+
CredentialsPermissions[CredentialsPermissions["read"] = 0] = "read";
|
|
31
|
+
CredentialsPermissions[CredentialsPermissions["write"] = 1] = "write";
|
|
32
|
+
CredentialsPermissions[CredentialsPermissions["list"] = 2] = "list";
|
|
33
|
+
CredentialsPermissions[CredentialsPermissions["delete"] = 3] = "delete";
|
|
34
|
+
})(CredentialsPermissions || (exports.CredentialsPermissions = CredentialsPermissions = {}));
|
|
35
|
+
class StorjCredentialsManager {
|
|
36
|
+
accessToken;
|
|
37
|
+
bucket;
|
|
38
|
+
_uplink;
|
|
39
|
+
_access;
|
|
40
|
+
_project;
|
|
41
|
+
constructor(storageConfig) {
|
|
42
|
+
this.accessToken = storageConfig.token;
|
|
43
|
+
this.bucket = storageConfig.bucket;
|
|
44
|
+
this._uplink = new storj.Uplink();
|
|
45
|
+
}
|
|
46
|
+
getStorageId(entity, entityId) {
|
|
47
|
+
return `${entity}_${entityId}`;
|
|
48
|
+
}
|
|
49
|
+
async create() {
|
|
50
|
+
const project = await this.lazyProject();
|
|
51
|
+
await project.ensureBucket(this.bucket);
|
|
52
|
+
}
|
|
53
|
+
async acquireCredentials(permissions, prefix) {
|
|
54
|
+
const readPerm = permissions.includes(CredentialsPermissions.read), writePerm = permissions.includes(CredentialsPermissions.write), listPerm = permissions.includes(CredentialsPermissions.list), deletePerm = permissions.includes(CredentialsPermissions.delete);
|
|
55
|
+
const perm = new storj.Permission(readPerm, writePerm, deletePerm, listPerm, 0, 0);
|
|
56
|
+
const sharePrefix = new storj.SharePrefix(this.bucket, prefix + '/');
|
|
57
|
+
const access = await this.lazyAccess();
|
|
58
|
+
const share = await access.share(perm, [sharePrefix], 1);
|
|
59
|
+
return JSON.stringify({
|
|
60
|
+
bucket: this.bucket,
|
|
61
|
+
prefix: prefix + '/',
|
|
62
|
+
token: await share.serialize(),
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
async acquireS3Credentials(permissions, prefix) {
|
|
66
|
+
const storjCreds = await this.acquireCredentials(permissions, prefix);
|
|
67
|
+
return this.getS3Credentials(storjCreds);
|
|
68
|
+
}
|
|
69
|
+
async getS3Credentials(creds) {
|
|
70
|
+
const storjCredentials = typeof creds === 'string' ? JSON.parse(creds) : creds;
|
|
71
|
+
const access = await this.lazyAccess();
|
|
72
|
+
const s3Credentials = await access.registerS3Credentials(storjCredentials.token);
|
|
73
|
+
return {
|
|
74
|
+
accessKeyId: s3Credentials.accessKeyId,
|
|
75
|
+
secretKey: s3Credentials.secretKey,
|
|
76
|
+
endpoint: s3Credentials.endpoint,
|
|
77
|
+
bucket: storjCredentials.bucket,
|
|
78
|
+
prefix: storjCredentials.prefix,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
async revokeCredentials(credentialString) {
|
|
82
|
+
const credentials = JSON.parse(credentialString);
|
|
83
|
+
const access = await this.parseAccess(credentials.token);
|
|
84
|
+
const project = await this.lazyProject();
|
|
85
|
+
await project.revokeAccess(access);
|
|
86
|
+
}
|
|
87
|
+
parseAccess(access) {
|
|
88
|
+
return this._uplink.parseAccess(access);
|
|
89
|
+
}
|
|
90
|
+
async lazyAccess() {
|
|
91
|
+
if (this._access) {
|
|
92
|
+
return this._access;
|
|
93
|
+
}
|
|
94
|
+
this._access = await this.parseAccess(this.accessToken);
|
|
95
|
+
return this._access;
|
|
96
|
+
}
|
|
97
|
+
async lazyProject() {
|
|
98
|
+
if (this._project) {
|
|
99
|
+
return this._project;
|
|
100
|
+
}
|
|
101
|
+
const access = await this.lazyAccess();
|
|
102
|
+
this._project = await access.openProject();
|
|
103
|
+
return this._project;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
exports.StorjCredentialsManager = StorjCredentialsManager;
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RvcmpDcmVkZW50aWFsc01hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3N0b3JhZ2UvU3RvcmpDcmVkZW50aWFsc01hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFLQSxxRUFBdUQ7QUFFdkQsSUFBWSxzQkFLWDtBQUxELFdBQVksc0JBQXNCO0lBQ2hDLG1FQUFJLENBQUE7SUFDSixxRUFBSyxDQUFBO0lBQ0wsbUVBQUksQ0FBQTtJQUNKLHVFQUFNLENBQUE7QUFDUixDQUFDLEVBTFcsc0JBQXNCLHNDQUF0QixzQkFBc0IsUUFLakM7QUFFRCxNQUFhLHVCQUF1QjtJQUMxQixXQUFXLENBQVM7SUFDcEIsTUFBTSxDQUFTO0lBQ2YsT0FBTyxDQUFlO0lBQ3RCLE9BQU8sQ0FBVTtJQUNqQixRQUFRLENBQVc7SUFFM0IsWUFBWSxhQUF5RDtRQUNuRSxJQUFJLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFDdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO1FBQ25DLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFjLEVBQUUsUUFBZ0I7UUFDM0MsT0FBTyxHQUFHLE1BQU0sSUFBSSxRQUFRLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU07UUFDVixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QyxNQUFNLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQ3RCLFdBQXFDLEVBQ3JDLE1BQWM7UUFFZCxNQUFNLFFBQVEsR0FBRyxX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
|
package/dist/mjs/index.d.ts
CHANGED
|
@@ -65,6 +65,7 @@ export { default as StorageAccess } from './types/storage/StorageAccess.js';
|
|
|
65
65
|
export { default as getStorageProvider } from './providers/storage/getStorageProvider.js';
|
|
66
66
|
export { default as IStorageProvider } from './providers/storage/IStorageProvider.js';
|
|
67
67
|
export { parseStorageCredentials } from './providers/storage/parseStorageCredentials.js';
|
|
68
|
+
export { CredentialsPermissions, StorjCredentialsManager, } from './providers/storage/StorjCredentialsManager.js';
|
|
68
69
|
export * from './utils/CryptoKeysTransformer.js';
|
|
69
70
|
export * as helpers from './utils/helpers/index.js';
|
|
70
71
|
export * as constants from './constants.js';
|
package/dist/mjs/index.js
CHANGED
|
@@ -60,6 +60,7 @@ export { default as StorageAdapter, CacheEvents, } from './providers/storage/Sto
|
|
|
60
60
|
export { default as StorageContentWriter, ContentWriterType, } from './providers/storage/StorageContentWriter.js';
|
|
61
61
|
export { default as getStorageProvider } from './providers/storage/getStorageProvider.js';
|
|
62
62
|
export { parseStorageCredentials } from './providers/storage/parseStorageCredentials.js';
|
|
63
|
+
export { CredentialsPermissions, StorjCredentialsManager, } from './providers/storage/StorjCredentialsManager.js';
|
|
63
64
|
export * from './utils/CryptoKeysTransformer.js';
|
|
64
65
|
export * as helpers from './utils/helpers/index.js';
|
|
65
66
|
export * as constants from './constants.js';
|
|
@@ -76,4 +77,4 @@ export { default as BrowserEventProvider } from './analytics/eventProviders/Brow
|
|
|
76
77
|
export { default as AxiosTransport } from './analytics/transports/AxiosTransport.js';
|
|
77
78
|
export { default as FetchTransport } from './analytics/transports/FetchTransport.js';
|
|
78
79
|
export * from './utils/cache/index.js';
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sSUFBSSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXJGLGNBQWMscUNBQXFDLENBQUM7QUFJcEQsT0FBTyxFQUFFLE9BQU8sSUFBSSx3QkFBd0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRS9GLE9BQU8sRUFBRSxPQUFPLElBQUksTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsY0FBYyxtQkFBbUIsQ0FBQztBQUVsQyxPQUFPLEVBQUUsT0FBTyxJQUFJLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzVELGNBQWMsbUJBQW1CLENBQUM7QUFFbEMsT0FBTyxFQUFFLE9BQU8sSUFBSSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxRCxjQUFjLG1CQUFtQixDQUFDO0FBRWxDLE9BQU8sRUFBRSxPQUFPLElBQUksU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkUsY0FBYyw2QkFBNkIsQ0FBQztBQUU1QyxPQUFPLEVBQUUsT0FBTyxJQUFJLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdELGNBQWMsMEJBQTBCLENBQUM7QUFFekMsT0FBTyxFQUFFLE9BQU8sSUFBSSxZQUFZLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RSxjQUFjLGdDQUFnQyxDQUFDO0FBRS9DLE9BQU8sRUFBRSxPQUFPLElBQUksWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDekUsY0FBYyxnQ0FBZ0MsQ0FBQztBQUUvQyxPQUFPLEVBQUUsT0FBTyxJQUFJLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdELGNBQWMsMEJBQTBCLENBQUM7QUFFekMsT0FBTyxFQUFFLE9BQU8sSUFBSSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNu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
|
|
@@ -9,9 +9,11 @@ export type S3ClientConfig = S3Credentials & {
|
|
|
9
9
|
export declare class S3StorageProvider implements IStorageProvider {
|
|
10
10
|
private readonly s3Client;
|
|
11
11
|
private readonly bucket;
|
|
12
|
+
private readonly prefix;
|
|
12
13
|
private readonly multipartChunkSizeInBytes;
|
|
13
14
|
private readonly defaultRegion;
|
|
14
15
|
constructor(storageAccess: S3ClientConfig);
|
|
16
|
+
private applyPrefix;
|
|
15
17
|
uploadFile(inputStream: Readable, remotePath: string, contentLength: number, progressListener?: ((total: number, current: number) => void) | undefined): Promise<void>;
|
|
16
18
|
private multipartUpload;
|
|
17
19
|
deleteObject(remotePath: string): Promise<void>;
|
|
@@ -4,10 +4,11 @@ import { getStreamChunks } from '../../utils/helpers/getStreamChunks.js';
|
|
|
4
4
|
export class S3StorageProvider {
|
|
5
5
|
s3Client;
|
|
6
6
|
bucket;
|
|
7
|
+
prefix;
|
|
7
8
|
multipartChunkSizeInBytes = 64 * 1024 * 1024; // 64MB
|
|
8
9
|
defaultRegion = 'us-east-1';
|
|
9
10
|
constructor(storageAccess) {
|
|
10
|
-
const { accessKeyId, secretKey, endpoint, bucket, region } = storageAccess;
|
|
11
|
+
const { accessKeyId, secretKey, endpoint, bucket, region, prefix } = storageAccess;
|
|
11
12
|
if (!accessKeyId)
|
|
12
13
|
throw new Error('Access key id is undefined');
|
|
13
14
|
if (!secretKey)
|
|
@@ -16,7 +17,11 @@ export class S3StorageProvider {
|
|
|
16
17
|
throw new Error('Endpoint is undefined');
|
|
17
18
|
if (!bucket)
|
|
18
19
|
throw new Error('Bucket is undefined');
|
|
20
|
+
if (prefix.startsWith('/') || !prefix.endsWith('/')) {
|
|
21
|
+
throw new Error(`Prefix is invalid: it must not start with "/" and must end with "/" (prefix=${prefix})`);
|
|
22
|
+
}
|
|
19
23
|
this.bucket = bucket;
|
|
24
|
+
this.prefix = prefix;
|
|
20
25
|
this.s3Client = new S3Client({
|
|
21
26
|
credentials: {
|
|
22
27
|
accessKeyId,
|
|
@@ -27,16 +32,20 @@ export class S3StorageProvider {
|
|
|
27
32
|
forcePathStyle: true,
|
|
28
33
|
});
|
|
29
34
|
}
|
|
35
|
+
applyPrefix(key) {
|
|
36
|
+
return `${this.prefix}${key}`;
|
|
37
|
+
}
|
|
30
38
|
async uploadFile(inputStream, remotePath, contentLength, progressListener) {
|
|
31
39
|
// For performance & cost optimization
|
|
32
40
|
// https://docs.storj.io/dcs/api-reference/s3-compatible-gateway/multipart-upload/multipart-part-size
|
|
41
|
+
const key = this.applyPrefix(remotePath);
|
|
33
42
|
if (contentLength >= this.multipartChunkSizeInBytes) {
|
|
34
|
-
return this.multipartUpload(inputStream,
|
|
43
|
+
return this.multipartUpload(inputStream, key, contentLength, progressListener);
|
|
35
44
|
}
|
|
36
45
|
const putObjectCommand = new PutObjectCommand({
|
|
37
46
|
Body: inputStream,
|
|
38
47
|
Bucket: this.bucket,
|
|
39
|
-
Key:
|
|
48
|
+
Key: key,
|
|
40
49
|
ContentLength: contentLength,
|
|
41
50
|
});
|
|
42
51
|
progressListener?.(contentLength, 0);
|
|
@@ -44,9 +53,10 @@ export class S3StorageProvider {
|
|
|
44
53
|
progressListener?.(contentLength, contentLength);
|
|
45
54
|
}
|
|
46
55
|
async multipartUpload(inputStream, remotePath, contentLength, progressListener) {
|
|
56
|
+
const key = this.applyPrefix(remotePath);
|
|
47
57
|
const createMultipartUploadCommand = new CreateMultipartUploadCommand({
|
|
48
58
|
Bucket: this.bucket,
|
|
49
|
-
Key:
|
|
59
|
+
Key: key,
|
|
50
60
|
});
|
|
51
61
|
const multipart = await this.s3Client.send(createMultipartUploadCommand);
|
|
52
62
|
if (!multipart.UploadId) {
|
|
@@ -60,7 +70,7 @@ export class S3StorageProvider {
|
|
|
60
70
|
const uploadPartCommand = new UploadPartCommand({
|
|
61
71
|
Body: streamChunk.data,
|
|
62
72
|
Bucket: this.bucket,
|
|
63
|
-
Key:
|
|
73
|
+
Key: key,
|
|
64
74
|
UploadId: uploadId,
|
|
65
75
|
PartNumber: streamChunk.partNumber,
|
|
66
76
|
});
|
|
@@ -76,7 +86,7 @@ export class S3StorageProvider {
|
|
|
76
86
|
}
|
|
77
87
|
const completeMultipartUploadCommand = new CompleteMultipartUploadCommand({
|
|
78
88
|
Bucket: this.bucket,
|
|
79
|
-
Key:
|
|
89
|
+
Key: key,
|
|
80
90
|
UploadId: multipart.UploadId,
|
|
81
91
|
MultipartUpload: { Parts: parts },
|
|
82
92
|
});
|
|
@@ -85,7 +95,7 @@ export class S3StorageProvider {
|
|
|
85
95
|
catch (uploadingError) {
|
|
86
96
|
const abortMultipartUploadCommand = new AbortMultipartUploadCommand({
|
|
87
97
|
Bucket: this.bucket,
|
|
88
|
-
Key:
|
|
98
|
+
Key: key,
|
|
89
99
|
UploadId: multipart.UploadId,
|
|
90
100
|
});
|
|
91
101
|
await this.s3Client.send(abortMultipartUploadCommand);
|
|
@@ -93,16 +103,18 @@ export class S3StorageProvider {
|
|
|
93
103
|
}
|
|
94
104
|
}
|
|
95
105
|
async deleteObject(remotePath) {
|
|
106
|
+
const key = this.applyPrefix(remotePath);
|
|
96
107
|
const deleteObjectCommand = new DeleteObjectCommand({
|
|
97
108
|
Bucket: this.bucket,
|
|
98
|
-
Key:
|
|
109
|
+
Key: key,
|
|
99
110
|
});
|
|
100
111
|
await this.s3Client.send(deleteObjectCommand);
|
|
101
112
|
}
|
|
102
113
|
async downloadFile(remotePath, config, progressListener) {
|
|
114
|
+
const key = this.applyPrefix(remotePath);
|
|
103
115
|
const getObjectParams = {
|
|
104
116
|
Bucket: this.bucket,
|
|
105
|
-
Key:
|
|
117
|
+
Key: key,
|
|
106
118
|
};
|
|
107
119
|
if (config) {
|
|
108
120
|
const start = config.offset || 0;
|
|
@@ -125,16 +137,16 @@ export class S3StorageProvider {
|
|
|
125
137
|
return getObjectResult.Body;
|
|
126
138
|
}
|
|
127
139
|
async listObjects(remotePath) {
|
|
128
|
-
const
|
|
140
|
+
const key = this.applyPrefix(remotePath.endsWith('/') || remotePath === '' ? remotePath : `${remotePath}/`);
|
|
129
141
|
const listObjectsCommand = new ListObjectsV2Command({
|
|
130
142
|
Bucket: this.bucket,
|
|
131
|
-
Prefix:
|
|
143
|
+
Prefix: key,
|
|
132
144
|
});
|
|
133
145
|
const listObjects = await this.s3Client.send(listObjectsCommand);
|
|
134
146
|
let result = [];
|
|
135
147
|
if (listObjects.Contents) {
|
|
136
148
|
result = listObjects.Contents.map((object) => ({
|
|
137
|
-
name: object.Key || '',
|
|
149
|
+
name: object.Key?.replace(this.prefix, '') || '',
|
|
138
150
|
createdAt: object.LastModified || new Date(),
|
|
139
151
|
size: object.Size || 0,
|
|
140
152
|
}));
|
|
@@ -142,9 +154,10 @@ export class S3StorageProvider {
|
|
|
142
154
|
return result;
|
|
143
155
|
}
|
|
144
156
|
async getMetadata(remotePath) {
|
|
157
|
+
const key = this.applyPrefix(remotePath);
|
|
145
158
|
const headObjectCommand = new HeadObjectCommand({
|
|
146
159
|
Bucket: this.bucket,
|
|
147
|
-
Key:
|
|
160
|
+
Key: key,
|
|
148
161
|
});
|
|
149
162
|
return await this.s3Client.send(headObjectCommand);
|
|
150
163
|
}
|
|
@@ -163,4 +176,4 @@ export class S3StorageProvider {
|
|
|
163
176
|
return metadata.LastModified;
|
|
164
177
|
}
|
|
165
178
|
}
|
|
166
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
179
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUzNTdG9yYWdlUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3N0b3JhZ2UvUzNTdG9yYWdlUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLDJCQUEyQixFQUUzQiw4QkFBOEIsRUFDOUIsNEJBQTRCLEVBQzVCLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBRWhCLGlCQUFpQixFQUVqQixvQkFBb0IsRUFDcEIsUUFBUSxFQUNSLGlCQUFpQixHQUNsQixNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFbEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBT3pFLE1BQU0sT0FBTyxpQkFBaUI7SUFDWCxRQUFRLENBQVc7SUFDbkIsTUFBTSxDQUFTO0lBQ2YsTUFBTSxDQUFTO0lBQ2YseUJBQXlCLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPO0lBQ3JELGFBQWEsR0FBRyxXQUFXLENBQUM7SUFFN0MsWUFBWSxhQUE2QjtRQUN2QyxNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxhQUFhLENBQUM7UUFDbkYsSUFBSSxDQUFDLFdBQVc7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLFNBQVM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFFBQVE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLE1BQU07WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFD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
|
|
@@ -0,0 +1,25 @@
|
|
|
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 _uplink;
|
|
12
|
+
private _access?;
|
|
13
|
+
private _project?;
|
|
14
|
+
constructor(storageConfig: Pick<StorjCredentials, 'token' | 'bucket'>);
|
|
15
|
+
getStorageId(entity: string, entityId: string): string;
|
|
16
|
+
create(): Promise<void>;
|
|
17
|
+
acquireCredentials(permissions: CredentialsPermissions[], prefix: string): Promise<StringifiedCredentials<StorjCredentials>>;
|
|
18
|
+
acquireS3Credentials(permissions: CredentialsPermissions[], prefix: string): Promise<S3Credentials>;
|
|
19
|
+
getS3Credentials(stringifiedCredentials: StringifiedCredentials): Promise<S3Credentials>;
|
|
20
|
+
getS3Credentials(storjCredentials: StorjCredentials): Promise<S3Credentials>;
|
|
21
|
+
revokeCredentials(credentialString: StringifiedCredentials<StorjCredentials>): Promise<void>;
|
|
22
|
+
private parseAccess;
|
|
23
|
+
private lazyAccess;
|
|
24
|
+
private lazyProject;
|
|
25
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import * as storj from '@super-protocol/uplink-nodejs';
|
|
2
|
+
export var CredentialsPermissions;
|
|
3
|
+
(function (CredentialsPermissions) {
|
|
4
|
+
CredentialsPermissions[CredentialsPermissions["read"] = 0] = "read";
|
|
5
|
+
CredentialsPermissions[CredentialsPermissions["write"] = 1] = "write";
|
|
6
|
+
CredentialsPermissions[CredentialsPermissions["list"] = 2] = "list";
|
|
7
|
+
CredentialsPermissions[CredentialsPermissions["delete"] = 3] = "delete";
|
|
8
|
+
})(CredentialsPermissions || (CredentialsPermissions = {}));
|
|
9
|
+
export class StorjCredentialsManager {
|
|
10
|
+
accessToken;
|
|
11
|
+
bucket;
|
|
12
|
+
_uplink;
|
|
13
|
+
_access;
|
|
14
|
+
_project;
|
|
15
|
+
constructor(storageConfig) {
|
|
16
|
+
this.accessToken = storageConfig.token;
|
|
17
|
+
this.bucket = storageConfig.bucket;
|
|
18
|
+
this._uplink = new storj.Uplink();
|
|
19
|
+
}
|
|
20
|
+
getStorageId(entity, entityId) {
|
|
21
|
+
return `${entity}_${entityId}`;
|
|
22
|
+
}
|
|
23
|
+
async create() {
|
|
24
|
+
const project = await this.lazyProject();
|
|
25
|
+
await project.ensureBucket(this.bucket);
|
|
26
|
+
}
|
|
27
|
+
async acquireCredentials(permissions, prefix) {
|
|
28
|
+
const readPerm = permissions.includes(CredentialsPermissions.read), writePerm = permissions.includes(CredentialsPermissions.write), listPerm = permissions.includes(CredentialsPermissions.list), deletePerm = permissions.includes(CredentialsPermissions.delete);
|
|
29
|
+
const perm = new storj.Permission(readPerm, writePerm, deletePerm, listPerm, 0, 0);
|
|
30
|
+
const sharePrefix = new storj.SharePrefix(this.bucket, prefix + '/');
|
|
31
|
+
const access = await this.lazyAccess();
|
|
32
|
+
const share = await access.share(perm, [sharePrefix], 1);
|
|
33
|
+
return JSON.stringify({
|
|
34
|
+
bucket: this.bucket,
|
|
35
|
+
prefix: prefix + '/',
|
|
36
|
+
token: await share.serialize(),
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
async acquireS3Credentials(permissions, prefix) {
|
|
40
|
+
const storjCreds = await this.acquireCredentials(permissions, prefix);
|
|
41
|
+
return this.getS3Credentials(storjCreds);
|
|
42
|
+
}
|
|
43
|
+
async getS3Credentials(creds) {
|
|
44
|
+
const storjCredentials = typeof creds === 'string' ? JSON.parse(creds) : creds;
|
|
45
|
+
const access = await this.lazyAccess();
|
|
46
|
+
const s3Credentials = await access.registerS3Credentials(storjCredentials.token);
|
|
47
|
+
return {
|
|
48
|
+
accessKeyId: s3Credentials.accessKeyId,
|
|
49
|
+
secretKey: s3Credentials.secretKey,
|
|
50
|
+
endpoint: s3Credentials.endpoint,
|
|
51
|
+
bucket: storjCredentials.bucket,
|
|
52
|
+
prefix: storjCredentials.prefix,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
async revokeCredentials(credentialString) {
|
|
56
|
+
const credentials = JSON.parse(credentialString);
|
|
57
|
+
const access = await this.parseAccess(credentials.token);
|
|
58
|
+
const project = await this.lazyProject();
|
|
59
|
+
await project.revokeAccess(access);
|
|
60
|
+
}
|
|
61
|
+
parseAccess(access) {
|
|
62
|
+
return this._uplink.parseAccess(access);
|
|
63
|
+
}
|
|
64
|
+
async lazyAccess() {
|
|
65
|
+
if (this._access) {
|
|
66
|
+
return this._access;
|
|
67
|
+
}
|
|
68
|
+
this._access = await this.parseAccess(this.accessToken);
|
|
69
|
+
return this._access;
|
|
70
|
+
}
|
|
71
|
+
async lazyProject() {
|
|
72
|
+
if (this._project) {
|
|
73
|
+
return this._project;
|
|
74
|
+
}
|
|
75
|
+
const access = await this.lazyAccess();
|
|
76
|
+
this._project = await access.openProject();
|
|
77
|
+
return this._project;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RvcmpDcmVkZW50aWFsc01hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3N0b3JhZ2UvU3RvcmpDcmVkZW50aWFsc01hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxLQUFLLEtBQUssTUFBTSwrQkFBK0IsQ0FBQztBQUV2RCxNQUFNLENBQU4sSUFBWSxzQkFLWDtBQUxELFdBQVksc0JBQXNCO0lBQ2hDLG1FQUFJLENBQUE7SUFDSixxRUFBSyxDQUFBO0lBQ0wsbUVBQUksQ0FBQTtJQUNKLHVFQUFNLENBQUE7QUFDUixDQUFDLEVBTFcsc0JBQXNCLEtBQXRCLHNCQUFzQixRQUtqQztBQUVELE1BQU0sT0FBTyx1QkFBdUI7SUFDMUIsV0FBVyxDQUFTO0lBQ3BCLE1BQU0sQ0FBUztJQUNmLE9BQU8sQ0FBZTtJQUN0QixPQUFPLENBQVU7SUFDakIsUUFBUSxDQUFXO0lBRTNCLFlBQVksYUFBeUQ7UUFDbkUsSUFBSSxDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztRQUNuQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBYyxFQUFFLFFBQWdCO1FBQzNDLE9BQU8sR0FBRyxNQUFNLElBQUksUUFBUSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNO1FBQ1YsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekMsTUFBTSxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsS0FBSyxDQUFDLGtCQUFrQixDQUN0QixXQUFxQyxFQUNyQyxNQUFjO1FBRWQsTUFB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
|