forked from mbouclas/loopback-component-mailchimp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmailchimp.js
86 lines (71 loc) · 2.52 KB
/
mailchimp.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
var Mailchimp = require('mailchimp-api-v3'),
Promise = require('bluebird'),
lo = require('lodash'),
maxmind = require('maxmind');
md5 = require("md5");
module.exports = function (App, defaults) {
function Chimp() {
}
Chimp.MailChimp = new Mailchimp(defaults.apikey);
Chimp.subscribe = function (user, listId) {
var _this = this;
return new Promise(function (resolve, reject) {
if (!user.merge_fields) {
user.merge_fields = {};
}
var settings = defaults,
subscriber = {
email_address: user.email,
double_optin: defaults.double_optin || false,
status: 'subscribed',
timestamp_opt: new Date,
list_id: listId || defaults.defaultListId,
merge_fields: {
EMAIL: user.email,
FNAME: user.firstName || null,
LNAME: user.lastName || null
}
};
if (user.ip) {
subscriber.ip_opt = user.ip;
subscriber.merge_fields.optin_ip = user.ip;
}
subscriber.merge_fields = lo.merge(subscriber.merge_fields, user.merge_fields);
_this.MailChimp.request({
method: 'POST',
path: '/lists/{list_id}/members',
path_params: {
list_id: listId || defaults.defaultListId
},
body: subscriber,
params: {}
}, function (err, response) {
if (err) {
return reject(err);
}
resolve(response);
});
});
};
Chimp.unsubscribe = function (email, listId) {
var _this = this;
return new Promise(function (resolve, reject) {
if (!email) { return reject(new Error("Email is required to unsubscribe")); }
_this.MailChimp.request({
method: 'DELETE',
path: '/lists/{list_id}/members/{member_id}',
path_params: {
list_id: listId || defaults.defaultListId,
member_id: md5(email.toLowerCase())
},
params: {}
}, function (err, response) {
if (err) {
return reject(err);
}
resolve(response);
});
});
}
return Chimp;
};