runline 0.2.1 → 0.3.0
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/commands/auth.d.ts +7 -0
- package/dist/commands/auth.js +96 -0
- package/dist/config/loader.d.ts +11 -0
- package/dist/config/loader.js +46 -0
- package/dist/core/engine.js +7 -1
- package/dist/core/oauth.d.ts +46 -0
- package/dist/core/oauth.js +145 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.js +2 -1
- package/dist/main.js +28 -0
- package/dist/plugin/api.d.ts +7 -1
- package/dist/plugin/api.js +7 -0
- package/dist/plugin/types.d.ts +47 -0
- 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/gmail/src/index.js +1075 -0
- 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 +3 -1
|
@@ -2,7 +2,10 @@ const BASE = "https://api.raindrop.io/rest/v1";
|
|
|
2
2
|
async function apiRequest(token, method, endpoint, body) {
|
|
3
3
|
const init = {
|
|
4
4
|
method,
|
|
5
|
-
headers: {
|
|
5
|
+
headers: {
|
|
6
|
+
Authorization: `Bearer ${token}`,
|
|
7
|
+
"Content-Type": "application/json",
|
|
8
|
+
},
|
|
6
9
|
};
|
|
7
10
|
if (body && Object.keys(body).length > 0)
|
|
8
11
|
init.body = JSON.stringify(body);
|
|
@@ -15,7 +18,12 @@ export default function raindrop(rl) {
|
|
|
15
18
|
rl.setName("raindrop");
|
|
16
19
|
rl.setVersion("0.1.0");
|
|
17
20
|
rl.setConnectionSchema({
|
|
18
|
-
accessToken: {
|
|
21
|
+
accessToken: {
|
|
22
|
+
type: "string",
|
|
23
|
+
required: true,
|
|
24
|
+
description: "Raindrop.io access token",
|
|
25
|
+
env: "RAINDROP_ACCESS_TOKEN",
|
|
26
|
+
},
|
|
19
27
|
});
|
|
20
28
|
const key = (ctx) => ctx.connection.config.accessToken;
|
|
21
29
|
// ── Bookmark ────────────────────────────────────────
|
|
@@ -25,16 +33,27 @@ export default function raindrop(rl) {
|
|
|
25
33
|
link: { type: "string", required: true, description: "URL to bookmark" },
|
|
26
34
|
collectionId: { type: "string", required: true },
|
|
27
35
|
title: { type: "string", required: false },
|
|
28
|
-
tags: {
|
|
29
|
-
|
|
36
|
+
tags: {
|
|
37
|
+
type: "string",
|
|
38
|
+
required: false,
|
|
39
|
+
description: "Comma-separated tags",
|
|
40
|
+
},
|
|
41
|
+
pleaseParse: {
|
|
42
|
+
type: "boolean",
|
|
43
|
+
required: false,
|
|
44
|
+
description: "Auto-parse page metadata",
|
|
45
|
+
},
|
|
30
46
|
},
|
|
31
47
|
async execute(input, ctx) {
|
|
32
48
|
const p = input;
|
|
33
|
-
const body = {
|
|
49
|
+
const body = {
|
|
50
|
+
link: p.link,
|
|
51
|
+
collection: { $id: Number(p.collectionId) },
|
|
52
|
+
};
|
|
34
53
|
if (p.title)
|
|
35
54
|
body.title = p.title;
|
|
36
55
|
if (p.tags)
|
|
37
|
-
body.tags = p.tags.split(",").map(t => t.trim());
|
|
56
|
+
body.tags = p.tags.split(",").map((t) => t.trim());
|
|
38
57
|
if (p.pleaseParse)
|
|
39
58
|
body.pleaseParse = {};
|
|
40
59
|
const data = (await apiRequest(key(ctx), "POST", "/raindrop", body));
|
|
@@ -71,7 +90,11 @@ export default function raindrop(rl) {
|
|
|
71
90
|
bookmarkId: { type: "string", required: true },
|
|
72
91
|
title: { type: "string", required: false },
|
|
73
92
|
link: { type: "string", required: false },
|
|
74
|
-
tags: {
|
|
93
|
+
tags: {
|
|
94
|
+
type: "string",
|
|
95
|
+
required: false,
|
|
96
|
+
description: "Comma-separated tags",
|
|
97
|
+
},
|
|
75
98
|
collectionId: { type: "string", required: false },
|
|
76
99
|
},
|
|
77
100
|
async execute(input, ctx) {
|
|
@@ -82,7 +105,7 @@ export default function raindrop(rl) {
|
|
|
82
105
|
if (p.link)
|
|
83
106
|
body.link = p.link;
|
|
84
107
|
if (p.tags)
|
|
85
|
-
body.tags = p.tags.split(",").map(t => t.trim());
|
|
108
|
+
body.tags = p.tags.split(",").map((t) => t.trim());
|
|
86
109
|
if (p.collectionId)
|
|
87
110
|
body.collection = { $id: Number(p.collectionId) };
|
|
88
111
|
const data = (await apiRequest(key(ctx), "PUT", `/raindrop/${p.bookmarkId}`, body));
|
|
@@ -102,7 +125,11 @@ export default function raindrop(rl) {
|
|
|
102
125
|
description: "Create a collection",
|
|
103
126
|
inputSchema: {
|
|
104
127
|
title: { type: "string", required: true },
|
|
105
|
-
parentId: {
|
|
128
|
+
parentId: {
|
|
129
|
+
type: "string",
|
|
130
|
+
required: false,
|
|
131
|
+
description: "Parent collection ID",
|
|
132
|
+
},
|
|
106
133
|
},
|
|
107
134
|
async execute(input, ctx) {
|
|
108
135
|
const p = input;
|
|
@@ -125,7 +152,11 @@ export default function raindrop(rl) {
|
|
|
125
152
|
rl.registerAction("collection.list", {
|
|
126
153
|
description: "List collections",
|
|
127
154
|
inputSchema: {
|
|
128
|
-
type: {
|
|
155
|
+
type: {
|
|
156
|
+
type: "string",
|
|
157
|
+
required: false,
|
|
158
|
+
description: "parent (default) or children",
|
|
159
|
+
},
|
|
129
160
|
limit: { type: "number", required: false },
|
|
130
161
|
},
|
|
131
162
|
async execute(input, ctx) {
|
|
@@ -184,20 +215,30 @@ export default function raindrop(rl) {
|
|
|
184
215
|
rl.registerAction("tag.delete", {
|
|
185
216
|
description: "Delete tags",
|
|
186
217
|
inputSchema: {
|
|
187
|
-
tags: {
|
|
218
|
+
tags: {
|
|
219
|
+
type: "string",
|
|
220
|
+
required: true,
|
|
221
|
+
description: "Comma-separated tag names to delete",
|
|
222
|
+
},
|
|
188
223
|
collectionId: { type: "string", required: false },
|
|
189
224
|
},
|
|
190
225
|
async execute(input, ctx) {
|
|
191
226
|
const p = input;
|
|
192
227
|
const endpoint = p.collectionId ? `/tags/${p.collectionId}` : "/tags";
|
|
193
|
-
return apiRequest(key(ctx), "DELETE", endpoint, {
|
|
228
|
+
return apiRequest(key(ctx), "DELETE", endpoint, {
|
|
229
|
+
tags: p.tags.split(",").map((t) => t.trim()),
|
|
230
|
+
});
|
|
194
231
|
},
|
|
195
232
|
});
|
|
196
233
|
// ── User ────────────────────────────────────────────
|
|
197
234
|
rl.registerAction("user.get", {
|
|
198
235
|
description: "Get user info (self or by ID)",
|
|
199
236
|
inputSchema: {
|
|
200
|
-
userId: {
|
|
237
|
+
userId: {
|
|
238
|
+
type: "string",
|
|
239
|
+
required: false,
|
|
240
|
+
description: "User ID (omit for self)",
|
|
241
|
+
},
|
|
201
242
|
},
|
|
202
243
|
async execute(input, ctx) {
|
|
203
244
|
const userId = input?.userId;
|
|
@@ -24,7 +24,12 @@ export default function reddit(rl) {
|
|
|
24
24
|
rl.setName("reddit");
|
|
25
25
|
rl.setVersion("0.1.0");
|
|
26
26
|
rl.setConnectionSchema({
|
|
27
|
-
accessToken: {
|
|
27
|
+
accessToken: {
|
|
28
|
+
type: "string",
|
|
29
|
+
required: false,
|
|
30
|
+
description: "Reddit OAuth2 access token (required for post/comment/profile actions)",
|
|
31
|
+
env: "REDDIT_ACCESS_TOKEN",
|
|
32
|
+
},
|
|
28
33
|
});
|
|
29
34
|
// ── Post ────────────────────────────────────────────
|
|
30
35
|
rl.registerAction("post.create", {
|
|
@@ -32,14 +37,30 @@ export default function reddit(rl) {
|
|
|
32
37
|
inputSchema: {
|
|
33
38
|
subreddit: { type: "string", required: true },
|
|
34
39
|
title: { type: "string", required: true },
|
|
35
|
-
kind: {
|
|
36
|
-
|
|
37
|
-
|
|
40
|
+
kind: {
|
|
41
|
+
type: "string",
|
|
42
|
+
required: true,
|
|
43
|
+
description: "self (text) or link",
|
|
44
|
+
},
|
|
45
|
+
text: {
|
|
46
|
+
type: "string",
|
|
47
|
+
required: false,
|
|
48
|
+
description: "Post body (for self posts)",
|
|
49
|
+
},
|
|
50
|
+
url: {
|
|
51
|
+
type: "string",
|
|
52
|
+
required: false,
|
|
53
|
+
description: "URL (for link posts)",
|
|
54
|
+
},
|
|
38
55
|
resubmit: { type: "boolean", required: false },
|
|
39
56
|
},
|
|
40
57
|
async execute(input, ctx) {
|
|
41
58
|
const p = input;
|
|
42
|
-
const qs = {
|
|
59
|
+
const qs = {
|
|
60
|
+
title: p.title,
|
|
61
|
+
sr: p.subreddit,
|
|
62
|
+
kind: p.kind,
|
|
63
|
+
};
|
|
43
64
|
if (p.kind === "self")
|
|
44
65
|
qs.text = p.text;
|
|
45
66
|
else
|
|
@@ -69,19 +90,29 @@ export default function reddit(rl) {
|
|
|
69
90
|
description: "List posts from a subreddit (no auth required for public subreddits)",
|
|
70
91
|
inputSchema: {
|
|
71
92
|
subreddit: { type: "string", required: true },
|
|
72
|
-
category: {
|
|
73
|
-
|
|
93
|
+
category: {
|
|
94
|
+
type: "string",
|
|
95
|
+
required: false,
|
|
96
|
+
description: "hot (default), new, rising, top, controversial",
|
|
97
|
+
},
|
|
98
|
+
limit: {
|
|
99
|
+
type: "number",
|
|
100
|
+
required: false,
|
|
101
|
+
description: "Max results (default 25)",
|
|
102
|
+
},
|
|
74
103
|
},
|
|
75
104
|
async execute(input, ctx) {
|
|
76
105
|
const p = (input ?? {});
|
|
77
106
|
const cat = p.category ?? "";
|
|
78
|
-
const endpoint = cat
|
|
107
|
+
const endpoint = cat
|
|
108
|
+
? `r/${p.subreddit}/${cat}.json`
|
|
109
|
+
: `r/${p.subreddit}.json`;
|
|
79
110
|
const qs = {};
|
|
80
111
|
if (p.limit)
|
|
81
112
|
qs.limit = p.limit;
|
|
82
113
|
const data = (await apiRequest(getToken(ctx), "GET", endpoint, qs));
|
|
83
114
|
const ld = data.data;
|
|
84
|
-
return ld.children.map(c => c.data);
|
|
115
|
+
return ld.children.map((c) => c.data);
|
|
85
116
|
},
|
|
86
117
|
});
|
|
87
118
|
rl.registerAction("post.delete", {
|
|
@@ -89,7 +120,9 @@ export default function reddit(rl) {
|
|
|
89
120
|
inputSchema: { postId: { type: "string", required: true } },
|
|
90
121
|
async execute(input, ctx) {
|
|
91
122
|
const { postId } = input;
|
|
92
|
-
await apiRequest(getToken(ctx), "POST", "api/del", {
|
|
123
|
+
await apiRequest(getToken(ctx), "POST", "api/del", {
|
|
124
|
+
id: `t3_${postId}`,
|
|
125
|
+
});
|
|
93
126
|
return { success: true };
|
|
94
127
|
},
|
|
95
128
|
});
|
|
@@ -97,8 +130,16 @@ export default function reddit(rl) {
|
|
|
97
130
|
description: "Search posts",
|
|
98
131
|
inputSchema: {
|
|
99
132
|
keyword: { type: "string", required: true },
|
|
100
|
-
subreddit: {
|
|
101
|
-
|
|
133
|
+
subreddit: {
|
|
134
|
+
type: "string",
|
|
135
|
+
required: false,
|
|
136
|
+
description: "Limit search to subreddit",
|
|
137
|
+
},
|
|
138
|
+
sort: {
|
|
139
|
+
type: "string",
|
|
140
|
+
required: false,
|
|
141
|
+
description: "relevance, hot, top, new, comments",
|
|
142
|
+
},
|
|
102
143
|
limit: { type: "number", required: false },
|
|
103
144
|
},
|
|
104
145
|
async execute(input, ctx) {
|
|
@@ -108,12 +149,14 @@ export default function reddit(rl) {
|
|
|
108
149
|
qs.sort = p.sort;
|
|
109
150
|
if (p.limit)
|
|
110
151
|
qs.limit = p.limit;
|
|
111
|
-
const endpoint = p.subreddit
|
|
152
|
+
const endpoint = p.subreddit
|
|
153
|
+
? `r/${p.subreddit}/search.json`
|
|
154
|
+
: "search.json";
|
|
112
155
|
if (p.subreddit)
|
|
113
156
|
qs.restrict_sr = "true";
|
|
114
157
|
const data = (await apiRequest(getToken(ctx), "GET", endpoint, qs));
|
|
115
158
|
const ld = data.data;
|
|
116
|
-
return ld.children.map(c => c.data);
|
|
159
|
+
return ld.children.map((c) => c.data);
|
|
117
160
|
},
|
|
118
161
|
});
|
|
119
162
|
// ── Comment ─────────────────────────────────────────
|
|
@@ -125,7 +168,10 @@ export default function reddit(rl) {
|
|
|
125
168
|
},
|
|
126
169
|
async execute(input, ctx) {
|
|
127
170
|
const { postId, text } = input;
|
|
128
|
-
const data = (await apiRequest(getToken(ctx), "POST", "api/comment", {
|
|
171
|
+
const data = (await apiRequest(getToken(ctx), "POST", "api/comment", {
|
|
172
|
+
thing_id: `t3_${postId}`,
|
|
173
|
+
text,
|
|
174
|
+
}));
|
|
129
175
|
const json = data.json;
|
|
130
176
|
const jd = json.data;
|
|
131
177
|
const things = jd.things;
|
|
@@ -140,7 +186,10 @@ export default function reddit(rl) {
|
|
|
140
186
|
},
|
|
141
187
|
async execute(input, ctx) {
|
|
142
188
|
const { commentId, text } = input;
|
|
143
|
-
const data = (await apiRequest(getToken(ctx), "POST", "api/comment", {
|
|
189
|
+
const data = (await apiRequest(getToken(ctx), "POST", "api/comment", {
|
|
190
|
+
thing_id: `t1_${commentId}`,
|
|
191
|
+
text,
|
|
192
|
+
}));
|
|
144
193
|
const json = data.json;
|
|
145
194
|
const jd = json.data;
|
|
146
195
|
const things = jd.things;
|
|
@@ -152,7 +201,9 @@ export default function reddit(rl) {
|
|
|
152
201
|
inputSchema: { commentId: { type: "string", required: true } },
|
|
153
202
|
async execute(input, ctx) {
|
|
154
203
|
const { commentId } = input;
|
|
155
|
-
await apiRequest(getToken(ctx), "POST", "api/del", {
|
|
204
|
+
await apiRequest(getToken(ctx), "POST", "api/del", {
|
|
205
|
+
id: `t1_${commentId}`,
|
|
206
|
+
});
|
|
156
207
|
return { success: true };
|
|
157
208
|
},
|
|
158
209
|
});
|
|
@@ -161,7 +212,11 @@ export default function reddit(rl) {
|
|
|
161
212
|
description: "Get subreddit info or rules (no auth required)",
|
|
162
213
|
inputSchema: {
|
|
163
214
|
subreddit: { type: "string", required: true },
|
|
164
|
-
content: {
|
|
215
|
+
content: {
|
|
216
|
+
type: "string",
|
|
217
|
+
required: false,
|
|
218
|
+
description: "about (default) or rules",
|
|
219
|
+
},
|
|
165
220
|
},
|
|
166
221
|
async execute(input, ctx) {
|
|
167
222
|
const p = input;
|
|
@@ -10,24 +10,62 @@ export default function rocketchat(rl) {
|
|
|
10
10
|
rl.setName("rocketchat");
|
|
11
11
|
rl.setVersion("0.1.0");
|
|
12
12
|
rl.setConnectionSchema({
|
|
13
|
-
domain: {
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
domain: {
|
|
14
|
+
type: "string",
|
|
15
|
+
required: true,
|
|
16
|
+
description: "Rocket.Chat server URL (e.g. https://chat.example.com)",
|
|
17
|
+
env: "ROCKETCHAT_DOMAIN",
|
|
18
|
+
},
|
|
19
|
+
userId: {
|
|
20
|
+
type: "string",
|
|
21
|
+
required: true,
|
|
22
|
+
description: "User ID",
|
|
23
|
+
env: "ROCKETCHAT_USER_ID",
|
|
24
|
+
},
|
|
25
|
+
authToken: {
|
|
26
|
+
type: "string",
|
|
27
|
+
required: true,
|
|
28
|
+
description: "Auth token",
|
|
29
|
+
env: "ROCKETCHAT_AUTH_TOKEN",
|
|
30
|
+
},
|
|
16
31
|
});
|
|
17
32
|
rl.registerAction("chat.postMessage", {
|
|
18
33
|
description: "Post a message to a Rocket.Chat channel or DM",
|
|
19
34
|
inputSchema: {
|
|
20
|
-
channel: {
|
|
35
|
+
channel: {
|
|
36
|
+
type: "string",
|
|
37
|
+
required: true,
|
|
38
|
+
description: "Channel name with prefix (e.g. #general or @username)",
|
|
39
|
+
},
|
|
21
40
|
text: { type: "string", required: true },
|
|
22
|
-
alias: {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
41
|
+
alias: {
|
|
42
|
+
type: "string",
|
|
43
|
+
required: false,
|
|
44
|
+
description: "Display name alias",
|
|
45
|
+
},
|
|
46
|
+
emoji: {
|
|
47
|
+
type: "string",
|
|
48
|
+
required: false,
|
|
49
|
+
description: "Emoji avatar (e.g. :smile:)",
|
|
50
|
+
},
|
|
51
|
+
avatar: {
|
|
52
|
+
type: "string",
|
|
53
|
+
required: false,
|
|
54
|
+
description: "Avatar image URL",
|
|
55
|
+
},
|
|
56
|
+
attachments: {
|
|
57
|
+
type: "object",
|
|
58
|
+
required: false,
|
|
59
|
+
description: "Array of attachment objects",
|
|
60
|
+
},
|
|
26
61
|
},
|
|
27
62
|
async execute(input, ctx) {
|
|
28
63
|
const p = input;
|
|
29
64
|
const conn = getConn(ctx);
|
|
30
|
-
const body = {
|
|
65
|
+
const body = {
|
|
66
|
+
channel: p.channel,
|
|
67
|
+
text: p.text,
|
|
68
|
+
};
|
|
31
69
|
if (p.alias)
|
|
32
70
|
body.alias = p.alias;
|
|
33
71
|
if (p.emoji)
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
function getConn(ctx) {
|
|
2
2
|
const c = ctx.connection.config;
|
|
3
|
-
return {
|
|
3
|
+
return {
|
|
4
|
+
url: c.url.replace(/\/$/, ""),
|
|
5
|
+
token: c.token,
|
|
6
|
+
};
|
|
4
7
|
}
|
|
5
8
|
async function apiRequest(conn, method, endpoint, body, qs) {
|
|
6
9
|
const url = new URL(`${conn.url}${endpoint}`);
|
|
@@ -26,15 +29,33 @@ export default function rundeck(rl) {
|
|
|
26
29
|
rl.setName("rundeck");
|
|
27
30
|
rl.setVersion("0.1.0");
|
|
28
31
|
rl.setConnectionSchema({
|
|
29
|
-
url: {
|
|
30
|
-
|
|
32
|
+
url: {
|
|
33
|
+
type: "string",
|
|
34
|
+
required: true,
|
|
35
|
+
description: "Rundeck server URL (e.g. https://rundeck.example.com)",
|
|
36
|
+
env: "RUNDECK_URL",
|
|
37
|
+
},
|
|
38
|
+
token: {
|
|
39
|
+
type: "string",
|
|
40
|
+
required: true,
|
|
41
|
+
description: "Rundeck API token",
|
|
42
|
+
env: "RUNDECK_TOKEN",
|
|
43
|
+
},
|
|
31
44
|
});
|
|
32
45
|
rl.registerAction("job.execute", {
|
|
33
46
|
description: "Execute a Rundeck job",
|
|
34
47
|
inputSchema: {
|
|
35
48
|
jobId: { type: "string", required: true },
|
|
36
|
-
arguments: {
|
|
37
|
-
|
|
49
|
+
arguments: {
|
|
50
|
+
type: "object",
|
|
51
|
+
required: false,
|
|
52
|
+
description: "Array of {name, value} argument pairs",
|
|
53
|
+
},
|
|
54
|
+
filter: {
|
|
55
|
+
type: "string",
|
|
56
|
+
required: false,
|
|
57
|
+
description: "Node filter string",
|
|
58
|
+
},
|
|
38
59
|
},
|
|
39
60
|
async execute(input, ctx) {
|
|
40
61
|
const p = input;
|