import {SNSHandler} from 'aws-lambda/trigger/sns'; import {config} from '../config'; import {beeline} from '../shared/honeycombWrapper'; import {parseSnsRecord} from './SesEvent'; export const handler: SNSHandler = event => { const trace = beeline.startTrace({ name: config.honeycombServiceName, }); for (const record of event.Records) { const eventSpan = beeline.startSpan({name: 'ses-event'}); const {Sns} = record; const message = parseSnsRecord(Sns.Message); if (message) { const {destination, messageId, sendingAccountId, source, sourceIp} = message.mail; eventSpan?.addContext({mail: message.mail, destination, messageId, sendingAccountId, source, sourceIp}); //beeline.addContext(....) should work but doesn't switch (message.notificationType) { case 'Delivery': { const {processingTimeMillis, reportingMTA, remoteMtaIp, smtpResponse, recipients} = message.delivery; eventSpan?.addContext({ name: 'ses-event-delivered', processingTimeMillis, reportingMTA, remoteMtaIp, smtpResponse, recipients, delivery: message.delivery, }); } break; case 'Complaint': { const {complainedRecipients, feedbackId, arrivalDate, complaintFeedbackType, userAgent} = message.complaint; eventSpan?.addContext({ name: 'ses-event-complaint', complainedRecipients, feedbackId, arrivalDate, complaintFeedbackType, userAgent, complaint: message.complaint, }); } break; case 'Bounce': { const {bounceSubType, bounceType, bounceRecipients, feedbackId, remoteMtaIp, reportingMTA} = message.bounce; eventSpan?.addContext({ name: 'ses-event-bounce', bounceSubType, bounceType, bounceRecipients, feedbackId, remoteMtaIp, reportingMTA, bounce: message.bounce, }); } break; default: eventSpan?.addContext({ name: 'ses-event-unknown', msg: Sns.Message, }); } } if (eventSpan) beeline.finishSpan(eventSpan); } if (trace) { beeline.finishTrace(trace); } };