11import SES , {
2- ListIdentitiesResponse ,
3- IdentityVerificationAttributes ,
4- GetIdentityVerificationAttributesResponse ,
2+ ListConfigurationSetsResponse ,
3+ ConfigurationSet ,
4+ ListTemplatesResponse ,
5+ TemplateMetadata ,
56} from 'aws-sdk/clients/ses'
67import { AWSError } from 'aws-sdk/lib/error'
78import { Config } from 'aws-sdk/lib/config'
89
910import CloudGraph from '@cloudgraph/sdk'
1011import groupBy from 'lodash/groupBy'
11- import isEmpty from 'lodash/isEmpty'
1212
1313import awsLoggerText from '../../properties/logger'
1414import { initTestEndpoint } from '../../utils'
1515import AwsErrorLog from '../../utils/errorLog'
1616
1717const lt = { ...awsLoggerText }
1818const { logger } = CloudGraph
19- const serviceName = 'SES'
19+ const serviceName = 'SES '
2020const errorLog = new AwsErrorLog ( serviceName )
2121const endpoint = initTestEndpoint ( serviceName )
2222
2323/**
24- * SES
24+ * SES
2525 */
26- export interface RawAwsSes extends IdentityVerificationAttributes {
27- Identity : string
26+ export interface RawAwsSes {
27+ ConfigurationSets : ConfigurationSet [ ]
28+ EmailTemplates : TemplateMetadata [ ]
2829 region : string
2930}
3031
32+
33+ const getEmailTemplates = async ( ses : SES ) : Promise < TemplateMetadata [ ] > =>
34+ new Promise ( resolve => {
35+ try {
36+ ses . listTemplates (
37+ ( err : AWSError , data : ListTemplatesResponse ) => {
38+ if ( err ) {
39+ errorLog . generateAwsErrorLog ( {
40+ functionName : 'ses:listTemplates' ,
41+ err,
42+ } )
43+ return resolve ( [ ] )
44+ }
45+ const { TemplatesMetadata = [ ] } = data || { }
46+ resolve ( TemplatesMetadata )
47+ }
48+ )
49+ } catch ( error ) {
50+ resolve ( [ ] )
51+ }
52+ } )
53+
54+ const getConfigurationSets = async ( ses : SES ) : Promise < ConfigurationSet [ ] > =>
55+ new Promise ( resolve => {
56+ try {
57+ ses . listConfigurationSets (
58+ ( err : AWSError , data : ListConfigurationSetsResponse ) => {
59+ if ( err ) {
60+ errorLog . generateAwsErrorLog ( {
61+ functionName : 'ses:listConfigurationSets' ,
62+ err,
63+ } )
64+ return resolve ( [ ] )
65+ }
66+ const { ConfigurationSets = [ ] } = data || { }
67+ resolve ( ConfigurationSets )
68+ }
69+ )
70+ } catch ( error ) {
71+ resolve ( [ ] )
72+ }
73+ } )
74+
3175export default async ( {
3276 regions,
3377 config,
@@ -38,84 +82,28 @@ export default async ({
3882 new Promise ( async resolve => {
3983 const sesData : RawAwsSes [ ] = [ ]
4084 const regionPromises = [ ]
41- const identityVerificationPromises = [ ]
4285
4386 regions . split ( ',' ) . map ( region => {
44- const regionPromise = new Promise < void > ( resolveRegion => {
87+ const regionPromise = new Promise < void > ( async resolveRegion => {
4588 const ses = new SES ( { ...config , region, endpoint } )
4689
47- ses . listIdentities (
48- { } ,
49- ( err : AWSError , data : ListIdentitiesResponse ) => {
50- /**
51- * No Data for the region
52- */
53- if ( isEmpty ( data ) ) {
54- return resolveRegion ( )
55- }
56-
57- if ( err ) {
58- errorLog . generateAwsErrorLog ( {
59- functionName : 'ses:listIdentities' ,
60- err,
61- } )
62- }
63-
64- const { Identities } : { Identities : string [ ] } = data
65-
66- /**
67- * No Identities Found
68- */
69-
70- if ( isEmpty ( Identities ) ) {
71- return resolveRegion ( )
72- }
73-
74- logger . debug ( lt . fetchedSesIdentities ( Identities . length ) )
75-
76- const identityVerificationPromise = new Promise < void > (
77- resolveIdVer => {
78- ses . getIdentityVerificationAttributes (
79- { Identities } ,
80- (
81- err : AWSError ,
82- {
83- VerificationAttributes : identities ,
84- } : GetIdentityVerificationAttributesResponse
85- ) => {
86- if ( err ) {
87- errorLog . generateAwsErrorLog ( {
88- functionName : 'ses:getIdentityVerificationAttributes' ,
89- err,
90- } )
91- }
92-
93- if ( ! isEmpty ( identities ) ) {
94- sesData . push (
95- ...Identities . map ( Identity => ( {
96- Identity,
97- ...identities [ Identity ] ,
98- region,
99- } ) )
100- )
101- }
102-
103- resolveIdVer ( )
104- resolveRegion ( )
105- }
106- )
107- }
108- )
109- identityVerificationPromises . push ( identityVerificationPromise )
110- }
111- )
90+ const configurationSets = await getConfigurationSets ( ses )
91+ const emailTemplates = await getEmailTemplates ( ses )
92+
93+ sesData . push ( {
94+ ConfigurationSets : configurationSets ,
95+ EmailTemplates : emailTemplates ,
96+ region
97+ } )
98+ resolveRegion ( )
99+
100+
112101 } )
113102 regionPromises . push ( regionPromise )
114103 } )
115104
116- await Promise . all ( regionPromises )
117105
118- await Promise . all ( identityVerificationPromises )
106+ await Promise . all ( regionPromises )
119107 errorLog . reset ( )
120108
121109 resolve ( groupBy ( sesData , 'region' ) )
0 commit comments