Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const Mailchimp = require('mailchimp-api-v3')
- const validate = require('./validations')
- const { MAILCHIMP_API_KEY } = process.env
- exports.handler = async (event, context) => {
- // require an API key or throw everytime
- if (!MAILCHIMP_API_KEY) {
- return {
- statusCode: 500,
- body: 'process.env.MAILCHIMP_API_KEY must be defined',
- }
- }
- // badness if this throws
- const body = JSON.parse(event.body)
- // return forbidden if request requirements are invalid
- try {
- validate.is_email('body.email', body.email)
- // i think they're usually 10?
- validate.is_length('body.list_id', body.list_id, 4, 16)
- } catch (e) {
- return { statusCode: 403, body: e.message }
- }
- // prep request
- const API = new Mailchimp(MAILCHIMP_API_KEY)
- const path = `/lists/${body.list_id}/members`
- const request = create_request_body({
- email: body.email,
- interests: body.interests,
- })
- // make request
- let [statusCode, status, error] = [500, null, null]
- try {
- const result = await API.post({ path, body: request })
- statusCode = result.statusCode
- status = result.status
- } catch (e) {
- statusCode = e.status
- error = e.message
- }
- return {
- statusCode,
- body: JSON.stringify({
- subscribed: statusCode === 200,
- status,
- error,
- }),
- }
- }
- function create_request_body({
- email = '',
- interests = [],
- status = 'subscribed',
- merge_fields = {},
- } = {}) {
- return {
- email_address: email,
- status,
- merge_fields,
- interests: interests.reduce((acc, cur) => ({ ...acc, [cur]: true }), {}),
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement