runline 0.2.0 → 0.2.2

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.
Files changed (190) hide show
  1. package/README.md +1 -1
  2. package/dist/plugins/actionNetwork/src/index.js +118 -25
  3. package/dist/plugins/activeCampaign/src/index.js +184 -38
  4. package/dist/plugins/adalo/src/index.js +40 -8
  5. package/dist/plugins/affinity/src/index.js +100 -20
  6. package/dist/plugins/agileCrm/src/index.js +115 -27
  7. package/dist/plugins/airtable/src/index.js +94 -19
  8. package/dist/plugins/airtop/src/index.js +266 -62
  9. package/dist/plugins/apiTemplateIo/src/index.js +25 -5
  10. package/dist/plugins/asana/src/index.js +195 -41
  11. package/dist/plugins/autopilot/src/index.js +39 -8
  12. package/dist/plugins/bambooHr/src/index.js +109 -22
  13. package/dist/plugins/bannerbear/src/index.js +36 -8
  14. package/dist/plugins/baserow/src/index.js +35 -7
  15. package/dist/plugins/beeminder/src/index.js +198 -40
  16. package/dist/plugins/bitly/src/index.js +46 -10
  17. package/dist/plugins/bitwarden/src/index.js +167 -36
  18. package/dist/plugins/box/src/index.js +172 -37
  19. package/dist/plugins/brandfetch/src/index.js +5 -1
  20. package/dist/plugins/brevo/src/index.js +136 -29
  21. package/dist/plugins/bubble/src/index.js +76 -17
  22. package/dist/plugins/chargebee/src/index.js +35 -7
  23. package/dist/plugins/circleci/src/index.js +50 -10
  24. package/dist/plugins/ciscoWebex/src/index.js +131 -27
  25. package/dist/plugins/clearbit/src/index.js +76 -17
  26. package/dist/plugins/clickup/src/index.js +500 -107
  27. package/dist/plugins/clockify/src/index.js +229 -47
  28. package/dist/plugins/cloudflare/src/index.js +28 -6
  29. package/dist/plugins/cockpit/src/index.js +54 -12
  30. package/dist/plugins/coda/src/index.js +81 -19
  31. package/dist/plugins/coingecko/src/index.js +157 -33
  32. package/dist/plugins/contentful/src/index.js +85 -17
  33. package/dist/plugins/convertkit/src/index.js +74 -18
  34. package/dist/plugins/copper/src/index.js +59 -11
  35. package/dist/plugins/cortex/src/index.js +55 -13
  36. package/dist/plugins/currents/src/index.js +310 -71
  37. package/dist/plugins/customerIo/src/index.js +112 -23
  38. package/dist/plugins/databricks/src/index.js +549 -115
  39. package/dist/plugins/deepl/src/index.js +26 -6
  40. package/dist/plugins/demio/src/index.js +56 -11
  41. package/dist/plugins/dhl/src/index.js +16 -3
  42. package/dist/plugins/discord/src/index.js +141 -31
  43. package/dist/plugins/discourse/src/index.js +136 -31
  44. package/dist/plugins/disqus/src/index.js +96 -20
  45. package/dist/plugins/docker/src/index.js +20 -4
  46. package/dist/plugins/drift/src/index.js +19 -5
  47. package/dist/plugins/dropbox/src/index.js +139 -30
  48. package/dist/plugins/dropcontact/src/index.js +21 -4
  49. package/dist/plugins/egoi/src/index.js +61 -15
  50. package/dist/plugins/elasticsearch/src/index.js +59 -13
  51. package/dist/plugins/emelia/src/index.js +95 -19
  52. package/dist/plugins/erpnext/src/index.js +74 -15
  53. package/dist/plugins/facebookGraph/src/index.js +52 -11
  54. package/dist/plugins/freshdesk/src/index.js +220 -48
  55. package/dist/plugins/freshservice/src/index.js +39 -9
  56. package/dist/plugins/freshworksCrm/src/index.js +58 -12
  57. package/dist/plugins/getresponse/src/index.js +87 -18
  58. package/dist/plugins/ghost/src/index.js +114 -26
  59. package/dist/plugins/github/src/index.js +483 -109
  60. package/dist/plugins/gitlab/src/index.js +193 -45
  61. package/dist/plugins/gong/src/index.js +68 -14
  62. package/dist/plugins/gotify/src/index.js +43 -9
  63. package/dist/plugins/gotowebinar/src/index.js +233 -47
  64. package/dist/plugins/grafana/src/index.js +92 -21
  65. package/dist/plugins/graphql/src/index.js +38 -8
  66. package/dist/plugins/grist/src/index.js +52 -10
  67. package/dist/plugins/hackernews/src/index.js +32 -6
  68. package/dist/plugins/halopsa/src/index.js +131 -26
  69. package/dist/plugins/harvest/src/index.js +182 -42
  70. package/dist/plugins/helpscout/src/index.js +153 -31
  71. package/dist/plugins/highlevel/src/index.js +291 -58
  72. package/dist/plugins/homeAssistant/src/index.js +124 -26
  73. package/dist/plugins/hubspot/src/index.js +163 -29
  74. package/dist/plugins/humanticAi/src/index.js +54 -5
  75. package/dist/plugins/hunter/src/index.js +21 -4
  76. package/dist/plugins/intercom/src/index.js +95 -20
  77. package/dist/plugins/iterable/src/index.js +96 -20
  78. package/dist/plugins/jenkins/src/index.js +75 -17
  79. package/dist/plugins/jira/src/index.js +193 -43
  80. package/dist/plugins/keap/src/index.js +222 -56
  81. package/dist/plugins/kobotoolbox/src/index.js +113 -25
  82. package/dist/plugins/lemlist/src/index.js +79 -18
  83. package/dist/plugins/linear/src/index.js +86 -19
  84. package/dist/plugins/lingvanex/src/index.js +38 -8
  85. package/dist/plugins/linkedin/src/index.js +37 -8
  86. package/dist/plugins/lonescale/src/index.js +41 -9
  87. package/dist/plugins/magento/src/index.js +98 -27
  88. package/dist/plugins/mailcheck/src/index.js +11 -2
  89. package/dist/plugins/mailchimp/src/index.js +193 -42
  90. package/dist/plugins/mailerlite/src/index.js +61 -12
  91. package/dist/plugins/mailgun/src/index.js +39 -7
  92. package/dist/plugins/mailjet/src/index.js +141 -30
  93. package/dist/plugins/mandrill/src/index.js +67 -14
  94. package/dist/plugins/marketstack/src/index.js +56 -10
  95. package/dist/plugins/matrix/src/index.js +97 -20
  96. package/dist/plugins/mattermost/src/index.js +124 -26
  97. package/dist/plugins/mautic/src/index.js +129 -26
  98. package/dist/plugins/medium/src/index.js +64 -13
  99. package/dist/plugins/messagebird/src/index.js +80 -15
  100. package/dist/plugins/metabase/src/index.js +57 -12
  101. package/dist/plugins/misp/src/index.js +135 -33
  102. package/dist/plugins/mocean/src/index.js +33 -7
  103. package/dist/plugins/monday/src/index.js +97 -23
  104. package/dist/plugins/monicaCrm/src/index.js +112 -23
  105. package/dist/plugins/msg91/src/index.js +11 -2
  106. package/dist/plugins/nasa/src/index.js +108 -21
  107. package/dist/plugins/netlify/src/index.js +28 -6
  108. package/dist/plugins/netscalerAdc/src/index.js +144 -29
  109. package/dist/plugins/nextcloud/src/index.js +103 -20
  110. package/dist/plugins/nocodb/src/index.js +57 -11
  111. package/dist/plugins/notion/src/index.js +148 -37
  112. package/dist/plugins/npm/src/index.js +59 -12
  113. package/dist/plugins/odoo/src/index.js +102 -20
  114. package/dist/plugins/okta/src/index.js +50 -10
  115. package/dist/plugins/oneSimpleApi/src/index.js +84 -17
  116. package/dist/plugins/onfleet/src/index.js +139 -32
  117. package/dist/plugins/openThesaurus/src/index.js +46 -9
  118. package/dist/plugins/openweathermap/src/index.js +31 -6
  119. package/dist/plugins/oura/src/index.js +36 -7
  120. package/dist/plugins/paddle/src/index.js +80 -17
  121. package/dist/plugins/pagerduty/src/index.js +53 -12
  122. package/dist/plugins/paypal/src/index.js +51 -11
  123. package/dist/plugins/peekalink/src/index.js +12 -3
  124. package/dist/plugins/phantombuster/src/index.js +39 -8
  125. package/dist/plugins/philipsHue/src/index.js +64 -13
  126. package/dist/plugins/pipedrive/src/index.js +167 -45
  127. package/dist/plugins/plivo/src/index.js +43 -8
  128. package/dist/plugins/postbin/src/index.js +9 -2
  129. package/dist/plugins/posthog/src/index.js +50 -13
  130. package/dist/plugins/profitwell/src/index.js +24 -5
  131. package/dist/plugins/pushbullet/src/index.js +45 -9
  132. package/dist/plugins/pushcut/src/index.js +31 -6
  133. package/dist/plugins/pushover/src/index.js +51 -10
  134. package/dist/plugins/quickbase/src/index.js +66 -13
  135. package/dist/plugins/quickbooks/src/index.js +86 -19
  136. package/dist/plugins/quickchart/src/index.js +35 -7
  137. package/dist/plugins/raindrop/src/index.js +54 -13
  138. package/dist/plugins/reddit/src/index.js +73 -18
  139. package/dist/plugins/rocketchat/src/index.js +47 -9
  140. package/dist/plugins/rundeck/src/index.js +26 -5
  141. package/dist/plugins/salesforce/src/index.js +161 -31
  142. package/dist/plugins/salesmate/src/index.js +75 -16
  143. package/dist/plugins/securityScorecard/src/index.js +73 -15
  144. package/dist/plugins/segment/src/index.js +21 -4
  145. package/dist/plugins/sendgrid/src/index.js +102 -24
  146. package/dist/plugins/sendy/src/index.js +54 -11
  147. package/dist/plugins/sentry/src/index.js +174 -34
  148. package/dist/plugins/servicenow/src/index.js +120 -27
  149. package/dist/plugins/shopify/src/index.js +53 -12
  150. package/dist/plugins/signl4/src/index.js +16 -3
  151. package/dist/plugins/slack/src/index.js +407 -105
  152. package/dist/plugins/sms77/src/index.js +26 -5
  153. package/dist/plugins/splunk/src/index.js +186 -45
  154. package/dist/plugins/spotify/src/index.js +265 -66
  155. package/dist/plugins/stackby/src/index.js +18 -6
  156. package/dist/plugins/storyblok/src/index.js +57 -11
  157. package/dist/plugins/strapi/src/index.js +63 -12
  158. package/dist/plugins/strava/src/index.js +58 -13
  159. package/dist/plugins/stripe/src/index.js +143 -30
  160. package/dist/plugins/supabase/src/index.js +49 -10
  161. package/dist/plugins/syncromsp/src/index.js +245 -67
  162. package/dist/plugins/tapfiliate/src/index.js +57 -14
  163. package/dist/plugins/telegram/src/index.js +202 -39
  164. package/dist/plugins/thehive/src/index.js +271 -66
  165. package/dist/plugins/thehiveProject/src/index.js +457 -89
  166. package/dist/plugins/todoist/src/index.js +326 -77
  167. package/dist/plugins/travisci/src/index.js +35 -8
  168. package/dist/plugins/trello/src/index.js +204 -46
  169. package/dist/plugins/twake/src/index.js +10 -2
  170. package/dist/plugins/twilio/src/index.js +56 -11
  171. package/dist/plugins/twist/src/index.js +241 -48
  172. package/dist/plugins/twitter/src/index.js +128 -30
  173. package/dist/plugins/unleashedSoftware/src/index.js +30 -6
  174. package/dist/plugins/uplead/src/index.js +9 -2
  175. package/dist/plugins/uproc/src/index.js +31 -6
  176. package/dist/plugins/uptimerobot/src/index.js +119 -25
  177. package/dist/plugins/urlscanio/src/index.js +25 -6
  178. package/dist/plugins/vero/src/index.js +68 -13
  179. package/dist/plugins/vonage/src/index.js +32 -6
  180. package/dist/plugins/wekan/src/index.js +297 -52
  181. package/dist/plugins/woocommerce/src/index.js +57 -12
  182. package/dist/plugins/wordpress/src/index.js +94 -18
  183. package/dist/plugins/xero/src/index.js +79 -13
  184. package/dist/plugins/yourls/src/index.js +33 -6
  185. package/dist/plugins/zammad/src/index.js +139 -36
  186. package/dist/plugins/zendesk/src/index.js +201 -48
  187. package/dist/plugins/zoho/src/index.js +88 -21
  188. package/dist/plugins/zoom/src/index.js +41 -7
  189. package/dist/plugins/zulip/src/index.js +101 -20
  190. package/package.json +1 -1
