runline 0.33.0 → 0.34.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 (515) 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 +9 -0
  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 +179 -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 +167 -10
  15. package/dist/index.d.ts +5 -5
  16. package/dist/index.js +2 -2
  17. package/dist/plugin/api.d.ts +7 -0
  18. package/dist/plugin/api.js +7 -0
  19. package/dist/plugin/types.d.ts +12 -0
  20. package/dist/plugins/_shared/credentialAdapter.js +79 -15
  21. package/dist/plugins/_shared/credentials.js +389 -0
  22. package/dist/plugins/_shared/googleAuth.js +9 -40
  23. package/dist/plugins/_shared/googleCredentials.js +28 -7
  24. package/dist/plugins/_shared/microsoftAuth.js +13 -44
  25. package/dist/plugins/_shared/microsoftCredentials.js +30 -8
  26. package/dist/plugins/_shared/provider.js +2 -14
  27. package/dist/plugins/_shared/shiftCloud.js +19 -55
  28. package/dist/plugins/_shared/shiftCredentials.js +83 -0
  29. package/dist/plugins/actionNetwork/src/credentials.js +14 -0
  30. package/dist/plugins/actionNetwork/src/index.js +39 -50
  31. package/dist/plugins/activeCampaign/src/credentials.js +22 -0
  32. package/dist/plugins/activeCampaign/src/index.js +61 -132
  33. package/dist/plugins/adalo/src/credentials.js +16 -0
  34. package/dist/plugins/adalo/src/index.js +19 -43
  35. package/dist/plugins/affinity/src/credentials.js +19 -0
  36. package/dist/plugins/affinity/src/index.js +29 -54
  37. package/dist/plugins/agileCrm/src/credentials.js +16 -0
  38. package/dist/plugins/agileCrm/src/index.js +46 -112
  39. package/dist/plugins/airtable/src/credentials.js +19 -0
  40. package/dist/plugins/airtable/src/index.js +37 -50
  41. package/dist/plugins/airtop/src/credentials.js +20 -0
  42. package/dist/plugins/airtop/src/index.js +51 -75
  43. package/dist/plugins/apiTemplateIo/src/credentials.js +19 -0
  44. package/dist/plugins/apiTemplateIo/src/index.js +14 -31
  45. package/dist/plugins/asana/src/credentials.js +19 -0
  46. package/dist/plugins/asana/src/index.js +51 -72
  47. package/dist/plugins/autopilot/src/credentials.js +19 -0
  48. package/dist/plugins/autopilot/src/index.js +38 -45
  49. package/dist/plugins/bambooHr/src/credentials.js +16 -0
  50. package/dist/plugins/bambooHr/src/index.js +41 -67
  51. package/dist/plugins/bannerbear/src/credentials.js +19 -0
  52. package/dist/plugins/bannerbear/src/index.js +15 -27
  53. package/dist/plugins/baserow/src/credentials.js +17 -0
  54. package/dist/plugins/baserow/src/index.js +23 -49
  55. package/dist/plugins/beeminder/src/credentials.js +19 -0
  56. package/dist/plugins/beeminder/src/index.js +32 -54
  57. package/dist/plugins/bitly/src/credentials.js +19 -0
  58. package/dist/plugins/bitly/src/index.js +12 -26
  59. package/dist/plugins/bitwarden/src/credentials.js +62 -0
  60. package/dist/plugins/bitwarden/src/index.js +34 -80
  61. package/dist/plugins/box/src/credentials.js +19 -0
  62. package/dist/plugins/box/src/index.js +24 -49
  63. package/dist/plugins/brandfetch/src/credentials.js +13 -0
  64. package/dist/plugins/brandfetch/src/index.js +12 -17
  65. package/dist/plugins/brevo/src/credentials.js +19 -0
  66. package/dist/plugins/brevo/src/index.js +30 -51
  67. package/dist/plugins/bubble/src/credentials.js +28 -0
  68. package/dist/plugins/bubble/src/index.js +29 -65
  69. package/dist/plugins/chargebee/src/credentials.js +16 -0
  70. package/dist/plugins/chargebee/src/index.js +15 -45
  71. package/dist/plugins/circleci/src/credentials.js +19 -0
  72. package/dist/plugins/circleci/src/index.js +19 -39
  73. package/dist/plugins/ciscoWebex/src/credentials.js +19 -0
  74. package/dist/plugins/ciscoWebex/src/index.js +43 -61
  75. package/dist/plugins/clearbit/src/credentials.js +22 -0
  76. package/dist/plugins/clearbit/src/index.js +11 -21
  77. package/dist/plugins/clickup/src/credentials.js +19 -0
  78. package/dist/plugins/clickup/src/index.js +85 -117
  79. package/dist/plugins/clockify/src/credentials.js +19 -0
  80. package/dist/plugins/clockify/src/index.js +46 -61
  81. package/dist/plugins/cloudflare/src/credentials.js +19 -0
  82. package/dist/plugins/cloudflare/src/index.js +19 -34
  83. package/dist/plugins/cockpit/src/credentials.js +17 -0
  84. package/dist/plugins/cockpit/src/index.js +18 -31
  85. package/dist/plugins/coda/src/credentials.js +19 -0
  86. package/dist/plugins/coda/src/index.js +33 -50
  87. package/dist/plugins/coingecko/src/credentials.js +20 -0
  88. package/dist/plugins/coingecko/src/index.js +24 -34
  89. package/dist/plugins/contentful/src/credentials.js +26 -0
  90. package/dist/plugins/contentful/src/index.js +19 -40
  91. package/dist/plugins/convertkit/src/credentials.js +26 -0
  92. package/dist/plugins/convertkit/src/index.js +27 -45
  93. package/dist/plugins/copper/src/credentials.js +17 -0
  94. package/dist/plugins/copper/src/index.js +25 -47
  95. package/dist/plugins/cortex/src/credentials.js +28 -0
  96. package/dist/plugins/cortex/src/index.js +26 -49
  97. package/dist/plugins/currents/src/credentials.js +19 -0
  98. package/dist/plugins/currents/src/index.js +46 -59
  99. package/dist/plugins/customerIo/src/credentials.js +52 -0
  100. package/dist/plugins/customerIo/src/index.js +30 -58
  101. package/dist/plugins/databricks/src/credentials.js +13 -0
  102. package/dist/plugins/databricks/src/index.js +51 -103
  103. package/dist/plugins/deepl/src/credentials.js +19 -0
  104. package/dist/plugins/deepl/src/index.js +13 -39
  105. package/dist/plugins/demio/src/credentials.js +26 -0
  106. package/dist/plugins/demio/src/index.js +17 -41
  107. package/dist/plugins/dhl/src/credentials.js +13 -0
  108. package/dist/plugins/dhl/src/index.js +8 -19
  109. package/dist/plugins/discord/src/credentials.js +19 -0
  110. package/dist/plugins/discord/src/index.js +30 -58
  111. package/dist/plugins/discourse/src/credentials.js +18 -0
  112. package/dist/plugins/discourse/src/index.js +36 -53
  113. package/dist/plugins/disqus/src/credentials.js +13 -0
  114. package/dist/plugins/disqus/src/index.js +14 -32
  115. package/dist/plugins/drift/src/credentials.js +13 -0
  116. package/dist/plugins/drift/src/index.js +16 -26
  117. package/dist/plugins/dropbox/src/credentials.js +13 -0
  118. package/dist/plugins/dropbox/src/index.js +23 -30
  119. package/dist/plugins/dropcontact/src/credentials.js +13 -0
  120. package/dist/plugins/dropcontact/src/index.js +13 -18
  121. package/dist/plugins/egoi/src/credentials.js +19 -0
  122. package/dist/plugins/egoi/src/index.js +23 -38
  123. package/dist/plugins/elasticsearch/src/credentials.js +18 -0
  124. package/dist/plugins/elasticsearch/src/index.js +27 -48
  125. package/dist/plugins/elevenlabs/src/credentials.js +30 -0
  126. package/dist/plugins/elevenlabs/src/index.js +4 -1
  127. package/dist/plugins/elevenlabs/src/schemas.js +2 -1
  128. package/dist/plugins/elevenlabs/src/shared.js +74 -35
  129. package/dist/plugins/elevenlabs/src/workflows.js +2 -2
  130. package/dist/plugins/emelia/src/credentials.js +14 -0
  131. package/dist/plugins/emelia/src/index.js +19 -23
  132. package/dist/plugins/erpnext/src/credentials.js +27 -0
  133. package/dist/plugins/erpnext/src/index.js +21 -42
  134. package/dist/plugins/facebookGraph/src/credentials.js +20 -0
  135. package/dist/plugins/facebookGraph/src/index.js +39 -37
  136. package/dist/plugins/fal/src/credentials.js +14 -0
  137. package/dist/plugins/fal/src/index.js +4 -2
  138. package/dist/plugins/fal/src/shared.js +58 -63
  139. package/dist/plugins/freshdesk/src/credentials.js +20 -0
  140. package/dist/plugins/freshdesk/src/index.js +25 -46
  141. package/dist/plugins/freshservice/src/credentials.js +16 -0
  142. package/dist/plugins/freshservice/src/index.js +37 -58
  143. package/dist/plugins/freshworksCrm/src/credentials.js +16 -0
  144. package/dist/plugins/freshworksCrm/src/index.js +20 -39
  145. package/dist/plugins/getresponse/src/credentials.js +22 -0
  146. package/dist/plugins/getresponse/src/index.js +20 -32
  147. package/dist/plugins/gett/src/credentials.js +64 -0
  148. package/dist/plugins/gett/src/index.js +11 -6
  149. package/dist/plugins/gett/src/login.js +24 -0
  150. package/dist/plugins/gett/src/session.js +15 -38
  151. package/dist/plugins/gett/src/shared.js +41 -84
  152. package/dist/plugins/ghost/src/credentials.js +36 -0
  153. package/dist/plugins/ghost/src/index.js +18 -59
  154. package/dist/plugins/github/src/credentials.js +18 -0
  155. package/dist/plugins/github/src/index.js +55 -78
  156. package/dist/plugins/gitlab/src/credentials.js +24 -0
  157. package/dist/plugins/gitlab/src/index.js +29 -48
  158. package/dist/plugins/gmail/src/index.js +26 -24
  159. package/dist/plugins/gong/src/credentials.js +16 -0
  160. package/dist/plugins/gong/src/index.js +16 -32
  161. package/dist/plugins/googleAppsScript/src/index.js +108 -42
  162. package/dist/plugins/googleCalendar/src/index.js +15 -13
  163. package/dist/plugins/googleContacts/src/index.js +12 -9
  164. package/dist/plugins/googleDocs/src/index.js +2 -0
  165. package/dist/plugins/googleDocs/src/shared.js +2 -1
  166. package/dist/plugins/googleDrive/src/index.js +50 -53
  167. package/dist/plugins/googleImage/src/credentials.js +14 -0
  168. package/dist/plugins/googleImage/src/index.js +14 -25
  169. package/dist/plugins/googleSheets/src/index.js +26 -27
  170. package/dist/plugins/googleSlides/src/index.js +6 -4
  171. package/dist/plugins/googleTasks/src/index.js +13 -11
  172. package/dist/plugins/gotify/src/credentials.js +32 -0
  173. package/dist/plugins/gotify/src/index.js +14 -36
  174. package/dist/plugins/gotowebinar/src/credentials.js +13 -0
  175. package/dist/plugins/gotowebinar/src/index.js +52 -69
  176. package/dist/plugins/grafana/src/credentials.js +16 -0
  177. package/dist/plugins/grafana/src/index.js +34 -53
  178. package/dist/plugins/graphql/src/credentials.js +42 -0
  179. package/dist/plugins/graphql/src/index.js +21 -46
  180. package/dist/plugins/grist/src/credentials.js +30 -0
  181. package/dist/plugins/grist/src/index.js +14 -43
  182. package/dist/plugins/halopsa/src/credentials.js +56 -0
  183. package/dist/plugins/halopsa/src/index.js +20 -47
  184. package/dist/plugins/harvest/src/credentials.js +20 -0
  185. package/dist/plugins/harvest/src/index.js +24 -43
  186. package/dist/plugins/helpscout/src/credentials.js +13 -0
  187. package/dist/plugins/helpscout/src/index.js +26 -38
  188. package/dist/plugins/highlevel/src/credentials.js +19 -0
  189. package/dist/plugins/highlevel/src/index.js +34 -63
  190. package/dist/plugins/homeAssistant/src/credentials.js +27 -0
  191. package/dist/plugins/homeAssistant/src/index.js +34 -52
  192. package/dist/plugins/hubspot/src/credentials.js +16 -0
  193. package/dist/plugins/hubspot/src/index.js +29 -41
  194. package/dist/plugins/humanticAi/src/credentials.js +13 -0
  195. package/dist/plugins/humanticAi/src/index.js +15 -22
  196. package/dist/plugins/hunter/src/credentials.js +13 -0
  197. package/dist/plugins/hunter/src/index.js +18 -17
  198. package/dist/plugins/intercom/src/credentials.js +19 -0
  199. package/dist/plugins/intercom/src/index.js +25 -38
  200. package/dist/plugins/iterable/src/credentials.js +17 -0
  201. package/dist/plugins/iterable/src/index.js +26 -40
  202. package/dist/plugins/jenkins/src/credentials.js +16 -0
  203. package/dist/plugins/jenkins/src/index.js +22 -36
  204. package/dist/plugins/jira/src/credentials.js +16 -0
  205. package/dist/plugins/jira/src/index.js +35 -61
  206. package/dist/plugins/keap/src/credentials.js +19 -0
  207. package/dist/plugins/keap/src/index.js +43 -71
  208. package/dist/plugins/kobotoolbox/src/credentials.js +13 -0
  209. package/dist/plugins/kobotoolbox/src/index.js +46 -84
  210. package/dist/plugins/lemlist/src/credentials.js +19 -0
  211. package/dist/plugins/lemlist/src/index.js +35 -47
  212. package/dist/plugins/linear/src/attachments.js +7 -7
  213. package/dist/plugins/linear/src/comments.js +7 -7
  214. package/dist/plugins/linear/src/credentials.js +17 -0
  215. package/dist/plugins/linear/src/cycles.js +5 -5
  216. package/dist/plugins/linear/src/index.js +2 -0
  217. package/dist/plugins/linear/src/initiatives.js +6 -6
  218. package/dist/plugins/linear/src/issues.js +14 -14
  219. package/dist/plugins/linear/src/labels.js +6 -6
  220. package/dist/plugins/linear/src/organization.js +2 -2
  221. package/dist/plugins/linear/src/projects.js +12 -12
  222. package/dist/plugins/linear/src/shared.js +34 -32
  223. package/dist/plugins/linear/src/states.js +3 -3
  224. package/dist/plugins/linear/src/teams.js +4 -4
  225. package/dist/plugins/linear/src/users.js +3 -3
  226. package/dist/plugins/linear/src/views.js +5 -5
  227. package/dist/plugins/linear/src/webhooks.js +5 -5
  228. package/dist/plugins/lingvanex/src/credentials.js +13 -0
  229. package/dist/plugins/lingvanex/src/index.js +7 -9
  230. package/dist/plugins/linkedin/src/credentials.js +17 -0
  231. package/dist/plugins/linkedin/src/index.js +13 -17
  232. package/dist/plugins/lonescale/src/credentials.js +13 -0
  233. package/dist/plugins/lonescale/src/index.js +16 -26
  234. package/dist/plugins/magento/src/credentials.js +16 -0
  235. package/dist/plugins/magento/src/index.js +67 -84
  236. package/dist/plugins/mailcheck/src/credentials.js +17 -0
  237. package/dist/plugins/mailcheck/src/index.js +7 -9
  238. package/dist/plugins/mailchimp/src/credentials.js +32 -0
  239. package/dist/plugins/mailchimp/src/index.js +36 -44
  240. package/dist/plugins/mailerlite/src/credentials.js +13 -0
  241. package/dist/plugins/mailerlite/src/index.js +19 -32
  242. package/dist/plugins/mailgun/src/credentials.js +21 -0
  243. package/dist/plugins/mailgun/src/index.js +15 -21
  244. package/dist/plugins/mailjet/src/credentials.js +38 -0
  245. package/dist/plugins/mailjet/src/index.js +60 -115
  246. package/dist/plugins/mandrill/src/credentials.js +17 -0
  247. package/dist/plugins/mandrill/src/index.js +11 -12
  248. package/dist/plugins/marketstack/src/credentials.js +16 -0
  249. package/dist/plugins/marketstack/src/index.js +18 -28
  250. package/dist/plugins/matrix/src/credentials.js +19 -0
  251. package/dist/plugins/matrix/src/index.js +23 -52
  252. package/dist/plugins/mattermost/src/credentials.js +19 -0
  253. package/dist/plugins/mattermost/src/index.js +41 -73
  254. package/dist/plugins/mautic/src/credentials.js +16 -0
  255. package/dist/plugins/mautic/src/index.js +46 -62
  256. package/dist/plugins/medium/src/credentials.js +20 -0
  257. package/dist/plugins/medium/src/index.js +18 -23
  258. package/dist/plugins/messagebird/src/credentials.js +22 -0
  259. package/dist/plugins/messagebird/src/index.js +13 -18
  260. package/dist/plugins/metabase/src/credentials.js +19 -0
  261. package/dist/plugins/metabase/src/index.js +24 -40
  262. package/dist/plugins/microsoftCalendar/src/index.js +48 -12
  263. package/dist/plugins/microsoftFiles/src/index.js +90 -25
  264. package/dist/plugins/microsoftMail/src/index.js +62 -15
  265. package/dist/plugins/misp/src/credentials.js +16 -0
  266. package/dist/plugins/misp/src/index.js +60 -71
  267. package/dist/plugins/mocean/src/credentials.js +17 -0
  268. package/dist/plugins/mocean/src/index.js +11 -23
  269. package/dist/plugins/monday/src/credentials.js +14 -0
  270. package/dist/plugins/monday/src/index.js +31 -44
  271. package/dist/plugins/monicaCrm/src/credentials.js +19 -0
  272. package/dist/plugins/monicaCrm/src/index.js +25 -42
  273. package/dist/plugins/msg91/src/credentials.js +10 -0
  274. package/dist/plugins/msg91/src/index.js +15 -11
  275. package/dist/plugins/nasa/src/credentials.js +22 -0
  276. package/dist/plugins/nasa/src/index.js +24 -28
  277. package/dist/plugins/netlify/src/credentials.js +19 -0
  278. package/dist/plugins/netlify/src/index.js +27 -51
  279. package/dist/plugins/netscalerAdc/src/credentials.js +18 -0
  280. package/dist/plugins/netscalerAdc/src/index.js +16 -31
  281. package/dist/plugins/nextcloud/src/credentials.js +27 -0
  282. package/dist/plugins/nextcloud/src/index.js +55 -109
  283. package/dist/plugins/nocodb/src/credentials.js +16 -0
  284. package/dist/plugins/nocodb/src/index.js +19 -37
  285. package/dist/plugins/notion/src/credentials.js +21 -0
  286. package/dist/plugins/notion/src/index.js +25 -38
  287. package/dist/plugins/npm/src/credentials.js +19 -0
  288. package/dist/plugins/npm/src/index.js +22 -32
  289. package/dist/plugins/odoo/src/credentials.js +21 -0
  290. package/dist/plugins/odoo/src/index.js +53 -69
  291. package/dist/plugins/okta/src/credentials.js +23 -0
  292. package/dist/plugins/okta/src/index.js +30 -35
  293. package/dist/plugins/oneSimpleApi/src/credentials.js +16 -0
  294. package/dist/plugins/oneSimpleApi/src/index.js +19 -24
  295. package/dist/plugins/onfleet/src/credentials.js +23 -0
  296. package/dist/plugins/onfleet/src/index.js +42 -53
  297. package/dist/plugins/openai/src/credentials.js +13 -0
  298. package/dist/plugins/openai/src/index.js +15 -23
  299. package/dist/plugins/openweathermap/src/credentials.js +16 -0
  300. package/dist/plugins/openweathermap/src/index.js +22 -22
  301. package/dist/plugins/oura/src/credentials.js +19 -0
  302. package/dist/plugins/oura/src/index.js +13 -18
  303. package/dist/plugins/paddle/src/credentials.js +27 -0
  304. package/dist/plugins/paddle/src/index.js +20 -36
  305. package/dist/plugins/pagerduty/src/credentials.js +24 -0
  306. package/dist/plugins/pagerduty/src/index.js +30 -39
  307. package/dist/plugins/parallel/src/credentials.js +18 -0
  308. package/dist/plugins/parallel/src/index.js +16 -22
  309. package/dist/plugins/paypal/src/credentials.js +44 -0
  310. package/dist/plugins/paypal/src/index.js +14 -40
  311. package/dist/plugins/peekalink/src/credentials.js +16 -0
  312. package/dist/plugins/peekalink/src/index.js +10 -11
  313. package/dist/plugins/phantombuster/src/credentials.js +19 -0
  314. package/dist/plugins/phantombuster/src/index.js +19 -32
  315. package/dist/plugins/philipsHue/src/credentials.js +17 -0
  316. package/dist/plugins/philipsHue/src/index.js +15 -27
  317. package/dist/plugins/pipedrive/src/credentials.js +26 -0
  318. package/dist/plugins/pipedrive/src/index.js +43 -73
  319. package/dist/plugins/plaud/src/index.js +2 -1
  320. package/dist/plugins/plaud/src/shared.js +23 -19
  321. package/dist/plugins/plivo/src/credentials.js +20 -0
  322. package/dist/plugins/plivo/src/index.js +13 -19
  323. package/dist/plugins/posthog/src/credentials.js +18 -0
  324. package/dist/plugins/posthog/src/index.js +14 -20
  325. package/dist/plugins/profitwell/src/credentials.js +22 -0
  326. package/dist/plugins/profitwell/src/index.js +10 -17
  327. package/dist/plugins/pushbullet/src/credentials.js +19 -0
  328. package/dist/plugins/pushbullet/src/index.js +19 -27
  329. package/dist/plugins/pushcut/src/credentials.js +19 -0
  330. package/dist/plugins/pushcut/src/index.js +7 -8
  331. package/dist/plugins/pushover/src/credentials.js +14 -0
  332. package/dist/plugins/pushover/src/index.js +7 -12
  333. package/dist/plugins/quickbase/src/credentials.js +15 -0
  334. package/dist/plugins/quickbase/src/index.js +24 -34
  335. package/dist/plugins/quickbooks/src/credentials.js +22 -0
  336. package/dist/plugins/quickbooks/src/index.js +17 -46
  337. package/dist/plugins/raindrop/src/credentials.js +19 -0
  338. package/dist/plugins/raindrop/src/index.js +30 -32
  339. package/dist/plugins/recraft/src/credentials.js +13 -0
  340. package/dist/plugins/recraft/src/index.js +38 -27
  341. package/dist/plugins/reddit/src/credentials.js +26 -0
  342. package/dist/plugins/reddit/src/index.js +30 -34
  343. package/dist/plugins/replicate/src/credentials.js +23 -0
  344. package/dist/plugins/replicate/src/index.js +17 -27
  345. package/dist/plugins/rocketchat/src/credentials.js +17 -0
  346. package/dist/plugins/rocketchat/src/index.js +8 -19
  347. package/dist/plugins/rundeck/src/credentials.js +16 -0
  348. package/dist/plugins/rundeck/src/index.js +12 -28
  349. package/dist/plugins/salesforce/src/credentials.js +73 -0
  350. package/dist/plugins/salesforce/src/index.js +6 -0
  351. package/dist/plugins/salesforce/src/metadata.js +3 -16
  352. package/dist/plugins/salesforce/src/shared.js +25 -100
  353. package/dist/plugins/salesforce/src/sobjects.js +10 -9
  354. package/dist/plugins/salesmate/src/credentials.js +17 -0
  355. package/dist/plugins/salesmate/src/index.js +20 -37
  356. package/dist/plugins/securityScorecard/src/credentials.js +22 -0
  357. package/dist/plugins/securityScorecard/src/index.js +24 -37
  358. package/dist/plugins/segment/src/credentials.js +16 -0
  359. package/dist/plugins/segment/src/index.js +12 -16
  360. package/dist/plugins/sendgrid/src/credentials.js +13 -0
  361. package/dist/plugins/sendgrid/src/index.js +31 -35
  362. package/dist/plugins/sendy/src/credentials.js +18 -0
  363. package/dist/plugins/sendy/src/index.js +18 -24
  364. package/dist/plugins/sentry/src/credentials.js +16 -0
  365. package/dist/plugins/sentry/src/index.js +30 -98
  366. package/dist/plugins/servicenow/src/credentials.js +13 -0
  367. package/dist/plugins/servicenow/src/index.js +22 -41
  368. package/dist/plugins/shiftAtlas/src/graph.js +2 -2
  369. package/dist/plugins/shiftAtlas/src/index.js +2 -0
  370. package/dist/plugins/shiftAtlas/src/shared.js +3 -1
  371. package/dist/plugins/shiftBwm/src/index.js +4 -2
  372. package/dist/plugins/shiftBwm/src/shared.js +41 -16
  373. package/dist/plugins/shiftCrm/src/access.js +2 -2
  374. package/dist/plugins/shiftCrm/src/accounts.js +3 -3
  375. package/dist/plugins/shiftCrm/src/activities.js +3 -3
  376. package/dist/plugins/shiftCrm/src/credentials.js +6 -0
  377. package/dist/plugins/shiftCrm/src/index.js +2 -0
  378. package/dist/plugins/shiftCrm/src/opportunities.js +3 -3
  379. package/dist/plugins/shiftCrm/src/people.js +3 -3
  380. package/dist/plugins/shiftCrm/src/records.js +2 -2
  381. package/dist/plugins/shiftCrm/src/shared.js +2 -1
  382. package/dist/plugins/shiftCrm/src/tasks.js +3 -3
  383. package/dist/plugins/shiftObjects/src/credentials.js +2 -0
  384. package/dist/plugins/shiftObjects/src/index.js +2 -0
  385. package/dist/plugins/shiftObjects/src/objects.js +3 -2
  386. package/dist/plugins/shiftOcr/src/credentials.js +8 -0
  387. package/dist/plugins/shiftOcr/src/index.js +6 -5
  388. package/dist/plugins/shiftPages/src/index.js +2 -0
  389. package/dist/plugins/shiftPages/src/pages.js +5 -3
  390. package/dist/plugins/shiftPages/src/shared.js +3 -1
  391. package/dist/plugins/shiftTranscription/src/index.js +2 -0
  392. package/dist/plugins/shiftTranscription/src/shared.js +11 -1
  393. package/dist/plugins/shiftTranscription/src/transcription.js +4 -4
  394. package/dist/plugins/shiftWork/src/index.js +2 -0
  395. package/dist/plugins/shiftWork/src/issue-views.js +5 -5
  396. package/dist/plugins/shiftWork/src/issues.js +11 -7
  397. package/dist/plugins/shiftWork/src/projects.js +3 -3
  398. package/dist/plugins/shiftWork/src/shared.js +3 -1
  399. package/dist/plugins/shopify/src/credentials.js +16 -0
  400. package/dist/plugins/shopify/src/index.js +32 -59
  401. package/dist/plugins/signl4/src/credentials.js +17 -0
  402. package/dist/plugins/signl4/src/index.js +28 -29
  403. package/dist/plugins/slack/src/credentials.js +19 -0
  404. package/dist/plugins/slack/src/index.js +51 -60
  405. package/dist/plugins/sms77/src/credentials.js +17 -0
  406. package/dist/plugins/sms77/src/index.js +11 -16
  407. package/dist/plugins/splunk/src/credentials.js +19 -0
  408. package/dist/plugins/splunk/src/index.js +32 -74
  409. package/dist/plugins/spotify/src/credentials.js +19 -0
  410. package/dist/plugins/spotify/src/index.js +40 -55
  411. package/dist/plugins/stackby/src/credentials.js +13 -0
  412. package/dist/plugins/stackby/src/index.js +14 -23
  413. package/dist/plugins/steel/src/auth.js +27 -0
  414. package/dist/plugins/steel/src/browser.js +4 -3
  415. package/dist/plugins/steel/src/captchas.js +4 -3
  416. package/dist/plugins/steel/src/extensions.js +3 -2
  417. package/dist/plugins/steel/src/files.js +9 -10
  418. package/dist/plugins/steel/src/index.js +2 -0
  419. package/dist/plugins/steel/src/page/tools.js +3 -3
  420. package/dist/plugins/steel/src/profiles.js +4 -3
  421. package/dist/plugins/steel/src/sessions.js +13 -13
  422. package/dist/plugins/steel/src/shared.js +21 -51
  423. package/dist/plugins/storyblok/src/credentials.js +37 -0
  424. package/dist/plugins/storyblok/src/index.js +22 -66
  425. package/dist/plugins/strapi/src/credentials.js +71 -0
  426. package/dist/plugins/strapi/src/index.js +36 -70
  427. package/dist/plugins/strava/src/credentials.js +19 -0
  428. package/dist/plugins/strava/src/index.js +16 -33
  429. package/dist/plugins/stripe/src/credentials.js +19 -0
  430. package/dist/plugins/stripe/src/index.js +44 -58
  431. package/dist/plugins/supabase/src/credentials.js +30 -0
  432. package/dist/plugins/supabase/src/index.js +18 -40
  433. package/dist/plugins/syncromsp/src/credentials.js +16 -0
  434. package/dist/plugins/syncromsp/src/index.js +37 -70
  435. package/dist/plugins/tapfiliate/src/credentials.js +13 -0
  436. package/dist/plugins/tapfiliate/src/index.js +21 -31
  437. package/dist/plugins/telegram/src/credentials.js +20 -0
  438. package/dist/plugins/telegram/src/index.js +31 -39
  439. package/dist/plugins/thehive/src/credentials.js +14 -0
  440. package/dist/plugins/thehive/src/index.js +33 -50
  441. package/dist/plugins/thehiveProject/src/credentials.js +16 -0
  442. package/dist/plugins/thehiveProject/src/index.js +53 -122
  443. package/dist/plugins/todoist/src/credentials.js +26 -0
  444. package/dist/plugins/todoist/src/index.js +49 -79
  445. package/dist/plugins/together/src/credentials.js +16 -0
  446. package/dist/plugins/together/src/index.js +30 -32
  447. package/dist/plugins/travisci/src/credentials.js +24 -0
  448. package/dist/plugins/travisci/src/index.js +16 -30
  449. package/dist/plugins/trello/src/credentials.js +29 -0
  450. package/dist/plugins/trello/src/index.js +49 -64
  451. package/dist/plugins/twake/src/credentials.js +16 -0
  452. package/dist/plugins/twake/src/index.js +8 -10
  453. package/dist/plugins/twilio/src/credentials.js +23 -0
  454. package/dist/plugins/twilio/src/index.js +12 -26
  455. package/dist/plugins/twist/src/credentials.js +13 -0
  456. package/dist/plugins/twist/src/index.js +32 -44
  457. package/dist/plugins/twitter/src/credentials.js +16 -0
  458. package/dist/plugins/twitter/src/index.js +25 -37
  459. package/dist/plugins/typesafe/src/credentials.js +28 -0
  460. package/dist/plugins/typesafe/src/index.js +3 -1
  461. package/dist/plugins/typesafe/src/shared.js +23 -35
  462. package/dist/plugins/unleashedSoftware/src/credentials.js +21 -0
  463. package/dist/plugins/unleashedSoftware/src/index.js +13 -37
  464. package/dist/plugins/uplead/src/credentials.js +16 -0
  465. package/dist/plugins/uplead/src/index.js +11 -16
  466. package/dist/plugins/uproc/src/credentials.js +14 -0
  467. package/dist/plugins/uproc/src/index.js +7 -10
  468. package/dist/plugins/uptimerobot/src/credentials.js +14 -0
  469. package/dist/plugins/uptimerobot/src/index.js +28 -39
  470. package/dist/plugins/urlscanio/src/credentials.js +13 -0
  471. package/dist/plugins/urlscanio/src/index.js +13 -22
  472. package/dist/plugins/vercel/src/credentials.js +19 -0
  473. package/dist/plugins/vercel/src/deployments.js +27 -11
  474. package/dist/plugins/vercel/src/env.js +31 -12
  475. package/dist/plugins/vercel/src/index.js +2 -0
  476. package/dist/plugins/vercel/src/projects.js +6 -3
  477. package/dist/plugins/vercel/src/shared.js +32 -37
  478. package/dist/plugins/vero/src/credentials.js +17 -0
  479. package/dist/plugins/vero/src/index.js +18 -21
  480. package/dist/plugins/vonage/src/credentials.js +17 -0
  481. package/dist/plugins/vonage/src/index.js +14 -18
  482. package/dist/plugins/wekan/src/credentials.js +16 -0
  483. package/dist/plugins/wekan/src/index.js +33 -46
  484. package/dist/plugins/wolt/src/account.js +6 -0
  485. package/dist/plugins/wolt/src/catalog.js +2 -2
  486. package/dist/plugins/wolt/src/credentials.js +64 -0
  487. package/dist/plugins/wolt/src/index.js +8 -3
  488. package/dist/plugins/wolt/src/orders.js +2 -2
  489. package/dist/plugins/wolt/src/public.js +91 -0
  490. package/dist/plugins/wolt/src/shared.js +49 -158
  491. package/dist/plugins/woocommerce/src/credentials.js +16 -0
  492. package/dist/plugins/woocommerce/src/index.js +19 -37
  493. package/dist/plugins/wordpress/src/credentials.js +16 -0
  494. package/dist/plugins/wordpress/src/index.js +23 -42
  495. package/dist/plugins/xai/src/credentials.js +13 -0
  496. package/dist/plugins/xai/src/index.js +31 -30
  497. package/dist/plugins/xero/src/credentials.js +17 -0
  498. package/dist/plugins/xero/src/index.js +19 -36
  499. package/dist/plugins/yourls/src/credentials.js +17 -0
  500. package/dist/plugins/yourls/src/index.js +13 -23
  501. package/dist/plugins/zammad/src/credentials.js +15 -0
  502. package/dist/plugins/zammad/src/index.js +27 -47
  503. package/dist/plugins/zendesk/src/credentials.js +26 -0
  504. package/dist/plugins/zendesk/src/index.js +29 -48
  505. package/dist/plugins/zoho/src/credentials.js +17 -0
  506. package/dist/plugins/zoho/src/index.js +18 -38
  507. package/dist/plugins/zoom/src/credentials.js +19 -0
  508. package/dist/plugins/zoom/src/index.js +15 -30
  509. package/dist/plugins/zulip/src/credentials.js +16 -0
  510. package/dist/plugins/zulip/src/index.js +36 -42
  511. package/dist/sdk.d.ts +8 -0
  512. package/dist/sdk.js +3 -0
  513. package/package.json +1 -1
  514. package/dist/plugins/_shared/authedFetch.js +0 -33
  515. package/dist/plugins/_shared/tokenRefresh.js +0 -41
