@pi-r/aws 0.3.0 → 0.5.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.d.ts +1 -0
- package/client/index.js +16 -1
- package/package.json +5 -5
- package/upload/index.js +43 -3
package/client/index.d.ts
CHANGED
|
@@ -31,6 +31,7 @@ declare namespace AWS {
|
|
|
31
31
|
function executeBatchQuery(this: ICloud, credential: AWSDatabaseCredential, batch: AWSDatabaseQuery[], sessionKey?: string): Promise<BatchQueryResult>;
|
|
32
32
|
function setDatabaseEndpoint(config: ServiceConfigurationOptions | DynamoDBClientConfig): void;
|
|
33
33
|
function checkBucketCannedACL(value: unknown): BucketCannedACL | undefined;
|
|
34
|
+
function writeMessageDefaultRetention(this: IModule, bucket: string, retention: s3.DefaultRetention, service?: string): void;
|
|
34
35
|
function getBucketKey(credential: unknown, Bucket: string, acl: string | undefined, service: string, sdk: string): string;
|
|
35
36
|
function isNoSuchBucket(err: unknown): boolean;
|
|
36
37
|
}
|
package/client/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isNoSuchBucket = exports.getBucketKey = exports.checkBucketCannedACL = exports.setDatabaseEndpoint = exports.executeBatchQuery = exports.executeQuery = exports.deleteObjectsV2 = exports.deleteObjects = exports.setBucketWebsite = exports.setBucketPolicy = exports.createBucketV2 = exports.createBucket = exports.createDatabaseClient = exports.createStorageClient = exports.validateDatabase = exports.validateStorage = exports.getPrivatePolicy = exports.getBucketPublicReadPolicy = exports.getPublicReadPolicy = exports.isDatabaseDefined = exports.isEnvDefined = exports.isAccessDefined = void 0;
|
|
3
|
+
exports.isNoSuchBucket = exports.getBucketKey = exports.writeMessageDefaultRetention = exports.checkBucketCannedACL = exports.setDatabaseEndpoint = exports.executeBatchQuery = exports.executeQuery = exports.deleteObjectsV2 = exports.deleteObjects = exports.setBucketWebsite = exports.setBucketPolicy = exports.createBucketV2 = exports.createBucket = exports.createDatabaseClient = exports.createStorageClient = exports.validateDatabase = exports.validateStorage = exports.getPrivatePolicy = exports.getBucketPublicReadPolicy = exports.getPublicReadPolicy = exports.isDatabaseDefined = exports.isEnvDefined = exports.isAccessDefined = void 0;
|
|
4
4
|
const aws = require("aws-sdk");
|
|
5
5
|
const types_1 = require("@e-mc/types");
|
|
6
6
|
const util_1 = require("@e-mc/cloud/util");
|
|
@@ -370,6 +370,21 @@ function checkBucketCannedACL(value) {
|
|
|
370
370
|
}
|
|
371
371
|
}
|
|
372
372
|
exports.checkBucketCannedACL = checkBucketCannedACL;
|
|
373
|
+
function writeMessageDefaultRetention(bucket, retention, service = 'aws') {
|
|
374
|
+
const { Years = 0, Days = 0, Mode } = retention;
|
|
375
|
+
const status = [];
|
|
376
|
+
if (Years > 0) {
|
|
377
|
+
status.push(Years.toString() + 'Y');
|
|
378
|
+
}
|
|
379
|
+
if (Days > 0) {
|
|
380
|
+
status.push(Days.toString() + 'D');
|
|
381
|
+
}
|
|
382
|
+
if (Mode) {
|
|
383
|
+
status.push(status.length ? `(${Mode})` : Mode);
|
|
384
|
+
}
|
|
385
|
+
this.formatMessage(64 /* LOG_TYPE.CLOUD */, service, ["Bucket configured" /* VAL_CLOUD.CONFIGURE_BUCKET */ + ' (retention policy)', bucket], status.join(' '), { ...Cloud.LOG_CLOUD_COMMAND });
|
|
386
|
+
}
|
|
387
|
+
exports.writeMessageDefaultRetention = writeMessageDefaultRetention;
|
|
373
388
|
const getBucketKey = (credential, Bucket, acl, service, sdk) => Module.asString(credential, true) + Bucket + '_' + (acl || '') + service + sdk;
|
|
374
389
|
exports.getBucketKey = getBucketKey;
|
|
375
390
|
const isNoSuchBucket = (err) => err instanceof Error && err.code === 'NoSuchBucket';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-r/aws",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "AWS V2 cloud functions for E-mc.",
|
|
5
5
|
"main": "client/index.js",
|
|
6
6
|
"types": "client/index.d.ts",
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
"license": "MIT",
|
|
22
22
|
"homepage": "https://github.com/anpham6/pi-r#readme",
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@e-mc/cloud": "^0.
|
|
25
|
-
"@e-mc/module": "^0.
|
|
26
|
-
"@e-mc/types": "^0.
|
|
27
|
-
"aws-sdk": "^2.
|
|
24
|
+
"@e-mc/cloud": "^0.7.0",
|
|
25
|
+
"@e-mc/module": "^0.7.0",
|
|
26
|
+
"@e-mc/types": "^0.7.0",
|
|
27
|
+
"aws-sdk": "^2.1514.0"
|
|
28
28
|
}
|
|
29
29
|
}
|
package/upload/index.js
CHANGED
|
@@ -14,7 +14,7 @@ function upload(credential, service = 'aws', sdk = 'aws-sdk/clients/s3') {
|
|
|
14
14
|
return async (data, callback) => {
|
|
15
15
|
var _a;
|
|
16
16
|
const { bucket: Bucket, localUri } = data;
|
|
17
|
-
const { pathname = '', fileGroup, contentType, metadata, endpoint, active, publicRead, acl, admin = {}, overwrite, options } = data.upload;
|
|
17
|
+
const { pathname = '', fileGroup, contentType, metadata, tags, endpoint, active, publicRead, acl, admin = {}, overwrite, options } = data.upload;
|
|
18
18
|
let filename = data.upload.filename || path.basename(localUri), bucketKey;
|
|
19
19
|
const cleanup = () => {
|
|
20
20
|
BUCKET_SESSION.delete(service + Bucket);
|
|
@@ -26,15 +26,30 @@ function upload(credential, service = 'aws', sdk = 'aws-sdk/clients/s3') {
|
|
|
26
26
|
cleanup();
|
|
27
27
|
callback(err);
|
|
28
28
|
};
|
|
29
|
+
const addLog = (err) => err instanceof Error && this.addLog(this.statusType.WARN, err.message, service + ': ' + Bucket);
|
|
30
|
+
const configBucket = admin.configBucket;
|
|
29
31
|
if (!BUCKET_SESSION.has(service + Bucket)) {
|
|
30
32
|
const bucketAcl = admin.publicRead ? 'public-read' : admin.acl;
|
|
31
|
-
const response = BUCKET_RESPONSE[_a = bucketKey = (0, client_1.getBucketKey)(credential, Bucket, bucketAcl, service, sdk)] || (BUCKET_RESPONSE[_a] = client_1.createBucketV2.call(this, credential, Bucket, bucketAcl,
|
|
33
|
+
const response = BUCKET_RESPONSE[_a = bucketKey = (0, client_1.getBucketKey)(credential, Bucket, bucketAcl, service, sdk)] || (BUCKET_RESPONSE[_a] = client_1.createBucketV2.call(this, credential, Bucket, bucketAcl, configBucket?.create, service, sdk));
|
|
32
34
|
if (!await response) {
|
|
33
35
|
errorResponse(null);
|
|
34
36
|
return;
|
|
35
37
|
}
|
|
36
38
|
BUCKET_SESSION.add(service + Bucket);
|
|
37
39
|
}
|
|
40
|
+
if (service !== 'oci') {
|
|
41
|
+
const DefaultRetention = configBucket?.retentionPolicy;
|
|
42
|
+
if ((0, types_1.isPlainObject)(DefaultRetention)) {
|
|
43
|
+
s3.putObjectLockConfiguration({ Bucket, ObjectLockConfiguration: { ObjectLockEnabled: 'Enabled', Rule: { DefaultRetention } }, ExpectedBucketOwner: options?.ExpectedBucketOwner, RequestPayer: options?.RequestPayer }, err => {
|
|
44
|
+
if (!err) {
|
|
45
|
+
client_1.writeMessageDefaultRetention.call(this, Bucket, DefaultRetention, service);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
addLog(err);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
38
53
|
if (!overwrite) {
|
|
39
54
|
const current = filename;
|
|
40
55
|
const next = (0, util_1.generateFilename)(filename);
|
|
@@ -65,7 +80,6 @@ function upload(credential, service = 'aws', sdk = 'aws-sdk/clients/s3') {
|
|
|
65
80
|
const Key = [filename];
|
|
66
81
|
const Body = [data.buffer];
|
|
67
82
|
const ContentType = [contentType];
|
|
68
|
-
const addLog = (err) => err instanceof Error && this.addLog(this.statusType.WARN, err.message, service + ': ' + Bucket);
|
|
69
83
|
if (fileGroup) {
|
|
70
84
|
for (const [content, ext, localFile] of fileGroup) {
|
|
71
85
|
try {
|
|
@@ -115,6 +129,32 @@ function upload(credential, service = 'aws', sdk = 'aws-sdk/clients/s3') {
|
|
|
115
129
|
const url = endpoint ? Module.joinPath(endpoint, result.Key) : result.Location;
|
|
116
130
|
this.formatMessage(64 /* LOG_TYPE.CLOUD */, service, "Upload success" /* VAL_CLOUD.UPLOAD_FILE */, url, { ...Cloud.LOG_CLOUD_UPLOAD });
|
|
117
131
|
if (first) {
|
|
132
|
+
if (service !== 'oci') {
|
|
133
|
+
if ((0, types_1.isPlainObject)(tags)) {
|
|
134
|
+
const TagSet = [];
|
|
135
|
+
for (const name in tags) {
|
|
136
|
+
TagSet.push({ Key: name, Value: tags[name] });
|
|
137
|
+
}
|
|
138
|
+
s3.putObjectTagging({ Bucket, Key: result.Key, Tagging: { TagSet }, ExpectedBucketOwner: params.ExpectedBucketOwner, RequestPayer: params.RequestPayer }, error => {
|
|
139
|
+
if (!error) {
|
|
140
|
+
this.formatMessage(64 /* LOG_TYPE.CLOUD */, service, ["Tags created" /* VAL_CLOUD.CREATE_TAG */, Bucket], result.Key, { ...Cloud.LOG_CLOUD_COMMAND });
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
addLog(error);
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
else if (tags === false) {
|
|
148
|
+
s3.deleteObjectTagging({ Bucket, Key: result.Key, ExpectedBucketOwner: params.ExpectedBucketOwner }, error => {
|
|
149
|
+
if (!error) {
|
|
150
|
+
this.formatMessage(64 /* LOG_TYPE.CLOUD */, service, ["Tags deleted" /* VAL_CLOUD.DELETE_TAG */, Bucket], result.Key, { ...Cloud.LOG_CLOUD_COMMAND });
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
addLog(error);
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
118
158
|
cleanup();
|
|
119
159
|
callback(null, url);
|
|
120
160
|
}
|