@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 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.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.6.0",
25
- "@e-mc/module": "^0.6.0",
26
- "@e-mc/types": "^0.6.0",
27
- "aws-sdk": "^2.1430.0"
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, admin.configBucket?.create, service, sdk));
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
  }