runline 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/dist/plugins/actionNetwork/src/index.js +118 -25
  2. package/dist/plugins/activeCampaign/src/index.js +184 -38
  3. package/dist/plugins/adalo/src/index.js +40 -8
  4. package/dist/plugins/affinity/src/index.js +100 -20
  5. package/dist/plugins/agileCrm/src/index.js +115 -27
  6. package/dist/plugins/airtable/src/index.js +94 -19
  7. package/dist/plugins/airtop/src/index.js +266 -62
  8. package/dist/plugins/apiTemplateIo/src/index.js +25 -5
  9. package/dist/plugins/asana/src/index.js +195 -41
  10. package/dist/plugins/autopilot/src/index.js +39 -8
  11. package/dist/plugins/bambooHr/src/index.js +109 -22
  12. package/dist/plugins/bannerbear/src/index.js +36 -8
  13. package/dist/plugins/baserow/src/index.js +35 -7
  14. package/dist/plugins/beeminder/src/index.js +198 -40
  15. package/dist/plugins/bitly/src/index.js +46 -10
  16. package/dist/plugins/bitwarden/src/index.js +167 -36
  17. package/dist/plugins/box/src/index.js +172 -37
  18. package/dist/plugins/brandfetch/src/index.js +5 -1
  19. package/dist/plugins/brevo/src/index.js +136 -29
  20. package/dist/plugins/bubble/src/index.js +76 -17
  21. package/dist/plugins/chargebee/src/index.js +35 -7
  22. package/dist/plugins/circleci/src/index.js +50 -10
  23. package/dist/plugins/ciscoWebex/src/index.js +131 -27
  24. package/dist/plugins/clearbit/src/index.js +76 -17
  25. package/dist/plugins/clickup/src/index.js +500 -107
  26. package/dist/plugins/clockify/src/index.js +229 -47
  27. package/dist/plugins/cloudflare/src/index.js +28 -6
  28. package/dist/plugins/cockpit/src/index.js +54 -12
  29. package/dist/plugins/coda/src/index.js +81 -19
  30. package/dist/plugins/coingecko/src/index.js +157 -33
  31. package/dist/plugins/contentful/src/index.js +85 -17
  32. package/dist/plugins/convertkit/src/index.js +74 -18
  33. package/dist/plugins/copper/src/index.js +59 -11
  34. package/dist/plugins/cortex/src/index.js +55 -13
  35. package/dist/plugins/currents/src/index.js +310 -71
  36. package/dist/plugins/customerIo/src/index.js +112 -23
  37. package/dist/plugins/databricks/src/index.js +549 -115
  38. package/dist/plugins/deepl/src/index.js +26 -6
  39. package/dist/plugins/demio/src/index.js +56 -11
  40. package/dist/plugins/dhl/src/index.js +16 -3
  41. package/dist/plugins/discord/src/index.js +141 -31
  42. package/dist/plugins/discourse/src/index.js +136 -31
  43. package/dist/plugins/disqus/src/index.js +96 -20
  44. package/dist/plugins/docker/src/index.js +20 -4
  45. package/dist/plugins/drift/src/index.js +19 -5
  46. package/dist/plugins/dropbox/src/index.js +139 -30
  47. package/dist/plugins/dropcontact/src/index.js +21 -4
  48. package/dist/plugins/egoi/src/index.js +61 -15
  49. package/dist/plugins/elasticsearch/src/index.js +59 -13
  50. package/dist/plugins/emelia/src/index.js +95 -19
  51. package/dist/plugins/erpnext/src/index.js +74 -15
  52. package/dist/plugins/facebookGraph/src/index.js +52 -11
  53. package/dist/plugins/freshdesk/src/index.js +220 -48
  54. package/dist/plugins/freshservice/src/index.js +39 -9
  55. package/dist/plugins/freshworksCrm/src/index.js +58 -12
  56. package/dist/plugins/getresponse/src/index.js +87 -18
  57. package/dist/plugins/ghost/src/index.js +114 -26
  58. package/dist/plugins/github/src/index.js +483 -109
  59. package/dist/plugins/gitlab/src/index.js +193 -45
  60. package/dist/plugins/gong/src/index.js +68 -14
  61. package/dist/plugins/gotify/src/index.js +43 -9
  62. package/dist/plugins/gotowebinar/src/index.js +233 -47
  63. package/dist/plugins/grafana/src/index.js +92 -21
  64. package/dist/plugins/graphql/src/index.js +38 -8
  65. package/dist/plugins/grist/src/index.js +52 -10
  66. package/dist/plugins/hackernews/src/index.js +32 -6
  67. package/dist/plugins/halopsa/src/index.js +131 -26
  68. package/dist/plugins/harvest/src/index.js +182 -42
  69. package/dist/plugins/helpscout/src/index.js +153 -31
  70. package/dist/plugins/highlevel/src/index.js +291 -58
  71. package/dist/plugins/homeAssistant/src/index.js +124 -26
  72. package/dist/plugins/hubspot/src/index.js +163 -29
  73. package/dist/plugins/humanticAi/src/index.js +54 -5
  74. package/dist/plugins/hunter/src/index.js +21 -4
  75. package/dist/plugins/intercom/src/index.js +95 -20
  76. package/dist/plugins/iterable/src/index.js +96 -20
  77. package/dist/plugins/jenkins/src/index.js +75 -17
  78. package/dist/plugins/jira/src/index.js +193 -43
  79. package/dist/plugins/keap/src/index.js +222 -56
  80. package/dist/plugins/kobotoolbox/src/index.js +113 -25
  81. package/dist/plugins/lemlist/src/index.js +79 -18
  82. package/dist/plugins/linear/src/index.js +86 -19
  83. package/dist/plugins/lingvanex/src/index.js +38 -8
  84. package/dist/plugins/linkedin/src/index.js +37 -8
  85. package/dist/plugins/lonescale/src/index.js +41 -9
  86. package/dist/plugins/magento/src/index.js +98 -27
  87. package/dist/plugins/mailcheck/src/index.js +11 -2
  88. package/dist/plugins/mailchimp/src/index.js +193 -42
  89. package/dist/plugins/mailerlite/src/index.js +61 -12
  90. package/dist/plugins/mailgun/src/index.js +39 -7
  91. package/dist/plugins/mailjet/src/index.js +141 -30
  92. package/dist/plugins/mandrill/src/index.js +67 -14
  93. package/dist/plugins/marketstack/src/index.js +56 -10
  94. package/dist/plugins/matrix/src/index.js +97 -20
  95. package/dist/plugins/mattermost/src/index.js +124 -26
  96. package/dist/plugins/mautic/src/index.js +129 -26
  97. package/dist/plugins/medium/src/index.js +64 -13
  98. package/dist/plugins/messagebird/src/index.js +80 -15
  99. package/dist/plugins/metabase/src/index.js +57 -12
  100. package/dist/plugins/misp/src/index.js +135 -33
  101. package/dist/plugins/mocean/src/index.js +33 -7
  102. package/dist/plugins/monday/src/index.js +97 -23
  103. package/dist/plugins/monicaCrm/src/index.js +112 -23
  104. package/dist/plugins/msg91/src/index.js +11 -2
  105. package/dist/plugins/nasa/src/index.js +108 -21
  106. package/dist/plugins/netlify/src/index.js +28 -6
  107. package/dist/plugins/netscalerAdc/src/index.js +144 -29
  108. package/dist/plugins/nextcloud/src/index.js +103 -20
  109. package/dist/plugins/nocodb/src/index.js +57 -11
  110. package/dist/plugins/notion/src/index.js +148 -37
  111. package/dist/plugins/npm/src/index.js +59 -12
  112. package/dist/plugins/odoo/src/index.js +102 -20
  113. package/dist/plugins/okta/src/index.js +50 -10
  114. package/dist/plugins/oneSimpleApi/src/index.js +84 -17
  115. package/dist/plugins/onfleet/src/index.js +139 -32
  116. package/dist/plugins/openThesaurus/src/index.js +46 -9
  117. package/dist/plugins/openweathermap/src/index.js +31 -6
  118. package/dist/plugins/oura/src/index.js +36 -7
  119. package/dist/plugins/paddle/src/index.js +80 -17
  120. package/dist/plugins/pagerduty/src/index.js +53 -12
  121. package/dist/plugins/paypal/src/index.js +51 -11
  122. package/dist/plugins/peekalink/src/index.js +12 -3
  123. package/dist/plugins/phantombuster/src/index.js +39 -8
  124. package/dist/plugins/philipsHue/src/index.js +64 -13
  125. package/dist/plugins/pipedrive/src/index.js +167 -45
  126. package/dist/plugins/plivo/src/index.js +43 -8
  127. package/dist/plugins/postbin/src/index.js +9 -2
  128. package/dist/plugins/posthog/src/index.js +50 -13
  129. package/dist/plugins/profitwell/src/index.js +24 -5
  130. package/dist/plugins/pushbullet/src/index.js +45 -9
  131. package/dist/plugins/pushcut/src/index.js +31 -6
  132. package/dist/plugins/pushover/src/index.js +51 -10
  133. package/dist/plugins/quickbase/src/index.js +66 -13
  134. package/dist/plugins/quickbooks/src/index.js +86 -19
  135. package/dist/plugins/quickchart/src/index.js +35 -7
  136. package/dist/plugins/raindrop/src/index.js +54 -13
  137. package/dist/plugins/reddit/src/index.js +73 -18
  138. package/dist/plugins/rocketchat/src/index.js +47 -9
  139. package/dist/plugins/rundeck/src/index.js +26 -5
  140. package/dist/plugins/salesforce/src/index.js +161 -31
  141. package/dist/plugins/salesmate/src/index.js +75 -16
  142. package/dist/plugins/securityScorecard/src/index.js +73 -15
  143. package/dist/plugins/segment/src/index.js +21 -4
  144. package/dist/plugins/sendgrid/src/index.js +102 -24
  145. package/dist/plugins/sendy/src/index.js +54 -11
  146. package/dist/plugins/sentry/src/index.js +174 -34
  147. package/dist/plugins/servicenow/src/index.js +120 -27
  148. package/dist/plugins/shopify/src/index.js +53 -12
  149. package/dist/plugins/signl4/src/index.js +16 -3
  150. package/dist/plugins/slack/src/index.js +407 -105
  151. package/dist/plugins/sms77/src/index.js +26 -5
  152. package/dist/plugins/splunk/src/index.js +186 -45
  153. package/dist/plugins/spotify/src/index.js +265 -66
  154. package/dist/plugins/stackby/src/index.js +18 -6
  155. package/dist/plugins/storyblok/src/index.js +57 -11
  156. package/dist/plugins/strapi/src/index.js +63 -12
  157. package/dist/plugins/strava/src/index.js +58 -13
  158. package/dist/plugins/stripe/src/index.js +143 -30
  159. package/dist/plugins/supabase/src/index.js +49 -10
  160. package/dist/plugins/syncromsp/src/index.js +245 -67
  161. package/dist/plugins/tapfiliate/src/index.js +57 -14
  162. package/dist/plugins/telegram/src/index.js +202 -39
  163. package/dist/plugins/thehive/src/index.js +271 -66
  164. package/dist/plugins/thehiveProject/src/index.js +457 -89
  165. package/dist/plugins/todoist/src/index.js +326 -77
  166. package/dist/plugins/travisci/src/index.js +35 -8
  167. package/dist/plugins/trello/src/index.js +204 -46
  168. package/dist/plugins/twake/src/index.js +10 -2
  169. package/dist/plugins/twilio/src/index.js +56 -11
  170. package/dist/plugins/twist/src/index.js +241 -48
  171. package/dist/plugins/twitter/src/index.js +128 -30
  172. package/dist/plugins/unleashedSoftware/src/index.js +30 -6
  173. package/dist/plugins/uplead/src/index.js +9 -2
  174. package/dist/plugins/uproc/src/index.js +31 -6
  175. package/dist/plugins/uptimerobot/src/index.js +119 -25
  176. package/dist/plugins/urlscanio/src/index.js +25 -6
  177. package/dist/plugins/vero/src/index.js +68 -13
  178. package/dist/plugins/vonage/src/index.js +32 -6
  179. package/dist/plugins/wekan/src/index.js +297 -52
  180. package/dist/plugins/woocommerce/src/index.js +57 -12
  181. package/dist/plugins/wordpress/src/index.js +94 -18
  182. package/dist/plugins/xero/src/index.js +79 -13
  183. package/dist/plugins/yourls/src/index.js +33 -6
  184. package/dist/plugins/zammad/src/index.js +139 -36
  185. package/dist/plugins/zendesk/src/index.js +201 -48
  186. package/dist/plugins/zoho/src/index.js +88 -21
  187. package/dist/plugins/zoom/src/index.js +41 -7
  188. package/dist/plugins/zulip/src/index.js +101 -20
  189. package/package.json +1 -1
