runline 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/plugins/actionNetwork/src/index.js +118 -25
- package/dist/plugins/activeCampaign/src/index.js +184 -38
- package/dist/plugins/adalo/src/index.js +40 -8
- package/dist/plugins/affinity/src/index.js +100 -20
- package/dist/plugins/agileCrm/src/index.js +115 -27
- package/dist/plugins/airtable/src/index.js +94 -19
- package/dist/plugins/airtop/src/index.js +266 -62
- package/dist/plugins/apiTemplateIo/src/index.js +25 -5
- package/dist/plugins/asana/src/index.js +195 -41
- package/dist/plugins/autopilot/src/index.js +39 -8
- package/dist/plugins/bambooHr/src/index.js +109 -22
- package/dist/plugins/bannerbear/src/index.js +36 -8
- package/dist/plugins/baserow/src/index.js +35 -7
- package/dist/plugins/beeminder/src/index.js +198 -40
- package/dist/plugins/bitly/src/index.js +46 -10
- package/dist/plugins/bitwarden/src/index.js +167 -36
- package/dist/plugins/box/src/index.js +172 -37
- package/dist/plugins/brandfetch/src/index.js +5 -1
- package/dist/plugins/brevo/src/index.js +136 -29
- package/dist/plugins/bubble/src/index.js +76 -17
- package/dist/plugins/chargebee/src/index.js +35 -7
- package/dist/plugins/circleci/src/index.js +50 -10
- package/dist/plugins/ciscoWebex/src/index.js +131 -27
- package/dist/plugins/clearbit/src/index.js +76 -17
- package/dist/plugins/clickup/src/index.js +500 -107
- package/dist/plugins/clockify/src/index.js +229 -47
- package/dist/plugins/cloudflare/src/index.js +28 -6
- package/dist/plugins/cockpit/src/index.js +54 -12
- package/dist/plugins/coda/src/index.js +81 -19
- package/dist/plugins/coingecko/src/index.js +157 -33
- package/dist/plugins/contentful/src/index.js +85 -17
- package/dist/plugins/convertkit/src/index.js +74 -18
- package/dist/plugins/copper/src/index.js +59 -11
- package/dist/plugins/cortex/src/index.js +55 -13
- package/dist/plugins/currents/src/index.js +310 -71
- package/dist/plugins/customerIo/src/index.js +112 -23
- package/dist/plugins/databricks/src/index.js +549 -115
- package/dist/plugins/deepl/src/index.js +26 -6
- package/dist/plugins/demio/src/index.js +56 -11
- package/dist/plugins/dhl/src/index.js +16 -3
- package/dist/plugins/discord/src/index.js +141 -31
- package/dist/plugins/discourse/src/index.js +136 -31
- package/dist/plugins/disqus/src/index.js +96 -20
- package/dist/plugins/docker/src/index.js +20 -4
- package/dist/plugins/drift/src/index.js +19 -5
- package/dist/plugins/dropbox/src/index.js +139 -30
- package/dist/plugins/dropcontact/src/index.js +21 -4
- package/dist/plugins/egoi/src/index.js +61 -15
- package/dist/plugins/elasticsearch/src/index.js +59 -13
- package/dist/plugins/emelia/src/index.js +95 -19
- package/dist/plugins/erpnext/src/index.js +74 -15
- package/dist/plugins/facebookGraph/src/index.js +52 -11
- package/dist/plugins/freshdesk/src/index.js +220 -48
- package/dist/plugins/freshservice/src/index.js +39 -9
- package/dist/plugins/freshworksCrm/src/index.js +58 -12
- package/dist/plugins/getresponse/src/index.js +87 -18
- package/dist/plugins/ghost/src/index.js +114 -26
- package/dist/plugins/github/src/index.js +483 -109
- package/dist/plugins/gitlab/src/index.js +193 -45
- package/dist/plugins/gong/src/index.js +68 -14
- package/dist/plugins/gotify/src/index.js +43 -9
- package/dist/plugins/gotowebinar/src/index.js +233 -47
- package/dist/plugins/grafana/src/index.js +92 -21
- package/dist/plugins/graphql/src/index.js +38 -8
- package/dist/plugins/grist/src/index.js +52 -10
- package/dist/plugins/hackernews/src/index.js +32 -6
- package/dist/plugins/halopsa/src/index.js +131 -26
- package/dist/plugins/harvest/src/index.js +182 -42
- package/dist/plugins/helpscout/src/index.js +153 -31
- package/dist/plugins/highlevel/src/index.js +291 -58
- package/dist/plugins/homeAssistant/src/index.js +124 -26
- package/dist/plugins/hubspot/src/index.js +163 -29
- package/dist/plugins/humanticAi/src/index.js +54 -5
- package/dist/plugins/hunter/src/index.js +21 -4
- package/dist/plugins/intercom/src/index.js +95 -20
- package/dist/plugins/iterable/src/index.js +96 -20
- package/dist/plugins/jenkins/src/index.js +75 -17
- package/dist/plugins/jira/src/index.js +193 -43
- package/dist/plugins/keap/src/index.js +222 -56
- package/dist/plugins/kobotoolbox/src/index.js +113 -25
- package/dist/plugins/lemlist/src/index.js +79 -18
- package/dist/plugins/linear/src/index.js +86 -19
- package/dist/plugins/lingvanex/src/index.js +38 -8
- package/dist/plugins/linkedin/src/index.js +37 -8
- package/dist/plugins/lonescale/src/index.js +41 -9
- package/dist/plugins/magento/src/index.js +98 -27
- package/dist/plugins/mailcheck/src/index.js +11 -2
- package/dist/plugins/mailchimp/src/index.js +193 -42
- package/dist/plugins/mailerlite/src/index.js +61 -12
- package/dist/plugins/mailgun/src/index.js +39 -7
- package/dist/plugins/mailjet/src/index.js +141 -30
- package/dist/plugins/mandrill/src/index.js +67 -14
- package/dist/plugins/marketstack/src/index.js +56 -10
- package/dist/plugins/matrix/src/index.js +97 -20
- package/dist/plugins/mattermost/src/index.js +124 -26
- package/dist/plugins/mautic/src/index.js +129 -26
- package/dist/plugins/medium/src/index.js +64 -13
- package/dist/plugins/messagebird/src/index.js +80 -15
- package/dist/plugins/metabase/src/index.js +57 -12
- package/dist/plugins/misp/src/index.js +135 -33
- package/dist/plugins/mocean/src/index.js +33 -7
- package/dist/plugins/monday/src/index.js +97 -23
- package/dist/plugins/monicaCrm/src/index.js +112 -23
- package/dist/plugins/msg91/src/index.js +11 -2
- package/dist/plugins/nasa/src/index.js +108 -21
- package/dist/plugins/netlify/src/index.js +28 -6
- package/dist/plugins/netscalerAdc/src/index.js +144 -29
- package/dist/plugins/nextcloud/src/index.js +103 -20
- package/dist/plugins/nocodb/src/index.js +57 -11
- package/dist/plugins/notion/src/index.js +148 -37
- package/dist/plugins/npm/src/index.js +59 -12
- package/dist/plugins/odoo/src/index.js +102 -20
- package/dist/plugins/okta/src/index.js +50 -10
- package/dist/plugins/oneSimpleApi/src/index.js +84 -17
- package/dist/plugins/onfleet/src/index.js +139 -32
- package/dist/plugins/openThesaurus/src/index.js +46 -9
- package/dist/plugins/openweathermap/src/index.js +31 -6
- package/dist/plugins/oura/src/index.js +36 -7
- package/dist/plugins/paddle/src/index.js +80 -17
- package/dist/plugins/pagerduty/src/index.js +53 -12
- package/dist/plugins/paypal/src/index.js +51 -11
- package/dist/plugins/peekalink/src/index.js +12 -3
- package/dist/plugins/phantombuster/src/index.js +39 -8
- package/dist/plugins/philipsHue/src/index.js +64 -13
- package/dist/plugins/pipedrive/src/index.js +167 -45
- package/dist/plugins/plivo/src/index.js +43 -8
- package/dist/plugins/postbin/src/index.js +9 -2
- package/dist/plugins/posthog/src/index.js +50 -13
- package/dist/plugins/profitwell/src/index.js +24 -5
- package/dist/plugins/pushbullet/src/index.js +45 -9
- package/dist/plugins/pushcut/src/index.js +31 -6
- package/dist/plugins/pushover/src/index.js +51 -10
- package/dist/plugins/quickbase/src/index.js +66 -13
- package/dist/plugins/quickbooks/src/index.js +86 -19
- package/dist/plugins/quickchart/src/index.js +35 -7
- package/dist/plugins/raindrop/src/index.js +54 -13
- package/dist/plugins/reddit/src/index.js +73 -18
- package/dist/plugins/rocketchat/src/index.js +47 -9
- package/dist/plugins/rundeck/src/index.js +26 -5
- package/dist/plugins/salesforce/src/index.js +161 -31
- package/dist/plugins/salesmate/src/index.js +75 -16
- package/dist/plugins/securityScorecard/src/index.js +73 -15
- package/dist/plugins/segment/src/index.js +21 -4
- package/dist/plugins/sendgrid/src/index.js +102 -24
- package/dist/plugins/sendy/src/index.js +54 -11
- package/dist/plugins/sentry/src/index.js +174 -34
- package/dist/plugins/servicenow/src/index.js +120 -27
- package/dist/plugins/shopify/src/index.js +53 -12
- package/dist/plugins/signl4/src/index.js +16 -3
- package/dist/plugins/slack/src/index.js +407 -105
- package/dist/plugins/sms77/src/index.js +26 -5
- package/dist/plugins/splunk/src/index.js +186 -45
- package/dist/plugins/spotify/src/index.js +265 -66
- package/dist/plugins/stackby/src/index.js +18 -6
- package/dist/plugins/storyblok/src/index.js +57 -11
- package/dist/plugins/strapi/src/index.js +63 -12
- package/dist/plugins/strava/src/index.js +58 -13
- package/dist/plugins/stripe/src/index.js +143 -30
- package/dist/plugins/supabase/src/index.js +49 -10
- package/dist/plugins/syncromsp/src/index.js +245 -67
- package/dist/plugins/tapfiliate/src/index.js +57 -14
- package/dist/plugins/telegram/src/index.js +202 -39
- package/dist/plugins/thehive/src/index.js +271 -66
- package/dist/plugins/thehiveProject/src/index.js +457 -89
- package/dist/plugins/todoist/src/index.js +326 -77
- package/dist/plugins/travisci/src/index.js +35 -8
- package/dist/plugins/trello/src/index.js +204 -46
- package/dist/plugins/twake/src/index.js +10 -2
- package/dist/plugins/twilio/src/index.js +56 -11
- package/dist/plugins/twist/src/index.js +241 -48
- package/dist/plugins/twitter/src/index.js +128 -30
- package/dist/plugins/unleashedSoftware/src/index.js +30 -6
- package/dist/plugins/uplead/src/index.js +9 -2
- package/dist/plugins/uproc/src/index.js +31 -6
- package/dist/plugins/uptimerobot/src/index.js +119 -25
- package/dist/plugins/urlscanio/src/index.js +25 -6
- package/dist/plugins/vero/src/index.js +68 -13
- package/dist/plugins/vonage/src/index.js +32 -6
- package/dist/plugins/wekan/src/index.js +297 -52
- package/dist/plugins/woocommerce/src/index.js +57 -12
- package/dist/plugins/wordpress/src/index.js +94 -18
- package/dist/plugins/xero/src/index.js +79 -13
- package/dist/plugins/yourls/src/index.js +33 -6
- package/dist/plugins/zammad/src/index.js +139 -36
- package/dist/plugins/zendesk/src/index.js +201 -48
- package/dist/plugins/zoho/src/index.js +88 -21
- package/dist/plugins/zoom/src/index.js +41 -7
- package/dist/plugins/zulip/src/index.js +101 -20
- package/package.json +1 -1
|
@@ -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: {
|
|
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: {
|
|
28
|
-
|
|
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: {
|
|
44
|
-
|
|
45
|
-
|
|
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: {
|
|
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: {
|
|
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: {
|
|
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: {
|
|
97
|
-
|
|
98
|
-
|
|
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,
|
|
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: {
|
|
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: {
|
|
142
|
-
|
|
143
|
-
|
|
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) {
|
|
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) {
|
|
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: {
|
|
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({
|
|
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) {
|
|
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: {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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) {
|
|
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: {
|
|
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: {
|
|
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: {
|
|
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 = {
|
|
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: {
|
|
155
|
-
|
|
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: {
|
|
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: {
|
|
178
|
-
|
|
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: {
|
|
184
|
-
|
|
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) {
|
|
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: {
|
|
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: {
|
|
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: {
|
|
292
|
+
containerType: {
|
|
293
|
+
type: "string",
|
|
294
|
+
required: true,
|
|
295
|
+
description: "workers, teams, or organizations",
|
|
296
|
+
},
|
|
215
297
|
containerId: { type: "string", required: true },
|
|
216
|
-
tasks: {
|
|
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: {
|
|
228
|
-
|
|
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: {
|
|
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: {
|
|
247
|
-
|
|
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) {
|
|
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: {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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 [
|
|
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(), {
|
|
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: {
|
|
4
|
-
|
|
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: {
|
|
8
|
-
|
|
9
|
-
|
|
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: {
|
|
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: {
|
|
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
|
-
{
|
|
36
|
-
|
|
37
|
-
|
|
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: {
|
|
44
|
-
|
|
45
|
-
|
|
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 ?? {});
|