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
@@ -16,7 +16,12 @@ export default function oneSimpleApi(rl) {
16
16
  rl.setName("oneSimpleApi");
17
17
  rl.setVersion("0.1.0");
18
18
  rl.setConnectionSchema({
19
- apiToken: { type: "string", required: true, description: "OneSimpleAPI token", env: "ONE_SIMPLE_API_TOKEN" },
19
+ apiToken: {
20
+ type: "string",
21
+ required: true,
22
+ description: "OneSimpleAPI token",
23
+ env: "ONE_SIMPLE_API_TOKEN",
24
+ },
20
25
  });
21
26
  const key = (ctx) => ctx.connection.config.apiToken;
22
27
  // ── Website ─────────────────────────────────────────
@@ -24,8 +29,16 @@ export default function oneSimpleApi(rl) {
24
29
  description: "Generate a PDF from a webpage (returns URL to the PDF)",
25
30
  inputSchema: {
26
31
  url: { type: "string", required: true, description: "Webpage URL" },
27
- page: { type: "string", required: false, description: "Page size: A0-A6, Letter, Legal, Tabloid, Ledger" },
28
- force: { type: "boolean", required: false, description: "Force refresh (default false)" },
32
+ page: {
33
+ type: "string",
34
+ required: false,
35
+ description: "Page size: A0-A6, Letter, Legal, Tabloid, Ledger",
36
+ },
37
+ force: {
38
+ type: "boolean",
39
+ required: false,
40
+ description: "Force refresh (default false)",
41
+ },
29
42
  },
30
43
  async execute(input, ctx) {
31
44
  const p = (input ?? {});
@@ -40,9 +53,21 @@ export default function oneSimpleApi(rl) {
40
53
  description: "Take a screenshot of a webpage (returns URL to the image)",
41
54
  inputSchema: {
42
55
  url: { type: "string", required: true, description: "Webpage URL" },
43
- screen: { type: "string", required: false, description: "Screen size: phone, phone-landscape, tablet, tablet-landscape, retina" },
44
- fullpage: { type: "boolean", required: false, description: "Capture full page (default false)" },
45
- force: { type: "boolean", required: false, description: "Force refresh (default false)" },
56
+ screen: {
57
+ type: "string",
58
+ required: false,
59
+ description: "Screen size: phone, phone-landscape, tablet, tablet-landscape, retina",
60
+ },
61
+ fullpage: {
62
+ type: "boolean",
63
+ required: false,
64
+ description: "Capture full page (default false)",
65
+ },
66
+ force: {
67
+ type: "boolean",
68
+ required: false,
69
+ description: "Force refresh (default false)",
70
+ },
46
71
  },
47
72
  async execute(input, ctx) {
48
73
  const p = (input ?? {});
@@ -58,7 +83,11 @@ export default function oneSimpleApi(rl) {
58
83
  description: "Get SEO information from a webpage",
59
84
  inputSchema: {
60
85
  url: { type: "string", required: true, description: "Webpage URL" },
61
- headers: { type: "boolean", required: false, description: "Include response headers (default false)" },
86
+ headers: {
87
+ type: "boolean",
88
+ required: false,
89
+ description: "Include response headers (default false)",
90
+ },
62
91
  },
63
92
  async execute(input, ctx) {
64
93
  const p = (input ?? {});
@@ -72,7 +101,11 @@ export default function oneSimpleApi(rl) {
72
101
  rl.registerAction("socialProfile.instagram", {
73
102
  description: "Get details about an Instagram profile",
74
103
  inputSchema: {
75
- profile: { type: "string", required: true, description: "Instagram profile name" },
104
+ profile: {
105
+ type: "string",
106
+ required: true,
107
+ description: "Instagram profile name",
108
+ },
76
109
  },
77
110
  async execute(input, ctx) {
78
111
  const { profile } = input;
@@ -82,7 +115,11 @@ export default function oneSimpleApi(rl) {
82
115
  rl.registerAction("socialProfile.spotify", {
83
116
  description: "Get details about a Spotify artist",
84
117
  inputSchema: {
85
- profile: { type: "string", required: true, description: "Spotify artist name" },
118
+ profile: {
119
+ type: "string",
120
+ required: true,
121
+ description: "Spotify artist name",
122
+ },
86
123
  },
87
124
  async execute(input, ctx) {
88
125
  const { profile } = input;
@@ -93,14 +130,28 @@ export default function oneSimpleApi(rl) {
93
130
  rl.registerAction("information.exchangeRate", {
94
131
  description: "Convert a value between currencies",
95
132
  inputSchema: {
96
- value: { type: "string", required: true, description: "Value to convert" },
97
- fromCurrency: { type: "string", required: true, description: "Source currency (e.g. USD)" },
98
- toCurrency: { type: "string", required: true, description: "Target currency (e.g. EUR)" },
133
+ value: {
134
+ type: "string",
135
+ required: true,
136
+ description: "Value to convert",
137
+ },
138
+ fromCurrency: {
139
+ type: "string",
140
+ required: true,
141
+ description: "Source currency (e.g. USD)",
142
+ },
143
+ toCurrency: {
144
+ type: "string",
145
+ required: true,
146
+ description: "Target currency (e.g. EUR)",
147
+ },
99
148
  },
100
149
  async execute(input, ctx) {
101
150
  const { value, fromCurrency, toCurrency } = input;
102
151
  return apiRequest(key(ctx), "/exchange_rate", {
103
- from_value: value, from_currency: fromCurrency, to_currency: toCurrency,
152
+ from_value: value,
153
+ from_currency: fromCurrency,
154
+ to_currency: toCurrency,
104
155
  });
105
156
  },
106
157
  });
@@ -118,7 +169,11 @@ export default function oneSimpleApi(rl) {
118
169
  rl.registerAction("utility.validateEmail", {
119
170
  description: "Validate an email address",
120
171
  inputSchema: {
121
- email: { type: "string", required: true, description: "Email address to validate" },
172
+ email: {
173
+ type: "string",
174
+ required: true,
175
+ description: "Email address to validate",
176
+ },
122
177
  },
123
178
  async execute(input, ctx) {
124
179
  const { email } = input;
@@ -138,9 +193,21 @@ export default function oneSimpleApi(rl) {
138
193
  rl.registerAction("utility.qrCode", {
139
194
  description: "Generate a QR code (returns URL to the image)",
140
195
  inputSchema: {
141
- message: { type: "string", required: true, description: "Content for the QR code (URL, text, etc.)" },
142
- size: { type: "string", required: false, description: "Size: Small, Medium, Large" },
143
- format: { type: "string", required: false, description: "Format: PNG or SVG" },
196
+ message: {
197
+ type: "string",
198
+ required: true,
199
+ description: "Content for the QR code (URL, text, etc.)",
200
+ },
201
+ size: {
202
+ type: "string",
203
+ required: false,
204
+ description: "Size: Small, Medium, Large",
205
+ },
206
+ format: {
207
+ type: "string",
208
+ required: false,
209
+ description: "Format: PNG or SVG",
210
+ },
144
211
  },
145
212
  async execute(input, ctx) {
146
213
  const p = (input ?? {});
@@ -27,12 +27,16 @@ function registerCrud(rl, resource, plural, key, createSchema) {
27
27
  rl.registerAction(`${resource}.create`, {
28
28
  description: `Create a ${resource}`,
29
29
  inputSchema: createSchema,
30
- async execute(input, ctx) { return apiRequest(key(ctx), "POST", plural, input); },
30
+ async execute(input, ctx) {
31
+ return apiRequest(key(ctx), "POST", plural, input);
32
+ },
31
33
  });
32
34
  rl.registerAction(`${resource}.get`, {
33
35
  description: `Get a ${resource} by ID`,
34
36
  inputSchema: { id: { type: "string", required: true } },
35
- async execute(input, ctx) { return apiRequest(key(ctx), "GET", `${plural}/${input.id}`); },
37
+ async execute(input, ctx) {
38
+ return apiRequest(key(ctx), "GET", `${plural}/${input.id}`);
39
+ },
36
40
  });
37
41
  rl.registerAction(`${resource}.list`, {
38
42
  description: `List ${plural}`,
@@ -45,7 +49,10 @@ function registerCrud(rl, resource, plural, key, createSchema) {
45
49
  });
46
50
  rl.registerAction(`${resource}.update`, {
47
51
  description: `Update a ${resource}`,
48
- inputSchema: { id: { type: "string", required: true }, data: { type: "object", required: true } },
52
+ inputSchema: {
53
+ id: { type: "string", required: true },
54
+ data: { type: "object", required: true },
55
+ },
49
56
  async execute(input, ctx) {
50
57
  const p = input;
51
58
  return apiRequest(key(ctx), "PUT", `${plural}/${p.id}`, p.data);
@@ -63,25 +70,52 @@ function registerCrud(rl, resource, plural, key, createSchema) {
63
70
  export default function onfleet(rl) {
64
71
  rl.setName("onfleet");
65
72
  rl.setVersion("0.1.0");
66
- rl.setConnectionSchema({ apiKey: { type: "string", required: true, description: "Onfleet API key", env: "ONFLEET_API_KEY" } });
73
+ rl.setConnectionSchema({
74
+ apiKey: {
75
+ type: "string",
76
+ required: true,
77
+ description: "Onfleet API key",
78
+ env: "ONFLEET_API_KEY",
79
+ },
80
+ });
67
81
  const key = (ctx) => ctx.connection.config.apiKey;
68
82
  // ── Organization ────────────────────────────────────
69
83
  rl.registerAction("organization.get", {
70
84
  description: "Get organization details",
71
85
  inputSchema: {},
72
- async execute(_input, ctx) { return apiRequest(key(ctx), "GET", "organization"); },
86
+ async execute(_input, ctx) {
87
+ return apiRequest(key(ctx), "GET", "organization");
88
+ },
73
89
  });
74
90
  // ── Task ────────────────────────────────────────────
75
91
  rl.registerAction("task.create", {
76
92
  description: "Create a task",
77
93
  inputSchema: {
78
- destination: { type: "object", required: true, description: "{ address: { unparsed: string } } or { address: { number, street, city, country } }" },
79
- recipients: { type: "object", required: false, description: "Array of { name, phone }" },
80
- completeAfter: { type: "number", required: false, description: "Unix ms timestamp" },
81
- completeBefore: { type: "number", required: false, description: "Unix ms timestamp" },
94
+ destination: {
95
+ type: "object",
96
+ required: true,
97
+ description: "{ address: { unparsed: string } } or { address: { number, street, city, country } }",
98
+ },
99
+ recipients: {
100
+ type: "object",
101
+ required: false,
102
+ description: "Array of { name, phone }",
103
+ },
104
+ completeAfter: {
105
+ type: "number",
106
+ required: false,
107
+ description: "Unix ms timestamp",
108
+ },
109
+ completeBefore: {
110
+ type: "number",
111
+ required: false,
112
+ description: "Unix ms timestamp",
113
+ },
82
114
  notes: { type: "string", required: false },
83
115
  },
84
- async execute(input, ctx) { return apiRequest(key(ctx), "POST", "tasks", input); },
116
+ async execute(input, ctx) {
117
+ return apiRequest(key(ctx), "POST", "tasks", input);
118
+ },
85
119
  });
86
120
  rl.registerAction("task.get", {
87
121
  description: "Get a task by ID",
@@ -94,7 +128,11 @@ export default function onfleet(rl) {
94
128
  });
95
129
  rl.registerAction("task.list", {
96
130
  description: "List tasks",
97
- inputSchema: { from: { type: "number", required: false, description: "Unix ms start" }, to: { type: "number", required: false }, limit: { type: "number", required: false } },
131
+ inputSchema: {
132
+ from: { type: "number", required: false, description: "Unix ms start" },
133
+ to: { type: "number", required: false },
134
+ limit: { type: "number", required: false },
135
+ },
98
136
  async execute(input, ctx) {
99
137
  const p = (input ?? {});
100
138
  const qs = {};
@@ -111,7 +149,10 @@ export default function onfleet(rl) {
111
149
  });
112
150
  rl.registerAction("task.update", {
113
151
  description: "Update a task",
114
- inputSchema: { id: { type: "string", required: true }, data: { type: "object", required: true } },
152
+ inputSchema: {
153
+ id: { type: "string", required: true },
154
+ data: { type: "object", required: true },
155
+ },
115
156
  async execute(input, ctx) {
116
157
  const p = input;
117
158
  return apiRequest(key(ctx), "PUT", `tasks/${p.id}`, p.data);
@@ -127,10 +168,16 @@ export default function onfleet(rl) {
127
168
  });
128
169
  rl.registerAction("task.complete", {
129
170
  description: "Force-complete a task",
130
- inputSchema: { id: { type: "string", required: true }, success: { type: "boolean", required: true }, notes: { type: "string", required: false } },
171
+ inputSchema: {
172
+ id: { type: "string", required: true },
173
+ success: { type: "boolean", required: true },
174
+ notes: { type: "string", required: false },
175
+ },
131
176
  async execute(input, ctx) {
132
177
  const p = input;
133
- const body = { completionDetails: { success: p.success } };
178
+ const body = {
179
+ completionDetails: { success: p.success },
180
+ };
134
181
  if (p.notes)
135
182
  body.completionDetails.notes = p.notes;
136
183
  await apiRequest(key(ctx), "POST", `tasks/${p.id}/complete`, body);
@@ -151,8 +198,13 @@ export default function onfleet(rl) {
151
198
  // ── Hub ─────────────────────────────────────────────
152
199
  rl.registerAction("hub.create", {
153
200
  description: "Create a hub",
154
- inputSchema: { name: { type: "string", required: true }, address: { type: "object", required: true } },
155
- async execute(input, ctx) { return apiRequest(key(ctx), "POST", "hubs", input); },
201
+ inputSchema: {
202
+ name: { type: "string", required: true },
203
+ address: { type: "object", required: true },
204
+ },
205
+ async execute(input, ctx) {
206
+ return apiRequest(key(ctx), "POST", "hubs", input);
207
+ },
156
208
  });
157
209
  rl.registerAction("hub.list", {
158
210
  description: "List hubs",
@@ -165,7 +217,10 @@ export default function onfleet(rl) {
165
217
  });
166
218
  rl.registerAction("hub.update", {
167
219
  description: "Update a hub",
168
- inputSchema: { id: { type: "string", required: true }, data: { type: "object", required: true } },
220
+ inputSchema: {
221
+ id: { type: "string", required: true },
222
+ data: { type: "object", required: true },
223
+ },
169
224
  async execute(input, ctx) {
170
225
  const p = input;
171
226
  return apiRequest(key(ctx), "PUT", `hubs/${p.id}`, p.data);
@@ -174,23 +229,42 @@ export default function onfleet(rl) {
174
229
  // ── Team ────────────────────────────────────────────
175
230
  registerCrud(rl, "team", "teams", key, {
176
231
  name: { type: "string", required: true },
177
- workers: { type: "object", required: true, description: "Array of worker IDs" },
178
- managers: { type: "object", required: true, description: "Array of admin IDs" },
232
+ workers: {
233
+ type: "object",
234
+ required: true,
235
+ description: "Array of worker IDs",
236
+ },
237
+ managers: {
238
+ type: "object",
239
+ required: true,
240
+ description: "Array of admin IDs",
241
+ },
179
242
  });
180
243
  // ── Recipient ───────────────────────────────────────
181
244
  rl.registerAction("recipient.create", {
182
245
  description: "Create a recipient",
183
- inputSchema: { name: { type: "string", required: true }, phone: { type: "string", required: true }, notes: { type: "string", required: false } },
184
- async execute(input, ctx) { return apiRequest(key(ctx), "POST", "recipients", input); },
246
+ inputSchema: {
247
+ name: { type: "string", required: true },
248
+ phone: { type: "string", required: true },
249
+ notes: { type: "string", required: false },
250
+ },
251
+ async execute(input, ctx) {
252
+ return apiRequest(key(ctx), "POST", "recipients", input);
253
+ },
185
254
  });
186
255
  rl.registerAction("recipient.get", {
187
256
  description: "Get a recipient by ID",
188
257
  inputSchema: { id: { type: "string", required: true } },
189
- async execute(input, ctx) { return apiRequest(key(ctx), "GET", `recipients/${input.id}`); },
258
+ async execute(input, ctx) {
259
+ return apiRequest(key(ctx), "GET", `recipients/${input.id}`);
260
+ },
190
261
  });
191
262
  rl.registerAction("recipient.update", {
192
263
  description: "Update a recipient",
193
- inputSchema: { id: { type: "string", required: true }, data: { type: "object", required: true } },
264
+ inputSchema: {
265
+ id: { type: "string", required: true },
266
+ data: { type: "object", required: true },
267
+ },
194
268
  async execute(input, ctx) {
195
269
  const p = input;
196
270
  return apiRequest(key(ctx), "PUT", `recipients/${p.id}`, p.data);
@@ -200,7 +274,11 @@ export default function onfleet(rl) {
200
274
  rl.registerAction("container.get", {
201
275
  description: "Get a container by type and ID",
202
276
  inputSchema: {
203
- containerType: { type: "string", required: true, description: "workers, teams, or organizations" },
277
+ containerType: {
278
+ type: "string",
279
+ required: true,
280
+ description: "workers, teams, or organizations",
281
+ },
204
282
  containerId: { type: "string", required: true },
205
283
  },
206
284
  async execute(input, ctx) {
@@ -211,9 +289,17 @@ export default function onfleet(rl) {
211
289
  rl.registerAction("container.updateTasks", {
212
290
  description: "Update tasks in a container",
213
291
  inputSchema: {
214
- containerType: { type: "string", required: true, description: "workers, teams, or organizations" },
292
+ containerType: {
293
+ type: "string",
294
+ required: true,
295
+ description: "workers, teams, or organizations",
296
+ },
215
297
  containerId: { type: "string", required: true },
216
- tasks: { type: "object", required: true, description: "Array of task IDs" },
298
+ tasks: {
299
+ type: "object",
300
+ required: true,
301
+ description: "Array of task IDs",
302
+ },
217
303
  },
218
304
  async execute(input, ctx) {
219
305
  const p = input;
@@ -224,8 +310,16 @@ export default function onfleet(rl) {
224
310
  description: "Get driver time estimates for a team",
225
311
  inputSchema: {
226
312
  id: { type: "string", required: true },
227
- dropoffLocation: { type: "string", required: false, description: "lng,lat" },
228
- pickupLocation: { type: "string", required: false, description: "lng,lat" },
313
+ dropoffLocation: {
314
+ type: "string",
315
+ required: false,
316
+ description: "lng,lat",
317
+ },
318
+ pickupLocation: {
319
+ type: "string",
320
+ required: false,
321
+ description: "lng,lat",
322
+ },
229
323
  },
230
324
  async execute(input, ctx) {
231
325
  const { id, ...qs } = input;
@@ -234,7 +328,10 @@ export default function onfleet(rl) {
234
328
  });
235
329
  rl.registerAction("team.autoDispatch", {
236
330
  description: "Auto-dispatch tasks for a team",
237
- inputSchema: { id: { type: "string", required: true }, data: { type: "object", required: false } },
331
+ inputSchema: {
332
+ id: { type: "string", required: true },
333
+ data: { type: "object", required: false },
334
+ },
238
335
  async execute(input, ctx) {
239
336
  const p = input;
240
337
  return apiRequest(key(ctx), "POST", `teams/${p.id}/dispatch`, p.data ?? {});
@@ -243,12 +340,22 @@ export default function onfleet(rl) {
243
340
  // ── Destination ─────────────────────────────────────
244
341
  rl.registerAction("destination.create", {
245
342
  description: "Create a destination",
246
- inputSchema: { address: { type: "object", required: true, description: "{ unparsed: string } or { number, street, city, country }" } },
247
- async execute(input, ctx) { return apiRequest(key(ctx), "POST", "destinations", input); },
343
+ inputSchema: {
344
+ address: {
345
+ type: "object",
346
+ required: true,
347
+ description: "{ unparsed: string } or { number, street, city, country }",
348
+ },
349
+ },
350
+ async execute(input, ctx) {
351
+ return apiRequest(key(ctx), "POST", "destinations", input);
352
+ },
248
353
  });
249
354
  rl.registerAction("destination.get", {
250
355
  description: "Get a destination by ID",
251
356
  inputSchema: { id: { type: "string", required: true } },
252
- async execute(input, ctx) { return apiRequest(key(ctx), "GET", `destinations/${input.id}`); },
357
+ async execute(input, ctx) {
358
+ return apiRequest(key(ctx), "GET", `destinations/${input.id}`);
359
+ },
253
360
  });
254
361
  }
@@ -5,24 +5,61 @@ export default function openThesaurus(rl) {
5
5
  rl.registerAction("synonyms.get", {
6
6
  description: "Get synonyms for a German word (OpenThesaurus API, no auth required)",
7
7
  inputSchema: {
8
- text: { type: "string", required: true, description: "German word to look up" },
9
- baseform: { type: "boolean", required: false, description: "Return base form of search term" },
10
- similar: { type: "boolean", required: false, description: "Return similarly written words" },
11
- startswith: { type: "boolean", required: false, description: "Only match words starting with term" },
12
- substring: { type: "boolean", required: false, description: "Match partial words" },
13
- subsynsets: { type: "boolean", required: false, description: "Include sub-terms" },
14
- supersynsets: { type: "boolean", required: false, description: "Include generic terms" },
8
+ text: {
9
+ type: "string",
10
+ required: true,
11
+ description: "German word to look up",
12
+ },
13
+ baseform: {
14
+ type: "boolean",
15
+ required: false,
16
+ description: "Return base form of search term",
17
+ },
18
+ similar: {
19
+ type: "boolean",
20
+ required: false,
21
+ description: "Return similarly written words",
22
+ },
23
+ startswith: {
24
+ type: "boolean",
25
+ required: false,
26
+ description: "Only match words starting with term",
27
+ },
28
+ substring: {
29
+ type: "boolean",
30
+ required: false,
31
+ description: "Match partial words",
32
+ },
33
+ subsynsets: {
34
+ type: "boolean",
35
+ required: false,
36
+ description: "Include sub-terms",
37
+ },
38
+ supersynsets: {
39
+ type: "boolean",
40
+ required: false,
41
+ description: "Include generic terms",
42
+ },
15
43
  },
16
44
  async execute(input) {
17
45
  const p = (input ?? {});
18
46
  const url = new URL("https://www.openthesaurus.de/synonyme/search");
19
47
  url.searchParams.set("q", p.text);
20
48
  url.searchParams.set("format", "application/json");
21
- for (const key of ["baseform", "similar", "startswith", "substring", "subsynsets", "supersynsets"]) {
49
+ for (const key of [
50
+ "baseform",
51
+ "similar",
52
+ "startswith",
53
+ "substring",
54
+ "subsynsets",
55
+ "supersynsets",
56
+ ]) {
22
57
  if (p[key])
23
58
  url.searchParams.set(key, "true");
24
59
  }
25
- const res = await fetch(url.toString(), { headers: { "User-Agent": "runline" } });
60
+ const res = await fetch(url.toString(), {
61
+ headers: { "User-Agent": "runline" },
62
+ });
26
63
  if (!res.ok)
27
64
  throw new Error(`OpenThesaurus error ${res.status}: ${await res.text()}`);
28
65
  const data = (await res.json());
@@ -1,12 +1,32 @@
1
1
  const BASE = "https://api.openweathermap.org/data/2.5";
2
2
  const locationSchema = {
3
- cityName: { type: "string", required: false, description: "City name (e.g. berlin,de)" },
4
- cityId: { type: "number", required: false, description: "City ID from OpenWeatherMap" },
3
+ cityName: {
4
+ type: "string",
5
+ required: false,
6
+ description: "City name (e.g. berlin,de)",
7
+ },
8
+ cityId: {
9
+ type: "number",
10
+ required: false,
11
+ description: "City ID from OpenWeatherMap",
12
+ },
5
13
  lat: { type: "string", required: false, description: "Latitude" },
6
14
  lon: { type: "string", required: false, description: "Longitude" },
7
- zip: { type: "string", required: false, description: "Zip code (e.g. 10115,de)" },
8
- units: { type: "string", required: false, description: "Units: metric (default), imperial, standard" },
9
- lang: { type: "string", required: false, description: "Language code (e.g. en, de)" },
15
+ zip: {
16
+ type: "string",
17
+ required: false,
18
+ description: "Zip code (e.g. 10115,de)",
19
+ },
20
+ units: {
21
+ type: "string",
22
+ required: false,
23
+ description: "Units: metric (default), imperial, standard",
24
+ },
25
+ lang: {
26
+ type: "string",
27
+ required: false,
28
+ description: "Language code (e.g. en, de)",
29
+ },
10
30
  };
11
31
  function buildQs(apiKey, input) {
12
32
  const qs = new URLSearchParams();
@@ -30,7 +50,12 @@ export default function openWeatherMap(rl) {
30
50
  rl.setName("openweathermap");
31
51
  rl.setVersion("0.1.0");
32
52
  rl.setConnectionSchema({
33
- apiKey: { type: "string", required: true, description: "OpenWeatherMap API key", env: "OPENWEATHERMAP_API_KEY" },
53
+ apiKey: {
54
+ type: "string",
55
+ required: true,
56
+ description: "OpenWeatherMap API key",
57
+ env: "OPENWEATHERMAP_API_KEY",
58
+ },
34
59
  });
35
60
  const key = (ctx) => ctx.connection.config.apiKey;
36
61
  rl.registerAction("weather.current", {
@@ -21,7 +21,12 @@ export default function oura(rl) {
21
21
  rl.setName("oura");
22
22
  rl.setVersion("0.1.0");
23
23
  rl.setConnectionSchema({
24
- accessToken: { type: "string", required: true, description: "Oura personal access token", env: "OURA_ACCESS_TOKEN" },
24
+ accessToken: {
25
+ type: "string",
26
+ required: true,
27
+ description: "Oura personal access token",
28
+ env: "OURA_ACCESS_TOKEN",
29
+ },
25
30
  });
26
31
  const key = (ctx) => ctx.connection.config.accessToken;
27
32
  rl.registerAction("profile.get", {
@@ -32,17 +37,41 @@ export default function oura(rl) {
32
37
  },
33
38
  });
34
39
  const summaryEndpoints = [
35
- { name: "summary.activity", path: "/usercollection/daily_activity", description: "Get daily activity summary" },
36
- { name: "summary.readiness", path: "/usercollection/daily_readiness", description: "Get daily readiness summary" },
37
- { name: "summary.sleep", path: "/usercollection/daily_sleep", description: "Get daily sleep summary" },
40
+ {
41
+ name: "summary.activity",
42
+ path: "/usercollection/daily_activity",
43
+ description: "Get daily activity summary",
44
+ },
45
+ {
46
+ name: "summary.readiness",
47
+ path: "/usercollection/daily_readiness",
48
+ description: "Get daily readiness summary",
49
+ },
50
+ {
51
+ name: "summary.sleep",
52
+ path: "/usercollection/daily_sleep",
53
+ description: "Get daily sleep summary",
54
+ },
38
55
  ];
39
56
  for (const ep of summaryEndpoints) {
40
57
  rl.registerAction(ep.name, {
41
58
  description: ep.description,
42
59
  inputSchema: {
43
- startDate: { type: "string", required: false, description: "Start date (YYYY-MM-DD), defaults to a week ago" },
44
- endDate: { type: "string", required: false, description: "End date (YYYY-MM-DD), defaults to today" },
45
- limit: { type: "number", required: false, description: "Max results (default all)" },
60
+ startDate: {
61
+ type: "string",
62
+ required: false,
63
+ description: "Start date (YYYY-MM-DD), defaults to a week ago",
64
+ },
65
+ endDate: {
66
+ type: "string",
67
+ required: false,
68
+ description: "End date (YYYY-MM-DD), defaults to today",
69
+ },
70
+ limit: {
71
+ type: "number",
72
+ required: false,
73
+ description: "Max results (default all)",
74
+ },
46
75
  },
47
76
  async execute(input, ctx) {
48
77
  const p = (input ?? {});