runline 0.33.0 → 0.35.0

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 (531) hide show
  1. package/dist/auth/oauth2.d.ts +7 -1
  2. package/dist/auth/oauth2.js +10 -0
  3. package/dist/auth/token.d.ts +1 -0
  4. package/dist/auth/token.js +19 -1
  5. package/dist/auth/types.d.ts +22 -1
  6. package/dist/core/engine.d.ts +7 -0
  7. package/dist/core/engine.js +21 -8
  8. package/dist/credentials/policy.d.ts +53 -1
  9. package/dist/credentials/policy.js +146 -6
  10. package/dist/credentials/registry.d.ts +9 -0
  11. package/dist/credentials/registry.js +184 -22
  12. package/dist/credentials/transport.d.ts +48 -2
  13. package/dist/credentials/transport.js +248 -70
  14. package/dist/credentials/types.d.ts +177 -10
  15. package/dist/index.d.ts +6 -5
  16. package/dist/index.js +3 -2
  17. package/dist/plugin/api.d.ts +7 -0
  18. package/dist/plugin/api.js +7 -0
  19. package/dist/plugin/schema.d.ts +16 -4
  20. package/dist/plugin/schema.js +28 -5
  21. package/dist/plugin/types.d.ts +20 -0
  22. package/dist/plugins/_shared/base64.js +30 -0
  23. package/dist/plugins/_shared/credentialAdapter.js +99 -15
  24. package/dist/plugins/_shared/credentials.js +416 -0
  25. package/dist/plugins/_shared/googleAuth.js +69 -39
  26. package/dist/plugins/_shared/googleCredentials.js +68 -14
  27. package/dist/plugins/_shared/localFile.js +40 -0
  28. package/dist/plugins/_shared/mediaFile.js +12 -12
  29. package/dist/plugins/_shared/microsoftAuth.js +31 -47
  30. package/dist/plugins/_shared/microsoftCredentials.js +42 -15
  31. package/dist/plugins/_shared/provider.js +2 -14
  32. package/dist/plugins/_shared/shiftCloud.js +16 -56
  33. package/dist/plugins/_shared/shiftCredentials.js +83 -0
  34. package/dist/plugins/_shared/shiftUpload.js +14 -10
  35. package/dist/plugins/actionNetwork/src/credentials.js +14 -0
  36. package/dist/plugins/actionNetwork/src/index.js +39 -50
  37. package/dist/plugins/activeCampaign/src/credentials.js +22 -0
  38. package/dist/plugins/activeCampaign/src/index.js +61 -132
  39. package/dist/plugins/adalo/src/credentials.js +16 -0
  40. package/dist/plugins/adalo/src/index.js +19 -43
  41. package/dist/plugins/affinity/src/credentials.js +19 -0
  42. package/dist/plugins/affinity/src/index.js +29 -54
  43. package/dist/plugins/agentMail/src/credentials.js +35 -0
  44. package/dist/plugins/agentMail/src/drafts.js +137 -0
  45. package/dist/plugins/agentMail/src/inboxes.js +95 -0
  46. package/dist/plugins/agentMail/src/index.js +35 -0
  47. package/dist/plugins/agentMail/src/messages.js +154 -0
  48. package/dist/plugins/agentMail/src/schemas.js +156 -0
  49. package/dist/plugins/agentMail/src/shared.js +203 -0
  50. package/dist/plugins/agentMail/src/threads.js +75 -0
  51. package/dist/plugins/agileCrm/src/credentials.js +16 -0
  52. package/dist/plugins/agileCrm/src/index.js +46 -112
  53. package/dist/plugins/airtable/src/credentials.js +19 -0
  54. package/dist/plugins/airtable/src/index.js +37 -50
  55. package/dist/plugins/airtop/src/credentials.js +20 -0
  56. package/dist/plugins/airtop/src/index.js +51 -75
  57. package/dist/plugins/apiTemplateIo/src/credentials.js +19 -0
  58. package/dist/plugins/apiTemplateIo/src/index.js +14 -31
  59. package/dist/plugins/asana/src/credentials.js +19 -0
  60. package/dist/plugins/asana/src/index.js +51 -72
  61. package/dist/plugins/autopilot/src/credentials.js +19 -0
  62. package/dist/plugins/autopilot/src/index.js +38 -45
  63. package/dist/plugins/bambooHr/src/credentials.js +16 -0
  64. package/dist/plugins/bambooHr/src/index.js +41 -67
  65. package/dist/plugins/bannerbear/src/credentials.js +19 -0
  66. package/dist/plugins/bannerbear/src/index.js +15 -27
  67. package/dist/plugins/baserow/src/credentials.js +17 -0
  68. package/dist/plugins/baserow/src/index.js +23 -49
  69. package/dist/plugins/beeminder/src/credentials.js +19 -0
  70. package/dist/plugins/beeminder/src/index.js +32 -54
  71. package/dist/plugins/bitly/src/credentials.js +19 -0
  72. package/dist/plugins/bitly/src/index.js +12 -26
  73. package/dist/plugins/bitwarden/src/credentials.js +62 -0
  74. package/dist/plugins/bitwarden/src/index.js +34 -80
  75. package/dist/plugins/box/src/credentials.js +19 -0
  76. package/dist/plugins/box/src/index.js +24 -49
  77. package/dist/plugins/brandfetch/src/credentials.js +13 -0
  78. package/dist/plugins/brandfetch/src/index.js +12 -17
  79. package/dist/plugins/brevo/src/credentials.js +19 -0
  80. package/dist/plugins/brevo/src/index.js +30 -51
  81. package/dist/plugins/bubble/src/credentials.js +28 -0
  82. package/dist/plugins/bubble/src/index.js +29 -65
  83. package/dist/plugins/chargebee/src/credentials.js +16 -0
  84. package/dist/plugins/chargebee/src/index.js +15 -45
  85. package/dist/plugins/circleci/src/credentials.js +19 -0
  86. package/dist/plugins/circleci/src/index.js +19 -39
  87. package/dist/plugins/ciscoWebex/src/credentials.js +19 -0
  88. package/dist/plugins/ciscoWebex/src/index.js +43 -61
  89. package/dist/plugins/clearbit/src/credentials.js +22 -0
  90. package/dist/plugins/clearbit/src/index.js +11 -21
  91. package/dist/plugins/clickup/src/credentials.js +19 -0
  92. package/dist/plugins/clickup/src/index.js +85 -117
  93. package/dist/plugins/clockify/src/credentials.js +19 -0
  94. package/dist/plugins/clockify/src/index.js +46 -61
  95. package/dist/plugins/cloudflare/src/credentials.js +19 -0
  96. package/dist/plugins/cloudflare/src/index.js +19 -34
  97. package/dist/plugins/cockpit/src/credentials.js +17 -0
  98. package/dist/plugins/cockpit/src/index.js +18 -31
  99. package/dist/plugins/coda/src/credentials.js +19 -0
  100. package/dist/plugins/coda/src/index.js +33 -50
  101. package/dist/plugins/coingecko/src/credentials.js +20 -0
  102. package/dist/plugins/coingecko/src/index.js +24 -34
  103. package/dist/plugins/contentful/src/credentials.js +26 -0
  104. package/dist/plugins/contentful/src/index.js +19 -40
  105. package/dist/plugins/convertkit/src/credentials.js +26 -0
  106. package/dist/plugins/convertkit/src/index.js +27 -45
  107. package/dist/plugins/copper/src/credentials.js +17 -0
  108. package/dist/plugins/copper/src/index.js +25 -47
  109. package/dist/plugins/cortex/src/credentials.js +28 -0
  110. package/dist/plugins/cortex/src/index.js +26 -49
  111. package/dist/plugins/currents/src/credentials.js +19 -0
  112. package/dist/plugins/currents/src/index.js +46 -59
  113. package/dist/plugins/customerIo/src/credentials.js +52 -0
  114. package/dist/plugins/customerIo/src/index.js +30 -58
  115. package/dist/plugins/databricks/src/credentials.js +13 -0
  116. package/dist/plugins/databricks/src/index.js +51 -103
  117. package/dist/plugins/deepl/src/credentials.js +19 -0
  118. package/dist/plugins/deepl/src/index.js +13 -39
  119. package/dist/plugins/demio/src/credentials.js +26 -0
  120. package/dist/plugins/demio/src/index.js +17 -41
  121. package/dist/plugins/dhl/src/credentials.js +13 -0
  122. package/dist/plugins/dhl/src/index.js +8 -19
  123. package/dist/plugins/discord/src/credentials.js +19 -0
  124. package/dist/plugins/discord/src/index.js +30 -58
  125. package/dist/plugins/discourse/src/credentials.js +18 -0
  126. package/dist/plugins/discourse/src/index.js +36 -53
  127. package/dist/plugins/disqus/src/credentials.js +13 -0
  128. package/dist/plugins/disqus/src/index.js +14 -32
  129. package/dist/plugins/drift/src/credentials.js +13 -0
  130. package/dist/plugins/drift/src/index.js +16 -26
  131. package/dist/plugins/dropbox/src/credentials.js +13 -0
  132. package/dist/plugins/dropbox/src/index.js +23 -30
  133. package/dist/plugins/dropcontact/src/credentials.js +13 -0
  134. package/dist/plugins/dropcontact/src/index.js +13 -18
  135. package/dist/plugins/egoi/src/credentials.js +19 -0
  136. package/dist/plugins/egoi/src/index.js +23 -38
  137. package/dist/plugins/elasticsearch/src/credentials.js +18 -0
  138. package/dist/plugins/elasticsearch/src/index.js +27 -48
  139. package/dist/plugins/elevenlabs/src/credentials.js +30 -0
  140. package/dist/plugins/elevenlabs/src/index.js +4 -1
  141. package/dist/plugins/elevenlabs/src/schemas.js +2 -1
  142. package/dist/plugins/elevenlabs/src/shared.js +87 -62
  143. package/dist/plugins/elevenlabs/src/workflows.js +2 -2
  144. package/dist/plugins/emelia/src/credentials.js +14 -0
  145. package/dist/plugins/emelia/src/index.js +19 -23
  146. package/dist/plugins/erpnext/src/credentials.js +27 -0
  147. package/dist/plugins/erpnext/src/index.js +21 -42
  148. package/dist/plugins/facebookGraph/src/credentials.js +20 -0
  149. package/dist/plugins/facebookGraph/src/index.js +39 -37
  150. package/dist/plugins/fal/src/credentials.js +14 -0
  151. package/dist/plugins/fal/src/index.js +5 -3
  152. package/dist/plugins/fal/src/shared.js +58 -63
  153. package/dist/plugins/freshdesk/src/credentials.js +20 -0
  154. package/dist/plugins/freshdesk/src/index.js +25 -46
  155. package/dist/plugins/freshservice/src/credentials.js +16 -0
  156. package/dist/plugins/freshservice/src/index.js +37 -58
  157. package/dist/plugins/freshworksCrm/src/credentials.js +16 -0
  158. package/dist/plugins/freshworksCrm/src/index.js +20 -39
  159. package/dist/plugins/getresponse/src/credentials.js +22 -0
  160. package/dist/plugins/getresponse/src/index.js +20 -32
  161. package/dist/plugins/gett/src/credentials.js +64 -0
  162. package/dist/plugins/gett/src/index.js +11 -6
  163. package/dist/plugins/gett/src/login.js +24 -0
  164. package/dist/plugins/gett/src/session.js +15 -38
  165. package/dist/plugins/gett/src/shared.js +41 -84
  166. package/dist/plugins/ghost/src/credentials.js +36 -0
  167. package/dist/plugins/ghost/src/index.js +18 -59
  168. package/dist/plugins/github/src/credentials.js +18 -0
  169. package/dist/plugins/github/src/index.js +55 -78
  170. package/dist/plugins/gitlab/src/credentials.js +24 -0
  171. package/dist/plugins/gitlab/src/index.js +29 -48
  172. package/dist/plugins/gmail/src/index.js +47 -108
  173. package/dist/plugins/gong/src/credentials.js +16 -0
  174. package/dist/plugins/gong/src/index.js +16 -32
  175. package/dist/plugins/googleAppsScript/src/index.js +109 -42
  176. package/dist/plugins/googleCalendar/src/index.js +20 -51
  177. package/dist/plugins/googleContacts/src/index.js +13 -40
  178. package/dist/plugins/googleDocs/src/index.js +3 -32
  179. package/dist/plugins/googleDocs/src/shared.js +2 -1
  180. package/dist/plugins/googleDrive/src/index.js +68 -97
  181. package/dist/plugins/googleImage/src/credentials.js +14 -0
  182. package/dist/plugins/googleImage/src/index.js +15 -26
  183. package/dist/plugins/googleSheets/src/index.js +27 -60
  184. package/dist/plugins/googleSlides/src/index.js +7 -35
  185. package/dist/plugins/googleTasks/src/index.js +14 -42
  186. package/dist/plugins/gotify/src/credentials.js +32 -0
  187. package/dist/plugins/gotify/src/index.js +14 -36
  188. package/dist/plugins/gotowebinar/src/credentials.js +13 -0
  189. package/dist/plugins/gotowebinar/src/index.js +52 -69
  190. package/dist/plugins/grafana/src/credentials.js +16 -0
  191. package/dist/plugins/grafana/src/index.js +34 -53
  192. package/dist/plugins/graphql/src/credentials.js +42 -0
  193. package/dist/plugins/graphql/src/index.js +21 -46
  194. package/dist/plugins/grist/src/credentials.js +30 -0
  195. package/dist/plugins/grist/src/index.js +14 -43
  196. package/dist/plugins/halopsa/src/credentials.js +56 -0
  197. package/dist/plugins/halopsa/src/index.js +20 -47
  198. package/dist/plugins/harvest/src/credentials.js +20 -0
  199. package/dist/plugins/harvest/src/index.js +24 -43
  200. package/dist/plugins/helpscout/src/credentials.js +13 -0
  201. package/dist/plugins/helpscout/src/index.js +26 -38
  202. package/dist/plugins/highlevel/src/credentials.js +19 -0
  203. package/dist/plugins/highlevel/src/index.js +42 -65
  204. package/dist/plugins/homeAssistant/src/credentials.js +27 -0
  205. package/dist/plugins/homeAssistant/src/index.js +34 -52
  206. package/dist/plugins/hubspot/src/credentials.js +16 -0
  207. package/dist/plugins/hubspot/src/index.js +29 -41
  208. package/dist/plugins/humanticAi/src/credentials.js +13 -0
  209. package/dist/plugins/humanticAi/src/index.js +15 -22
  210. package/dist/plugins/hunter/src/credentials.js +13 -0
  211. package/dist/plugins/hunter/src/index.js +18 -17
  212. package/dist/plugins/intercom/src/credentials.js +19 -0
  213. package/dist/plugins/intercom/src/index.js +25 -38
  214. package/dist/plugins/iterable/src/credentials.js +17 -0
  215. package/dist/plugins/iterable/src/index.js +26 -40
  216. package/dist/plugins/jenkins/src/credentials.js +16 -0
  217. package/dist/plugins/jenkins/src/index.js +22 -36
  218. package/dist/plugins/jira/src/credentials.js +16 -0
  219. package/dist/plugins/jira/src/index.js +35 -61
  220. package/dist/plugins/keap/src/credentials.js +19 -0
  221. package/dist/plugins/keap/src/index.js +43 -71
  222. package/dist/plugins/kobotoolbox/src/credentials.js +13 -0
  223. package/dist/plugins/kobotoolbox/src/index.js +46 -84
  224. package/dist/plugins/lemlist/src/credentials.js +19 -0
  225. package/dist/plugins/lemlist/src/index.js +35 -47
  226. package/dist/plugins/linear/src/attachments.js +7 -7
  227. package/dist/plugins/linear/src/comments.js +7 -7
  228. package/dist/plugins/linear/src/credentials.js +17 -0
  229. package/dist/plugins/linear/src/cycles.js +5 -5
  230. package/dist/plugins/linear/src/index.js +2 -0
  231. package/dist/plugins/linear/src/initiatives.js +6 -6
  232. package/dist/plugins/linear/src/issues.js +14 -14
  233. package/dist/plugins/linear/src/labels.js +6 -6
  234. package/dist/plugins/linear/src/organization.js +2 -2
  235. package/dist/plugins/linear/src/projects.js +12 -12
  236. package/dist/plugins/linear/src/shared.js +34 -32
  237. package/dist/plugins/linear/src/states.js +3 -3
  238. package/dist/plugins/linear/src/teams.js +4 -4
  239. package/dist/plugins/linear/src/users.js +3 -3
  240. package/dist/plugins/linear/src/views.js +5 -5
  241. package/dist/plugins/linear/src/webhooks.js +5 -5
  242. package/dist/plugins/lingvanex/src/credentials.js +13 -0
  243. package/dist/plugins/lingvanex/src/index.js +7 -9
  244. package/dist/plugins/linkedin/src/credentials.js +17 -0
  245. package/dist/plugins/linkedin/src/index.js +13 -17
  246. package/dist/plugins/lonescale/src/credentials.js +13 -0
  247. package/dist/plugins/lonescale/src/index.js +16 -26
  248. package/dist/plugins/magento/src/credentials.js +16 -0
  249. package/dist/plugins/magento/src/index.js +67 -84
  250. package/dist/plugins/mailcheck/src/credentials.js +17 -0
  251. package/dist/plugins/mailcheck/src/index.js +7 -9
  252. package/dist/plugins/mailchimp/src/credentials.js +32 -0
  253. package/dist/plugins/mailchimp/src/index.js +36 -44
  254. package/dist/plugins/mailerlite/src/credentials.js +13 -0
  255. package/dist/plugins/mailerlite/src/index.js +19 -32
  256. package/dist/plugins/mailgun/src/credentials.js +21 -0
  257. package/dist/plugins/mailgun/src/index.js +15 -21
  258. package/dist/plugins/mailjet/src/credentials.js +38 -0
  259. package/dist/plugins/mailjet/src/index.js +60 -115
  260. package/dist/plugins/mandrill/src/credentials.js +17 -0
  261. package/dist/plugins/mandrill/src/index.js +11 -12
  262. package/dist/plugins/marketstack/src/credentials.js +16 -0
  263. package/dist/plugins/marketstack/src/index.js +18 -28
  264. package/dist/plugins/matrix/src/credentials.js +19 -0
  265. package/dist/plugins/matrix/src/index.js +23 -52
  266. package/dist/plugins/mattermost/src/credentials.js +19 -0
  267. package/dist/plugins/mattermost/src/index.js +41 -73
  268. package/dist/plugins/mautic/src/credentials.js +16 -0
  269. package/dist/plugins/mautic/src/index.js +46 -62
  270. package/dist/plugins/medium/src/credentials.js +20 -0
  271. package/dist/plugins/medium/src/index.js +18 -23
  272. package/dist/plugins/messagebird/src/credentials.js +22 -0
  273. package/dist/plugins/messagebird/src/index.js +13 -18
  274. package/dist/plugins/metabase/src/credentials.js +19 -0
  275. package/dist/plugins/metabase/src/index.js +24 -40
  276. package/dist/plugins/microsoftCalendar/src/index.js +49 -18
  277. package/dist/plugins/microsoftFiles/src/index.js +95 -31
  278. package/dist/plugins/microsoftMail/src/index.js +63 -21
  279. package/dist/plugins/misp/src/credentials.js +16 -0
  280. package/dist/plugins/misp/src/index.js +60 -71
  281. package/dist/plugins/mocean/src/credentials.js +17 -0
  282. package/dist/plugins/mocean/src/index.js +11 -23
  283. package/dist/plugins/monday/src/credentials.js +14 -0
  284. package/dist/plugins/monday/src/index.js +31 -44
  285. package/dist/plugins/monicaCrm/src/credentials.js +19 -0
  286. package/dist/plugins/monicaCrm/src/index.js +25 -42
  287. package/dist/plugins/msg91/src/credentials.js +10 -0
  288. package/dist/plugins/msg91/src/index.js +15 -11
  289. package/dist/plugins/nasa/src/credentials.js +22 -0
  290. package/dist/plugins/nasa/src/index.js +24 -28
  291. package/dist/plugins/netlify/src/credentials.js +19 -0
  292. package/dist/plugins/netlify/src/index.js +27 -51
  293. package/dist/plugins/netscalerAdc/src/credentials.js +18 -0
  294. package/dist/plugins/netscalerAdc/src/index.js +16 -31
  295. package/dist/plugins/nextcloud/src/credentials.js +27 -0
  296. package/dist/plugins/nextcloud/src/index.js +55 -109
  297. package/dist/plugins/nocodb/src/credentials.js +16 -0
  298. package/dist/plugins/nocodb/src/index.js +19 -37
  299. package/dist/plugins/notion/src/credentials.js +21 -0
  300. package/dist/plugins/notion/src/index.js +25 -38
  301. package/dist/plugins/npm/src/credentials.js +19 -0
  302. package/dist/plugins/npm/src/index.js +22 -32
  303. package/dist/plugins/odoo/src/credentials.js +21 -0
  304. package/dist/plugins/odoo/src/index.js +53 -69
  305. package/dist/plugins/okta/src/credentials.js +23 -0
  306. package/dist/plugins/okta/src/index.js +30 -35
  307. package/dist/plugins/oneSimpleApi/src/credentials.js +16 -0
  308. package/dist/plugins/oneSimpleApi/src/index.js +19 -24
  309. package/dist/plugins/onfleet/src/credentials.js +23 -0
  310. package/dist/plugins/onfleet/src/index.js +42 -53
  311. package/dist/plugins/openai/src/credentials.js +13 -0
  312. package/dist/plugins/openai/src/index.js +16 -24
  313. package/dist/plugins/openweathermap/src/credentials.js +16 -0
  314. package/dist/plugins/openweathermap/src/index.js +22 -22
  315. package/dist/plugins/oura/src/credentials.js +19 -0
  316. package/dist/plugins/oura/src/index.js +13 -18
  317. package/dist/plugins/paddle/src/credentials.js +27 -0
  318. package/dist/plugins/paddle/src/index.js +20 -36
  319. package/dist/plugins/pagerduty/src/credentials.js +24 -0
  320. package/dist/plugins/pagerduty/src/index.js +30 -39
  321. package/dist/plugins/parallel/src/credentials.js +18 -0
  322. package/dist/plugins/parallel/src/index.js +16 -22
  323. package/dist/plugins/paypal/src/credentials.js +44 -0
  324. package/dist/plugins/paypal/src/index.js +14 -40
  325. package/dist/plugins/peekalink/src/credentials.js +16 -0
  326. package/dist/plugins/peekalink/src/index.js +10 -11
  327. package/dist/plugins/phantombuster/src/credentials.js +19 -0
  328. package/dist/plugins/phantombuster/src/index.js +19 -32
  329. package/dist/plugins/philipsHue/src/credentials.js +17 -0
  330. package/dist/plugins/philipsHue/src/index.js +15 -27
  331. package/dist/plugins/pipedrive/src/credentials.js +26 -0
  332. package/dist/plugins/pipedrive/src/index.js +43 -73
  333. package/dist/plugins/plaud/src/index.js +2 -1
  334. package/dist/plugins/plaud/src/shared.js +23 -19
  335. package/dist/plugins/plivo/src/credentials.js +20 -0
  336. package/dist/plugins/plivo/src/index.js +13 -19
  337. package/dist/plugins/posthog/src/credentials.js +18 -0
  338. package/dist/plugins/posthog/src/index.js +14 -20
  339. package/dist/plugins/profitwell/src/credentials.js +22 -0
  340. package/dist/plugins/profitwell/src/index.js +10 -17
  341. package/dist/plugins/pushbullet/src/credentials.js +19 -0
  342. package/dist/plugins/pushbullet/src/index.js +19 -27
  343. package/dist/plugins/pushcut/src/credentials.js +19 -0
  344. package/dist/plugins/pushcut/src/index.js +7 -8
  345. package/dist/plugins/pushover/src/credentials.js +14 -0
  346. package/dist/plugins/pushover/src/index.js +7 -12
  347. package/dist/plugins/quickbase/src/credentials.js +15 -0
  348. package/dist/plugins/quickbase/src/index.js +24 -34
  349. package/dist/plugins/quickbooks/src/credentials.js +22 -0
  350. package/dist/plugins/quickbooks/src/index.js +17 -46
  351. package/dist/plugins/raindrop/src/credentials.js +19 -0
  352. package/dist/plugins/raindrop/src/index.js +30 -32
  353. package/dist/plugins/recraft/src/credentials.js +13 -0
  354. package/dist/plugins/recraft/src/index.js +39 -28
  355. package/dist/plugins/reddit/src/credentials.js +26 -0
  356. package/dist/plugins/reddit/src/index.js +30 -34
  357. package/dist/plugins/replicate/src/credentials.js +23 -0
  358. package/dist/plugins/replicate/src/index.js +18 -28
  359. package/dist/plugins/rocketchat/src/credentials.js +17 -0
  360. package/dist/plugins/rocketchat/src/index.js +8 -19
  361. package/dist/plugins/rundeck/src/credentials.js +16 -0
  362. package/dist/plugins/rundeck/src/index.js +12 -28
  363. package/dist/plugins/salesforce/src/credentials.js +73 -0
  364. package/dist/plugins/salesforce/src/index.js +6 -0
  365. package/dist/plugins/salesforce/src/metadata.js +3 -16
  366. package/dist/plugins/salesforce/src/shared.js +25 -100
  367. package/dist/plugins/salesforce/src/sobjects.js +10 -9
  368. package/dist/plugins/salesmate/src/credentials.js +17 -0
  369. package/dist/plugins/salesmate/src/index.js +20 -37
  370. package/dist/plugins/securityScorecard/src/credentials.js +22 -0
  371. package/dist/plugins/securityScorecard/src/index.js +24 -37
  372. package/dist/plugins/segment/src/credentials.js +16 -0
  373. package/dist/plugins/segment/src/index.js +12 -16
  374. package/dist/plugins/sendgrid/src/credentials.js +13 -0
  375. package/dist/plugins/sendgrid/src/index.js +31 -35
  376. package/dist/plugins/sendy/src/credentials.js +18 -0
  377. package/dist/plugins/sendy/src/index.js +18 -24
  378. package/dist/plugins/sentry/src/credentials.js +16 -0
  379. package/dist/plugins/sentry/src/index.js +30 -98
  380. package/dist/plugins/servicenow/src/credentials.js +13 -0
  381. package/dist/plugins/servicenow/src/index.js +22 -41
  382. package/dist/plugins/shiftAtlas/src/graph.js +2 -2
  383. package/dist/plugins/shiftAtlas/src/index.js +2 -0
  384. package/dist/plugins/shiftAtlas/src/shared.js +3 -1
  385. package/dist/plugins/shiftBwm/src/index.js +4 -2
  386. package/dist/plugins/shiftBwm/src/shared.js +41 -16
  387. package/dist/plugins/shiftCrm/src/access.js +2 -2
  388. package/dist/plugins/shiftCrm/src/accounts.js +3 -3
  389. package/dist/plugins/shiftCrm/src/activities.js +3 -3
  390. package/dist/plugins/shiftCrm/src/credentials.js +6 -0
  391. package/dist/plugins/shiftCrm/src/index.js +2 -0
  392. package/dist/plugins/shiftCrm/src/opportunities.js +3 -3
  393. package/dist/plugins/shiftCrm/src/people.js +3 -3
  394. package/dist/plugins/shiftCrm/src/records.js +2 -2
  395. package/dist/plugins/shiftCrm/src/shared.js +2 -1
  396. package/dist/plugins/shiftCrm/src/tasks.js +3 -3
  397. package/dist/plugins/shiftObjects/src/credentials.js +2 -0
  398. package/dist/plugins/shiftObjects/src/index.js +2 -0
  399. package/dist/plugins/shiftObjects/src/objects.js +4 -3
  400. package/dist/plugins/shiftOcr/src/credentials.js +8 -0
  401. package/dist/plugins/shiftOcr/src/index.js +14 -8
  402. package/dist/plugins/shiftPages/src/index.js +2 -0
  403. package/dist/plugins/shiftPages/src/pages.js +5 -3
  404. package/dist/plugins/shiftPages/src/shared.js +3 -1
  405. package/dist/plugins/shiftTranscription/src/index.js +2 -0
  406. package/dist/plugins/shiftTranscription/src/shared.js +11 -1
  407. package/dist/plugins/shiftTranscription/src/transcription.js +5 -5
  408. package/dist/plugins/shiftWork/src/index.js +2 -0
  409. package/dist/plugins/shiftWork/src/issue-views.js +5 -5
  410. package/dist/plugins/shiftWork/src/issues.js +11 -7
  411. package/dist/plugins/shiftWork/src/projects.js +3 -3
  412. package/dist/plugins/shiftWork/src/shared.js +3 -1
  413. package/dist/plugins/shopify/src/credentials.js +16 -0
  414. package/dist/plugins/shopify/src/index.js +32 -59
  415. package/dist/plugins/signl4/src/credentials.js +17 -0
  416. package/dist/plugins/signl4/src/index.js +28 -29
  417. package/dist/plugins/slack/src/credentials.js +19 -0
  418. package/dist/plugins/slack/src/index.js +51 -60
  419. package/dist/plugins/sms77/src/credentials.js +17 -0
  420. package/dist/plugins/sms77/src/index.js +11 -16
  421. package/dist/plugins/splunk/src/credentials.js +19 -0
  422. package/dist/plugins/splunk/src/index.js +32 -74
  423. package/dist/plugins/spotify/src/credentials.js +19 -0
  424. package/dist/plugins/spotify/src/index.js +40 -55
  425. package/dist/plugins/stackby/src/credentials.js +13 -0
  426. package/dist/plugins/stackby/src/index.js +14 -23
  427. package/dist/plugins/steel/src/auth.js +27 -0
  428. package/dist/plugins/steel/src/browser.js +4 -3
  429. package/dist/plugins/steel/src/captchas.js +4 -3
  430. package/dist/plugins/steel/src/extensions.js +3 -2
  431. package/dist/plugins/steel/src/files.js +9 -10
  432. package/dist/plugins/steel/src/index.js +2 -0
  433. package/dist/plugins/steel/src/page/tools.js +3 -3
  434. package/dist/plugins/steel/src/profiles.js +4 -3
  435. package/dist/plugins/steel/src/sessions.js +13 -13
  436. package/dist/plugins/steel/src/shared.js +21 -51
  437. package/dist/plugins/storyblok/src/credentials.js +37 -0
  438. package/dist/plugins/storyblok/src/index.js +22 -66
  439. package/dist/plugins/strapi/src/credentials.js +71 -0
  440. package/dist/plugins/strapi/src/index.js +36 -70
  441. package/dist/plugins/strava/src/credentials.js +19 -0
  442. package/dist/plugins/strava/src/index.js +16 -33
  443. package/dist/plugins/stripe/src/credentials.js +19 -0
  444. package/dist/plugins/stripe/src/index.js +44 -58
  445. package/dist/plugins/supabase/src/credentials.js +30 -0
  446. package/dist/plugins/supabase/src/index.js +18 -40
  447. package/dist/plugins/syncromsp/src/credentials.js +16 -0
  448. package/dist/plugins/syncromsp/src/index.js +37 -70
  449. package/dist/plugins/tapfiliate/src/credentials.js +13 -0
  450. package/dist/plugins/tapfiliate/src/index.js +21 -31
  451. package/dist/plugins/telegram/src/credentials.js +20 -0
  452. package/dist/plugins/telegram/src/index.js +31 -39
  453. package/dist/plugins/thehive/src/credentials.js +14 -0
  454. package/dist/plugins/thehive/src/index.js +33 -50
  455. package/dist/plugins/thehiveProject/src/credentials.js +16 -0
  456. package/dist/plugins/thehiveProject/src/index.js +53 -122
  457. package/dist/plugins/todoist/src/credentials.js +26 -0
  458. package/dist/plugins/todoist/src/index.js +49 -79
  459. package/dist/plugins/together/src/credentials.js +16 -0
  460. package/dist/plugins/together/src/index.js +31 -33
  461. package/dist/plugins/travisci/src/credentials.js +24 -0
  462. package/dist/plugins/travisci/src/index.js +16 -30
  463. package/dist/plugins/trello/src/credentials.js +29 -0
  464. package/dist/plugins/trello/src/index.js +49 -64
  465. package/dist/plugins/twake/src/credentials.js +16 -0
  466. package/dist/plugins/twake/src/index.js +8 -10
  467. package/dist/plugins/twilio/src/credentials.js +23 -0
  468. package/dist/plugins/twilio/src/index.js +12 -26
  469. package/dist/plugins/twist/src/credentials.js +13 -0
  470. package/dist/plugins/twist/src/index.js +32 -44
  471. package/dist/plugins/twitter/src/credentials.js +16 -0
  472. package/dist/plugins/twitter/src/index.js +25 -37
  473. package/dist/plugins/typesafe/src/credentials.js +28 -0
  474. package/dist/plugins/typesafe/src/index.js +3 -1
  475. package/dist/plugins/typesafe/src/shared.js +23 -35
  476. package/dist/plugins/unleashedSoftware/src/credentials.js +21 -0
  477. package/dist/plugins/unleashedSoftware/src/index.js +13 -37
  478. package/dist/plugins/uplead/src/credentials.js +16 -0
  479. package/dist/plugins/uplead/src/index.js +11 -16
  480. package/dist/plugins/uproc/src/credentials.js +14 -0
  481. package/dist/plugins/uproc/src/index.js +7 -10
  482. package/dist/plugins/uptimerobot/src/credentials.js +14 -0
  483. package/dist/plugins/uptimerobot/src/index.js +28 -39
  484. package/dist/plugins/urlscanio/src/credentials.js +13 -0
  485. package/dist/plugins/urlscanio/src/index.js +13 -22
  486. package/dist/plugins/vercel/src/credentials.js +19 -0
  487. package/dist/plugins/vercel/src/deployments.js +27 -11
  488. package/dist/plugins/vercel/src/env.js +31 -12
  489. package/dist/plugins/vercel/src/index.js +2 -0
  490. package/dist/plugins/vercel/src/projects.js +6 -3
  491. package/dist/plugins/vercel/src/shared.js +32 -37
  492. package/dist/plugins/vero/src/credentials.js +17 -0
  493. package/dist/plugins/vero/src/index.js +18 -21
  494. package/dist/plugins/vonage/src/credentials.js +17 -0
  495. package/dist/plugins/vonage/src/index.js +14 -18
  496. package/dist/plugins/wekan/src/credentials.js +16 -0
  497. package/dist/plugins/wekan/src/index.js +33 -46
  498. package/dist/plugins/wolt/src/account.js +6 -0
  499. package/dist/plugins/wolt/src/catalog.js +2 -2
  500. package/dist/plugins/wolt/src/credentials.js +64 -0
  501. package/dist/plugins/wolt/src/index.js +8 -3
  502. package/dist/plugins/wolt/src/orders.js +2 -2
  503. package/dist/plugins/wolt/src/public.js +91 -0
  504. package/dist/plugins/wolt/src/shared.js +49 -158
  505. package/dist/plugins/woocommerce/src/credentials.js +16 -0
  506. package/dist/plugins/woocommerce/src/index.js +19 -37
  507. package/dist/plugins/wordpress/src/credentials.js +16 -0
  508. package/dist/plugins/wordpress/src/index.js +23 -42
  509. package/dist/plugins/xai/src/credentials.js +13 -0
  510. package/dist/plugins/xai/src/index.js +32 -31
  511. package/dist/plugins/xero/src/credentials.js +17 -0
  512. package/dist/plugins/xero/src/index.js +19 -36
  513. package/dist/plugins/yourls/src/credentials.js +17 -0
  514. package/dist/plugins/yourls/src/index.js +13 -23
  515. package/dist/plugins/zammad/src/credentials.js +15 -0
  516. package/dist/plugins/zammad/src/index.js +27 -47
  517. package/dist/plugins/zendesk/src/credentials.js +26 -0
  518. package/dist/plugins/zendesk/src/index.js +29 -48
  519. package/dist/plugins/zoho/src/credentials.js +17 -0
  520. package/dist/plugins/zoho/src/index.js +18 -38
  521. package/dist/plugins/zoom/src/credentials.js +19 -0
  522. package/dist/plugins/zoom/src/index.js +15 -30
  523. package/dist/plugins/zulip/src/credentials.js +16 -0
  524. package/dist/plugins/zulip/src/index.js +36 -42
  525. package/dist/sdk.d.ts +8 -0
  526. package/dist/sdk.js +3 -0
  527. package/package.json +2 -1
  528. package/dist/plugins/_shared/authedFetch.js +0 -33
  529. package/dist/plugins/_shared/tokenRefresh.js +0 -41
  530. package/dist/tests/helpers/engine-harness.d.ts +0 -1
  531. package/dist/tests/helpers/engine-harness.js +0 -236
