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.
- 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
|
@@ -53,14 +53,18 @@ export default function convertkit(rl) {
|
|
|
53
53
|
});
|
|
54
54
|
rl.registerAction("customField.get", {
|
|
55
55
|
description: "Get a custom field",
|
|
56
|
-
inputSchema: {
|
|
56
|
+
inputSchema: {
|
|
57
|
+
id: { type: "string", required: true, description: "Field ID" },
|
|
58
|
+
},
|
|
57
59
|
async execute(input, ctx) {
|
|
58
60
|
return apiRequest(getSecret(ctx), "GET", `/custom_fields/${input.id}`);
|
|
59
61
|
},
|
|
60
62
|
});
|
|
61
63
|
rl.registerAction("customField.list", {
|
|
62
64
|
description: "List custom fields",
|
|
63
|
-
inputSchema: {
|
|
65
|
+
inputSchema: {
|
|
66
|
+
limit: { type: "number", required: false, description: "Max results" },
|
|
67
|
+
},
|
|
64
68
|
async execute(input, ctx) {
|
|
65
69
|
const data = (await apiRequest(getSecret(ctx), "GET", "/custom_fields"));
|
|
66
70
|
const fields = data.custom_fields ?? [];
|
|
@@ -78,13 +82,17 @@ export default function convertkit(rl) {
|
|
|
78
82
|
},
|
|
79
83
|
async execute(input, ctx) {
|
|
80
84
|
const { id, label } = input;
|
|
81
|
-
await apiRequest(getSecret(ctx), "PUT", `/custom_fields/${id}`, {
|
|
85
|
+
await apiRequest(getSecret(ctx), "PUT", `/custom_fields/${id}`, {
|
|
86
|
+
label,
|
|
87
|
+
});
|
|
82
88
|
return { success: true };
|
|
83
89
|
},
|
|
84
90
|
});
|
|
85
91
|
rl.registerAction("customField.delete", {
|
|
86
92
|
description: "Delete a custom field",
|
|
87
|
-
inputSchema: {
|
|
93
|
+
inputSchema: {
|
|
94
|
+
id: { type: "string", required: true, description: "Field ID" },
|
|
95
|
+
},
|
|
88
96
|
async execute(input, ctx) {
|
|
89
97
|
return apiRequest(getSecret(ctx), "DELETE", `/custom_fields/${input.id}`);
|
|
90
98
|
},
|
|
@@ -94,10 +102,18 @@ export default function convertkit(rl) {
|
|
|
94
102
|
description: "Add a subscriber to a form",
|
|
95
103
|
inputSchema: {
|
|
96
104
|
formId: { type: "string", required: true, description: "Form ID" },
|
|
97
|
-
email: {
|
|
105
|
+
email: {
|
|
106
|
+
type: "string",
|
|
107
|
+
required: true,
|
|
108
|
+
description: "Subscriber email",
|
|
109
|
+
},
|
|
98
110
|
firstName: { type: "string", required: false, description: "First name" },
|
|
99
111
|
tags: { type: "array", required: false, description: "Tag IDs to add" },
|
|
100
|
-
fields: {
|
|
112
|
+
fields: {
|
|
113
|
+
type: "object",
|
|
114
|
+
required: false,
|
|
115
|
+
description: "Custom field key-value pairs",
|
|
116
|
+
},
|
|
101
117
|
},
|
|
102
118
|
async execute(input, ctx) {
|
|
103
119
|
const { formId, email, firstName, tags, fields } = input;
|
|
@@ -114,7 +130,9 @@ export default function convertkit(rl) {
|
|
|
114
130
|
});
|
|
115
131
|
rl.registerAction("form.list", {
|
|
116
132
|
description: "List forms",
|
|
117
|
-
inputSchema: {
|
|
133
|
+
inputSchema: {
|
|
134
|
+
limit: { type: "number", required: false, description: "Max results" },
|
|
135
|
+
},
|
|
118
136
|
async execute(input, ctx) {
|
|
119
137
|
const data = (await apiRequest(getSecret(ctx), "GET", "/forms"));
|
|
120
138
|
const forms = data.forms ?? [];
|
|
@@ -128,7 +146,11 @@ export default function convertkit(rl) {
|
|
|
128
146
|
description: "List subscriptions for a form",
|
|
129
147
|
inputSchema: {
|
|
130
148
|
formId: { type: "string", required: true, description: "Form ID" },
|
|
131
|
-
subscriberState: {
|
|
149
|
+
subscriberState: {
|
|
150
|
+
type: "string",
|
|
151
|
+
required: false,
|
|
152
|
+
description: "Filter: active, cancelled",
|
|
153
|
+
},
|
|
132
154
|
limit: { type: "number", required: false, description: "Max results" },
|
|
133
155
|
},
|
|
134
156
|
async execute(input, ctx) {
|
|
@@ -147,8 +169,16 @@ export default function convertkit(rl) {
|
|
|
147
169
|
rl.registerAction("sequence.addSubscriber", {
|
|
148
170
|
description: "Add a subscriber to a sequence",
|
|
149
171
|
inputSchema: {
|
|
150
|
-
sequenceId: {
|
|
151
|
-
|
|
172
|
+
sequenceId: {
|
|
173
|
+
type: "string",
|
|
174
|
+
required: true,
|
|
175
|
+
description: "Sequence ID",
|
|
176
|
+
},
|
|
177
|
+
email: {
|
|
178
|
+
type: "string",
|
|
179
|
+
required: true,
|
|
180
|
+
description: "Subscriber email",
|
|
181
|
+
},
|
|
152
182
|
firstName: { type: "string", required: false, description: "First name" },
|
|
153
183
|
tags: { type: "array", required: false, description: "Tag IDs" },
|
|
154
184
|
fields: { type: "object", required: false, description: "Custom fields" },
|
|
@@ -168,7 +198,9 @@ export default function convertkit(rl) {
|
|
|
168
198
|
});
|
|
169
199
|
rl.registerAction("sequence.list", {
|
|
170
200
|
description: "List sequences",
|
|
171
|
-
inputSchema: {
|
|
201
|
+
inputSchema: {
|
|
202
|
+
limit: { type: "number", required: false, description: "Max results" },
|
|
203
|
+
},
|
|
172
204
|
async execute(input, ctx) {
|
|
173
205
|
const data = (await apiRequest(getSecret(ctx), "GET", "/sequences"));
|
|
174
206
|
const courses = data.courses ?? [];
|
|
@@ -181,8 +213,16 @@ export default function convertkit(rl) {
|
|
|
181
213
|
rl.registerAction("sequence.getSubscriptions", {
|
|
182
214
|
description: "List subscriptions for a sequence",
|
|
183
215
|
inputSchema: {
|
|
184
|
-
sequenceId: {
|
|
185
|
-
|
|
216
|
+
sequenceId: {
|
|
217
|
+
type: "string",
|
|
218
|
+
required: true,
|
|
219
|
+
description: "Sequence ID",
|
|
220
|
+
},
|
|
221
|
+
subscriberState: {
|
|
222
|
+
type: "string",
|
|
223
|
+
required: false,
|
|
224
|
+
description: "Filter: active, cancelled",
|
|
225
|
+
},
|
|
186
226
|
limit: { type: "number", required: false, description: "Max results" },
|
|
187
227
|
},
|
|
188
228
|
async execute(input, ctx) {
|
|
@@ -201,7 +241,11 @@ export default function convertkit(rl) {
|
|
|
201
241
|
rl.registerAction("tag.create", {
|
|
202
242
|
description: "Create one or more tags",
|
|
203
243
|
inputSchema: {
|
|
204
|
-
names: {
|
|
244
|
+
names: {
|
|
245
|
+
type: "string",
|
|
246
|
+
required: true,
|
|
247
|
+
description: "Comma-separated tag names",
|
|
248
|
+
},
|
|
205
249
|
},
|
|
206
250
|
async execute(input, ctx) {
|
|
207
251
|
const { names } = input;
|
|
@@ -211,7 +255,9 @@ export default function convertkit(rl) {
|
|
|
211
255
|
});
|
|
212
256
|
rl.registerAction("tag.list", {
|
|
213
257
|
description: "List tags",
|
|
214
|
-
inputSchema: {
|
|
258
|
+
inputSchema: {
|
|
259
|
+
limit: { type: "number", required: false, description: "Max results" },
|
|
260
|
+
},
|
|
215
261
|
async execute(input, ctx) {
|
|
216
262
|
const data = (await apiRequest(getSecret(ctx), "GET", "/tags"));
|
|
217
263
|
const tags = data.tags ?? [];
|
|
@@ -226,7 +272,11 @@ export default function convertkit(rl) {
|
|
|
226
272
|
description: "Tag a subscriber",
|
|
227
273
|
inputSchema: {
|
|
228
274
|
tagId: { type: "string", required: true, description: "Tag ID" },
|
|
229
|
-
email: {
|
|
275
|
+
email: {
|
|
276
|
+
type: "string",
|
|
277
|
+
required: true,
|
|
278
|
+
description: "Subscriber email",
|
|
279
|
+
},
|
|
230
280
|
firstName: { type: "string", required: false, description: "First name" },
|
|
231
281
|
fields: { type: "object", required: false, description: "Custom fields" },
|
|
232
282
|
},
|
|
@@ -260,11 +310,17 @@ export default function convertkit(rl) {
|
|
|
260
310
|
description: "Remove a tag from a subscriber",
|
|
261
311
|
inputSchema: {
|
|
262
312
|
tagId: { type: "string", required: true, description: "Tag ID" },
|
|
263
|
-
email: {
|
|
313
|
+
email: {
|
|
314
|
+
type: "string",
|
|
315
|
+
required: true,
|
|
316
|
+
description: "Subscriber email",
|
|
317
|
+
},
|
|
264
318
|
},
|
|
265
319
|
async execute(input, ctx) {
|
|
266
320
|
const { tagId, email } = input;
|
|
267
|
-
return apiRequest(getSecret(ctx), "POST", `/tags/${tagId}/unsubscribe`, {
|
|
321
|
+
return apiRequest(getSecret(ctx), "POST", `/tags/${tagId}/unsubscribe`, {
|
|
322
|
+
email,
|
|
323
|
+
});
|
|
268
324
|
},
|
|
269
325
|
});
|
|
270
326
|
}
|
|
@@ -53,7 +53,15 @@ function registerCrud(rl, resource, endpoint, idParam, nameRequired, extraCreate
|
|
|
53
53
|
rl.registerAction(`${resource}.create`, {
|
|
54
54
|
description: `Create a ${resource}`,
|
|
55
55
|
inputSchema: {
|
|
56
|
-
...(nameRequired
|
|
56
|
+
...(nameRequired
|
|
57
|
+
? {
|
|
58
|
+
name: {
|
|
59
|
+
type: "string",
|
|
60
|
+
required: true,
|
|
61
|
+
description: `${resource} name`,
|
|
62
|
+
},
|
|
63
|
+
}
|
|
64
|
+
: {}),
|
|
57
65
|
...extraCreateFields,
|
|
58
66
|
},
|
|
59
67
|
async execute(input, ctx) {
|
|
@@ -63,7 +71,13 @@ function registerCrud(rl, resource, endpoint, idParam, nameRequired, extraCreate
|
|
|
63
71
|
});
|
|
64
72
|
rl.registerAction(`${resource}.get`, {
|
|
65
73
|
description: `Get a ${resource} by ID`,
|
|
66
|
-
inputSchema: {
|
|
74
|
+
inputSchema: {
|
|
75
|
+
[idParam]: {
|
|
76
|
+
type: "string",
|
|
77
|
+
required: true,
|
|
78
|
+
description: `${resource} ID`,
|
|
79
|
+
},
|
|
80
|
+
},
|
|
67
81
|
async execute(input, ctx) {
|
|
68
82
|
const { apiKey, email } = getConn(ctx);
|
|
69
83
|
return apiRequest(apiKey, email, "GET", `${endpoint}/${input[idParam]}`);
|
|
@@ -71,7 +85,9 @@ function registerCrud(rl, resource, endpoint, idParam, nameRequired, extraCreate
|
|
|
71
85
|
});
|
|
72
86
|
rl.registerAction(`${resource}.list`, {
|
|
73
87
|
description: `Search/list ${resource}s`,
|
|
74
|
-
inputSchema: {
|
|
88
|
+
inputSchema: {
|
|
89
|
+
limit: { type: "number", required: false, description: "Max results" },
|
|
90
|
+
},
|
|
75
91
|
async execute(input, ctx) {
|
|
76
92
|
const { apiKey, email } = getConn(ctx);
|
|
77
93
|
const { limit } = (input ?? {});
|
|
@@ -81,7 +97,11 @@ function registerCrud(rl, resource, endpoint, idParam, nameRequired, extraCreate
|
|
|
81
97
|
rl.registerAction(`${resource}.update`, {
|
|
82
98
|
description: `Update a ${resource}`,
|
|
83
99
|
inputSchema: {
|
|
84
|
-
[idParam]: {
|
|
100
|
+
[idParam]: {
|
|
101
|
+
type: "string",
|
|
102
|
+
required: true,
|
|
103
|
+
description: `${resource} ID`,
|
|
104
|
+
},
|
|
85
105
|
},
|
|
86
106
|
async execute(input, ctx) {
|
|
87
107
|
const { apiKey, email } = getConn(ctx);
|
|
@@ -91,7 +111,13 @@ function registerCrud(rl, resource, endpoint, idParam, nameRequired, extraCreate
|
|
|
91
111
|
});
|
|
92
112
|
rl.registerAction(`${resource}.delete`, {
|
|
93
113
|
description: `Delete a ${resource}`,
|
|
94
|
-
inputSchema: {
|
|
114
|
+
inputSchema: {
|
|
115
|
+
[idParam]: {
|
|
116
|
+
type: "string",
|
|
117
|
+
required: true,
|
|
118
|
+
description: `${resource} ID`,
|
|
119
|
+
},
|
|
120
|
+
},
|
|
95
121
|
async execute(input, ctx) {
|
|
96
122
|
const { apiKey, email } = getConn(ctx);
|
|
97
123
|
return apiRequest(apiKey, email, "DELETE", `${endpoint}/${input[idParam]}`);
|
|
@@ -102,15 +128,33 @@ export default function copper(rl) {
|
|
|
102
128
|
rl.setName("copper");
|
|
103
129
|
rl.setVersion("0.1.0");
|
|
104
130
|
rl.setConnectionSchema({
|
|
105
|
-
apiKey: {
|
|
106
|
-
|
|
131
|
+
apiKey: {
|
|
132
|
+
type: "string",
|
|
133
|
+
required: true,
|
|
134
|
+
description: "Copper API key",
|
|
135
|
+
env: "COPPER_API_KEY",
|
|
136
|
+
},
|
|
137
|
+
email: {
|
|
138
|
+
type: "string",
|
|
139
|
+
required: true,
|
|
140
|
+
description: "Copper user email",
|
|
141
|
+
env: "COPPER_EMAIL",
|
|
142
|
+
},
|
|
107
143
|
});
|
|
108
144
|
// CRUD resources
|
|
109
145
|
registerCrud(rl, "company", "/companies", "companyId", true);
|
|
110
146
|
registerCrud(rl, "lead", "/leads", "leadId", true);
|
|
111
147
|
registerCrud(rl, "opportunity", "/opportunities", "opportunityId", true, {
|
|
112
|
-
customerSourceId: {
|
|
113
|
-
|
|
148
|
+
customerSourceId: {
|
|
149
|
+
type: "string",
|
|
150
|
+
required: true,
|
|
151
|
+
description: "Customer source ID",
|
|
152
|
+
},
|
|
153
|
+
primaryContactId: {
|
|
154
|
+
type: "string",
|
|
155
|
+
required: true,
|
|
156
|
+
description: "Primary contact ID",
|
|
157
|
+
},
|
|
114
158
|
});
|
|
115
159
|
registerCrud(rl, "person", "/people", "personId", true);
|
|
116
160
|
registerCrud(rl, "project", "/projects", "projectId", true);
|
|
@@ -118,7 +162,9 @@ export default function copper(rl) {
|
|
|
118
162
|
// Read-only resources
|
|
119
163
|
rl.registerAction("customerSource.list", {
|
|
120
164
|
description: "List customer sources",
|
|
121
|
-
inputSchema: {
|
|
165
|
+
inputSchema: {
|
|
166
|
+
limit: { type: "number", required: false, description: "Max results" },
|
|
167
|
+
},
|
|
122
168
|
async execute(input, ctx) {
|
|
123
169
|
const { apiKey, email } = getConn(ctx);
|
|
124
170
|
const data = (await apiRequest(apiKey, email, "GET", "/customer_sources"));
|
|
@@ -130,7 +176,9 @@ export default function copper(rl) {
|
|
|
130
176
|
});
|
|
131
177
|
rl.registerAction("user.list", {
|
|
132
178
|
description: "List users",
|
|
133
|
-
inputSchema: {
|
|
179
|
+
inputSchema: {
|
|
180
|
+
limit: { type: "number", required: false, description: "Max results" },
|
|
181
|
+
},
|
|
134
182
|
async execute(input, ctx) {
|
|
135
183
|
const { apiKey, email } = getConn(ctx);
|
|
136
184
|
const { limit } = (input ?? {});
|
|
@@ -13,7 +13,10 @@ async function apiRequest(host, apiKey, method, endpoint, body, qs) {
|
|
|
13
13
|
Authorization: `Bearer ${apiKey}`,
|
|
14
14
|
},
|
|
15
15
|
};
|
|
16
|
-
if (body &&
|
|
16
|
+
if (body &&
|
|
17
|
+
Object.keys(body).length > 0 &&
|
|
18
|
+
method !== "GET" &&
|
|
19
|
+
method !== "DELETE") {
|
|
17
20
|
opts.body = JSON.stringify(body);
|
|
18
21
|
}
|
|
19
22
|
const res = await fetch(url.toString(), opts);
|
|
@@ -48,15 +51,31 @@ export default function cortex(rl) {
|
|
|
48
51
|
rl.registerAction("analyzer.execute", {
|
|
49
52
|
description: "Run an analyzer on an observable",
|
|
50
53
|
inputSchema: {
|
|
51
|
-
analyzerId: {
|
|
52
|
-
|
|
54
|
+
analyzerId: {
|
|
55
|
+
type: "string",
|
|
56
|
+
required: true,
|
|
57
|
+
description: "Analyzer ID",
|
|
58
|
+
},
|
|
59
|
+
dataType: {
|
|
60
|
+
type: "string",
|
|
61
|
+
required: true,
|
|
62
|
+
description: "Observable type (domain, ip, url, mail, hash, filename, fqdn, uri_path, user-agent, regexp, registry, mail_subject, other)",
|
|
63
|
+
},
|
|
53
64
|
data: { type: "string", required: true, description: "Observable value" },
|
|
54
|
-
tlp: {
|
|
65
|
+
tlp: {
|
|
66
|
+
type: "number",
|
|
67
|
+
required: false,
|
|
68
|
+
description: "TLP level: 0=white, 1=green, 2=amber (default), 3=red",
|
|
69
|
+
},
|
|
55
70
|
force: { type: "boolean", required: false, description: "Bypass cache" },
|
|
56
|
-
timeout: {
|
|
71
|
+
timeout: {
|
|
72
|
+
type: "number",
|
|
73
|
+
required: false,
|
|
74
|
+
description: "Wait for report (seconds). If set, blocks until report is ready.",
|
|
75
|
+
},
|
|
57
76
|
},
|
|
58
77
|
async execute(input, ctx) {
|
|
59
|
-
const { analyzerId, dataType, data, tlp = 2, force, timeout } = input;
|
|
78
|
+
const { analyzerId, dataType, data, tlp = 2, force, timeout, } = input;
|
|
60
79
|
const { host, apiKey } = getConn(ctx);
|
|
61
80
|
const qs = {};
|
|
62
81
|
if (force)
|
|
@@ -101,17 +120,40 @@ export default function cortex(rl) {
|
|
|
101
120
|
rl.registerAction("responder.execute", {
|
|
102
121
|
description: "Run a responder on an entity",
|
|
103
122
|
inputSchema: {
|
|
104
|
-
responderId: {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
123
|
+
responderId: {
|
|
124
|
+
type: "string",
|
|
125
|
+
required: true,
|
|
126
|
+
description: "Responder ID",
|
|
127
|
+
},
|
|
128
|
+
entityType: {
|
|
129
|
+
type: "string",
|
|
130
|
+
required: true,
|
|
131
|
+
description: "Entity type: case, alert, case_artifact, case_task, case_task_log",
|
|
132
|
+
},
|
|
133
|
+
data: {
|
|
134
|
+
type: "object",
|
|
135
|
+
required: true,
|
|
136
|
+
description: "Entity data object (must include _type matching entityType)",
|
|
137
|
+
},
|
|
138
|
+
tlp: {
|
|
139
|
+
type: "number",
|
|
140
|
+
required: false,
|
|
141
|
+
description: "TLP level (default: 2)",
|
|
142
|
+
},
|
|
143
|
+
pap: {
|
|
144
|
+
type: "number",
|
|
145
|
+
required: false,
|
|
146
|
+
description: "PAP level (default: 2)",
|
|
147
|
+
},
|
|
109
148
|
message: { type: "string", required: false, description: "Message" },
|
|
110
149
|
},
|
|
111
150
|
async execute(input, ctx) {
|
|
112
|
-
const { responderId, entityType, data, tlp = 2, pap = 2, message } = input;
|
|
151
|
+
const { responderId, entityType, data, tlp = 2, pap = 2, message, } = input;
|
|
113
152
|
const { host, apiKey } = getConn(ctx);
|
|
114
|
-
const entityData = {
|
|
153
|
+
const entityData = {
|
|
154
|
+
_type: entityType,
|
|
155
|
+
...data,
|
|
156
|
+
};
|
|
115
157
|
const body = {
|
|
116
158
|
responderId,
|
|
117
159
|
dataType: `thehive:${entityType}`,
|