@pi-r/aws-v3 0.3.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/index.js +13 -14
- package/download/index.js +1 -3
- package/package.json +8 -8
- package/upload/index.js +36 -4
package/client/index.js
CHANGED
|
@@ -8,7 +8,7 @@ const util_1 = require("@e-mc/cloud/util");
|
|
|
8
8
|
const types_1 = require("@e-mc/types");
|
|
9
9
|
const Module = require("@e-mc/module");
|
|
10
10
|
const Cloud = require("@e-mc/cloud");
|
|
11
|
-
function setCannedAcl(S3, client, Bucket, ACL, service = 'aws-v3', recursive) {
|
|
11
|
+
async function setCannedAcl(S3, client, Bucket, ACL, service = 'aws-v3', recursive) {
|
|
12
12
|
let Policy;
|
|
13
13
|
switch (ACL) {
|
|
14
14
|
case 1:
|
|
@@ -28,7 +28,7 @@ function setCannedAcl(S3, client, Bucket, ACL, service = 'aws-v3', recursive) {
|
|
|
28
28
|
.catch((err) => {
|
|
29
29
|
if (!recursive && err instanceof Error) {
|
|
30
30
|
if (err.name === 'OperationAborted') {
|
|
31
|
-
setTimeout(() => setCannedAcl.call(this, S3, client, Bucket, ACL, service, true), 60000 /* TIME.m */);
|
|
31
|
+
setTimeout(async () => setCannedAcl.call(this, S3, client, Bucket, ACL, service, true), 60000 /* TIME.m */);
|
|
32
32
|
this.formatMessage(64 /* LOG_TYPE.CLOUD */, service, [`Grant ${ACL} (delayed)`, err.Endpoint || Bucket], err, { ...Cloud.LOG_CLOUD_DELAYED });
|
|
33
33
|
}
|
|
34
34
|
else {
|
|
@@ -90,11 +90,11 @@ function validateDatabase(credential, data) {
|
|
|
90
90
|
return (0, aws_1.isDatabaseDefined)(credential, data) && validateStorage(credential);
|
|
91
91
|
}
|
|
92
92
|
exports.validateDatabase = validateDatabase;
|
|
93
|
-
function createBucket(credential, Bucket, publicRead, service = 'aws-v3', sdk = '@aws-sdk/client-s3') {
|
|
93
|
+
async function createBucket(credential, Bucket, publicRead, service = 'aws-v3', sdk = '@aws-sdk/client-s3') {
|
|
94
94
|
return createBucketV2.call(this, credential, Bucket, publicRead ? 'public-read' : undefined, undefined, service, sdk);
|
|
95
95
|
}
|
|
96
96
|
exports.createBucket = createBucket;
|
|
97
|
-
function createBucketV2(credential, Bucket, ACL, options, service = 'aws-v3', sdk = '@aws-sdk/client-s3') {
|
|
97
|
+
async function createBucketV2(credential, Bucket, ACL, options, service = 'aws-v3', sdk = '@aws-sdk/client-s3') {
|
|
98
98
|
ACL = ACL === 1 ? 1 : (0, aws_1.checkBucketCannedACL)(ACL);
|
|
99
99
|
const [client, AWS] = createStorageClient.call(this, credential, service, sdk);
|
|
100
100
|
return client.send(new AWS.HeadBucketCommand({ Bucket }))
|
|
@@ -104,7 +104,7 @@ function createBucketV2(credential, Bucket, ACL, options, service = 'aws-v3', sd
|
|
|
104
104
|
}
|
|
105
105
|
return true;
|
|
106
106
|
})
|
|
107
|
-
.catch(() => {
|
|
107
|
+
.catch(async () => {
|
|
108
108
|
const input = { ...options, Bucket };
|
|
109
109
|
const region = credential.region;
|
|
110
110
|
if (typeof region === 'string' && region !== 'us-east-1') {
|
|
@@ -134,7 +134,7 @@ function createBucketV2(credential, Bucket, ACL, options, service = 'aws-v3', sd
|
|
|
134
134
|
});
|
|
135
135
|
}
|
|
136
136
|
exports.createBucketV2 = createBucketV2;
|
|
137
|
-
function setBucketPolicy(credential, Bucket, options, service = 'aws', sdk = 'aws-sdk/clients/s3') {
|
|
137
|
+
async function setBucketPolicy(credential, Bucket, options, service = 'aws', sdk = 'aws-sdk/clients/s3') {
|
|
138
138
|
const [client, AWS] = createStorageClient.call(this, credential, service, sdk);
|
|
139
139
|
const block = 'PublicAccessBlockConfiguration' in options;
|
|
140
140
|
const policy = !block && 'Policy' in options && !('ACL' in options);
|
|
@@ -152,7 +152,7 @@ function setBucketPolicy(credential, Bucket, options, service = 'aws', sdk = 'aw
|
|
|
152
152
|
});
|
|
153
153
|
}
|
|
154
154
|
exports.setBucketPolicy = setBucketPolicy;
|
|
155
|
-
function setBucketWebsite(credential, Bucket, options, service = 'aws', sdk = 'aws-sdk/clients/s3') {
|
|
155
|
+
async function setBucketWebsite(credential, Bucket, options, service = 'aws', sdk = 'aws-sdk/clients/s3') {
|
|
156
156
|
const [client, AWS] = createStorageClient.call(this, credential, service, sdk);
|
|
157
157
|
const WebsiteConfiguration = {};
|
|
158
158
|
const { indexPage: Suffix, errorPage: Key } = options;
|
|
@@ -175,18 +175,18 @@ function setBucketWebsite(credential, Bucket, options, service = 'aws', sdk = 'a
|
|
|
175
175
|
});
|
|
176
176
|
}
|
|
177
177
|
exports.setBucketWebsite = setBucketWebsite;
|
|
178
|
-
function deleteObjects(credential, Bucket, service, sdk) {
|
|
178
|
+
async function deleteObjects(credential, Bucket, service, sdk) {
|
|
179
179
|
return deleteObjectsV2.call(this, credential, Bucket, true, service, sdk);
|
|
180
180
|
}
|
|
181
181
|
exports.deleteObjects = deleteObjects;
|
|
182
182
|
async function deleteObjectsV2(credential, Bucket, recursive = true, service = 'aws-v3', sdk = '@aws-sdk/client-s3') {
|
|
183
183
|
const [client, AWS] = createStorageClient.call(this, credential, service, sdk);
|
|
184
184
|
return client.send(new AWS.ListObjectsCommand({ Bucket }))
|
|
185
|
-
.then(({ Contents }) => {
|
|
185
|
+
.then(async ({ Contents }) => {
|
|
186
186
|
if (Contents?.length) {
|
|
187
187
|
let Objects = Contents.map(data => ({ Key: data.Key }));
|
|
188
188
|
if (!recursive) {
|
|
189
|
-
Objects = Objects.filter(value => value.Key.
|
|
189
|
+
Objects = Objects.filter(value => !value.Key.includes('/'));
|
|
190
190
|
}
|
|
191
191
|
return client.send(new AWS.DeleteObjectsCommand({ Bucket, Delete: { Objects } }))
|
|
192
192
|
.then(data => {
|
|
@@ -230,11 +230,10 @@ async function executeBatchQuery(credential, batch, sessionKey) {
|
|
|
230
230
|
(0, aws_1.setDatabaseEndpoint)(credential);
|
|
231
231
|
const renewCache = ignoreCache === 0;
|
|
232
232
|
const getCache = (value) => {
|
|
233
|
-
if (ignoreCache
|
|
234
|
-
|
|
233
|
+
if (ignoreCache !== 1) {
|
|
234
|
+
cacheValue.renewCache = renewCache;
|
|
235
|
+
return this.getQueryResult(service, credential, value, cacheValue);
|
|
235
236
|
}
|
|
236
|
-
cacheValue.renewCache = renewCache;
|
|
237
|
-
return this.getQueryResult(service, credential, value, cacheValue);
|
|
238
237
|
};
|
|
239
238
|
let rows, queryString = caching && ignoreCache !== true || ignoreCache === false || ignoreCache === 1 || renewCache ? table + '_' : '';
|
|
240
239
|
if (key && (id || (0, types_1.isPlainObject)(key))) {
|
package/download/index.js
CHANGED
|
@@ -16,9 +16,7 @@ function download(config, service = 'aws-v3', sdk = '@aws-sdk/client-s3') {
|
|
|
16
16
|
}
|
|
17
17
|
const location = Module.joinPath(Bucket, Key);
|
|
18
18
|
let input = { Bucket, Key, VersionId: target.versionId };
|
|
19
|
-
|
|
20
|
-
client
|
|
21
|
-
.send(new AWS.GetObjectCommand(input), { abortSignal: this.signal })
|
|
19
|
+
client.send(new AWS.GetObjectCommand(input), { abortSignal: this.signal })
|
|
22
20
|
.then(result => {
|
|
23
21
|
(0, util_1.readableAsBuffer)(result.Body).then(buffer => callback(null, buffer)).catch(err => callback(err));
|
|
24
22
|
const deleteObject = target.deleteObject;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-r/aws-v3",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "AWS V3 cloud functions for E-mc.",
|
|
5
5
|
"main": "client/index.js",
|
|
6
6
|
"publishConfig": {
|
|
@@ -20,12 +20,12 @@
|
|
|
20
20
|
"license": "MIT",
|
|
21
21
|
"homepage": "https://github.com/anpham6/pi-r#readme",
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@e-mc/cloud": "^0.
|
|
24
|
-
"@e-mc/module": "^0.
|
|
25
|
-
"@e-mc/types": "^0.
|
|
26
|
-
"@pi-r/aws": "^0.
|
|
27
|
-
"@aws-sdk/client-dynamodb": "^3.
|
|
28
|
-
"@aws-sdk/client-s3": "^3.
|
|
29
|
-
"@aws-sdk/lib-dynamodb": "^3.
|
|
23
|
+
"@e-mc/cloud": "^0.8.0",
|
|
24
|
+
"@e-mc/module": "^0.8.0",
|
|
25
|
+
"@e-mc/types": "^0.8.0",
|
|
26
|
+
"@pi-r/aws": "^0.6.0",
|
|
27
|
+
"@aws-sdk/client-dynamodb": "^3.478.0",
|
|
28
|
+
"@aws-sdk/client-s3": "^3.478.0",
|
|
29
|
+
"@aws-sdk/lib-dynamodb": "^3.478.0"
|
|
30
30
|
}
|
|
31
31
|
}
|
package/upload/index.js
CHANGED
|
@@ -16,7 +16,7 @@ function upload(credential, service = 'aws-v3', sdk = '@aws-sdk/client-s3') {
|
|
|
16
16
|
return async (data, callback) => {
|
|
17
17
|
var _a;
|
|
18
18
|
const { bucket: Bucket, localUri } = data;
|
|
19
|
-
const { pathname = '', fileGroup, contentType, metadata, endpoint, active, publicRead, acl, admin = {}, overwrite, options } = data.upload;
|
|
19
|
+
const { pathname = '', fileGroup, contentType, metadata, tags, endpoint, active, publicRead, acl, admin = {}, overwrite, options } = data.upload;
|
|
20
20
|
let filename = data.upload.filename || path.basename(localUri), bucketKey;
|
|
21
21
|
const cleanup = () => {
|
|
22
22
|
BUCKET_SESSION.delete(service + Bucket);
|
|
@@ -29,15 +29,25 @@ function upload(credential, service = 'aws-v3', sdk = '@aws-sdk/client-s3') {
|
|
|
29
29
|
callback(err);
|
|
30
30
|
return false;
|
|
31
31
|
};
|
|
32
|
+
const addLog = (err) => err instanceof Error && this.addLog(this.statusType.WARN, err, service, Bucket);
|
|
33
|
+
const configBucket = admin.configBucket;
|
|
32
34
|
if (!BUCKET_SESSION.has(service + Bucket)) {
|
|
33
35
|
const bucketAcl = admin.publicRead ? 'public-read' : admin.acl;
|
|
34
|
-
const response = BUCKET_RESPONSE[_a = bucketKey = (0, aws_1.getBucketKey)(credential, Bucket, bucketAcl, service, sdk)] || (BUCKET_RESPONSE[_a] = client_1.createBucketV2.call(this, credential, Bucket, bucketAcl,
|
|
36
|
+
const response = BUCKET_RESPONSE[_a = bucketKey = (0, aws_1.getBucketKey)(credential, Bucket, bucketAcl, service, sdk)] || (BUCKET_RESPONSE[_a] = client_1.createBucketV2.call(this, credential, Bucket, bucketAcl, configBucket?.create, service, sdk));
|
|
35
37
|
if (!await response) {
|
|
36
38
|
errorResponse(null);
|
|
37
39
|
return;
|
|
38
40
|
}
|
|
39
41
|
BUCKET_SESSION.add(service + Bucket);
|
|
40
42
|
}
|
|
43
|
+
const DefaultRetention = configBucket?.retentionPolicy;
|
|
44
|
+
if ((0, types_1.isPlainObject)(DefaultRetention)) {
|
|
45
|
+
client.send(new AWS.PutObjectLockConfigurationCommand({ Bucket, ObjectLockConfiguration: { ObjectLockEnabled: 'Enabled', Rule: { DefaultRetention } }, ExpectedBucketOwner: options?.ExpectedBucketOwner, RequestPayer: options?.RequestPayer }))
|
|
46
|
+
.then(() => {
|
|
47
|
+
aws_1.writeMessageDefaultRetention.call(this, Bucket, DefaultRetention, service);
|
|
48
|
+
})
|
|
49
|
+
.catch(err => addLog(err));
|
|
50
|
+
}
|
|
41
51
|
if (!overwrite) {
|
|
42
52
|
const current = filename;
|
|
43
53
|
const next = (0, util_1.generateFilename)(filename);
|
|
@@ -69,7 +79,6 @@ function upload(credential, service = 'aws-v3', sdk = '@aws-sdk/client-s3') {
|
|
|
69
79
|
const Key = [filename];
|
|
70
80
|
const Body = [data.buffer];
|
|
71
81
|
const ContentType = [contentType];
|
|
72
|
-
const addLog = (err) => err instanceof Error && this.addLog(this.statusType.WARN, err.message, service + ': ' + Bucket);
|
|
73
82
|
if (fileGroup) {
|
|
74
83
|
for (const [content, ext, localFile] of fileGroup) {
|
|
75
84
|
try {
|
|
@@ -128,11 +137,34 @@ function upload(credential, service = 'aws-v3', sdk = '@aws-sdk/client-s3') {
|
|
|
128
137
|
}
|
|
129
138
|
continue;
|
|
130
139
|
}
|
|
131
|
-
// @ts-ignore
|
|
132
140
|
client.send(new AWS.PutObjectCommand(params), { abortSignal: this.signal })
|
|
133
141
|
.then(() => {
|
|
134
142
|
const url = endpoint ? Module.joinPath(endpoint, objectKey) : Module.joinPath(`https://${Bucket}.s3.${!credential.region || credential.region === 'us-east-1' ? 'us-east-1.' : ''}amazonaws.com`, objectKey);
|
|
135
143
|
if (first) {
|
|
144
|
+
if ((0, types_1.isPlainObject)(tags)) {
|
|
145
|
+
const TagSet = [];
|
|
146
|
+
for (const name in tags) {
|
|
147
|
+
TagSet.push({ Key: name, Value: tags[name] });
|
|
148
|
+
}
|
|
149
|
+
client.send(new AWS.PutObjectTaggingCommand({ Bucket, Key: params.Key, ExpectedBucketOwner: params.ExpectedBucketOwner, Tagging: { TagSet }, RequestPayer: params.RequestPayer }), error => {
|
|
150
|
+
if (!error) {
|
|
151
|
+
this.formatMessage(64 /* LOG_TYPE.CLOUD */, service, ["Tags created" /* VAL_CLOUD.CREATE_TAG */, Bucket], params.Key, { ...Cloud.LOG_CLOUD_COMMAND });
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
addLog(error);
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
else if (tags === false) {
|
|
159
|
+
client.send(new AWS.DeleteObjectTaggingCommand({ Bucket, Key: params.Key, ExpectedBucketOwner: params.ExpectedBucketOwner }), error => {
|
|
160
|
+
if (!error) {
|
|
161
|
+
this.formatMessage(64 /* LOG_TYPE.CLOUD */, service, ["Tags deleted" /* VAL_CLOUD.DELETE_TAG */, Bucket], params.Key, { ...Cloud.LOG_CLOUD_COMMAND });
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
addLog(error);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
}
|
|
136
168
|
cleanup();
|
|
137
169
|
callback(null, url);
|
|
138
170
|
}
|