@@ -1,37 +1,20 @@
1
- async function apiRequest(subdomain, email, apiKey, method, endpoint, body, qs) {
2
- const url = new URL(`https://${subdomain}.agilecrm.com/dev/${endpoint}`);
3
- if (qs) {
4
- for (const [k, v] of Object.entries(qs)) {
5
- if (v !== undefined)
6
- url.searchParams.set(k, String(v));
7
- }
8
- }
9
- const opts = {
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { agileCrmCredential } from "./credentials.js";
3
+ function apiRequest(ctx, method, path, body, query) {
4
+ return credentialJson(ctx, agileCrmCredential, "agileCrm", {
5
+ target: "api",
6
+ path,
10
7
  method,
11
- headers: {
12
- Accept: "application/json",
13
- "Content-Type": "application/json",
14
- Authorization: `Basic ${btoa(`${email}:${apiKey}`)}`,
15
- },
16
- };
17
- if (body && method !== "GET" && method !== "DELETE") {
18
- opts.body = JSON.stringify(body);
19
- }
20
- const res = await fetch(url.toString(), opts);
21
- if (!res.ok) {
22
- const text = await res.text();
23
- throw new Error(`Agile CRM API error ${res.status}: ${text}`);
24
- }
25
- if (res.status === 204 || res.headers.get("content-length") === "0")
26
- return { success: true };
27
- return res.json();
8
+ query,
9
+ ...(body && method !== "GET" && method !== "DELETE" ? { json: body } : {}),
10
+ });
28
11
  }
29
- async function paginateAll(subdomain, email, apiKey, method, endpoint, body, qs, limit, sendCursorInBody) {
12
+ async function paginateAll(ctx, method, path, body, qs, limit, sendCursorInBody) {
30
13
  const results = [];
31
14
  const _body = { ...body };
32
15
  const _qs = { ...qs };
33
16
  while (true) {
34
- const data = (await apiRequest(subdomain, email, apiKey, method, endpoint, Object.keys(_body).length > 0 ? _body : undefined, Object.keys(_qs).length > 0 ? _qs : undefined));
17
+ const data = (await apiRequest(ctx, method, path, Object.keys(_body).length > 0 ? _body : undefined, Object.keys(_qs).length > 0 ? _qs : undefined));
35
18
  if (!Array.isArray(data) || data.length === 0)
36
19
  break;
37
20
  results.push(...data);
@@ -49,16 +32,10 @@ async function paginateAll(subdomain, email, apiKey, method, endpoint, body, qs,
49
32
  }
50
33
  return results;
51
34
  }
52
- function getConn(ctx) {
53
- return {
54
- subdomain: ctx.connection.config.subdomain,
55
- email: ctx.connection.config.email,
56
- apiKey: ctx.connection.config.apiKey,
57
- };
58
- }
59
35
  export default function agileCrm(rl) {
60
36
  rl.setName("agileCrm");
61
37
  rl.setVersion("0.1.0");
38
+ rl.setCredential(agileCrmCredential);
62
39
  rl.setConnectionSchema({
63
40
  subdomain: {
64
41
  type: "string",
@@ -103,7 +80,6 @@ export default function agileCrm(rl) {
103
80
  },
104
81
  async execute(input, ctx) {
105
82
  const { firstName, lastName, email, company, title, phone, tags, starValue, } = input;
106
- const { subdomain, email: userEmail, apiKey } = getConn(ctx);
107
83
  const properties = [];
108
84
  if (firstName)
109
85
  properties.push({
@@ -126,7 +102,7 @@ export default function agileCrm(rl) {
126
102
  body.tags = tags;
127
103
  if (starValue !== undefined)
128
104
  body.star_value = starValue;
129
- return apiRequest(subdomain, userEmail, apiKey, "POST", "api/contacts", body);
105
+ return apiRequest(ctx, "POST", "api/contacts", body);
130
106
  },
131
107
  });
132
108
  rl.registerAction("contact.get", {
@@ -137,8 +113,7 @@ export default function agileCrm(rl) {
137
113
  },
138
114
  async execute(input, ctx) {
139
115
  const { contactId } = input;
140
- const { subdomain, email, apiKey } = getConn(ctx);
141
- return apiRequest(subdomain, email, apiKey, "GET", `api/contacts/${contactId}`);
116
+ return apiRequest(ctx, "GET", `api/contacts/${pathSegment(contactId)}`);
142
117
  },
143
118
  });
144
119
  rl.registerAction("contact.list", {
@@ -153,12 +128,11 @@ export default function agileCrm(rl) {
153
128
  },
154
129
  async execute(input, ctx) {
155
130
  const { limit } = input ?? {};
156
- const { subdomain, email, apiKey } = getConn(ctx);
157
131
  const body = {
158
132
  page_size: limit ?? 100,
159
133
  filterJson: JSON.stringify({ contact_type: "PERSON" }),
160
134
  };
161
- return paginateAll(subdomain, email, apiKey, "POST", "api/filters/filter/dynamic-filter", body, undefined, limit, true);
135
+ return paginateAll(ctx, "POST", "api/filters/filter/dynamic-filter", body, undefined, limit, true);
162
136
  },
163
137
  });
164
138
  rl.registerAction("contact.update", {
@@ -184,8 +158,6 @@ export default function agileCrm(rl) {
184
158
  },
185
159
  async execute(input, ctx) {
186
160
  const { contactId, firstName, lastName, email: contactEmail, company, tags, starValue, leadScore, } = input;
187
- const { subdomain, email, apiKey } = getConn(ctx);
188
- const baseUri = `https://${subdomain}.agilecrm.com/dev/`;
189
161
  const properties = [];
190
162
  if (firstName)
191
163
  properties.push({
@@ -200,43 +172,29 @@ export default function agileCrm(rl) {
200
172
  if (company)
201
173
  properties.push({ type: "SYSTEM", name: "company", value: company });
202
174
  let result;
203
- const auth = `Basic ${btoa(`${email}:${apiKey}`)}`;
204
- const headers = {
205
- Accept: "application/json",
206
- "Content-Type": "application/json",
207
- Authorization: auth,
208
- };
209
175
  if (properties.length > 0) {
210
- const res = await fetch(`${baseUri}api/contacts/edit-properties`, {
211
- method: "PUT",
212
- headers,
213
- body: JSON.stringify({ id: contactId, properties }),
176
+ result = await apiRequest(ctx, "PUT", "api/contacts/edit-properties", {
177
+ id: contactId,
178
+ properties,
214
179
  });
215
- result = await res.json();
216
180
  }
217
181
  if (leadScore !== undefined) {
218
- const res = await fetch(`${baseUri}api/contacts/edit/lead-score`, {
219
- method: "PUT",
220
- headers,
221
- body: JSON.stringify({ id: contactId, lead_score: leadScore }),
182
+ result = await apiRequest(ctx, "PUT", "api/contacts/edit/lead-score", {
183
+ id: contactId,
184
+ lead_score: leadScore,
222
185
  });
223
- result = await res.json();
224
186
  }
225
187
  if (tags) {
226
- const res = await fetch(`${baseUri}api/contacts/edit/tags`, {
227
- method: "PUT",
228
- headers,
229
- body: JSON.stringify({ id: contactId, tags }),
188
+ result = await apiRequest(ctx, "PUT", "api/contacts/edit/tags", {
189
+ id: contactId,
190
+ tags,
230
191
  });
231
- result = await res.json();
232
192
  }
233
193
  if (starValue !== undefined) {
234
- const res = await fetch(`${baseUri}api/contacts/edit/add-star`, {
235
- method: "PUT",
236
- headers,
237
- body: JSON.stringify({ id: contactId, star_value: starValue }),
194
+ result = await apiRequest(ctx, "PUT", "api/contacts/edit/add-star", {
195
+ id: contactId,
196
+ star_value: starValue,
238
197
  });
239
- result = await res.json();
240
198
  }
241
199
  return result ?? { success: true };
242
200
  },
@@ -249,8 +207,7 @@ export default function agileCrm(rl) {
249
207
  },
250
208
  async execute(input, ctx) {
251
209
  const { contactId } = input;
252
- const { subdomain, email, apiKey } = getConn(ctx);
253
- return apiRequest(subdomain, email, apiKey, "DELETE", `api/contacts/${contactId}`);
210
+ return apiRequest(ctx, "DELETE", `api/contacts/${pathSegment(contactId)}`);
254
211
  },
255
212
  });
256
213
  // ── Company ─────────────────────────────────────────
@@ -269,7 +226,6 @@ export default function agileCrm(rl) {
269
226
  },
270
227
  async execute(input, ctx) {
271
228
  const { name, email: companyEmail, phone, tags, } = input;
272
- const { subdomain, email, apiKey } = getConn(ctx);
273
229
  const properties = [];
274
230
  if (name)
275
231
  properties.push({ type: "SYSTEM", name: "name", value: name });
@@ -280,7 +236,7 @@ export default function agileCrm(rl) {
280
236
  const body = { type: "COMPANY", properties };
281
237
  if (tags)
282
238
  body.tags = tags;
283
- return apiRequest(subdomain, email, apiKey, "POST", "api/contacts", body);
239
+ return apiRequest(ctx, "POST", "api/contacts", body);
284
240
  },
285
241
  });
286
242
  rl.registerAction("company.get", {
@@ -291,8 +247,7 @@ export default function agileCrm(rl) {
291
247
  },
292
248
  async execute(input, ctx) {
293
249
  const { companyId } = input;
294
- const { subdomain, email, apiKey } = getConn(ctx);
295
- return apiRequest(subdomain, email, apiKey, "GET", `api/contacts/${companyId}`);
250
+ return apiRequest(ctx, "GET", `api/contacts/${pathSegment(companyId)}`);
296
251
  },
297
252
  });
298
253
  rl.registerAction("company.list", {
@@ -307,12 +262,11 @@ export default function agileCrm(rl) {
307
262
  },
308
263
  async execute(input, ctx) {
309
264
  const { limit } = input ?? {};
310
- const { subdomain, email, apiKey } = getConn(ctx);
311
265
  const body = {
312
266
  page_size: limit ?? 100,
313
267
  filterJson: JSON.stringify({ contact_type: "COMPANY" }),
314
268
  };
315
- return paginateAll(subdomain, email, apiKey, "POST", "api/filters/filter/dynamic-filter", body, undefined, limit, true);
269
+ return paginateAll(ctx, "POST", "api/filters/filter/dynamic-filter", body, undefined, limit, true);
316
270
  },
317
271
  });
318
272
  rl.registerAction("company.update", {
@@ -336,8 +290,6 @@ export default function agileCrm(rl) {
336
290
  },
337
291
  async execute(input, ctx) {
338
292
  const { companyId, name, email: companyEmail, phone, tags, starValue, } = input;
339
- const { subdomain, email, apiKey } = getConn(ctx);
340
- const baseUri = `https://${subdomain}.agilecrm.com/dev/`;
341
293
  const properties = [];
342
294
  if (name)
343
295
  properties.push({ type: "SYSTEM", name: "name", value: name });
@@ -346,35 +298,23 @@ export default function agileCrm(rl) {
346
298
  if (phone)
347
299
  properties.push({ type: "SYSTEM", name: "phone", value: phone });
348
300
  let result;
349
- const auth = `Basic ${btoa(`${email}:${apiKey}`)}`;
350
- const headers = {
351
- Accept: "application/json",
352
- "Content-Type": "application/json",
353
- Authorization: auth,
354
- };
355
301
  if (properties.length > 0) {
356
- const res = await fetch(`${baseUri}api/contacts/edit-properties`, {
357
- method: "PUT",
358
- headers,
359
- body: JSON.stringify({ id: companyId, properties }),
302
+ result = await apiRequest(ctx, "PUT", "api/contacts/edit-properties", {
303
+ id: companyId,
304
+ properties,
360
305
  });
361
- result = await res.json();
362
306
  }
363
307
  if (tags) {
364
- const res = await fetch(`${baseUri}api/contacts/edit/tags`, {
365
- method: "PUT",
366
- headers,
367
- body: JSON.stringify({ id: companyId, tags }),
308
+ result = await apiRequest(ctx, "PUT", "api/contacts/edit/tags", {
309
+ id: companyId,
310
+ tags,
368
311
  });
369
- result = await res.json();
370
312
  }
371
313
  if (starValue !== undefined) {
372
- const res = await fetch(`${baseUri}api/contacts/edit/add-star`, {
373
- method: "PUT",
374
- headers,
375
- body: JSON.stringify({ id: companyId, star_value: starValue }),
314
+ result = await apiRequest(ctx, "PUT", "api/contacts/edit/add-star", {
315
+ id: companyId,
316
+ star_value: starValue,
376
317
  });
377
- result = await res.json();
378
318
  }
379
319
  return result ?? { success: true };
380
320
  },
@@ -387,8 +327,7 @@ export default function agileCrm(rl) {
387
327
  },
388
328
  async execute(input, ctx) {
389
329
  const { companyId } = input;
390
- const { subdomain, email, apiKey } = getConn(ctx);
391
- return apiRequest(subdomain, email, apiKey, "DELETE", `api/contacts/${companyId}`);
330
+ return apiRequest(ctx, "DELETE", `api/contacts/${pathSegment(companyId)}`);
392
331
  },
393
332
  });
394
333
  // ── Deal ────────────────────────────────────────────
@@ -425,7 +364,6 @@ export default function agileCrm(rl) {
425
364
  },
426
365
  async execute(input, ctx) {
427
366
  const { name, expectedValue, probability, milestone, closeDate, contactIds, } = input;
428
- const { subdomain, email, apiKey } = getConn(ctx);
429
367
  const body = {
430
368
  name,
431
369
  expected_value: expectedValue,
@@ -435,7 +373,7 @@ export default function agileCrm(rl) {
435
373
  };
436
374
  if (contactIds)
437
375
  body.contactIds = contactIds;
438
- return apiRequest(subdomain, email, apiKey, "POST", "api/opportunity", body);
376
+ return apiRequest(ctx, "POST", "api/opportunity", body);
439
377
  },
440
378
  });
441
379
  rl.registerAction("deal.get", {
@@ -446,8 +384,7 @@ export default function agileCrm(rl) {
446
384
  },
447
385
  async execute(input, ctx) {
448
386
  const { dealId } = input;
449
- const { subdomain, email, apiKey } = getConn(ctx);
450
- return apiRequest(subdomain, email, apiKey, "GET", `api/opportunity/${dealId}`);
387
+ return apiRequest(ctx, "GET", `api/opportunity/${pathSegment(dealId)}`);
451
388
  },
452
389
  });
453
390
  rl.registerAction("deal.list", {
@@ -462,8 +399,7 @@ export default function agileCrm(rl) {
462
399
  },
463
400
  async execute(input, ctx) {
464
401
  const { limit } = input ?? {};
465
- const { subdomain, email, apiKey } = getConn(ctx);
466
- return paginateAll(subdomain, email, apiKey, "GET", "api/opportunity", undefined, { page_size: limit ?? 100 }, limit);
402
+ return paginateAll(ctx, "GET", "api/opportunity", undefined, { page_size: limit ?? 100 }, limit);
467
403
  },
468
404
  });
469
405
  rl.registerAction("deal.update", {
@@ -490,7 +426,6 @@ export default function agileCrm(rl) {
490
426
  },
491
427
  async execute(input, ctx) {
492
428
  const { dealId, name, expectedValue, probability, contactIds } = input;
493
- const { subdomain, email, apiKey } = getConn(ctx);
494
429
  const body = { id: dealId };
495
430
  if (name)
496
431
  body.name = name;
@@ -500,7 +435,7 @@ export default function agileCrm(rl) {
500
435
  body.probability = probability;
501
436
  if (contactIds)
502
437
  body.contactIds = contactIds;
503
- return apiRequest(subdomain, email, apiKey, "PUT", "api/opportunity/partial-update", body);
438
+ return apiRequest(ctx, "PUT", "api/opportunity/partial-update", body);
504
439
  },
505
440
  });
506
441
  rl.registerAction("deal.delete", {
@@ -511,8 +446,7 @@ export default function agileCrm(rl) {
511
446
  },
512
447
  async execute(input, ctx) {
513
448
  const { dealId } = input;
514
- const { subdomain, email, apiKey } = getConn(ctx);
515
- return apiRequest(subdomain, email, apiKey, "DELETE", `api/opportunity/${dealId}`);
449
+ return apiRequest(ctx, "DELETE", `api/opportunity/${pathSegment(dealId)}`);
516
450
  },
517
451
  });
518
452
  }
@@ -0,0 +1,19 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /** A personal access token, sent as a bearer to Airtable's one API origin. */
3
+ export const airtableCredential = staticCredential({
4
+ id: "airtable",
5
+ auth: { kind: "bearer" },
6
+ local: { secret: "token" },
7
+ targets: {
8
+ api: {
9
+ baseUrl: "https://api.airtable.com/v0/",
10
+ methods: ["GET", "POST", "PATCH", "DELETE"],
11
+ },
12
+ },
13
+ probe: {
14
+ target: "api",
15
+ path: "meta/whoami",
16
+ method: "GET",
17
+ acceptedStatuses: [200],
18
+ },
19
+ });
@@ -1,49 +1,36 @@
1
- const BASE_URL = "https://api.airtable.com/v0";
2
- async function apiRequest(token, method, endpoint, body, qs) {
3
- const url = new URL(`${BASE_URL}/${endpoint}`);
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { airtableCredential } from "./credentials.js";
3
+ function apiRequest(ctx, method, path, body, qs) {
4
+ // Airtable's repeated-array convention: fields[]=a&fields[]=b.
5
+ const query = {};
4
6
  if (qs) {
5
7
  for (const [k, v] of Object.entries(qs)) {
6
8
  if (v === undefined)
7
9
  continue;
8
- if (Array.isArray(v)) {
9
- for (const item of v)
10
- url.searchParams.append(`${k}[]`, String(item));
11
- }
12
- else {
13
- url.searchParams.set(k, String(v));
14
- }
10
+ query[Array.isArray(v) ? `${k}[]` : k] = v;
15
11
  }
16
12
  }
17
- const opts = {
13
+ return credentialJson(ctx, airtableCredential, "airtable", {
14
+ target: "api",
15
+ path,
18
16
  method,
19
- headers: {
20
- "Content-Type": "application/json",
21
- Authorization: `Bearer ${token}`,
22
- },
23
- };
24
- if (body &&
25
- Object.keys(body).length > 0 &&
26
- method !== "GET" &&
27
- method !== "DELETE") {
28
- opts.body = JSON.stringify(body);
29
- }
30
- const res = await fetch(url.toString(), opts);
31
- if (!res.ok) {
32
- const text = await res.text();
33
- throw new Error(`Airtable API error ${res.status}: ${text}`);
34
- }
35
- if (res.status === 204)
36
- return { success: true };
37
- return res.json();
17
+ query,
18
+ ...(body &&
19
+ Object.keys(body).length > 0 &&
20
+ method !== "GET" &&
21
+ method !== "DELETE"
22
+ ? { json: body }
23
+ : {}),
24
+ });
38
25
  }
39
- async function paginateRecords(token, endpoint, qs, limit) {
26
+ async function paginateRecords(ctx, endpoint, qs, limit) {
40
27
  const results = [];
41
28
  const _qs = { pageSize: 100, ...qs };
42
29
  let offset;
43
30
  while (true) {
44
31
  if (offset)
45
32
  _qs.offset = offset;
46
- const data = (await apiRequest(token, "GET", endpoint, undefined, _qs));
33
+ const data = (await apiRequest(ctx, "GET", endpoint, undefined, _qs));
47
34
  results.push(...data.records);
48
35
  if (limit && results.length >= limit)
49
36
  return results.slice(0, limit);
@@ -54,23 +41,21 @@ async function paginateRecords(token, endpoint, qs, limit) {
54
41
  return results;
55
42
  }
56
43
  /** Airtable limits batch writes to 10 records at a time */
57
- async function batchWrite(token, method, endpoint, records, extraBody) {
44
+ async function batchWrite(ctx, method, endpoint, records, extraBody) {
58
45
  const results = [];
59
46
  const batchSize = 10;
60
47
  for (let i = 0; i < records.length; i += batchSize) {
61
48
  const batch = records.slice(i, i + batchSize);
62
49
  const body = { ...extraBody, records: batch };
63
- const data = (await apiRequest(token, method, endpoint, body));
50
+ const data = (await apiRequest(ctx, method, endpoint, body));
64
51
  results.push(...data.records);
65
52
  }
66
53
  return results;
67
54
  }
68
- function getToken(ctx) {
69
- return ctx.connection.config.token;
70
- }
71
55
  export default function airtable(rl) {
72
56
  rl.setName("airtable");
73
57
  rl.setVersion("0.1.0");
58
+ rl.setCredential(airtableCredential);
74
59
  rl.setConnectionSchema({
75
60
  token: {
76
61
  type: "string",
@@ -92,14 +77,13 @@ export default function airtable(rl) {
92
77
  },
93
78
  async execute(input, ctx) {
94
79
  const { limit } = input ?? {};
95
- const token = getToken(ctx);
96
80
  const results = [];
97
81
  let offset;
98
82
  while (true) {
99
83
  const qs = {};
100
84
  if (offset)
101
85
  qs.offset = offset;
102
- const data = (await apiRequest(token, "GET", "meta/bases", undefined, qs));
86
+ const data = (await apiRequest(ctx, "GET", "meta/bases", undefined, qs));
103
87
  results.push(...data.bases);
104
88
  if (limit && results.length >= limit)
105
89
  return results.slice(0, limit);
@@ -122,7 +106,7 @@ export default function airtable(rl) {
122
106
  },
123
107
  async execute(input, ctx) {
124
108
  const { baseId } = input;
125
- return apiRequest(getToken(ctx), "GET", `meta/bases/${baseId}/tables`);
109
+ return apiRequest(ctx, "GET", `meta/bases/${pathSegment(baseId)}/tables`);
126
110
  },
127
111
  });
128
112
  // ── Record ──────────────────────────────────────────
@@ -152,7 +136,7 @@ export default function airtable(rl) {
152
136
  const body = { fields };
153
137
  if (typecast)
154
138
  body.typecast = true;
155
- return apiRequest(getToken(ctx), "POST", `${baseId}/${tableId}`, body);
139
+ return apiRequest(ctx, "POST", `${pathSegment(baseId)}/${pathSegment(tableId)}`, body);
156
140
  },
157
141
  });
158
142
  rl.registerAction("record.createMany", {
@@ -181,7 +165,7 @@ export default function airtable(rl) {
181
165
  const extra = {};
182
166
  if (typecast)
183
167
  extra.typecast = true;
184
- return batchWrite(getToken(ctx), "POST", `${baseId}/${tableId}`, records, extra);
168
+ return batchWrite(ctx, "POST", `${pathSegment(baseId)}/${pathSegment(tableId)}`, records, extra);
185
169
  },
186
170
  });
187
171
  rl.registerAction("record.get", {
@@ -202,7 +186,7 @@ export default function airtable(rl) {
202
186
  },
203
187
  async execute(input, ctx) {
204
188
  const { baseId, tableId, recordId } = input;
205
- return apiRequest(getToken(ctx), "GET", `${baseId}/${tableId}/${recordId}`);
189
+ return apiRequest(ctx, "GET", `${pathSegment(baseId)}/${pathSegment(tableId)}/${pathSegment(recordId)}`);
206
190
  },
207
191
  });
208
192
  rl.registerAction("record.search", {
@@ -244,13 +228,16 @@ export default function airtable(rl) {
244
228
  qs.filterByFormula = filterByFormula;
245
229
  if (fields)
246
230
  qs.fields = fields;
247
- if (sort)
248
- qs.sort = sort;
231
+ // Airtable's indexed form: sort[0][field]=Due&sort[0][direction]=asc.
232
+ for (const [i, s] of (sort ?? []).entries()) {
233
+ qs[`sort[${i}][field]`] = s.field;
234
+ qs[`sort[${i}][direction]`] = s.direction;
235
+ }
249
236
  if (view)
250
237
  qs.view = view;
251
238
  if (limit && !filterByFormula)
252
239
  qs.maxRecords = limit;
253
- return paginateRecords(getToken(ctx), `${baseId}/${tableId}`, qs, limit);
240
+ return paginateRecords(ctx, `${pathSegment(baseId)}/${pathSegment(tableId)}`, qs, limit);
254
241
  },
255
242
  });
256
243
  rl.registerAction("record.update", {
@@ -280,7 +267,7 @@ export default function airtable(rl) {
280
267
  const body = { fields };
281
268
  if (typecast)
282
269
  body.typecast = true;
283
- return apiRequest(getToken(ctx), "PATCH", `${baseId}/${tableId}/${recordId}`, body);
270
+ return apiRequest(ctx, "PATCH", `${pathSegment(baseId)}/${pathSegment(tableId)}/${pathSegment(recordId)}`, body);
284
271
  },
285
272
  });
286
273
  rl.registerAction("record.updateMany", {
@@ -309,7 +296,7 @@ export default function airtable(rl) {
309
296
  const extra = {};
310
297
  if (typecast)
311
298
  extra.typecast = true;
312
- return batchWrite(getToken(ctx), "PATCH", `${baseId}/${tableId}`, records, extra);
299
+ return batchWrite(ctx, "PATCH", `${pathSegment(baseId)}/${pathSegment(tableId)}`, records, extra);
313
300
  },
314
301
  });
315
302
  rl.registerAction("record.upsert", {
@@ -342,7 +329,7 @@ export default function airtable(rl) {
342
329
  };
343
330
  if (typecast)
344
331
  body.typecast = true;
345
- return apiRequest(getToken(ctx), "PATCH", `${baseId}/${tableId}`, body);
332
+ return apiRequest(ctx, "PATCH", `${pathSegment(baseId)}/${pathSegment(tableId)}`, body);
346
333
  },
347
334
  });
348
335
  rl.registerAction("record.delete", {
@@ -359,7 +346,7 @@ export default function airtable(rl) {
359
346
  },
360
347
  async execute(input, ctx) {
361
348
  const { baseId, tableId, recordId } = input;
362
- return apiRequest(getToken(ctx), "DELETE", `${baseId}/${tableId}/${recordId}`);
349
+ return apiRequest(ctx, "DELETE", `${pathSegment(baseId)}/${pathSegment(tableId)}/${pathSegment(recordId)}`);
363
350
  },
364
351
  });
365
352
  }
@@ -0,0 +1,20 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * An API key, sent as a bearer to Airtop's two path prefixes on one
4
+ * origin: the v1 API, and the hooks base that agent webhooks invoke.
5
+ */
6
+ export const airtopCredential = staticCredential({
7
+ id: "airtop",
8
+ auth: { kind: "bearer" },
9
+ local: { secret: "apiKey" },
10
+ targets: {
11
+ api: {
12
+ baseUrl: "https://api.airtop.ai/api/v1/",
13
+ methods: ["GET", "POST", "PUT", "DELETE"],
14
+ },
15
+ hooks: {
16
+ baseUrl: "https://api.airtop.ai/api/hooks/",
17
+ methods: ["POST"],
18
+ },
19
+ },
20
+ });