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
|
@@ -22,13 +22,20 @@ export default function emelia(rl) {
|
|
|
22
22
|
rl.setName("emelia");
|
|
23
23
|
rl.setVersion("0.1.0");
|
|
24
24
|
rl.setConnectionSchema({
|
|
25
|
-
apiKey: {
|
|
25
|
+
apiKey: {
|
|
26
|
+
type: "string",
|
|
27
|
+
required: true,
|
|
28
|
+
description: "Emelia API key",
|
|
29
|
+
env: "EMELIA_API_KEY",
|
|
30
|
+
},
|
|
26
31
|
});
|
|
27
32
|
const key = (ctx) => ctx.connection.config.apiKey;
|
|
28
33
|
// ── Campaign ────────────────────────────────────────
|
|
29
34
|
rl.registerAction("campaign.create", {
|
|
30
35
|
description: "Create a new campaign",
|
|
31
|
-
inputSchema: {
|
|
36
|
+
inputSchema: {
|
|
37
|
+
name: { type: "string", required: true, description: "Campaign name" },
|
|
38
|
+
},
|
|
32
39
|
async execute(input, ctx) {
|
|
33
40
|
const data = await gql(key(ctx), `
|
|
34
41
|
mutation createCampaign($name: String!) {
|
|
@@ -39,7 +46,13 @@ export default function emelia(rl) {
|
|
|
39
46
|
});
|
|
40
47
|
rl.registerAction("campaign.get", {
|
|
41
48
|
description: "Get a campaign by ID",
|
|
42
|
-
inputSchema: {
|
|
49
|
+
inputSchema: {
|
|
50
|
+
campaignId: {
|
|
51
|
+
type: "string",
|
|
52
|
+
required: true,
|
|
53
|
+
description: "Campaign ID",
|
|
54
|
+
},
|
|
55
|
+
},
|
|
43
56
|
async execute(input, ctx) {
|
|
44
57
|
const data = await gql(key(ctx), `
|
|
45
58
|
query campaign($id: ID!) {
|
|
@@ -54,7 +67,9 @@ export default function emelia(rl) {
|
|
|
54
67
|
});
|
|
55
68
|
rl.registerAction("campaign.list", {
|
|
56
69
|
description: "List all campaigns",
|
|
57
|
-
inputSchema: {
|
|
70
|
+
inputSchema: {
|
|
71
|
+
limit: { type: "number", required: false, description: "Max results" },
|
|
72
|
+
},
|
|
58
73
|
async execute(input, ctx) {
|
|
59
74
|
const { limit } = (input ?? {});
|
|
60
75
|
const data = await gql(key(ctx), `
|
|
@@ -73,11 +88,19 @@ export default function emelia(rl) {
|
|
|
73
88
|
rl.registerAction("campaign.addContact", {
|
|
74
89
|
description: "Add a contact to a campaign",
|
|
75
90
|
inputSchema: {
|
|
76
|
-
campaignId: {
|
|
91
|
+
campaignId: {
|
|
92
|
+
type: "string",
|
|
93
|
+
required: true,
|
|
94
|
+
description: "Campaign ID",
|
|
95
|
+
},
|
|
77
96
|
email: { type: "string", required: true, description: "Contact email" },
|
|
78
97
|
firstName: { type: "string", required: false, description: "First name" },
|
|
79
98
|
lastName: { type: "string", required: false, description: "Last name" },
|
|
80
|
-
customFields: {
|
|
99
|
+
customFields: {
|
|
100
|
+
type: "object",
|
|
101
|
+
required: false,
|
|
102
|
+
description: "Custom fields as key-value pairs",
|
|
103
|
+
},
|
|
81
104
|
},
|
|
82
105
|
async execute(input, ctx) {
|
|
83
106
|
const { campaignId, email, firstName, lastName, customFields } = input;
|
|
@@ -97,7 +120,13 @@ export default function emelia(rl) {
|
|
|
97
120
|
});
|
|
98
121
|
rl.registerAction("campaign.start", {
|
|
99
122
|
description: "Start a campaign",
|
|
100
|
-
inputSchema: {
|
|
123
|
+
inputSchema: {
|
|
124
|
+
campaignId: {
|
|
125
|
+
type: "string",
|
|
126
|
+
required: true,
|
|
127
|
+
description: "Campaign ID",
|
|
128
|
+
},
|
|
129
|
+
},
|
|
101
130
|
async execute(input, ctx) {
|
|
102
131
|
await gql(key(ctx), `mutation startCampaign($id: ID!) { startCampaign(id: $id) }`, { id: input.campaignId });
|
|
103
132
|
return { success: true };
|
|
@@ -105,7 +134,13 @@ export default function emelia(rl) {
|
|
|
105
134
|
});
|
|
106
135
|
rl.registerAction("campaign.pause", {
|
|
107
136
|
description: "Pause a campaign",
|
|
108
|
-
inputSchema: {
|
|
137
|
+
inputSchema: {
|
|
138
|
+
campaignId: {
|
|
139
|
+
type: "string",
|
|
140
|
+
required: true,
|
|
141
|
+
description: "Campaign ID",
|
|
142
|
+
},
|
|
143
|
+
},
|
|
109
144
|
async execute(input, ctx) {
|
|
110
145
|
await gql(key(ctx), `mutation pauseCampaign($id: ID!) { pauseCampaign(id: $id) }`, { id: input.campaignId });
|
|
111
146
|
return { success: true };
|
|
@@ -114,26 +149,59 @@ export default function emelia(rl) {
|
|
|
114
149
|
rl.registerAction("campaign.duplicate", {
|
|
115
150
|
description: "Duplicate a campaign",
|
|
116
151
|
inputSchema: {
|
|
117
|
-
campaignId: {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
152
|
+
campaignId: {
|
|
153
|
+
type: "string",
|
|
154
|
+
required: true,
|
|
155
|
+
description: "Source campaign ID",
|
|
156
|
+
},
|
|
157
|
+
name: {
|
|
158
|
+
type: "string",
|
|
159
|
+
required: true,
|
|
160
|
+
description: "New campaign name",
|
|
161
|
+
},
|
|
162
|
+
copySettings: {
|
|
163
|
+
type: "boolean",
|
|
164
|
+
required: false,
|
|
165
|
+
description: "Copy settings (default: true)",
|
|
166
|
+
},
|
|
167
|
+
copyMails: {
|
|
168
|
+
type: "boolean",
|
|
169
|
+
required: false,
|
|
170
|
+
description: "Copy mail templates (default: true)",
|
|
171
|
+
},
|
|
172
|
+
copyContacts: {
|
|
173
|
+
type: "boolean",
|
|
174
|
+
required: false,
|
|
175
|
+
description: "Copy contacts (default: false)",
|
|
176
|
+
},
|
|
177
|
+
copyProvider: {
|
|
178
|
+
type: "boolean",
|
|
179
|
+
required: false,
|
|
180
|
+
description: "Copy provider (default: true)",
|
|
181
|
+
},
|
|
123
182
|
},
|
|
124
183
|
async execute(input, ctx) {
|
|
125
|
-
const { campaignId, name, copySettings = true, copyMails = true, copyContacts = false, copyProvider = true } = input;
|
|
184
|
+
const { campaignId, name, copySettings = true, copyMails = true, copyContacts = false, copyProvider = true, } = input;
|
|
126
185
|
const data = await gql(key(ctx), `
|
|
127
186
|
mutation duplicateCampaign($fromId: ID!, $name: String!, $copySettings: Boolean!, $copyMails: Boolean!, $copyContacts: Boolean!, $copyProvider: Boolean!) {
|
|
128
187
|
duplicateCampaign(fromId: $fromId, name: $name, copySettings: $copySettings, copyMails: $copyMails, copyContacts: $copyContacts, copyProvider: $copyProvider)
|
|
129
|
-
}`, {
|
|
188
|
+
}`, {
|
|
189
|
+
fromId: campaignId,
|
|
190
|
+
name,
|
|
191
|
+
copySettings,
|
|
192
|
+
copyMails,
|
|
193
|
+
copyContacts,
|
|
194
|
+
copyProvider,
|
|
195
|
+
});
|
|
130
196
|
return { _id: data.duplicateCampaign };
|
|
131
197
|
},
|
|
132
198
|
});
|
|
133
199
|
// ── Contact List ────────────────────────────────────
|
|
134
200
|
rl.registerAction("contactList.list", {
|
|
135
201
|
description: "List all contact lists",
|
|
136
|
-
inputSchema: {
|
|
202
|
+
inputSchema: {
|
|
203
|
+
limit: { type: "number", required: false, description: "Max results" },
|
|
204
|
+
},
|
|
137
205
|
async execute(input, ctx) {
|
|
138
206
|
const { limit } = (input ?? {});
|
|
139
207
|
const data = await gql(key(ctx), `
|
|
@@ -149,11 +217,19 @@ export default function emelia(rl) {
|
|
|
149
217
|
rl.registerAction("contactList.addContact", {
|
|
150
218
|
description: "Add a contact to a contact list",
|
|
151
219
|
inputSchema: {
|
|
152
|
-
contactListId: {
|
|
220
|
+
contactListId: {
|
|
221
|
+
type: "string",
|
|
222
|
+
required: true,
|
|
223
|
+
description: "Contact list ID",
|
|
224
|
+
},
|
|
153
225
|
email: { type: "string", required: true, description: "Contact email" },
|
|
154
226
|
firstName: { type: "string", required: false, description: "First name" },
|
|
155
227
|
lastName: { type: "string", required: false, description: "Last name" },
|
|
156
|
-
customFields: {
|
|
228
|
+
customFields: {
|
|
229
|
+
type: "object",
|
|
230
|
+
required: false,
|
|
231
|
+
description: "Custom fields as key-value pairs",
|
|
232
|
+
},
|
|
157
233
|
},
|
|
158
234
|
async execute(input, ctx) {
|
|
159
235
|
const { contactListId, email, firstName, lastName, customFields } = input;
|
|
@@ -14,7 +14,10 @@ async function apiRequest(host, apiKey, apiSecret, method, endpoint, body, qs) {
|
|
|
14
14
|
Accept: "application/json",
|
|
15
15
|
},
|
|
16
16
|
};
|
|
17
|
-
if (body &&
|
|
17
|
+
if (body &&
|
|
18
|
+
Object.keys(body).length > 0 &&
|
|
19
|
+
method !== "GET" &&
|
|
20
|
+
method !== "DELETE") {
|
|
18
21
|
opts.body = JSON.stringify(body);
|
|
19
22
|
}
|
|
20
23
|
const res = await fetch(url.toString(), opts);
|
|
@@ -38,15 +41,38 @@ export default function erpnext(rl) {
|
|
|
38
41
|
rl.setName("erpnext");
|
|
39
42
|
rl.setVersion("0.1.0");
|
|
40
43
|
rl.setConnectionSchema({
|
|
41
|
-
host: {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
+
host: {
|
|
45
|
+
type: "string",
|
|
46
|
+
required: true,
|
|
47
|
+
description: "ERPNext instance URL (e.g. https://mysite.erpnext.com)",
|
|
48
|
+
env: "ERPNEXT_HOST",
|
|
49
|
+
},
|
|
50
|
+
apiKey: {
|
|
51
|
+
type: "string",
|
|
52
|
+
required: true,
|
|
53
|
+
description: "API key",
|
|
54
|
+
env: "ERPNEXT_API_KEY",
|
|
55
|
+
},
|
|
56
|
+
apiSecret: {
|
|
57
|
+
type: "string",
|
|
58
|
+
required: true,
|
|
59
|
+
description: "API secret",
|
|
60
|
+
env: "ERPNEXT_API_SECRET",
|
|
61
|
+
},
|
|
44
62
|
});
|
|
45
63
|
rl.registerAction("document.get", {
|
|
46
64
|
description: "Get a document by DocType and name",
|
|
47
65
|
inputSchema: {
|
|
48
|
-
docType: {
|
|
49
|
-
|
|
66
|
+
docType: {
|
|
67
|
+
type: "string",
|
|
68
|
+
required: true,
|
|
69
|
+
description: "Document type (e.g. Customer, Sales Order)",
|
|
70
|
+
},
|
|
71
|
+
documentName: {
|
|
72
|
+
type: "string",
|
|
73
|
+
required: true,
|
|
74
|
+
description: "Document name/ID",
|
|
75
|
+
},
|
|
50
76
|
},
|
|
51
77
|
async execute(input, ctx) {
|
|
52
78
|
const { docType, documentName } = input;
|
|
@@ -58,14 +84,31 @@ export default function erpnext(rl) {
|
|
|
58
84
|
description: "List documents of a DocType",
|
|
59
85
|
inputSchema: {
|
|
60
86
|
docType: { type: "string", required: true, description: "Document type" },
|
|
61
|
-
fields: {
|
|
62
|
-
|
|
63
|
-
|
|
87
|
+
fields: {
|
|
88
|
+
type: "array",
|
|
89
|
+
required: false,
|
|
90
|
+
description: "Fields to return (default: ['name']). Use ['*'] for all.",
|
|
91
|
+
},
|
|
92
|
+
filters: {
|
|
93
|
+
type: "array",
|
|
94
|
+
required: false,
|
|
95
|
+
description: "Filters as [[doctype, field, operator, value], ...]",
|
|
96
|
+
},
|
|
97
|
+
limit: {
|
|
98
|
+
type: "number",
|
|
99
|
+
required: false,
|
|
100
|
+
description: "Max results (default: 20)",
|
|
101
|
+
},
|
|
64
102
|
offset: { type: "number", required: false, description: "Start offset" },
|
|
65
|
-
orderBy: {
|
|
103
|
+
orderBy: {
|
|
104
|
+
type: "string",
|
|
105
|
+
required: false,
|
|
106
|
+
description: "Order by (e.g. 'creation desc')",
|
|
107
|
+
},
|
|
66
108
|
},
|
|
67
109
|
async execute(input, ctx) {
|
|
68
|
-
const { docType, fields, filters, limit, offset, orderBy } = (input ??
|
|
110
|
+
const { docType, fields, filters, limit, offset, orderBy } = (input ??
|
|
111
|
+
{});
|
|
69
112
|
const qs = {};
|
|
70
113
|
if (fields)
|
|
71
114
|
qs.fields = JSON.stringify(fields);
|
|
@@ -85,7 +128,11 @@ export default function erpnext(rl) {
|
|
|
85
128
|
description: "Create a document",
|
|
86
129
|
inputSchema: {
|
|
87
130
|
docType: { type: "string", required: true, description: "Document type" },
|
|
88
|
-
properties: {
|
|
131
|
+
properties: {
|
|
132
|
+
type: "object",
|
|
133
|
+
required: true,
|
|
134
|
+
description: "Document field values as key-value pairs",
|
|
135
|
+
},
|
|
89
136
|
},
|
|
90
137
|
async execute(input, ctx) {
|
|
91
138
|
const { docType, properties } = input;
|
|
@@ -97,8 +144,16 @@ export default function erpnext(rl) {
|
|
|
97
144
|
description: "Update a document",
|
|
98
145
|
inputSchema: {
|
|
99
146
|
docType: { type: "string", required: true, description: "Document type" },
|
|
100
|
-
documentName: {
|
|
101
|
-
|
|
147
|
+
documentName: {
|
|
148
|
+
type: "string",
|
|
149
|
+
required: true,
|
|
150
|
+
description: "Document name/ID",
|
|
151
|
+
},
|
|
152
|
+
properties: {
|
|
153
|
+
type: "object",
|
|
154
|
+
required: true,
|
|
155
|
+
description: "Fields to update as key-value pairs",
|
|
156
|
+
},
|
|
102
157
|
},
|
|
103
158
|
async execute(input, ctx) {
|
|
104
159
|
const { docType, documentName, properties } = input;
|
|
@@ -110,7 +165,11 @@ export default function erpnext(rl) {
|
|
|
110
165
|
description: "Delete a document",
|
|
111
166
|
inputSchema: {
|
|
112
167
|
docType: { type: "string", required: true, description: "Document type" },
|
|
113
|
-
documentName: {
|
|
168
|
+
documentName: {
|
|
169
|
+
type: "string",
|
|
170
|
+
required: true,
|
|
171
|
+
description: "Document name/ID",
|
|
172
|
+
},
|
|
114
173
|
},
|
|
115
174
|
async execute(input, ctx) {
|
|
116
175
|
const { docType, documentName } = input;
|
|
@@ -2,19 +2,56 @@ export default function facebookGraph(rl) {
|
|
|
2
2
|
rl.setName("facebookGraph");
|
|
3
3
|
rl.setVersion("0.1.0");
|
|
4
4
|
rl.setConnectionSchema({
|
|
5
|
-
accessToken: {
|
|
5
|
+
accessToken: {
|
|
6
|
+
type: "string",
|
|
7
|
+
required: true,
|
|
8
|
+
description: "Facebook/Meta access token",
|
|
9
|
+
env: "FACEBOOK_ACCESS_TOKEN",
|
|
10
|
+
},
|
|
6
11
|
});
|
|
7
12
|
rl.registerAction("request", {
|
|
8
13
|
description: "Make a request to the Facebook Graph API. Supports GET, POST, DELETE against any node/edge combination.",
|
|
9
14
|
inputSchema: {
|
|
10
|
-
hostUrl: {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
hostUrl: {
|
|
16
|
+
type: "string",
|
|
17
|
+
required: false,
|
|
18
|
+
description: "Host URL: 'graph.facebook.com' (default) or 'graph-video.facebook.com' for video uploads",
|
|
19
|
+
},
|
|
20
|
+
method: {
|
|
21
|
+
type: "string",
|
|
22
|
+
required: false,
|
|
23
|
+
description: "HTTP method: GET (default), POST, DELETE",
|
|
24
|
+
},
|
|
25
|
+
graphApiVersion: {
|
|
26
|
+
type: "string",
|
|
27
|
+
required: false,
|
|
28
|
+
description: "API version (e.g. 'v19.0'). Omit for default.",
|
|
29
|
+
},
|
|
30
|
+
node: {
|
|
31
|
+
type: "string",
|
|
32
|
+
required: true,
|
|
33
|
+
description: "Node ID (e.g. 'me', a page/user/object ID)",
|
|
34
|
+
},
|
|
35
|
+
edge: {
|
|
36
|
+
type: "string",
|
|
37
|
+
required: false,
|
|
38
|
+
description: "Edge name (e.g. 'posts', 'feed', 'videos')",
|
|
39
|
+
},
|
|
40
|
+
fields: {
|
|
41
|
+
type: "array",
|
|
42
|
+
required: false,
|
|
43
|
+
description: "Fields to request (GET only), sent as comma-separated 'fields' param",
|
|
44
|
+
},
|
|
45
|
+
queryParameters: {
|
|
46
|
+
type: "object",
|
|
47
|
+
required: false,
|
|
48
|
+
description: "Additional query parameters as key-value pairs",
|
|
49
|
+
},
|
|
50
|
+
body: {
|
|
51
|
+
type: "object",
|
|
52
|
+
required: false,
|
|
53
|
+
description: "Request body for POST requests (sent as JSON)",
|
|
54
|
+
},
|
|
18
55
|
},
|
|
19
56
|
async execute(input, ctx) {
|
|
20
57
|
const { hostUrl = "graph.facebook.com", method = "GET", graphApiVersion = "", node, edge, fields, queryParameters, body, } = input;
|
|
@@ -38,8 +75,12 @@ export default function facebookGraph(rl) {
|
|
|
38
75
|
method: httpMethod,
|
|
39
76
|
headers: { Accept: "application/json,text/*;q=0.99" },
|
|
40
77
|
};
|
|
41
|
-
if (body &&
|
|
42
|
-
|
|
78
|
+
if (body &&
|
|
79
|
+
typeof body === "object" &&
|
|
80
|
+
Object.keys(body).length > 0 &&
|
|
81
|
+
httpMethod === "POST") {
|
|
82
|
+
opts.headers["Content-Type"] =
|
|
83
|
+
"application/json";
|
|
43
84
|
opts.body = JSON.stringify(body);
|
|
44
85
|
}
|
|
45
86
|
const res = await fetch(url.toString(), opts);
|