runline 0.2.1 → 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 (189) hide show
  1. package/dist/plugins/actionNetwork/src/index.js +118 -25
  2. package/dist/plugins/activeCampaign/src/index.js +184 -38
  3. package/dist/plugins/adalo/src/index.js +40 -8
  4. package/dist/plugins/affinity/src/index.js +100 -20
  5. package/dist/plugins/agileCrm/src/index.js +115 -27
  6. package/dist/plugins/airtable/src/index.js +94 -19
  7. package/dist/plugins/airtop/src/index.js +266 -62
  8. package/dist/plugins/apiTemplateIo/src/index.js +25 -5
  9. package/dist/plugins/asana/src/index.js +195 -41
  10. package/dist/plugins/autopilot/src/index.js +39 -8
  11. package/dist/plugins/bambooHr/src/index.js +109 -22
  12. package/dist/plugins/bannerbear/src/index.js +36 -8
  13. package/dist/plugins/baserow/src/index.js +35 -7
  14. package/dist/plugins/beeminder/src/index.js +198 -40
  15. package/dist/plugins/bitly/src/index.js +46 -10
  16. package/dist/plugins/bitwarden/src/index.js +167 -36
  17. package/dist/plugins/box/src/index.js +172 -37
  18. package/dist/plugins/brandfetch/src/index.js +5 -1
  19. package/dist/plugins/brevo/src/index.js +136 -29
  20. package/dist/plugins/bubble/src/index.js +76 -17
  21. package/dist/plugins/chargebee/src/index.js +35 -7
  22. package/dist/plugins/circleci/src/index.js +50 -10
  23. package/dist/plugins/ciscoWebex/src/index.js +131 -27
  24. package/dist/plugins/clearbit/src/index.js +76 -17
  25. package/dist/plugins/clickup/src/index.js +500 -107
  26. package/dist/plugins/clockify/src/index.js +229 -47
  27. package/dist/plugins/cloudflare/src/index.js +28 -6
  28. package/dist/plugins/cockpit/src/index.js +54 -12
  29. package/dist/plugins/coda/src/index.js +81 -19
  30. package/dist/plugins/coingecko/src/index.js +157 -33
  31. package/dist/plugins/contentful/src/index.js +85 -17
  32. package/dist/plugins/convertkit/src/index.js +74 -18
  33. package/dist/plugins/copper/src/index.js +59 -11
  34. package/dist/plugins/cortex/src/index.js +55 -13
  35. package/dist/plugins/currents/src/index.js +310 -71
  36. package/dist/plugins/customerIo/src/index.js +112 -23
  37. package/dist/plugins/databricks/src/index.js +549 -115
  38. package/dist/plugins/deepl/src/index.js +26 -6
  39. package/dist/plugins/demio/src/index.js +56 -11
  40. package/dist/plugins/dhl/src/index.js +16 -3
  41. package/dist/plugins/discord/src/index.js +141 -31
  42. package/dist/plugins/discourse/src/index.js +136 -31
  43. package/dist/plugins/disqus/src/index.js +96 -20
  44. package/dist/plugins/docker/src/index.js +20 -4
  45. package/dist/plugins/drift/src/index.js +19 -5
  46. package/dist/plugins/dropbox/src/index.js +139 -30
  47. package/dist/plugins/dropcontact/src/index.js +21 -4
  48. package/dist/plugins/egoi/src/index.js +61 -15
  49. package/dist/plugins/elasticsearch/src/index.js +59 -13
  50. package/dist/plugins/emelia/src/index.js +95 -19
  51. package/dist/plugins/erpnext/src/index.js +74 -15
  52. package/dist/plugins/facebookGraph/src/index.js +52 -11
  53. package/dist/plugins/freshdesk/src/index.js +220 -48
  54. package/dist/plugins/freshservice/src/index.js +39 -9
  55. package/dist/plugins/freshworksCrm/src/index.js +58 -12
  56. package/dist/plugins/getresponse/src/index.js +87 -18
  57. package/dist/plugins/ghost/src/index.js +114 -26
  58. package/dist/plugins/github/src/index.js +483 -109
  59. package/dist/plugins/gitlab/src/index.js +193 -45
  60. package/dist/plugins/gong/src/index.js +68 -14
  61. package/dist/plugins/gotify/src/index.js +43 -9
  62. package/dist/plugins/gotowebinar/src/index.js +233 -47
  63. package/dist/plugins/grafana/src/index.js +92 -21
  64. package/dist/plugins/graphql/src/index.js +38 -8
  65. package/dist/plugins/grist/src/index.js +52 -10
  66. package/dist/plugins/hackernews/src/index.js +32 -6
  67. package/dist/plugins/halopsa/src/index.js +131 -26
  68. package/dist/plugins/harvest/src/index.js +182 -42
  69. package/dist/plugins/helpscout/src/index.js +153 -31
  70. package/dist/plugins/highlevel/src/index.js +291 -58
  71. package/dist/plugins/homeAssistant/src/index.js +124 -26
  72. package/dist/plugins/hubspot/src/index.js +163 -29
  73. package/dist/plugins/humanticAi/src/index.js +54 -5
  74. package/dist/plugins/hunter/src/index.js +21 -4
  75. package/dist/plugins/intercom/src/index.js +95 -20
  76. package/dist/plugins/iterable/src/index.js +96 -20
  77. package/dist/plugins/jenkins/src/index.js +75 -17
  78. package/dist/plugins/jira/src/index.js +193 -43
  79. package/dist/plugins/keap/src/index.js +222 -56
  80. package/dist/plugins/kobotoolbox/src/index.js +113 -25
  81. package/dist/plugins/lemlist/src/index.js +79 -18
  82. package/dist/plugins/linear/src/index.js +86 -19
  83. package/dist/plugins/lingvanex/src/index.js +38 -8
  84. package/dist/plugins/linkedin/src/index.js +37 -8
  85. package/dist/plugins/lonescale/src/index.js +41 -9
  86. package/dist/plugins/magento/src/index.js +98 -27
  87. package/dist/plugins/mailcheck/src/index.js +11 -2
  88. package/dist/plugins/mailchimp/src/index.js +193 -42
  89. package/dist/plugins/mailerlite/src/index.js +61 -12
  90. package/dist/plugins/mailgun/src/index.js +39 -7
  91. package/dist/plugins/mailjet/src/index.js +141 -30
  92. package/dist/plugins/mandrill/src/index.js +67 -14
  93. package/dist/plugins/marketstack/src/index.js +56 -10
  94. package/dist/plugins/matrix/src/index.js +97 -20
  95. package/dist/plugins/mattermost/src/index.js +124 -26
  96. package/dist/plugins/mautic/src/index.js +129 -26
  97. package/dist/plugins/medium/src/index.js +64 -13
  98. package/dist/plugins/messagebird/src/index.js +80 -15
  99. package/dist/plugins/metabase/src/index.js +57 -12
  100. package/dist/plugins/misp/src/index.js +135 -33
  101. package/dist/plugins/mocean/src/index.js +33 -7
  102. package/dist/plugins/monday/src/index.js +97 -23
  103. package/dist/plugins/monicaCrm/src/index.js +112 -23
  104. package/dist/plugins/msg91/src/index.js +11 -2
  105. package/dist/plugins/nasa/src/index.js +108 -21
  106. package/dist/plugins/netlify/src/index.js +28 -6
  107. package/dist/plugins/netscalerAdc/src/index.js +144 -29
  108. package/dist/plugins/nextcloud/src/index.js +103 -20
  109. package/dist/plugins/nocodb/src/index.js +57 -11
  110. package/dist/plugins/notion/src/index.js +148 -37
  111. package/dist/plugins/npm/src/index.js +59 -12
  112. package/dist/plugins/odoo/src/index.js +102 -20
  113. package/dist/plugins/okta/src/index.js +50 -10
  114. package/dist/plugins/oneSimpleApi/src/index.js +84 -17
  115. package/dist/plugins/onfleet/src/index.js +139 -32
  116. package/dist/plugins/openThesaurus/src/index.js +46 -9
  117. package/dist/plugins/openweathermap/src/index.js +31 -6
  118. package/dist/plugins/oura/src/index.js +36 -7
  119. package/dist/plugins/paddle/src/index.js +80 -17
  120. package/dist/plugins/pagerduty/src/index.js +53 -12
  121. package/dist/plugins/paypal/src/index.js +51 -11
  122. package/dist/plugins/peekalink/src/index.js +12 -3
  123. package/dist/plugins/phantombuster/src/index.js +39 -8
  124. package/dist/plugins/philipsHue/src/index.js +64 -13
  125. package/dist/plugins/pipedrive/src/index.js +167 -45
  126. package/dist/plugins/plivo/src/index.js +43 -8
  127. package/dist/plugins/postbin/src/index.js +9 -2
  128. package/dist/plugins/posthog/src/index.js +50 -13
  129. package/dist/plugins/profitwell/src/index.js +24 -5
  130. package/dist/plugins/pushbullet/src/index.js +45 -9
  131. package/dist/plugins/pushcut/src/index.js +31 -6
  132. package/dist/plugins/pushover/src/index.js +51 -10
  133. package/dist/plugins/quickbase/src/index.js +66 -13
  134. package/dist/plugins/quickbooks/src/index.js +86 -19
  135. package/dist/plugins/quickchart/src/index.js +35 -7
  136. package/dist/plugins/raindrop/src/index.js +54 -13
  137. package/dist/plugins/reddit/src/index.js +73 -18
  138. package/dist/plugins/rocketchat/src/index.js +47 -9
  139. package/dist/plugins/rundeck/src/index.js +26 -5
  140. package/dist/plugins/salesforce/src/index.js +161 -31
  141. package/dist/plugins/salesmate/src/index.js +75 -16
  142. package/dist/plugins/securityScorecard/src/index.js +73 -15
  143. package/dist/plugins/segment/src/index.js +21 -4
  144. package/dist/plugins/sendgrid/src/index.js +102 -24
  145. package/dist/plugins/sendy/src/index.js +54 -11
  146. package/dist/plugins/sentry/src/index.js +174 -34
  147. package/dist/plugins/servicenow/src/index.js +120 -27
  148. package/dist/plugins/shopify/src/index.js +53 -12
  149. package/dist/plugins/signl4/src/index.js +16 -3
  150. package/dist/plugins/slack/src/index.js +407 -105
  151. package/dist/plugins/sms77/src/index.js +26 -5
  152. package/dist/plugins/splunk/src/index.js +186 -45
  153. package/dist/plugins/spotify/src/index.js +265 -66
  154. package/dist/plugins/stackby/src/index.js +18 -6
  155. package/dist/plugins/storyblok/src/index.js +57 -11
  156. package/dist/plugins/strapi/src/index.js +63 -12
  157. package/dist/plugins/strava/src/index.js +58 -13
  158. package/dist/plugins/stripe/src/index.js +143 -30
  159. package/dist/plugins/supabase/src/index.js +49 -10
  160. package/dist/plugins/syncromsp/src/index.js +245 -67
  161. package/dist/plugins/tapfiliate/src/index.js +57 -14
  162. package/dist/plugins/telegram/src/index.js +202 -39
  163. package/dist/plugins/thehive/src/index.js +271 -66
  164. package/dist/plugins/thehiveProject/src/index.js +457 -89
  165. package/dist/plugins/todoist/src/index.js +326 -77
  166. package/dist/plugins/travisci/src/index.js +35 -8
  167. package/dist/plugins/trello/src/index.js +204 -46
  168. package/dist/plugins/twake/src/index.js +10 -2
  169. package/dist/plugins/twilio/src/index.js +56 -11
  170. package/dist/plugins/twist/src/index.js +241 -48
  171. package/dist/plugins/twitter/src/index.js +128 -30
  172. package/dist/plugins/unleashedSoftware/src/index.js +30 -6
  173. package/dist/plugins/uplead/src/index.js +9 -2
  174. package/dist/plugins/uproc/src/index.js +31 -6
  175. package/dist/plugins/uptimerobot/src/index.js +119 -25
  176. package/dist/plugins/urlscanio/src/index.js +25 -6
  177. package/dist/plugins/vero/src/index.js +68 -13
  178. package/dist/plugins/vonage/src/index.js +32 -6
  179. package/dist/plugins/wekan/src/index.js +297 -52
  180. package/dist/plugins/woocommerce/src/index.js +57 -12
  181. package/dist/plugins/wordpress/src/index.js +94 -18
  182. package/dist/plugins/xero/src/index.js +79 -13
  183. package/dist/plugins/yourls/src/index.js +33 -6
  184. package/dist/plugins/zammad/src/index.js +139 -36
  185. package/dist/plugins/zendesk/src/index.js +201 -48
  186. package/dist/plugins/zoho/src/index.js +88 -21
  187. package/dist/plugins/zoom/src/index.js +41 -7
  188. package/dist/plugins/zulip/src/index.js +101 -20
  189. package/package.json +1 -1
