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
@@ -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: { type: "string", required: true, description: "Emelia API key", env: "EMELIA_API_KEY" },
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: { name: { type: "string", required: true, description: "Campaign name" } },
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: { campaignId: { type: "string", required: true, description: "Campaign ID" } },
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: { limit: { type: "number", required: false, description: "Max results" } },
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: { type: "string", required: true, description: "Campaign ID" },
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: { type: "object", required: false, description: "Custom fields as key-value pairs" },
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: { campaignId: { type: "string", required: true, description: "Campaign ID" } },
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: { campaignId: { type: "string", required: true, description: "Campaign ID" } },
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: { type: "string", required: true, description: "Source campaign ID" },
118
- name: { type: "string", required: true, description: "New campaign name" },
119
- copySettings: { type: "boolean", required: false, description: "Copy settings (default: true)" },
120
- copyMails: { type: "boolean", required: false, description: "Copy mail templates (default: true)" },
121
- copyContacts: { type: "boolean", required: false, description: "Copy contacts (default: false)" },
122
- copyProvider: { type: "boolean", required: false, description: "Copy provider (default: true)" },
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
- }`, { fromId: campaignId, name, copySettings, copyMails, copyContacts, copyProvider });
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: { limit: { type: "number", required: false, description: "Max results" } },
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: { type: "string", required: true, description: "Contact list ID" },
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: { type: "object", required: false, description: "Custom fields as key-value pairs" },
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 && Object.keys(body).length > 0 && method !== "GET" && method !== "DELETE") {
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: { type: "string", required: true, description: "ERPNext instance URL (e.g. https://mysite.erpnext.com)", env: "ERPNEXT_HOST" },
42
- apiKey: { type: "string", required: true, description: "API key", env: "ERPNEXT_API_KEY" },
43
- apiSecret: { type: "string", required: true, description: "API secret", env: "ERPNEXT_API_SECRET" },
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: { type: "string", required: true, description: "Document type (e.g. Customer, Sales Order)" },
49
- documentName: { type: "string", required: true, description: "Document name/ID" },
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: { type: "array", required: false, description: "Fields to return (default: ['name']). Use ['*'] for all." },
62
- filters: { type: "array", required: false, description: 'Filters as [[doctype, field, operator, value], ...]' },
63
- limit: { type: "number", required: false, description: "Max results (default: 20)" },
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: { type: "string", required: false, description: "Order by (e.g. 'creation desc')" },
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: { type: "object", required: true, description: "Document field values as key-value pairs" },
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: { type: "string", required: true, description: "Document name/ID" },
101
- properties: { type: "object", required: true, description: "Fields to update as key-value pairs" },
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: { type: "string", required: true, description: "Document name/ID" },
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: { type: "string", required: true, description: "Facebook/Meta access token", env: "FACEBOOK_ACCESS_TOKEN" },
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: { type: "string", required: false, description: "Host URL: 'graph.facebook.com' (default) or 'graph-video.facebook.com' for video uploads" },
11
- method: { type: "string", required: false, description: "HTTP method: GET (default), POST, DELETE" },
12
- graphApiVersion: { type: "string", required: false, description: "API version (e.g. 'v19.0'). Omit for default." },
13
- node: { type: "string", required: true, description: "Node ID (e.g. 'me', a page/user/object ID)" },
14
- edge: { type: "string", required: false, description: "Edge name (e.g. 'posts', 'feed', 'videos')" },
15
- fields: { type: "array", required: false, description: "Fields to request (GET only), sent as comma-separated 'fields' param" },
16
- queryParameters: { type: "object", required: false, description: "Additional query parameters as key-value pairs" },
17
- body: { type: "object", required: false, description: "Request body for POST requests (sent as JSON)" },
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 && typeof body === "object" && Object.keys(body).length > 0 && httpMethod === "POST") {
42
- opts.headers["Content-Type"] = "application/json";
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);