@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
JavaScript
;
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;