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
@@ -8,9 +8,16 @@ async function apiRequest(baseUrl, token, method, endpoint, body, qs) {
8
8
  }
9
9
  const opts = {
10
10
  method,
11
- headers: { Authorization: `Token ${token}`, Accept: "application/json", "Content-Type": "application/json" },
11
+ headers: {
12
+ Authorization: `Token ${token}`,
13
+ Accept: "application/json",
14
+ "Content-Type": "application/json",
15
+ },
12
16
  };
13
- 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")
14
21
  opts.body = JSON.stringify(body);
15
22
  const res = await fetch(url.toString(), opts);
16
23
  if (!res.ok)
@@ -51,8 +58,18 @@ export default function kobotoolbox(rl) {
51
58
  rl.setName("kobotoolbox");
52
59
  rl.setVersion("0.1.0");
53
60
  rl.setConnectionSchema({
54
- url: { type: "string", required: true, description: "KoBoToolbox server URL (e.g. https://kf.kobotoolbox.org)", env: "KOBOTOOLBOX_URL" },
55
- token: { type: "string", required: true, description: "API token", env: "KOBOTOOLBOX_TOKEN" },
61
+ url: {
62
+ type: "string",
63
+ required: true,
64
+ description: "KoBoToolbox server URL (e.g. https://kf.kobotoolbox.org)",
65
+ env: "KOBOTOOLBOX_URL",
66
+ },
67
+ token: {
68
+ type: "string",
69
+ required: true,
70
+ description: "API token",
71
+ env: "KOBOTOOLBOX_TOKEN",
72
+ },
56
73
  });
57
74
  const conn = (ctx) => ({
58
75
  baseUrl: ctx.connection.config.url.replace(/\/$/, ""),
@@ -61,7 +78,9 @@ export default function kobotoolbox(rl) {
61
78
  // ── Form ────────────────────────────────────────────
62
79
  rl.registerAction("form.get", {
63
80
  description: "Get a form (asset) by ID",
64
- inputSchema: { formId: { type: "string", required: true, description: "Form/asset UID" } },
81
+ inputSchema: {
82
+ formId: { type: "string", required: true, description: "Form/asset UID" },
83
+ },
65
84
  async execute(input, ctx) {
66
85
  const { baseUrl, token } = conn(ctx);
67
86
  return apiRequest(baseUrl, token, "GET", `/api/v2/assets/${input.formId}`);
@@ -71,9 +90,21 @@ export default function kobotoolbox(rl) {
71
90
  description: "List all forms/assets",
72
91
  inputSchema: {
73
92
  limit: { type: "number", required: false },
74
- filter: { type: "string", required: false, description: "Search query (q parameter)" },
75
- ordering: { type: "string", required: false, description: "Field to sort by" },
76
- descending: { type: "boolean", required: false, description: "Sort descending" },
93
+ filter: {
94
+ type: "string",
95
+ required: false,
96
+ description: "Search query (q parameter)",
97
+ },
98
+ ordering: {
99
+ type: "string",
100
+ required: false,
101
+ description: "Field to sort by",
102
+ },
103
+ descending: {
104
+ type: "boolean",
105
+ required: false,
106
+ description: "Sort descending",
107
+ },
77
108
  },
78
109
  async execute(input, ctx) {
79
110
  const { baseUrl, token } = conn(ctx);
@@ -104,7 +135,11 @@ export default function kobotoolbox(rl) {
104
135
  inputSchema: {
105
136
  formId: { type: "string", required: true },
106
137
  submissionId: { type: "string", required: true },
107
- fields: { type: "array", required: false, description: "Fields to include" },
138
+ fields: {
139
+ type: "array",
140
+ required: false,
141
+ description: "Fields to include",
142
+ },
108
143
  },
109
144
  async execute(input, ctx) {
110
145
  const { formId, submissionId, fields } = input;
@@ -120,9 +155,17 @@ export default function kobotoolbox(rl) {
120
155
  inputSchema: {
121
156
  formId: { type: "string", required: true },
122
157
  limit: { type: "number", required: false },
123
- query: { type: "string", required: false, description: "JSON filter query" },
158
+ query: {
159
+ type: "string",
160
+ required: false,
161
+ description: "JSON filter query",
162
+ },
124
163
  sort: { type: "string", required: false, description: "Sort JSON" },
125
- fields: { type: "array", required: false, description: "Fields to include" },
164
+ fields: {
165
+ type: "array",
166
+ required: false,
167
+ description: "Fields to include",
168
+ },
126
169
  },
127
170
  async execute(input, ctx) {
128
171
  const p = input;
@@ -136,7 +179,7 @@ export default function kobotoolbox(rl) {
136
179
  qs.fields = JSON.stringify(p.fields);
137
180
  if (p.limit) {
138
181
  qs.limit = p.limit;
139
- const data = await apiRequest(baseUrl, token, "GET", `/api/v2/assets/${p.formId}/data/`, undefined, qs);
182
+ const data = (await apiRequest(baseUrl, token, "GET", `/api/v2/assets/${p.formId}/data/`, undefined, qs));
140
183
  return data.results ?? data;
141
184
  }
142
185
  return paginate(baseUrl, token, `/api/v2/assets/${p.formId}/data/`, qs);
@@ -144,7 +187,10 @@ export default function kobotoolbox(rl) {
144
187
  });
145
188
  rl.registerAction("submission.delete", {
146
189
  description: "Delete a submission",
147
- inputSchema: { formId: { type: "string", required: true }, submissionId: { type: "string", required: true } },
190
+ inputSchema: {
191
+ formId: { type: "string", required: true },
192
+ submissionId: { type: "string", required: true },
193
+ },
148
194
  async execute(input, ctx) {
149
195
  const { formId, submissionId } = input;
150
196
  const { baseUrl, token } = conn(ctx);
@@ -154,7 +200,10 @@ export default function kobotoolbox(rl) {
154
200
  });
155
201
  rl.registerAction("submission.getValidation", {
156
202
  description: "Get the validation status of a submission",
157
- inputSchema: { formId: { type: "string", required: true }, submissionId: { type: "string", required: true } },
203
+ inputSchema: {
204
+ formId: { type: "string", required: true },
205
+ submissionId: { type: "string", required: true },
206
+ },
158
207
  async execute(input, ctx) {
159
208
  const { formId, submissionId } = input;
160
209
  const { baseUrl, token } = conn(ctx);
@@ -166,7 +215,11 @@ export default function kobotoolbox(rl) {
166
215
  inputSchema: {
167
216
  formId: { type: "string", required: true },
168
217
  submissionId: { type: "string", required: true },
169
- validationStatus: { type: "string", required: true, description: "validation_status_not_approved, validation_status_approved, validation_status_on_hold" },
218
+ validationStatus: {
219
+ type: "string",
220
+ required: true,
221
+ description: "validation_status_not_approved, validation_status_approved, validation_status_on_hold",
222
+ },
170
223
  },
171
224
  async execute(input, ctx) {
172
225
  const { formId, submissionId, validationStatus } = input;
@@ -177,7 +230,10 @@ export default function kobotoolbox(rl) {
177
230
  // ── Hook ────────────────────────────────────────────
178
231
  rl.registerAction("hook.get", {
179
232
  description: "Get a hook by ID",
180
- inputSchema: { formId: { type: "string", required: true }, hookId: { type: "string", required: true } },
233
+ inputSchema: {
234
+ formId: { type: "string", required: true },
235
+ hookId: { type: "string", required: true },
236
+ },
181
237
  async execute(input, ctx) {
182
238
  const { formId, hookId } = input;
183
239
  const { baseUrl, token } = conn(ctx);
@@ -186,7 +242,10 @@ export default function kobotoolbox(rl) {
186
242
  });
187
243
  rl.registerAction("hook.list", {
188
244
  description: "List hooks for a form",
189
- inputSchema: { formId: { type: "string", required: true }, limit: { type: "number", required: false } },
245
+ inputSchema: {
246
+ formId: { type: "string", required: true },
247
+ limit: { type: "number", required: false },
248
+ },
190
249
  async execute(input, ctx) {
191
250
  const { formId, limit } = input;
192
251
  const { baseUrl, token } = conn(ctx);
@@ -197,7 +256,10 @@ export default function kobotoolbox(rl) {
197
256
  });
198
257
  rl.registerAction("hook.retryAll", {
199
258
  description: "Retry all failed attempts for a hook",
200
- inputSchema: { formId: { type: "string", required: true }, hookId: { type: "string", required: true } },
259
+ inputSchema: {
260
+ formId: { type: "string", required: true },
261
+ hookId: { type: "string", required: true },
262
+ },
201
263
  async execute(input, ctx) {
202
264
  const { formId, hookId } = input;
203
265
  const { baseUrl, token } = conn(ctx);
@@ -209,9 +271,21 @@ export default function kobotoolbox(rl) {
209
271
  inputSchema: {
210
272
  formId: { type: "string", required: true },
211
273
  hookId: { type: "string", required: true },
212
- startDate: { type: "string", required: false, description: "Start date filter" },
213
- endDate: { type: "string", required: false, description: "End date filter" },
214
- status: { type: "number", required: false, description: "HTTP status code filter" },
274
+ startDate: {
275
+ type: "string",
276
+ required: false,
277
+ description: "Start date filter",
278
+ },
279
+ endDate: {
280
+ type: "string",
281
+ required: false,
282
+ description: "End date filter",
283
+ },
284
+ status: {
285
+ type: "number",
286
+ required: false,
287
+ description: "HTTP status code filter",
288
+ },
215
289
  },
216
290
  async execute(input, ctx) {
217
291
  const { formId, hookId, startDate, endDate, status } = input;
@@ -228,7 +302,11 @@ export default function kobotoolbox(rl) {
228
302
  });
229
303
  rl.registerAction("hook.retryOne", {
230
304
  description: "Retry a single failed hook log entry",
231
- inputSchema: { formId: { type: "string", required: true }, hookId: { type: "string", required: true }, logId: { type: "string", required: true } },
305
+ inputSchema: {
306
+ formId: { type: "string", required: true },
307
+ hookId: { type: "string", required: true },
308
+ logId: { type: "string", required: true },
309
+ },
232
310
  async execute(input, ctx) {
233
311
  const { formId, hookId, logId } = input;
234
312
  const { baseUrl, token } = conn(ctx);
@@ -246,7 +324,10 @@ export default function kobotoolbox(rl) {
246
324
  });
247
325
  rl.registerAction("file.get", {
248
326
  description: "Get a file's metadata",
249
- inputSchema: { formId: { type: "string", required: true }, fileId: { type: "string", required: true } },
327
+ inputSchema: {
328
+ formId: { type: "string", required: true },
329
+ fileId: { type: "string", required: true },
330
+ },
250
331
  async execute(input, ctx) {
251
332
  const { formId, fileId } = input;
252
333
  const { baseUrl, token } = conn(ctx);
@@ -255,7 +336,10 @@ export default function kobotoolbox(rl) {
255
336
  });
256
337
  rl.registerAction("file.delete", {
257
338
  description: "Delete a file",
258
- inputSchema: { formId: { type: "string", required: true }, fileId: { type: "string", required: true } },
339
+ inputSchema: {
340
+ formId: { type: "string", required: true },
341
+ fileId: { type: "string", required: true },
342
+ },
259
343
  async execute(input, ctx) {
260
344
  const { formId, fileId } = input;
261
345
  const { baseUrl, token } = conn(ctx);
@@ -266,7 +350,11 @@ export default function kobotoolbox(rl) {
266
350
  description: "Create a file from a URL (redirect-based media)",
267
351
  inputSchema: {
268
352
  formId: { type: "string", required: true },
269
- redirectUrl: { type: "string", required: true, description: "URL of the file" },
353
+ redirectUrl: {
354
+ type: "string",
355
+ required: true,
356
+ description: "URL of the file",
357
+ },
270
358
  },
271
359
  async execute(input, ctx) {
272
360
  const { formId, redirectUrl } = input;
@@ -9,9 +9,15 @@ async function apiRequest(apiKey, method, endpoint, body, qs) {
9
9
  }
10
10
  const opts = {
11
11
  method,
12
- headers: { Authorization: `Basic ${btoa(`:${apiKey}`)}`, "Content-Type": "application/json" },
12
+ headers: {
13
+ Authorization: `Basic ${btoa(`:${apiKey}`)}`,
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)
@@ -36,7 +42,12 @@ export default function lemlist(rl) {
36
42
  rl.setName("lemlist");
37
43
  rl.setVersion("0.1.0");
38
44
  rl.setConnectionSchema({
39
- apiKey: { type: "string", required: true, description: "Lemlist API key", env: "LEMLIST_API_KEY" },
45
+ apiKey: {
46
+ type: "string",
47
+ required: true,
48
+ description: "Lemlist API key",
49
+ env: "LEMLIST_API_KEY",
50
+ },
40
51
  });
41
52
  const key = (ctx) => ctx.connection.config.apiKey;
42
53
  // ── Activity ────────────────────────────────────────
@@ -44,9 +55,21 @@ export default function lemlist(rl) {
44
55
  description: "List activities",
45
56
  inputSchema: {
46
57
  limit: { type: "number", required: false, description: "Max results" },
47
- campaignId: { type: "string", required: false, description: "Filter by campaign ID" },
48
- type: { type: "string", required: false, description: "Filter by activity type" },
49
- isFirst: { type: "boolean", required: false, description: "Filter first activities only" },
58
+ campaignId: {
59
+ type: "string",
60
+ required: false,
61
+ description: "Filter by campaign ID",
62
+ },
63
+ type: {
64
+ type: "string",
65
+ required: false,
66
+ description: "Filter by activity type",
67
+ },
68
+ isFirst: {
69
+ type: "boolean",
70
+ required: false,
71
+ description: "Filter first activities only",
72
+ },
50
73
  },
51
74
  async execute(input, ctx) {
52
75
  const p = (input ?? {});
@@ -73,7 +96,9 @@ export default function lemlist(rl) {
73
96
  async execute(input, ctx) {
74
97
  const p = (input ?? {});
75
98
  if (p.limit)
76
- return apiRequest(key(ctx), "GET", "/campaigns", undefined, { limit: p.limit });
99
+ return apiRequest(key(ctx), "GET", "/campaigns", undefined, {
100
+ limit: p.limit,
101
+ });
77
102
  return paginate(key(ctx), "GET", "/campaigns");
78
103
  },
79
104
  });
@@ -81,9 +106,21 @@ export default function lemlist(rl) {
81
106
  description: "Get campaign statistics",
82
107
  inputSchema: {
83
108
  campaignId: { type: "string", required: true },
84
- startDate: { type: "string", required: true, description: "Start date (YYYY-MM-DD)" },
85
- endDate: { type: "string", required: true, description: "End date (YYYY-MM-DD)" },
86
- timezone: { type: "string", required: true, description: "Timezone (e.g. America/New_York)" },
109
+ startDate: {
110
+ type: "string",
111
+ required: true,
112
+ description: "Start date (YYYY-MM-DD)",
113
+ },
114
+ endDate: {
115
+ type: "string",
116
+ required: true,
117
+ description: "End date (YYYY-MM-DD)",
118
+ },
119
+ timezone: {
120
+ type: "string",
121
+ required: true,
122
+ description: "Timezone (e.g. America/New_York)",
123
+ },
87
124
  },
88
125
  async execute(input, ctx) {
89
126
  const { campaignId, startDate, endDate, timezone } = input;
@@ -96,14 +133,22 @@ export default function lemlist(rl) {
96
133
  inputSchema: {
97
134
  campaignId: { type: "string", required: true },
98
135
  email: { type: "string", required: true },
99
- deduplicate: { type: "boolean", required: false, description: "Deduplicate by email" },
136
+ deduplicate: {
137
+ type: "boolean",
138
+ required: false,
139
+ description: "Deduplicate by email",
140
+ },
100
141
  firstName: { type: "string", required: false },
101
142
  lastName: { type: "string", required: false },
102
143
  companyName: { type: "string", required: false },
103
- additionalFields: { type: "object", required: false, description: "Any extra fields" },
144
+ additionalFields: {
145
+ type: "object",
146
+ required: false,
147
+ description: "Any extra fields",
148
+ },
104
149
  },
105
150
  async execute(input, ctx) {
106
- const { campaignId, email, deduplicate, firstName, lastName, companyName, additionalFields } = input;
151
+ const { campaignId, email, deduplicate, firstName, lastName, companyName, additionalFields, } = input;
107
152
  const body = {};
108
153
  if (firstName)
109
154
  body.firstName = firstName;
@@ -151,11 +196,15 @@ export default function lemlist(rl) {
151
196
  // ── Team ────────────────────────────────────────────
152
197
  rl.registerAction("team.get", {
153
198
  description: "Get team information",
154
- async execute(_input, ctx) { return apiRequest(key(ctx), "GET", "/team"); },
199
+ async execute(_input, ctx) {
200
+ return apiRequest(key(ctx), "GET", "/team");
201
+ },
155
202
  });
156
203
  rl.registerAction("team.getCredits", {
157
204
  description: "Get team credits",
158
- async execute(_input, ctx) { return apiRequest(key(ctx), "GET", "/team/credits"); },
205
+ async execute(_input, ctx) {
206
+ return apiRequest(key(ctx), "GET", "/team/credits");
207
+ },
159
208
  });
160
209
  // ── Unsubscribe ─────────────────────────────────────
161
210
  rl.registerAction("unsubscribe.add", {
@@ -178,7 +227,9 @@ export default function lemlist(rl) {
178
227
  async execute(input, ctx) {
179
228
  const p = (input ?? {});
180
229
  if (p.limit)
181
- return apiRequest(key(ctx), "GET", "/unsubscribes", undefined, { limit: p.limit });
230
+ return apiRequest(key(ctx), "GET", "/unsubscribes", undefined, {
231
+ limit: p.limit,
232
+ });
182
233
  return paginate(key(ctx), "GET", "/unsubscribes");
183
234
  },
184
235
  });
@@ -201,7 +252,12 @@ export default function lemlist(rl) {
201
252
  },
202
253
  async execute(input, ctx) {
203
254
  const { leadId, findEmail, verifyEmail, linkedinEnrichment, findPhone } = input;
204
- return apiRequest(key(ctx), "POST", `/leads/${leadId}/enrich/`, {}, { findEmail, verifyEmail, linkedinEnrichment, findPhone });
255
+ return apiRequest(key(ctx), "POST", `/leads/${leadId}/enrich/`, {}, {
256
+ findEmail,
257
+ verifyEmail,
258
+ linkedinEnrichment,
259
+ findPhone,
260
+ });
205
261
  },
206
262
  });
207
263
  rl.registerAction("enrich.person", {
@@ -220,7 +276,12 @@ export default function lemlist(rl) {
220
276
  },
221
277
  async execute(input, ctx) {
222
278
  const { findEmail, verifyEmail, linkedinEnrichment, findPhone, ...rest } = input;
223
- const qs = { findEmail, verifyEmail, linkedinEnrichment, findPhone };
279
+ const qs = {
280
+ findEmail,
281
+ verifyEmail,
282
+ linkedinEnrichment,
283
+ findPhone,
284
+ };
224
285
  for (const [k, v] of Object.entries(rest)) {
225
286
  if (v !== undefined && v !== null)
226
287
  qs[k] = v;
@@ -18,22 +18,49 @@ async function gql(apiKey, query, variables) {
18
18
  export default function linear(rl) {
19
19
  rl.setName("linear");
20
20
  rl.setVersion("0.1.0");
21
- rl.setConnectionSchema({ apiKey: { type: "string", required: true, description: "Linear API key", env: "LINEAR_API_KEY" } });
21
+ rl.setConnectionSchema({
22
+ apiKey: {
23
+ type: "string",
24
+ required: true,
25
+ description: "Linear API key",
26
+ env: "LINEAR_API_KEY",
27
+ },
28
+ });
22
29
  const key = (ctx) => ctx.connection.config.apiKey;
23
30
  rl.registerAction("issue.create", {
24
31
  description: "Create an issue",
25
32
  inputSchema: {
26
33
  teamId: { type: "string", required: true, description: "Team ID" },
27
34
  title: { type: "string", required: true, description: "Issue title" },
28
- description: { type: "string", required: false, description: "Issue description (markdown)" },
29
- assigneeId: { type: "string", required: false, description: "Assignee user ID" },
30
- priority: { type: "number", required: false, description: "Priority (0=none, 1=urgent, 2=high, 3=medium, 4=low)" },
31
- stateId: { type: "string", required: false, description: "Workflow state ID" },
35
+ description: {
36
+ type: "string",
37
+ required: false,
38
+ description: "Issue description (markdown)",
39
+ },
40
+ assigneeId: {
41
+ type: "string",
42
+ required: false,
43
+ description: "Assignee user ID",
44
+ },
45
+ priority: {
46
+ type: "number",
47
+ required: false,
48
+ description: "Priority (0=none, 1=urgent, 2=high, 3=medium, 4=low)",
49
+ },
50
+ stateId: {
51
+ type: "string",
52
+ required: false,
53
+ description: "Workflow state ID",
54
+ },
32
55
  labelIds: { type: "array", required: false, description: "Label IDs" },
33
- parentId: { type: "string", required: false, description: "Parent issue ID (for sub-issues)" },
56
+ parentId: {
57
+ type: "string",
58
+ required: false,
59
+ description: "Parent issue ID (for sub-issues)",
60
+ },
34
61
  },
35
62
  async execute(input, ctx) {
36
- const { teamId, title, description: desc, assigneeId, priority, stateId, labelIds, parentId } = input;
63
+ const { teamId, title, description: desc, assigneeId, priority, stateId, labelIds, parentId, } = input;
37
64
  const vars = { teamId, title };
38
65
  if (desc)
39
66
  vars.description = desc;
@@ -53,7 +80,9 @@ export default function linear(rl) {
53
80
  });
54
81
  rl.registerAction("issue.get", {
55
82
  description: "Get an issue by ID",
56
- inputSchema: { issueId: { type: "string", required: true, description: "Issue ID" } },
83
+ inputSchema: {
84
+ issueId: { type: "string", required: true, description: "Issue ID" },
85
+ },
57
86
  async execute(input, ctx) {
58
87
  const data = await gql(key(ctx), `query($id: String!) { issue(id: $id) { id identifier title description url priority state { id name } assignee { id name } labels { nodes { id name } } createdAt updatedAt } }`, { id: input.issueId });
59
88
  return data.issue;
@@ -62,12 +91,24 @@ export default function linear(rl) {
62
91
  rl.registerAction("issue.list", {
63
92
  description: "List issues",
64
93
  inputSchema: {
65
- limit: { type: "number", required: false, description: "Max results (default: 50)" },
66
- teamId: { type: "string", required: false, description: "Filter by team" },
67
- assigneeId: { type: "string", required: false, description: "Filter by assignee" },
94
+ limit: {
95
+ type: "number",
96
+ required: false,
97
+ description: "Max results (default: 50)",
98
+ },
99
+ teamId: {
100
+ type: "string",
101
+ required: false,
102
+ description: "Filter by team",
103
+ },
104
+ assigneeId: {
105
+ type: "string",
106
+ required: false,
107
+ description: "Filter by assignee",
108
+ },
68
109
  },
69
110
  async execute(input, ctx) {
70
- const { limit = 50, teamId, assigneeId } = (input ?? {});
111
+ const { limit = 50, teamId, assigneeId, } = (input ?? {});
71
112
  let filter = "";
72
113
  const filterParts = [];
73
114
  if (teamId)
@@ -85,8 +126,16 @@ export default function linear(rl) {
85
126
  inputSchema: {
86
127
  issueId: { type: "string", required: true, description: "Issue ID" },
87
128
  title: { type: "string", required: false, description: "New title" },
88
- description: { type: "string", required: false, description: "New description" },
89
- assigneeId: { type: "string", required: false, description: "Assignee ID" },
129
+ description: {
130
+ type: "string",
131
+ required: false,
132
+ description: "New description",
133
+ },
134
+ assigneeId: {
135
+ type: "string",
136
+ required: false,
137
+ description: "Assignee ID",
138
+ },
90
139
  stateId: { type: "string", required: false, description: "State ID" },
91
140
  priority: { type: "number", required: false, description: "Priority" },
92
141
  labelIds: { type: "array", required: false, description: "Label IDs" },
@@ -99,7 +148,9 @@ export default function linear(rl) {
99
148
  });
100
149
  rl.registerAction("issue.delete", {
101
150
  description: "Delete an issue",
102
- inputSchema: { issueId: { type: "string", required: true, description: "Issue ID" } },
151
+ inputSchema: {
152
+ issueId: { type: "string", required: true, description: "Issue ID" },
153
+ },
103
154
  async execute(input, ctx) {
104
155
  const data = await gql(key(ctx), `mutation($id: String!) { issueDelete(id: $id) { success } }`, { id: input.issueId });
105
156
  return data.issueDelete;
@@ -109,7 +160,11 @@ export default function linear(rl) {
109
160
  description: "Add a comment to an issue",
110
161
  inputSchema: {
111
162
  issueId: { type: "string", required: true, description: "Issue ID" },
112
- body: { type: "string", required: true, description: "Comment body (markdown)" },
163
+ body: {
164
+ type: "string",
165
+ required: true,
166
+ description: "Comment body (markdown)",
167
+ },
113
168
  },
114
169
  async execute(input, ctx) {
115
170
  const { issueId, body: commentBody } = input;
@@ -120,9 +175,21 @@ export default function linear(rl) {
120
175
  rl.registerAction("issue.addLink", {
121
176
  description: "Add a link/relation between issues",
122
177
  inputSchema: {
123
- issueId: { type: "string", required: true, description: "Source issue ID" },
124
- relatedIssueId: { type: "string", required: true, description: "Related issue ID" },
125
- type: { type: "string", required: true, description: "Relation type: relates, blocks, duplicate" },
178
+ issueId: {
179
+ type: "string",
180
+ required: true,
181
+ description: "Source issue ID",
182
+ },
183
+ relatedIssueId: {
184
+ type: "string",
185
+ required: true,
186
+ description: "Related issue ID",
187
+ },
188
+ type: {
189
+ type: "string",
190
+ required: true,
191
+ description: "Relation type: relates, blocks, duplicate",
192
+ },
126
193
  },
127
194
  async execute(input, ctx) {
128
195
  const { issueId, relatedIssueId, type } = input;
@@ -1,18 +1,45 @@
1
1
  export default function lingvanex(rl) {
2
2
  rl.setName("lingvanex");
3
3
  rl.setVersion("0.1.0");
4
- rl.setConnectionSchema({ apiKey: { type: "string", required: true, description: "Lingvanex API key", env: "LINGVANEX_API_KEY" } });
4
+ rl.setConnectionSchema({
5
+ apiKey: {
6
+ type: "string",
7
+ required: true,
8
+ description: "Lingvanex API key",
9
+ env: "LINGVANEX_API_KEY",
10
+ },
11
+ });
5
12
  rl.registerAction("translate", {
6
13
  description: "Translate text",
7
14
  inputSchema: {
8
- text: { type: "string", required: true, description: "Text to translate" },
9
- to: { type: "string", required: true, description: "Target language code (e.g. en_GB, fr_FR)" },
10
- from: { type: "string", required: false, description: "Source language code (auto-detect if omitted)" },
11
- platform: { type: "string", required: false, description: "api (default)" },
12
- translateMode: { type: "string", required: false, description: "'html' to translate preserving HTML structure, or omit for plain text" },
15
+ text: {
16
+ type: "string",
17
+ required: true,
18
+ description: "Text to translate",
19
+ },
20
+ to: {
21
+ type: "string",
22
+ required: true,
23
+ description: "Target language code (e.g. en_GB, fr_FR)",
24
+ },
25
+ from: {
26
+ type: "string",
27
+ required: false,
28
+ description: "Source language code (auto-detect if omitted)",
29
+ },
30
+ platform: {
31
+ type: "string",
32
+ required: false,
33
+ description: "api (default)",
34
+ },
35
+ translateMode: {
36
+ type: "string",
37
+ required: false,
38
+ description: "'html' to translate preserving HTML structure, or omit for plain text",
39
+ },
13
40
  },
14
41
  async execute(input, ctx) {
15
- const { text, to, from: src, platform = "api", translateMode } = input;
42
+ const { text, to, from: src, platform = "api", translateMode, } = input;
16
43
  const body = { data: text, to, platform };
17
44
  if (src)
18
45
  body.from = src;
@@ -20,7 +47,10 @@ export default function lingvanex(rl) {
20
47
  body.translateMode = translateMode;
21
48
  const res = await fetch("https://api-b2b.backenster.com/b1/api/v3/translate", {
22
49
  method: "POST",
23
- headers: { Authorization: `Bearer ${ctx.connection.config.apiKey}`, "Content-Type": "application/json" },
50
+ headers: {
51
+ Authorization: `Bearer ${ctx.connection.config.apiKey}`,
52
+ "Content-Type": "application/json",
53
+ },
24
54
  body: JSON.stringify(body),
25
55
  });
26
56
  if (!res.ok)