@openfn/language-mailchimp 0.3.5 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -12,36 +12,6 @@ official
12
12
  [configuration-schema](https://docs.openfn.org/adaptors/packages/mailchimp-configuration-schema/)
13
13
  definition.
14
14
 
15
- #### sample expression with multiple operations
16
-
17
- ```js
18
- upsertMembers({
19
- listId: 'someId',
20
- users: state =>
21
- state.response.body.rows.map(u => ({
22
- email: u.email,
23
- status: u.allow_other_emails ? 'subscribed' : 'unsubscribed',
24
- mergeFields: { FNAME: u.first_name, LNAME: u.last_name },
25
- })),
26
- options: {},
27
- });
28
-
29
- tagMembers({
30
- listId: 'someId', // All Subscribers
31
- tagId: 'someTag', // User
32
- members: state => state.response.body.rows.map(u => u.email),
33
- });
34
-
35
- tagMembers({
36
- listId: 'someId', // All Subscribers
37
- tagId: 'someTag', // Other Emails Allowed
38
- members: state =>
39
- state.response.body.rows
40
- .filter(u => u.allow_other_emails)
41
- .map(u => u.email),
42
- });
43
- ```
44
-
45
15
  ## Development
46
16
 
47
17
  Clone the [adaptors monorepo](https://github.com/OpenFn/adaptors). Follow the
package/dist/index.cjs CHANGED
@@ -25,23 +25,31 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
25
25
  // src/index.js
26
26
  var src_exports = {};
27
27
  __export(src_exports, {
28
- alterState: () => import_language_common2.alterState,
28
+ addMember: () => addMember,
29
+ alterState: () => import_language_common3.alterState,
30
+ archiveMember: () => archiveMember,
29
31
  axios: () => import_axios.default,
30
- dataPath: () => import_language_common2.dataPath,
31
- dataValue: () => import_language_common2.dataValue,
32
+ dataPath: () => import_language_common3.dataPath,
33
+ dataValue: () => import_language_common3.dataValue,
32
34
  default: () => src_default,
33
- each: () => import_language_common2.each,
35
+ deleteMember: () => deleteMember,
36
+ each: () => import_language_common3.each,
34
37
  execute: () => execute,
35
- field: () => import_language_common2.field,
36
- fields: () => import_language_common2.fields,
37
- fn: () => import_language_common2.fn,
38
- lastReferenceValue: () => import_language_common2.lastReferenceValue,
38
+ field: () => import_language_common3.field,
39
+ fields: () => import_language_common3.fields,
40
+ fn: () => import_language_common3.fn,
41
+ lastReferenceValue: () => import_language_common3.lastReferenceValue,
42
+ listAudienceInfo: () => listAudienceInfo,
43
+ listAudiences: () => listAudiences,
39
44
  listBatches: () => listBatches,
45
+ listMembers: () => listMembers,
40
46
  md5: () => import_md5.default,
41
- merge: () => import_language_common2.merge,
42
- sourceValue: () => import_language_common2.sourceValue,
47
+ merge: () => import_language_common3.merge,
48
+ sourceValue: () => import_language_common3.sourceValue,
43
49
  startBatch: () => startBatch,
44
50
  tagMembers: () => tagMembers,
51
+ updateMember: () => updateMember,
52
+ updateMemberTags: () => updateMemberTags,
45
53
  upsertMembers: () => upsertMembers
46
54
  });
47
55
  module.exports = __toCommonJS(src_exports);
@@ -49,93 +57,173 @@ module.exports = __toCommonJS(src_exports);
49
57
  // src/Adaptor.js
50
58
  var Adaptor_exports = {};
51
59
  __export(Adaptor_exports, {
52
- alterState: () => import_language_common2.alterState,
60
+ addMember: () => addMember,
61
+ alterState: () => import_language_common3.alterState,
62
+ archiveMember: () => archiveMember,
53
63
  axios: () => import_axios.default,
54
- dataPath: () => import_language_common2.dataPath,
55
- dataValue: () => import_language_common2.dataValue,
56
- each: () => import_language_common2.each,
64
+ dataPath: () => import_language_common3.dataPath,
65
+ dataValue: () => import_language_common3.dataValue,
66
+ deleteMember: () => deleteMember,
67
+ each: () => import_language_common3.each,
57
68
  execute: () => execute,
58
- field: () => import_language_common2.field,
59
- fields: () => import_language_common2.fields,
60
- fn: () => import_language_common2.fn,
61
- lastReferenceValue: () => import_language_common2.lastReferenceValue,
69
+ field: () => import_language_common3.field,
70
+ fields: () => import_language_common3.fields,
71
+ fn: () => import_language_common3.fn,
72
+ lastReferenceValue: () => import_language_common3.lastReferenceValue,
73
+ listAudienceInfo: () => listAudienceInfo,
74
+ listAudiences: () => listAudiences,
62
75
  listBatches: () => listBatches,
76
+ listMembers: () => listMembers,
63
77
  md5: () => import_md5.default,
64
- merge: () => import_language_common2.merge,
65
- sourceValue: () => import_language_common2.sourceValue,
78
+ merge: () => import_language_common3.merge,
79
+ sourceValue: () => import_language_common3.sourceValue,
66
80
  startBatch: () => startBatch,
67
81
  tagMembers: () => tagMembers,
82
+ updateMember: () => updateMember,
83
+ updateMemberTags: () => updateMemberTags,
68
84
  upsertMembers: () => upsertMembers
69
85
  });
70
- var import_language_common = require("@openfn/language-common");
86
+ var import_md5 = __toESM(require("md5"), 1);
71
87
  var import_axios = __toESM(require("axios"), 1);
72
88
  var import_mailchimp_marketing = __toESM(require("@mailchimp/mailchimp_marketing"), 1);
73
- var import_md5 = __toESM(require("md5"), 1);
89
+ var import_util = require("@openfn/language-common/util");
74
90
  var import_language_common2 = require("@openfn/language-common");
91
+
92
+ // src/Utils.js
93
+ var import_language_common = require("@openfn/language-common");
94
+ function handleResponse(response, state, callback) {
95
+ const nextState = {
96
+ ...(0, import_language_common.composeNextState)(state, response),
97
+ response
98
+ };
99
+ if (callback)
100
+ return callback(nextState);
101
+ return nextState;
102
+ }
103
+
104
+ // src/Adaptor.js
105
+ var import_language_common3 = require("@openfn/language-common");
75
106
  function execute(...operations) {
76
107
  const initialState = {
77
108
  references: [],
78
109
  data: null
79
110
  };
80
111
  return (state) => {
81
- return (0, import_language_common.execute)(...operations)({
112
+ return (0, import_language_common2.execute)(
113
+ createClient,
114
+ ...operations,
115
+ cleanupState
116
+ )({
82
117
  ...initialState,
83
118
  ...state
84
119
  });
85
120
  };
86
121
  }
87
- function upsertMembers(params) {
122
+ function createClient(state) {
123
+ const { apiKey, server } = state.configuration;
124
+ import_mailchimp_marketing.default.setConfig({ apiKey, server });
125
+ return { ...state, client: import_mailchimp_marketing.default };
126
+ }
127
+ function cleanupState(state) {
128
+ delete state.client;
129
+ return state;
130
+ }
131
+ function upsertMembers(params, callback = (s) => s) {
132
+ return (state) => {
133
+ const [resolvedParams] = (0, import_util.expandReferences)(state, params);
134
+ const defaultOptions = {
135
+ update_existing: true,
136
+ sync_tags: false
137
+ };
138
+ const { listId: listId2, users, options } = resolvedParams;
139
+ const opts = { ...defaultOptions, ...options };
140
+ const membersList = users.map((member2) => ({
141
+ email_address: member2.email,
142
+ status: member2.status,
143
+ merge_fields: member2.mergeFields,
144
+ tags: member2.tags
145
+ }));
146
+ return state.client.lists.batchListMembers(listId2, {
147
+ ...opts,
148
+ members: membersList
149
+ }).then((response) => handleResponse(response, state, callback));
150
+ };
151
+ }
152
+ function tagMembers(params, callback = (s) => s) {
88
153
  return (state) => {
89
- const { apiKey, server } = state.configuration;
90
- const { listId, users, options } = (0, import_language_common.expandReferences)(params)(state);
91
- import_mailchimp_marketing.default.setConfig({ apiKey, server });
92
- return Promise.all(
93
- users.map(
94
- (user) => import_mailchimp_marketing.default.lists.setListMember(listId, (0, import_md5.default)(user.email), {
95
- email_address: user.email,
96
- status_if_new: user.status,
97
- merge_fields: user.mergeFields
98
- }).then((response) => {
99
- state.references.push(response);
100
- })
101
- )
102
- ).then(() => {
103
- return state;
104
- });
154
+ const [resolvedParams] = (0, import_util.expandReferences)(state, params);
155
+ const { listId: listId2, tagId, members } = resolvedParams;
156
+ return state.client.lists.batchSegmentMembers({ members_to_add: members }, listId2, tagId).then((response) => handleResponse(response, state, callback));
105
157
  };
106
158
  }
107
- function tagMembers(params) {
159
+ function startBatch(params, callback = (s) => s) {
108
160
  return (state) => {
109
- const { apiKey, server } = state.configuration;
110
- const { listId, tagId, members } = (0, import_language_common.expandReferences)(params)(state);
111
- import_mailchimp_marketing.default.setConfig({ apiKey, server });
112
- return import_mailchimp_marketing.default.lists.batchSegmentMembers({ members_to_add: members }, listId, tagId).then((response) => {
113
- const nextState = (0, import_language_common.composeNextState)(state, response);
114
- return nextState;
115
- });
161
+ const [resolvedParams] = (0, import_util.expandReferences)(state, params);
162
+ const { operations } = resolvedParams;
163
+ return state.client.batches.start({ operations: [...operations] }).then((response) => handleResponse(response, state, callback));
116
164
  };
117
165
  }
118
- function startBatch(params) {
166
+ function listBatches(params, callback = (s) => s) {
119
167
  return (state) => {
120
- const { apiKey, server } = state.configuration;
121
- const { operations } = (0, import_language_common.expandReferences)(params)(state);
122
- import_mailchimp_marketing.default.setConfig({ apiKey, server });
123
- return import_mailchimp_marketing.default.batches.start({ operations: [...operations] }).then((response) => {
124
- console.log(response);
125
- const nextState = (0, import_language_common.composeNextState)(state, response);
126
- return nextState;
127
- });
168
+ const [resolvedParams] = (0, import_util.expandReferences)(state, params);
169
+ return state.client.batches.list(resolvedParams).then((response) => handleResponse(response, state, callback));
128
170
  };
129
171
  }
130
- function listBatches(params) {
172
+ function listMembers(params, callback = (s) => s) {
131
173
  return (state) => {
132
- const { apiKey, server } = state.configuration;
133
- import_mailchimp_marketing.default.setConfig({ apiKey, server });
134
- return import_mailchimp_marketing.default.batches.list().then((response) => {
135
- console.log(response);
136
- const nextState = (0, import_language_common.composeNextState)(state, response);
137
- return nextState;
138
- });
174
+ const [resolvedParams] = (0, import_util.expandReferences)(state, params);
175
+ const { listId: listId2, ...otherParams } = resolvedParams;
176
+ return state.client.lists.getListMembersInfo(listId2, otherParams).then((response) => handleResponse(response, state, callback));
177
+ };
178
+ }
179
+ function addMember(params, callback = (s) => s) {
180
+ return (state) => {
181
+ const [resolvedParams] = (0, import_util.expandReferences)(state, params);
182
+ const { listId: listId2, member: member2 } = resolvedParams;
183
+ return state.client.lists.addListMember(listId2, ...member2).then((response) => handleResponse(response, state, callback));
184
+ };
185
+ }
186
+ function updateMember(params = { listId, subscriberHash, member }, callback = (s) => s) {
187
+ return (state) => {
188
+ const requiredParams = ["listId", "subscriberHash"];
189
+ const [resolvedParams] = (0, import_util.expandReferences)(state, params);
190
+ assertKeys(resolvedParams, requiredParams);
191
+ const { listId: listId2, subscriberHash: subscriberHash2, member: member2 } = resolvedParams;
192
+ return state.client.lists.updateListMember(listId2, subscriberHash2, member2).then((response) => handleResponse(response, state, callback));
193
+ };
194
+ }
195
+ function updateMemberTags(params, callback = (s) => s) {
196
+ return (state) => {
197
+ const [resolvedParams] = (0, import_util.expandReferences)(state, params);
198
+ const { listId: listId2, subscriberHash: subscriberHash2, tags } = resolvedParams;
199
+ return state.client.lists.updateListMemberTags(listId2, subscriberHash2, { tags }).then((response) => handleResponse(response, state, callback));
200
+ };
201
+ }
202
+ function archiveMember(params, callback = (s) => s) {
203
+ return (state) => {
204
+ const [resolvedParams] = (0, import_util.expandReferences)(state, params);
205
+ const { listId: listId2, subscriberHash: subscriberHash2 } = resolvedParams;
206
+ return state.client.lists.deleteListMember(listId2, subscriberHash2).then((response) => handleResponse(response, state, callback));
207
+ };
208
+ }
209
+ function deleteMember(params, callback = (s) => s) {
210
+ return (state) => {
211
+ const [resolvedParams] = (0, import_util.expandReferences)(state, params);
212
+ const { listId: listId2, subscriberHash: subscriberHash2 } = resolvedParams;
213
+ return state.client.lists.deleteListMemberPermanent(listId2, subscriberHash2).then((response) => handleResponse(response, state, callback));
214
+ };
215
+ }
216
+ function listAudiences(query, callback = (s) => s) {
217
+ return (state) => {
218
+ const [resolvedQuery] = (0, import_util.expandReferences)(state, query);
219
+ return state.client.lists.getAllLists(resolvedQuery).then((response) => handleResponse(response, state, callback));
220
+ };
221
+ }
222
+ function listAudienceInfo(query, callback = (s) => s) {
223
+ return (state) => {
224
+ const [resolvedQuery] = (0, import_util.expandReferences)(state, query);
225
+ const { listId: listId2, ...queries } = resolvedQuery;
226
+ return state.client.lists.getList(listId2, queries).then((response) => handleResponse(response, state, callback));
139
227
  };
140
228
  }
141
229
 
@@ -143,21 +231,29 @@ function listBatches(params) {
143
231
  var src_default = Adaptor_exports;
144
232
  // Annotate the CommonJS export names for ESM import in node:
145
233
  0 && (module.exports = {
234
+ addMember,
146
235
  alterState,
236
+ archiveMember,
147
237
  axios,
148
238
  dataPath,
149
239
  dataValue,
240
+ deleteMember,
150
241
  each,
151
242
  execute,
152
243
  field,
153
244
  fields,
154
245
  fn,
155
246
  lastReferenceValue,
247
+ listAudienceInfo,
248
+ listAudiences,
156
249
  listBatches,
250
+ listMembers,
157
251
  md5,
158
252
  merge,
159
253
  sourceValue,
160
254
  startBatch,
161
255
  tagMembers,
256
+ updateMember,
257
+ updateMemberTags,
162
258
  upsertMembers
163
259
  });
package/dist/index.js CHANGED
@@ -7,32 +7,51 @@ var __export = (target, all) => {
7
7
  // src/Adaptor.js
8
8
  var Adaptor_exports = {};
9
9
  __export(Adaptor_exports, {
10
+ addMember: () => addMember,
10
11
  alterState: () => alterState,
12
+ archiveMember: () => archiveMember,
11
13
  axios: () => axios,
12
14
  dataPath: () => dataPath,
13
15
  dataValue: () => dataValue,
16
+ deleteMember: () => deleteMember,
14
17
  each: () => each,
15
18
  execute: () => execute,
16
19
  field: () => field,
17
20
  fields: () => fields,
18
21
  fn: () => fn,
19
22
  lastReferenceValue: () => lastReferenceValue,
23
+ listAudienceInfo: () => listAudienceInfo,
24
+ listAudiences: () => listAudiences,
20
25
  listBatches: () => listBatches,
26
+ listMembers: () => listMembers,
21
27
  md5: () => md5,
22
28
  merge: () => merge,
23
29
  sourceValue: () => sourceValue,
24
30
  startBatch: () => startBatch,
25
31
  tagMembers: () => tagMembers,
32
+ updateMember: () => updateMember,
33
+ updateMemberTags: () => updateMemberTags,
26
34
  upsertMembers: () => upsertMembers
27
35
  });
28
- import {
29
- execute as commonExecute,
30
- composeNextState,
31
- expandReferences
32
- } from "@openfn/language-common";
36
+ import md5 from "md5";
33
37
  import axios from "axios";
34
38
  import client from "@mailchimp/mailchimp_marketing";
35
- import md5 from "md5";
39
+ import { expandReferences } from "@openfn/language-common/util";
40
+ import { execute as commonExecute } from "@openfn/language-common";
41
+
42
+ // src/Utils.js
43
+ import { composeNextState } from "@openfn/language-common";
44
+ function handleResponse(response, state, callback) {
45
+ const nextState = {
46
+ ...composeNextState(state, response),
47
+ response
48
+ };
49
+ if (callback)
50
+ return callback(nextState);
51
+ return nextState;
52
+ }
53
+
54
+ // src/Adaptor.js
36
55
  import {
37
56
  fn,
38
57
  alterState,
@@ -51,86 +70,151 @@ function execute(...operations) {
51
70
  data: null
52
71
  };
53
72
  return (state) => {
54
- return commonExecute(...operations)({
73
+ return commonExecute(
74
+ createClient,
75
+ ...operations,
76
+ cleanupState
77
+ )({
55
78
  ...initialState,
56
79
  ...state
57
80
  });
58
81
  };
59
82
  }
60
- function upsertMembers(params) {
83
+ function createClient(state) {
84
+ const { apiKey, server } = state.configuration;
85
+ client.setConfig({ apiKey, server });
86
+ return { ...state, client };
87
+ }
88
+ function cleanupState(state) {
89
+ delete state.client;
90
+ return state;
91
+ }
92
+ function upsertMembers(params, callback = (s) => s) {
93
+ return (state) => {
94
+ const [resolvedParams] = expandReferences(state, params);
95
+ const defaultOptions = {
96
+ update_existing: true,
97
+ sync_tags: false
98
+ };
99
+ const { listId: listId2, users, options } = resolvedParams;
100
+ const opts = { ...defaultOptions, ...options };
101
+ const membersList = users.map((member2) => ({
102
+ email_address: member2.email,
103
+ status: member2.status,
104
+ merge_fields: member2.mergeFields,
105
+ tags: member2.tags
106
+ }));
107
+ return state.client.lists.batchListMembers(listId2, {
108
+ ...opts,
109
+ members: membersList
110
+ }).then((response) => handleResponse(response, state, callback));
111
+ };
112
+ }
113
+ function tagMembers(params, callback = (s) => s) {
61
114
  return (state) => {
62
- const { apiKey, server } = state.configuration;
63
- const { listId, users, options } = expandReferences(params)(state);
64
- client.setConfig({ apiKey, server });
65
- return Promise.all(
66
- users.map(
67
- (user) => client.lists.setListMember(listId, md5(user.email), {
68
- email_address: user.email,
69
- status_if_new: user.status,
70
- merge_fields: user.mergeFields
71
- }).then((response) => {
72
- state.references.push(response);
73
- })
74
- )
75
- ).then(() => {
76
- return state;
77
- });
115
+ const [resolvedParams] = expandReferences(state, params);
116
+ const { listId: listId2, tagId, members } = resolvedParams;
117
+ return state.client.lists.batchSegmentMembers({ members_to_add: members }, listId2, tagId).then((response) => handleResponse(response, state, callback));
78
118
  };
79
119
  }
80
- function tagMembers(params) {
120
+ function startBatch(params, callback = (s) => s) {
81
121
  return (state) => {
82
- const { apiKey, server } = state.configuration;
83
- const { listId, tagId, members } = expandReferences(params)(state);
84
- client.setConfig({ apiKey, server });
85
- return client.lists.batchSegmentMembers({ members_to_add: members }, listId, tagId).then((response) => {
86
- const nextState = composeNextState(state, response);
87
- return nextState;
88
- });
122
+ const [resolvedParams] = expandReferences(state, params);
123
+ const { operations } = resolvedParams;
124
+ return state.client.batches.start({ operations: [...operations] }).then((response) => handleResponse(response, state, callback));
89
125
  };
90
126
  }
91
- function startBatch(params) {
127
+ function listBatches(params, callback = (s) => s) {
92
128
  return (state) => {
93
- const { apiKey, server } = state.configuration;
94
- const { operations } = expandReferences(params)(state);
95
- client.setConfig({ apiKey, server });
96
- return client.batches.start({ operations: [...operations] }).then((response) => {
97
- console.log(response);
98
- const nextState = composeNextState(state, response);
99
- return nextState;
100
- });
129
+ const [resolvedParams] = expandReferences(state, params);
130
+ return state.client.batches.list(resolvedParams).then((response) => handleResponse(response, state, callback));
101
131
  };
102
132
  }
103
- function listBatches(params) {
133
+ function listMembers(params, callback = (s) => s) {
104
134
  return (state) => {
105
- const { apiKey, server } = state.configuration;
106
- client.setConfig({ apiKey, server });
107
- return client.batches.list().then((response) => {
108
- console.log(response);
109
- const nextState = composeNextState(state, response);
110
- return nextState;
111
- });
135
+ const [resolvedParams] = expandReferences(state, params);
136
+ const { listId: listId2, ...otherParams } = resolvedParams;
137
+ return state.client.lists.getListMembersInfo(listId2, otherParams).then((response) => handleResponse(response, state, callback));
138
+ };
139
+ }
140
+ function addMember(params, callback = (s) => s) {
141
+ return (state) => {
142
+ const [resolvedParams] = expandReferences(state, params);
143
+ const { listId: listId2, member: member2 } = resolvedParams;
144
+ return state.client.lists.addListMember(listId2, ...member2).then((response) => handleResponse(response, state, callback));
145
+ };
146
+ }
147
+ function updateMember(params = { listId, subscriberHash, member }, callback = (s) => s) {
148
+ return (state) => {
149
+ const requiredParams = ["listId", "subscriberHash"];
150
+ const [resolvedParams] = expandReferences(state, params);
151
+ assertKeys(resolvedParams, requiredParams);
152
+ const { listId: listId2, subscriberHash: subscriberHash2, member: member2 } = resolvedParams;
153
+ return state.client.lists.updateListMember(listId2, subscriberHash2, member2).then((response) => handleResponse(response, state, callback));
154
+ };
155
+ }
156
+ function updateMemberTags(params, callback = (s) => s) {
157
+ return (state) => {
158
+ const [resolvedParams] = expandReferences(state, params);
159
+ const { listId: listId2, subscriberHash: subscriberHash2, tags } = resolvedParams;
160
+ return state.client.lists.updateListMemberTags(listId2, subscriberHash2, { tags }).then((response) => handleResponse(response, state, callback));
161
+ };
162
+ }
163
+ function archiveMember(params, callback = (s) => s) {
164
+ return (state) => {
165
+ const [resolvedParams] = expandReferences(state, params);
166
+ const { listId: listId2, subscriberHash: subscriberHash2 } = resolvedParams;
167
+ return state.client.lists.deleteListMember(listId2, subscriberHash2).then((response) => handleResponse(response, state, callback));
168
+ };
169
+ }
170
+ function deleteMember(params, callback = (s) => s) {
171
+ return (state) => {
172
+ const [resolvedParams] = expandReferences(state, params);
173
+ const { listId: listId2, subscriberHash: subscriberHash2 } = resolvedParams;
174
+ return state.client.lists.deleteListMemberPermanent(listId2, subscriberHash2).then((response) => handleResponse(response, state, callback));
175
+ };
176
+ }
177
+ function listAudiences(query, callback = (s) => s) {
178
+ return (state) => {
179
+ const [resolvedQuery] = expandReferences(state, query);
180
+ return state.client.lists.getAllLists(resolvedQuery).then((response) => handleResponse(response, state, callback));
181
+ };
182
+ }
183
+ function listAudienceInfo(query, callback = (s) => s) {
184
+ return (state) => {
185
+ const [resolvedQuery] = expandReferences(state, query);
186
+ const { listId: listId2, ...queries } = resolvedQuery;
187
+ return state.client.lists.getList(listId2, queries).then((response) => handleResponse(response, state, callback));
112
188
  };
113
189
  }
114
190
 
115
191
  // src/index.js
116
192
  var src_default = Adaptor_exports;
117
193
  export {
194
+ addMember,
118
195
  alterState,
196
+ archiveMember,
119
197
  axios,
120
198
  dataPath,
121
199
  dataValue,
122
200
  src_default as default,
201
+ deleteMember,
123
202
  each,
124
203
  execute,
125
204
  field,
126
205
  fields,
127
206
  fn,
128
207
  lastReferenceValue,
208
+ listAudienceInfo,
209
+ listAudiences,
129
210
  listBatches,
211
+ listMembers,
130
212
  md5,
131
213
  merge,
132
214
  sourceValue,
133
215
  startBatch,
134
216
  tagMembers,
217
+ updateMember,
218
+ updateMemberTags,
135
219
  upsertMembers
136
220
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openfn/language-mailchimp",
3
- "version": "0.3.5",
3
+ "version": "0.5.0",
4
4
  "description": "An OpenFn adaptor for use with Mailchimp",
5
5
  "main": "dist/index.cjs",
6
6
  "author": "Open Function Group",
@@ -13,7 +13,7 @@
13
13
  ],
14
14
  "dependencies": {
15
15
  "@mailchimp/mailchimp_marketing": "^3.0.80",
16
- "@openfn/language-common": "^1.7.6",
16
+ "@openfn/language-common": "^1.8.1",
17
17
  "axios": "^0.21.2",
18
18
  "md5": "^2.3.0"
19
19
  },
@@ -46,6 +46,7 @@
46
46
  "test": "mocha --experimental-specifier-resolution=node --no-warnings",
47
47
  "test:watch": "mocha -w --experimental-specifier-resolution=node --no-warnings",
48
48
  "clean": "rimraf dist types docs",
49
- "pack": "pnpm pack --pack-destination ../../dist"
49
+ "pack": "pnpm pack --pack-destination ../../dist",
50
+ "lint": "eslint src"
50
51
  }
51
52
  }
@@ -12,33 +12,127 @@
12
12
  */
13
13
  export function execute(...operations: Operations): Operation;
14
14
  /**
15
- * Add members to a particular audience
15
+ * Add or update a list members
16
16
  * @example
17
- * upsertMembers(params)
17
+ * upsertMembers((state) => ({
18
+ * listId: "someId",
19
+ * users: state.response.body.rows.map((u) => ({
20
+ * email: u.email,
21
+ * status: u.allow_other_emails ? "subscribed" : "unsubscribed",
22
+ * mergeFields: { FNAME: u.first_name, LNAME: u.last_name },
23
+ * })),
24
+ * }));
18
25
  * @function
19
26
  * @param {object} params - a listId, users, and options
27
+ * @param {function} [callback] - Optional callback to handle the response
20
28
  * @returns {Operation}
21
29
  */
22
- export function upsertMembers(params: object): Operation;
30
+ export function upsertMembers(params: object, callback?: Function): Operation;
23
31
  /**
24
32
  * Tag members with a particular tag
25
33
  * @example
26
- * tagMembers(params)
34
+ * tagMembers((state) => ({
35
+ * listId: "someId", // All Subscribers list
36
+ * tagId: "someTag", // User tag
37
+ * members: state.response.body.rows.map((u) => u.email),
38
+ * }));
39
+ * @example
40
+ * tagMembers((state) => ({
41
+ * listId: "someId",
42
+ * tagId: "someTag",
43
+ * members: state.response.body.rows
44
+ * .filter((u) => u.allow_other_emails)
45
+ * .map((u) => u.email),
46
+ * }));
27
47
  * @function
28
48
  * @param {object} params - a tagId, members, and a list
49
+ * @param {function} [callback] - Optional callback to handle the response
29
50
  * @returns {Operation}
30
51
  */
31
- export function tagMembers(params: object): Operation;
52
+ export function tagMembers(params: object, callback?: Function): Operation;
32
53
  /**
33
54
  * Start a batch with a list of operations.
34
55
  * @example
35
56
  * startBatch(params)
36
57
  * @function
37
58
  * @param {object} params - operations batch job
59
+ * @param {function} [callback] - Optional callback to handle the response
60
+ * @returns {Operation}
61
+ */
62
+ export function startBatch(params: object, callback?: Function): Operation;
63
+ /**
64
+ * listBatches
65
+ * @function
66
+ * @param {object} params - a listId, and options
67
+ * @param {function} [callback] - Optional callback to handle the response
68
+ * @returns {Operation}
69
+ */
70
+ export function listBatches(params: object, callback?: Function): Operation;
71
+ /**
72
+ * listMembers
73
+ * @function
74
+ * @param {object} params - a listId, and options
75
+ * @param {function} [callback] - Optional callback to handle the response
76
+ * @returns {Operation}
77
+ */
78
+ export function listMembers(params: object, callback?: Function): Operation;
79
+ /**
80
+ * addMember to a list
81
+ * @function
82
+ * @param {object} params - a listId, and options
83
+ * @param {function} [callback] - Optional callback to handle the response
84
+ * @returns {Operation}
85
+ */
86
+ export function addMember(params: object, callback?: Function): Operation;
87
+ /**
88
+ * updateMember
89
+ * @function
90
+ * @param {object} params - a listId,subscriberHash and member
91
+ * @param {function} [callback] - Optional callback to handle the response
92
+ * @returns {Operation}
93
+ */
94
+ export function updateMember(params?: object, callback?: Function): Operation;
95
+ /**
96
+ * updateMemberTags
97
+ * @function
98
+ * @param {object} params - a listId, and options
99
+ * @param {function} [callback] - Optional callback to handle the response
100
+ * @returns {Operation}
101
+ */
102
+ export function updateMemberTags(params: object, callback?: Function): Operation;
103
+ /**
104
+ * archiveMember in a list
105
+ * @function
106
+ * @param {object} params - a listId, and options
107
+ * @param {function} [callback] - Optional callback to handle the response
108
+ * @returns {Operation}
109
+ */
110
+ export function archiveMember(params: object, callback?: Function): Operation;
111
+ /**
112
+ * Permanently delete a member from a list
113
+ * @function
114
+ * @param {object} params - a listId, and options
115
+ * @param {function} [callback] - Optional callback to handle the response
116
+ * @returns {Operation}
117
+ */
118
+ export function deleteMember(params: object, callback?: Function): Operation;
119
+ /**
120
+ * Get information about all lists in the account.
121
+ * @function
122
+ * @param {object} query - Query parameters
123
+ * @param {function} [callback] - Optional callback to handle the response
124
+ * @returns {Operation}
125
+ */
126
+ export function listAudiences(query: object, callback?: Function): Operation;
127
+ /**
128
+ * Get information about a specific list in your Mailchimp account.
129
+ * Results include list members who have signed up but haven't confirmed their subscription yet and unsubscribed or cleaned.
130
+ * @function
131
+ * @param {object} query - listId and query parameters
132
+ * @param {function} [callback] - Optional callback to handle the response
38
133
  * @returns {Operation}
39
134
  */
40
- export function startBatch(params: object): Operation;
41
- export function listBatches(params: any): (state: any) => any;
135
+ export function listAudienceInfo(query: object, callback?: Function): Operation;
42
136
  import axios from "axios";
43
137
  export { axios, md5 };
44
138
  export { fn, alterState, dataPath, dataValue, each, field, fields, lastReferenceValue, merge, sourceValue } from "@openfn/language-common";
@@ -0,0 +1 @@
1
+ export function handleResponse(response: any, state: any, callback: any): any;