@@ -9,10 +9,17 @@ async function apiRequest(apiKey, method, endpoint, body, qs) {
9
9
  }
10
10
  const opts = {
11
11
  method,
12
- headers: { Authorization: `Basic ${btoa(`anystring:${apiKey}`)}`, Accept: "application/json" },
12
+ headers: {
13
+ Authorization: `Basic ${btoa(`anystring:${apiKey}`)}`,
14
+ Accept: "application/json",
15
+ },
13
16
  };
14
- if (body && Object.keys(body).length > 0 && method !== "GET" && method !== "DELETE") {
15
- opts.headers["Content-Type"] = "application/json";
17
+ if (body &&
18
+ Object.keys(body).length > 0 &&
19
+ method !== "GET" &&
20
+ method !== "DELETE") {
21
+ opts.headers["Content-Type"] =
22
+ "application/json";
16
23
  opts.body = JSON.stringify(body);
17
24
  }
18
25
  const res = await fetch(url.toString(), opts);
@@ -26,27 +33,68 @@ export default function mailchimp(rl) {
26
33
  rl.setName("mailchimp");
27
34
  rl.setVersion("0.1.0");
28
35
  rl.setConnectionSchema({
29
- apiKey: { type: "string", required: true, description: "Mailchimp API key (includes datacenter suffix, e.g. xxx-us21)", env: "MAILCHIMP_API_KEY" },
36
+ apiKey: {
37
+ type: "string",
38
+ required: true,
39
+ description: "Mailchimp API key (includes datacenter suffix, e.g. xxx-us21)",
40
+ env: "MAILCHIMP_API_KEY",
41
+ },
30
42
  });
31
43
  const key = (ctx) => ctx.connection.config.apiKey;
32
44
  // ── Member ──────────────────────────────────────────
33
45
  rl.registerAction("member.create", {
34
46
  description: "Add a member to a list/audience",
35
47
  inputSchema: {
36
- listId: { type: "string", required: true, description: "List/audience ID" },
48
+ listId: {
49
+ type: "string",
50
+ required: true,
51
+ description: "List/audience ID",
52
+ },
37
53
  email: { type: "string", required: true },
38
- status: { type: "string", required: true, description: "subscribed, unsubscribed, cleaned, pending, transactional" },
39
- mergeFields: { type: "object", required: false, description: "Merge fields as {TAG: value}" },
40
- tags: { type: "array", required: false, description: "Array of tag name strings" },
41
- emailType: { type: "string", required: false, description: "html or text" },
54
+ status: {
55
+ type: "string",
56
+ required: true,
57
+ description: "subscribed, unsubscribed, cleaned, pending, transactional",
58
+ },
59
+ mergeFields: {
60
+ type: "object",
61
+ required: false,
62
+ description: "Merge fields as {TAG: value}",
63
+ },
64
+ tags: {
65
+ type: "array",
66
+ required: false,
67
+ description: "Array of tag name strings",
68
+ },
69
+ emailType: {
70
+ type: "string",
71
+ required: false,
72
+ description: "html or text",
73
+ },
42
74
  language: { type: "string", required: false },
43
75
  vip: { type: "boolean", required: false },
44
- location: { type: "object", required: false, description: "{latitude: number, longitude: number}" },
45
- interests: { type: "object", required: false, description: "Interest group IDs as {id: boolean}" },
76
+ location: {
77
+ type: "object",
78
+ required: false,
79
+ description: "{latitude: number, longitude: number}",
80
+ },
81
+ interests: {
82
+ type: "object",
83
+ required: false,
84
+ description: "Interest group IDs as {id: boolean}",
85
+ },
46
86
  ipSignup: { type: "string", required: false },
47
87
  ipOpt: { type: "string", required: false },
48
- timestampSignup: { type: "string", required: false, description: "ISO datetime" },
49
- timestampOpt: { type: "string", required: false, description: "ISO datetime" },
88
+ timestampSignup: {
89
+ type: "string",
90
+ required: false,
91
+ description: "ISO datetime",
92
+ },
93
+ timestampOpt: {
94
+ type: "string",
95
+ required: false,
96
+ description: "ISO datetime",
97
+ },
50
98
  },
51
99
  async execute(input, ctx) {
52
100
  const p = input;
@@ -83,9 +131,21 @@ export default function mailchimp(rl) {
83
131
  description: "Get a list member by email (used directly as subscriber hash)",
84
132
  inputSchema: {
85
133
  listId: { type: "string", required: true },
86
- email: { type: "string", required: true, description: "Email address (Mailchimp accepts email or MD5 hash)" },
87
- fields: { type: "string", required: false, description: "Comma-separated fields to return" },
88
- excludeFields: { type: "string", required: false, description: "Comma-separated fields to exclude" },
134
+ email: {
135
+ type: "string",
136
+ required: true,
137
+ description: "Email address (Mailchimp accepts email or MD5 hash)",
138
+ },
139
+ fields: {
140
+ type: "string",
141
+ required: false,
142
+ description: "Comma-separated fields to return",
143
+ },
144
+ excludeFields: {
145
+ type: "string",
146
+ required: false,
147
+ description: "Comma-separated fields to exclude",
148
+ },
89
149
  },
90
150
  async execute(input, ctx) {
91
151
  const { listId, email, fields, excludeFields } = input;
@@ -101,13 +161,37 @@ export default function mailchimp(rl) {
101
161
  description: "List members in a list/audience",
102
162
  inputSchema: {
103
163
  listId: { type: "string", required: true },
104
- count: { type: "number", required: false, description: "Max results (default 500)" },
164
+ count: {
165
+ type: "number",
166
+ required: false,
167
+ description: "Max results (default 500)",
168
+ },
105
169
  offset: { type: "number", required: false },
106
- status: { type: "string", required: false, description: "subscribed, unsubscribed, cleaned, pending, transactional" },
107
- emailType: { type: "string", required: false, description: "html or text" },
108
- sinceLastChanged: { type: "string", required: false, description: "ISO datetime" },
109
- beforeLastChanged: { type: "string", required: false, description: "ISO datetime" },
110
- beforeTimestampOpt: { type: "string", required: false, description: "ISO datetime" },
170
+ status: {
171
+ type: "string",
172
+ required: false,
173
+ description: "subscribed, unsubscribed, cleaned, pending, transactional",
174
+ },
175
+ emailType: {
176
+ type: "string",
177
+ required: false,
178
+ description: "html or text",
179
+ },
180
+ sinceLastChanged: {
181
+ type: "string",
182
+ required: false,
183
+ description: "ISO datetime",
184
+ },
185
+ beforeLastChanged: {
186
+ type: "string",
187
+ required: false,
188
+ description: "ISO datetime",
189
+ },
190
+ beforeTimestampOpt: {
191
+ type: "string",
192
+ required: false,
193
+ description: "ISO datetime",
194
+ },
111
195
  },
112
196
  async execute(input, ctx) {
113
197
  const p = input;
@@ -134,7 +218,11 @@ export default function mailchimp(rl) {
134
218
  description: "Update a list member (PUT — full replace)",
135
219
  inputSchema: {
136
220
  listId: { type: "string", required: true },
137
- email: { type: "string", required: true, description: "Email address (used as subscriber hash)" },
221
+ email: {
222
+ type: "string",
223
+ required: true,
224
+ description: "Email address (used as subscriber hash)",
225
+ },
138
226
  status: { type: "string", required: false },
139
227
  mergeFields: { type: "object", required: false },
140
228
  interests: { type: "object", required: false },
@@ -197,12 +285,22 @@ export default function mailchimp(rl) {
197
285
  inputSchema: {
198
286
  listId: { type: "string", required: true },
199
287
  email: { type: "string", required: true },
200
- tags: { type: "array", required: true, description: "Array of tag names" },
201
- isSyncing: { type: "boolean", required: false, description: "If true, automations based on tags won't fire" },
288
+ tags: {
289
+ type: "array",
290
+ required: true,
291
+ description: "Array of tag names",
292
+ },
293
+ isSyncing: {
294
+ type: "boolean",
295
+ required: false,
296
+ description: "If true, automations based on tags won't fire",
297
+ },
202
298
  },
203
299
  async execute(input, ctx) {
204
300
  const { listId, email, tags, isSyncing } = input;
205
- const body = { tags: tags.map((t) => ({ name: t, status: "active" })) };
301
+ const body = {
302
+ tags: tags.map((t) => ({ name: t, status: "active" })),
303
+ };
206
304
  if (isSyncing)
207
305
  body.is_syncing = isSyncing;
208
306
  await apiRequest(key(ctx), "POST", `/lists/${listId}/members/${email}/tags`, body);
@@ -214,12 +312,18 @@ export default function mailchimp(rl) {
214
312
  inputSchema: {
215
313
  listId: { type: "string", required: true },
216
314
  email: { type: "string", required: true },
217
- tags: { type: "array", required: true, description: "Array of tag names" },
315
+ tags: {
316
+ type: "array",
317
+ required: true,
318
+ description: "Array of tag names",
319
+ },
218
320
  isSyncing: { type: "boolean", required: false },
219
321
  },
220
322
  async execute(input, ctx) {
221
323
  const { listId, email, tags, isSyncing } = input;
222
- const body = { tags: tags.map((t) => ({ name: t, status: "inactive" })) };
324
+ const body = {
325
+ tags: tags.map((t) => ({ name: t, status: "inactive" })),
326
+ };
223
327
  if (isSyncing)
224
328
  body.is_syncing = isSyncing;
225
329
  await apiRequest(key(ctx), "POST", `/lists/${listId}/members/${email}/tags`, body);
@@ -231,7 +335,11 @@ export default function mailchimp(rl) {
231
335
  description: "List interests in a specific interest category for a list",
232
336
  inputSchema: {
233
337
  listId: { type: "string", required: true },
234
- categoryId: { type: "string", required: true, description: "Interest category ID" },
338
+ categoryId: {
339
+ type: "string",
340
+ required: true,
341
+ description: "Interest category ID",
342
+ },
235
343
  count: { type: "number", required: false, description: "Max results" },
236
344
  },
237
345
  async execute(input, ctx) {
@@ -247,21 +355,59 @@ export default function mailchimp(rl) {
247
355
  rl.registerAction("campaign.get", {
248
356
  description: "Get a campaign",
249
357
  inputSchema: { campaignId: { type: "string", required: true } },
250
- async execute(input, ctx) { return apiRequest(key(ctx), "GET", `/campaigns/${input.campaignId}`); },
358
+ async execute(input, ctx) {
359
+ return apiRequest(key(ctx), "GET", `/campaigns/${input.campaignId}`);
360
+ },
251
361
  });
252
362
  rl.registerAction("campaign.list", {
253
363
  description: "List campaigns",
254
364
  inputSchema: {
255
365
  count: { type: "number", required: false, description: "Max results" },
256
- status: { type: "string", required: false, description: "save, sending, sent, schedule" },
257
- listId: { type: "string", required: false, description: "Filter by list ID" },
258
- fields: { type: "array", required: false, description: "Array of field names to return" },
259
- sinceCreateTime: { type: "string", required: false, description: "ISO datetime" },
260
- beforeCreateTime: { type: "string", required: false, description: "ISO datetime" },
261
- sinceSendTime: { type: "string", required: false, description: "ISO datetime" },
262
- beforeSendTime: { type: "string", required: false, description: "ISO datetime" },
263
- sortField: { type: "string", required: false, description: "create_time or send_time" },
264
- sortDirection: { type: "string", required: false, description: "ASC or DESC" },
366
+ status: {
367
+ type: "string",
368
+ required: false,
369
+ description: "save, sending, sent, schedule",
370
+ },
371
+ listId: {
372
+ type: "string",
373
+ required: false,
374
+ description: "Filter by list ID",
375
+ },
376
+ fields: {
377
+ type: "array",
378
+ required: false,
379
+ description: "Array of field names to return",
380
+ },
381
+ sinceCreateTime: {
382
+ type: "string",
383
+ required: false,
384
+ description: "ISO datetime",
385
+ },
386
+ beforeCreateTime: {
387
+ type: "string",
388
+ required: false,
389
+ description: "ISO datetime",
390
+ },
391
+ sinceSendTime: {
392
+ type: "string",
393
+ required: false,
394
+ description: "ISO datetime",
395
+ },
396
+ beforeSendTime: {
397
+ type: "string",
398
+ required: false,
399
+ description: "ISO datetime",
400
+ },
401
+ sortField: {
402
+ type: "string",
403
+ required: false,
404
+ description: "create_time or send_time",
405
+ },
406
+ sortDirection: {
407
+ type: "string",
408
+ required: false,
409
+ description: "ASC or DESC",
410
+ },
265
411
  },
266
412
  async execute(input, ctx) {
267
413
  const p = (input ?? {});
@@ -275,7 +421,8 @@ export default function mailchimp(rl) {
275
421
  if (p.fields && Array.isArray(p.fields))
276
422
  qs.fields = p.fields.join(",");
277
423
  else
278
- qs.fields = "campaigns.id,campaigns.status,campaigns.tracking,campaigns.settings.from_name,campaigns.settings.title,campaigns.settings.reply_to";
424
+ qs.fields =
425
+ "campaigns.id,campaigns.status,campaigns.tracking,campaigns.settings.from_name,campaigns.settings.title,campaigns.settings.reply_to";
279
426
  if (p.sinceCreateTime)
280
427
  qs.since_create_time = p.sinceCreateTime;
281
428
  if (p.beforeCreateTime)
@@ -303,12 +450,16 @@ export default function mailchimp(rl) {
303
450
  rl.registerAction("campaign.replicate", {
304
451
  description: "Replicate a campaign",
305
452
  inputSchema: { campaignId: { type: "string", required: true } },
306
- async execute(input, ctx) { return apiRequest(key(ctx), "POST", `/campaigns/${input.campaignId}/actions/replicate`); },
453
+ async execute(input, ctx) {
454
+ return apiRequest(key(ctx), "POST", `/campaigns/${input.campaignId}/actions/replicate`);
455
+ },
307
456
  });
308
457
  rl.registerAction("campaign.resend", {
309
458
  description: "Create a resend to non-openers",
310
459
  inputSchema: { campaignId: { type: "string", required: true } },
311
- async execute(input, ctx) { return apiRequest(key(ctx), "POST", `/campaigns/${input.campaignId}/actions/create-resend`); },
460
+ async execute(input, ctx) {
461
+ return apiRequest(key(ctx), "POST", `/campaigns/${input.campaignId}/actions/create-resend`);
462
+ },
312
463
  });
313
464
  rl.registerAction("campaign.delete", {
314
465
  description: "Delete a campaign",
@@ -9,9 +9,15 @@ async function apiRequest(token, method, endpoint, body, qs) {
9
9
  }
10
10
  const opts = {
11
11
  method,
12
- headers: { Authorization: `Bearer ${token}`, "Content-Type": "application/json" },
12
+ headers: {
13
+ Authorization: `Bearer ${token}`,
14
+ "Content-Type": "application/json",
15
+ },
13
16
  };
14
- if (body && Object.keys(body).length > 0 && method !== "GET" && method !== "DELETE")
17
+ if (body &&
18
+ Object.keys(body).length > 0 &&
19
+ method !== "GET" &&
20
+ method !== "DELETE")
15
21
  opts.body = JSON.stringify(body);
16
22
  const res = await fetch(url.toString(), opts);
17
23
  if (!res.ok)
@@ -41,17 +47,38 @@ export default function mailerlite(rl) {
41
47
  rl.setName("mailerlite");
42
48
  rl.setVersion("0.1.0");
43
49
  rl.setConnectionSchema({
44
- apiKey: { type: "string", required: true, description: "MailerLite API token", env: "MAILERLITE_API_KEY" },
50
+ apiKey: {
51
+ type: "string",
52
+ required: true,
53
+ description: "MailerLite API token",
54
+ env: "MAILERLITE_API_KEY",
55
+ },
45
56
  });
46
57
  const tok = (ctx) => ctx.connection.config.apiKey;
47
58
  rl.registerAction("subscriber.create", {
48
59
  description: "Create a subscriber",
49
60
  inputSchema: {
50
61
  email: { type: "string", required: true },
51
- fields: { type: "object", required: false, description: "Custom fields as {field_key: value}" },
52
- groups: { type: "array", required: false, description: "Array of group IDs" },
53
- status: { type: "string", required: false, description: "active, unsubscribed, unconfirmed, bounced, junk" },
54
- subscribed_at: { type: "string", required: false, description: "ISO datetime" },
62
+ fields: {
63
+ type: "object",
64
+ required: false,
65
+ description: "Custom fields as {field_key: value}",
66
+ },
67
+ groups: {
68
+ type: "array",
69
+ required: false,
70
+ description: "Array of group IDs",
71
+ },
72
+ status: {
73
+ type: "string",
74
+ required: false,
75
+ description: "active, unsubscribed, unconfirmed, bounced, junk",
76
+ },
77
+ subscribed_at: {
78
+ type: "string",
79
+ required: false,
80
+ description: "ISO datetime",
81
+ },
55
82
  ip_address: { type: "string", required: false },
56
83
  opted_in_at: { type: "string", required: false },
57
84
  optin_ip: { type: "string", required: false },
@@ -71,7 +98,13 @@ export default function mailerlite(rl) {
71
98
  });
72
99
  rl.registerAction("subscriber.get", {
73
100
  description: "Get a subscriber by ID or email",
74
- inputSchema: { subscriberId: { type: "string", required: true, description: "Subscriber ID or email" } },
101
+ inputSchema: {
102
+ subscriberId: {
103
+ type: "string",
104
+ required: true,
105
+ description: "Subscriber ID or email",
106
+ },
107
+ },
75
108
  async execute(input, ctx) {
76
109
  const resp = (await apiRequest(tok(ctx), "GET", `/subscribers/${encodeURIComponent(input.subscriberId)}`));
77
110
  return resp.data;
@@ -81,7 +114,11 @@ export default function mailerlite(rl) {
81
114
  description: "List subscribers",
82
115
  inputSchema: {
83
116
  limit: { type: "number", required: false },
84
- status: { type: "string", required: false, description: "Filter by status: active, unsubscribed, unconfirmed, bounced, junk" },
117
+ status: {
118
+ type: "string",
119
+ required: false,
120
+ description: "Filter by status: active, unsubscribed, unconfirmed, bounced, junk",
121
+ },
85
122
  },
86
123
  async execute(input, ctx) {
87
124
  const { limit, status } = (input ?? {});
@@ -99,9 +136,21 @@ export default function mailerlite(rl) {
99
136
  rl.registerAction("subscriber.update", {
100
137
  description: "Update a subscriber",
101
138
  inputSchema: {
102
- subscriberId: { type: "string", required: true, description: "Subscriber ID or email" },
103
- fields: { type: "object", required: false, description: "Custom fields as {field_key: value}" },
104
- groups: { type: "array", required: false, description: "Array of group IDs" },
139
+ subscriberId: {
140
+ type: "string",
141
+ required: true,
142
+ description: "Subscriber ID or email",
143
+ },
144
+ fields: {
145
+ type: "object",
146
+ required: false,
147
+ description: "Custom fields as {field_key: value}",
148
+ },
149
+ groups: {
150
+ type: "array",
151
+ required: false,
152
+ description: "Array of group IDs",
153
+ },
105
154
  status: { type: "string", required: false },
106
155
  subscribed_at: { type: "string", required: false },
107
156
  ip_address: { type: "string", required: false },
@@ -2,20 +2,52 @@ export default function mailgun(rl) {
2
2
  rl.setName("mailgun");
3
3
  rl.setVersion("0.1.0");
4
4
  rl.setConnectionSchema({
5
- apiKey: { type: "string", required: true, description: "Mailgun API key", env: "MAILGUN_API_KEY" },
6
- apiDomain: { type: "string", required: false, description: "API domain: 'api.mailgun.net' (US, default) or 'api.eu.mailgun.net' (EU)", default: "api.mailgun.net", env: "MAILGUN_API_DOMAIN" },
7
- emailDomain: { type: "string", required: true, description: "Sending domain (e.g. mg.example.com)", env: "MAILGUN_EMAIL_DOMAIN" },
5
+ apiKey: {
6
+ type: "string",
7
+ required: true,
8
+ description: "Mailgun API key",
9
+ env: "MAILGUN_API_KEY",
10
+ },
11
+ apiDomain: {
12
+ type: "string",
13
+ required: false,
14
+ description: "API domain: 'api.mailgun.net' (US, default) or 'api.eu.mailgun.net' (EU)",
15
+ default: "api.mailgun.net",
16
+ env: "MAILGUN_API_DOMAIN",
17
+ },
18
+ emailDomain: {
19
+ type: "string",
20
+ required: true,
21
+ description: "Sending domain (e.g. mg.example.com)",
22
+ env: "MAILGUN_EMAIL_DOMAIN",
23
+ },
8
24
  });
9
25
  rl.registerAction("email.send", {
10
26
  description: "Send an email via Mailgun",
11
27
  inputSchema: {
12
- to: { type: "string", required: true, description: "Recipient email(s), comma-separated" },
13
- from: { type: "string", required: true, description: "Sender (e.g. 'Name <user@domain.com>')" },
28
+ to: {
29
+ type: "string",
30
+ required: true,
31
+ description: "Recipient email(s), comma-separated",
32
+ },
33
+ from: {
34
+ type: "string",
35
+ required: true,
36
+ description: "Sender (e.g. 'Name <user@domain.com>')",
37
+ },
14
38
  subject: { type: "string", required: true },
15
39
  text: { type: "string", required: false, description: "Plain text body" },
16
40
  html: { type: "string", required: false, description: "HTML body" },
17
- cc: { type: "string", required: false, description: "CC recipients, comma-separated" },
18
- bcc: { type: "string", required: false, description: "BCC recipients, comma-separated" },
41
+ cc: {
42
+ type: "string",
43
+ required: false,
44
+ description: "CC recipients, comma-separated",
45
+ },
46
+ bcc: {
47
+ type: "string",
48
+ required: false,
49
+ description: "BCC recipients, comma-separated",
50
+ },
19
51
  },
20
52
  async execute(input, ctx) {
21
53
  const { to, from, subject, text, html, cc, bcc } = input;