mailchimp-node
Version:
Mailchimp API wrapper
111 lines (94 loc) • 2.65 kB
JavaScript
;
var isPlainObject = require('lodash.isplainobject');
var mailchimpMethod = require('./MailchimpMethod');
module.exports = {
create: mailchimpMethod({
method: 'POST',
}),
list: mailchimpMethod({
method: 'GET',
}),
retrieve: mailchimpMethod({
method: 'GET',
path: '/{id}',
urlParams: ['id'],
}),
update: mailchimpMethod({
method: 'PATCH',
path: '{id}',
urlParams: ['id'],
}),
// Avoid 'delete' keyword in JS
del: mailchimpMethod({
method: 'DELETE',
path: '{id}',
urlParams: ['id'],
}),
setMetadata: function(id, key, value, auth, cb) {
var self = this;
var data = key;
var isObject = isPlainObject(key);
// We assume null for an empty object
var isNull = data === null || (isObject && !Object.keys(data).length);
// Allow optional passing of auth & cb:
if ((isNull || isObject) && typeof value == 'string') {
auth = value;
} else if (typeof auth != 'string') {
if (!cb && typeof auth == 'function') {
cb = auth;
}
auth = null;
}
var urlData = this.createUrlData();
var path = this.createFullPath('/' + id, urlData);
return this.wrapTimeout(new Promise((function(resolve, reject) {
if (isNull) {
// Reset metadata:
sendMetadata(null, auth);
} else if (!isObject) {
// Set individual metadata property:
var metadata = {};
metadata[key] = value;
sendMetadata(metadata, auth);
} else {
// Set entire metadata object after resetting it:
this._request('POST', path, {
metadata: null,
}, auth, {}, function(err, response) {
if (err) {
return reject(err);
}
sendMetadata(data, auth);
});
}
function sendMetadata(metadata, auth) {
self._request('POST', path, {
metadata: metadata,
}, auth, {}, function(err, response) {
if (err) {
reject(err);
} else {
resolve(response.metadata);
}
});
}
}).bind(this)), cb);
},
getMetadata: function(id, auth, cb) {
if (!cb && typeof auth == 'function') {
cb = auth;
auth = null;
}
var urlData = this.createUrlData();
var path = this.createFullPath('/' + id, urlData);
return this.wrapTimeout(new Promise((function(resolve, reject) {
this._request('GET', path, {}, auth, {}, function(err, response) {
if (err) {
reject(err);
} else {
resolve(response.metadata);
}
});
}).bind(this)), cb);
},
};