Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.55 KB | None | 0 0
  1. const Mailchimp = require('mailchimp-api-v3')
  2. const validate = require('./validations')
  3.  
  4. const { MAILCHIMP_API_KEY } = process.env
  5.  
  6. exports.handler = async (event, context) => {
  7. // require an API key or throw everytime
  8. if (!MAILCHIMP_API_KEY) {
  9. return {
  10. statusCode: 500,
  11. body: 'process.env.MAILCHIMP_API_KEY must be defined',
  12. }
  13. }
  14.  
  15. // badness if this throws
  16. const body = JSON.parse(event.body)
  17.  
  18. // return forbidden if request requirements are invalid
  19. try {
  20. validate.is_email('body.email', body.email)
  21. // i think they're usually 10?
  22. validate.is_length('body.list_id', body.list_id, 4, 16)
  23. } catch (e) {
  24. return { statusCode: 403, body: e.message }
  25. }
  26.  
  27. // prep request
  28. const API = new Mailchimp(MAILCHIMP_API_KEY)
  29. const path = `/lists/${body.list_id}/members`
  30. const request = create_request_body({
  31. email: body.email,
  32. interests: body.interests,
  33. })
  34.  
  35. // make request
  36. let [statusCode, status, error] = [500, null, null]
  37. try {
  38. const result = await API.post({ path, body: request })
  39. statusCode = result.statusCode
  40. status = result.status
  41. } catch (e) {
  42. statusCode = e.status
  43. error = e.message
  44. }
  45.  
  46. return {
  47. statusCode,
  48. body: JSON.stringify({
  49. subscribed: statusCode === 200,
  50. status,
  51. error,
  52. }),
  53. }
  54. }
  55.  
  56. function create_request_body({
  57. email = '',
  58. interests = [],
  59. status = 'subscribed',
  60. merge_fields = {},
  61. } = {}) {
  62. return {
  63. email_address: email,
  64. status,
  65. merge_fields,
  66. interests: interests.reduce((acc, cur) => ({ ...acc, [cur]: true }), {}),
  67. }
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement