@campxdev/server-shared 2.0.4 → 2.0.6
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/domain/entities/institution-config.entity.d.ts +42 -0
- package/dist/domain/entities/institution-config.entity.d.ts.map +1 -0
- package/dist/domain/entities/institution-config.entity.js +195 -0
- package/dist/domain/entities/institution-config.entity.js.map +1 -0
- package/dist/domain/modules/shared-domain.module.d.ts.map +1 -1
- package/dist/domain/modules/shared-domain.module.js +6 -0
- package/dist/domain/modules/shared-domain.module.js.map +1 -1
- package/dist/domain/mysql-repositories/mysql-institution-config.repository.d.ts +12 -0
- package/dist/domain/mysql-repositories/mysql-institution-config.repository.d.ts.map +1 -0
- package/dist/domain/mysql-repositories/mysql-institution-config.repository.js +47 -0
- package/dist/domain/mysql-repositories/mysql-institution-config.repository.js.map +1 -0
- package/dist/domain/repositories/institution-config.repository.d.ts +11 -0
- package/dist/domain/repositories/institution-config.repository.d.ts.map +1 -0
- package/dist/domain/repositories/institution-config.repository.js +7 -0
- package/dist/domain/repositories/institution-config.repository.js.map +1 -0
- package/dist/media/index.d.ts +6 -0
- package/dist/media/index.d.ts.map +1 -1
- package/dist/media/index.js +6 -0
- package/dist/media/index.js.map +1 -1
- package/dist/media/interfaces/s3-client.interfaces.d.ts +39 -0
- package/dist/media/interfaces/s3-client.interfaces.d.ts.map +1 -0
- package/dist/media/interfaces/s3-client.interfaces.js +3 -0
- package/dist/media/interfaces/s3-client.interfaces.js.map +1 -0
- package/dist/media/interfaces/sts.interfaces.d.ts +7 -0
- package/dist/media/interfaces/sts.interfaces.d.ts.map +1 -0
- package/dist/media/interfaces/sts.interfaces.js +3 -0
- package/dist/media/interfaces/sts.interfaces.js.map +1 -0
- package/dist/media/managers/aws.manager.d.ts +2 -1
- package/dist/media/managers/aws.manager.d.ts.map +1 -1
- package/dist/media/managers/aws.manager.js.map +1 -1
- package/dist/media/managers/media-object-manager.d.ts +13 -3
- package/dist/media/managers/media-object-manager.d.ts.map +1 -1
- package/dist/media/managers/media-object-manager.js +16 -8
- package/dist/media/managers/media-object-manager.js.map +1 -1
- package/dist/media/managers/media-records-manager.d.ts +14 -3
- package/dist/media/managers/media-records-manager.d.ts.map +1 -1
- package/dist/media/managers/media-records-manager.js +18 -9
- package/dist/media/managers/media-records-manager.js.map +1 -1
- package/dist/media/media.module.d.ts.map +1 -1
- package/dist/media/media.module.js +5 -2
- package/dist/media/media.module.js.map +1 -1
- package/dist/media/services/s3-client-factory.service.d.ts +13 -0
- package/dist/media/services/s3-client-factory.service.d.ts.map +1 -0
- package/dist/media/services/s3-client-factory.service.js +123 -0
- package/dist/media/services/s3-client-factory.service.js.map +1 -0
- package/dist/media/services/s3-client-store.service.d.ts +41 -0
- package/dist/media/services/s3-client-store.service.d.ts.map +1 -0
- package/dist/media/services/s3-client-store.service.js +129 -0
- package/dist/media/services/s3-client-store.service.js.map +1 -0
- package/dist/media/services/sts.service.d.ts +16 -0
- package/dist/media/services/sts.service.d.ts.map +1 -0
- package/dist/media/services/sts.service.js +69 -0
- package/dist/media/services/sts.service.js.map +1 -0
- package/dist/media/utils/simple-cache.d.ts +20 -0
- package/dist/media/utils/simple-cache.d.ts.map +1 -0
- package/dist/media/utils/simple-cache.js +80 -0
- package/dist/media/utils/simple-cache.js.map +1 -0
- package/dist/microsoft/services/teams-meetings-graph.service.d.ts +1 -1
- package/dist/microsoft/services/teams-meetings-graph.service.d.ts.map +1 -1
- package/dist/microsoft/services/teams-meetings-graph.service.js +47 -37
- package/dist/microsoft/services/teams-meetings-graph.service.js.map +1 -1
- package/package.json +4 -3
|
@@ -14,29 +14,35 @@ const common_1 = require("@nestjs/common");
|
|
|
14
14
|
const typeorm_1 = require("typeorm");
|
|
15
15
|
const domain_1 = require("../../domain");
|
|
16
16
|
const request_store_1 = require("../../request-store");
|
|
17
|
+
const s3_client_store_service_1 = require("../services/s3-client-store.service");
|
|
17
18
|
const aws_manager_1 = require("./aws.manager");
|
|
18
19
|
let MediaObjectManager = class MediaObjectManager {
|
|
19
20
|
awsManager;
|
|
20
|
-
|
|
21
|
+
s3ClientStore;
|
|
22
|
+
constructor(awsManager, s3ClientStore) {
|
|
21
23
|
this.awsManager = awsManager;
|
|
24
|
+
this.s3ClientStore = s3ClientStore;
|
|
22
25
|
}
|
|
23
26
|
mediaObjectRepo() {
|
|
24
27
|
return (0, request_store_1.getManager)().getRepository(domain_1.MediaObject);
|
|
25
28
|
}
|
|
26
|
-
async deleteOne(resource) {
|
|
29
|
+
async deleteOne(resource, props) {
|
|
27
30
|
if (!resource)
|
|
28
31
|
return;
|
|
29
32
|
await this.mediaObjectRepo().delete(resource.id);
|
|
30
|
-
await this.
|
|
33
|
+
const awsManager = await this.s3ClientStore.getAWSManager(props?.useInstitutionS3Client);
|
|
34
|
+
await awsManager.deleteFiles([resource.key]);
|
|
31
35
|
}
|
|
32
|
-
async deleteMany(resources) {
|
|
36
|
+
async deleteMany(resources, props) {
|
|
33
37
|
if (!resources || !resources.length)
|
|
34
38
|
return;
|
|
35
39
|
await this.mediaObjectRepo().delete({ id: (0, typeorm_1.In)(resources.map((r) => r.id)) });
|
|
36
|
-
await this.
|
|
40
|
+
const awsManager = await this.s3ClientStore.getAWSManager(props?.useInstitutionS3Client);
|
|
41
|
+
await awsManager.deleteFiles(resources.map((r) => r.key));
|
|
37
42
|
}
|
|
38
43
|
async uploadToS3bucket(props) {
|
|
39
|
-
const
|
|
44
|
+
const awsManager = await this.s3ClientStore.getAWSManager(props.useInstitutionS3Client);
|
|
45
|
+
const uploadRes = await awsManager.uploadFile({
|
|
40
46
|
key: props.key,
|
|
41
47
|
buffer: props.file.buffer,
|
|
42
48
|
mimetype: props.file.mimetype,
|
|
@@ -65,7 +71,8 @@ let MediaObjectManager = class MediaObjectManager {
|
|
|
65
71
|
};
|
|
66
72
|
}
|
|
67
73
|
async copyFileFromBucket(props) {
|
|
68
|
-
const
|
|
74
|
+
const awsManager = await this.s3ClientStore.getAWSManager(props.useInstitutionS3Client);
|
|
75
|
+
const uploadRes = await awsManager.copyFile({
|
|
69
76
|
key: props.key,
|
|
70
77
|
previousKey: props.file.key,
|
|
71
78
|
mimetype: props.file.mimetype,
|
|
@@ -151,6 +158,7 @@ let MediaObjectManager = class MediaObjectManager {
|
|
|
151
158
|
exports.MediaObjectManager = MediaObjectManager;
|
|
152
159
|
exports.MediaObjectManager = MediaObjectManager = __decorate([
|
|
153
160
|
(0, common_1.Injectable)(),
|
|
154
|
-
__metadata("design:paramtypes", [aws_manager_1.AWSManager
|
|
161
|
+
__metadata("design:paramtypes", [aws_manager_1.AWSManager,
|
|
162
|
+
s3_client_store_service_1.S3ClientStoreService])
|
|
155
163
|
], MediaObjectManager);
|
|
156
164
|
//# sourceMappingURL=media-object-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media-object-manager.js","sourceRoot":"","sources":["../../../src/media/managers/media-object-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,qCAA6B;AAC7B,yCAA2C;AAC3C,uDAAiD;AACjD,+CAA2C;
|
|
1
|
+
{"version":3,"file":"media-object-manager.js","sourceRoot":"","sources":["../../../src/media/managers/media-object-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { MediaRecord, MediaRecordFindManyProps, MediaRecordFindOneProps, MediaRecordRepository } from '../../domain';
|
|
2
2
|
import { AWSManager } from './aws.manager';
|
|
3
|
+
import { S3ClientStoreService } from '../services/s3-client-store.service';
|
|
3
4
|
interface UploadToBucketProps {
|
|
4
5
|
type: string;
|
|
5
6
|
subtype?: string;
|
|
6
7
|
key: string;
|
|
7
8
|
file: Express.Multer.File;
|
|
8
9
|
typeId?: string;
|
|
10
|
+
useInstitutionS3Client?: boolean;
|
|
9
11
|
}
|
|
10
12
|
interface UploadBufferToBucketProps {
|
|
11
13
|
type: string;
|
|
@@ -15,6 +17,7 @@ interface UploadBufferToBucketProps {
|
|
|
15
17
|
mimetype: string;
|
|
16
18
|
buffer: Buffer;
|
|
17
19
|
originalname: string;
|
|
20
|
+
useInstitutionS3Client?: boolean;
|
|
18
21
|
}
|
|
19
22
|
interface CopyFileFromBucketProps {
|
|
20
23
|
type: string;
|
|
@@ -27,14 +30,22 @@ interface CopyFileFromBucketProps {
|
|
|
27
30
|
size: number;
|
|
28
31
|
};
|
|
29
32
|
typeId?: string;
|
|
33
|
+
useInstitutionS3Client?: boolean;
|
|
34
|
+
}
|
|
35
|
+
interface DeleteProps {
|
|
36
|
+
useInstitutionS3Client?: boolean;
|
|
37
|
+
}
|
|
38
|
+
interface DeleteManyProps {
|
|
39
|
+
useInstitutionS3Client?: boolean;
|
|
30
40
|
}
|
|
31
41
|
export declare class MediaRecordsManager {
|
|
32
42
|
private readonly awsManager;
|
|
33
43
|
private readonly mediaRecordRepo;
|
|
34
|
-
|
|
44
|
+
private readonly s3ClientStore;
|
|
45
|
+
constructor(awsManager: AWSManager, mediaRecordRepo: MediaRecordRepository, s3ClientStore: S3ClientStoreService);
|
|
35
46
|
generateKey(originalFileName: string, addOriginalName?: boolean): string;
|
|
36
|
-
deleteMany(resources: MediaRecord[]): Promise<void>;
|
|
37
|
-
deleteOne(resource: MediaRecord): Promise<void>;
|
|
47
|
+
deleteMany(resources: MediaRecord[], props?: DeleteManyProps): Promise<void>;
|
|
48
|
+
deleteOne(resource: MediaRecord, props?: DeleteProps): Promise<void>;
|
|
38
49
|
uploadToS3bucket(props: UploadToBucketProps): Promise<MediaRecord>;
|
|
39
50
|
uploadBufferToS3bucket(props: UploadBufferToBucketProps): Promise<MediaRecord>;
|
|
40
51
|
copyFileFromBucket(props: CopyFileFromBucketProps): Promise<MediaRecord>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media-records-manager.d.ts","sourceRoot":"","sources":["../../../src/media/managers/media-records-manager.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,wBAAwB,EACxB,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"media-records-manager.d.ts","sourceRoot":"","sources":["../../../src/media/managers/media-records-manager.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,wBAAwB,EACxB,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAE3E,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,UAAU,yBAAyB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,UAAU,uBAAuB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE;QACJ,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,UAAU,WAAW;IACnB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,UAAU,eAAe;IACvB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,qBACa,mBAAmB;IAE5B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAFb,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,qBAAqB,EACtC,aAAa,EAAE,oBAAoB;IAGtD,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,eAAe,UAAO;IAiBtD,UAAU,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,KAAK,CAAC,EAAE,eAAe;IAQ5D,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,WAAW;IAMpD,gBAAgB,CAAC,KAAK,EAAE,mBAAmB;IAgC3C,sBAAsB,CAAC,KAAK,EAAE,yBAAyB;IAgCvD,kBAAkB,CAAC,KAAK,EAAE,uBAAuB;IA+BvD,YAAY,CAAC,QAAQ,EAAE,MAAM;IAI7B,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM;IAI3C,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE;IAIrB,OAAO,CAAC,KAAK,EAAE,uBAAuB;IAItC,QAAQ,CAAC,KAAK,EAAE,wBAAwB;CAG/C"}
|
|
@@ -14,12 +14,15 @@ const common_1 = require("@nestjs/common");
|
|
|
14
14
|
const domain_1 = require("../../domain");
|
|
15
15
|
const utils_1 = require("../../utils");
|
|
16
16
|
const aws_manager_1 = require("./aws.manager");
|
|
17
|
+
const s3_client_store_service_1 = require("../services/s3-client-store.service");
|
|
17
18
|
let MediaRecordsManager = class MediaRecordsManager {
|
|
18
19
|
awsManager;
|
|
19
20
|
mediaRecordRepo;
|
|
20
|
-
|
|
21
|
+
s3ClientStore;
|
|
22
|
+
constructor(awsManager, mediaRecordRepo, s3ClientStore) {
|
|
21
23
|
this.awsManager = awsManager;
|
|
22
24
|
this.mediaRecordRepo = mediaRecordRepo;
|
|
25
|
+
this.s3ClientStore = s3ClientStore;
|
|
23
26
|
}
|
|
24
27
|
generateKey(originalFileName, addOriginalName = true) {
|
|
25
28
|
const nameParts = originalFileName.split('.');
|
|
@@ -35,18 +38,21 @@ let MediaRecordsManager = class MediaRecordsManager {
|
|
|
35
38
|
}
|
|
36
39
|
return `${name}.${suffix}`;
|
|
37
40
|
}
|
|
38
|
-
async deleteMany(resources) {
|
|
41
|
+
async deleteMany(resources, props) {
|
|
39
42
|
if (!resources.length)
|
|
40
43
|
return;
|
|
41
|
-
await this.
|
|
44
|
+
const awsManager = await this.s3ClientStore.getAWSManager(props?.useInstitutionS3Client);
|
|
45
|
+
await awsManager.deleteFiles(resources.map((r) => r.key));
|
|
42
46
|
await this.mediaRecordRepo.deleteByIds(resources.map((r) => r.id));
|
|
43
47
|
}
|
|
44
|
-
async deleteOne(resource) {
|
|
45
|
-
await this.
|
|
48
|
+
async deleteOne(resource, props) {
|
|
49
|
+
const awsManager = await this.s3ClientStore.getAWSManager(props?.useInstitutionS3Client);
|
|
50
|
+
await awsManager.deleteFiles([resource.key]);
|
|
46
51
|
await this.mediaRecordRepo.deleteByIds([resource.id]);
|
|
47
52
|
}
|
|
48
53
|
async uploadToS3bucket(props) {
|
|
49
|
-
const
|
|
54
|
+
const awsManager = await this.s3ClientStore.getAWSManager(props.useInstitutionS3Client);
|
|
55
|
+
const uploadRes = await awsManager.uploadFile({
|
|
50
56
|
buffer: props.file.buffer,
|
|
51
57
|
key: props.key,
|
|
52
58
|
mimetype: props.file.mimetype,
|
|
@@ -73,7 +79,8 @@ let MediaRecordsManager = class MediaRecordsManager {
|
|
|
73
79
|
return this.findOne({ key: resource.key });
|
|
74
80
|
}
|
|
75
81
|
async uploadBufferToS3bucket(props) {
|
|
76
|
-
const
|
|
82
|
+
const awsManager = await this.s3ClientStore.getAWSManager(props.useInstitutionS3Client);
|
|
83
|
+
const uploadRes = await awsManager.uploadFile({
|
|
77
84
|
buffer: props.buffer,
|
|
78
85
|
key: props.key,
|
|
79
86
|
mimetype: props.mimetype,
|
|
@@ -100,7 +107,8 @@ let MediaRecordsManager = class MediaRecordsManager {
|
|
|
100
107
|
return this.findOne({ key: resource.key });
|
|
101
108
|
}
|
|
102
109
|
async copyFileFromBucket(props) {
|
|
103
|
-
const
|
|
110
|
+
const awsManager = await this.s3ClientStore.getAWSManager(props.useInstitutionS3Client);
|
|
111
|
+
const uploadRes = await awsManager.copyFile({
|
|
104
112
|
key: props.key,
|
|
105
113
|
mimetype: props.file.mimetype,
|
|
106
114
|
previousKey: props.file.key,
|
|
@@ -145,6 +153,7 @@ exports.MediaRecordsManager = MediaRecordsManager;
|
|
|
145
153
|
exports.MediaRecordsManager = MediaRecordsManager = __decorate([
|
|
146
154
|
(0, common_1.Injectable)(),
|
|
147
155
|
__metadata("design:paramtypes", [aws_manager_1.AWSManager,
|
|
148
|
-
domain_1.MediaRecordRepository
|
|
156
|
+
domain_1.MediaRecordRepository,
|
|
157
|
+
s3_client_store_service_1.S3ClientStoreService])
|
|
149
158
|
], MediaRecordsManager);
|
|
150
159
|
//# sourceMappingURL=media-records-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media-records-manager.js","sourceRoot":"","sources":["../../../src/media/managers/media-records-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAiE;AACjE,yCAKsB;AACtB,uCAAyC;AACzC,+CAA2C;
|
|
1
|
+
{"version":3,"file":"media-records-manager.js","sourceRoot":"","sources":["../../../src/media/managers/media-records-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media.module.d.ts","sourceRoot":"","sources":["../../src/media/media.module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"media.module.d.ts","sourceRoot":"","sources":["../../src/media/media.module.ts"],"names":[],"mappings":"AASA,qBAKa,WAAW;CAAG"}
|
|
@@ -12,14 +12,17 @@ const domain_1 = require("../domain");
|
|
|
12
12
|
const aws_manager_1 = require("./managers/aws.manager");
|
|
13
13
|
const media_object_manager_1 = require("./managers/media-object-manager");
|
|
14
14
|
const media_records_manager_1 = require("./managers/media-records-manager");
|
|
15
|
+
const s3_client_store_service_1 = require("./services/s3-client-store.service");
|
|
16
|
+
const s3_client_factory_service_1 = require("./services/s3-client-factory.service");
|
|
17
|
+
const sts_service_1 = require("./services/sts.service");
|
|
15
18
|
let MediaModule = class MediaModule {
|
|
16
19
|
};
|
|
17
20
|
exports.MediaModule = MediaModule;
|
|
18
21
|
exports.MediaModule = MediaModule = __decorate([
|
|
19
22
|
(0, common_1.Module)({
|
|
20
23
|
imports: [domain_1.SharedDomainModule],
|
|
21
|
-
providers: [media_object_manager_1.MediaObjectManager, media_records_manager_1.MediaRecordsManager, aws_manager_1.AWSManager],
|
|
22
|
-
exports: [media_object_manager_1.MediaObjectManager, media_records_manager_1.MediaRecordsManager, aws_manager_1.AWSManager],
|
|
24
|
+
providers: [media_object_manager_1.MediaObjectManager, media_records_manager_1.MediaRecordsManager, aws_manager_1.AWSManager, s3_client_store_service_1.S3ClientStoreService, s3_client_factory_service_1.S3ClientFactory, sts_service_1.STSService],
|
|
25
|
+
exports: [media_object_manager_1.MediaObjectManager, media_records_manager_1.MediaRecordsManager, aws_manager_1.AWSManager, s3_client_store_service_1.S3ClientStoreService, s3_client_factory_service_1.S3ClientFactory, sts_service_1.STSService],
|
|
23
26
|
})
|
|
24
27
|
], MediaModule);
|
|
25
28
|
//# sourceMappingURL=media.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media.module.js","sourceRoot":"","sources":["../../src/media/media.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,sCAA+C;AAC/C,wDAAoD;AACpD,0EAAqE;AACrE,4EAAuE;
|
|
1
|
+
{"version":3,"file":"media.module.js","sourceRoot":"","sources":["../../src/media/media.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,sCAA+C;AAC/C,wDAAoD;AACpD,0EAAqE;AACrE,4EAAuE;AACvE,gFAA0E;AAC1E,oFAAuE;AACvE,wDAAoD;AAO7C,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,kCAAW;sBAAX,WAAW;IALvB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,2BAAkB,CAAC;QAC7B,SAAS,EAAE,CAAC,yCAAkB,EAAE,2CAAmB,EAAE,wBAAU,EAAE,8CAAoB,EAAE,2CAAe,EAAE,wBAAU,CAAC;QACnH,OAAO,EAAE,CAAC,yCAAkB,EAAE,2CAAmB,EAAE,wBAAU,EAAE,8CAAoB,EAAE,2CAAe,EAAE,wBAAU,CAAC;KAClH,CAAC;GACW,WAAW,CAAG"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ConfigService } from '@nestjs/config';
|
|
2
|
+
import { STSService } from './sts.service';
|
|
3
|
+
import { S3ClientConfig, S3ClientOperations } from '../interfaces/s3-client.interfaces';
|
|
4
|
+
export declare class S3ClientFactory {
|
|
5
|
+
private readonly stsService;
|
|
6
|
+
private readonly configService;
|
|
7
|
+
private readonly logger;
|
|
8
|
+
constructor(stsService: STSService, configService: ConfigService);
|
|
9
|
+
createS3Client(config: S3ClientConfig): Promise<S3ClientOperations>;
|
|
10
|
+
private createAwsS3Client;
|
|
11
|
+
private createS3Operations;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=s3-client-factory.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3-client-factory.service.d.ts","sourceRoot":"","sources":["../../../src/media/services/s3-client-factory.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAQ/C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAExF,qBACa,eAAe;IAIxB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAJhC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;gBAGxC,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa;IAGzC,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA2BzE,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,kBAAkB;CAgF3B"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var S3ClientFactory_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.S3ClientFactory = void 0;
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const config_1 = require("@nestjs/config");
|
|
16
|
+
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
17
|
+
const sts_service_1 = require("./sts.service");
|
|
18
|
+
let S3ClientFactory = S3ClientFactory_1 = class S3ClientFactory {
|
|
19
|
+
stsService;
|
|
20
|
+
configService;
|
|
21
|
+
logger = new common_1.Logger(S3ClientFactory_1.name);
|
|
22
|
+
constructor(stsService, configService) {
|
|
23
|
+
this.stsService = stsService;
|
|
24
|
+
this.configService = configService;
|
|
25
|
+
}
|
|
26
|
+
async createS3Client(config) {
|
|
27
|
+
this.logger.log(`Creating S3 client for tenant: ${config.tenantSubDomain}, institution: ${config.institutionCode}`);
|
|
28
|
+
if (!config.institutionCredentials.iamRoleArn) {
|
|
29
|
+
throw new Error(`IAM Role ARN not configured for institution ${config.institutionCredentials.institutionId}`);
|
|
30
|
+
}
|
|
31
|
+
// Get STS credentials and create S3 client
|
|
32
|
+
const sessionName = `campx-${config.tenantSubDomain}-${config.institutionCode}-${Date.now()}`;
|
|
33
|
+
const stsCredentials = await this.stsService.assumeRole(config.institutionCredentials.iamRoleArn, sessionName);
|
|
34
|
+
const s3Client = this.createAwsS3Client(stsCredentials);
|
|
35
|
+
this.logger.log(`Created S3 client for ${config.tenantSubDomain}-${config.institutionCode}, bucket: ${config.bucketName}`);
|
|
36
|
+
return this.createS3Operations(s3Client, config.bucketName);
|
|
37
|
+
}
|
|
38
|
+
createAwsS3Client(credentials) {
|
|
39
|
+
return new client_s3_1.S3Client({
|
|
40
|
+
region: this.configService.get('AWS_REGION'),
|
|
41
|
+
credentials: {
|
|
42
|
+
accessKeyId: credentials.accessKeyId,
|
|
43
|
+
secretAccessKey: credentials.secretAccessKey,
|
|
44
|
+
sessionToken: credentials.sessionToken,
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
createS3Operations(s3Client, bucketName) {
|
|
49
|
+
return {
|
|
50
|
+
async copyFile(props) {
|
|
51
|
+
const uploadRes = await s3Client.send(new client_s3_1.CopyObjectCommand({
|
|
52
|
+
Bucket: bucketName,
|
|
53
|
+
Metadata: props.metadata,
|
|
54
|
+
ContentType: props.mimetype,
|
|
55
|
+
CopySource: `${bucketName}/${props.previousKey}`,
|
|
56
|
+
Key: props.key,
|
|
57
|
+
ContentDisposition: props.contentDisposition,
|
|
58
|
+
}));
|
|
59
|
+
return uploadRes;
|
|
60
|
+
},
|
|
61
|
+
async uploadFile(props) {
|
|
62
|
+
const uploadRes = await s3Client.send(new client_s3_1.PutObjectCommand({
|
|
63
|
+
Bucket: bucketName,
|
|
64
|
+
Key: props.key,
|
|
65
|
+
Body: Buffer.from(props.buffer),
|
|
66
|
+
ContentType: props.mimetype,
|
|
67
|
+
Metadata: props.metadata,
|
|
68
|
+
ContentDisposition: props.contentDisposition,
|
|
69
|
+
}));
|
|
70
|
+
return uploadRes;
|
|
71
|
+
},
|
|
72
|
+
async directUploadFile(props) {
|
|
73
|
+
const uploadRes = await s3Client.send(new client_s3_1.PutObjectCommand({
|
|
74
|
+
Bucket: bucketName,
|
|
75
|
+
Key: props.key,
|
|
76
|
+
Body: props.buffer,
|
|
77
|
+
ContentType: props.mimetype,
|
|
78
|
+
Metadata: props.metadata,
|
|
79
|
+
ContentDisposition: props.contentDisposition,
|
|
80
|
+
}));
|
|
81
|
+
return uploadRes;
|
|
82
|
+
},
|
|
83
|
+
async deleteFiles(keys) {
|
|
84
|
+
if (!keys.length)
|
|
85
|
+
return;
|
|
86
|
+
await s3Client.send(new client_s3_1.DeleteObjectsCommand({
|
|
87
|
+
Bucket: bucketName,
|
|
88
|
+
Delete: {
|
|
89
|
+
Objects: keys.map((item) => ({ Key: item })),
|
|
90
|
+
},
|
|
91
|
+
}));
|
|
92
|
+
},
|
|
93
|
+
getMediaType(mimeType) {
|
|
94
|
+
if (mimeType.startsWith('image/')) {
|
|
95
|
+
return 'image';
|
|
96
|
+
}
|
|
97
|
+
else if (mimeType === 'application/pdf') {
|
|
98
|
+
return 'pdf';
|
|
99
|
+
}
|
|
100
|
+
else if (mimeType.startsWith('video/')) {
|
|
101
|
+
return 'video';
|
|
102
|
+
}
|
|
103
|
+
return 'unknown';
|
|
104
|
+
},
|
|
105
|
+
async getFile(key) {
|
|
106
|
+
const command = new client_s3_1.GetObjectCommand({
|
|
107
|
+
Bucket: bucketName,
|
|
108
|
+
Key: key,
|
|
109
|
+
});
|
|
110
|
+
const response = await s3Client.send(command);
|
|
111
|
+
const v = await response.Body.transformToByteArray();
|
|
112
|
+
return Buffer.from(v);
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
exports.S3ClientFactory = S3ClientFactory;
|
|
118
|
+
exports.S3ClientFactory = S3ClientFactory = S3ClientFactory_1 = __decorate([
|
|
119
|
+
(0, common_1.Injectable)(),
|
|
120
|
+
__metadata("design:paramtypes", [sts_service_1.STSService,
|
|
121
|
+
config_1.ConfigService])
|
|
122
|
+
], S3ClientFactory);
|
|
123
|
+
//# sourceMappingURL=s3-client-factory.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3-client-factory.service.js","sourceRoot":"","sources":["../../../src/media/services/s3-client-factory.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { ConfigService } from '@nestjs/config';
|
|
2
|
+
import { InstitutionConfigRepository } from '../../domain/repositories/institution-config.repository';
|
|
3
|
+
import { S3ClientConfig, S3ClientOperations } from '../interfaces/s3-client.interfaces';
|
|
4
|
+
import { AWSManager } from '../managers/aws.manager';
|
|
5
|
+
import { S3ClientFactory } from './s3-client-factory.service';
|
|
6
|
+
import { STSService } from './sts.service';
|
|
7
|
+
export declare class S3ClientStoreService {
|
|
8
|
+
private readonly stsService;
|
|
9
|
+
private readonly configService;
|
|
10
|
+
private readonly s3ClientFactory;
|
|
11
|
+
private readonly institutionConfigRepository;
|
|
12
|
+
private readonly logger;
|
|
13
|
+
private readonly s3ClientCache;
|
|
14
|
+
private readonly defaultAWSManager;
|
|
15
|
+
constructor(stsService: STSService, configService: ConfigService, s3ClientFactory: S3ClientFactory, institutionConfigRepository: InstitutionConfigRepository, defaultAWSManager: AWSManager);
|
|
16
|
+
/**
|
|
17
|
+
* Get AWS manager with expiry checking
|
|
18
|
+
*/
|
|
19
|
+
getAWSManager(useInstitutionS3Client?: boolean): Promise<S3ClientOperations>;
|
|
20
|
+
/**
|
|
21
|
+
* Get institution-specific S3 client
|
|
22
|
+
*/
|
|
23
|
+
getInstitutionS3Client(tenantSubDomain: string, institutionCode: string, institutionCredentials: S3ClientConfig['institutionCredentials'], bucketName: string): Promise<S3ClientOperations>;
|
|
24
|
+
/**
|
|
25
|
+
* Get S3 client with configuration
|
|
26
|
+
*/
|
|
27
|
+
getS3Client(config: S3ClientConfig): Promise<S3ClientOperations>;
|
|
28
|
+
/**
|
|
29
|
+
* Invalidate cached S3 client for an institution
|
|
30
|
+
*/
|
|
31
|
+
invalidateInstitutionClient(tenantSubDomain: string, institutionCode: string): void;
|
|
32
|
+
/**
|
|
33
|
+
* Create cached S3 client
|
|
34
|
+
*/
|
|
35
|
+
private createCachedS3Client;
|
|
36
|
+
/**
|
|
37
|
+
* Generate cache key for S3 client using tenant subdomain and institution code
|
|
38
|
+
*/
|
|
39
|
+
private generateClientKey;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=s3-client-store.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3-client-store.service.d.ts","sourceRoot":"","sources":["../../../src/media/services/s3-client-store.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,2BAA2B,EAAE,MAAM,yDAAyD,CAAC;AAEtG,OAAO,EACL,cAAc,EACd,kBAAkB,EACnB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAQ3C,qBACa,oBAAoB;IAM7B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,2BAA2B;IAR9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyC;IAChE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8C;IAC5E,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAa;gBAG5B,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,eAAe,EAChC,2BAA2B,EAAE,2BAA2B,EACzE,iBAAiB,EAAE,UAAU;IAY/B;;OAEG;IACG,aAAa,CAAC,sBAAsB,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAiClF;;OAEG;IACG,sBAAsB,CAC1B,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,MAAM,EACvB,sBAAsB,EAAE,cAAc,CAAC,wBAAwB,CAAC,EAChE,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC;IAW9B;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAOtE;;OAEG;IACH,2BAA2B,CAAC,eAAe,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI;IAMnF;;OAEG;YACW,oBAAoB;IAelC;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAI1B"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var S3ClientStoreService_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.S3ClientStoreService = void 0;
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const config_1 = require("@nestjs/config");
|
|
16
|
+
const institution_config_repository_1 = require("../../domain/repositories/institution-config.repository");
|
|
17
|
+
const request_store_1 = require("../../request-store");
|
|
18
|
+
const aws_manager_1 = require("../managers/aws.manager");
|
|
19
|
+
const simple_cache_1 = require("../utils/simple-cache");
|
|
20
|
+
const s3_client_factory_service_1 = require("./s3-client-factory.service");
|
|
21
|
+
const sts_service_1 = require("./sts.service");
|
|
22
|
+
let S3ClientStoreService = S3ClientStoreService_1 = class S3ClientStoreService {
|
|
23
|
+
stsService;
|
|
24
|
+
configService;
|
|
25
|
+
s3ClientFactory;
|
|
26
|
+
institutionConfigRepository;
|
|
27
|
+
logger = new common_1.Logger(S3ClientStoreService_1.name);
|
|
28
|
+
s3ClientCache;
|
|
29
|
+
defaultAWSManager;
|
|
30
|
+
constructor(stsService, configService, s3ClientFactory, institutionConfigRepository, defaultAWSManager) {
|
|
31
|
+
this.stsService = stsService;
|
|
32
|
+
this.configService = configService;
|
|
33
|
+
this.s3ClientFactory = s3ClientFactory;
|
|
34
|
+
this.institutionConfigRepository = institutionConfigRepository;
|
|
35
|
+
this.defaultAWSManager = defaultAWSManager;
|
|
36
|
+
this.s3ClientCache = new simple_cache_1.SimpleCache({
|
|
37
|
+
defaultTtlMs: 30 * 60 * 1000, // 30 minutes
|
|
38
|
+
maxSize: 50,
|
|
39
|
+
createFn: async (key, config) => {
|
|
40
|
+
return await this.createCachedS3Client(key, config);
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get AWS manager with expiry checking
|
|
46
|
+
*/
|
|
47
|
+
async getAWSManager(useInstitutionS3Client) {
|
|
48
|
+
if (!useInstitutionS3Client) {
|
|
49
|
+
return this.defaultAWSManager;
|
|
50
|
+
}
|
|
51
|
+
// Get data from request store internally
|
|
52
|
+
const tenant = (0, request_store_1.getTenantDetails)();
|
|
53
|
+
const institution = (0, request_store_1.getInstitution)();
|
|
54
|
+
// TODO: Get institution credentials from database using institution.uniqueId
|
|
55
|
+
// For now, use placeholder credentials
|
|
56
|
+
const institutionConfig = await this.institutionConfigRepository.findByInstitutionId(institution.uniqueId);
|
|
57
|
+
const institutionCredentials = {
|
|
58
|
+
institutionId: institutionConfig.institutionId,
|
|
59
|
+
bucketConfigured: institutionConfig?.bucketConfigured || false,
|
|
60
|
+
iamRoleArn: institutionConfig?.iamRoleArn,
|
|
61
|
+
roleSessionDuration: institutionConfig?.roleSessionDuration || 3600,
|
|
62
|
+
};
|
|
63
|
+
const bucketName = institutionConfig?.bucketName;
|
|
64
|
+
const config = {
|
|
65
|
+
tenantSubDomain: tenant.subDomain,
|
|
66
|
+
institutionCode: institution.code,
|
|
67
|
+
institutionCredentials,
|
|
68
|
+
bucketName,
|
|
69
|
+
};
|
|
70
|
+
return await this.getS3Client(config);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get institution-specific S3 client
|
|
74
|
+
*/
|
|
75
|
+
async getInstitutionS3Client(tenantSubDomain, institutionCode, institutionCredentials, bucketName) {
|
|
76
|
+
const config = {
|
|
77
|
+
tenantSubDomain,
|
|
78
|
+
institutionCode,
|
|
79
|
+
institutionCredentials,
|
|
80
|
+
bucketName,
|
|
81
|
+
};
|
|
82
|
+
return await this.getS3Client(config);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get S3 client with configuration
|
|
86
|
+
*/
|
|
87
|
+
async getS3Client(config) {
|
|
88
|
+
const key = this.generateClientKey(config.tenantSubDomain, config.institutionCode);
|
|
89
|
+
const cachedClient = await this.s3ClientCache.get(key, config);
|
|
90
|
+
return cachedClient.client;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Invalidate cached S3 client for an institution
|
|
94
|
+
*/
|
|
95
|
+
invalidateInstitutionClient(tenantSubDomain, institutionCode) {
|
|
96
|
+
const key = this.generateClientKey(tenantSubDomain, institutionCode);
|
|
97
|
+
this.s3ClientCache.remove(key);
|
|
98
|
+
this.logger.log(`Invalidated S3 client for key: ${key}`);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Create cached S3 client
|
|
102
|
+
*/
|
|
103
|
+
async createCachedS3Client(_key, config) {
|
|
104
|
+
this.logger.log(`Creating S3 client for tenant: ${config.tenantSubDomain}, institution: ${config.institutionCode}`);
|
|
105
|
+
// Create S3 client using factory
|
|
106
|
+
const s3Client = await this.s3ClientFactory.createS3Client(config);
|
|
107
|
+
return {
|
|
108
|
+
client: s3Client,
|
|
109
|
+
institutionId: config.institutionCredentials.institutionId,
|
|
110
|
+
cachedAt: new Date(),
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Generate cache key for S3 client using tenant subdomain and institution code
|
|
115
|
+
*/
|
|
116
|
+
generateClientKey(tenantSubDomain, institutionCode) {
|
|
117
|
+
return `${tenantSubDomain}-${institutionCode}`;
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
exports.S3ClientStoreService = S3ClientStoreService;
|
|
121
|
+
exports.S3ClientStoreService = S3ClientStoreService = S3ClientStoreService_1 = __decorate([
|
|
122
|
+
(0, common_1.Injectable)(),
|
|
123
|
+
__metadata("design:paramtypes", [sts_service_1.STSService,
|
|
124
|
+
config_1.ConfigService,
|
|
125
|
+
s3_client_factory_service_1.S3ClientFactory,
|
|
126
|
+
institution_config_repository_1.InstitutionConfigRepository,
|
|
127
|
+
aws_manager_1.AWSManager])
|
|
128
|
+
], S3ClientStoreService);
|
|
129
|
+
//# sourceMappingURL=s3-client-store.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3-client-store.service.js","sourceRoot":"","sources":["../../../src/media/services/s3-client-store.service.ts"],"names":[],"mappings":"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"}
|