UNPKG

@vagalumedigital/gatsby-plugin-mailchimp-api

Version:

A plugin written to use Mailchimp API v3 to add/update users subscribed on a list

110 lines (92 loc) 3.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.addToMailchimp = exports.getInterests = void 0; var _emailValidator = require("email-validator"); var _md = _interopRequireDefault(require("md5")); var _nodeFetch = _interopRequireDefault(require("node-fetch")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /* eslint-disable no-console */ const __GATSBY_PLUGIN_MAILCHIMP_API_KEY__ = '30590525163ed60fda8d9b73a2c37906-us8'; const __GATSBY_PLUGIN_MAILCHIMP_API_LIST_ID__ = 'e1348a18d9'; const _generateToken = async () => { return Buffer.from(`apiKey:${__GATSBY_PLUGIN_MAILCHIMP_API_KEY__}`).toString('base64'); // eslint-disable-line no-undef }; const _request = async (url, init) => { const config = init; // config.mode = 'no-cors'; const token = await _generateToken(); config.headers = { Authorization: `Basic ${token}`, Accept: 'application/json', 'Content-Type': 'application/json' }; const { body } = config; config.body = JSON.stringify(body); const req = await (0, _nodeFetch.default)(url, config); return req.clone(); }; const getInterests = async () => { const interests = await _request(`/lists/${__GATSBY_PLUGIN_MAILCHIMP_API_LIST_ID__}/interest-categories`, // eslint-disable-line no-undef { method: 'GET' }); return interests; }; exports.getInterests = getInterests; const add = async (email, mergeFields, interests) => { // eslint-disable-next-line prettier/prettier const user = await _request(`https://us8.api.mailchimp.com/3.0/lists/${__GATSBY_PLUGIN_MAILCHIMP_API_LIST_ID__}/members`, // eslint-disable-line no-undef { method: 'POST', body: { email_address: email, status: 'subscribed', merge_fields: mergeFields, interests } }); return user.json(); }; const update = async (email, mergeFields, interests) => { const user = await _request( // eslint-disable-next-line prettier/prettier `https://us8.api.mailchimp.com/3.0//lists/${__GATSBY_PLUGIN_MAILCHIMP_API_LIST_ID__}/members/${(0, _md.default)( // eslint-disable-line no-undef email)}`, { method: 'PUT', body: { status: 'subscribed', merge_fields: mergeFields, interests } }); return user.json(); }; const addToMailchimp = async (email, mergeFields, interests) => { const isEmailValid = (0, _emailValidator.validate)(email); if (!isEmailValid) { console.error('The email you entered is not valid.'); return Promise.resolve({ result: 'error', msg: 'The email you entered is not valid.' }); } try { let user = await add(email, mergeFields, interests); if (user.status === 400) user = await update(email, mergeFields, interests); return user; } catch (err) { console.info(err); try { const user = await update(email, mergeFields, interests); return user; } catch (error) { console.error(error); return "Coudn't subscribe you to the list. Please contact us."; } } }; exports.addToMailchimp = addToMailchimp; var _default = addToMailchimp; exports.default = _default;