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,51 +1,25 @@
1
- function getConn(ctx) {
2
- const c = ctx.connection.config;
3
- const sandbox = c.sandbox === true;
4
- const base = sandbox
5
- ? "https://sandbox-quickbooks.api.intuit.com"
6
- : "https://quickbooks.api.intuit.com";
7
- return {
8
- base,
9
- accessToken: c.accessToken,
10
- companyId: c.companyId,
11
- };
12
- }
13
- async function api(conn, method, endpoint, body, qs) {
14
- const url = new URL(`${conn.base}${endpoint}`);
15
- if (qs) {
16
- for (const [k, v] of Object.entries(qs)) {
17
- if (v !== undefined && v !== null)
18
- url.searchParams.set(k, String(v));
19
- }
20
- }
21
- const init = {
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { quickbooksCredential } from "./credentials.js";
3
+ function api(ctx, method, endpoint, body, qs) {
4
+ return credentialJson(ctx, quickbooksCredential, "quickbooks", {
5
+ target: "api",
6
+ path: endpoint,
22
7
  method,
23
- headers: {
24
- Authorization: `Bearer ${conn.accessToken}`,
25
- Accept: "application/json",
26
- "Content-Type": "application/json",
27
- },
28
- };
29
- if (body && Object.keys(body).length > 0)
30
- init.body = JSON.stringify(body);
31
- const res = await fetch(url.toString(), init);
32
- if (!res.ok)
33
- throw new Error(`QuickBooks error ${res.status}: ${await res.text()}`);
34
- return res.json();
8
+ query: qs,
9
+ ...(body && Object.keys(body).length > 0 ? { json: body } : {}),
10
+ });
35
11
  }
36
12
  function capitalCase(s) {
37
13
  return s.charAt(0).toUpperCase() + s.slice(1);
38
14
  }
39
- function registerQbResource(rl, resource, conn) {
15
+ function registerQbResource(rl, resource) {
40
16
  const cap = capitalCase(resource);
41
- const prefix = (c) => `/v3/company/${c.companyId}`;
42
17
  rl.registerAction(`${resource}.create`, {
43
18
  access: "write",
44
19
  description: `Create a ${resource}`,
45
20
  inputSchema: { data: { type: "object", required: true } },
46
21
  async execute(input, ctx) {
47
- const c = conn(ctx);
48
- return api(c, "POST", `${prefix(c)}/${resource}`, input.data);
22
+ return api(ctx, "POST", resource, input.data);
49
23
  },
50
24
  });
51
25
  rl.registerAction(`${resource}.get`, {
@@ -53,8 +27,7 @@ function registerQbResource(rl, resource, conn) {
53
27
  description: `Get a ${resource} by ID`,
54
28
  inputSchema: { id: { type: "string", required: true } },
55
29
  async execute(input, ctx) {
56
- const c = conn(ctx);
57
- const data = (await api(c, "GET", `${prefix(c)}/${resource}/${input.id}`));
30
+ const data = (await api(ctx, "GET", `${resource}/${pathSegment(input.id)}`));
58
31
  return data[cap];
59
32
  },
60
33
  });
@@ -70,14 +43,13 @@ function registerQbResource(rl, resource, conn) {
70
43
  limit: { type: "number", required: false },
71
44
  },
72
45
  async execute(input, ctx) {
73
- const c = conn(ctx);
74
46
  const p = (input ?? {});
75
47
  let q = `SELECT * FROM ${cap}`;
76
48
  if (p.query)
77
49
  q += ` ${p.query}`;
78
50
  if (p.limit)
79
51
  q += ` MAXRESULTS ${p.limit}`;
80
- const data = (await api(c, "GET", `${prefix(c)}/query`, undefined, {
52
+ const data = (await api(ctx, "GET", "query", undefined, {
81
53
  query: q,
82
54
  }));
83
55
  return data.QueryResponse?.[cap] ?? [];
@@ -88,8 +60,7 @@ function registerQbResource(rl, resource, conn) {
88
60
  description: `Update a ${resource} (must include Id and SyncToken)`,
89
61
  inputSchema: { data: { type: "object", required: true } },
90
62
  async execute(input, ctx) {
91
- const c = conn(ctx);
92
- return api(c, "POST", `${prefix(c)}/${resource}`, input.data);
63
+ return api(ctx, "POST", resource, input.data);
93
64
  },
94
65
  });
95
66
  rl.registerAction(`${resource}.delete`, {
@@ -100,15 +71,15 @@ function registerQbResource(rl, resource, conn) {
100
71
  syncToken: { type: "string", required: true },
101
72
  },
102
73
  async execute(input, ctx) {
103
- const c = conn(ctx);
104
74
  const p = input;
105
- return api(c, "POST", `${prefix(c)}/${resource}`, { Id: p.id, SyncToken: p.syncToken }, { operation: "delete" });
75
+ return api(ctx, "POST", resource, { Id: p.id, SyncToken: p.syncToken }, { operation: "delete" });
106
76
  },
107
77
  });
108
78
  }
109
79
  export default function quickbooks(rl) {
110
80
  rl.setName("quickbooks");
111
81
  rl.setVersion("0.1.0");
82
+ rl.setCredential(quickbooksCredential);
112
83
  rl.setConnectionSchema({
113
84
  accessToken: {
114
85
  type: "string",
@@ -140,6 +111,6 @@ export default function quickbooks(rl) {
140
111
  "purchase",
141
112
  "vendor",
142
113
  ]) {
143
- registerQbResource(rl, resource, getConn);
114
+ registerQbResource(rl, resource);
144
115
  }
145
116
  }
@@ -0,0 +1,19 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /** An access token, sent as a bearer to Raindrop's one API origin. */
3
+ export const raindropCredential = staticCredential({
4
+ id: "raindrop",
5
+ auth: { kind: "bearer" },
6
+ local: { secret: "accessToken" },
7
+ targets: {
8
+ api: {
9
+ baseUrl: "https://api.raindrop.io/rest/v1/",
10
+ methods: ["GET", "POST", "PUT", "DELETE"],
11
+ },
12
+ },
13
+ probe: {
14
+ target: "api",
15
+ path: "user",
16
+ method: "GET",
17
+ acceptedStatuses: [200],
18
+ },
19
+ });
@@ -1,22 +1,17 @@
1
- const BASE = "https://api.raindrop.io/rest/v1";
2
- async function apiRequest(token, method, endpoint, body) {
3
- const init = {
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { raindropCredential } from "./credentials.js";
3
+ function apiRequest(ctx, method, endpoint, body) {
4
+ return credentialJson(ctx, raindropCredential, "raindrop", {
5
+ target: "api",
6
+ path: endpoint,
4
7
  method,
5
- headers: {
6
- Authorization: `Bearer ${token}`,
7
- "Content-Type": "application/json",
8
- },
9
- };
10
- if (body && Object.keys(body).length > 0)
11
- init.body = JSON.stringify(body);
12
- const res = await fetch(`${BASE}${endpoint}`, init);
13
- if (!res.ok)
14
- throw new Error(`Raindrop error ${res.status}: ${await res.text()}`);
15
- return res.json();
8
+ ...(body && Object.keys(body).length > 0 ? { json: body } : {}),
9
+ });
16
10
  }
17
11
  export default function raindrop(rl) {
18
12
  rl.setName("raindrop");
19
13
  rl.setVersion("0.1.0");
14
+ rl.setCredential(raindropCredential);
20
15
  rl.setConnectionSchema({
21
16
  accessToken: {
22
17
  type: "string",
@@ -25,7 +20,6 @@ export default function raindrop(rl) {
25
20
  env: "RAINDROP_ACCESS_TOKEN",
26
21
  },
27
22
  });
28
- const key = (ctx) => ctx.connection.config.accessToken;
29
23
  // ── Bookmark ────────────────────────────────────────
30
24
  rl.registerAction("bookmark.create", {
31
25
  access: "write",
@@ -57,7 +51,7 @@ export default function raindrop(rl) {
57
51
  body.tags = p.tags.split(",").map((t) => t.trim());
58
52
  if (p.pleaseParse)
59
53
  body.pleaseParse = {};
60
- const data = (await apiRequest(key(ctx), "POST", "/raindrop", body));
54
+ const data = (await apiRequest(ctx, "POST", "raindrop", body));
61
55
  return data.item;
62
56
  },
63
57
  });
@@ -67,7 +61,7 @@ export default function raindrop(rl) {
67
61
  inputSchema: { bookmarkId: { type: "string", required: true } },
68
62
  async execute(input, ctx) {
69
63
  const { bookmarkId } = input;
70
- const data = (await apiRequest(key(ctx), "GET", `/raindrop/${bookmarkId}`));
64
+ const data = (await apiRequest(ctx, "GET", `raindrop/${pathSegment(bookmarkId)}`));
71
65
  return data.item;
72
66
  },
73
67
  });
@@ -80,7 +74,7 @@ export default function raindrop(rl) {
80
74
  },
81
75
  async execute(input, ctx) {
82
76
  const p = input;
83
- const data = (await apiRequest(key(ctx), "GET", `/raindrops/${p.collectionId}`));
77
+ const data = (await apiRequest(ctx, "GET", `raindrops/${pathSegment(p.collectionId)}`));
84
78
  let items = (data.items ?? []);
85
79
  if (p.limit)
86
80
  items = items.slice(0, p.limit);
@@ -112,7 +106,7 @@ export default function raindrop(rl) {
112
106
  body.tags = p.tags.split(",").map((t) => t.trim());
113
107
  if (p.collectionId)
114
108
  body.collection = { $id: Number(p.collectionId) };
115
- const data = (await apiRequest(key(ctx), "PUT", `/raindrop/${p.bookmarkId}`, body));
109
+ const data = (await apiRequest(ctx, "PUT", `raindrop/${pathSegment(p.bookmarkId)}`, body));
116
110
  return data.item;
117
111
  },
118
112
  });
@@ -122,7 +116,7 @@ export default function raindrop(rl) {
122
116
  inputSchema: { bookmarkId: { type: "string", required: true } },
123
117
  async execute(input, ctx) {
124
118
  const { bookmarkId } = input;
125
- return apiRequest(key(ctx), "DELETE", `/raindrop/${bookmarkId}`);
119
+ return apiRequest(ctx, "DELETE", `raindrop/${pathSegment(bookmarkId)}`);
126
120
  },
127
121
  });
128
122
  // ── Collection ──────────────────────────────────────
@@ -142,7 +136,7 @@ export default function raindrop(rl) {
142
136
  const body = { title: p.title };
143
137
  if (p.parentId)
144
138
  body["parent.$id"] = Number(p.parentId);
145
- const data = (await apiRequest(key(ctx), "POST", "/collection", body));
139
+ const data = (await apiRequest(ctx, "POST", "collection", body));
146
140
  return data.item;
147
141
  },
148
142
  });
@@ -152,7 +146,7 @@ export default function raindrop(rl) {
152
146
  inputSchema: { collectionId: { type: "string", required: true } },
153
147
  async execute(input, ctx) {
154
148
  const { collectionId } = input;
155
- const data = (await apiRequest(key(ctx), "GET", `/collection/${collectionId}`));
149
+ const data = (await apiRequest(ctx, "GET", `collection/${pathSegment(collectionId)}`));
156
150
  return data.item;
157
151
  },
158
152
  });
@@ -169,8 +163,8 @@ export default function raindrop(rl) {
169
163
  },
170
164
  async execute(input, ctx) {
171
165
  const p = (input ?? {});
172
- const endpoint = p.type === "children" ? "/collections/childrens" : "/collections";
173
- const data = (await apiRequest(key(ctx), "GET", endpoint));
166
+ const endpoint = p.type === "children" ? "collections/childrens" : "collections";
167
+ const data = (await apiRequest(ctx, "GET", endpoint));
174
168
  let items = (data.items ?? []);
175
169
  if (p.limit)
176
170
  items = items.slice(0, p.limit);
@@ -192,7 +186,7 @@ export default function raindrop(rl) {
192
186
  body.title = p.title;
193
187
  if (p.parentId)
194
188
  body["parent.$id"] = Number(p.parentId);
195
- const data = (await apiRequest(key(ctx), "PUT", `/collection/${p.collectionId}`, body));
189
+ const data = (await apiRequest(ctx, "PUT", `collection/${pathSegment(p.collectionId)}`, body));
196
190
  return data.item;
197
191
  },
198
192
  });
@@ -202,7 +196,7 @@ export default function raindrop(rl) {
202
196
  inputSchema: { collectionId: { type: "string", required: true } },
203
197
  async execute(input, ctx) {
204
198
  const { collectionId } = input;
205
- return apiRequest(key(ctx), "DELETE", `/collection/${collectionId}`);
199
+ return apiRequest(ctx, "DELETE", `collection/${pathSegment(collectionId)}`);
206
200
  },
207
201
  });
208
202
  // ── Tag ─────────────────────────────────────────────
@@ -215,8 +209,10 @@ export default function raindrop(rl) {
215
209
  },
216
210
  async execute(input, ctx) {
217
211
  const p = (input ?? {});
218
- const endpoint = p.collectionId ? `/tags/${p.collectionId}` : "/tags";
219
- const data = (await apiRequest(key(ctx), "GET", endpoint));
212
+ const endpoint = p.collectionId
213
+ ? `tags/${pathSegment(p.collectionId)}`
214
+ : "tags";
215
+ const data = (await apiRequest(ctx, "GET", endpoint));
220
216
  let items = (data.items ?? []);
221
217
  if (p.limit)
222
218
  items = items.slice(0, p.limit);
@@ -236,8 +232,10 @@ export default function raindrop(rl) {
236
232
  },
237
233
  async execute(input, ctx) {
238
234
  const p = input;
239
- const endpoint = p.collectionId ? `/tags/${p.collectionId}` : "/tags";
240
- return apiRequest(key(ctx), "DELETE", endpoint, {
235
+ const endpoint = p.collectionId
236
+ ? `tags/${pathSegment(p.collectionId)}`
237
+ : "tags";
238
+ return apiRequest(ctx, "DELETE", endpoint, {
241
239
  tags: p.tags.split(",").map((t) => t.trim()),
242
240
  });
243
241
  },
@@ -255,8 +253,8 @@ export default function raindrop(rl) {
255
253
  },
256
254
  async execute(input, ctx) {
257
255
  const userId = input?.userId;
258
- const endpoint = userId ? `/user/${userId}` : "/user";
259
- const data = (await apiRequest(key(ctx), "GET", endpoint));
256
+ const endpoint = userId ? `user/${pathSegment(userId)}` : "user";
257
+ const data = (await apiRequest(ctx, "GET", endpoint));
260
258
  return data.user;
261
259
  },
262
260
  });
@@ -0,0 +1,13 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /** An API key as a bearer to Recraft's image generation endpoints. */
3
+ export const recraftCredential = staticCredential({
4
+ id: "recraft",
5
+ auth: { kind: "bearer" },
6
+ local: { secret: "apiKey" },
7
+ targets: {
8
+ images: {
9
+ baseUrl: "https://external.api.recraft.ai/v1/images/",
10
+ methods: ["POST"],
11
+ },
12
+ },
13
+ });
@@ -13,12 +13,13 @@
13
13
  * legacy `style` knob — pass `styleId` against your own custom
14
14
  * style if you've set one up.
15
15
  */
16
- import { readImageInput, SEND_FILE_NOTE, writeImageFile } from "../../_shared/mediaFile.js";
17
- const ENDPOINT = "https://external.api.recraft.ai/v1/images/generations";
18
- const EDIT_ENDPOINT = "https://external.api.recraft.ai/v1/images/imageToImage";
16
+ import { credentialJson, multipartBody } from "../../_shared/credentials.js";
17
+ import { readImageInput, SEND_FILE_NOTE, writeImageFile, } from "../../_shared/mediaFile.js";
18
+ import { recraftCredential } from "./credentials.js";
19
19
  export default function recraft(rl) {
20
20
  rl.setName("recraft");
21
21
  rl.setVersion("0.1.0");
22
+ rl.setCredential(recraftCredential);
22
23
  rl.setConnectionSchema({
23
24
  apiKey: {
24
25
  type: "string",
@@ -72,7 +73,6 @@ export default function recraft(rl) {
72
73
  if (typeof p.prompt !== "string" || p.prompt.length === 0) {
73
74
  throw new Error("recraft: prompt is required");
74
75
  }
75
- const apiKey = ctx.connection.config.apiKey;
76
76
  const model = p.model ?? "recraftv3";
77
77
  const body = {
78
78
  prompt: p.prompt,
@@ -86,20 +86,21 @@ export default function recraft(rl) {
86
86
  body.style = p.style;
87
87
  if (p.styleId)
88
88
  body.style_id = p.styleId;
89
- const res = await fetch(ENDPOINT, {
89
+ const data = (await credentialJson(ctx, recraftCredential, "recraft", {
90
+ target: "images",
91
+ path: "generations",
90
92
  method: "POST",
91
- headers: {
92
- "Content-Type": "application/json",
93
- Authorization: `Bearer ${apiKey}`,
94
- },
95
- body: JSON.stringify(body),
96
- });
97
- if (!res.ok) {
98
- throw new Error(`Recraft API error ${res.status}: ${await res.text()}`);
99
- }
100
- const data = (await res.json());
93
+ json: body,
94
+ }));
101
95
  const stamp = Date.now();
102
- const images = (data.data ?? []).map((d, i) => writeImageFile({ base64: d.b64_json, mimeType: "image/png", provider: "recraft", index: i, saveDir: p.saveDir, stamp }));
96
+ const images = (data.data ?? []).map((d, i) => writeImageFile({
97
+ base64: d.b64_json,
98
+ mimeType: "image/png",
99
+ provider: "recraft",
100
+ index: i,
101
+ saveDir: p.saveDir,
102
+ stamp,
103
+ }));
103
104
  return { provider: "recraft", model, images, note: SEND_FILE_NOTE };
104
105
  },
105
106
  });
@@ -153,8 +154,7 @@ export default function recraft(rl) {
153
154
  if (typeof p.prompt !== "string" || p.prompt.length === 0) {
154
155
  throw new Error("recraft: prompt is required");
155
156
  }
156
- const img = readImageInput(p.imagePath, "recraft");
157
- const apiKey = ctx.connection.config.apiKey;
157
+ const img = await readImageInput(p.imagePath, "recraft");
158
158
  const form = new FormData();
159
159
  form.append("image", new Blob([img.bytes], { type: img.mimeType }), img.fileName);
160
160
  form.append("prompt", p.prompt);
@@ -167,19 +167,30 @@ export default function recraft(rl) {
167
167
  form.append("style", p.style);
168
168
  if (p.styleId)
169
169
  form.append("style_id", p.styleId);
170
- const res = await fetch(EDIT_ENDPOINT, {
170
+ const { body, contentType } = await multipartBody(form);
171
+ const data = (await credentialJson(ctx, recraftCredential, "recraft", {
172
+ target: "images",
173
+ path: "imageToImage",
171
174
  method: "POST",
172
- headers: { Authorization: `Bearer ${apiKey}` },
173
- body: form,
174
- });
175
- if (!res.ok) {
176
- throw new Error(`Recraft API error ${res.status}: ${await res.text()}`);
177
- }
178
- const data = (await res.json());
175
+ body,
176
+ headers: { "Content-Type": contentType },
177
+ }));
179
178
  const stamp = Date.now();
180
- const images = (data.data ?? []).map((d, i) => writeImageFile({ base64: d.b64_json, mimeType: "image/png", provider: "recraft", index: i, saveDir: p.saveDir, stamp }));
179
+ const images = (data.data ?? []).map((d, i) => writeImageFile({
180
+ base64: d.b64_json,
181
+ mimeType: "image/png",
182
+ provider: "recraft",
183
+ index: i,
184
+ saveDir: p.saveDir,
185
+ stamp,
186
+ }));
181
187
  // The imageToImage endpoint's own default model is recraftv4_1.
182
- return { provider: "recraft", model: p.model ?? "recraftv4_1", images, note: SEND_FILE_NOTE };
188
+ return {
189
+ provider: "recraft",
190
+ model: p.model ?? "recraftv4_1",
191
+ images,
192
+ note: SEND_FILE_NOTE,
193
+ };
183
194
  },
184
195
  });
185
196
  }
@@ -0,0 +1,26 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * An optional OAuth2 access token, sent as a bearer to oauth.reddit.com;
4
+ * without one, public reads go unsigned to www.reddit.com.
5
+ */
6
+ export const redditCredential = staticCredential({
7
+ id: "reddit",
8
+ auth: { kind: "bearer" },
9
+ local: { secret: "accessToken" },
10
+ optional: {
11
+ targets: {
12
+ api: {
13
+ baseUrl: "https://www.reddit.com/",
14
+ methods: ["GET"],
15
+ allowedHeaders: ["User-Agent"],
16
+ },
17
+ },
18
+ },
19
+ targets: {
20
+ api: {
21
+ baseUrl: "https://oauth.reddit.com/",
22
+ methods: ["GET", "POST"],
23
+ allowedHeaders: ["User-Agent"],
24
+ },
25
+ },
26
+ });
@@ -1,28 +1,24 @@
1
- async function apiRequest(token, method, endpoint, qs) {
2
- const base = token ? "https://oauth.reddit.com" : "https://www.reddit.com";
3
- const url = new URL(`${base}/${endpoint}`);
4
- if (qs) {
5
- for (const [k, v] of Object.entries(qs)) {
6
- if (v !== undefined && v !== null)
7
- url.searchParams.set(k, String(v));
8
- }
9
- }
10
- url.searchParams.set("api_type", "json");
11
- const headers = { "User-Agent": "runline" };
12
- if (token)
13
- headers.Authorization = `Bearer ${token}`;
14
- const init = { method, headers };
15
- const res = await fetch(url.toString(), init);
16
- if (!res.ok)
17
- throw new Error(`Reddit error ${res.status}: ${await res.text()}`);
18
- return res.json();
19
- }
20
- function getToken(ctx) {
21
- return ctx.connection.config.accessToken;
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { redditCredential } from "./credentials.js";
3
+ /**
4
+ * A Reddit call; every answer is asked for as JSON (`api_type=json`). A
5
+ * read's parameters travel as its query, a write's as a form body, so
6
+ * posted text never reaches a URL.
7
+ */
8
+ function apiRequest(ctx, method, endpoint, params) {
9
+ const all = { ...params, api_type: "json" };
10
+ return credentialJson(ctx, redditCredential, "reddit", {
11
+ target: "api",
12
+ path: endpoint,
13
+ method,
14
+ ...(method === "GET" ? { query: all } : { form: all }),
15
+ headers: { "User-Agent": "runline" },
16
+ });
22
17
  }
23
18
  export default function reddit(rl) {
24
19
  rl.setName("reddit");
25
20
  rl.setVersion("0.1.0");
21
+ rl.setCredential(redditCredential);
26
22
  rl.setConnectionSchema({
27
23
  accessToken: {
28
24
  type: "string",
@@ -68,7 +64,7 @@ export default function reddit(rl) {
68
64
  qs.url = p.url;
69
65
  if (p.resubmit)
70
66
  qs.resubmit = "true";
71
- const data = (await apiRequest(getToken(ctx), "POST", "api/submit", qs));
67
+ const data = (await apiRequest(ctx, "POST", "api/submit", qs));
72
68
  return data.json?.data;
73
69
  },
74
70
  });
@@ -81,7 +77,7 @@ export default function reddit(rl) {
81
77
  },
82
78
  async execute(input, ctx) {
83
79
  const { subreddit, postId } = input;
84
- const data = (await apiRequest(getToken(ctx), "GET", `r/${subreddit}/comments/${postId}.json`));
80
+ const data = (await apiRequest(ctx, "GET", `r/${pathSegment(subreddit)}/comments/${pathSegment(`${postId}.json`)}`));
85
81
  const listing = data[0];
86
82
  const ld = listing.data;
87
83
  const children = ld.children;
@@ -108,12 +104,12 @@ export default function reddit(rl) {
108
104
  const p = (input ?? {});
109
105
  const cat = p.category ?? "";
110
106
  const endpoint = cat
111
- ? `r/${p.subreddit}/${cat}.json`
112
- : `r/${p.subreddit}.json`;
107
+ ? `r/${pathSegment(p.subreddit)}/${pathSegment(`${cat}.json`)}`
108
+ : `r/${pathSegment(`${p.subreddit}.json`)}`;
113
109
  const qs = {};
114
110
  if (p.limit)
115
111
  qs.limit = p.limit;
116
- const data = (await apiRequest(getToken(ctx), "GET", endpoint, qs));
112
+ const data = (await apiRequest(ctx, "GET", endpoint, qs));
117
113
  const ld = data.data;
118
114
  return ld.children.map((c) => c.data);
119
115
  },
@@ -124,7 +120,7 @@ export default function reddit(rl) {
124
120
  inputSchema: { postId: { type: "string", required: true } },
125
121
  async execute(input, ctx) {
126
122
  const { postId } = input;
127
- await apiRequest(getToken(ctx), "POST", "api/del", {
123
+ await apiRequest(ctx, "POST", "api/del", {
128
124
  id: `t3_${postId}`,
129
125
  });
130
126
  return { success: true };
@@ -155,11 +151,11 @@ export default function reddit(rl) {
155
151
  if (p.limit)
156
152
  qs.limit = p.limit;
157
153
  const endpoint = p.subreddit
158
- ? `r/${p.subreddit}/search.json`
154
+ ? `r/${pathSegment(p.subreddit)}/search.json`
159
155
  : "search.json";
160
156
  if (p.subreddit)
161
157
  qs.restrict_sr = "true";
162
- const data = (await apiRequest(getToken(ctx), "GET", endpoint, qs));
158
+ const data = (await apiRequest(ctx, "GET", endpoint, qs));
163
159
  const ld = data.data;
164
160
  return ld.children.map((c) => c.data);
165
161
  },
@@ -174,7 +170,7 @@ export default function reddit(rl) {
174
170
  },
175
171
  async execute(input, ctx) {
176
172
  const { postId, text } = input;
177
- const data = (await apiRequest(getToken(ctx), "POST", "api/comment", {
173
+ const data = (await apiRequest(ctx, "POST", "api/comment", {
178
174
  thing_id: `t3_${postId}`,
179
175
  text,
180
176
  }));
@@ -193,7 +189,7 @@ export default function reddit(rl) {
193
189
  },
194
190
  async execute(input, ctx) {
195
191
  const { commentId, text } = input;
196
- const data = (await apiRequest(getToken(ctx), "POST", "api/comment", {
192
+ const data = (await apiRequest(ctx, "POST", "api/comment", {
197
193
  thing_id: `t1_${commentId}`,
198
194
  text,
199
195
  }));
@@ -209,7 +205,7 @@ export default function reddit(rl) {
209
205
  inputSchema: { commentId: { type: "string", required: true } },
210
206
  async execute(input, ctx) {
211
207
  const { commentId } = input;
212
- await apiRequest(getToken(ctx), "POST", "api/del", {
208
+ await apiRequest(ctx, "POST", "api/del", {
213
209
  id: `t1_${commentId}`,
214
210
  });
215
211
  return { success: true };
@@ -230,7 +226,7 @@ export default function reddit(rl) {
230
226
  async execute(input, ctx) {
231
227
  const p = input;
232
228
  const content = p.content ?? "about";
233
- const data = (await apiRequest(getToken(ctx), "GET", `r/${p.subreddit}/about/${content}.json`));
229
+ const data = (await apiRequest(ctx, "GET", `r/${pathSegment(p.subreddit)}/about/${pathSegment(`${content}.json`)}`));
234
230
  if (content === "rules")
235
231
  return data.rules;
236
232
  return data.data;
@@ -243,7 +239,7 @@ export default function reddit(rl) {
243
239
  inputSchema: { username: { type: "string", required: true } },
244
240
  async execute(input, ctx) {
245
241
  const { username } = input;
246
- const data = (await apiRequest(getToken(ctx), "GET", `user/${username}/about.json`));
242
+ const data = (await apiRequest(ctx, "GET", `user/${pathSegment(username)}/about.json`));
247
243
  return data.data;
248
244
  },
249
245
  });
@@ -0,0 +1,23 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * An API token, sent as a bearer to Replicate's v1 API. `Prefer: wait`
4
+ * lets the server hold a create open for fast predictions.
5
+ */
6
+ export const replicateCredential = staticCredential({
7
+ id: "replicate",
8
+ auth: { kind: "bearer" },
9
+ local: { secret: "apiToken" },
10
+ targets: {
11
+ api: {
12
+ baseUrl: "https://api.replicate.com/v1/",
13
+ methods: ["GET", "POST"],
14
+ allowedHeaders: ["Prefer"],
15
+ },
16
+ },
17
+ probe: {
18
+ target: "api",
19
+ path: "account",
20
+ method: "GET",
21
+ acceptedStatuses: [200],
22
+ },
23
+ });