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
@@ -0,0 +1,19 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /** An API key, sent in the X-Api-Key header to Clockify's one API origin. */
3
+ export const clockifyCredential = staticCredential({
4
+ id: "clockify",
5
+ auth: { kind: "apiKey", header: "X-Api-Key" },
6
+ local: { secret: "apiKey" },
7
+ targets: {
8
+ api: {
9
+ baseUrl: "https://api.clockify.me/api/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,40 +1,25 @@
1
- const BASE_URL = "https://api.clockify.me/api/v1";
2
- async function apiRequest(apiKey, method, endpoint, body, qs) {
3
- const url = new URL(`${BASE_URL}/${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
- const opts = {
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { clockifyCredential } from "./credentials.js";
3
+ async function apiRequest(ctx, method, path, body, qs) {
4
+ return credentialJson(ctx, clockifyCredential, "clockify", {
5
+ target: "api",
6
+ path,
11
7
  method,
12
- headers: { "Content-Type": "application/json", "X-Api-Key": apiKey },
13
- };
14
- if (body &&
15
- Object.keys(body).length > 0 &&
16
- method !== "GET" &&
17
- method !== "DELETE") {
18
- opts.body = JSON.stringify(body);
19
- }
20
- const res = await fetch(url.toString(), opts);
21
- if (!res.ok) {
22
- const text = await res.text();
23
- throw new Error(`Clockify API error ${res.status}: ${text}`);
24
- }
25
- if (res.status === 204)
26
- return { success: true };
27
- const ct = res.headers.get("content-type") ?? "";
28
- if (ct.includes("application/json"))
29
- return res.json();
30
- return { success: true };
8
+ query: qs,
9
+ ...(body &&
10
+ Object.keys(body).length > 0 &&
11
+ method !== "GET" &&
12
+ method !== "DELETE"
13
+ ? { json: body }
14
+ : {}),
15
+ });
31
16
  }
32
- async function paginateAll(apiKey, endpoint, qs, limit) {
17
+ async function paginateAll(ctx, path, qs, limit) {
33
18
  const results = [];
34
19
  let page = 1;
35
20
  const size = 50;
36
21
  while (true) {
37
- const data = (await apiRequest(apiKey, "GET", endpoint, undefined, {
22
+ const data = (await apiRequest(ctx, "GET", path, undefined, {
38
23
  ...qs,
39
24
  page,
40
25
  "page-size": size,
@@ -50,12 +35,10 @@ async function paginateAll(apiKey, endpoint, qs, limit) {
50
35
  }
51
36
  return results;
52
37
  }
53
- function getKey(ctx) {
54
- return ctx.connection.config.apiKey;
55
- }
56
38
  export default function clockify(rl) {
57
39
  rl.setName("clockify");
58
40
  rl.setVersion("0.1.0");
41
+ rl.setCredential(clockifyCredential);
59
42
  rl.setConnectionSchema({
60
43
  apiKey: {
61
44
  type: "string",
@@ -78,7 +61,9 @@ export default function clockify(rl) {
78
61
  },
79
62
  async execute(input, ctx) {
80
63
  const { workspaceId, name } = input;
81
- return apiRequest(getKey(ctx), "POST", `workspaces/${workspaceId}/clients`, { name });
64
+ return apiRequest(ctx, "POST", `workspaces/${pathSegment(workspaceId)}/clients`, {
65
+ name,
66
+ });
82
67
  },
83
68
  });
84
69
  rl.registerAction("client.get", {
@@ -94,7 +79,7 @@ export default function clockify(rl) {
94
79
  },
95
80
  async execute(input, ctx) {
96
81
  const { workspaceId, clientId } = input;
97
- return apiRequest(getKey(ctx), "GET", `workspaces/${workspaceId}/clients/${clientId}`);
82
+ return apiRequest(ctx, "GET", `workspaces/${pathSegment(workspaceId)}/clients/${pathSegment(clientId)}`);
98
83
  },
99
84
  });
100
85
  rl.registerAction("client.list", {
@@ -121,7 +106,7 @@ export default function clockify(rl) {
121
106
  qs.name = name;
122
107
  if (archived !== undefined)
123
108
  qs.archived = archived;
124
- return paginateAll(getKey(ctx), `workspaces/${workspaceId}/clients`, qs, limit);
109
+ return paginateAll(ctx, `workspaces/${pathSegment(workspaceId)}/clients`, qs, limit);
125
110
  },
126
111
  });
127
112
  rl.registerAction("client.update", {
@@ -139,7 +124,7 @@ export default function clockify(rl) {
139
124
  },
140
125
  async execute(input, ctx) {
141
126
  const { workspaceId, clientId, ...body } = input;
142
- return apiRequest(getKey(ctx), "PUT", `workspaces/${workspaceId}/clients/${clientId}`, body);
127
+ return apiRequest(ctx, "PUT", `workspaces/${pathSegment(workspaceId)}/clients/${pathSegment(clientId)}`, body);
143
128
  },
144
129
  });
145
130
  rl.registerAction("client.delete", {
@@ -155,7 +140,7 @@ export default function clockify(rl) {
155
140
  },
156
141
  async execute(input, ctx) {
157
142
  const { workspaceId, clientId } = input;
158
- await apiRequest(getKey(ctx), "DELETE", `workspaces/${workspaceId}/clients/${clientId}`);
143
+ await apiRequest(ctx, "DELETE", `workspaces/${pathSegment(workspaceId)}/clients/${pathSegment(clientId)}`);
159
144
  return { success: true };
160
145
  },
161
146
  });
@@ -182,7 +167,7 @@ export default function clockify(rl) {
182
167
  },
183
168
  async execute(input, ctx) {
184
169
  const { workspaceId, ...body } = input;
185
- return apiRequest(getKey(ctx), "POST", `workspaces/${workspaceId}/projects`, body);
170
+ return apiRequest(ctx, "POST", `workspaces/${pathSegment(workspaceId)}/projects`, body);
186
171
  },
187
172
  });
188
173
  rl.registerAction("project.get", {
@@ -198,7 +183,7 @@ export default function clockify(rl) {
198
183
  },
199
184
  async execute(input, ctx) {
200
185
  const { workspaceId, projectId } = input;
201
- return apiRequest(getKey(ctx), "GET", `workspaces/${workspaceId}/projects/${projectId}`);
186
+ return apiRequest(ctx, "GET", `workspaces/${pathSegment(workspaceId)}/projects/${pathSegment(projectId)}`);
202
187
  },
203
188
  });
204
189
  rl.registerAction("project.list", {
@@ -225,7 +210,7 @@ export default function clockify(rl) {
225
210
  qs.name = name;
226
211
  if (archived !== undefined)
227
212
  qs.archived = archived;
228
- return paginateAll(getKey(ctx), `workspaces/${workspaceId}/projects`, qs, limit);
213
+ return paginateAll(ctx, `workspaces/${pathSegment(workspaceId)}/projects`, qs, limit);
229
214
  },
230
215
  });
231
216
  rl.registerAction("project.update", {
@@ -248,7 +233,7 @@ export default function clockify(rl) {
248
233
  },
249
234
  async execute(input, ctx) {
250
235
  const { workspaceId, projectId, ...body } = input;
251
- return apiRequest(getKey(ctx), "PUT", `workspaces/${workspaceId}/projects/${projectId}`, body);
236
+ return apiRequest(ctx, "PUT", `workspaces/${pathSegment(workspaceId)}/projects/${pathSegment(projectId)}`, body);
252
237
  },
253
238
  });
254
239
  rl.registerAction("project.delete", {
@@ -264,7 +249,7 @@ export default function clockify(rl) {
264
249
  },
265
250
  async execute(input, ctx) {
266
251
  const { workspaceId, projectId } = input;
267
- await apiRequest(getKey(ctx), "DELETE", `workspaces/${workspaceId}/projects/${projectId}`);
252
+ await apiRequest(ctx, "DELETE", `workspaces/${pathSegment(workspaceId)}/projects/${pathSegment(projectId)}`);
268
253
  return { success: true };
269
254
  },
270
255
  });
@@ -282,7 +267,7 @@ export default function clockify(rl) {
282
267
  },
283
268
  async execute(input, ctx) {
284
269
  const { workspaceId, name } = input;
285
- return apiRequest(getKey(ctx), "POST", `workspaces/${workspaceId}/tags`, {
270
+ return apiRequest(ctx, "POST", `workspaces/${pathSegment(workspaceId)}/tags`, {
286
271
  name,
287
272
  });
288
273
  },
@@ -311,7 +296,7 @@ export default function clockify(rl) {
311
296
  qs.name = name;
312
297
  if (archived !== undefined)
313
298
  qs.archived = archived;
314
- return paginateAll(getKey(ctx), `workspaces/${workspaceId}/tags`, qs, limit);
299
+ return paginateAll(ctx, `workspaces/${pathSegment(workspaceId)}/tags`, qs, limit);
315
300
  },
316
301
  });
317
302
  rl.registerAction("tag.update", {
@@ -329,7 +314,7 @@ export default function clockify(rl) {
329
314
  },
330
315
  async execute(input, ctx) {
331
316
  const { workspaceId, tagId, ...body } = input;
332
- return apiRequest(getKey(ctx), "PUT", `workspaces/${workspaceId}/tags/${tagId}`, body);
317
+ return apiRequest(ctx, "PUT", `workspaces/${pathSegment(workspaceId)}/tags/${pathSegment(tagId)}`, body);
333
318
  },
334
319
  });
335
320
  rl.registerAction("tag.delete", {
@@ -345,7 +330,7 @@ export default function clockify(rl) {
345
330
  },
346
331
  async execute(input, ctx) {
347
332
  const { workspaceId, tagId } = input;
348
- await apiRequest(getKey(ctx), "DELETE", `workspaces/${workspaceId}/tags/${tagId}`);
333
+ await apiRequest(ctx, "DELETE", `workspaces/${pathSegment(workspaceId)}/tags/${pathSegment(tagId)}`);
349
334
  return { success: true };
350
335
  },
351
336
  });
@@ -383,7 +368,7 @@ export default function clockify(rl) {
383
368
  const [h, m] = estimate.split(":");
384
369
  body.estimate = `PT${h}H${m}M`;
385
370
  }
386
- return apiRequest(getKey(ctx), "POST", `workspaces/${workspaceId}/projects/${projectId}/tasks`, body);
371
+ return apiRequest(ctx, "POST", `workspaces/${pathSegment(workspaceId)}/projects/${pathSegment(projectId)}/tasks`, body);
387
372
  },
388
373
  });
389
374
  rl.registerAction("task.get", {
@@ -400,7 +385,7 @@ export default function clockify(rl) {
400
385
  },
401
386
  async execute(input, ctx) {
402
387
  const { workspaceId, projectId, taskId } = input;
403
- return apiRequest(getKey(ctx), "GET", `workspaces/${workspaceId}/projects/${projectId}/tasks/${taskId}`);
388
+ return apiRequest(ctx, "GET", `workspaces/${pathSegment(workspaceId)}/projects/${pathSegment(projectId)}/tasks/${pathSegment(taskId)}`);
404
389
  },
405
390
  });
406
391
  rl.registerAction("task.list", {
@@ -431,9 +416,9 @@ export default function clockify(rl) {
431
416
  qs.name = name;
432
417
  if (limit) {
433
418
  qs["page-size"] = limit;
434
- return apiRequest(getKey(ctx), "GET", `workspaces/${workspaceId}/projects/${projectId}/tasks`, undefined, qs);
419
+ return apiRequest(ctx, "GET", `workspaces/${pathSegment(workspaceId)}/projects/${pathSegment(projectId)}/tasks`, undefined, qs);
435
420
  }
436
- return paginateAll(getKey(ctx), `workspaces/${workspaceId}/projects/${projectId}/tasks`, qs);
421
+ return paginateAll(ctx, `workspaces/${pathSegment(workspaceId)}/projects/${pathSegment(projectId)}/tasks`, qs);
437
422
  },
438
423
  });
439
424
  rl.registerAction("task.update", {
@@ -466,7 +451,7 @@ export default function clockify(rl) {
466
451
  const [h, m] = estimate.split(":");
467
452
  body.estimate = `PT${h}H${m}M`;
468
453
  }
469
- return apiRequest(getKey(ctx), "PUT", `workspaces/${workspaceId}/projects/${projectId}/tasks/${taskId}`, body);
454
+ return apiRequest(ctx, "PUT", `workspaces/${pathSegment(workspaceId)}/projects/${pathSegment(projectId)}/tasks/${pathSegment(taskId)}`, body);
470
455
  },
471
456
  });
472
457
  rl.registerAction("task.delete", {
@@ -483,7 +468,7 @@ export default function clockify(rl) {
483
468
  },
484
469
  async execute(input, ctx) {
485
470
  const { workspaceId, projectId, taskId } = input;
486
- await apiRequest(getKey(ctx), "DELETE", `workspaces/${workspaceId}/projects/${projectId}/tasks/${taskId}`);
471
+ await apiRequest(ctx, "DELETE", `workspaces/${pathSegment(workspaceId)}/projects/${pathSegment(projectId)}/tasks/${pathSegment(taskId)}`);
487
472
  return { success: true };
488
473
  },
489
474
  });
@@ -519,7 +504,7 @@ export default function clockify(rl) {
519
504
  },
520
505
  async execute(input, ctx) {
521
506
  const { workspaceId, ...body } = input;
522
- return apiRequest(getKey(ctx), "POST", `workspaces/${workspaceId}/time-entries`, body);
507
+ return apiRequest(ctx, "POST", `workspaces/${pathSegment(workspaceId)}/time-entries`, body);
523
508
  },
524
509
  });
525
510
  rl.registerAction("timeEntry.get", {
@@ -539,7 +524,7 @@ export default function clockify(rl) {
539
524
  },
540
525
  async execute(input, ctx) {
541
526
  const { workspaceId, timeEntryId } = input;
542
- return apiRequest(getKey(ctx), "GET", `workspaces/${workspaceId}/time-entries/${timeEntryId}`);
527
+ return apiRequest(ctx, "GET", `workspaces/${pathSegment(workspaceId)}/time-entries/${pathSegment(timeEntryId)}`);
543
528
  },
544
529
  });
545
530
  rl.registerAction("timeEntry.update", {
@@ -572,11 +557,11 @@ export default function clockify(rl) {
572
557
  const { workspaceId, timeEntryId, ...body } = input;
573
558
  // start is required by API — fetch current if not set
574
559
  if (!body.start) {
575
- const current = (await apiRequest(getKey(ctx), "GET", `workspaces/${workspaceId}/time-entries/${timeEntryId}`));
560
+ const current = (await apiRequest(ctx, "GET", `workspaces/${pathSegment(workspaceId)}/time-entries/${pathSegment(timeEntryId)}`));
576
561
  const interval = current.timeInterval;
577
562
  body.start = interval.start;
578
563
  }
579
- return apiRequest(getKey(ctx), "PUT", `workspaces/${workspaceId}/time-entries/${timeEntryId}`, body);
564
+ return apiRequest(ctx, "PUT", `workspaces/${pathSegment(workspaceId)}/time-entries/${pathSegment(timeEntryId)}`, body);
580
565
  },
581
566
  });
582
567
  rl.registerAction("timeEntry.delete", {
@@ -596,7 +581,7 @@ export default function clockify(rl) {
596
581
  },
597
582
  async execute(input, ctx) {
598
583
  const { workspaceId, timeEntryId } = input;
599
- await apiRequest(getKey(ctx), "DELETE", `workspaces/${workspaceId}/time-entries/${timeEntryId}`);
584
+ await apiRequest(ctx, "DELETE", `workspaces/${pathSegment(workspaceId)}/time-entries/${pathSegment(timeEntryId)}`);
600
585
  return { success: true };
601
586
  },
602
587
  });
@@ -629,7 +614,7 @@ export default function clockify(rl) {
629
614
  qs.email = email;
630
615
  if (status)
631
616
  qs.status = status;
632
- return paginateAll(getKey(ctx), `workspaces/${workspaceId}/users`, qs, limit);
617
+ return paginateAll(ctx, `workspaces/${pathSegment(workspaceId)}/users`, qs, limit);
633
618
  },
634
619
  });
635
620
  // ── Workspace ───────────────────────────────────────
@@ -641,7 +626,7 @@ export default function clockify(rl) {
641
626
  },
642
627
  async execute(input, ctx) {
643
628
  const { limit } = (input ?? {});
644
- const data = (await apiRequest(getKey(ctx), "GET", "workspaces"));
629
+ const data = (await apiRequest(ctx, "GET", "workspaces"));
645
630
  if (limit)
646
631
  return data.slice(0, limit);
647
632
  return data;
@@ -0,0 +1,19 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /** An API token, sent as a bearer to Cloudflare's one API origin. */
3
+ export const cloudflareCredential = staticCredential({
4
+ id: "cloudflare",
5
+ auth: { kind: "bearer" },
6
+ local: { secret: "apiToken" },
7
+ targets: {
8
+ api: {
9
+ baseUrl: "https://api.cloudflare.com/client/v4/",
10
+ methods: ["GET", "POST", "DELETE"],
11
+ },
12
+ },
13
+ probe: {
14
+ target: "api",
15
+ path: "user/tokens/verify",
16
+ method: "GET",
17
+ acceptedStatuses: [200],
18
+ },
19
+ });
@@ -1,38 +1,23 @@
1
- const BASE_URL = "https://api.cloudflare.com/client/v4";
2
- async function apiRequest(token, method, endpoint, body, qs) {
3
- const url = new URL(`${BASE_URL}${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
- const opts = {
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { cloudflareCredential } from "./credentials.js";
3
+ function apiRequest(ctx, method, path, body, qs) {
4
+ return credentialJson(ctx, cloudflareCredential, "cloudflare", {
5
+ target: "api",
6
+ path,
11
7
  method,
12
- headers: {
13
- "Content-Type": "application/json",
14
- Authorization: `Bearer ${token}`,
15
- },
16
- };
17
- if (body &&
18
- Object.keys(body).length > 0 &&
19
- 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(`Cloudflare API error ${res.status}: ${text}`);
27
- }
28
- return res.json();
29
- }
30
- function getToken(ctx) {
31
- return ctx.connection.config.apiToken;
8
+ query: qs,
9
+ ...(body &&
10
+ Object.keys(body).length > 0 &&
11
+ method !== "GET" &&
12
+ method !== "DELETE"
13
+ ? { json: body }
14
+ : {}),
15
+ });
32
16
  }
33
17
  export default function cloudflare(rl) {
34
18
  rl.setName("cloudflare");
35
19
  rl.setVersion("0.1.0");
20
+ rl.setCredential(cloudflareCredential);
36
21
  rl.setConnectionSchema({
37
22
  apiToken: {
38
23
  type: "string",
@@ -54,7 +39,7 @@ export default function cloudflare(rl) {
54
39
  },
55
40
  async execute(input, ctx) {
56
41
  const { zoneId, certificateId } = input;
57
- const data = (await apiRequest(getToken(ctx), "GET", `/zones/${zoneId}/origin_tls_client_auth/${certificateId}`));
42
+ const data = (await apiRequest(ctx, "GET", `zones/${pathSegment(zoneId)}/origin_tls_client_auth/${pathSegment(certificateId)}`));
58
43
  return data.result;
59
44
  },
60
45
  });
@@ -70,7 +55,7 @@ export default function cloudflare(rl) {
70
55
  const qs = {};
71
56
  if (limit)
72
57
  qs.per_page = limit;
73
- const data = (await apiRequest(getToken(ctx), "GET", `/zones/${zoneId}/origin_tls_client_auth`, undefined, qs));
58
+ const data = (await apiRequest(ctx, "GET", `zones/${pathSegment(zoneId)}/origin_tls_client_auth`, undefined, qs));
74
59
  return data.result;
75
60
  },
76
61
  });
@@ -92,7 +77,7 @@ export default function cloudflare(rl) {
92
77
  },
93
78
  async execute(input, ctx) {
94
79
  const { zoneId, certificate, privateKey } = input;
95
- const data = (await apiRequest(getToken(ctx), "POST", `/zones/${zoneId}/origin_tls_client_auth`, {
80
+ const data = (await apiRequest(ctx, "POST", `zones/${pathSegment(zoneId)}/origin_tls_client_auth`, {
96
81
  certificate,
97
82
  private_key: privateKey,
98
83
  }));
@@ -112,7 +97,7 @@ export default function cloudflare(rl) {
112
97
  },
113
98
  async execute(input, ctx) {
114
99
  const { zoneId, certificateId } = input;
115
- const data = (await apiRequest(getToken(ctx), "DELETE", `/zones/${zoneId}/origin_tls_client_auth/${certificateId}`));
100
+ const data = (await apiRequest(ctx, "DELETE", `zones/${pathSegment(zoneId)}/origin_tls_client_auth/${pathSegment(certificateId)}`));
116
101
  return data.result;
117
102
  },
118
103
  });
@@ -0,0 +1,17 @@
1
+ import { httpsBase, staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * An API token, appended by the transport as the token query parameter on
4
+ * the connection's own Cockpit instance beneath /api/. The instance URL is
5
+ * public config and must be HTTPS.
6
+ */
7
+ export const cockpitCredential = staticCredential({
8
+ id: "cockpit",
9
+ auth: { kind: "queryKey", param: "token" },
10
+ local: { secret: "accessToken" },
11
+ targets: (config) => ({
12
+ api: {
13
+ baseUrl: httpsBase(config.url, "api/"),
14
+ methods: ["GET", "POST"],
15
+ },
16
+ }),
17
+ });
@@ -1,29 +1,19 @@
1
- async function apiRequest(baseUrl, token, method, endpoint, body) {
2
- const url = new URL(`${baseUrl}/api${endpoint}`);
3
- url.searchParams.set("token", token);
4
- const opts = {
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { cockpitCredential } from "./credentials.js";
3
+ function apiRequest(ctx, method, path, body) {
4
+ return credentialJson(ctx, cockpitCredential, "cockpit", {
5
+ target: "api",
6
+ path,
5
7
  method,
6
- headers: { "Content-Type": "application/json", Accept: "application/json" },
7
- };
8
- if (body && Object.keys(body).length > 0 && method !== "GET") {
9
- opts.body = JSON.stringify(body);
10
- }
11
- const res = await fetch(url.toString(), opts);
12
- if (!res.ok) {
13
- const text = await res.text();
14
- throw new Error(`Cockpit API error ${res.status}: ${text}`);
15
- }
16
- return res.json();
17
- }
18
- function getConn(ctx) {
19
- return {
20
- baseUrl: ctx.connection.config.url.replace(/\/$/, ""),
21
- token: ctx.connection.config.accessToken,
22
- };
8
+ ...(body && Object.keys(body).length > 0 && method !== "GET"
9
+ ? { json: body }
10
+ : {}),
11
+ });
23
12
  }
24
13
  export default function cockpit(rl) {
25
14
  rl.setName("cockpit");
26
15
  rl.setVersion("0.1.0");
16
+ rl.setCredential(cockpitCredential);
27
17
  rl.setConnectionSchema({
28
18
  url: {
29
19
  type: "string",
@@ -56,8 +46,9 @@ export default function cockpit(rl) {
56
46
  },
57
47
  async execute(input, ctx) {
58
48
  const { collection, data } = input;
59
- const { baseUrl, token } = getConn(ctx);
60
- return apiRequest(baseUrl, token, "POST", `/collections/save/${collection}`, { data });
49
+ return apiRequest(ctx, "POST", `collections/save/${pathSegment(collection)}`, {
50
+ data,
51
+ });
61
52
  },
62
53
  });
63
54
  rl.registerAction("collection.list", {
@@ -95,7 +86,6 @@ export default function cockpit(rl) {
95
86
  },
96
87
  async execute(input, ctx) {
97
88
  const { collection, filter, fields, sort, limit, skip, populate, language, } = (input ?? {});
98
- const { baseUrl, token } = getConn(ctx);
99
89
  const body = { simple: true };
100
90
  if (filter)
101
91
  body.filter = filter;
@@ -115,7 +105,7 @@ export default function cockpit(rl) {
115
105
  body.populate = populate;
116
106
  if (language)
117
107
  body.lang = language;
118
- return apiRequest(baseUrl, token, "POST", `/collections/get/${collection}`, body);
108
+ return apiRequest(ctx, "POST", `collections/get/${pathSegment(collection)}`, body);
119
109
  },
120
110
  });
121
111
  rl.registerAction("collection.update", {
@@ -132,8 +122,7 @@ export default function cockpit(rl) {
132
122
  },
133
123
  async execute(input, ctx) {
134
124
  const { collection, id, data } = input;
135
- const { baseUrl, token } = getConn(ctx);
136
- return apiRequest(baseUrl, token, "POST", `/collections/save/${collection}`, {
125
+ return apiRequest(ctx, "POST", `collections/save/${pathSegment(collection)}`, {
137
126
  data: { _id: id, ...data },
138
127
  });
139
128
  },
@@ -152,8 +141,7 @@ export default function cockpit(rl) {
152
141
  },
153
142
  async execute(input, ctx) {
154
143
  const { form, data } = input;
155
- const { baseUrl, token } = getConn(ctx);
156
- return apiRequest(baseUrl, token, "POST", `/forms/submit/${form}`, {
144
+ return apiRequest(ctx, "POST", `forms/submit/${pathSegment(form)}`, {
157
145
  form: data,
158
146
  });
159
147
  },
@@ -171,8 +159,7 @@ export default function cockpit(rl) {
171
159
  },
172
160
  async execute(input, ctx) {
173
161
  const { singleton } = input;
174
- const { baseUrl, token } = getConn(ctx);
175
- return apiRequest(baseUrl, token, "GET", `/singletons/get/${singleton}`);
162
+ return apiRequest(ctx, "GET", `singletons/get/${pathSegment(singleton)}`);
176
163
  },
177
164
  });
178
165
  }
@@ -0,0 +1,19 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /** An API token, sent as a bearer to Coda's one API origin. */
3
+ export const codaCredential = staticCredential({
4
+ id: "coda",
5
+ auth: { kind: "bearer" },
6
+ local: { secret: "accessToken" },
7
+ targets: {
8
+ api: {
9
+ baseUrl: "https://coda.io/apis/v1/",
10
+ methods: ["GET", "POST", "PUT", "DELETE"],
11
+ },
12
+ },
13
+ probe: {
14
+ target: "api",
15
+ path: "whoami",
16
+ method: "GET",
17
+ acceptedStatuses: [200],
18
+ },
19
+ });