From 9be50b7be49be13962c19fe2a0a01f4fd19996b6 Mon Sep 17 00:00:00 2001 From: Lukas Siemon Date: Tue, 5 Nov 2024 15:25:51 -0800 Subject: [PATCH] feat: added support for html email --- package.json | 2 +- src/logic/logger/message/email.js | 4 +- .../email-html.spec.json_recording.json | 36 +++++++++++++ .../tests/processLogs/email-html.spec.json | 53 +++++++++++++++++++ yarn.lock | 7 +++ 5 files changed, 99 insertions(+), 3 deletions(-) create mode 100644 test/lambda/__cassettes/processLogs/email-html.spec.json_recording.json create mode 100644 test/lambda/tests/processLogs/email-html.spec.json diff --git a/package.json b/package.json index de302e18..e2a7aa77 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "joi-strict": "3.0.1", "lambda-async": "3.0.0", "lambda-cfn-hook": "3.0.5", - "lambda-monitor-logger": "5.0.1", + "lambda-monitor-logger": "5.1.0", "lodash.get": "4.4.2", "lru-cache-ext": "4.0.0", "object-scan": "19.0.5", diff --git a/src/logic/logger/message/email.js b/src/logic/logger/message/email.js index 6f8283f5..77309c9a 100644 --- a/src/logic/logger/message/email.js +++ b/src/logic/logger/message/email.js @@ -6,7 +6,7 @@ export default ({ logEvent }) => { } try { const { - from, to, subject, body + from, to, subject, body, html = false } = JSON.parse(logEvent.message); request.enqueue({ method: 'POST', @@ -19,7 +19,7 @@ export default ({ logEvent }) => { from: { email: from }, personalizations: [{ to: [{ email: to }] }], subject, - content: [{ type: 'text/plain', value: body }], + content: [{ type: html === true ? 'text/html' : 'text/plain', value: body }], tracking_settings: { click_tracking: { enable: false diff --git a/test/lambda/__cassettes/processLogs/email-html.spec.json_recording.json b/test/lambda/__cassettes/processLogs/email-html.spec.json_recording.json new file mode 100644 index 00000000..14783097 --- /dev/null +++ b/test/lambda/__cassettes/processLogs/email-html.spec.json_recording.json @@ -0,0 +1,36 @@ +[ + { + "scope": "https://api.sendgrid.com:443", + "method": "POST", + "path": "/v3/mail/send", + "body": { + "from": { + "email": "source@test.com" + }, + "personalizations": [ + { + "to": [ + { + "email": "target@test.com" + } + ] + } + ], + "subject": "subject text", + "content": [ + { + "type": "text/html", + "value": "body text" + } + ], + "tracking_settings": { + "click_tracking": { + "enable": false + } + } + }, + "status": 202, + "response": "", + "responseIsBinary": false + } +] diff --git a/test/lambda/tests/processLogs/email-html.spec.json b/test/lambda/tests/processLogs/email-html.spec.json new file mode 100644 index 00000000..2c045834 --- /dev/null +++ b/test/lambda/tests/processLogs/email-html.spec.json @@ -0,0 +1,53 @@ +{ + "handler": "processLogs", + "envVars": { + "SENDGRID_API_KEY": "SENDGRID_API_KEY" + }, + "timestamp": 1559595312, + "success": true, + "timeout": 10000, + "allowedOutOfOrderRecordings": [ + "POST https://api.datadoghq.com:443/api/v1/distribution_points?api_key=DATADOG_API_KEY" + ], + "expect": { + "to.deep.equal()": { + "messageType": "DATA_MESSAGE", + "owner": "783629116497", + "logGroup": "/aws/lambda/peg-solitiare-dev-overview", + "logStream": "2017/11/23/[$LATEST]e680fe32c6ba48ce8c3a377a25cd488e", + "subscriptionFilters": [ + "NoneFilter" + ], + "logEvents": [ + { + "id": "33705477413970201536500575666792700703924347154117689346", + "timestamp": 1511405879665, + "message": "2017-11-23T02:57:59.665Z 1c2a7f3e-cffa-11e7-aa7b-d3cd50f70cb0 EMAIL: {\"from\":\"source@test.com\",\"to\":\"target@test.com\",\"subject\":\"subject text\",\"body\":\"body text\",\"html\":true}\n\n" + } + ] + } + }, + "logs": { + "to.deep.equal()": [] + }, + "event": { + "awslogs": { + "data|JSON.stringify|toGzip|toBase64": { + "messageType": "DATA_MESSAGE", + "owner": "783629116497", + "logGroup": "/aws/lambda/peg-solitiare-dev-overview", + "logStream": "2017/11/23/[$LATEST]e680fe32c6ba48ce8c3a377a25cd488e", + "subscriptionFilters": [ + "NoneFilter" + ], + "logEvents": [ + { + "id": "33705477413970201536500575666792700703924347154117689346", + "timestamp": 1511405879665, + "message": "2017-11-23T02:57:59.665Z 1c2a7f3e-cffa-11e7-aa7b-d3cd50f70cb0 EMAIL: {\"from\":\"source@test.com\",\"to\":\"target@test.com\",\"subject\":\"subject text\",\"body\":\"body text\",\"html\":true}\n\n" + } + ] + } + } + } +} diff --git a/yarn.lock b/yarn.lock index 5c36bd53..4f052b49 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4138,6 +4138,13 @@ lambda-monitor-logger@5.0.1: dependencies: joi-strict "3.0.0" +lambda-monitor-logger@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/lambda-monitor-logger/-/lambda-monitor-logger-5.1.0.tgz#59ec500340c1567954336017b720b819280650e6" + integrity sha512-M+f1/RrCDnBBkZ0nwrYLFG2h/BeXQDwKZ+T6TPAEmpQ48WNn7suRPQgQRdypZ3nKJmvk0cQmusIEKoj9XyxiWA== + dependencies: + joi-strict "3.0.0" + lambda-tdd@7.0.7: version "7.0.7" resolved "https://registry.yarnpkg.com/lambda-tdd/-/lambda-tdd-7.0.7.tgz#ce198313360d8035089a6507788362027dfeb5b4"