@@ -7,8 +7,17 @@ async function apiRequest(token, method, endpoint, body, qs) {
7
7
  url.searchParams.set(k, String(v));
8
8
  }
9
9
  }
10
- const opts = { method, headers: { Authorization: `Bearer ${token}`, "Content-Type": "application/json" } };
11
- if (body && Object.keys(body).length > 0 && method !== "GET" && method !== "DELETE")
10
+ const opts = {
11
+ method,
12
+ headers: {
13
+ Authorization: `Bearer ${token}`,
14
+ "Content-Type": "application/json",
15
+ },
16
+ };
17
+ if (body &&
18
+ Object.keys(body).length > 0 &&
19
+ method !== "GET" &&
20
+ method !== "DELETE")
12
21
  opts.body = JSON.stringify(body);
13
22
  const res = await fetch(url.toString(), opts);
14
23
  if (!res.ok)
@@ -37,18 +46,43 @@ export default function keap(rl) {
37
46
  rl.setName("keap");
38
47
  rl.setVersion("0.1.0");
39
48
  rl.setConnectionSchema({
40
- accessToken: { type: "string", required: true, description: "Keap OAuth2 access token", env: "KEAP_ACCESS_TOKEN" },
49
+ accessToken: {
50
+ type: "string",
51
+ required: true,
52
+ description: "Keap OAuth2 access token",
53
+ env: "KEAP_ACCESS_TOKEN",
54
+ },
41
55
  });
42
56
  const tok = (ctx) => ctx.connection.config.accessToken;
43
57
  // ── Company ─────────────────────────────────────────
44
58
  rl.registerAction("company.create", {
45
59
  description: "Create a company",
46
60
  inputSchema: {
47
- companyName: { type: "string", required: true, description: "Company name" },
48
- address: { type: "object", required: false, description: "Address object (line1, line2, locality, region, zip_code, country_code)" },
49
- phone: { type: "object", required: false, description: "Phone object (number, field, type)" },
50
- fax: { type: "object", required: false, description: "Fax object (number, type)" },
51
- additionalFields: { type: "object", required: false, description: "Additional company fields (email_address, website, notes, etc.)" },
61
+ companyName: {
62
+ type: "string",
63
+ required: true,
64
+ description: "Company name",
65
+ },
66
+ address: {
67
+ type: "object",
68
+ required: false,
69
+ description: "Address object (line1, line2, locality, region, zip_code, country_code)",
70
+ },
71
+ phone: {
72
+ type: "object",
73
+ required: false,
74
+ description: "Phone object (number, field, type)",
75
+ },
76
+ fax: {
77
+ type: "object",
78
+ required: false,
79
+ description: "Fax object (number, type)",
80
+ },
81
+ additionalFields: {
82
+ type: "object",
83
+ required: false,
84
+ description: "Additional company fields (email_address, website, notes, etc.)",
85
+ },
52
86
  },
53
87
  async execute(input, ctx) {
54
88
  const { companyName, address, phone, fax, additionalFields } = input;
@@ -67,9 +101,17 @@ export default function keap(rl) {
67
101
  rl.registerAction("company.list", {
68
102
  description: "List companies",
69
103
  inputSchema: {
70
- limit: { type: "number", required: false, description: "Max results (default 50)" },
104
+ limit: {
105
+ type: "number",
106
+ required: false,
107
+ description: "Max results (default 50)",
108
+ },
71
109
  offset: { type: "number", required: false },
72
- optionalProperties: { type: "string", required: false, description: "Comma-separated optional fields to include" },
110
+ optionalProperties: {
111
+ type: "string",
112
+ required: false,
113
+ description: "Comma-separated optional fields to include",
114
+ },
73
115
  },
74
116
  async execute(input, ctx) {
75
117
  const { limit, offset, optionalProperties } = (input ?? {});
@@ -80,7 +122,7 @@ export default function keap(rl) {
80
122
  qs.offset = offset;
81
123
  if (optionalProperties)
82
124
  qs.optional_properties = optionalProperties;
83
- const data = await apiRequest(tok(ctx), "GET", "/companies", undefined, qs);
125
+ const data = (await apiRequest(tok(ctx), "GET", "/companies", undefined, qs));
84
126
  return data.companies;
85
127
  },
86
128
  });
@@ -88,19 +130,49 @@ export default function keap(rl) {
88
130
  rl.registerAction("contact.upsert", {
89
131
  description: "Create or update a contact (PUT). Duplicate matching is controlled by duplicate_option.",
90
132
  inputSchema: {
91
- duplicateOption: { type: "string", required: true, description: "How to handle duplicates: 'Email', 'EmailAndName', 'EmailAndNameAndCompany'" },
92
- emailAddresses: { type: "array", required: false, description: "Array of {email, field} objects (field: EMAIL1, EMAIL2, EMAIL3)" },
133
+ duplicateOption: {
134
+ type: "string",
135
+ required: true,
136
+ description: "How to handle duplicates: 'Email', 'EmailAndName', 'EmailAndNameAndCompany'",
137
+ },
138
+ emailAddresses: {
139
+ type: "array",
140
+ required: false,
141
+ description: "Array of {email, field} objects (field: EMAIL1, EMAIL2, EMAIL3)",
142
+ },
93
143
  givenName: { type: "string", required: false },
94
144
  familyName: { type: "string", required: false },
95
- phoneNumbers: { type: "array", required: false, description: "Array of {number, field, type} objects" },
96
- addresses: { type: "array", required: false, description: "Array of address objects (line1, line2, locality, region, zip_code, country_code, field)" },
97
- faxNumbers: { type: "array", required: false, description: "Array of {number, type} objects" },
98
- socialAccounts: { type: "array", required: false, description: "Array of {name, type} objects" },
99
- additionalFields: { type: "object", required: false, description: "Additional fields: contact_type, job_title, lead_source_id, middle_name, opt_in_reason, owner_id, preferred_locale, preferred_name, source_type, spouse_name, time_zone, website, anniversary, company (as {id: number}), origin (as {ip_address: string})" },
145
+ phoneNumbers: {
146
+ type: "array",
147
+ required: false,
148
+ description: "Array of {number, field, type} objects",
149
+ },
150
+ addresses: {
151
+ type: "array",
152
+ required: false,
153
+ description: "Array of address objects (line1, line2, locality, region, zip_code, country_code, field)",
154
+ },
155
+ faxNumbers: {
156
+ type: "array",
157
+ required: false,
158
+ description: "Array of {number, type} objects",
159
+ },
160
+ socialAccounts: {
161
+ type: "array",
162
+ required: false,
163
+ description: "Array of {name, type} objects",
164
+ },
165
+ additionalFields: {
166
+ type: "object",
167
+ required: false,
168
+ description: "Additional fields: contact_type, job_title, lead_source_id, middle_name, opt_in_reason, owner_id, preferred_locale, preferred_name, source_type, spouse_name, time_zone, website, anniversary, company (as {id: number}), origin (as {ip_address: string})",
169
+ },
100
170
  },
101
171
  async execute(input, ctx) {
102
- const { duplicateOption, emailAddresses, givenName, familyName, phoneNumbers, addresses, faxNumbers, socialAccounts, additionalFields } = input;
103
- const body = { duplicate_option: duplicateOption };
172
+ const { duplicateOption, emailAddresses, givenName, familyName, phoneNumbers, addresses, faxNumbers, socialAccounts, additionalFields, } = input;
173
+ const body = {
174
+ duplicate_option: duplicateOption,
175
+ };
104
176
  if (givenName)
105
177
  body.given_name = givenName;
106
178
  if (familyName)
@@ -124,7 +196,11 @@ export default function keap(rl) {
124
196
  description: "Get a contact by ID",
125
197
  inputSchema: {
126
198
  contactId: { type: "number", required: true },
127
- optionalProperties: { type: "string", required: false, description: "Comma-separated optional fields" },
199
+ optionalProperties: {
200
+ type: "string",
201
+ required: false,
202
+ description: "Comma-separated optional fields",
203
+ },
128
204
  },
129
205
  async execute(input, ctx) {
130
206
  const { contactId, optionalProperties } = input;
@@ -142,7 +218,11 @@ export default function keap(rl) {
142
218
  givenName: { type: "string", required: false },
143
219
  familyName: { type: "string", required: false },
144
220
  order: { type: "string", required: false },
145
- orderDirection: { type: "string", required: false, description: "ASCENDING or DESCENDING" },
221
+ orderDirection: {
222
+ type: "string",
223
+ required: false,
224
+ description: "ASCENDING or DESCENDING",
225
+ },
146
226
  since: { type: "string", required: false, description: "ISO date" },
147
227
  until: { type: "string", required: false, description: "ISO date" },
148
228
  },
@@ -165,7 +245,7 @@ export default function keap(rl) {
165
245
  qs.since = p.since;
166
246
  if (p.until)
167
247
  qs.until = p.until;
168
- const data = await apiRequest(tok(ctx), "GET", "/contacts", undefined, qs);
248
+ const data = (await apiRequest(tok(ctx), "GET", "/contacts", undefined, qs));
169
249
  return data.contacts;
170
250
  },
171
251
  });
@@ -181,15 +261,26 @@ export default function keap(rl) {
181
261
  rl.registerAction("contactNote.create", {
182
262
  description: "Create a note on a contact",
183
263
  inputSchema: {
184
- userId: { type: "number", required: true, description: "Keap user ID who is creating the note" },
264
+ userId: {
265
+ type: "number",
266
+ required: true,
267
+ description: "Keap user ID who is creating the note",
268
+ },
185
269
  contactId: { type: "number", required: true },
186
270
  body: { type: "string", required: false, description: "Note body text" },
187
271
  title: { type: "string", required: false },
188
- type: { type: "string", required: false, description: "Appointment, Call, Email, Fax, Letter, Other" },
272
+ type: {
273
+ type: "string",
274
+ required: false,
275
+ description: "Appointment, Call, Email, Fax, Letter, Other",
276
+ },
189
277
  },
190
278
  async execute(input, ctx) {
191
- const { userId, contactId, body: noteBody, title, type } = input;
192
- const b = { user_id: userId, contact_id: contactId };
279
+ const { userId, contactId, body: noteBody, title, type, } = input;
280
+ const b = {
281
+ user_id: userId,
282
+ contact_id: contactId,
283
+ };
193
284
  if (noteBody)
194
285
  b.body = noteBody;
195
286
  if (title)
@@ -202,14 +293,24 @@ export default function keap(rl) {
202
293
  rl.registerAction("contactNote.get", {
203
294
  description: "Get a note",
204
295
  inputSchema: { noteId: { type: "number", required: true } },
205
- async execute(input, ctx) { return apiRequest(tok(ctx), "GET", `/notes/${input.noteId}`); },
296
+ async execute(input, ctx) {
297
+ return apiRequest(tok(ctx), "GET", `/notes/${input.noteId}`);
298
+ },
206
299
  });
207
300
  rl.registerAction("contactNote.list", {
208
301
  description: "List notes (optionally filtered by contact_id, user_id)",
209
302
  inputSchema: {
210
303
  limit: { type: "number", required: false },
211
- contactId: { type: "number", required: false, description: "Filter by contact" },
212
- userId: { type: "number", required: false, description: "Filter by user" },
304
+ contactId: {
305
+ type: "number",
306
+ required: false,
307
+ description: "Filter by contact",
308
+ },
309
+ userId: {
310
+ type: "number",
311
+ required: false,
312
+ description: "Filter by user",
313
+ },
213
314
  },
214
315
  async execute(input, ctx) {
215
316
  const p = (input ?? {});
@@ -220,7 +321,7 @@ export default function keap(rl) {
220
321
  qs.contact_id = p.contactId;
221
322
  if (p.userId)
222
323
  qs.user_id = p.userId;
223
- const data = await apiRequest(tok(ctx), "GET", "/notes", undefined, qs);
324
+ const data = (await apiRequest(tok(ctx), "GET", "/notes", undefined, qs));
224
325
  return data.notes;
225
326
  },
226
327
  });
@@ -257,18 +358,28 @@ export default function keap(rl) {
257
358
  description: "Apply tags to a contact",
258
359
  inputSchema: {
259
360
  contactId: { type: "number", required: true },
260
- tagIds: { type: "array", required: true, description: "Array of tag IDs to apply" },
361
+ tagIds: {
362
+ type: "array",
363
+ required: true,
364
+ description: "Array of tag IDs to apply",
365
+ },
261
366
  },
262
367
  async execute(input, ctx) {
263
368
  const { contactId, tagIds } = input;
264
- return apiRequest(tok(ctx), "POST", `/contacts/${contactId}/tags`, { tagIds });
369
+ return apiRequest(tok(ctx), "POST", `/contacts/${contactId}/tags`, {
370
+ tagIds,
371
+ });
265
372
  },
266
373
  });
267
374
  rl.registerAction("contactTag.remove", {
268
375
  description: "Remove tags from a contact",
269
376
  inputSchema: {
270
377
  contactId: { type: "number", required: true },
271
- tagIds: { type: "string", required: true, description: "Comma-separated tag IDs to remove" },
378
+ tagIds: {
379
+ type: "string",
380
+ required: true,
381
+ description: "Comma-separated tag IDs to remove",
382
+ },
272
383
  },
273
384
  async execute(input, ctx) {
274
385
  const { contactId, tagIds } = input;
@@ -287,7 +398,7 @@ export default function keap(rl) {
287
398
  const qs = {};
288
399
  if (limit)
289
400
  qs.limit = limit;
290
- const data = await apiRequest(tok(ctx), "GET", `/contacts/${contactId}/tags`, undefined, qs);
401
+ const data = (await apiRequest(tok(ctx), "GET", `/contacts/${contactId}/tags`, undefined, qs));
291
402
  return data.tags;
292
403
  },
293
404
  });
@@ -298,13 +409,25 @@ export default function keap(rl) {
298
409
  contactId: { type: "number", required: true },
299
410
  orderDate: { type: "string", required: true, description: "ISO date" },
300
411
  orderTitle: { type: "string", required: true },
301
- orderType: { type: "string", required: true, description: "Online, Offline, etc." },
302
- orderItems: { type: "array", required: true, description: "Array of order item objects (product_id, quantity, price, etc.)" },
412
+ orderType: {
413
+ type: "string",
414
+ required: true,
415
+ description: "Online, Offline, etc.",
416
+ },
417
+ orderItems: {
418
+ type: "array",
419
+ required: true,
420
+ description: "Array of order item objects (product_id, quantity, price, etc.)",
421
+ },
303
422
  shippingAddress: { type: "object", required: false },
304
- additionalFields: { type: "object", required: false, description: "promo_codes (array), lead_affiliate_id, sale_affiliate_id, etc." },
423
+ additionalFields: {
424
+ type: "object",
425
+ required: false,
426
+ description: "promo_codes (array), lead_affiliate_id, sale_affiliate_id, etc.",
427
+ },
305
428
  },
306
429
  async execute(input, ctx) {
307
- const { contactId, orderDate, orderTitle, orderType, orderItems, shippingAddress, additionalFields } = input;
430
+ const { contactId, orderDate, orderTitle, orderType, orderItems, shippingAddress, additionalFields, } = input;
308
431
  const body = {
309
432
  contact_id: contactId,
310
433
  order_date: orderDate,
@@ -322,7 +445,9 @@ export default function keap(rl) {
322
445
  rl.registerAction("order.get", {
323
446
  description: "Get an order",
324
447
  inputSchema: { orderId: { type: "number", required: true } },
325
- async execute(input, ctx) { return apiRequest(tok(ctx), "GET", `/orders/${input.orderId}`); },
448
+ async execute(input, ctx) {
449
+ return apiRequest(tok(ctx), "GET", `/orders/${input.orderId}`);
450
+ },
326
451
  });
327
452
  rl.registerAction("order.list", {
328
453
  description: "List orders",
@@ -343,7 +468,7 @@ export default function keap(rl) {
343
468
  qs.since = p.since;
344
469
  if (p.until)
345
470
  qs.until = p.until;
346
- const data = await apiRequest(tok(ctx), "GET", "/orders", undefined, qs);
471
+ const data = (await apiRequest(tok(ctx), "GET", "/orders", undefined, qs));
347
472
  return data.orders;
348
473
  },
349
474
  });
@@ -360,7 +485,11 @@ export default function keap(rl) {
360
485
  description: "Create a product",
361
486
  inputSchema: {
362
487
  productName: { type: "string", required: true },
363
- additionalFields: { type: "object", required: false, description: "product_price, product_desc, sku, etc." },
488
+ additionalFields: {
489
+ type: "object",
490
+ required: false,
491
+ description: "product_price, product_desc, sku, etc.",
492
+ },
364
493
  },
365
494
  async execute(input, ctx) {
366
495
  const { productName, additionalFields } = input;
@@ -373,7 +502,9 @@ export default function keap(rl) {
373
502
  rl.registerAction("product.get", {
374
503
  description: "Get a product",
375
504
  inputSchema: { productId: { type: "number", required: true } },
376
- async execute(input, ctx) { return apiRequest(tok(ctx), "GET", `/products/${input.productId}`); },
505
+ async execute(input, ctx) {
506
+ return apiRequest(tok(ctx), "GET", `/products/${input.productId}`);
507
+ },
377
508
  });
378
509
  rl.registerAction("product.list", {
379
510
  description: "List products",
@@ -382,7 +513,7 @@ export default function keap(rl) {
382
513
  const qs = {};
383
514
  if (input?.limit)
384
515
  qs.limit = input.limit;
385
- const data = await apiRequest(tok(ctx), "GET", "/products", undefined, qs);
516
+ const data = (await apiRequest(tok(ctx), "GET", "/products", undefined, qs));
386
517
  return data.products;
387
518
  },
388
519
  });
@@ -400,11 +531,18 @@ export default function keap(rl) {
400
531
  inputSchema: {
401
532
  sentFromAddress: { type: "string", required: true },
402
533
  sentToAddress: { type: "string", required: true },
403
- additionalFields: { type: "object", required: false, description: "subject, sent_date, received_date, headers, html_content, plain_content, etc." },
534
+ additionalFields: {
535
+ type: "object",
536
+ required: false,
537
+ description: "subject, sent_date, received_date, headers, html_content, plain_content, etc.",
538
+ },
404
539
  },
405
540
  async execute(input, ctx) {
406
541
  const { sentFromAddress, sentToAddress, additionalFields } = input;
407
- const body = { sent_to_address: sentToAddress, sent_from_address: sentFromAddress };
542
+ const body = {
543
+ sent_to_address: sentToAddress,
544
+ sent_from_address: sentFromAddress,
545
+ };
408
546
  if (additionalFields)
409
547
  Object.assign(body, additionalFields);
410
548
  return apiRequest(tok(ctx), "POST", "/emails", body);
@@ -437,23 +575,39 @@ export default function keap(rl) {
437
575
  qs.email = p.email;
438
576
  if (p.sinceDate)
439
577
  qs.since_sent_date = p.sinceDate;
440
- const data = await apiRequest(tok(ctx), "GET", "/emails", undefined, qs);
578
+ const data = (await apiRequest(tok(ctx), "GET", "/emails", undefined, qs));
441
579
  return data.emails;
442
580
  },
443
581
  });
444
582
  rl.registerAction("email.send", {
445
583
  description: "Queue an email to be sent",
446
584
  inputSchema: {
447
- userId: { type: "number", required: true, description: "Keap user ID sending the email" },
448
- contactIds: { type: "array", required: true, description: "Array of contact IDs to send to" },
585
+ userId: {
586
+ type: "number",
587
+ required: true,
588
+ description: "Keap user ID sending the email",
589
+ },
590
+ contactIds: {
591
+ type: "array",
592
+ required: true,
593
+ description: "Array of contact IDs to send to",
594
+ },
449
595
  subject: { type: "string", required: true },
450
596
  htmlContent: { type: "string", required: false },
451
597
  plainContent: { type: "string", required: false },
452
- attachments: { type: "array", required: false, description: "Array of {file_data, file_name} objects" },
598
+ attachments: {
599
+ type: "array",
600
+ required: false,
601
+ description: "Array of {file_data, file_name} objects",
602
+ },
453
603
  },
454
604
  async execute(input, ctx) {
455
- const { userId, contactIds, subject, htmlContent, plainContent, attachments } = input;
456
- const body = { user_id: userId, contacts: contactIds, subject };
605
+ const { userId, contactIds, subject, htmlContent, plainContent, attachments, } = input;
606
+ const body = {
607
+ user_id: userId,
608
+ contacts: contactIds,
609
+ subject,
610
+ };
457
611
  if (htmlContent)
458
612
  body.html_content = htmlContent;
459
613
  if (plainContent)
@@ -477,9 +631,21 @@ export default function keap(rl) {
477
631
  description: "List files",
478
632
  inputSchema: {
479
633
  limit: { type: "number", required: false },
480
- permission: { type: "string", required: false, description: "USER, COMPANY" },
481
- type: { type: "string", required: false, description: "Application, Image, Fax, Attachment, Ticket, Contact, Digital Product, Import, Hidden, Webform, Styled Cart, Logo, Resampled, Template Thumbnail, Funnel" },
482
- viewable: { type: "string", required: false, description: "PUBLIC, PRIVATE, BOTH" },
634
+ permission: {
635
+ type: "string",
636
+ required: false,
637
+ description: "USER, COMPANY",
638
+ },
639
+ type: {
640
+ type: "string",
641
+ required: false,
642
+ description: "Application, Image, Fax, Attachment, Ticket, Contact, Digital Product, Import, Hidden, Webform, Styled Cart, Logo, Resampled, Template Thumbnail, Funnel",
643
+ },
644
+ viewable: {
645
+ type: "string",
646
+ required: false,
647
+ description: "PUBLIC, PRIVATE, BOTH",
648
+ },
483
649
  contactId: { type: "number", required: false },
484
650
  },
485
651
  async execute(input, ctx) {
@@ -495,7 +661,7 @@ export default function keap(rl) {
495
661
  qs.viewable = p.viewable.toUpperCase();
496
662
  if (p.contactId)
497
663
  qs.contact_id = p.contactId;
498
- const data = await apiRequest(tok(ctx), "GET", "/files", undefined, qs);
664
+ const data = (await apiRequest(tok(ctx), "GET", "/files", undefined, qs));
499
665
  return data.files;
500
666
  },
501
667
  });