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,38 +1,24 @@
1
- const BASE_URL = "https://api.airtop.ai/api/v1";
2
- async function apiRequest(apiKey, method, endpoint, body, qs) {
3
- const url = new URL(endpoint.startsWith("http") ? endpoint : `${BASE_URL}${endpoint}`);
4
- if (qs) {
5
- for (const [k, v] of Object.entries(qs)) {
6
- if (v !== undefined)
7
- url.searchParams.set(k, String(v));
8
- }
9
- }
10
- const opts = {
11
- method,
12
- headers: {
13
- "Content-Type": "application/json",
14
- Authorization: `Bearer ${apiKey}`,
15
- },
16
- };
17
- if (body &&
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { airtopCredential } from "./credentials.js";
3
+ function apiRequest(ctx, method, path, body, qs, target = "api") {
4
+ const json = body &&
18
5
  Object.keys(body).length > 0 &&
19
6
  method !== "GET" &&
20
- method !== "DELETE") {
21
- opts.body = JSON.stringify(body);
22
- }
23
- const res = await fetch(url.toString(), opts);
24
- if (!res.ok) {
25
- const text = await res.text();
26
- throw new Error(`Airtop API error ${res.status}: ${text}`);
27
- }
28
- if (res.status === 204)
29
- return { success: true };
30
- return res.json();
7
+ method !== "DELETE"
8
+ ? body
9
+ : undefined;
10
+ return credentialJson(ctx, airtopCredential, "airtop", {
11
+ target,
12
+ path,
13
+ method,
14
+ query: qs,
15
+ ...(json !== undefined ? { json } : {}),
16
+ });
31
17
  }
32
- async function pollUntil(apiKey, endpoint, statusField, targetStatuses, timeoutMs, intervalMs = 1000) {
18
+ async function pollUntil(ctx, path, statusField, targetStatuses, timeoutMs, intervalMs = 1000) {
33
19
  const start = Date.now();
34
20
  while (true) {
35
- const data = (await apiRequest(apiKey, "GET", endpoint));
21
+ const data = (await apiRequest(ctx, "GET", path));
36
22
  const nested = data.data;
37
23
  const status = (nested?.[statusField] ?? data[statusField]);
38
24
  if (targetStatuses.includes(status))
@@ -42,12 +28,10 @@ async function pollUntil(apiKey, endpoint, statusField, targetStatuses, timeoutM
42
28
  await new Promise((r) => setTimeout(r, intervalMs));
43
29
  }
44
30
  }
45
- function getKey(ctx) {
46
- return ctx.connection.config.apiKey;
47
- }
48
31
  export default function airtop(rl) {
49
32
  rl.setName("airtop");
50
33
  rl.setVersion("0.1.0");
34
+ rl.setCredential(airtopCredential);
51
35
  rl.setConnectionSchema({
52
36
  apiKey: {
53
37
  type: "string",
@@ -99,7 +83,6 @@ export default function airtop(rl) {
99
83
  },
100
84
  async execute(input, ctx) {
101
85
  const { profileName, timeoutMinutes = 10, proxy, proxyCountry, record, solveCaptcha, saveProfileOnTermination, } = (input ?? {});
102
- const apiKey = getKey(ctx);
103
86
  let proxyConfig = false;
104
87
  if (proxy) {
105
88
  proxyConfig = proxyCountry
@@ -115,15 +98,15 @@ export default function airtop(rl) {
115
98
  record: record ?? false,
116
99
  },
117
100
  };
118
- const response = (await apiRequest(apiKey, "POST", "/sessions", body));
101
+ const response = (await apiRequest(ctx, "POST", "sessions", body));
119
102
  const sessionId = response.data
120
103
  ?.id;
121
104
  if (!sessionId)
122
105
  throw new Error("Failed to create session");
123
106
  // Poll until running
124
- await pollUntil(apiKey, `/sessions/${sessionId}`, "status", ["running"], 5 * 60 * 1000);
107
+ await pollUntil(ctx, `sessions/${pathSegment(sessionId)}`, "status", ["running"], 5 * 60 * 1000);
125
108
  if (saveProfileOnTermination && profileName) {
126
- await apiRequest(apiKey, "PUT", `/sessions/${sessionId}/save-profile-on-termination/${profileName}`);
109
+ await apiRequest(ctx, "PUT", `sessions/${pathSegment(sessionId)}/save-profile-on-termination/${pathSegment(profileName)}`);
127
110
  }
128
111
  return { sessionId, ...response };
129
112
  },
@@ -136,7 +119,7 @@ export default function airtop(rl) {
136
119
  },
137
120
  async execute(input, ctx) {
138
121
  const { sessionId } = input;
139
- await apiRequest(getKey(ctx), "DELETE", `/sessions/${sessionId}`);
122
+ await apiRequest(ctx, "DELETE", `sessions/${pathSegment(sessionId)}`);
140
123
  return { success: true };
141
124
  },
142
125
  });
@@ -153,7 +136,7 @@ export default function airtop(rl) {
153
136
  },
154
137
  async execute(input, ctx) {
155
138
  const { sessionId, profileName } = input;
156
- const response = await apiRequest(getKey(ctx), "PUT", `/sessions/${sessionId}/save-profile-on-termination/${profileName}`);
139
+ const response = await apiRequest(ctx, "PUT", `sessions/${pathSegment(sessionId)}/save-profile-on-termination/${pathSegment(profileName)}`);
157
140
  return {
158
141
  sessionId,
159
142
  profileName,
@@ -176,10 +159,9 @@ export default function airtop(rl) {
176
159
  const { sessionId, timeoutSeconds = 30 } = input;
177
160
  // This relies on SSE which we can't do cleanly in a plugin action.
178
161
  // Fall back to polling the files endpoint.
179
- const apiKey = getKey(ctx);
180
162
  const start = Date.now();
181
163
  while (Date.now() - start < timeoutSeconds * 1000) {
182
- const data = (await apiRequest(apiKey, "GET", "/files", undefined, {
164
+ const data = (await apiRequest(ctx, "GET", "files", undefined, {
183
165
  sessionIds: sessionId,
184
166
  }));
185
167
  const files = data.data?.files ?? [];
@@ -219,7 +201,7 @@ export default function airtop(rl) {
219
201
  body.url = url;
220
202
  if (waitUntil)
221
203
  body.waitUntil = waitUntil;
222
- const response = (await apiRequest(getKey(ctx), "POST", `/sessions/${sessionId}/windows`, body));
204
+ const response = (await apiRequest(ctx, "POST", `sessions/${pathSegment(sessionId)}/windows`, body));
223
205
  const windowId = response.data
224
206
  ?.windowId;
225
207
  return { sessionId, windowId, ...response };
@@ -234,7 +216,7 @@ export default function airtop(rl) {
234
216
  },
235
217
  async execute(input, ctx) {
236
218
  const { sessionId, windowId } = input;
237
- const response = await apiRequest(getKey(ctx), "DELETE", `/sessions/${sessionId}/windows/${windowId}`);
219
+ const response = await apiRequest(ctx, "DELETE", `sessions/${pathSegment(sessionId)}/windows/${pathSegment(windowId)}`);
238
220
  return { sessionId, windowId, ...response };
239
221
  },
240
222
  });
@@ -260,7 +242,7 @@ export default function airtop(rl) {
260
242
  const body = { url };
261
243
  if (waitUntil)
262
244
  body.waitUntil = waitUntil;
263
- return apiRequest(getKey(ctx), "POST", `/sessions/${sessionId}/windows/${windowId}`, body);
245
+ return apiRequest(ctx, "POST", `sessions/${pathSegment(sessionId)}/windows/${pathSegment(windowId)}`, body);
264
246
  },
265
247
  });
266
248
  rl.registerAction("window.list", {
@@ -271,7 +253,7 @@ export default function airtop(rl) {
271
253
  },
272
254
  async execute(input, ctx) {
273
255
  const { sessionId } = input;
274
- return apiRequest(getKey(ctx), "GET", `/sessions/${sessionId}/windows`);
256
+ return apiRequest(ctx, "GET", `sessions/${pathSegment(sessionId)}/windows`);
275
257
  },
276
258
  });
277
259
  rl.registerAction("window.getLiveView", {
@@ -305,7 +287,7 @@ export default function airtop(rl) {
305
287
  qs.screenResolution = screenResolution;
306
288
  if (disableResize)
307
289
  qs.disableResize = true;
308
- return apiRequest(getKey(ctx), "GET", `/sessions/${sessionId}/windows/${windowId}`, undefined, qs);
290
+ return apiRequest(ctx, "GET", `sessions/${pathSegment(sessionId)}/windows/${pathSegment(windowId)}`, undefined, qs);
309
291
  },
310
292
  });
311
293
  rl.registerAction("window.takeScreenshot", {
@@ -317,7 +299,7 @@ export default function airtop(rl) {
317
299
  },
318
300
  async execute(input, ctx) {
319
301
  const { sessionId, windowId } = input;
320
- return apiRequest(getKey(ctx), "POST", `/sessions/${sessionId}/windows/${windowId}/screenshot`);
302
+ return apiRequest(ctx, "POST", `sessions/${pathSegment(sessionId)}/windows/${pathSegment(windowId)}/screenshot`);
321
303
  },
322
304
  });
323
305
  // ── Extraction ──────────────────────────────────────
@@ -356,7 +338,7 @@ export default function airtop(rl) {
356
338
  ...(outputSchema ? { outputSchema } : {}),
357
339
  },
358
340
  };
359
- return apiRequest(getKey(ctx), "POST", `/sessions/${sessionId}/windows/${windowId}/page-query`, body);
341
+ return apiRequest(ctx, "POST", `sessions/${pathSegment(sessionId)}/windows/${pathSegment(windowId)}/page-query`, body);
360
342
  },
361
343
  });
362
344
  rl.registerAction("extraction.scrape", {
@@ -368,7 +350,7 @@ export default function airtop(rl) {
368
350
  },
369
351
  async execute(input, ctx) {
370
352
  const { sessionId, windowId } = input;
371
- return apiRequest(getKey(ctx), "POST", `/sessions/${sessionId}/windows/${windowId}/scrape-content`, {});
353
+ return apiRequest(ctx, "POST", `sessions/${pathSegment(sessionId)}/windows/${pathSegment(windowId)}/scrape-content`, {});
372
354
  },
373
355
  });
374
356
  rl.registerAction("extraction.getPaginated", {
@@ -407,7 +389,7 @@ export default function airtop(rl) {
407
389
  configuration.paginationMode = paginationMode;
408
390
  if (interactionMode)
409
391
  configuration.interactionMode = interactionMode;
410
- return apiRequest(getKey(ctx), "POST", `/sessions/${sessionId}/windows/${windowId}/paginated-extraction`, { prompt, configuration });
392
+ return apiRequest(ctx, "POST", `sessions/${pathSegment(sessionId)}/windows/${pathSegment(windowId)}/paginated-extraction`, { prompt, configuration });
411
393
  },
412
394
  });
413
395
  // ── Interaction ─────────────────────────────────────
@@ -430,7 +412,7 @@ export default function airtop(rl) {
430
412
  },
431
413
  async execute(input, ctx) {
432
414
  const { sessionId, windowId, elementDescription, clickType = "click", } = input;
433
- return apiRequest(getKey(ctx), "POST", `/sessions/${sessionId}/windows/${windowId}/click`, {
415
+ return apiRequest(ctx, "POST", `sessions/${pathSegment(sessionId)}/windows/${pathSegment(windowId)}/click`, {
434
416
  elementDescription,
435
417
  configuration: { clickType },
436
418
  });
@@ -450,7 +432,7 @@ export default function airtop(rl) {
450
432
  },
451
433
  async execute(input, ctx) {
452
434
  const { sessionId, windowId, elementDescription } = input;
453
- return apiRequest(getKey(ctx), "POST", `/sessions/${sessionId}/windows/${windowId}/hover`, {
435
+ return apiRequest(ctx, "POST", `sessions/${pathSegment(sessionId)}/windows/${pathSegment(windowId)}/hover`, {
454
436
  elementDescription,
455
437
  });
456
438
  },
@@ -480,7 +462,7 @@ export default function airtop(rl) {
480
462
  body.elementDescription = elementDescription;
481
463
  if (pressEnterKey)
482
464
  body.pressEnterKey = true;
483
- return apiRequest(getKey(ctx), "POST", `/sessions/${sessionId}/windows/${windowId}/type`, body);
465
+ return apiRequest(ctx, "POST", `sessions/${pathSegment(sessionId)}/windows/${pathSegment(windowId)}/type`, body);
484
466
  },
485
467
  });
486
468
  rl.registerAction("interaction.fill", {
@@ -497,14 +479,13 @@ export default function airtop(rl) {
497
479
  },
498
480
  async execute(input, ctx) {
499
481
  const { sessionId, windowId, formData } = input;
500
- const apiKey = getKey(ctx);
501
482
  // Start async automation
502
- const asyncResponse = (await apiRequest(apiKey, "POST", `/async/sessions/${sessionId}/windows/${windowId}/execute-automation`, { automationId: "auto", parameters: { customData: formData } }));
483
+ const asyncResponse = (await apiRequest(ctx, "POST", `async/sessions/${pathSegment(sessionId)}/windows/${pathSegment(windowId)}/execute-automation`, { automationId: "auto", parameters: { customData: formData } }));
503
484
  const reqId = asyncResponse.requestId;
504
485
  if (!reqId)
505
486
  throw new Error("No requestId received from automation");
506
487
  // Poll until completed
507
- const result = await pollUntil(apiKey, `/requests/${reqId}/status`, "status", ["completed", "error"], 5 * 60 * 1000);
488
+ const result = await pollUntil(ctx, `requests/${pathSegment(reqId)}/status`, "status", ["completed", "error"], 5 * 60 * 1000);
508
489
  return { sessionId, windowId, ...result };
509
490
  },
510
491
  });
@@ -546,7 +527,7 @@ export default function airtop(rl) {
546
527
  body.scrollBy = scrollBy;
547
528
  if (scrollWithin)
548
529
  body.scrollWithin = scrollWithin;
549
- return apiRequest(getKey(ctx), "POST", `/sessions/${sessionId}/windows/${windowId}/scroll`, body);
530
+ return apiRequest(ctx, "POST", `sessions/${pathSegment(sessionId)}/windows/${pathSegment(windowId)}/scroll`, body);
550
531
  },
551
532
  });
552
533
  // ── Agent ───────────────────────────────────────────
@@ -573,17 +554,14 @@ export default function airtop(rl) {
573
554
  },
574
555
  async execute(input, ctx) {
575
556
  const { agentId, parameters, awaitExecution = true, timeoutSeconds = 600, } = input;
576
- const apiKey = getKey(ctx);
577
- const HOOKS_BASE = "https://api.airtop.ai/api/hooks";
578
557
  // Get agent details for webhook ID
579
- const agentDetails = (await apiRequest(apiKey, "GET", `/agents/${agentId}`));
558
+ const agentDetails = (await apiRequest(ctx, "GET", `agents/${pathSegment(agentId)}`));
580
559
  const data = agentDetails.data;
581
560
  const webhookId = data?.webhookId;
582
561
  if (!webhookId)
583
562
  throw new Error("No webhookId found for agent");
584
- // Invoke agent
585
- const invokeUrl = `${HOOKS_BASE}/agents/${agentId}/webhooks/${webhookId}`;
586
- const invocation = (await apiRequest(apiKey, "POST", invokeUrl, (parameters ?? {})));
563
+ // Invoke agent, on the hooks base of the same origin
564
+ const invocation = (await apiRequest(ctx, "POST", `agents/${pathSegment(agentId)}/webhooks/${pathSegment(webhookId)}`, (parameters ?? {}), undefined, "hooks"));
587
565
  const invocationId = invocation.invocationId;
588
566
  if (!invocationId)
589
567
  throw new Error("No invocationId received");
@@ -593,7 +571,7 @@ export default function airtop(rl) {
593
571
  // Poll for completion
594
572
  const start = Date.now();
595
573
  while (true) {
596
- const status = (await apiRequest(apiKey, "GET", `/agents/${agentId}/invocations/${invocationId}`));
574
+ const status = (await apiRequest(ctx, "GET", `agents/${pathSegment(agentId)}/invocations/${pathSegment(invocationId)}`));
597
575
  const invData = status.data;
598
576
  const s = (invData?.status ?? status.status);
599
577
  if (s === "completed" || s === "error") {
@@ -617,7 +595,7 @@ export default function airtop(rl) {
617
595
  },
618
596
  async execute(input, ctx) {
619
597
  const { fileId } = input;
620
- return apiRequest(getKey(ctx), "GET", `/files/${fileId}`);
598
+ return apiRequest(ctx, "GET", `files/${pathSegment(fileId)}`);
621
599
  },
622
600
  });
623
601
  rl.registerAction("file.list", {
@@ -642,7 +620,7 @@ export default function airtop(rl) {
642
620
  qs.sessionIds = sessionIds;
643
621
  if (limit)
644
622
  qs.limit = limit;
645
- return apiRequest(getKey(ctx), "GET", "/files", undefined, qs);
623
+ return apiRequest(ctx, "GET", "files", undefined, qs);
646
624
  },
647
625
  });
648
626
  rl.registerAction("file.delete", {
@@ -653,7 +631,7 @@ export default function airtop(rl) {
653
631
  },
654
632
  async execute(input, ctx) {
655
633
  const { fileId } = input;
656
- await apiRequest(getKey(ctx), "DELETE", `/files/${fileId}`);
634
+ await apiRequest(ctx, "DELETE", `files/${pathSegment(fileId)}`);
657
635
  return { success: true };
658
636
  },
659
637
  });
@@ -691,15 +669,14 @@ export default function airtop(rl) {
691
669
  },
692
670
  async execute(input, ctx) {
693
671
  const { sessionId, windowId, fileName, url, fileType = "customer_upload", triggerFileInput: triggerInput = true, elementDescription, } = input;
694
- const apiKey = getKey(ctx);
695
- // Fetch the file
672
+ // Fetch the file: a public, credential-free download of a caller URL
696
673
  const fileRes = await fetch(url);
697
674
  if (!fileRes.ok)
698
675
  throw new Error(`Failed to fetch file from ${url}: ${fileRes.status}`);
699
676
  const fileBuffer = await fileRes.arrayBuffer();
700
677
  const base64 = Buffer.from(fileBuffer).toString("base64");
701
678
  // Create file
702
- const createResponse = (await apiRequest(apiKey, "POST", "/files", {
679
+ const createResponse = (await apiRequest(ctx, "POST", "files", {
703
680
  fileName,
704
681
  fileType,
705
682
  content: base64,
@@ -707,7 +684,7 @@ export default function airtop(rl) {
707
684
  const fileId = createResponse.data
708
685
  ?.id;
709
686
  // Push to session
710
- await apiRequest(apiKey, "POST", `/sessions/${sessionId}/files`, {
687
+ await apiRequest(ctx, "POST", `sessions/${pathSegment(sessionId)}/files`, {
711
688
  fileId,
712
689
  });
713
690
  // Trigger file input if needed
@@ -715,7 +692,7 @@ export default function airtop(rl) {
715
692
  const body = { fileId };
716
693
  if (elementDescription)
717
694
  body.elementDescription = elementDescription;
718
- await apiRequest(apiKey, "POST", `/sessions/${sessionId}/windows/${windowId}/trigger-file-input`, body);
695
+ await apiRequest(ctx, "POST", `sessions/${pathSegment(sessionId)}/windows/${pathSegment(windowId)}/trigger-file-input`, body);
719
696
  }
720
697
  return { sessionId, windowId, fileId, success: true };
721
698
  },
@@ -739,16 +716,15 @@ export default function airtop(rl) {
739
716
  },
740
717
  async execute(input, ctx) {
741
718
  const { sessionId, windowId, fileId, elementDescription } = input;
742
- const apiKey = getKey(ctx);
743
719
  // Push to session
744
- await apiRequest(apiKey, "POST", `/sessions/${sessionId}/files`, {
720
+ await apiRequest(ctx, "POST", `sessions/${pathSegment(sessionId)}/files`, {
745
721
  fileId,
746
722
  });
747
723
  // Trigger file input
748
724
  const body = { fileId };
749
725
  if (elementDescription)
750
726
  body.elementDescription = elementDescription;
751
- await apiRequest(apiKey, "POST", `/sessions/${sessionId}/windows/${windowId}/trigger-file-input`, body);
727
+ await apiRequest(ctx, "POST", `sessions/${pathSegment(sessionId)}/windows/${pathSegment(windowId)}/trigger-file-input`, body);
752
728
  return { sessionId, windowId, fileId, success: true };
753
729
  },
754
730
  });
@@ -0,0 +1,19 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /** An API key, sent as the X-API-KEY header to APITemplate.io's one origin. */
3
+ export const apiTemplateIoCredential = staticCredential({
4
+ id: "apiTemplateIo",
5
+ auth: { kind: "apiKey", header: "X-API-KEY" },
6
+ local: { secret: "apiKey" },
7
+ targets: {
8
+ api: {
9
+ baseUrl: "https://api.apitemplate.io/v1/",
10
+ methods: ["GET", "POST"],
11
+ },
12
+ },
13
+ probe: {
14
+ target: "api",
15
+ path: "account-information",
16
+ method: "GET",
17
+ acceptedStatuses: [200],
18
+ },
19
+ });
@@ -1,35 +1,18 @@
1
- const BASE_URL = "https://api.apitemplate.io/v1";
2
- async function apiRequest(apiKey, method, endpoint, qs, body) {
3
- const url = new URL(`${BASE_URL}${endpoint}`);
4
- if (qs) {
5
- for (const [k, v] of Object.entries(qs)) {
6
- if (v !== undefined)
7
- url.searchParams.set(k, String(v));
8
- }
9
- }
10
- const opts = {
1
+ import { credentialJson } from "../../_shared/credentials.js";
2
+ import { apiTemplateIoCredential } from "./credentials.js";
3
+ function apiRequest(ctx, method, path, query, body) {
4
+ return credentialJson(ctx, apiTemplateIoCredential, "apiTemplateIo", {
5
+ target: "api",
6
+ path,
11
7
  method,
12
- headers: {
13
- "Content-Type": "application/json",
14
- "X-API-KEY": apiKey,
15
- },
16
- };
17
- if (body && Object.keys(body).length > 0) {
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(`APITemplate.io error ${res.status}: ${text}`);
24
- }
25
- return res.json();
26
- }
27
- function getKey(ctx) {
28
- return ctx.connection.config.apiKey;
8
+ query,
9
+ ...(body && Object.keys(body).length > 0 ? { json: body } : {}),
10
+ });
29
11
  }
30
12
  export default function apiTemplateIo(rl) {
31
13
  rl.setName("apiTemplateIo");
32
14
  rl.setVersion("0.1.0");
15
+ rl.setCredential(apiTemplateIoCredential);
33
16
  rl.setConnectionSchema({
34
17
  apiKey: {
35
18
  type: "string",
@@ -42,7 +25,7 @@ export default function apiTemplateIo(rl) {
42
25
  access: "read",
43
26
  description: "Get account information",
44
27
  async execute(_input, ctx) {
45
- return apiRequest(getKey(ctx), "GET", "/account-information");
28
+ return apiRequest(ctx, "GET", "account-information");
46
29
  },
47
30
  });
48
31
  rl.registerAction("template.list", {
@@ -57,7 +40,7 @@ export default function apiTemplateIo(rl) {
57
40
  },
58
41
  async execute(input, ctx) {
59
42
  const { format } = (input ?? {});
60
- const templates = (await apiRequest(getKey(ctx), "GET", "/list-templates"));
43
+ const templates = (await apiRequest(ctx, "GET", "list-templates"));
61
44
  if (format) {
62
45
  return templates.filter((t) => t.format === format.toUpperCase());
63
46
  }
@@ -84,7 +67,7 @@ export default function apiTemplateIo(rl) {
84
67
  const body = {};
85
68
  if (overrides)
86
69
  body.overrides = overrides;
87
- return apiRequest(getKey(ctx), "POST", "/create", { template_id: templateId }, body);
70
+ return apiRequest(ctx, "POST", "create", { template_id: templateId }, body);
88
71
  },
89
72
  });
90
73
  rl.registerAction("pdf.create", {
@@ -104,7 +87,7 @@ export default function apiTemplateIo(rl) {
104
87
  },
105
88
  async execute(input, ctx) {
106
89
  const { templateId, properties } = input;
107
- return apiRequest(getKey(ctx), "POST", "/create", { template_id: templateId }, properties);
90
+ return apiRequest(ctx, "POST", "create", { template_id: templateId }, properties);
108
91
  },
109
92
  });
110
93
  }
@@ -0,0 +1,19 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /** A personal access token, sent as a bearer to Asana's one API origin. */
3
+ export const asanaCredential = staticCredential({
4
+ id: "asana",
5
+ auth: { kind: "bearer" },
6
+ local: { secret: "token" },
7
+ targets: {
8
+ api: {
9
+ baseUrl: "https://app.asana.com/api/1.0/",
10
+ methods: ["GET", "POST", "PUT", "DELETE"],
11
+ },
12
+ },
13
+ probe: {
14
+ target: "api",
15
+ path: "users/me",
16
+ method: "GET",
17
+ acceptedStatuses: [200],
18
+ },
19
+ });