@@ -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: { type: "string", required: true, description: "Discourse instance URL (e.g. https://forum.example.com)", env: "DISCOURSE_HOST" },
44
- apiKey: { type: "string", required: true, description: "Discourse API key", env: "DISCOURSE_API_KEY" },
45
- apiUsername: { type: "string", required: false, description: "API username (default: system)", env: "DISCOURSE_API_USERNAME", default: "system" },
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: { type: "string", required: true, description: "Hex color (e.g. 0088CC)" },
53
- textColor: { type: "string", required: true, description: "Text hex color (e.g. FFFFFF)" },
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", { name, color, text_color: textColor }));
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: { limit: { type: "number", required: false, description: "Max results" } },
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.categories;
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: { type: "string", required: true, description: "Category ID" },
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: { type: "string", required: false, description: "New text color" },
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: { name: { type: "string", required: true, description: "Group name" } },
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", { group: { name } }));
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: { name: { type: "string", required: true, description: "Group name" } },
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: { limit: { type: "number", required: false, description: "Max results" } },
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: { type: "string", required: false, description: "Topic title (required for new topics)" },
139
- content: { type: "string", required: true, description: "Post content (raw markdown)" },
140
- categoryId: { type: "number", required: false, description: "Category ID (for new topics)" },
141
- topicId: { type: "number", required: false, description: "Topic ID (for replies)" },
142
- replyToPostNumber: { type: "number", required: false, description: "Post number to reply to" },
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: { postId: { type: "string", required: true, description: "Post ID" } },
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: { limit: { type: "number", required: false, description: "Max results" } },
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: { type: "string", required: true, description: "New content (raw markdown)" },
182
- editReason: { type: "string", required: false, description: "Reason for edit" },
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: { type: "boolean", required: false, description: "Create as active (default: false)" },
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: { type: "string", required: false, description: "External (SSO) ID" },
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: { type: "string", required: false, description: "Filter: active (default), new, staff, suspended, blocked" },
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: { type: "boolean", required: false, description: "Include email addresses" },
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: { type: "string", required: true, description: "Comma-separated 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: { type: "string", required: true, description: "Comma-separated 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`, { usernames });
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(), { headers: { Accept: "application/json" } });
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: { type: "string", required: true, description: "Disqus API key (access token)", env: "DISQUS_API_KEY" },
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: { type: "string", required: true, description: "Forum short name (ID)" },
55
- related: { type: "array", required: false, description: "Relations to include (e.g. ['author'])" },
56
- attach: { type: "array", required: false, description: "Attach fields (e.g. ['counters'])" },
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: { type: "string", required: true, description: "Forum short name" },
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: { type: "string", required: false, description: "Sort order: asc or desc" },
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: { type: "string", required: false, description: "Filter posts since (ISO datetime or unix timestamp)" },
78
- related: { type: "array", required: false, description: "Relations (e.g. ['thread'])" },
79
- include: { type: "array", required: false, description: "Include filters (e.g. ['approved'])" },
80
- filters: { type: "array", required: false, description: "Post filters (e.g. ['Is_Flagged'])" },
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: { type: "string", required: true, description: "Forum short name" },
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: { type: "string", required: false, description: "Sort order: asc or desc" },
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: { type: "string", required: true, description: "Forum short name" },
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: { type: "string", required: false, description: "Sort order: asc or desc" },
123
- since: { type: "string", required: false, description: "Filter since (ISO datetime or unix timestamp)" },
124
- related: { type: "array", required: false, description: "Relations (e.g. ['author', 'forum'])" },
125
- include: { type: "array", required: false, description: "Thread states (e.g. ['open', 'closed', 'killed'])" },
126
- thread: { type: "string", required: false, description: "Look up specific thread by ID or ident" },
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: { type: "boolean", description: "Include stopped containers", required: false },
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: { type: "string", description: "Container ID or name", required: true },
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: { type: "string", description: "Container ID or name", required: true },
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: { type: "string", description: "Image name (e.g. nginx:latest)", required: true },
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 && Object.keys(body).length > 0 && method !== "GET" && method !== "DELETE") {
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: { type: "string", required: true, description: "Drift API access token", env: "DRIFT_ACCESS_TOKEN" },
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", { attributes: attrs }));
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: { contactId: { type: "string", required: true, description: "Contact ID" } },
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: { contactId: { type: "string", required: true, description: "Contact ID" } },
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 };