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
|
@@ -40,31 +40,62 @@ export default function discourse(rl) {
|
|
|
40
40
|
rl.setName("discourse");
|
|
41
41
|
rl.setVersion("0.1.0");
|
|
42
42
|
rl.setConnectionSchema({
|
|
43
|
-
host: {
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
host: {
|
|
44
|
+
type: "string",
|
|
45
|
+
required: true,
|
|
46
|
+
description: "Discourse instance URL (e.g. https://forum.example.com)",
|
|
47
|
+
env: "DISCOURSE_HOST",
|
|
48
|
+
},
|
|
49
|
+
apiKey: {
|
|
50
|
+
type: "string",
|
|
51
|
+
required: true,
|
|
52
|
+
description: "Discourse API key",
|
|
53
|
+
env: "DISCOURSE_API_KEY",
|
|
54
|
+
},
|
|
55
|
+
apiUsername: {
|
|
56
|
+
type: "string",
|
|
57
|
+
required: false,
|
|
58
|
+
description: "API username (default: system)",
|
|
59
|
+
env: "DISCOURSE_API_USERNAME",
|
|
60
|
+
default: "system",
|
|
61
|
+
},
|
|
46
62
|
});
|
|
47
63
|
// ── Category ────────────────────────────────────────
|
|
48
64
|
rl.registerAction("category.create", {
|
|
49
65
|
description: "Create a category",
|
|
50
66
|
inputSchema: {
|
|
51
67
|
name: { type: "string", required: true, description: "Category name" },
|
|
52
|
-
color: {
|
|
53
|
-
|
|
68
|
+
color: {
|
|
69
|
+
type: "string",
|
|
70
|
+
required: true,
|
|
71
|
+
description: "Hex color (e.g. 0088CC)",
|
|
72
|
+
},
|
|
73
|
+
textColor: {
|
|
74
|
+
type: "string",
|
|
75
|
+
required: true,
|
|
76
|
+
description: "Text hex color (e.g. FFFFFF)",
|
|
77
|
+
},
|
|
54
78
|
},
|
|
55
79
|
async execute(input, ctx) {
|
|
56
80
|
const { name, color, textColor } = input;
|
|
57
|
-
const data = (await req(ctx, "POST", "/categories.json", {
|
|
81
|
+
const data = (await req(ctx, "POST", "/categories.json", {
|
|
82
|
+
name,
|
|
83
|
+
color,
|
|
84
|
+
text_color: textColor,
|
|
85
|
+
}));
|
|
58
86
|
return data.category;
|
|
59
87
|
},
|
|
60
88
|
});
|
|
61
89
|
rl.registerAction("category.list", {
|
|
62
90
|
description: "List all categories",
|
|
63
|
-
inputSchema: {
|
|
91
|
+
inputSchema: {
|
|
92
|
+
limit: { type: "number", required: false, description: "Max results" },
|
|
93
|
+
},
|
|
64
94
|
async execute(input, ctx) {
|
|
65
95
|
const { limit } = (input ?? {});
|
|
66
96
|
const data = (await req(ctx, "GET", "/categories.json"));
|
|
67
|
-
const list = data.category_list
|
|
97
|
+
const list = data.category_list
|
|
98
|
+
.categories;
|
|
68
99
|
if (limit)
|
|
69
100
|
return list.slice(0, limit);
|
|
70
101
|
return list;
|
|
@@ -73,10 +104,18 @@ export default function discourse(rl) {
|
|
|
73
104
|
rl.registerAction("category.update", {
|
|
74
105
|
description: "Update a category",
|
|
75
106
|
inputSchema: {
|
|
76
|
-
categoryId: {
|
|
107
|
+
categoryId: {
|
|
108
|
+
type: "string",
|
|
109
|
+
required: true,
|
|
110
|
+
description: "Category ID",
|
|
111
|
+
},
|
|
77
112
|
name: { type: "string", required: true, description: "New name" },
|
|
78
113
|
color: { type: "string", required: false, description: "New hex color" },
|
|
79
|
-
textColor: {
|
|
114
|
+
textColor: {
|
|
115
|
+
type: "string",
|
|
116
|
+
required: false,
|
|
117
|
+
description: "New text color",
|
|
118
|
+
},
|
|
80
119
|
},
|
|
81
120
|
async execute(input, ctx) {
|
|
82
121
|
const { categoryId, name, color, textColor } = input;
|
|
@@ -92,16 +131,22 @@ export default function discourse(rl) {
|
|
|
92
131
|
// ── Group ───────────────────────────────────────────
|
|
93
132
|
rl.registerAction("group.create", {
|
|
94
133
|
description: "Create a group",
|
|
95
|
-
inputSchema: {
|
|
134
|
+
inputSchema: {
|
|
135
|
+
name: { type: "string", required: true, description: "Group name" },
|
|
136
|
+
},
|
|
96
137
|
async execute(input, ctx) {
|
|
97
138
|
const { name } = input;
|
|
98
|
-
const data = (await req(ctx, "POST", "/admin/groups.json", {
|
|
139
|
+
const data = (await req(ctx, "POST", "/admin/groups.json", {
|
|
140
|
+
group: { name },
|
|
141
|
+
}));
|
|
99
142
|
return data.basic_group;
|
|
100
143
|
},
|
|
101
144
|
});
|
|
102
145
|
rl.registerAction("group.get", {
|
|
103
146
|
description: "Get a group by name",
|
|
104
|
-
inputSchema: {
|
|
147
|
+
inputSchema: {
|
|
148
|
+
name: { type: "string", required: true, description: "Group name" },
|
|
149
|
+
},
|
|
105
150
|
async execute(input, ctx) {
|
|
106
151
|
const { name } = input;
|
|
107
152
|
const data = (await req(ctx, "GET", `/groups/${name}`));
|
|
@@ -110,7 +155,9 @@ export default function discourse(rl) {
|
|
|
110
155
|
});
|
|
111
156
|
rl.registerAction("group.list", {
|
|
112
157
|
description: "List all groups",
|
|
113
|
-
inputSchema: {
|
|
158
|
+
inputSchema: {
|
|
159
|
+
limit: { type: "number", required: false, description: "Max results" },
|
|
160
|
+
},
|
|
114
161
|
async execute(input, ctx) {
|
|
115
162
|
const { limit } = (input ?? {});
|
|
116
163
|
const data = (await req(ctx, "GET", "/groups.json"));
|
|
@@ -135,11 +182,31 @@ export default function discourse(rl) {
|
|
|
135
182
|
rl.registerAction("post.create", {
|
|
136
183
|
description: "Create a post (new topic or reply)",
|
|
137
184
|
inputSchema: {
|
|
138
|
-
title: {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
185
|
+
title: {
|
|
186
|
+
type: "string",
|
|
187
|
+
required: false,
|
|
188
|
+
description: "Topic title (required for new topics)",
|
|
189
|
+
},
|
|
190
|
+
content: {
|
|
191
|
+
type: "string",
|
|
192
|
+
required: true,
|
|
193
|
+
description: "Post content (raw markdown)",
|
|
194
|
+
},
|
|
195
|
+
categoryId: {
|
|
196
|
+
type: "number",
|
|
197
|
+
required: false,
|
|
198
|
+
description: "Category ID (for new topics)",
|
|
199
|
+
},
|
|
200
|
+
topicId: {
|
|
201
|
+
type: "number",
|
|
202
|
+
required: false,
|
|
203
|
+
description: "Topic ID (for replies)",
|
|
204
|
+
},
|
|
205
|
+
replyToPostNumber: {
|
|
206
|
+
type: "number",
|
|
207
|
+
required: false,
|
|
208
|
+
description: "Post number to reply to",
|
|
209
|
+
},
|
|
143
210
|
},
|
|
144
211
|
async execute(input, ctx) {
|
|
145
212
|
const { title, content, categoryId, topicId, replyToPostNumber } = input;
|
|
@@ -157,14 +224,18 @@ export default function discourse(rl) {
|
|
|
157
224
|
});
|
|
158
225
|
rl.registerAction("post.get", {
|
|
159
226
|
description: "Get a post by ID",
|
|
160
|
-
inputSchema: {
|
|
227
|
+
inputSchema: {
|
|
228
|
+
postId: { type: "string", required: true, description: "Post ID" },
|
|
229
|
+
},
|
|
161
230
|
async execute(input, ctx) {
|
|
162
231
|
return req(ctx, "GET", `/posts/${input.postId}`);
|
|
163
232
|
},
|
|
164
233
|
});
|
|
165
234
|
rl.registerAction("post.list", {
|
|
166
235
|
description: "List latest posts",
|
|
167
|
-
inputSchema: {
|
|
236
|
+
inputSchema: {
|
|
237
|
+
limit: { type: "number", required: false, description: "Max results" },
|
|
238
|
+
},
|
|
168
239
|
async execute(input, ctx) {
|
|
169
240
|
const { limit } = (input ?? {});
|
|
170
241
|
const data = (await req(ctx, "GET", "/posts.json"));
|
|
@@ -178,8 +249,16 @@ export default function discourse(rl) {
|
|
|
178
249
|
description: "Update a post",
|
|
179
250
|
inputSchema: {
|
|
180
251
|
postId: { type: "string", required: true, description: "Post ID" },
|
|
181
|
-
content: {
|
|
182
|
-
|
|
252
|
+
content: {
|
|
253
|
+
type: "string",
|
|
254
|
+
required: true,
|
|
255
|
+
description: "New content (raw markdown)",
|
|
256
|
+
},
|
|
257
|
+
editReason: {
|
|
258
|
+
type: "string",
|
|
259
|
+
required: false,
|
|
260
|
+
description: "Reason for edit",
|
|
261
|
+
},
|
|
183
262
|
},
|
|
184
263
|
async execute(input, ctx) {
|
|
185
264
|
const { postId, content, editReason } = input;
|
|
@@ -198,7 +277,11 @@ export default function discourse(rl) {
|
|
|
198
277
|
email: { type: "string", required: true, description: "Email address" },
|
|
199
278
|
username: { type: "string", required: true, description: "Username" },
|
|
200
279
|
password: { type: "string", required: true, description: "Password" },
|
|
201
|
-
active: {
|
|
280
|
+
active: {
|
|
281
|
+
type: "boolean",
|
|
282
|
+
required: false,
|
|
283
|
+
description: "Create as active (default: false)",
|
|
284
|
+
},
|
|
202
285
|
},
|
|
203
286
|
async execute(input, ctx) {
|
|
204
287
|
const { name, email, username, password, active } = input;
|
|
@@ -212,7 +295,11 @@ export default function discourse(rl) {
|
|
|
212
295
|
description: "Get a user by username or external ID",
|
|
213
296
|
inputSchema: {
|
|
214
297
|
username: { type: "string", required: false, description: "Username" },
|
|
215
|
-
externalId: {
|
|
298
|
+
externalId: {
|
|
299
|
+
type: "string",
|
|
300
|
+
required: false,
|
|
301
|
+
description: "External (SSO) ID",
|
|
302
|
+
},
|
|
216
303
|
},
|
|
217
304
|
async execute(input, ctx) {
|
|
218
305
|
const { username, externalId } = (input ?? {});
|
|
@@ -226,14 +313,22 @@ export default function discourse(rl) {
|
|
|
226
313
|
rl.registerAction("user.list", {
|
|
227
314
|
description: "List users (admin)",
|
|
228
315
|
inputSchema: {
|
|
229
|
-
flag: {
|
|
316
|
+
flag: {
|
|
317
|
+
type: "string",
|
|
318
|
+
required: false,
|
|
319
|
+
description: "Filter: active (default), new, staff, suspended, blocked",
|
|
320
|
+
},
|
|
230
321
|
limit: { type: "number", required: false, description: "Max results" },
|
|
231
322
|
order: { type: "string", required: false, description: "Order by field" },
|
|
232
323
|
asc: { type: "boolean", required: false, description: "Ascending order" },
|
|
233
|
-
showEmails: {
|
|
324
|
+
showEmails: {
|
|
325
|
+
type: "boolean",
|
|
326
|
+
required: false,
|
|
327
|
+
description: "Include email addresses",
|
|
328
|
+
},
|
|
234
329
|
},
|
|
235
330
|
async execute(input, ctx) {
|
|
236
|
-
const { flag = "active", limit, order, asc, showEmails } = (input ?? {});
|
|
331
|
+
const { flag = "active", limit, order, asc, showEmails, } = (input ?? {});
|
|
237
332
|
const qs = {};
|
|
238
333
|
if (order)
|
|
239
334
|
qs.order = order;
|
|
@@ -252,7 +347,11 @@ export default function discourse(rl) {
|
|
|
252
347
|
description: "Add users to a group",
|
|
253
348
|
inputSchema: {
|
|
254
349
|
groupId: { type: "string", required: true, description: "Group ID" },
|
|
255
|
-
usernames: {
|
|
350
|
+
usernames: {
|
|
351
|
+
type: "string",
|
|
352
|
+
required: true,
|
|
353
|
+
description: "Comma-separated usernames",
|
|
354
|
+
},
|
|
256
355
|
},
|
|
257
356
|
async execute(input, ctx) {
|
|
258
357
|
const { groupId, usernames } = input;
|
|
@@ -263,11 +362,17 @@ export default function discourse(rl) {
|
|
|
263
362
|
description: "Remove users from a group",
|
|
264
363
|
inputSchema: {
|
|
265
364
|
groupId: { type: "string", required: true, description: "Group ID" },
|
|
266
|
-
usernames: {
|
|
365
|
+
usernames: {
|
|
366
|
+
type: "string",
|
|
367
|
+
required: true,
|
|
368
|
+
description: "Comma-separated usernames",
|
|
369
|
+
},
|
|
267
370
|
},
|
|
268
371
|
async execute(input, ctx) {
|
|
269
372
|
const { groupId, usernames } = input;
|
|
270
|
-
return req(ctx, "DELETE", `/groups/${groupId}/members.json`, {
|
|
373
|
+
return req(ctx, "DELETE", `/groups/${groupId}/members.json`, {
|
|
374
|
+
usernames,
|
|
375
|
+
});
|
|
271
376
|
},
|
|
272
377
|
});
|
|
273
378
|
}
|
|
@@ -15,7 +15,9 @@ async function apiRequest(apiKey, endpoint, qs) {
|
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
|
-
const res = await fetch(url.toString(), {
|
|
18
|
+
const res = await fetch(url.toString(), {
|
|
19
|
+
headers: { Accept: "application/json" },
|
|
20
|
+
});
|
|
19
21
|
if (!res.ok)
|
|
20
22
|
throw new Error(`Disqus API error ${res.status}: ${await res.text()}`);
|
|
21
23
|
return res.json();
|
|
@@ -46,14 +48,31 @@ export default function disqus(rl) {
|
|
|
46
48
|
rl.setName("disqus");
|
|
47
49
|
rl.setVersion("0.1.0");
|
|
48
50
|
rl.setConnectionSchema({
|
|
49
|
-
apiKey: {
|
|
51
|
+
apiKey: {
|
|
52
|
+
type: "string",
|
|
53
|
+
required: true,
|
|
54
|
+
description: "Disqus API key (access token)",
|
|
55
|
+
env: "DISQUS_API_KEY",
|
|
56
|
+
},
|
|
50
57
|
});
|
|
51
58
|
rl.registerAction("forum.get", {
|
|
52
59
|
description: "Get forum details",
|
|
53
60
|
inputSchema: {
|
|
54
|
-
forum: {
|
|
55
|
-
|
|
56
|
-
|
|
61
|
+
forum: {
|
|
62
|
+
type: "string",
|
|
63
|
+
required: true,
|
|
64
|
+
description: "Forum short name (ID)",
|
|
65
|
+
},
|
|
66
|
+
related: {
|
|
67
|
+
type: "array",
|
|
68
|
+
required: false,
|
|
69
|
+
description: "Relations to include (e.g. ['author'])",
|
|
70
|
+
},
|
|
71
|
+
attach: {
|
|
72
|
+
type: "array",
|
|
73
|
+
required: false,
|
|
74
|
+
description: "Attach fields (e.g. ['counters'])",
|
|
75
|
+
},
|
|
57
76
|
},
|
|
58
77
|
async execute(input, ctx) {
|
|
59
78
|
const { forum, related, attach } = input;
|
|
@@ -70,14 +89,38 @@ export default function disqus(rl) {
|
|
|
70
89
|
rl.registerAction("forum.listPosts", {
|
|
71
90
|
description: "List posts in a forum",
|
|
72
91
|
inputSchema: {
|
|
73
|
-
forum: {
|
|
92
|
+
forum: {
|
|
93
|
+
type: "string",
|
|
94
|
+
required: true,
|
|
95
|
+
description: "Forum short name",
|
|
96
|
+
},
|
|
74
97
|
limit: { type: "number", required: false, description: "Max results" },
|
|
75
|
-
order: {
|
|
98
|
+
order: {
|
|
99
|
+
type: "string",
|
|
100
|
+
required: false,
|
|
101
|
+
description: "Sort order: asc or desc",
|
|
102
|
+
},
|
|
76
103
|
query: { type: "string", required: false, description: "Search query" },
|
|
77
|
-
since: {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
104
|
+
since: {
|
|
105
|
+
type: "string",
|
|
106
|
+
required: false,
|
|
107
|
+
description: "Filter posts since (ISO datetime or unix timestamp)",
|
|
108
|
+
},
|
|
109
|
+
related: {
|
|
110
|
+
type: "array",
|
|
111
|
+
required: false,
|
|
112
|
+
description: "Relations (e.g. ['thread'])",
|
|
113
|
+
},
|
|
114
|
+
include: {
|
|
115
|
+
type: "array",
|
|
116
|
+
required: false,
|
|
117
|
+
description: "Include filters (e.g. ['approved'])",
|
|
118
|
+
},
|
|
119
|
+
filters: {
|
|
120
|
+
type: "array",
|
|
121
|
+
required: false,
|
|
122
|
+
description: "Post filters (e.g. ['Is_Flagged'])",
|
|
123
|
+
},
|
|
81
124
|
},
|
|
82
125
|
async execute(input, ctx) {
|
|
83
126
|
const { forum, limit, order, query, since, related, include, filters } = (input ?? {});
|
|
@@ -101,9 +144,17 @@ export default function disqus(rl) {
|
|
|
101
144
|
rl.registerAction("forum.listCategories", {
|
|
102
145
|
description: "List categories in a forum",
|
|
103
146
|
inputSchema: {
|
|
104
|
-
forum: {
|
|
147
|
+
forum: {
|
|
148
|
+
type: "string",
|
|
149
|
+
required: true,
|
|
150
|
+
description: "Forum short name",
|
|
151
|
+
},
|
|
105
152
|
limit: { type: "number", required: false, description: "Max results" },
|
|
106
|
-
order: {
|
|
153
|
+
order: {
|
|
154
|
+
type: "string",
|
|
155
|
+
required: false,
|
|
156
|
+
description: "Sort order: asc or desc",
|
|
157
|
+
},
|
|
107
158
|
},
|
|
108
159
|
async execute(input, ctx) {
|
|
109
160
|
const { forum, limit, order } = (input ?? {});
|
|
@@ -117,16 +168,41 @@ export default function disqus(rl) {
|
|
|
117
168
|
rl.registerAction("forum.listThreads", {
|
|
118
169
|
description: "List threads in a forum",
|
|
119
170
|
inputSchema: {
|
|
120
|
-
forum: {
|
|
171
|
+
forum: {
|
|
172
|
+
type: "string",
|
|
173
|
+
required: true,
|
|
174
|
+
description: "Forum short name",
|
|
175
|
+
},
|
|
121
176
|
limit: { type: "number", required: false, description: "Max results" },
|
|
122
|
-
order: {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
177
|
+
order: {
|
|
178
|
+
type: "string",
|
|
179
|
+
required: false,
|
|
180
|
+
description: "Sort order: asc or desc",
|
|
181
|
+
},
|
|
182
|
+
since: {
|
|
183
|
+
type: "string",
|
|
184
|
+
required: false,
|
|
185
|
+
description: "Filter since (ISO datetime or unix timestamp)",
|
|
186
|
+
},
|
|
187
|
+
related: {
|
|
188
|
+
type: "array",
|
|
189
|
+
required: false,
|
|
190
|
+
description: "Relations (e.g. ['author', 'forum'])",
|
|
191
|
+
},
|
|
192
|
+
include: {
|
|
193
|
+
type: "array",
|
|
194
|
+
required: false,
|
|
195
|
+
description: "Thread states (e.g. ['open', 'closed', 'killed'])",
|
|
196
|
+
},
|
|
197
|
+
thread: {
|
|
198
|
+
type: "string",
|
|
199
|
+
required: false,
|
|
200
|
+
description: "Look up specific thread by ID or ident",
|
|
201
|
+
},
|
|
127
202
|
},
|
|
128
203
|
async execute(input, ctx) {
|
|
129
|
-
const { forum, limit, order, since, related, include, thread } = (input ??
|
|
204
|
+
const { forum, limit, order, since, related, include, thread } = (input ??
|
|
205
|
+
{});
|
|
130
206
|
const apiKey = ctx.connection.config.apiKey;
|
|
131
207
|
const qs = { forum };
|
|
132
208
|
if (order)
|
|
@@ -10,7 +10,11 @@ export default function docker(rl) {
|
|
|
10
10
|
rl.registerAction("containers.list", {
|
|
11
11
|
description: "List Docker containers",
|
|
12
12
|
inputSchema: {
|
|
13
|
-
all: {
|
|
13
|
+
all: {
|
|
14
|
+
type: "boolean",
|
|
15
|
+
description: "Include stopped containers",
|
|
16
|
+
required: false,
|
|
17
|
+
},
|
|
14
18
|
},
|
|
15
19
|
execute(input) {
|
|
16
20
|
const opts = input ?? {};
|
|
@@ -31,7 +35,11 @@ export default function docker(rl) {
|
|
|
31
35
|
rl.registerAction("containers.start", {
|
|
32
36
|
description: "Start a Docker container",
|
|
33
37
|
inputSchema: {
|
|
34
|
-
id: {
|
|
38
|
+
id: {
|
|
39
|
+
type: "string",
|
|
40
|
+
description: "Container ID or name",
|
|
41
|
+
required: true,
|
|
42
|
+
},
|
|
35
43
|
},
|
|
36
44
|
execute(input) {
|
|
37
45
|
const { id } = input;
|
|
@@ -42,7 +50,11 @@ export default function docker(rl) {
|
|
|
42
50
|
rl.registerAction("containers.stop", {
|
|
43
51
|
description: "Stop a Docker container",
|
|
44
52
|
inputSchema: {
|
|
45
|
-
id: {
|
|
53
|
+
id: {
|
|
54
|
+
type: "string",
|
|
55
|
+
description: "Container ID or name",
|
|
56
|
+
required: true,
|
|
57
|
+
},
|
|
46
58
|
},
|
|
47
59
|
execute(input) {
|
|
48
60
|
const { id } = input;
|
|
@@ -65,7 +77,11 @@ export default function docker(rl) {
|
|
|
65
77
|
rl.registerAction("images.pull", {
|
|
66
78
|
description: "Pull a Docker image",
|
|
67
79
|
inputSchema: {
|
|
68
|
-
image: {
|
|
80
|
+
image: {
|
|
81
|
+
type: "string",
|
|
82
|
+
description: "Image name (e.g. nginx:latest)",
|
|
83
|
+
required: true,
|
|
84
|
+
},
|
|
69
85
|
},
|
|
70
86
|
execute(input) {
|
|
71
87
|
const { image } = input;
|
|
@@ -7,7 +7,10 @@ async function apiRequest(token, method, endpoint, body) {
|
|
|
7
7
|
"Content-Type": "application/json",
|
|
8
8
|
},
|
|
9
9
|
};
|
|
10
|
-
if (body &&
|
|
10
|
+
if (body &&
|
|
11
|
+
Object.keys(body).length > 0 &&
|
|
12
|
+
method !== "GET" &&
|
|
13
|
+
method !== "DELETE") {
|
|
11
14
|
opts.body = JSON.stringify(body);
|
|
12
15
|
}
|
|
13
16
|
const res = await fetch(`${BASE_URL}${endpoint}`, opts);
|
|
@@ -21,7 +24,12 @@ export default function drift(rl) {
|
|
|
21
24
|
rl.setName("drift");
|
|
22
25
|
rl.setVersion("0.1.0");
|
|
23
26
|
rl.setConnectionSchema({
|
|
24
|
-
accessToken: {
|
|
27
|
+
accessToken: {
|
|
28
|
+
type: "string",
|
|
29
|
+
required: true,
|
|
30
|
+
description: "Drift API access token",
|
|
31
|
+
env: "DRIFT_ACCESS_TOKEN",
|
|
32
|
+
},
|
|
25
33
|
});
|
|
26
34
|
const tok = (ctx) => ctx.connection.config.accessToken;
|
|
27
35
|
rl.registerAction("contact.create", {
|
|
@@ -38,13 +46,17 @@ export default function drift(rl) {
|
|
|
38
46
|
attrs.name = name;
|
|
39
47
|
if (phone)
|
|
40
48
|
attrs.phone = phone;
|
|
41
|
-
const data = (await apiRequest(tok(ctx), "POST", "/contacts", {
|
|
49
|
+
const data = (await apiRequest(tok(ctx), "POST", "/contacts", {
|
|
50
|
+
attributes: attrs,
|
|
51
|
+
}));
|
|
42
52
|
return data.data;
|
|
43
53
|
},
|
|
44
54
|
});
|
|
45
55
|
rl.registerAction("contact.get", {
|
|
46
56
|
description: "Get a contact by ID",
|
|
47
|
-
inputSchema: {
|
|
57
|
+
inputSchema: {
|
|
58
|
+
contactId: { type: "string", required: true, description: "Contact ID" },
|
|
59
|
+
},
|
|
48
60
|
async execute(input, ctx) {
|
|
49
61
|
const data = (await apiRequest(tok(ctx), "GET", `/contacts/${input.contactId}`));
|
|
50
62
|
return data.data;
|
|
@@ -73,7 +85,9 @@ export default function drift(rl) {
|
|
|
73
85
|
});
|
|
74
86
|
rl.registerAction("contact.delete", {
|
|
75
87
|
description: "Delete a contact",
|
|
76
|
-
inputSchema: {
|
|
88
|
+
inputSchema: {
|
|
89
|
+
contactId: { type: "string", required: true, description: "Contact ID" },
|
|
90
|
+
},
|
|
77
91
|
async execute(input, ctx) {
|
|
78
92
|
await apiRequest(tok(ctx), "DELETE", `/contacts/${input.contactId}`);
|
|
79
93
|
return { success: true };
|