@@ -18,8 +18,18 @@
18
18
  * inline next to the instruction and writes the edited result to disk.
19
19
  */
20
20
  import * as t from "typebox";
21
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
21
22
  import { readImageInput, SEND_FILE_NOTE, writeImageFile, } from "../../_shared/mediaFile.js";
22
- const BASE = "https://generativelanguage.googleapis.com/v1beta/models";
23
+ import { googleImageCredential } from "./credentials.js";
24
+ /** The model as one path segment before the fixed :generateContent verb. */
25
+ function generateContent(ctx, model, body) {
26
+ return credentialJson(ctx, googleImageCredential, "googleImage", {
27
+ target: "api",
28
+ path: `models/${pathSegment(model)}:generateContent`,
29
+ method: "POST",
30
+ json: body,
31
+ });
32
+ }
23
33
  /** Write every inline image part of a Gemini response to disk. */
24
34
  function saveInlineImages(data, saveDir) {
25
35
  const stamp = Date.now();
@@ -43,6 +53,7 @@ function saveInlineImages(data, saveDir) {
43
53
  export default function googleImage(rl) {
44
54
  rl.setName("googleImage");
45
55
  rl.setVersion("0.1.0");
56
+ rl.setCredential(googleImageCredential);
46
57
  rl.setConnectionSchema({
47
58
  apiKey: {
48
59
  type: "string",
@@ -72,22 +83,11 @@ export default function googleImage(rl) {
72
83
  if (typeof p.prompt !== "string" || p.prompt.length === 0) {
73
84
  throw new Error("googleImage: prompt is required");
74
85
  }
75
- const apiKey = ctx.connection.config.apiKey;
76
86
  const model = p.model ?? "gemini-2.5-flash-image";
77
- const url = `${BASE}/${model}:generateContent?key=${encodeURIComponent(apiKey)}`;
78
- const body = {
87
+ const data = await generateContent(ctx, model, {
79
88
  contents: [{ parts: [{ text: p.prompt }] }],
80
89
  generationConfig: { responseModalities: ["IMAGE", "TEXT"] },
81
- };
82
- const res = await fetch(url, {
83
- method: "POST",
84
- headers: { "Content-Type": "application/json" },
85
- body: JSON.stringify(body),
86
90
  });
87
- if (!res.ok) {
88
- throw new Error(`Google API error ${res.status}: ${await res.text()}`);
89
- }
90
- const data = (await res.json());
91
91
  const images = saveInlineImages(data, p.saveDir);
92
92
  return { provider: "googleImage", model, images, note: SEND_FILE_NOTE };
93
93
  },
@@ -118,10 +118,8 @@ export default function googleImage(rl) {
118
118
  throw new Error("googleImage: prompt is required");
119
119
  }
120
120
  const img = readImageInput(p.imagePath, "googleImage");
121
- const apiKey = ctx.connection.config.apiKey;
122
121
  const model = p.model ?? "gemini-2.5-flash-image";
123
- const url = `${BASE}/${model}:generateContent?key=${encodeURIComponent(apiKey)}`;
124
- const body = {
122
+ const data = await generateContent(ctx, model, {
125
123
  contents: [
126
124
  {
127
125
  parts: [
@@ -131,16 +129,7 @@ export default function googleImage(rl) {
131
129
  },
132
130
  ],
133
131
  generationConfig: { responseModalities: ["IMAGE", "TEXT"] },
134
- };
135
- const res = await fetch(url, {
136
- method: "POST",
137
- headers: { "Content-Type": "application/json" },
138
- body: JSON.stringify(body),
139
132
  });
140
- if (!res.ok) {
141
- throw new Error(`Google API error ${res.status}: ${await res.text()}`);
142
- }
143
- const data = (await res.json());
144
133
  const images = saveInlineImages(data, p.saveDir);
145
134
  if (images.length === 0) {
146
135
  throw new Error("googleImage: the model returned no edited image — it may have refused; try a more specific instruction");
@@ -35,7 +35,8 @@
35
35
  * raw rows / objects and callers post-filter.
36
36
  */
37
37
  import * as t from "typebox";
38
- import { googleJsonRequest } from "../../_shared/googleAuth.js";
38
+ import { pathSegment } from "../../_shared/credentials.js";
39
+ import { googleCredential, googleJsonRequest } from "../../_shared/googleAuth.js";
39
40
  import { Id, JsonValue, NonEmptyString, NonNegativeInteger, PositiveInteger, RawGoogleObject, StringArray, stringEnum, } from "../../_shared/googleSchemas.js";
40
41
  const ROW_NUMBER = "row_number";
41
42
  const sheetReferenceSchema = t.Union([NonEmptyString, NonNegativeInteger]);
@@ -80,19 +81,16 @@ async function sheetsRequest(ctx, method, path, body, qs, baseOverride) {
80
81
  }
81
82
  // ─── A1 helpers ─────────────────────────────────────────────────
82
83
  /**
83
- * Encode a range like `Sheet1!A1:B5` for use in a URL. Google's
84
- * docs are explicit that the sheet-name portion needs URL-encoding
85
- * (for non-ASCII / spaces) but the range portion should not be, so
86
- * we split on `!` and encode only the left side. A bare sheet name
87
- * gets wrapped in single quotes so Sheets doesn't try to parse
88
- * something like `ABC` as an A1 range.
84
+ * A range like `Sheet1!A1:B5` as one encoded path segment, as Google's
85
+ * own clients send it. A bare sheet name is wrapped in single quotes so
86
+ * Sheets doesn't parse something like `ABC` as an A1 range.
89
87
  */
90
88
  function encodeA1(range) {
91
- if (range.includes("!")) {
92
- const [sheet, ranges] = range.split("!");
93
- return `${encodeURIComponent(sheet)}!${ranges}`;
94
- }
95
- return encodeURIComponent(`'${range}'`);
89
+ return pathSegment(range.includes("!") ? range : `'${range}'`);
90
+ }
91
+ /** A spreadsheet's API path, its ID one path segment. */
92
+ function spreadsheetPath(spreadsheetId) {
93
+ return `/v4/spreadsheets/${pathSegment(spreadsheetId)}`;
96
94
  }
97
95
  function columnNumberToLetter(n) {
98
96
  let s = "";
@@ -155,11 +153,11 @@ function rowsToObjects(rows, headerRow) {
155
153
  }
156
154
  // ─── Sheet operations (shared helpers) ──────────────────────────
157
155
  async function getValues(ctx, spreadsheetId, range, valueRenderOption = "FORMATTED_VALUE", dateTimeRenderOption = "FORMATTED_STRING") {
158
- const res = (await sheetsRequest(ctx, "GET", `/v4/spreadsheets/${spreadsheetId}/values/${encodeA1(range)}`, undefined, { valueRenderOption, dateTimeRenderOption }));
156
+ const res = (await sheetsRequest(ctx, "GET", `${spreadsheetPath(spreadsheetId)}/values/${encodeA1(range)}`, undefined, { valueRenderOption, dateTimeRenderOption }));
159
157
  return res.values ?? [];
160
158
  }
161
159
  async function getSheetProperties(ctx, spreadsheetId) {
162
- const res = (await sheetsRequest(ctx, "GET", `/v4/spreadsheets/${spreadsheetId}`, undefined, { fields: "sheets.properties" }));
160
+ const res = (await sheetsRequest(ctx, "GET", spreadsheetPath(spreadsheetId), undefined, { fields: "sheets.properties" }));
163
161
  return res.sheets.map((s) => s.properties);
164
162
  }
165
163
  async function resolveSheetId(ctx, spreadsheetId, sheetNameOrId) {
@@ -176,10 +174,10 @@ async function resolveSheetId(ctx, spreadsheetId, sheetNameOrId) {
176
174
  return match.sheetId;
177
175
  }
178
176
  async function batchValuesUpdate(ctx, spreadsheetId, data, valueInputOption) {
179
- return sheetsRequest(ctx, "POST", `/v4/spreadsheets/${spreadsheetId}/values:batchUpdate`, { data, valueInputOption });
177
+ return sheetsRequest(ctx, "POST", `${spreadsheetPath(spreadsheetId)}/values:batchUpdate`, { data, valueInputOption });
180
178
  }
181
179
  async function spreadsheetBatchUpdate(ctx, spreadsheetId, requests) {
182
- return sheetsRequest(ctx, "POST", `/v4/spreadsheets/${spreadsheetId}:batchUpdate`, { requests });
180
+ return sheetsRequest(ctx, "POST", `${spreadsheetPath(spreadsheetId)}:batchUpdate`, { requests });
183
181
  }
184
182
  async function appendEmptyRow(ctx, spreadsheetId, sheetId) {
185
183
  // Called before every non-API-append write to protect the
@@ -339,6 +337,7 @@ function a1RangeToGridRange(a1, sheetId) {
339
337
  export default function googleSheets(rl) {
340
338
  rl.setName("googleSheets");
341
339
  rl.setVersion("0.1.0");
340
+ rl.setCredential(googleCredential("googleSheets", SCOPES));
342
341
  rl.setOAuth({
343
342
  authUrl: "https://accounts.google.com/o/oauth2/v2/auth",
344
343
  tokenUrl: "https://oauth2.googleapis.com/token",
@@ -464,7 +463,7 @@ export default function googleSheets(rl) {
464
463
  qs.ranges = p.ranges;
465
464
  if (p.fields)
466
465
  qs.fields = p.fields;
467
- return sheetsRequest(ctx, "GET", `/v4/spreadsheets/${p.spreadsheetId}`, undefined, qs);
466
+ return sheetsRequest(ctx, "GET", spreadsheetPath(p.spreadsheetId), undefined, qs);
468
467
  },
469
468
  });
470
469
  rl.registerAction("spreadsheet.delete", {
@@ -473,7 +472,7 @@ export default function googleSheets(rl) {
473
472
  inputSchema: t.Object({ spreadsheetId: Id }, { additionalProperties: false }),
474
473
  async execute(input, ctx) {
475
474
  const p = (input ?? {});
476
- await sheetsRequest(ctx, "DELETE", `/drive/v3/files/${p.spreadsheetId}`, undefined, undefined, "https://www.googleapis.com");
475
+ await sheetsRequest(ctx, "DELETE", `/drive/v3/files/${pathSegment(p.spreadsheetId)}`, undefined, undefined, "https://www.googleapis.com");
477
476
  return { success: true };
478
477
  },
479
478
  });
@@ -627,12 +626,12 @@ export default function googleSheets(rl) {
627
626
  if (newCols.length > 0) {
628
627
  headers = [...headers, ...newCols];
629
628
  // Write the extended header row back to the sheet.
630
- await sheetsRequest(ctx, "PUT", `/v4/spreadsheets/${spreadsheetId}/values/${encodeA1(`${sheetName}!A${headerRowIdx + 1}`)}`, { range: `${sheetName}!A${headerRowIdx + 1}`, values: [headers] }, { valueInputOption });
629
+ await sheetsRequest(ctx, "PUT", `${spreadsheetPath(spreadsheetId)}/values/${encodeA1(`${sheetName}!A${headerRowIdx + 1}`)}`, { range: `${sheetName}!A${headerRowIdx + 1}`, values: [headers] }, { valueInputOption });
631
630
  }
632
631
  values = objectsToRows(rows, headers);
633
632
  }
634
633
  if (p.useAppend) {
635
- return sheetsRequest(ctx, "POST", `/v4/spreadsheets/${spreadsheetId}/values/${encodeA1(sheetName)}:append`, { range: sheetName, values }, { valueInputOption, insertDataOption: "INSERT_ROWS" });
634
+ return sheetsRequest(ctx, "POST", `${spreadsheetPath(spreadsheetId)}/values/${encodeA1(sheetName)}:append`, { range: sheetName, values }, { valueInputOption, insertDataOption: "INSERT_ROWS" });
636
635
  }
637
636
  // PUT at lastRow+1: calculate lastRow from current sheet contents.
638
637
  const existing = await getValues(ctx, spreadsheetId, sheetName, "UNFORMATTED_VALUE");
@@ -640,7 +639,7 @@ export default function googleSheets(rl) {
640
639
  const sheetId = await resolveSheetId(ctx, spreadsheetId, sheetName);
641
640
  await appendEmptyRow(ctx, spreadsheetId, sheetId);
642
641
  const targetRange = `${sheetName}!${lastRow + 1}:${lastRow + values.length}`;
643
- return sheetsRequest(ctx, "PUT", `/v4/spreadsheets/${spreadsheetId}/values/${encodeA1(targetRange)}`, { range: targetRange, values }, { valueInputOption });
642
+ return sheetsRequest(ctx, "PUT", `${spreadsheetPath(spreadsheetId)}/values/${encodeA1(targetRange)}`, { range: targetRange, values }, { valueInputOption });
644
643
  },
645
644
  });
646
645
  // ── Update ────────────────────────────────────────────
@@ -782,13 +781,13 @@ export default function googleSheets(rl) {
782
781
  }
783
782
  if (mode === "wholeSheet" && p.keepFirstRow) {
784
783
  const firstRow = await getValues(ctx, p.spreadsheetId, `${sheetName}!1:1`, "FORMATTED_VALUE");
785
- await sheetsRequest(ctx, "POST", `/v4/spreadsheets/${p.spreadsheetId}/values/${encodeA1(range)}:clear`, {});
784
+ await sheetsRequest(ctx, "POST", `${spreadsheetPath(p.spreadsheetId)}/values/${encodeA1(range)}:clear`, {});
786
785
  if (firstRow.length > 0) {
787
- await sheetsRequest(ctx, "PUT", `/v4/spreadsheets/${p.spreadsheetId}/values/${encodeA1(`${sheetName}!1:1`)}`, { range: `${sheetName}!1:1`, values: firstRow }, { valueInputOption: "RAW" });
786
+ await sheetsRequest(ctx, "PUT", `${spreadsheetPath(p.spreadsheetId)}/values/${encodeA1(`${sheetName}!1:1`)}`, { range: `${sheetName}!1:1`, values: firstRow }, { valueInputOption: "RAW" });
788
787
  }
789
788
  return { success: true };
790
789
  }
791
- return sheetsRequest(ctx, "POST", `/v4/spreadsheets/${p.spreadsheetId}/values/${encodeA1(range)}:clear`, {});
790
+ return sheetsRequest(ctx, "POST", `${spreadsheetPath(p.spreadsheetId)}/values/${encodeA1(range)}:clear`, {});
792
791
  },
793
792
  });
794
793
  // ── Delete rows/columns ───────────────────────────────
@@ -887,7 +886,7 @@ export default function googleSheets(rl) {
887
886
  // If we added new columns, extend the header row on the sheet first.
888
887
  if (prepared.newColumns.length > 0) {
889
888
  headers = [...headers, ...prepared.newColumns];
890
- await sheetsRequest(ctx, "PUT", `/v4/spreadsheets/${spreadsheetId}/values/${encodeA1(`${sheetName}!${headerRowIdx + 1}:${headerRowIdx + 1}`)}`, {
889
+ await sheetsRequest(ctx, "PUT", `${spreadsheetPath(spreadsheetId)}/values/${encodeA1(`${sheetName}!${headerRowIdx + 1}:${headerRowIdx + 1}`)}`, {
891
890
  range: `${sheetName}!${headerRowIdx + 1}:${headerRowIdx + 1}`,
892
891
  values: [headers],
893
892
  }, { valueInputOption });
@@ -904,13 +903,13 @@ export default function googleSheets(rl) {
904
903
  if (upsert && prepared.appendData.length > 0) {
905
904
  const values = objectsToRows(prepared.appendData, headers);
906
905
  if (p.useAppend) {
907
- await sheetsRequest(ctx, "POST", `/v4/spreadsheets/${spreadsheetId}/values/${encodeA1(sheetName)}:append`, { range: sheetName, values }, { valueInputOption, insertDataOption: "INSERT_ROWS" });
906
+ await sheetsRequest(ctx, "POST", `${spreadsheetPath(spreadsheetId)}/values/${encodeA1(sheetName)}:append`, { range: sheetName, values }, { valueInputOption, insertDataOption: "INSERT_ROWS" });
908
907
  }
909
908
  else {
910
909
  const lastRow = sheetData.length;
911
910
  await appendEmptyRow(ctx, spreadsheetId, sheetId);
912
911
  const targetRange = `${sheetName}!${lastRow + 1}:${lastRow + values.length}`;
913
- await sheetsRequest(ctx, "PUT", `/v4/spreadsheets/${spreadsheetId}/values/${encodeA1(targetRange)}`, { range: targetRange, values }, { valueInputOption });
912
+ await sheetsRequest(ctx, "PUT", `${spreadsheetPath(spreadsheetId)}/values/${encodeA1(targetRange)}`, { range: targetRange, values }, { valueInputOption });
914
913
  }
915
914
  }
916
915
  return {
@@ -21,7 +21,8 @@
21
21
  */
22
22
  import { writeFileSync } from "node:fs";
23
23
  import * as t from "typebox";
24
- import { googleJsonRequest, googleDownload } from "../../_shared/googleAuth.js";
24
+ import { pathSegment } from "../../_shared/credentials.js";
25
+ import { googleCredential, googleDownload, googleJsonRequest, } from "../../_shared/googleAuth.js";
25
26
  import { Id, NonEmptyString, PositiveInteger, RawGoogleObject, StringArray, stringEnum, } from "../../_shared/googleSchemas.js";
26
27
  // ─── Request ─────────────────────────────────────────────────────
27
28
  const API_BASE = "https://slides.googleapis.com/v1";
@@ -38,13 +39,14 @@ function extractPresentationId(input) {
38
39
  if (!input)
39
40
  throw new Error("googleSlides: presentationId or URL is required");
40
41
  const m = input.match(PRES_URL_REGEX);
41
- return m ? m[1] : input;
42
+ return pathSegment(m ? m[1] : input);
42
43
  }
43
44
  // ─── Plugin ──────────────────────────────────────────────────────
44
45
  const SCOPES = ["https://www.googleapis.com/auth/presentations"];
45
46
  export default function googleSlides(rl) {
46
47
  rl.setName("googleSlides");
47
48
  rl.setVersion("0.1.0");
49
+ rl.setCredential(googleCredential("googleSlides", SCOPES));
48
50
  rl.setOAuth({
49
51
  authUrl: "https://accounts.google.com/o/oauth2/v2/auth",
50
52
  tokenUrl: "https://oauth2.googleapis.com/token",
@@ -224,7 +226,7 @@ export default function googleSlides(rl) {
224
226
  async execute(input, ctx) {
225
227
  const p = (input ?? {});
226
228
  const id = extractPresentationId(p.presentation);
227
- return slidesRequest(ctx, "GET", `/presentations/${id}/pages/${p.pageObjectId}`);
229
+ return slidesRequest(ctx, "GET", `/presentations/${id}/pages/${pathSegment(p.pageObjectId)}`);
228
230
  },
229
231
  });
230
232
  rl.registerAction("page.getThumbnail", {
@@ -251,7 +253,7 @@ export default function googleSlides(rl) {
251
253
  qs["thumbnailProperties.mimeType"] = p.mimeType;
252
254
  if (p.thumbnailSize)
253
255
  qs["thumbnailProperties.thumbnailSize"] = p.thumbnailSize;
254
- const res = (await slidesRequest(ctx, "GET", `/presentations/${id}/pages/${p.pageObjectId}/thumbnail`, undefined, qs));
256
+ const res = (await slidesRequest(ctx, "GET", `/presentations/${id}/pages/${pathSegment(p.pageObjectId)}/thumbnail`, undefined, qs));
255
257
  if (!p.savePath && !p.download)
256
258
  return res;
257
259
  // contentUrl is a signed Google URL — fetch without auth headers.
@@ -20,7 +20,8 @@
20
20
  * normalize ISO input via `Date.toISOString()` when detected.
21
21
  */
22
22
  import * as t from "typebox";
23
- import { googleJsonRequest } from "../../_shared/googleAuth.js";
23
+ import { pathSegment } from "../../_shared/credentials.js";
24
+ import { googleCredential, googleJsonRequest } from "../../_shared/googleAuth.js";
24
25
  import { GoogleTimestamp, Id, stringEnum, } from "../../_shared/googleSchemas.js";
25
26
  // ─── Request ─────────────────────────────────────────────────────
26
27
  const API_BASE = "https://tasks.googleapis.com/tasks/v1";
@@ -69,6 +70,7 @@ const pageSizeSchema = t.Integer({ minimum: 1, maximum: 100 });
69
70
  export default function googleTasks(rl) {
70
71
  rl.setName("googleTasks");
71
72
  rl.setVersion("0.1.0");
73
+ rl.setCredential(googleCredential("googleTasks", SCOPES));
72
74
  rl.setOAuth({
73
75
  authUrl: "https://accounts.google.com/o/oauth2/v2/auth",
74
76
  tokenUrl: "https://oauth2.googleapis.com/token",
@@ -140,7 +142,7 @@ export default function googleTasks(rl) {
140
142
  inputSchema: t.Object({ taskListId: Id }, { additionalProperties: false }),
141
143
  async execute(input, ctx) {
142
144
  const p = (input ?? {});
143
- return tasksRequest(ctx, "GET", `/users/@me/lists/${p.taskListId}`);
145
+ return tasksRequest(ctx, "GET", `/users/@me/lists/${pathSegment(p.taskListId)}`);
144
146
  },
145
147
  });
146
148
  rl.registerAction("taskList.create", {
@@ -161,7 +163,7 @@ export default function googleTasks(rl) {
161
163
  }, { additionalProperties: false }),
162
164
  async execute(input, ctx) {
163
165
  const p = (input ?? {});
164
- return tasksRequest(ctx, "PATCH", `/users/@me/lists/${p.taskListId}`, {
166
+ return tasksRequest(ctx, "PATCH", `/users/@me/lists/${pathSegment(p.taskListId)}`, {
165
167
  title: p.title,
166
168
  });
167
169
  },
@@ -172,7 +174,7 @@ export default function googleTasks(rl) {
172
174
  inputSchema: t.Object({ taskListId: Id }, { additionalProperties: false }),
173
175
  async execute(input, ctx) {
174
176
  const p = (input ?? {});
175
- await tasksRequest(ctx, "DELETE", `/users/@me/lists/${p.taskListId}`);
177
+ await tasksRequest(ctx, "DELETE", `/users/@me/lists/${pathSegment(p.taskListId)}`);
176
178
  return { success: true };
177
179
  },
178
180
  });
@@ -217,7 +219,7 @@ export default function googleTasks(rl) {
217
219
  qs.parent = p.parent;
218
220
  if (p.previous)
219
221
  qs.previous = p.previous;
220
- return tasksRequest(ctx, "POST", `/lists/${p.taskListId}/tasks`, body, qs);
222
+ return tasksRequest(ctx, "POST", `/lists/${pathSegment(p.taskListId)}/tasks`, body, qs);
221
223
  },
222
224
  });
223
225
  rl.registerAction("task.get", {
@@ -229,7 +231,7 @@ export default function googleTasks(rl) {
229
231
  }, { additionalProperties: false }),
230
232
  async execute(input, ctx) {
231
233
  const p = (input ?? {});
232
- return tasksRequest(ctx, "GET", `/lists/${p.taskListId}/tasks/${p.taskId}`);
234
+ return tasksRequest(ctx, "GET", `/lists/${pathSegment(p.taskListId)}/tasks/${pathSegment(p.taskId)}`);
233
235
  },
234
236
  });
235
237
  rl.registerAction("task.list", {
@@ -263,7 +265,7 @@ export default function googleTasks(rl) {
263
265
  }
264
266
  if (p.pageToken)
265
267
  qs.pageToken = p.pageToken;
266
- const path = `/lists/${p.taskListId}/tasks`;
268
+ const path = `/lists/${pathSegment(p.taskListId)}/tasks`;
267
269
  if (p.returnAll)
268
270
  return paginateAll(ctx, path, qs);
269
271
  if (p.maxResults)
@@ -315,7 +317,7 @@ export default function googleTasks(rl) {
315
317
  if (Object.keys(body).length === 0) {
316
318
  throw new Error("googleTasks: nothing to update");
317
319
  }
318
- return tasksRequest(ctx, "PATCH", `/lists/${p.taskListId}/tasks/${p.taskId}`, body);
320
+ return tasksRequest(ctx, "PATCH", `/lists/${pathSegment(p.taskListId)}/tasks/${pathSegment(p.taskId)}`, body);
319
321
  },
320
322
  });
321
323
  rl.registerAction("task.delete", {
@@ -327,7 +329,7 @@ export default function googleTasks(rl) {
327
329
  }, { additionalProperties: false }),
328
330
  async execute(input, ctx) {
329
331
  const p = (input ?? {});
330
- await tasksRequest(ctx, "DELETE", `/lists/${p.taskListId}/tasks/${p.taskId}`);
332
+ await tasksRequest(ctx, "DELETE", `/lists/${pathSegment(p.taskListId)}/tasks/${pathSegment(p.taskId)}`);
331
333
  return { success: true };
332
334
  },
333
335
  });
@@ -347,7 +349,7 @@ export default function googleTasks(rl) {
347
349
  qs.parent = p.parent;
348
350
  if (p.previous)
349
351
  qs.previous = p.previous;
350
- return tasksRequest(ctx, "POST", `/lists/${p.taskListId}/tasks/${p.taskId}/move`, undefined, qs);
352
+ return tasksRequest(ctx, "POST", `/lists/${pathSegment(p.taskListId)}/tasks/${pathSegment(p.taskId)}/move`, undefined, qs);
351
353
  },
352
354
  });
353
355
  rl.registerAction("task.clear", {
@@ -356,7 +358,7 @@ export default function googleTasks(rl) {
356
358
  inputSchema: t.Object({ taskListId: Id }, { additionalProperties: false }),
357
359
  async execute(input, ctx) {
358
360
  const p = (input ?? {});
359
- await tasksRequest(ctx, "POST", `/lists/${p.taskListId}/clear`);
361
+ await tasksRequest(ctx, "POST", `/lists/${pathSegment(p.taskListId)}/clear`);
360
362
  return { success: true };
361
363
  },
362
364
  });
@@ -0,0 +1,32 @@
1
+ import { httpsBase, staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * An application token that sends messages and a client token that reads
4
+ * and deletes them, each in the X-Gotify-Key header on its own target of
5
+ * the connection's HTTPS server.
6
+ */
7
+ export const gotifyCredential = staticCredential({
8
+ id: "gotify",
9
+ auth: {
10
+ kind: "static",
11
+ parts: ["appToken", "clientToken"],
12
+ placements: [
13
+ {
14
+ in: "header",
15
+ part: "appToken",
16
+ name: "X-Gotify-Key",
17
+ targets: ["app"],
18
+ },
19
+ {
20
+ in: "header",
21
+ part: "clientToken",
22
+ name: "X-Gotify-Key",
23
+ targets: ["client"],
24
+ },
25
+ ],
26
+ },
27
+ local: { appToken: "appApiToken", clientToken: "clientApiToken" },
28
+ targets: (config) => ({
29
+ app: { baseUrl: httpsBase(config.url, ""), methods: ["POST"] },
30
+ client: { baseUrl: httpsBase(config.url, ""), methods: ["GET", "DELETE"] },
31
+ }),
32
+ });
@@ -1,35 +1,19 @@
1
- async function apiRequest(url, token, method, endpoint, body, qs) {
2
- const fullUrl = new URL(`${url}${endpoint}`);
3
- if (qs) {
4
- for (const [k, v] of Object.entries(qs)) {
5
- if (v !== undefined && v !== null)
6
- fullUrl.searchParams.set(k, String(v));
7
- }
8
- }
9
- const opts = {
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { gotifyCredential } from "./credentials.js";
3
+ /** A Gotify call on the app target (sending) or the client target (reading, deleting). */
4
+ function apiRequest(ctx, target, method, path, body, query) {
5
+ return credentialJson(ctx, gotifyCredential, "gotify", {
6
+ target,
7
+ path,
10
8
  method,
11
- headers: {
12
- "X-Gotify-Key": token,
13
- Accept: "application/json",
14
- "Content-Type": "application/json",
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(fullUrl.toString(), opts);
24
- if (!res.ok)
25
- throw new Error(`Gotify API error ${res.status}: ${await res.text()}`);
26
- if (res.status === 204)
27
- return { success: true };
28
- return res.json();
9
+ query,
10
+ json: body,
11
+ });
29
12
  }
30
13
  export default function gotify(rl) {
31
14
  rl.setName("gotify");
32
15
  rl.setVersion("0.1.0");
16
+ rl.setCredential(gotifyCredential);
33
17
  rl.setConnectionSchema({
34
18
  url: {
35
19
  type: "string",
@@ -69,8 +53,6 @@ export default function gotify(rl) {
69
53
  },
70
54
  async execute(input, ctx) {
71
55
  const { message, title, priority, contentType } = input;
72
- const url = ctx.connection.config.url.replace(/\/$/, "");
73
- const token = ctx.connection.config.appApiToken;
74
56
  const body = { message };
75
57
  if (title)
76
58
  body.title = title;
@@ -78,7 +60,7 @@ export default function gotify(rl) {
78
60
  body.priority = priority;
79
61
  if (contentType)
80
62
  body.extras = { "client::display": { contentType } };
81
- return apiRequest(url, token, "POST", "/message", body);
63
+ return apiRequest(ctx, "app", "POST", "message", body);
82
64
  },
83
65
  });
84
66
  rl.registerAction("message.delete", {
@@ -88,9 +70,7 @@ export default function gotify(rl) {
88
70
  messageId: { type: "string", required: true, description: "Message ID" },
89
71
  },
90
72
  async execute(input, ctx) {
91
- const url = ctx.connection.config.url.replace(/\/$/, "");
92
- const token = ctx.connection.config.clientApiToken;
93
- await apiRequest(url, token, "DELETE", `/message/${input.messageId}`);
73
+ await apiRequest(ctx, "client", "DELETE", `message/${pathSegment(input.messageId)}`);
94
74
  return { success: true };
95
75
  },
96
76
  });
@@ -102,12 +82,10 @@ export default function gotify(rl) {
102
82
  },
103
83
  async execute(input, ctx) {
104
84
  const { limit } = (input ?? {});
105
- const url = ctx.connection.config.url.replace(/\/$/, "");
106
- const token = ctx.connection.config.clientApiToken;
107
85
  const qs = {};
108
86
  if (limit)
109
87
  qs.limit = limit;
110
- const data = (await apiRequest(url, token, "GET", "/message", undefined, qs));
88
+ const data = (await apiRequest(ctx, "client", "GET", "message", undefined, qs));
111
89
  return data.messages;
112
90
  },
113
91
  });
@@ -0,0 +1,13 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /** An OAuth2 access token, sent as a bearer to GoTo's one API origin. */
3
+ export const gotowebinarCredential = staticCredential({
4
+ id: "gotowebinar",
5
+ auth: { kind: "bearer" },
6
+ local: { secret: "accessToken" },
7
+ targets: {
8
+ api: {
9
+ baseUrl: "https://api.getgo.com/G2W/rest/v2/",
10
+ methods: ["GET", "POST", "PUT", "DELETE"],
11
+ },
12
+ },
13
+ });