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
@@ -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: { id: { type: "string", required: true, description: "Field ID" } },
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: { limit: { type: "number", required: false, description: "Max results" } },
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}`, { label });
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: { id: { type: "string", required: true, description: "Field ID" } },
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: { type: "string", required: true, description: "Subscriber 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: { type: "object", required: false, description: "Custom field key-value pairs" },
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: { limit: { type: "number", required: false, description: "Max results" } },
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: { type: "string", required: false, description: "Filter: active, cancelled" },
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: { type: "string", required: true, description: "Sequence ID" },
151
- email: { type: "string", required: true, description: "Subscriber email" },
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: { limit: { type: "number", required: false, description: "Max results" } },
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: { type: "string", required: true, description: "Sequence ID" },
185
- subscriberState: { type: "string", required: false, description: "Filter: active, cancelled" },
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: { type: "string", required: true, description: "Comma-separated tag 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: { limit: { type: "number", required: false, description: "Max results" } },
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: { type: "string", required: true, description: "Subscriber 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: { type: "string", required: true, description: "Subscriber 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`, { email });
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 ? { name: { type: "string", required: true, description: `${resource} name` } } : {}),
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: { [idParam]: { type: "string", required: true, description: `${resource} ID` } },
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: { limit: { type: "number", required: false, description: "Max results" } },
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]: { type: "string", required: true, description: `${resource} ID` },
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: { [idParam]: { type: "string", required: true, description: `${resource} ID` } },
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: { type: "string", required: true, description: "Copper API key", env: "COPPER_API_KEY" },
106
- email: { type: "string", required: true, description: "Copper user email", env: "COPPER_EMAIL" },
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: { type: "string", required: true, description: "Customer source ID" },
113
- primaryContactId: { type: "string", required: true, description: "Primary contact ID" },
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: { limit: { type: "number", required: false, description: "Max results" } },
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: { limit: { type: "number", required: false, description: "Max results" } },
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 && Object.keys(body).length > 0 && method !== "GET" && method !== "DELETE") {
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: { type: "string", required: true, description: "Analyzer ID" },
52
- dataType: { type: "string", required: true, description: "Observable type (domain, ip, url, mail, hash, filename, fqdn, uri_path, user-agent, regexp, registry, mail_subject, other)" },
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: { type: "number", required: false, description: "TLP level: 0=white, 1=green, 2=amber (default), 3=red" },
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: { type: "number", required: false, description: "Wait for report (seconds). If set, blocks until report is ready." },
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: { type: "string", required: true, description: "Responder ID" },
105
- entityType: { type: "string", required: true, description: "Entity type: case, alert, case_artifact, case_task, case_task_log" },
106
- data: { type: "object", required: true, description: "Entity data object (must include _type matching entityType)" },
107
- tlp: { type: "number", required: false, description: "TLP level (default: 2)" },
108
- pap: { type: "number", required: false, description: "PAP level (default: 2)" },
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 = { _type: entityType, ...data };
153
+ const entityData = {
154
+ _type: entityType,
155
+ ...data,
156
+ };
115
157
  const body = {
116
158
  responderId,
117
159
  dataType: `thehive:${entityType}`,