@things-factory/attachment-base 4.3.424 → 4.3.425
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-server/attachment-const.js +1 -2
- package/dist-server/attachment-const.js.map +1 -1
- package/dist-server/awb-storage-s3.js +7 -31
- package/dist-server/awb-storage-s3.js.map +1 -1
- package/dist-server/storage-s3.js +7 -63
- package/dist-server/storage-s3.js.map +1 -1
- package/package.json +3 -4
- package/server/attachment-const.ts +0 -1
- package/server/awb-storage-s3.ts +8 -32
- package/server/storage-s3.ts +8 -68
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ATTACHMENT_PATH = exports.INVSTORAGE = exports.
|
|
3
|
+
exports.ATTACHMENT_PATH = exports.INVSTORAGE = 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');
|
|
8
7
|
exports.INVSTORAGE = env_1.config.get('invoiceFileStorage');
|
|
9
8
|
exports.ATTACHMENT_PATH = env_1.config.get('attachmentPath', 'attachment');
|
|
10
9
|
//# 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,
|
|
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,43 +1,19 @@
|
|
|
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");
|
|
5
4
|
const lib_storage_1 = require("@aws-sdk/lib-storage");
|
|
6
5
|
const env_1 = require("@things-factory/env");
|
|
7
6
|
const attachment_const_1 = require("./attachment-const");
|
|
8
7
|
if (attachment_const_1.AWBSTORAGE && attachment_const_1.AWBSTORAGE.type == 's3') {
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
};
|
|
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
|
+
});
|
|
31
15
|
/* upload file */
|
|
32
16
|
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
|
-
});
|
|
41
17
|
const upload = new lib_storage_1.Upload({
|
|
42
18
|
client,
|
|
43
19
|
params: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"awb-storage-s3.js","sourceRoot":"","sources":["../server/awb-storage-s3.ts"],"names":[],"mappings":";;AAAA,kDAA6C;AAC7C,
|
|
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"}
|
|
@@ -2,7 +2,6 @@
|
|
|
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");
|
|
6
5
|
const lib_storage_1 = require("@aws-sdk/lib-storage");
|
|
7
6
|
const s3_presigned_post_1 = require("@aws-sdk/s3-presigned-post");
|
|
8
7
|
const env_1 = require("@things-factory/env");
|
|
@@ -10,28 +9,13 @@ const attachment_const_1 = require("./attachment-const");
|
|
|
10
9
|
const mime = require('mime');
|
|
11
10
|
const { fs } = require('memfs');
|
|
12
11
|
if (attachment_const_1.STORAGE && attachment_const_1.STORAGE.type == 's3') {
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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
|
-
};
|
|
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
|
+
});
|
|
35
19
|
const streamToBuffer = (stream) => new Promise((resolve, reject) => {
|
|
36
20
|
const chunks = [];
|
|
37
21
|
stream.on('data', chunk => chunks.push(chunk));
|
|
@@ -44,14 +28,6 @@ if (attachment_const_1.STORAGE && attachment_const_1.STORAGE.type == 's3') {
|
|
|
44
28
|
const ext = filename.split('.').pop();
|
|
45
29
|
const key = ext ? `${id}.${ext}` : id;
|
|
46
30
|
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
|
-
});
|
|
55
31
|
const upload = new lib_storage_1.Upload({
|
|
56
32
|
client,
|
|
57
33
|
params: {
|
|
@@ -69,14 +45,6 @@ if (attachment_const_1.STORAGE && attachment_const_1.STORAGE.type == 's3') {
|
|
|
69
45
|
};
|
|
70
46
|
};
|
|
71
47
|
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
|
-
});
|
|
80
48
|
const command = new client_s3_1.DeleteObjectCommand({
|
|
81
49
|
Bucket: attachment_const_1.STORAGE.bucketName,
|
|
82
50
|
Key: path
|
|
@@ -85,14 +53,6 @@ if (attachment_const_1.STORAGE && attachment_const_1.STORAGE.type == 's3') {
|
|
|
85
53
|
};
|
|
86
54
|
/* TODO Streaming to Streaming 으로 구현하라. */
|
|
87
55
|
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
|
-
});
|
|
96
56
|
const result = await client.send(new client_s3_1.GetObjectCommand({
|
|
97
57
|
Bucket: attachment_const_1.STORAGE.bucketName,
|
|
98
58
|
Key: attachment
|
|
@@ -107,14 +67,6 @@ if (attachment_const_1.STORAGE && attachment_const_1.STORAGE.type == 's3') {
|
|
|
107
67
|
context.body = result.Body;
|
|
108
68
|
};
|
|
109
69
|
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
|
-
});
|
|
118
70
|
/*
|
|
119
71
|
* refered to
|
|
120
72
|
* https://transang.me/modern-fetch-and-how-to-get-buffer-output-from-aws-sdk-v3-getobjectcommand/#the-body-type
|
|
@@ -135,14 +87,6 @@ if (attachment_const_1.STORAGE && attachment_const_1.STORAGE.type == 's3') {
|
|
|
135
87
|
attachment_const_1.STORAGE.generateUploadURL = async (type) => {
|
|
136
88
|
const expiresInMinutes = 1;
|
|
137
89
|
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
|
-
});
|
|
146
90
|
return await (0, s3_presigned_post_1.createPresignedPost)(client, {
|
|
147
91
|
Bucket: attachment_const_1.STORAGE.bucketName,
|
|
148
92
|
Key: id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-s3.js","sourceRoot":"","sources":["../server/storage-s3.ts"],"names":[],"mappings":";;AACA,+BAAmC;AAEnC,kDAA2G;AAC3G,
|
|
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.
|
|
3
|
+
"version": "4.3.425",
|
|
4
4
|
"main": "dist-server/index.js",
|
|
5
5
|
"browser": "client/index.js",
|
|
6
6
|
"things-factory": true,
|
|
@@ -24,15 +24,14 @@
|
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@aws-sdk/client-s3": "^3.46.0",
|
|
27
|
-
"@aws-sdk/client-secrets-manager": "^3.46.0",
|
|
28
27
|
"@aws-sdk/lib-storage": "^3.46.0",
|
|
29
28
|
"@aws-sdk/s3-presigned-post": "^3.46.0",
|
|
30
29
|
"@koa/multer": "^3.0.0",
|
|
31
|
-
"@things-factory/auth-base": "^4.3.
|
|
30
|
+
"@things-factory/auth-base": "^4.3.425",
|
|
32
31
|
"@things-factory/env": "^4.3.381",
|
|
33
32
|
"memfs": "^3.0.1",
|
|
34
33
|
"mime": "^2.4.4",
|
|
35
34
|
"multer": "^1.3.0"
|
|
36
35
|
},
|
|
37
|
-
"gitHead": "
|
|
36
|
+
"gitHead": "43a4d63f2d8411e2f7446c3627dbf8acafbd3c44"
|
|
38
37
|
}
|
|
@@ -2,6 +2,5 @@ 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')
|
|
6
5
|
export var INVSTORAGE: any = config.get('invoiceFileStorage')
|
|
7
6
|
export const ATTACHMENT_PATH: string = config.get('attachmentPath', 'attachment')
|
package/server/awb-storage-s3.ts
CHANGED
|
@@ -1,44 +1,20 @@
|
|
|
1
1
|
import { S3Client } from '@aws-sdk/client-s3'
|
|
2
|
-
import { GetSecretValueCommand, SecretsManagerClient } from '@aws-sdk/client-secrets-manager'
|
|
3
2
|
import { Upload } from '@aws-sdk/lib-storage'
|
|
4
3
|
import { logger } from '@things-factory/env'
|
|
5
4
|
|
|
6
|
-
import { AWBSTORAGE
|
|
5
|
+
import { AWBSTORAGE } from './attachment-const'
|
|
7
6
|
|
|
8
7
|
if (AWBSTORAGE && AWBSTORAGE.type == 's3') {
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
}
|
|
8
|
+
const client = new S3Client({
|
|
9
|
+
credentials: {
|
|
10
|
+
accessKeyId: AWBSTORAGE.accessKeyId,
|
|
11
|
+
secretAccessKey: AWBSTORAGE.secretAccessKey
|
|
12
|
+
},
|
|
13
|
+
region: AWBSTORAGE.region
|
|
14
|
+
})
|
|
30
15
|
|
|
31
16
|
/* upload file */
|
|
32
17
|
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
|
-
|
|
42
18
|
const upload = new Upload({
|
|
43
19
|
client,
|
|
44
20
|
params: {
|
package/server/storage-s3.ts
CHANGED
|
@@ -2,38 +2,23 @@ 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'
|
|
6
5
|
import { Upload } from '@aws-sdk/lib-storage'
|
|
7
6
|
import { createPresignedPost } from '@aws-sdk/s3-presigned-post'
|
|
8
7
|
import { logger } from '@things-factory/env'
|
|
9
8
|
|
|
10
|
-
import {
|
|
9
|
+
import { STORAGE } from './attachment-const'
|
|
11
10
|
|
|
12
11
|
const mime = require('mime')
|
|
13
12
|
const { fs } = require('memfs')
|
|
14
13
|
|
|
15
14
|
if (STORAGE && STORAGE.type == 's3') {
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
}
|
|
15
|
+
const client = new S3Client({
|
|
16
|
+
credentials: {
|
|
17
|
+
accessKeyId: STORAGE.accessKeyId,
|
|
18
|
+
secretAccessKey: STORAGE.secretAccessKey
|
|
19
|
+
},
|
|
20
|
+
region: STORAGE.region
|
|
21
|
+
})
|
|
37
22
|
|
|
38
23
|
const streamToBuffer = (stream: Readable) =>
|
|
39
24
|
new Promise<Buffer>((resolve, reject) => {
|
|
@@ -50,15 +35,6 @@ if (STORAGE && STORAGE.type == 's3') {
|
|
|
50
35
|
const key = ext ? `${id}.${ext}` : id
|
|
51
36
|
var size: number = 0
|
|
52
37
|
|
|
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
|
-
|
|
62
38
|
const upload = new Upload({
|
|
63
39
|
client,
|
|
64
40
|
params: {
|
|
@@ -78,15 +54,6 @@ if (STORAGE && STORAGE.type == 's3') {
|
|
|
78
54
|
}
|
|
79
55
|
|
|
80
56
|
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
|
-
|
|
90
57
|
const command = new DeleteObjectCommand({
|
|
91
58
|
Bucket: STORAGE.bucketName,
|
|
92
59
|
Key: path
|
|
@@ -97,15 +64,6 @@ if (STORAGE && STORAGE.type == 's3') {
|
|
|
97
64
|
|
|
98
65
|
/* TODO Streaming to Streaming 으로 구현하라. */
|
|
99
66
|
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
|
-
|
|
109
67
|
const result = await client.send(
|
|
110
68
|
new GetObjectCommand({
|
|
111
69
|
Bucket: STORAGE.bucketName,
|
|
@@ -125,15 +83,6 @@ if (STORAGE && STORAGE.type == 's3') {
|
|
|
125
83
|
}
|
|
126
84
|
|
|
127
85
|
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
|
-
|
|
137
86
|
/*
|
|
138
87
|
* refered to
|
|
139
88
|
* https://transang.me/modern-fetch-and-how-to-get-buffer-output-from-aws-sdk-v3-getobjectcommand/#the-body-type
|
|
@@ -160,15 +109,6 @@ if (STORAGE && STORAGE.type == 's3') {
|
|
|
160
109
|
const expiresInMinutes = 1
|
|
161
110
|
const id = uuidv4()
|
|
162
111
|
|
|
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
|
-
|
|
172
112
|
return await createPresignedPost(client, {
|
|
173
113
|
Bucket: STORAGE.bucketName,
|
|
174
114
|
Key: id,
|