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.
- package/README.md +1 -1
- package/dist/plugins/actionNetwork/src/index.js +118 -25
- package/dist/plugins/activeCampaign/src/index.js +184 -38
- package/dist/plugins/adalo/src/index.js +40 -8
- package/dist/plugins/affinity/src/index.js +100 -20
- package/dist/plugins/agileCrm/src/index.js +115 -27
- package/dist/plugins/airtable/src/index.js +94 -19
- package/dist/plugins/airtop/src/index.js +266 -62
- package/dist/plugins/apiTemplateIo/src/index.js +25 -5
- package/dist/plugins/asana/src/index.js +195 -41
- package/dist/plugins/autopilot/src/index.js +39 -8
- package/dist/plugins/bambooHr/src/index.js +109 -22
- package/dist/plugins/bannerbear/src/index.js +36 -8
- package/dist/plugins/baserow/src/index.js +35 -7
- package/dist/plugins/beeminder/src/index.js +198 -40
- package/dist/plugins/bitly/src/index.js +46 -10
- package/dist/plugins/bitwarden/src/index.js +167 -36
- package/dist/plugins/box/src/index.js +172 -37
- package/dist/plugins/brandfetch/src/index.js +5 -1
- package/dist/plugins/brevo/src/index.js +136 -29
- package/dist/plugins/bubble/src/index.js +76 -17
- package/dist/plugins/chargebee/src/index.js +35 -7
- package/dist/plugins/circleci/src/index.js +50 -10
- package/dist/plugins/ciscoWebex/src/index.js +131 -27
- package/dist/plugins/clearbit/src/index.js +76 -17
- package/dist/plugins/clickup/src/index.js +500 -107
- package/dist/plugins/clockify/src/index.js +229 -47
- package/dist/plugins/cloudflare/src/index.js +28 -6
- package/dist/plugins/cockpit/src/index.js +54 -12
- package/dist/plugins/coda/src/index.js +81 -19
- package/dist/plugins/coingecko/src/index.js +157 -33
- package/dist/plugins/contentful/src/index.js +85 -17
- package/dist/plugins/convertkit/src/index.js +74 -18
- package/dist/plugins/copper/src/index.js +59 -11
- package/dist/plugins/cortex/src/index.js +55 -13
- package/dist/plugins/currents/src/index.js +310 -71
- package/dist/plugins/customerIo/src/index.js +112 -23
- package/dist/plugins/databricks/src/index.js +549 -115
- package/dist/plugins/deepl/src/index.js +26 -6
- package/dist/plugins/demio/src/index.js +56 -11
- package/dist/plugins/dhl/src/index.js +16 -3
- package/dist/plugins/discord/src/index.js +141 -31
- package/dist/plugins/discourse/src/index.js +136 -31
- package/dist/plugins/disqus/src/index.js +96 -20
- package/dist/plugins/docker/src/index.js +20 -4
- package/dist/plugins/drift/src/index.js +19 -5
- package/dist/plugins/dropbox/src/index.js +139 -30
- package/dist/plugins/dropcontact/src/index.js +21 -4
- package/dist/plugins/egoi/src/index.js +61 -15
- package/dist/plugins/elasticsearch/src/index.js +59 -13
- package/dist/plugins/emelia/src/index.js +95 -19
- package/dist/plugins/erpnext/src/index.js +74 -15
- package/dist/plugins/facebookGraph/src/index.js +52 -11
- package/dist/plugins/freshdesk/src/index.js +220 -48
- package/dist/plugins/freshservice/src/index.js +39 -9
- package/dist/plugins/freshworksCrm/src/index.js +58 -12
- package/dist/plugins/getresponse/src/index.js +87 -18
- package/dist/plugins/ghost/src/index.js +114 -26
- package/dist/plugins/github/src/index.js +483 -109
- package/dist/plugins/gitlab/src/index.js +193 -45
- package/dist/plugins/gong/src/index.js +68 -14
- package/dist/plugins/gotify/src/index.js +43 -9
- package/dist/plugins/gotowebinar/src/index.js +233 -47
- package/dist/plugins/grafana/src/index.js +92 -21
- package/dist/plugins/graphql/src/index.js +38 -8
- package/dist/plugins/grist/src/index.js +52 -10
- package/dist/plugins/hackernews/src/index.js +32 -6
- package/dist/plugins/halopsa/src/index.js +131 -26
- package/dist/plugins/harvest/src/index.js +182 -42
- package/dist/plugins/helpscout/src/index.js +153 -31
- package/dist/plugins/highlevel/src/index.js +291 -58
- package/dist/plugins/homeAssistant/src/index.js +124 -26
- package/dist/plugins/hubspot/src/index.js +163 -29
- package/dist/plugins/humanticAi/src/index.js +54 -5
- package/dist/plugins/hunter/src/index.js +21 -4
- package/dist/plugins/intercom/src/index.js +95 -20
- package/dist/plugins/iterable/src/index.js +96 -20
- package/dist/plugins/jenkins/src/index.js +75 -17
- package/dist/plugins/jira/src/index.js +193 -43
- package/dist/plugins/keap/src/index.js +222 -56
- package/dist/plugins/kobotoolbox/src/index.js +113 -25
- package/dist/plugins/lemlist/src/index.js +79 -18
- package/dist/plugins/linear/src/index.js +86 -19
- package/dist/plugins/lingvanex/src/index.js +38 -8
- package/dist/plugins/linkedin/src/index.js +37 -8
- package/dist/plugins/lonescale/src/index.js +41 -9
- package/dist/plugins/magento/src/index.js +98 -27
- package/dist/plugins/mailcheck/src/index.js +11 -2
- package/dist/plugins/mailchimp/src/index.js +193 -42
- package/dist/plugins/mailerlite/src/index.js +61 -12
- package/dist/plugins/mailgun/src/index.js +39 -7
- package/dist/plugins/mailjet/src/index.js +141 -30
- package/dist/plugins/mandrill/src/index.js +67 -14
- package/dist/plugins/marketstack/src/index.js +56 -10
- package/dist/plugins/matrix/src/index.js +97 -20
- package/dist/plugins/mattermost/src/index.js +124 -26
- package/dist/plugins/mautic/src/index.js +129 -26
- package/dist/plugins/medium/src/index.js +64 -13
- package/dist/plugins/messagebird/src/index.js +80 -15
- package/dist/plugins/metabase/src/index.js +57 -12
- package/dist/plugins/misp/src/index.js +135 -33
- package/dist/plugins/mocean/src/index.js +33 -7
- package/dist/plugins/monday/src/index.js +97 -23
- package/dist/plugins/monicaCrm/src/index.js +112 -23
- package/dist/plugins/msg91/src/index.js +11 -2
- package/dist/plugins/nasa/src/index.js +108 -21
- package/dist/plugins/netlify/src/index.js +28 -6
- package/dist/plugins/netscalerAdc/src/index.js +144 -29
- package/dist/plugins/nextcloud/src/index.js +103 -20
- package/dist/plugins/nocodb/src/index.js +57 -11
- package/dist/plugins/notion/src/index.js +148 -37
- package/dist/plugins/npm/src/index.js +59 -12
- package/dist/plugins/odoo/src/index.js +102 -20
- package/dist/plugins/okta/src/index.js +50 -10
- package/dist/plugins/oneSimpleApi/src/index.js +84 -17
- package/dist/plugins/onfleet/src/index.js +139 -32
- package/dist/plugins/openThesaurus/src/index.js +46 -9
- package/dist/plugins/openweathermap/src/index.js +31 -6
- package/dist/plugins/oura/src/index.js +36 -7
- package/dist/plugins/paddle/src/index.js +80 -17
- package/dist/plugins/pagerduty/src/index.js +53 -12
- package/dist/plugins/paypal/src/index.js +51 -11
- package/dist/plugins/peekalink/src/index.js +12 -3
- package/dist/plugins/phantombuster/src/index.js +39 -8
- package/dist/plugins/philipsHue/src/index.js +64 -13
- package/dist/plugins/pipedrive/src/index.js +167 -45
- package/dist/plugins/plivo/src/index.js +43 -8
- package/dist/plugins/postbin/src/index.js +9 -2
- package/dist/plugins/posthog/src/index.js +50 -13
- package/dist/plugins/profitwell/src/index.js +24 -5
- package/dist/plugins/pushbullet/src/index.js +45 -9
- package/dist/plugins/pushcut/src/index.js +31 -6
- package/dist/plugins/pushover/src/index.js +51 -10
- package/dist/plugins/quickbase/src/index.js +66 -13
- package/dist/plugins/quickbooks/src/index.js +86 -19
- package/dist/plugins/quickchart/src/index.js +35 -7
- package/dist/plugins/raindrop/src/index.js +54 -13
- package/dist/plugins/reddit/src/index.js +73 -18
- package/dist/plugins/rocketchat/src/index.js +47 -9
- package/dist/plugins/rundeck/src/index.js +26 -5
- package/dist/plugins/salesforce/src/index.js +161 -31
- package/dist/plugins/salesmate/src/index.js +75 -16
- package/dist/plugins/securityScorecard/src/index.js +73 -15
- package/dist/plugins/segment/src/index.js +21 -4
- package/dist/plugins/sendgrid/src/index.js +102 -24
- package/dist/plugins/sendy/src/index.js +54 -11
- package/dist/plugins/sentry/src/index.js +174 -34
- package/dist/plugins/servicenow/src/index.js +120 -27
- package/dist/plugins/shopify/src/index.js +53 -12
- package/dist/plugins/signl4/src/index.js +16 -3
- package/dist/plugins/slack/src/index.js +407 -105
- package/dist/plugins/sms77/src/index.js +26 -5
- package/dist/plugins/splunk/src/index.js +186 -45
- package/dist/plugins/spotify/src/index.js +265 -66
- package/dist/plugins/stackby/src/index.js +18 -6
- package/dist/plugins/storyblok/src/index.js +57 -11
- package/dist/plugins/strapi/src/index.js +63 -12
- package/dist/plugins/strava/src/index.js +58 -13
- package/dist/plugins/stripe/src/index.js +143 -30
- package/dist/plugins/supabase/src/index.js +49 -10
- package/dist/plugins/syncromsp/src/index.js +245 -67
- package/dist/plugins/tapfiliate/src/index.js +57 -14
- package/dist/plugins/telegram/src/index.js +202 -39
- package/dist/plugins/thehive/src/index.js +271 -66
- package/dist/plugins/thehiveProject/src/index.js +457 -89
- package/dist/plugins/todoist/src/index.js +326 -77
- package/dist/plugins/travisci/src/index.js +35 -8
- package/dist/plugins/trello/src/index.js +204 -46
- package/dist/plugins/twake/src/index.js +10 -2
- package/dist/plugins/twilio/src/index.js +56 -11
- package/dist/plugins/twist/src/index.js +241 -48
- package/dist/plugins/twitter/src/index.js +128 -30
- package/dist/plugins/unleashedSoftware/src/index.js +30 -6
- package/dist/plugins/uplead/src/index.js +9 -2
- package/dist/plugins/uproc/src/index.js +31 -6
- package/dist/plugins/uptimerobot/src/index.js +119 -25
- package/dist/plugins/urlscanio/src/index.js +25 -6
- package/dist/plugins/vero/src/index.js +68 -13
- package/dist/plugins/vonage/src/index.js +32 -6
- package/dist/plugins/wekan/src/index.js +297 -52
- package/dist/plugins/woocommerce/src/index.js +57 -12
- package/dist/plugins/wordpress/src/index.js +94 -18
- package/dist/plugins/xero/src/index.js +79 -13
- package/dist/plugins/yourls/src/index.js +33 -6
- package/dist/plugins/zammad/src/index.js +139 -36
- package/dist/plugins/zendesk/src/index.js +201 -48
- package/dist/plugins/zoho/src/index.js +88 -21
- package/dist/plugins/zoom/src/index.js +41 -7
- package/dist/plugins/zulip/src/index.js +101 -20
- 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: {
|
|
11
|
+
headers: {
|
|
12
|
+
Authorization: `Token ${token}`,
|
|
13
|
+
Accept: "application/json",
|
|
14
|
+
"Content-Type": "application/json",
|
|
15
|
+
},
|
|
12
16
|
};
|
|
13
|
-
if (body &&
|
|
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: {
|
|
55
|
-
|
|
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: {
|
|
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: {
|
|
75
|
-
|
|
76
|
-
|
|
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: {
|
|
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: {
|
|
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: {
|
|
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: {
|
|
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: {
|
|
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: {
|
|
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: {
|
|
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: {
|
|
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: {
|
|
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: {
|
|
213
|
-
|
|
214
|
-
|
|
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: {
|
|
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: {
|
|
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: {
|
|
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: {
|
|
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: {
|
|
12
|
+
headers: {
|
|
13
|
+
Authorization: `Basic ${btoa(`:${apiKey}`)}`,
|
|
14
|
+
"Content-Type": "application/json",
|
|
15
|
+
},
|
|
13
16
|
};
|
|
14
|
-
if (body &&
|
|
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: {
|
|
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: {
|
|
48
|
-
|
|
49
|
-
|
|
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, {
|
|
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: {
|
|
85
|
-
|
|
86
|
-
|
|
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: {
|
|
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: {
|
|
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) {
|
|
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) {
|
|
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, {
|
|
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/`, {}, {
|
|
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 = {
|
|
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({
|
|
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: {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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: {
|
|
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: {
|
|
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: {
|
|
66
|
-
|
|
67
|
-
|
|
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: {
|
|
89
|
-
|
|
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: {
|
|
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: {
|
|
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: {
|
|
124
|
-
|
|
125
|
-
|
|
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({
|
|
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: {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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: {
|
|
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)
|