@things-factory/attachment-base 4.3.380 → 4.3.424

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.
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ATTACHMENT_PATH = exports.INVSTORAGE = exports.AWBSTORAGE = exports.STORAGE = void 0;
3
+ exports.ATTACHMENT_PATH = exports.INVSTORAGE = exports.AWSCREDENTIAL = exports.AWBSTORAGE = exports.STORAGE = void 0;
4
4
  const env_1 = require("@things-factory/env");
5
5
  exports.STORAGE = env_1.config.get('storage');
6
6
  exports.AWBSTORAGE = env_1.config.get('awbFileStorage');
7
+ exports.AWSCREDENTIAL = env_1.config.get('awsCredential');
7
8
  exports.INVSTORAGE = env_1.config.get('invoiceFileStorage');
8
9
  exports.ATTACHMENT_PATH = env_1.config.get('attachmentPath', 'attachment');
9
10
  //# sourceMappingURL=attachment-const.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"attachment-const.js","sourceRoot":"","sources":["../server/attachment-const.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAEjC,QAAA,OAAO,GAAQ,YAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;AACpC,QAAA,UAAU,GAAQ,YAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;AAC9C,QAAA,UAAU,GAAQ,YAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;AAChD,QAAA,eAAe,GAAW,YAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAA"}
1
+ {"version":3,"file":"attachment-const.js","sourceRoot":"","sources":["../server/attachment-const.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAEjC,QAAA,OAAO,GAAQ,YAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;AACpC,QAAA,UAAU,GAAQ,YAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;AAC9C,QAAA,aAAa,GAAQ,YAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;AAChD,QAAA,UAAU,GAAQ,YAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;AAChD,QAAA,eAAe,GAAW,YAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAA"}
@@ -1,19 +1,43 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const client_s3_1 = require("@aws-sdk/client-s3");
4
+ const client_secrets_manager_1 = require("@aws-sdk/client-secrets-manager");
4
5
  const lib_storage_1 = require("@aws-sdk/lib-storage");
5
6
  const env_1 = require("@things-factory/env");
6
7
  const attachment_const_1 = require("./attachment-const");
7
8
  if (attachment_const_1.AWBSTORAGE && attachment_const_1.AWBSTORAGE.type == 's3') {
8
- const client = new client_s3_1.S3Client({
9
- credentials: {
10
- accessKeyId: attachment_const_1.AWBSTORAGE.accessKeyId,
11
- secretAccessKey: attachment_const_1.AWBSTORAGE.secretAccessKey
12
- },
13
- region: attachment_const_1.AWBSTORAGE.region
14
- });
9
+ const getAWSSecret = async () => {
10
+ const secretManager = new client_secrets_manager_1.SecretsManagerClient({ region: attachment_const_1.AWSCREDENTIAL.region });
11
+ const secretManagerParams = {
12
+ SecretId: attachment_const_1.AWSCREDENTIAL.secretName,
13
+ VersionStage: 'AWSCURRENT'
14
+ };
15
+ const command = new client_secrets_manager_1.GetSecretValueCommand(secretManagerParams);
16
+ try {
17
+ const data = await secretManager.send(command);
18
+ const dataSecretString = data.SecretString;
19
+ if (dataSecretString) {
20
+ const secretString = JSON.parse(dataSecretString);
21
+ return { accessKeyId: secretString.accessKeyId, secretAccessKey: secretString.secretAccessKey };
22
+ }
23
+ else {
24
+ return null;
25
+ }
26
+ }
27
+ catch (error) {
28
+ console.log(`[SFTP Get Secret]: ${error}`);
29
+ }
30
+ };
15
31
  /* upload file */
16
32
  attachment_const_1.AWBSTORAGE.uploadFile = async ({ stream, filename }) => {
33
+ const { accessKeyId, secretAccessKey } = await getAWSSecret();
34
+ const client = new client_s3_1.S3Client({
35
+ credentials: {
36
+ accessKeyId: accessKeyId,
37
+ secretAccessKey: secretAccessKey
38
+ },
39
+ region: attachment_const_1.AWSCREDENTIAL.region
40
+ });
17
41
  const upload = new lib_storage_1.Upload({
18
42
  client,
19
43
  params: {
@@ -1 +1 @@
1
- {"version":3,"file":"awb-storage-s3.js","sourceRoot":"","sources":["../server/awb-storage-s3.ts"],"names":[],"mappings":";;AAAA,kDAA6C;AAC7C,sDAA6C;AAC7C,6CAA4C;AAE5C,yDAA+C;AAE/C,IAAI,6BAAU,IAAI,6BAAU,CAAC,IAAI,IAAI,IAAI,EAAE;IACzC,MAAM,MAAM,GAAG,IAAI,oBAAQ,CAAC;QAC1B,WAAW,EAAE;YACX,WAAW,EAAE,6BAAU,CAAC,WAAW;YACnC,eAAe,EAAE,6BAAU,CAAC,eAAe;SAC5C;QACD,MAAM,EAAE,6BAAU,CAAC,MAAM;KAC1B,CAAC,CAAA;IAEF,iBAAiB;IACjB,6BAAU,CAAC,UAAU,GAAG,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;QACrD,MAAM,MAAM,GAAG,IAAI,oBAAM,CAAC;YACxB,MAAM;YACN,MAAM,EAAE;gBACN,MAAM,EAAE,6BAAU,CAAC,UAAU;gBAC7B,GAAG,EAAE,GAAG,QAAQ,MAAM;gBACtB,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,iBAAiB;aAC/B;SACF,CAAC,CAAA;QAEF,IAAI,MAAM,CAAA;QACV,IAAI,GAAG,CAAA;QACP,IAAI;YACF,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAQ,CAAA;YACrC,GAAG,GAAG,WAAW,6BAAU,CAAC,UAAU,OAAO,6BAAU,CAAC,MAAM,kBAAkB,QAAQ,MAAM,CAAA;SAC/F;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;SACf;QAED,OAAO;YACL,MAAM;YACN,GAAG;SACJ,CAAA;IACH,CAAC,CAAA;IAED,YAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAA;CACxD"}
1
+ {"version":3,"file":"awb-storage-s3.js","sourceRoot":"","sources":["../server/awb-storage-s3.ts"],"names":[],"mappings":";;AAAA,kDAA6C;AAC7C,4EAA6F;AAC7F,sDAA6C;AAC7C,6CAA4C;AAE5C,yDAA8D;AAE9D,IAAI,6BAAU,IAAI,6BAAU,CAAC,IAAI,IAAI,IAAI,EAAE;IACzC,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE;QAC9B,MAAM,aAAa,GAAG,IAAI,6CAAoB,CAAC,EAAE,MAAM,EAAE,gCAAa,CAAC,MAAM,EAAE,CAAC,CAAA;QAChF,MAAM,mBAAmB,GAAG;YAC1B,QAAQ,EAAE,gCAAa,CAAC,UAAU;YAClC,YAAY,EAAE,YAAY;SAC3B,CAAA;QACD,MAAM,OAAO,GAAG,IAAI,8CAAqB,CAAC,mBAAmB,CAAC,CAAA;QAC9D,IAAI;YACF,MAAM,IAAI,GAAQ,MAAM,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACnD,MAAM,gBAAgB,GAAQ,IAAI,CAAC,YAAY,CAAA;YAC/C,IAAI,gBAAgB,EAAE;gBACpB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;gBAEjD,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,WAAW,EAAE,eAAe,EAAE,YAAY,CAAC,eAAe,EAAE,CAAA;aAChG;iBAAM;gBACL,OAAO,IAAI,CAAA;aACZ;SACF;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,EAAE,CAAC,CAAA;SAC3C;IACH,CAAC,CAAA;IAED,iBAAiB;IACjB,6BAAU,CAAC,UAAU,GAAG,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;QACrD,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,MAAM,YAAY,EAAE,CAAA;QAC7D,MAAM,MAAM,GAAG,IAAI,oBAAQ,CAAC;YAC1B,WAAW,EAAE;gBACX,WAAW,EAAE,WAAW;gBACxB,eAAe,EAAE,eAAe;aACjC;YACD,MAAM,EAAE,gCAAa,CAAC,MAAM;SAC7B,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,IAAI,oBAAM,CAAC;YACxB,MAAM;YACN,MAAM,EAAE;gBACN,MAAM,EAAE,6BAAU,CAAC,UAAU;gBAC7B,GAAG,EAAE,GAAG,QAAQ,MAAM;gBACtB,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,iBAAiB;aAC/B;SACF,CAAC,CAAA;QAEF,IAAI,MAAM,CAAA;QACV,IAAI,GAAG,CAAA;QACP,IAAI;YACF,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAQ,CAAA;YACrC,GAAG,GAAG,WAAW,6BAAU,CAAC,UAAU,OAAO,6BAAU,CAAC,MAAM,kBAAkB,QAAQ,MAAM,CAAA;SAC/F;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;SACf;QAED,OAAO;YACL,MAAM;YACN,GAAG;SACJ,CAAA;IACH,CAAC,CAAA;IAED,YAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAA;CACxD"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const uuid_1 = require("uuid");
4
4
  const client_s3_1 = require("@aws-sdk/client-s3");
5
+ const client_secrets_manager_1 = require("@aws-sdk/client-secrets-manager");
5
6
  const lib_storage_1 = require("@aws-sdk/lib-storage");
6
7
  const s3_presigned_post_1 = require("@aws-sdk/s3-presigned-post");
7
8
  const env_1 = require("@things-factory/env");
@@ -9,13 +10,28 @@ const attachment_const_1 = require("./attachment-const");
9
10
  const mime = require('mime');
10
11
  const { fs } = require('memfs');
11
12
  if (attachment_const_1.STORAGE && attachment_const_1.STORAGE.type == 's3') {
12
- const client = new client_s3_1.S3Client({
13
- credentials: {
14
- accessKeyId: attachment_const_1.STORAGE.accessKeyId,
15
- secretAccessKey: attachment_const_1.STORAGE.secretAccessKey
16
- },
17
- region: attachment_const_1.STORAGE.region
18
- });
13
+ const getAWSSecret = async () => {
14
+ const secretManager = new client_secrets_manager_1.SecretsManagerClient({ region: attachment_const_1.AWSCREDENTIAL.region });
15
+ const secretManagerParams = {
16
+ SecretId: attachment_const_1.AWSCREDENTIAL.secretName,
17
+ VersionStage: 'AWSCURRENT'
18
+ };
19
+ const command = new client_secrets_manager_1.GetSecretValueCommand(secretManagerParams);
20
+ try {
21
+ const data = await secretManager.send(command);
22
+ const dataSecretString = data.SecretString;
23
+ if (dataSecretString) {
24
+ const secretString = JSON.parse(dataSecretString);
25
+ return { accessKeyId: secretString.accessKeyId, secretAccessKey: secretString.secretAccessKey };
26
+ }
27
+ else {
28
+ return null;
29
+ }
30
+ }
31
+ catch (error) {
32
+ console.log(`[SFTP Get Secret]: ${error}`);
33
+ }
34
+ };
19
35
  const streamToBuffer = (stream) => new Promise((resolve, reject) => {
20
36
  const chunks = [];
21
37
  stream.on('data', chunk => chunks.push(chunk));
@@ -28,6 +44,14 @@ if (attachment_const_1.STORAGE && attachment_const_1.STORAGE.type == 's3') {
28
44
  const ext = filename.split('.').pop();
29
45
  const key = ext ? `${id}.${ext}` : id;
30
46
  var size = 0;
47
+ const { accessKeyId, secretAccessKey } = await getAWSSecret();
48
+ const client = new client_s3_1.S3Client({
49
+ credentials: {
50
+ accessKeyId: accessKeyId,
51
+ secretAccessKey: secretAccessKey
52
+ },
53
+ region: attachment_const_1.AWSCREDENTIAL.region
54
+ });
31
55
  const upload = new lib_storage_1.Upload({
32
56
  client,
33
57
  params: {
@@ -45,6 +69,14 @@ if (attachment_const_1.STORAGE && attachment_const_1.STORAGE.type == 's3') {
45
69
  };
46
70
  };
47
71
  attachment_const_1.STORAGE.deleteFile = async (path) => {
72
+ const { accessKeyId, secretAccessKey } = await getAWSSecret();
73
+ const client = new client_s3_1.S3Client({
74
+ credentials: {
75
+ accessKeyId: accessKeyId,
76
+ secretAccessKey: secretAccessKey
77
+ },
78
+ region: attachment_const_1.AWSCREDENTIAL.region
79
+ });
48
80
  const command = new client_s3_1.DeleteObjectCommand({
49
81
  Bucket: attachment_const_1.STORAGE.bucketName,
50
82
  Key: path
@@ -53,6 +85,14 @@ if (attachment_const_1.STORAGE && attachment_const_1.STORAGE.type == 's3') {
53
85
  };
54
86
  /* TODO Streaming to Streaming 으로 구현하라. */
55
87
  attachment_const_1.STORAGE.sendFile = async (context, attachment, next) => {
88
+ const { accessKeyId, secretAccessKey } = await getAWSSecret();
89
+ const client = new client_s3_1.S3Client({
90
+ credentials: {
91
+ accessKeyId: accessKeyId,
92
+ secretAccessKey: secretAccessKey
93
+ },
94
+ region: attachment_const_1.AWSCREDENTIAL.region
95
+ });
56
96
  const result = await client.send(new client_s3_1.GetObjectCommand({
57
97
  Bucket: attachment_const_1.STORAGE.bucketName,
58
98
  Key: attachment
@@ -67,6 +107,14 @@ if (attachment_const_1.STORAGE && attachment_const_1.STORAGE.type == 's3') {
67
107
  context.body = result.Body;
68
108
  };
69
109
  attachment_const_1.STORAGE.readFile = async (attachment, encoding) => {
110
+ const { accessKeyId, secretAccessKey } = await getAWSSecret();
111
+ const client = new client_s3_1.S3Client({
112
+ credentials: {
113
+ accessKeyId: accessKeyId,
114
+ secretAccessKey: secretAccessKey
115
+ },
116
+ region: attachment_const_1.AWSCREDENTIAL.region
117
+ });
70
118
  /*
71
119
  * refered to
72
120
  * https://transang.me/modern-fetch-and-how-to-get-buffer-output-from-aws-sdk-v3-getobjectcommand/#the-body-type
@@ -87,6 +135,14 @@ if (attachment_const_1.STORAGE && attachment_const_1.STORAGE.type == 's3') {
87
135
  attachment_const_1.STORAGE.generateUploadURL = async (type) => {
88
136
  const expiresInMinutes = 1;
89
137
  const id = (0, uuid_1.v4)();
138
+ const { accessKeyId, secretAccessKey } = await getAWSSecret();
139
+ const client = new client_s3_1.S3Client({
140
+ credentials: {
141
+ accessKeyId: accessKeyId,
142
+ secretAccessKey: secretAccessKey
143
+ },
144
+ region: attachment_const_1.AWSCREDENTIAL.region
145
+ });
90
146
  return await (0, s3_presigned_post_1.createPresignedPost)(client, {
91
147
  Bucket: attachment_const_1.STORAGE.bucketName,
92
148
  Key: id,
@@ -1 +1 @@
1
- {"version":3,"file":"storage-s3.js","sourceRoot":"","sources":["../server/storage-s3.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage-s3.js","sourceRoot":"","sources":["../server/storage-s3.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/attachment-base",
3
- "version": "4.3.380",
3
+ "version": "4.3.424",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "client/index.js",
6
6
  "things-factory": true,
@@ -24,14 +24,15 @@
24
24
  },
25
25
  "dependencies": {
26
26
  "@aws-sdk/client-s3": "^3.46.0",
27
+ "@aws-sdk/client-secrets-manager": "^3.46.0",
27
28
  "@aws-sdk/lib-storage": "^3.46.0",
28
29
  "@aws-sdk/s3-presigned-post": "^3.46.0",
29
30
  "@koa/multer": "^3.0.0",
30
- "@things-factory/auth-base": "^4.3.380",
31
- "@things-factory/env": "^4.3.380",
31
+ "@things-factory/auth-base": "^4.3.424",
32
+ "@things-factory/env": "^4.3.381",
32
33
  "memfs": "^3.0.1",
33
34
  "mime": "^2.4.4",
34
35
  "multer": "^1.3.0"
35
36
  },
36
- "gitHead": "675ea67e85a7ee10bee7639d92e0bf3eda8c48d1"
37
+ "gitHead": "0c04dd6934c7eb335fc5ad2dd55172b5e79cdca7"
37
38
  }
@@ -2,5 +2,6 @@ import { config } from '@things-factory/env'
2
2
 
3
3
  export var STORAGE: any = config.get('storage')
4
4
  export var AWBSTORAGE: any = config.get('awbFileStorage')
5
+ export var AWSCREDENTIAL: any = config.get('awsCredential')
5
6
  export var INVSTORAGE: any = config.get('invoiceFileStorage')
6
7
  export const ATTACHMENT_PATH: string = config.get('attachmentPath', 'attachment')
@@ -1,20 +1,44 @@
1
1
  import { S3Client } from '@aws-sdk/client-s3'
2
+ import { GetSecretValueCommand, SecretsManagerClient } from '@aws-sdk/client-secrets-manager'
2
3
  import { Upload } from '@aws-sdk/lib-storage'
3
4
  import { logger } from '@things-factory/env'
4
5
 
5
- import { AWBSTORAGE } from './attachment-const'
6
+ import { AWBSTORAGE, AWSCREDENTIAL } from './attachment-const'
6
7
 
7
8
  if (AWBSTORAGE && AWBSTORAGE.type == 's3') {
8
- const client = new S3Client({
9
- credentials: {
10
- accessKeyId: AWBSTORAGE.accessKeyId,
11
- secretAccessKey: AWBSTORAGE.secretAccessKey
12
- },
13
- region: AWBSTORAGE.region
14
- })
9
+ const getAWSSecret = async () => {
10
+ const secretManager = new SecretsManagerClient({ region: AWSCREDENTIAL.region })
11
+ const secretManagerParams = {
12
+ SecretId: AWSCREDENTIAL.secretName,
13
+ VersionStage: 'AWSCURRENT'
14
+ }
15
+ const command = new GetSecretValueCommand(secretManagerParams)
16
+ try {
17
+ const data: any = await secretManager.send(command)
18
+ const dataSecretString: any = data.SecretString
19
+ if (dataSecretString) {
20
+ const secretString = JSON.parse(dataSecretString)
21
+
22
+ return { accessKeyId: secretString.accessKeyId, secretAccessKey: secretString.secretAccessKey }
23
+ } else {
24
+ return null
25
+ }
26
+ } catch (error) {
27
+ console.log(`[SFTP Get Secret]: ${error}`)
28
+ }
29
+ }
15
30
 
16
31
  /* upload file */
17
32
  AWBSTORAGE.uploadFile = async ({ stream, filename }) => {
33
+ const { accessKeyId, secretAccessKey } = await getAWSSecret()
34
+ const client = new S3Client({
35
+ credentials: {
36
+ accessKeyId: accessKeyId,
37
+ secretAccessKey: secretAccessKey
38
+ },
39
+ region: AWSCREDENTIAL.region
40
+ })
41
+
18
42
  const upload = new Upload({
19
43
  client,
20
44
  params: {
@@ -2,23 +2,38 @@ import type { Readable } from 'stream'
2
2
  import { v4 as uuidv4 } from 'uuid'
3
3
 
4
4
  import { DeleteObjectCommand, GetObjectCommand, GetObjectCommandInput, S3Client } from '@aws-sdk/client-s3'
5
+ import { GetSecretValueCommand, SecretsManagerClient } from '@aws-sdk/client-secrets-manager'
5
6
  import { Upload } from '@aws-sdk/lib-storage'
6
7
  import { createPresignedPost } from '@aws-sdk/s3-presigned-post'
7
8
  import { logger } from '@things-factory/env'
8
9
 
9
- import { STORAGE } from './attachment-const'
10
+ import { AWSCREDENTIAL, STORAGE } from './attachment-const'
10
11
 
11
12
  const mime = require('mime')
12
13
  const { fs } = require('memfs')
13
14
 
14
15
  if (STORAGE && STORAGE.type == 's3') {
15
- const client = new S3Client({
16
- credentials: {
17
- accessKeyId: STORAGE.accessKeyId,
18
- secretAccessKey: STORAGE.secretAccessKey
19
- },
20
- region: STORAGE.region
21
- })
16
+ const getAWSSecret = async () => {
17
+ const secretManager = new SecretsManagerClient({ region: AWSCREDENTIAL.region })
18
+ const secretManagerParams = {
19
+ SecretId: AWSCREDENTIAL.secretName,
20
+ VersionStage: 'AWSCURRENT'
21
+ }
22
+ const command = new GetSecretValueCommand(secretManagerParams)
23
+ try {
24
+ const data: any = await secretManager.send(command)
25
+ const dataSecretString: any = data.SecretString
26
+ if (dataSecretString) {
27
+ const secretString = JSON.parse(dataSecretString)
28
+
29
+ return { accessKeyId: secretString.accessKeyId, secretAccessKey: secretString.secretAccessKey }
30
+ } else {
31
+ return null
32
+ }
33
+ } catch (error) {
34
+ console.log(`[SFTP Get Secret]: ${error}`)
35
+ }
36
+ }
22
37
 
23
38
  const streamToBuffer = (stream: Readable) =>
24
39
  new Promise<Buffer>((resolve, reject) => {
@@ -35,6 +50,15 @@ if (STORAGE && STORAGE.type == 's3') {
35
50
  const key = ext ? `${id}.${ext}` : id
36
51
  var size: number = 0
37
52
 
53
+ const { accessKeyId, secretAccessKey } = await getAWSSecret()
54
+ const client = new S3Client({
55
+ credentials: {
56
+ accessKeyId: accessKeyId,
57
+ secretAccessKey: secretAccessKey
58
+ },
59
+ region: AWSCREDENTIAL.region
60
+ })
61
+
38
62
  const upload = new Upload({
39
63
  client,
40
64
  params: {
@@ -54,6 +78,15 @@ if (STORAGE && STORAGE.type == 's3') {
54
78
  }
55
79
 
56
80
  STORAGE.deleteFile = async (path: string) => {
81
+ const { accessKeyId, secretAccessKey } = await getAWSSecret()
82
+ const client = new S3Client({
83
+ credentials: {
84
+ accessKeyId: accessKeyId,
85
+ secretAccessKey: secretAccessKey
86
+ },
87
+ region: AWSCREDENTIAL.region
88
+ })
89
+
57
90
  const command = new DeleteObjectCommand({
58
91
  Bucket: STORAGE.bucketName,
59
92
  Key: path
@@ -64,6 +97,15 @@ if (STORAGE && STORAGE.type == 's3') {
64
97
 
65
98
  /* TODO Streaming to Streaming 으로 구현하라. */
66
99
  STORAGE.sendFile = async (context, attachment, next) => {
100
+ const { accessKeyId, secretAccessKey } = await getAWSSecret()
101
+ const client = new S3Client({
102
+ credentials: {
103
+ accessKeyId: accessKeyId,
104
+ secretAccessKey: secretAccessKey
105
+ },
106
+ region: AWSCREDENTIAL.region
107
+ })
108
+
67
109
  const result = await client.send(
68
110
  new GetObjectCommand({
69
111
  Bucket: STORAGE.bucketName,
@@ -83,6 +125,15 @@ if (STORAGE && STORAGE.type == 's3') {
83
125
  }
84
126
 
85
127
  STORAGE.readFile = async (attachment: string, encoding: string) => {
128
+ const { accessKeyId, secretAccessKey } = await getAWSSecret()
129
+ const client = new S3Client({
130
+ credentials: {
131
+ accessKeyId: accessKeyId,
132
+ secretAccessKey: secretAccessKey
133
+ },
134
+ region: AWSCREDENTIAL.region
135
+ })
136
+
86
137
  /*
87
138
  * refered to
88
139
  * https://transang.me/modern-fetch-and-how-to-get-buffer-output-from-aws-sdk-v3-getobjectcommand/#the-body-type
@@ -109,6 +160,15 @@ if (STORAGE && STORAGE.type == 's3') {
109
160
  const expiresInMinutes = 1
110
161
  const id = uuidv4()
111
162
 
163
+ const { accessKeyId, secretAccessKey } = await getAWSSecret()
164
+ const client = new S3Client({
165
+ credentials: {
166
+ accessKeyId: accessKeyId,
167
+ secretAccessKey: secretAccessKey
168
+ },
169
+ region: AWSCREDENTIAL.region
170
+ })
171
+
112
172
  return await createPresignedPost(client, {
113
173
  Bucket: STORAGE.bucketName,
114
174
  Key: id,