11import { IUseCase } from './use-case-orchestrator' ;
2- import { EventBridgeHelper } from '../eventbridge/eventbridge-helper' ;
2+ import {
3+ EventBridgeHelper ,
4+ GuardDutyScanResult ,
5+ } from '../eventbridge/eventbridge-helper' ;
36import { S3Helper } from '../s3/s3-helper' ;
7+ import { Template } from '../types' ;
8+
9+ type FileConfig = {
10+ currentVersion ?: string ;
11+ event : GuardDutyScanResult ;
12+ type : 'pdf' | 'csv' ;
13+ } ;
414
515type Config = {
616 templateId : string ;
717 templateOwner : string ;
8- files : Array < {
9- name ?: string ;
10- currentVersion ?: string ;
11- eventType : 'THREATS_FOUND' | 'NO_THREATS_FOUND' | 'UNSUPPORTED' ;
12- } > ;
18+ files : FileConfig [ ] ;
1319} ;
1420
1521export class SimulateGuardDutyScan implements IUseCase < void > {
@@ -25,13 +31,13 @@ export class SimulateGuardDutyScan implements IUseCase<void> {
2531
2632 async execute ( ) {
2733 for ( const file of this . #config. files ) {
28- if ( ! file . name || ! file . currentVersion ) {
34+ if ( ! file . currentVersion ) {
2935 throw new Error ( 'No file name or file currentVersion' , {
3036 cause : file ,
3137 } ) ;
3238 }
3339
34- const s3FilePath = this . s3ObjectPath ( file . name , file . currentVersion ) ;
40+ const s3FilePath = this . s3ObjectPath ( file . type , file . currentVersion ) ;
3541
3642 const s3VersionId = await this . #s3Helper. getVersionId (
3743 process . env . TEMPLATES_QUARANTINE_BUCKET_NAME ,
@@ -45,16 +51,46 @@ export class SimulateGuardDutyScan implements IUseCase<void> {
4551 this . #eventBridgeHelper. publishGuardDutyEvent (
4652 s3FilePath ,
4753 s3VersionId ,
48- file . eventType
54+ file . event
4955 ) ;
5056 }
5157 }
5258
53- private s3ObjectPath ( file : string , versionId : string ) {
54- return `${ this . parentFolderByFileType ( file ) } /${ this . #config. templateOwner } /${ this . #config. templateId } /${ versionId } /${ file } ` ;
59+ private s3ObjectPath ( fileType : 'pdf' | 'csv' , versionId : string ) {
60+ const parentFolder = fileType === 'pdf' ? 'pdf-template' : 'test-data' ;
61+
62+ return `${ parentFolder } /${ this . #config. templateOwner } /${ this . #config. templateId } /${ versionId } .${ fileType } ` ;
5563 }
5664
57- private parentFolderByFileType ( file : string ) {
58- return file . endsWith ( '.pdf' ) ? 'pdf-template' : 'csv-test-data' ;
65+ static async publish (
66+ template : Template ,
67+ events : {
68+ pdfTemplateEvent ?: GuardDutyScanResult ;
69+ csvTestDataEvent ?: GuardDutyScanResult ;
70+ }
71+ ) {
72+ const files : FileConfig [ ] = [ ] ;
73+
74+ if ( events . pdfTemplateEvent ) {
75+ files . push ( {
76+ currentVersion : template . files ?. pdfTemplate ?. currentVersion ,
77+ event : events . pdfTemplateEvent ,
78+ type : 'pdf' ,
79+ } ) ;
80+ }
81+
82+ if ( events . csvTestDataEvent ) {
83+ files . push ( {
84+ currentVersion : template . files ?. pdfTemplate ?. currentVersion ,
85+ event : events . csvTestDataEvent ,
86+ type : 'csv' ,
87+ } ) ;
88+ }
89+
90+ await new SimulateGuardDutyScan ( {
91+ templateId : template . id ,
92+ templateOwner : template . owner ,
93+ files,
94+ } ) . execute ( ) ;
5995 }
6096}
0 commit comments