runline 0.33.0 → 0.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (531) hide show
  1. package/dist/auth/oauth2.d.ts +7 -1
  2. package/dist/auth/oauth2.js +10 -0
  3. package/dist/auth/token.d.ts +1 -0
  4. package/dist/auth/token.js +19 -1
  5. package/dist/auth/types.d.ts +22 -1
  6. package/dist/core/engine.d.ts +7 -0
  7. package/dist/core/engine.js +21 -8
  8. package/dist/credentials/policy.d.ts +53 -1
  9. package/dist/credentials/policy.js +146 -6
  10. package/dist/credentials/registry.d.ts +9 -0
  11. package/dist/credentials/registry.js +184 -22
  12. package/dist/credentials/transport.d.ts +48 -2
  13. package/dist/credentials/transport.js +248 -70
  14. package/dist/credentials/types.d.ts +177 -10
  15. package/dist/index.d.ts +6 -5
  16. package/dist/index.js +3 -2
  17. package/dist/plugin/api.d.ts +7 -0
  18. package/dist/plugin/api.js +7 -0
  19. package/dist/plugin/schema.d.ts +16 -4
  20. package/dist/plugin/schema.js +28 -5
  21. package/dist/plugin/types.d.ts +20 -0
  22. package/dist/plugins/_shared/base64.js +30 -0
  23. package/dist/plugins/_shared/credentialAdapter.js +99 -15
  24. package/dist/plugins/_shared/credentials.js +416 -0
  25. package/dist/plugins/_shared/googleAuth.js +69 -39
  26. package/dist/plugins/_shared/googleCredentials.js +68 -14
  27. package/dist/plugins/_shared/localFile.js +40 -0
  28. package/dist/plugins/_shared/mediaFile.js +12 -12
  29. package/dist/plugins/_shared/microsoftAuth.js +31 -47
  30. package/dist/plugins/_shared/microsoftCredentials.js +42 -15
  31. package/dist/plugins/_shared/provider.js +2 -14
  32. package/dist/plugins/_shared/shiftCloud.js +16 -56
  33. package/dist/plugins/_shared/shiftCredentials.js +83 -0
  34. package/dist/plugins/_shared/shiftUpload.js +14 -10
  35. package/dist/plugins/actionNetwork/src/credentials.js +14 -0
  36. package/dist/plugins/actionNetwork/src/index.js +39 -50
  37. package/dist/plugins/activeCampaign/src/credentials.js +22 -0
  38. package/dist/plugins/activeCampaign/src/index.js +61 -132
  39. package/dist/plugins/adalo/src/credentials.js +16 -0
  40. package/dist/plugins/adalo/src/index.js +19 -43
  41. package/dist/plugins/affinity/src/credentials.js +19 -0
  42. package/dist/plugins/affinity/src/index.js +29 -54
  43. package/dist/plugins/agentMail/src/credentials.js +35 -0
  44. package/dist/plugins/agentMail/src/drafts.js +137 -0
  45. package/dist/plugins/agentMail/src/inboxes.js +95 -0
  46. package/dist/plugins/agentMail/src/index.js +35 -0
  47. package/dist/plugins/agentMail/src/messages.js +154 -0
  48. package/dist/plugins/agentMail/src/schemas.js +156 -0
  49. package/dist/plugins/agentMail/src/shared.js +203 -0
  50. package/dist/plugins/agentMail/src/threads.js +75 -0
  51. package/dist/plugins/agileCrm/src/credentials.js +16 -0
  52. package/dist/plugins/agileCrm/src/index.js +46 -112
  53. package/dist/plugins/airtable/src/credentials.js +19 -0
  54. package/dist/plugins/airtable/src/index.js +37 -50
  55. package/dist/plugins/airtop/src/credentials.js +20 -0
  56. package/dist/plugins/airtop/src/index.js +51 -75
  57. package/dist/plugins/apiTemplateIo/src/credentials.js +19 -0
  58. package/dist/plugins/apiTemplateIo/src/index.js +14 -31
  59. package/dist/plugins/asana/src/credentials.js +19 -0
  60. package/dist/plugins/asana/src/index.js +51 -72
  61. package/dist/plugins/autopilot/src/credentials.js +19 -0
  62. package/dist/plugins/autopilot/src/index.js +38 -45
  63. package/dist/plugins/bambooHr/src/credentials.js +16 -0
  64. package/dist/plugins/bambooHr/src/index.js +41 -67
  65. package/dist/plugins/bannerbear/src/credentials.js +19 -0
  66. package/dist/plugins/bannerbear/src/index.js +15 -27
  67. package/dist/plugins/baserow/src/credentials.js +17 -0
  68. package/dist/plugins/baserow/src/index.js +23 -49
  69. package/dist/plugins/beeminder/src/credentials.js +19 -0
  70. package/dist/plugins/beeminder/src/index.js +32 -54
  71. package/dist/plugins/bitly/src/credentials.js +19 -0
  72. package/dist/plugins/bitly/src/index.js +12 -26
  73. package/dist/plugins/bitwarden/src/credentials.js +62 -0
  74. package/dist/plugins/bitwarden/src/index.js +34 -80
  75. package/dist/plugins/box/src/credentials.js +19 -0
  76. package/dist/plugins/box/src/index.js +24 -49
  77. package/dist/plugins/brandfetch/src/credentials.js +13 -0
  78. package/dist/plugins/brandfetch/src/index.js +12 -17
  79. package/dist/plugins/brevo/src/credentials.js +19 -0
  80. package/dist/plugins/brevo/src/index.js +30 -51
  81. package/dist/plugins/bubble/src/credentials.js +28 -0
  82. package/dist/plugins/bubble/src/index.js +29 -65
  83. package/dist/plugins/chargebee/src/credentials.js +16 -0
  84. package/dist/plugins/chargebee/src/index.js +15 -45
  85. package/dist/plugins/circleci/src/credentials.js +19 -0
  86. package/dist/plugins/circleci/src/index.js +19 -39
  87. package/dist/plugins/ciscoWebex/src/credentials.js +19 -0
  88. package/dist/plugins/ciscoWebex/src/index.js +43 -61
  89. package/dist/plugins/clearbit/src/credentials.js +22 -0
  90. package/dist/plugins/clearbit/src/index.js +11 -21
  91. package/dist/plugins/clickup/src/credentials.js +19 -0
  92. package/dist/plugins/clickup/src/index.js +85 -117
  93. package/dist/plugins/clockify/src/credentials.js +19 -0
  94. package/dist/plugins/clockify/src/index.js +46 -61
  95. package/dist/plugins/cloudflare/src/credentials.js +19 -0
  96. package/dist/plugins/cloudflare/src/index.js +19 -34
  97. package/dist/plugins/cockpit/src/credentials.js +17 -0
  98. package/dist/plugins/cockpit/src/index.js +18 -31
  99. package/dist/plugins/coda/src/credentials.js +19 -0
  100. package/dist/plugins/coda/src/index.js +33 -50
  101. package/dist/plugins/coingecko/src/credentials.js +20 -0
  102. package/dist/plugins/coingecko/src/index.js +24 -34
  103. package/dist/plugins/contentful/src/credentials.js +26 -0
  104. package/dist/plugins/contentful/src/index.js +19 -40
  105. package/dist/plugins/convertkit/src/credentials.js +26 -0
  106. package/dist/plugins/convertkit/src/index.js +27 -45
  107. package/dist/plugins/copper/src/credentials.js +17 -0
  108. package/dist/plugins/copper/src/index.js +25 -47
  109. package/dist/plugins/cortex/src/credentials.js +28 -0
  110. package/dist/plugins/cortex/src/index.js +26 -49
  111. package/dist/plugins/currents/src/credentials.js +19 -0
  112. package/dist/plugins/currents/src/index.js +46 -59
  113. package/dist/plugins/customerIo/src/credentials.js +52 -0
  114. package/dist/plugins/customerIo/src/index.js +30 -58
  115. package/dist/plugins/databricks/src/credentials.js +13 -0
  116. package/dist/plugins/databricks/src/index.js +51 -103
  117. package/dist/plugins/deepl/src/credentials.js +19 -0
  118. package/dist/plugins/deepl/src/index.js +13 -39
  119. package/dist/plugins/demio/src/credentials.js +26 -0
  120. package/dist/plugins/demio/src/index.js +17 -41
  121. package/dist/plugins/dhl/src/credentials.js +13 -0
  122. package/dist/plugins/dhl/src/index.js +8 -19
  123. package/dist/plugins/discord/src/credentials.js +19 -0
  124. package/dist/plugins/discord/src/index.js +30 -58
  125. package/dist/plugins/discourse/src/credentials.js +18 -0
  126. package/dist/plugins/discourse/src/index.js +36 -53
  127. package/dist/plugins/disqus/src/credentials.js +13 -0
  128. package/dist/plugins/disqus/src/index.js +14 -32
  129. package/dist/plugins/drift/src/credentials.js +13 -0
  130. package/dist/plugins/drift/src/index.js +16 -26
  131. package/dist/plugins/dropbox/src/credentials.js +13 -0
  132. package/dist/plugins/dropbox/src/index.js +23 -30
  133. package/dist/plugins/dropcontact/src/credentials.js +13 -0
  134. package/dist/plugins/dropcontact/src/index.js +13 -18
  135. package/dist/plugins/egoi/src/credentials.js +19 -0
  136. package/dist/plugins/egoi/src/index.js +23 -38
  137. package/dist/plugins/elasticsearch/src/credentials.js +18 -0
  138. package/dist/plugins/elasticsearch/src/index.js +27 -48
  139. package/dist/plugins/elevenlabs/src/credentials.js +30 -0
  140. package/dist/plugins/elevenlabs/src/index.js +4 -1
  141. package/dist/plugins/elevenlabs/src/schemas.js +2 -1
  142. package/dist/plugins/elevenlabs/src/shared.js +87 -62
  143. package/dist/plugins/elevenlabs/src/workflows.js +2 -2
  144. package/dist/plugins/emelia/src/credentials.js +14 -0
  145. package/dist/plugins/emelia/src/index.js +19 -23
  146. package/dist/plugins/erpnext/src/credentials.js +27 -0
  147. package/dist/plugins/erpnext/src/index.js +21 -42
  148. package/dist/plugins/facebookGraph/src/credentials.js +20 -0
  149. package/dist/plugins/facebookGraph/src/index.js +39 -37
  150. package/dist/plugins/fal/src/credentials.js +14 -0
  151. package/dist/plugins/fal/src/index.js +5 -3
  152. package/dist/plugins/fal/src/shared.js +58 -63
  153. package/dist/plugins/freshdesk/src/credentials.js +20 -0
  154. package/dist/plugins/freshdesk/src/index.js +25 -46
  155. package/dist/plugins/freshservice/src/credentials.js +16 -0
  156. package/dist/plugins/freshservice/src/index.js +37 -58
  157. package/dist/plugins/freshworksCrm/src/credentials.js +16 -0
  158. package/dist/plugins/freshworksCrm/src/index.js +20 -39
  159. package/dist/plugins/getresponse/src/credentials.js +22 -0
  160. package/dist/plugins/getresponse/src/index.js +20 -32
  161. package/dist/plugins/gett/src/credentials.js +64 -0
  162. package/dist/plugins/gett/src/index.js +11 -6
  163. package/dist/plugins/gett/src/login.js +24 -0
  164. package/dist/plugins/gett/src/session.js +15 -38
  165. package/dist/plugins/gett/src/shared.js +41 -84
  166. package/dist/plugins/ghost/src/credentials.js +36 -0
  167. package/dist/plugins/ghost/src/index.js +18 -59
  168. package/dist/plugins/github/src/credentials.js +18 -0
  169. package/dist/plugins/github/src/index.js +55 -78
  170. package/dist/plugins/gitlab/src/credentials.js +24 -0
  171. package/dist/plugins/gitlab/src/index.js +29 -48
  172. package/dist/plugins/gmail/src/index.js +47 -108
  173. package/dist/plugins/gong/src/credentials.js +16 -0
  174. package/dist/plugins/gong/src/index.js +16 -32
  175. package/dist/plugins/googleAppsScript/src/index.js +109 -42
  176. package/dist/plugins/googleCalendar/src/index.js +20 -51
  177. package/dist/plugins/googleContacts/src/index.js +13 -40
  178. package/dist/plugins/googleDocs/src/index.js +3 -32
  179. package/dist/plugins/googleDocs/src/shared.js +2 -1
  180. package/dist/plugins/googleDrive/src/index.js +68 -97
  181. package/dist/plugins/googleImage/src/credentials.js +14 -0
  182. package/dist/plugins/googleImage/src/index.js +15 -26
  183. package/dist/plugins/googleSheets/src/index.js +27 -60
  184. package/dist/plugins/googleSlides/src/index.js +7 -35
  185. package/dist/plugins/googleTasks/src/index.js +14 -42
  186. package/dist/plugins/gotify/src/credentials.js +32 -0
  187. package/dist/plugins/gotify/src/index.js +14 -36
  188. package/dist/plugins/gotowebinar/src/credentials.js +13 -0
  189. package/dist/plugins/gotowebinar/src/index.js +52 -69
  190. package/dist/plugins/grafana/src/credentials.js +16 -0
  191. package/dist/plugins/grafana/src/index.js +34 -53
  192. package/dist/plugins/graphql/src/credentials.js +42 -0
  193. package/dist/plugins/graphql/src/index.js +21 -46
  194. package/dist/plugins/grist/src/credentials.js +30 -0
  195. package/dist/plugins/grist/src/index.js +14 -43
  196. package/dist/plugins/halopsa/src/credentials.js +56 -0
  197. package/dist/plugins/halopsa/src/index.js +20 -47
  198. package/dist/plugins/harvest/src/credentials.js +20 -0
  199. package/dist/plugins/harvest/src/index.js +24 -43
  200. package/dist/plugins/helpscout/src/credentials.js +13 -0
  201. package/dist/plugins/helpscout/src/index.js +26 -38
  202. package/dist/plugins/highlevel/src/credentials.js +19 -0
  203. package/dist/plugins/highlevel/src/index.js +42 -65
  204. package/dist/plugins/homeAssistant/src/credentials.js +27 -0
  205. package/dist/plugins/homeAssistant/src/index.js +34 -52
  206. package/dist/plugins/hubspot/src/credentials.js +16 -0
  207. package/dist/plugins/hubspot/src/index.js +29 -41
  208. package/dist/plugins/humanticAi/src/credentials.js +13 -0
  209. package/dist/plugins/humanticAi/src/index.js +15 -22
  210. package/dist/plugins/hunter/src/credentials.js +13 -0
  211. package/dist/plugins/hunter/src/index.js +18 -17
  212. package/dist/plugins/intercom/src/credentials.js +19 -0
  213. package/dist/plugins/intercom/src/index.js +25 -38
  214. package/dist/plugins/iterable/src/credentials.js +17 -0
  215. package/dist/plugins/iterable/src/index.js +26 -40
  216. package/dist/plugins/jenkins/src/credentials.js +16 -0
  217. package/dist/plugins/jenkins/src/index.js +22 -36
  218. package/dist/plugins/jira/src/credentials.js +16 -0
  219. package/dist/plugins/jira/src/index.js +35 -61
  220. package/dist/plugins/keap/src/credentials.js +19 -0
  221. package/dist/plugins/keap/src/index.js +43 -71
  222. package/dist/plugins/kobotoolbox/src/credentials.js +13 -0
  223. package/dist/plugins/kobotoolbox/src/index.js +46 -84
  224. package/dist/plugins/lemlist/src/credentials.js +19 -0
  225. package/dist/plugins/lemlist/src/index.js +35 -47
  226. package/dist/plugins/linear/src/attachments.js +7 -7
  227. package/dist/plugins/linear/src/comments.js +7 -7
  228. package/dist/plugins/linear/src/credentials.js +17 -0
  229. package/dist/plugins/linear/src/cycles.js +5 -5
  230. package/dist/plugins/linear/src/index.js +2 -0
  231. package/dist/plugins/linear/src/initiatives.js +6 -6
  232. package/dist/plugins/linear/src/issues.js +14 -14
  233. package/dist/plugins/linear/src/labels.js +6 -6
  234. package/dist/plugins/linear/src/organization.js +2 -2
  235. package/dist/plugins/linear/src/projects.js +12 -12
  236. package/dist/plugins/linear/src/shared.js +34 -32
  237. package/dist/plugins/linear/src/states.js +3 -3
  238. package/dist/plugins/linear/src/teams.js +4 -4
  239. package/dist/plugins/linear/src/users.js +3 -3
  240. package/dist/plugins/linear/src/views.js +5 -5
  241. package/dist/plugins/linear/src/webhooks.js +5 -5
  242. package/dist/plugins/lingvanex/src/credentials.js +13 -0
  243. package/dist/plugins/lingvanex/src/index.js +7 -9
  244. package/dist/plugins/linkedin/src/credentials.js +17 -0
  245. package/dist/plugins/linkedin/src/index.js +13 -17
  246. package/dist/plugins/lonescale/src/credentials.js +13 -0
  247. package/dist/plugins/lonescale/src/index.js +16 -26
  248. package/dist/plugins/magento/src/credentials.js +16 -0
  249. package/dist/plugins/magento/src/index.js +67 -84
  250. package/dist/plugins/mailcheck/src/credentials.js +17 -0
  251. package/dist/plugins/mailcheck/src/index.js +7 -9
  252. package/dist/plugins/mailchimp/src/credentials.js +32 -0
  253. package/dist/plugins/mailchimp/src/index.js +36 -44
  254. package/dist/plugins/mailerlite/src/credentials.js +13 -0
  255. package/dist/plugins/mailerlite/src/index.js +19 -32
  256. package/dist/plugins/mailgun/src/credentials.js +21 -0
  257. package/dist/plugins/mailgun/src/index.js +15 -21
  258. package/dist/plugins/mailjet/src/credentials.js +38 -0
  259. package/dist/plugins/mailjet/src/index.js +60 -115
  260. package/dist/plugins/mandrill/src/credentials.js +17 -0
  261. package/dist/plugins/mandrill/src/index.js +11 -12
  262. package/dist/plugins/marketstack/src/credentials.js +16 -0
  263. package/dist/plugins/marketstack/src/index.js +18 -28
  264. package/dist/plugins/matrix/src/credentials.js +19 -0
  265. package/dist/plugins/matrix/src/index.js +23 -52
  266. package/dist/plugins/mattermost/src/credentials.js +19 -0
  267. package/dist/plugins/mattermost/src/index.js +41 -73
  268. package/dist/plugins/mautic/src/credentials.js +16 -0
  269. package/dist/plugins/mautic/src/index.js +46 -62
  270. package/dist/plugins/medium/src/credentials.js +20 -0
  271. package/dist/plugins/medium/src/index.js +18 -23
  272. package/dist/plugins/messagebird/src/credentials.js +22 -0
  273. package/dist/plugins/messagebird/src/index.js +13 -18
  274. package/dist/plugins/metabase/src/credentials.js +19 -0
  275. package/dist/plugins/metabase/src/index.js +24 -40
  276. package/dist/plugins/microsoftCalendar/src/index.js +49 -18
  277. package/dist/plugins/microsoftFiles/src/index.js +95 -31
  278. package/dist/plugins/microsoftMail/src/index.js +63 -21
  279. package/dist/plugins/misp/src/credentials.js +16 -0
  280. package/dist/plugins/misp/src/index.js +60 -71
  281. package/dist/plugins/mocean/src/credentials.js +17 -0
  282. package/dist/plugins/mocean/src/index.js +11 -23
  283. package/dist/plugins/monday/src/credentials.js +14 -0
  284. package/dist/plugins/monday/src/index.js +31 -44
  285. package/dist/plugins/monicaCrm/src/credentials.js +19 -0
  286. package/dist/plugins/monicaCrm/src/index.js +25 -42
  287. package/dist/plugins/msg91/src/credentials.js +10 -0
  288. package/dist/plugins/msg91/src/index.js +15 -11
  289. package/dist/plugins/nasa/src/credentials.js +22 -0
  290. package/dist/plugins/nasa/src/index.js +24 -28
  291. package/dist/plugins/netlify/src/credentials.js +19 -0
  292. package/dist/plugins/netlify/src/index.js +27 -51
  293. package/dist/plugins/netscalerAdc/src/credentials.js +18 -0
  294. package/dist/plugins/netscalerAdc/src/index.js +16 -31
  295. package/dist/plugins/nextcloud/src/credentials.js +27 -0
  296. package/dist/plugins/nextcloud/src/index.js +55 -109
  297. package/dist/plugins/nocodb/src/credentials.js +16 -0
  298. package/dist/plugins/nocodb/src/index.js +19 -37
  299. package/dist/plugins/notion/src/credentials.js +21 -0
  300. package/dist/plugins/notion/src/index.js +25 -38
  301. package/dist/plugins/npm/src/credentials.js +19 -0
  302. package/dist/plugins/npm/src/index.js +22 -32
  303. package/dist/plugins/odoo/src/credentials.js +21 -0
  304. package/dist/plugins/odoo/src/index.js +53 -69
  305. package/dist/plugins/okta/src/credentials.js +23 -0
  306. package/dist/plugins/okta/src/index.js +30 -35
  307. package/dist/plugins/oneSimpleApi/src/credentials.js +16 -0
  308. package/dist/plugins/oneSimpleApi/src/index.js +19 -24
  309. package/dist/plugins/onfleet/src/credentials.js +23 -0
  310. package/dist/plugins/onfleet/src/index.js +42 -53
  311. package/dist/plugins/openai/src/credentials.js +13 -0
  312. package/dist/plugins/openai/src/index.js +16 -24
  313. package/dist/plugins/openweathermap/src/credentials.js +16 -0
  314. package/dist/plugins/openweathermap/src/index.js +22 -22
  315. package/dist/plugins/oura/src/credentials.js +19 -0
  316. package/dist/plugins/oura/src/index.js +13 -18
  317. package/dist/plugins/paddle/src/credentials.js +27 -0
  318. package/dist/plugins/paddle/src/index.js +20 -36
  319. package/dist/plugins/pagerduty/src/credentials.js +24 -0
  320. package/dist/plugins/pagerduty/src/index.js +30 -39
  321. package/dist/plugins/parallel/src/credentials.js +18 -0
  322. package/dist/plugins/parallel/src/index.js +16 -22
  323. package/dist/plugins/paypal/src/credentials.js +44 -0
  324. package/dist/plugins/paypal/src/index.js +14 -40
  325. package/dist/plugins/peekalink/src/credentials.js +16 -0
  326. package/dist/plugins/peekalink/src/index.js +10 -11
  327. package/dist/plugins/phantombuster/src/credentials.js +19 -0
  328. package/dist/plugins/phantombuster/src/index.js +19 -32
  329. package/dist/plugins/philipsHue/src/credentials.js +17 -0
  330. package/dist/plugins/philipsHue/src/index.js +15 -27
  331. package/dist/plugins/pipedrive/src/credentials.js +26 -0
  332. package/dist/plugins/pipedrive/src/index.js +43 -73
  333. package/dist/plugins/plaud/src/index.js +2 -1
  334. package/dist/plugins/plaud/src/shared.js +23 -19
  335. package/dist/plugins/plivo/src/credentials.js +20 -0
  336. package/dist/plugins/plivo/src/index.js +13 -19
  337. package/dist/plugins/posthog/src/credentials.js +18 -0
  338. package/dist/plugins/posthog/src/index.js +14 -20
  339. package/dist/plugins/profitwell/src/credentials.js +22 -0
  340. package/dist/plugins/profitwell/src/index.js +10 -17
  341. package/dist/plugins/pushbullet/src/credentials.js +19 -0
  342. package/dist/plugins/pushbullet/src/index.js +19 -27
  343. package/dist/plugins/pushcut/src/credentials.js +19 -0
  344. package/dist/plugins/pushcut/src/index.js +7 -8
  345. package/dist/plugins/pushover/src/credentials.js +14 -0
  346. package/dist/plugins/pushover/src/index.js +7 -12
  347. package/dist/plugins/quickbase/src/credentials.js +15 -0
  348. package/dist/plugins/quickbase/src/index.js +24 -34
  349. package/dist/plugins/quickbooks/src/credentials.js +22 -0
  350. package/dist/plugins/quickbooks/src/index.js +17 -46
  351. package/dist/plugins/raindrop/src/credentials.js +19 -0
  352. package/dist/plugins/raindrop/src/index.js +30 -32
  353. package/dist/plugins/recraft/src/credentials.js +13 -0
  354. package/dist/plugins/recraft/src/index.js +39 -28
  355. package/dist/plugins/reddit/src/credentials.js +26 -0
  356. package/dist/plugins/reddit/src/index.js +30 -34
  357. package/dist/plugins/replicate/src/credentials.js +23 -0
  358. package/dist/plugins/replicate/src/index.js +18 -28
  359. package/dist/plugins/rocketchat/src/credentials.js +17 -0
  360. package/dist/plugins/rocketchat/src/index.js +8 -19
  361. package/dist/plugins/rundeck/src/credentials.js +16 -0
  362. package/dist/plugins/rundeck/src/index.js +12 -28
  363. package/dist/plugins/salesforce/src/credentials.js +73 -0
  364. package/dist/plugins/salesforce/src/index.js +6 -0
  365. package/dist/plugins/salesforce/src/metadata.js +3 -16
  366. package/dist/plugins/salesforce/src/shared.js +25 -100
  367. package/dist/plugins/salesforce/src/sobjects.js +10 -9
  368. package/dist/plugins/salesmate/src/credentials.js +17 -0
  369. package/dist/plugins/salesmate/src/index.js +20 -37
  370. package/dist/plugins/securityScorecard/src/credentials.js +22 -0
  371. package/dist/plugins/securityScorecard/src/index.js +24 -37
  372. package/dist/plugins/segment/src/credentials.js +16 -0
  373. package/dist/plugins/segment/src/index.js +12 -16
  374. package/dist/plugins/sendgrid/src/credentials.js +13 -0
  375. package/dist/plugins/sendgrid/src/index.js +31 -35
  376. package/dist/plugins/sendy/src/credentials.js +18 -0
  377. package/dist/plugins/sendy/src/index.js +18 -24
  378. package/dist/plugins/sentry/src/credentials.js +16 -0
  379. package/dist/plugins/sentry/src/index.js +30 -98
  380. package/dist/plugins/servicenow/src/credentials.js +13 -0
  381. package/dist/plugins/servicenow/src/index.js +22 -41
  382. package/dist/plugins/shiftAtlas/src/graph.js +2 -2
  383. package/dist/plugins/shiftAtlas/src/index.js +2 -0
  384. package/dist/plugins/shiftAtlas/src/shared.js +3 -1
  385. package/dist/plugins/shiftBwm/src/index.js +4 -2
  386. package/dist/plugins/shiftBwm/src/shared.js +41 -16
  387. package/dist/plugins/shiftCrm/src/access.js +2 -2
  388. package/dist/plugins/shiftCrm/src/accounts.js +3 -3
  389. package/dist/plugins/shiftCrm/src/activities.js +3 -3
  390. package/dist/plugins/shiftCrm/src/credentials.js +6 -0
  391. package/dist/plugins/shiftCrm/src/index.js +2 -0
  392. package/dist/plugins/shiftCrm/src/opportunities.js +3 -3
  393. package/dist/plugins/shiftCrm/src/people.js +3 -3
  394. package/dist/plugins/shiftCrm/src/records.js +2 -2
  395. package/dist/plugins/shiftCrm/src/shared.js +2 -1
  396. package/dist/plugins/shiftCrm/src/tasks.js +3 -3
  397. package/dist/plugins/shiftObjects/src/credentials.js +2 -0
  398. package/dist/plugins/shiftObjects/src/index.js +2 -0
  399. package/dist/plugins/shiftObjects/src/objects.js +4 -3
  400. package/dist/plugins/shiftOcr/src/credentials.js +8 -0
  401. package/dist/plugins/shiftOcr/src/index.js +14 -8
  402. package/dist/plugins/shiftPages/src/index.js +2 -0
  403. package/dist/plugins/shiftPages/src/pages.js +5 -3
  404. package/dist/plugins/shiftPages/src/shared.js +3 -1
  405. package/dist/plugins/shiftTranscription/src/index.js +2 -0
  406. package/dist/plugins/shiftTranscription/src/shared.js +11 -1
  407. package/dist/plugins/shiftTranscription/src/transcription.js +5 -5
  408. package/dist/plugins/shiftWork/src/index.js +2 -0
  409. package/dist/plugins/shiftWork/src/issue-views.js +5 -5
  410. package/dist/plugins/shiftWork/src/issues.js +11 -7
  411. package/dist/plugins/shiftWork/src/projects.js +3 -3
  412. package/dist/plugins/shiftWork/src/shared.js +3 -1
  413. package/dist/plugins/shopify/src/credentials.js +16 -0
  414. package/dist/plugins/shopify/src/index.js +32 -59
  415. package/dist/plugins/signl4/src/credentials.js +17 -0
  416. package/dist/plugins/signl4/src/index.js +28 -29
  417. package/dist/plugins/slack/src/credentials.js +19 -0
  418. package/dist/plugins/slack/src/index.js +51 -60
  419. package/dist/plugins/sms77/src/credentials.js +17 -0
  420. package/dist/plugins/sms77/src/index.js +11 -16
  421. package/dist/plugins/splunk/src/credentials.js +19 -0
  422. package/dist/plugins/splunk/src/index.js +32 -74
  423. package/dist/plugins/spotify/src/credentials.js +19 -0
  424. package/dist/plugins/spotify/src/index.js +40 -55
  425. package/dist/plugins/stackby/src/credentials.js +13 -0
  426. package/dist/plugins/stackby/src/index.js +14 -23
  427. package/dist/plugins/steel/src/auth.js +27 -0
  428. package/dist/plugins/steel/src/browser.js +4 -3
  429. package/dist/plugins/steel/src/captchas.js +4 -3
  430. package/dist/plugins/steel/src/extensions.js +3 -2
  431. package/dist/plugins/steel/src/files.js +9 -10
  432. package/dist/plugins/steel/src/index.js +2 -0
  433. package/dist/plugins/steel/src/page/tools.js +3 -3
  434. package/dist/plugins/steel/src/profiles.js +4 -3
  435. package/dist/plugins/steel/src/sessions.js +13 -13
  436. package/dist/plugins/steel/src/shared.js +21 -51
  437. package/dist/plugins/storyblok/src/credentials.js +37 -0
  438. package/dist/plugins/storyblok/src/index.js +22 -66
  439. package/dist/plugins/strapi/src/credentials.js +71 -0
  440. package/dist/plugins/strapi/src/index.js +36 -70
  441. package/dist/plugins/strava/src/credentials.js +19 -0
  442. package/dist/plugins/strava/src/index.js +16 -33
  443. package/dist/plugins/stripe/src/credentials.js +19 -0
  444. package/dist/plugins/stripe/src/index.js +44 -58
  445. package/dist/plugins/supabase/src/credentials.js +30 -0
  446. package/dist/plugins/supabase/src/index.js +18 -40
  447. package/dist/plugins/syncromsp/src/credentials.js +16 -0
  448. package/dist/plugins/syncromsp/src/index.js +37 -70
  449. package/dist/plugins/tapfiliate/src/credentials.js +13 -0
  450. package/dist/plugins/tapfiliate/src/index.js +21 -31
  451. package/dist/plugins/telegram/src/credentials.js +20 -0
  452. package/dist/plugins/telegram/src/index.js +31 -39
  453. package/dist/plugins/thehive/src/credentials.js +14 -0
  454. package/dist/plugins/thehive/src/index.js +33 -50
  455. package/dist/plugins/thehiveProject/src/credentials.js +16 -0
  456. package/dist/plugins/thehiveProject/src/index.js +53 -122
  457. package/dist/plugins/todoist/src/credentials.js +26 -0
  458. package/dist/plugins/todoist/src/index.js +49 -79
  459. package/dist/plugins/together/src/credentials.js +16 -0
  460. package/dist/plugins/together/src/index.js +31 -33
  461. package/dist/plugins/travisci/src/credentials.js +24 -0
  462. package/dist/plugins/travisci/src/index.js +16 -30
  463. package/dist/plugins/trello/src/credentials.js +29 -0
  464. package/dist/plugins/trello/src/index.js +49 -64
  465. package/dist/plugins/twake/src/credentials.js +16 -0
  466. package/dist/plugins/twake/src/index.js +8 -10
  467. package/dist/plugins/twilio/src/credentials.js +23 -0
  468. package/dist/plugins/twilio/src/index.js +12 -26
  469. package/dist/plugins/twist/src/credentials.js +13 -0
  470. package/dist/plugins/twist/src/index.js +32 -44
  471. package/dist/plugins/twitter/src/credentials.js +16 -0
  472. package/dist/plugins/twitter/src/index.js +25 -37
  473. package/dist/plugins/typesafe/src/credentials.js +28 -0
  474. package/dist/plugins/typesafe/src/index.js +3 -1
  475. package/dist/plugins/typesafe/src/shared.js +23 -35
  476. package/dist/plugins/unleashedSoftware/src/credentials.js +21 -0
  477. package/dist/plugins/unleashedSoftware/src/index.js +13 -37
  478. package/dist/plugins/uplead/src/credentials.js +16 -0
  479. package/dist/plugins/uplead/src/index.js +11 -16
  480. package/dist/plugins/uproc/src/credentials.js +14 -0
  481. package/dist/plugins/uproc/src/index.js +7 -10
  482. package/dist/plugins/uptimerobot/src/credentials.js +14 -0
  483. package/dist/plugins/uptimerobot/src/index.js +28 -39
  484. package/dist/plugins/urlscanio/src/credentials.js +13 -0
  485. package/dist/plugins/urlscanio/src/index.js +13 -22
  486. package/dist/plugins/vercel/src/credentials.js +19 -0
  487. package/dist/plugins/vercel/src/deployments.js +27 -11
  488. package/dist/plugins/vercel/src/env.js +31 -12
  489. package/dist/plugins/vercel/src/index.js +2 -0
  490. package/dist/plugins/vercel/src/projects.js +6 -3
  491. package/dist/plugins/vercel/src/shared.js +32 -37
  492. package/dist/plugins/vero/src/credentials.js +17 -0
  493. package/dist/plugins/vero/src/index.js +18 -21
  494. package/dist/plugins/vonage/src/credentials.js +17 -0
  495. package/dist/plugins/vonage/src/index.js +14 -18
  496. package/dist/plugins/wekan/src/credentials.js +16 -0
  497. package/dist/plugins/wekan/src/index.js +33 -46
  498. package/dist/plugins/wolt/src/account.js +6 -0
  499. package/dist/plugins/wolt/src/catalog.js +2 -2
  500. package/dist/plugins/wolt/src/credentials.js +64 -0
  501. package/dist/plugins/wolt/src/index.js +8 -3
  502. package/dist/plugins/wolt/src/orders.js +2 -2
  503. package/dist/plugins/wolt/src/public.js +91 -0
  504. package/dist/plugins/wolt/src/shared.js +49 -158
  505. package/dist/plugins/woocommerce/src/credentials.js +16 -0
  506. package/dist/plugins/woocommerce/src/index.js +19 -37
  507. package/dist/plugins/wordpress/src/credentials.js +16 -0
  508. package/dist/plugins/wordpress/src/index.js +23 -42
  509. package/dist/plugins/xai/src/credentials.js +13 -0
  510. package/dist/plugins/xai/src/index.js +32 -31
  511. package/dist/plugins/xero/src/credentials.js +17 -0
  512. package/dist/plugins/xero/src/index.js +19 -36
  513. package/dist/plugins/yourls/src/credentials.js +17 -0
  514. package/dist/plugins/yourls/src/index.js +13 -23
  515. package/dist/plugins/zammad/src/credentials.js +15 -0
  516. package/dist/plugins/zammad/src/index.js +27 -47
  517. package/dist/plugins/zendesk/src/credentials.js +26 -0
  518. package/dist/plugins/zendesk/src/index.js +29 -48
  519. package/dist/plugins/zoho/src/credentials.js +17 -0
  520. package/dist/plugins/zoho/src/index.js +18 -38
  521. package/dist/plugins/zoom/src/credentials.js +19 -0
  522. package/dist/plugins/zoom/src/index.js +15 -30
  523. package/dist/plugins/zulip/src/credentials.js +16 -0
  524. package/dist/plugins/zulip/src/index.js +36 -42
  525. package/dist/sdk.d.ts +8 -0
  526. package/dist/sdk.js +3 -0
  527. package/package.json +2 -1
  528. package/dist/plugins/_shared/authedFetch.js +0 -33
  529. package/dist/plugins/_shared/tokenRefresh.js +0 -41
  530. package/dist/tests/helpers/engine-harness.d.ts +0 -1
  531. package/dist/tests/helpers/engine-harness.js +0 -236
@@ -1,5 +1,6 @@
1
1
  import * as t from "typebox";
2
- import { googleJsonRequest } from "../../_shared/googleAuth.js";
2
+ import { pathSegment } from "../../_shared/credentials.js";
3
+ import { googleCredential, googleJsonRequest, googleOAuth, } from "../../_shared/googleAuth.js";
3
4
  import { Id, NonEmptyString, PositiveInteger, stringEnum, } from "../../_shared/googleSchemas.js";
4
5
  const SCRIPT_API = "https://script.googleapis.com/v1";
5
6
  const DRIVE_API = "https://www.googleapis.com/drive/v3";
@@ -33,21 +34,63 @@ const scriptFileSchema = t.Object({
33
34
  type: scriptFileTypeSchema,
34
35
  source: t.String(),
35
36
  }, { additionalProperties: false });
37
+ /** `T` is the caller's statement of the answer's shape, unchecked, as for any parsed JSON. */
36
38
  async function call(ctx, method, url, payload) {
37
39
  return googleJsonRequest(ctx, "googleAppsScript", SCOPES, method, url, payload);
38
40
  }
39
41
  export default function googleAppsScript(rl) {
40
42
  rl.setName("googleAppsScript");
41
43
  rl.setVersion("1.0.0");
44
+ rl.setCredential(googleCredential("googleAppsScript", SCOPES));
45
+ rl.setOAuth(googleOAuth("googleAppsScript", SCOPES, "GOOGLE_APPS_SCRIPT"));
42
46
  rl.setConnectionSchema({
43
- authMethod: { type: "string", required: false, description: "delegated or serviceAccount (legacy configs infer the method)" },
44
- clientId: { type: "string", required: false, description: "OAuth client ID", env: "GOOGLE_APPS_SCRIPT_CLIENT_ID" },
45
- clientSecret: { type: "string", required: false, description: "OAuth client secret", env: "GOOGLE_APPS_SCRIPT_CLIENT_SECRET" },
46
- refreshToken: { type: "string", required: false, description: "OAuth refresh token", env: "GOOGLE_APPS_SCRIPT_REFRESH_TOKEN" },
47
- serviceAccountJson: { type: "string", required: false, description: "Service-account key JSON", env: "GOOGLE_APPS_SCRIPT_SERVICE_ACCOUNT_JSON" },
48
- serviceAccountEmail: { type: "string", required: false, description: "Service-account email", env: "GOOGLE_APPS_SCRIPT_SERVICE_ACCOUNT_EMAIL" },
49
- serviceAccountPrivateKey: { type: "string", required: false, description: "Service-account private key", env: "GOOGLE_APPS_SCRIPT_SERVICE_ACCOUNT_PRIVATE_KEY" },
50
- serviceAccountSubject: { type: "string", required: false, description: "User to impersonate (domain-wide delegation)", env: "GOOGLE_APPS_SCRIPT_SERVICE_ACCOUNT_SUBJECT" },
47
+ authMethod: {
48
+ type: "string",
49
+ required: false,
50
+ description: "delegated or serviceAccount (legacy configs infer the method)",
51
+ },
52
+ clientId: {
53
+ type: "string",
54
+ required: false,
55
+ description: "OAuth client ID",
56
+ env: "GOOGLE_APPS_SCRIPT_CLIENT_ID",
57
+ },
58
+ clientSecret: {
59
+ type: "string",
60
+ required: false,
61
+ description: "OAuth client secret",
62
+ env: "GOOGLE_APPS_SCRIPT_CLIENT_SECRET",
63
+ },
64
+ refreshToken: {
65
+ type: "string",
66
+ required: false,
67
+ description: "OAuth refresh token",
68
+ env: "GOOGLE_APPS_SCRIPT_REFRESH_TOKEN",
69
+ },
70
+ serviceAccountJson: {
71
+ type: "string",
72
+ required: false,
73
+ description: "Service-account key JSON",
74
+ env: "GOOGLE_APPS_SCRIPT_SERVICE_ACCOUNT_JSON",
75
+ },
76
+ serviceAccountEmail: {
77
+ type: "string",
78
+ required: false,
79
+ description: "Service-account email",
80
+ env: "GOOGLE_APPS_SCRIPT_SERVICE_ACCOUNT_EMAIL",
81
+ },
82
+ serviceAccountPrivateKey: {
83
+ type: "string",
84
+ required: false,
85
+ description: "Service-account private key",
86
+ env: "GOOGLE_APPS_SCRIPT_SERVICE_ACCOUNT_PRIVATE_KEY",
87
+ },
88
+ serviceAccountSubject: {
89
+ type: "string",
90
+ required: false,
91
+ description: "User to impersonate (domain-wide delegation)",
92
+ env: "GOOGLE_APPS_SCRIPT_SERVICE_ACCOUNT_SUBJECT",
93
+ },
51
94
  });
52
95
  rl.registerAction("script.list", {
53
96
  access: "read",
@@ -61,16 +104,17 @@ export default function googleAppsScript(rl) {
61
104
  })),
62
105
  }, { additionalProperties: false }),
63
106
  async execute(input, ctx) {
107
+ const p = input;
64
108
  const params = new URLSearchParams({
65
109
  q: "mimeType='application/vnd.google-apps.script' and trashed=false",
66
110
  fields: "files(id,name,modifiedTime)",
67
- pageSize: String(input.pageSize ?? 50),
111
+ pageSize: String(p.pageSize ?? 50),
68
112
  orderBy: "modifiedTime desc",
69
113
  });
70
114
  const res = await call(ctx, "GET", `${DRIVE_API}/files?${params}`);
71
115
  let files = res.files ?? [];
72
- if (input.query) {
73
- const q = String(input.query).toLowerCase();
116
+ if (p.query) {
117
+ const q = String(p.query).toLowerCase();
74
118
  files = files.filter((f) => (f.name || "").toLowerCase().includes(q));
75
119
  }
76
120
  return { count: files.length, scripts: files };
@@ -81,8 +125,9 @@ export default function googleAppsScript(rl) {
81
125
  description: "Get all files of an Apps Script project (name, type, source).",
82
126
  inputSchema: t.Object({ scriptId: Id }, { additionalProperties: false }),
83
127
  async execute(input, ctx) {
84
- const res = await call(ctx, "GET", `${SCRIPT_API}/projects/${input.scriptId}/content`);
85
- return { scriptId: input.scriptId, files: res.files ?? [] };
128
+ const p = input;
129
+ const res = await call(ctx, "GET", `${SCRIPT_API}/projects/${pathSegment(p.scriptId)}/content`);
130
+ return { scriptId: p.scriptId, files: res.files ?? [] };
86
131
  },
87
132
  });
88
133
  rl.registerAction("project.readFile", {
@@ -96,10 +141,11 @@ export default function googleAppsScript(rl) {
96
141
  }),
97
142
  }, { additionalProperties: false }),
98
143
  async execute(input, ctx) {
99
- const res = await call(ctx, "GET", `${SCRIPT_API}/projects/${input.scriptId}/content`);
100
- const file = (res.files ?? []).find((f) => f.name === input.name);
144
+ const p = input;
145
+ const res = await call(ctx, "GET", `${SCRIPT_API}/projects/${pathSegment(p.scriptId)}/content`);
146
+ const file = (res.files ?? []).find((f) => f.name === p.name);
101
147
  if (!file)
102
- throw new Error(`No file "${input.name}". Available: ${(res.files ?? []).map((f) => f.name).join(", ")}`);
148
+ throw new Error(`No file "${p.name}". Available: ${(res.files ?? []).map((f) => f.name).join(", ")}`);
103
149
  return { name: file.name, type: file.type, source: file.source };
104
150
  },
105
151
  });
@@ -113,17 +159,21 @@ export default function googleAppsScript(rl) {
113
159
  type: t.Optional(stringEnum(["SERVER_JS", "HTML", "JSON"])),
114
160
  }, { additionalProperties: false }),
115
161
  async execute(input, ctx) {
116
- const cur = await call(ctx, "GET", `${SCRIPT_API}/projects/${input.scriptId}/content`);
162
+ const p = input;
163
+ const cur = await call(ctx, "GET", `${SCRIPT_API}/projects/${pathSegment(p.scriptId)}/content`);
117
164
  const files = cur.files ?? [];
118
- const idx = files.findIndex((f) => f.name === input.name);
119
- const type = input.type || (input.name === "appsscript" ? "JSON" : files[idx]?.type || "SERVER_JS");
120
- const entry = { name: input.name, type, source: input.source };
165
+ const idx = files.findIndex((f) => f.name === p.name);
166
+ const type = p.type ||
167
+ (p.name === "appsscript" ? "JSON" : files[idx]?.type || "SERVER_JS");
168
+ const entry = { name: p.name, type, source: p.source };
121
169
  if (idx >= 0)
122
170
  files[idx] = entry;
123
171
  else
124
172
  files.push(entry);
125
- await call(ctx, "PUT", `${SCRIPT_API}/projects/${input.scriptId}/content`, { files });
126
- return { scriptId: input.scriptId, updated: input.name, fileCount: files.length };
173
+ await call(ctx, "PUT", `${SCRIPT_API}/projects/${pathSegment(p.scriptId)}/content`, {
174
+ files,
175
+ });
176
+ return { scriptId: p.scriptId, updated: p.name, fileCount: files.length };
127
177
  },
128
178
  });
129
179
  rl.registerAction("project.updateContent", {
@@ -141,8 +191,9 @@ export default function googleAppsScript(rl) {
141
191
  }),
142
192
  }, { additionalProperties: false }),
143
193
  async execute(input, ctx) {
144
- const res = await call(ctx, "PUT", `${SCRIPT_API}/projects/${input.scriptId}/content`, { files: input.files });
145
- return { scriptId: input.scriptId, fileCount: (res.files ?? []).length };
194
+ const p = input;
195
+ const res = await call(ctx, "PUT", `${SCRIPT_API}/projects/${pathSegment(p.scriptId)}/content`, { files: p.files });
196
+ return { scriptId: p.scriptId, fileCount: (res.files ?? []).length };
146
197
  },
147
198
  });
148
199
  rl.registerAction("project.create", {
@@ -156,11 +207,16 @@ export default function googleAppsScript(rl) {
156
207
  })),
157
208
  }, { additionalProperties: false }),
158
209
  async execute(input, ctx) {
159
- const payload = { title: input.title };
160
- if (input.parentId)
161
- payload.parentId = input.parentId;
210
+ const p = input;
211
+ const payload = { title: p.title };
212
+ if (p.parentId)
213
+ payload.parentId = p.parentId;
162
214
  const res = await call(ctx, "POST", `${SCRIPT_API}/projects`, payload);
163
- return { scriptId: res.scriptId, title: res.title, parentId: res.parentId };
215
+ return {
216
+ scriptId: res.scriptId,
217
+ title: res.title,
218
+ parentId: res.parentId,
219
+ };
164
220
  },
165
221
  });
166
222
  rl.registerAction("version.create", {
@@ -171,8 +227,13 @@ export default function googleAppsScript(rl) {
171
227
  description: t.Optional(t.String()),
172
228
  }, { additionalProperties: false }),
173
229
  async execute(input, ctx) {
174
- const res = await call(ctx, "POST", `${SCRIPT_API}/projects/${input.scriptId}/versions`, { description: input.description || "" });
175
- return { scriptId: input.scriptId, versionNumber: res.versionNumber, description: res.description };
230
+ const p = input;
231
+ const res = await call(ctx, "POST", `${SCRIPT_API}/projects/${pathSegment(p.scriptId)}/versions`, { description: p.description || "" });
232
+ return {
233
+ scriptId: p.scriptId,
234
+ versionNumber: res.versionNumber,
235
+ description: res.description,
236
+ };
176
237
  },
177
238
  });
178
239
  rl.registerAction("deployment.create", {
@@ -185,10 +246,11 @@ export default function googleAppsScript(rl) {
185
246
  manifestFileName: t.Optional(t.String({ minLength: 1, description: "Defaults to 'appsscript'." })),
186
247
  }, { additionalProperties: false }),
187
248
  async execute(input, ctx) {
188
- const res = await call(ctx, "POST", `${SCRIPT_API}/projects/${input.scriptId}/deployments`, {
189
- versionNumber: input.versionNumber,
190
- manifestFileName: input.manifestFileName || "appsscript",
191
- description: input.description || "",
249
+ const p = input;
250
+ const res = await call(ctx, "POST", `${SCRIPT_API}/projects/${pathSegment(p.scriptId)}/deployments`, {
251
+ versionNumber: p.versionNumber,
252
+ manifestFileName: p.manifestFileName || "appsscript",
253
+ description: p.description || "",
192
254
  });
193
255
  return { deploymentId: res.deploymentId, entryPoints: res.entryPoints };
194
256
  },
@@ -205,10 +267,11 @@ export default function googleAppsScript(rl) {
205
267
  })),
206
268
  }, { additionalProperties: false }),
207
269
  async execute(input, ctx) {
208
- const res = await call(ctx, "POST", `${SCRIPT_API}/scripts/${input.scriptId}:run`, {
209
- function: input.functionName,
210
- parameters: input.parameters ?? [],
211
- devMode: input.devMode === undefined ? true : input.devMode,
270
+ const p = input;
271
+ const res = await call(ctx, "POST", `${SCRIPT_API}/scripts/${pathSegment(p.scriptId)}:run`, {
272
+ function: p.functionName,
273
+ parameters: p.parameters ?? [],
274
+ devMode: p.devMode === undefined ? true : p.devMode,
212
275
  });
213
276
  if (res.error) {
214
277
  const d = res.error.details?.[0];
@@ -225,12 +288,16 @@ export default function googleAppsScript(rl) {
225
288
  pageSize: t.Optional(t.Integer({ minimum: 1, maximum: 50, description: "Default 20." })),
226
289
  }, { additionalProperties: false }),
227
290
  async execute(input, ctx) {
291
+ const p = input;
228
292
  const params = new URLSearchParams({
229
- "userProcessFilter.scriptId": input.scriptId,
230
- pageSize: String(input.pageSize ?? 20),
293
+ "userProcessFilter.scriptId": p.scriptId,
294
+ pageSize: String(p.pageSize ?? 20),
231
295
  });
232
296
  const res = await call(ctx, "GET", `${SCRIPT_API}/processes?${params}`);
233
- return { count: (res.processes ?? []).length, processes: res.processes ?? [] };
297
+ return {
298
+ count: (res.processes ?? []).length,
299
+ processes: res.processes ?? [],
300
+ };
234
301
  },
235
302
  });
236
303
  }
@@ -1,13 +1,10 @@
1
1
  /**
2
2
  * Google Calendar plugin for runline.
3
3
  *
4
- * Authentication mirrors the gmail plugin: OAuth2 user flow, seeded
5
- * once via `runline auth googleCalendar`. The connection stores
6
- * `clientId`, `clientSecret`, `refreshToken`, plus cached
7
- * `accessToken` + `accessTokenExpiresAt`. Token refresh is lazy —
8
- * when the cached token is missing or within 60 s of expiry the
9
- * plugin hits `https://oauth2.googleapis.com/token` and persists
10
- * the new token via `ctx.updateConnection`.
4
+ * Authentication mirrors the gmail plugin: the Google grant's OAuth2
5
+ * user flow, seeded once via `runline auth googleCalendar`, with the
6
+ * access token refreshed lazily (60 s skew) and cached on the
7
+ * connection as the grant's.
11
8
  *
12
9
  * Surface area:
13
10
  *
@@ -29,7 +26,8 @@
29
26
  */
30
27
  import rrulePkg from "rrule";
31
28
  import * as t from "typebox";
32
- import { googleJsonRequest } from "../../_shared/googleAuth.js";
29
+ import { pathSegment } from "../../_shared/credentials.js";
30
+ import { googleCredential, googleJsonRequest, googleOAuth, } from "../../_shared/googleAuth.js";
33
31
  import { Id, NonEmptyString, NonEmptyStringArray, PositiveInteger, StringOrStringArray, stringEnum, } from "../../_shared/googleSchemas.js";
34
32
  // `rrule` ships as CJS; named imports fail under Node ESM.
35
33
  const { RRule } = rrulePkg;
@@ -51,9 +49,9 @@ async function paginateAll(ctx, path, key, qs) {
51
49
  }
52
50
  // ─── Helpers ─────────────────────────────────────────────────────
53
51
  function encodeCalendarId(id) {
54
- // Calendar IDs are email-shaped. Decode-then-encode tolerates
55
- // double-encoded input from upstream callers.
56
- return encodeURIComponent(decodeURIComponent(id));
52
+ // Calendar IDs are email-shaped. Decoding first tolerates
53
+ // already-encoded input from upstream callers.
54
+ return pathSegment(decodeURIComponent(id));
57
55
  }
58
56
  function splitAttendees(input) {
59
57
  if (input === undefined || input === null)
@@ -501,37 +499,8 @@ const settingsSchemas = {
501
499
  export default function googleCalendar(rl) {
502
500
  rl.setName("googleCalendar");
503
501
  rl.setVersion("0.1.0");
504
- rl.setOAuth({
505
- authUrl: "https://accounts.google.com/o/oauth2/v2/auth",
506
- tokenUrl: "https://oauth2.googleapis.com/token",
507
- scopes: SCOPES,
508
- authParams: { access_type: "offline", prompt: "consent" },
509
- setupHelp: [
510
- "You need a Google Cloud OAuth client. Takes ~5 minutes, one time.",
511
- "",
512
- "1. Create or pick a Google Cloud project:",
513
- " https://console.cloud.google.com/projectcreate",
514
- "",
515
- "2. Enable the Google Calendar API:",
516
- " https://console.cloud.google.com/apis/library/calendar-json.googleapis.com",
517
- "",
518
- "3. Configure the OAuth consent screen (first time only):",
519
- " https://console.cloud.google.com/apis/credentials/consent",
520
- " • Audience: External",
521
- "",
522
- "4. Add yourself as a test user:",
523
- " https://console.cloud.google.com/auth/audience",
524
- "",
525
- "5. Create the OAuth client:",
526
- " https://console.cloud.google.com/apis/credentials",
527
- " • + Create credentials → OAuth client ID",
528
- " • Application type: Web application",
529
- " • Authorized redirect URIs → + Add URI: {{redirectUri}}",
530
- "",
531
- "6. Paste the Client ID and Client Secret below, or export",
532
- " GOOGLE_CALENDAR_CLIENT_ID and GOOGLE_CALENDAR_CLIENT_SECRET.",
533
- ],
534
- });
502
+ rl.setCredential(googleCredential("googleCalendar", SCOPES));
503
+ rl.setOAuth(googleOAuth("googleCalendar", SCOPES, "GOOGLE_CALENDAR"));
535
504
  rl.setConnectionSchema({
536
505
  authMethod: { type: "string", required: false, description: "delegated or serviceAccount (legacy configs infer the method)" },
537
506
  clientId: {
@@ -712,7 +681,7 @@ export default function googleCalendar(rl) {
712
681
  qs.timeZone = p.timeZone;
713
682
  if (p.maxAttendees)
714
683
  qs.maxAttendees = p.maxAttendees;
715
- const res = (await calRequest(ctx, "GET", `/calendars/${encodeCalendarId(p.calendarId)}/events/${p.eventId}`, undefined, qs));
684
+ const res = (await calRequest(ctx, "GET", `/calendars/${encodeCalendarId(p.calendarId)}/events/${pathSegment(p.eventId)}`, undefined, qs));
716
685
  if (p.nextOccurrence !== false)
717
686
  addNextOccurrence([res]);
718
687
  return res;
@@ -779,7 +748,7 @@ export default function googleCalendar(rl) {
779
748
  qs.showDeleted = p.showDeleted;
780
749
  if (p.pageToken)
781
750
  qs.pageToken = p.pageToken;
782
- const path = `/calendars/${encodeCalendarId(p.calendarId)}/events/${p.eventId}/instances`;
751
+ const path = `/calendars/${encodeCalendarId(p.calendarId)}/events/${pathSegment(p.eventId)}/instances`;
783
752
  if (p.returnAll)
784
753
  return paginateAll(ctx, path, "items", qs);
785
754
  if (p.maxResults)
@@ -797,7 +766,7 @@ export default function googleCalendar(rl) {
797
766
  const calendarId = encodeCalendarId(p.calendarId);
798
767
  // Series edit: resolve the instance's recurringEventId and patch that instead.
799
768
  if (p.modifyTarget === "series") {
800
- const instance = (await calRequest(ctx, "GET", `/calendars/${calendarId}/events/${eventId}`));
769
+ const instance = (await calRequest(ctx, "GET", `/calendars/${calendarId}/events/${pathSegment(eventId)}`));
801
770
  if (!instance.recurringEventId) {
802
771
  throw new Error(`googleCalendar: event ${eventId} is not part of a recurrence series`);
803
772
  }
@@ -823,7 +792,7 @@ export default function googleCalendar(rl) {
823
792
  qs.sendNotifications = p.sendNotifications;
824
793
  if (p.maxAttendees)
825
794
  qs.maxAttendees = p.maxAttendees;
826
- return calRequest(ctx, "PATCH", `/calendars/${calendarId}/events/${eventId}`, body, qs);
795
+ return calRequest(ctx, "PATCH", `/calendars/${calendarId}/events/${pathSegment(eventId)}`, body, qs);
827
796
  },
828
797
  });
829
798
  rl.registerAction("event.delete", {
@@ -835,7 +804,7 @@ export default function googleCalendar(rl) {
835
804
  const qs = {};
836
805
  if (p.sendUpdates)
837
806
  qs.sendUpdates = p.sendUpdates;
838
- return calRequest(ctx, "DELETE", `/calendars/${encodeCalendarId(p.calendarId)}/events/${p.eventId}`, undefined, qs);
807
+ return calRequest(ctx, "DELETE", `/calendars/${encodeCalendarId(p.calendarId)}/events/${pathSegment(p.eventId)}`, undefined, qs);
839
808
  },
840
809
  });
841
810
  rl.registerAction("event.move", {
@@ -849,7 +818,7 @@ export default function googleCalendar(rl) {
849
818
  };
850
819
  if (p.sendUpdates)
851
820
  qs.sendUpdates = p.sendUpdates;
852
- return calRequest(ctx, "POST", `/calendars/${encodeCalendarId(p.calendarId)}/events/${p.eventId}/move`, undefined, qs);
821
+ return calRequest(ctx, "POST", `/calendars/${encodeCalendarId(p.calendarId)}/events/${pathSegment(p.eventId)}/move`, undefined, qs);
853
822
  },
854
823
  });
855
824
  // ─── FreeBusy ────────────────────────────────────────────────────
@@ -957,7 +926,7 @@ export default function googleCalendar(rl) {
957
926
  inputSchema: aclSchemas.update,
958
927
  async execute(input, ctx) {
959
928
  const p = (input ?? {});
960
- return calRequest(ctx, "PATCH", `/calendars/${encodeCalendarId(p.calendarId)}/acl/${encodeURIComponent(p.ruleId)}`, { role: p.role });
929
+ return calRequest(ctx, "PATCH", `/calendars/${encodeCalendarId(p.calendarId)}/acl/${pathSegment(p.ruleId)}`, { role: p.role });
961
930
  },
962
931
  });
963
932
  rl.registerAction("acl.delete", {
@@ -966,7 +935,7 @@ export default function googleCalendar(rl) {
966
935
  inputSchema: aclSchemas.delete,
967
936
  async execute(input, ctx) {
968
937
  const p = (input ?? {});
969
- await calRequest(ctx, "DELETE", `/calendars/${encodeCalendarId(p.calendarId)}/acl/${encodeURIComponent(p.ruleId)}`);
938
+ await calRequest(ctx, "DELETE", `/calendars/${encodeCalendarId(p.calendarId)}/acl/${pathSegment(p.ruleId)}`);
970
939
  return { success: true };
971
940
  },
972
941
  });
@@ -985,7 +954,7 @@ export default function googleCalendar(rl) {
985
954
  inputSchema: settingsSchemas.get,
986
955
  async execute(input, ctx) {
987
956
  const p = (input ?? {});
988
- return calRequest(ctx, "GET", `/users/me/settings/${encodeURIComponent(p.setting)}`);
957
+ return calRequest(ctx, "GET", `/users/me/settings/${pathSegment(p.setting)}`);
989
958
  },
990
959
  });
991
960
  }
@@ -19,11 +19,13 @@
19
19
  *
20
20
  * The People API uses `resourceName` ("people/c1234…") as the
21
21
  * canonical identifier; we accept either the full `resourceName` or
22
- * the bare ID and normalize. The response always includes a
23
- * convenience `contactId` field stripped from `resourceName`.
22
+ * the bare ID and normalize, and either way the ID is one path
23
+ * segment. The response always includes a convenience `contactId`
24
+ * field stripped from `resourceName`.
24
25
  */
25
26
  import * as t from "typebox";
26
- import { googleJsonRequest } from "../../_shared/googleAuth.js";
27
+ import { pathSegment } from "../../_shared/credentials.js";
28
+ import { googleCredential, googleJsonRequest, googleOAuth, } from "../../_shared/googleAuth.js";
27
29
  import { Id, NonEmptyString, PositiveInteger, stringEnum, } from "../../_shared/googleSchemas.js";
28
30
  // ─── Fields ─────────────────────────────────────────────────────
29
31
  /**
@@ -103,14 +105,14 @@ async function paginateAll(ctx, path, key, qs) {
103
105
  * Accepts either the raw ID (`c1234…`) or the full prefixed form.
104
106
  */
105
107
  function normalizeContactResource(input) {
106
- if (!input)
107
- throw new Error("googleContacts: contact ID is required");
108
- return input.startsWith("people/") ? input : `people/${input}`;
108
+ const id = input.startsWith("people/") ? input.slice("people/".length) : input;
109
+ return `people/${pathSegment(id)}`;
109
110
  }
110
111
  function normalizeGroupResource(input) {
111
- if (!input)
112
- throw new Error("googleContacts: group ID is required");
113
- return input.startsWith("contactGroups/") ? input : `contactGroups/${input}`;
112
+ const id = input.startsWith("contactGroups/")
113
+ ? input.slice("contactGroups/".length)
114
+ : input;
115
+ return `contactGroups/${pathSegment(id)}`;
114
116
  }
115
117
  function contactIdFromResource(resourceName) {
116
118
  if (!resourceName)
@@ -372,37 +374,8 @@ const groupSchemas = {
372
374
  export default function googleContacts(rl) {
373
375
  rl.setName("googleContacts");
374
376
  rl.setVersion("0.1.0");
375
- rl.setOAuth({
376
- authUrl: "https://accounts.google.com/o/oauth2/v2/auth",
377
- tokenUrl: "https://oauth2.googleapis.com/token",
378
- scopes: SCOPES,
379
- authParams: { access_type: "offline", prompt: "consent" },
380
- setupHelp: [
381
- "You need a Google Cloud OAuth client. Takes ~5 minutes, one time.",
382
- "",
383
- "1. Create or pick a Google Cloud project:",
384
- " https://console.cloud.google.com/projectcreate",
385
- "",
386
- "2. Enable the People API:",
387
- " https://console.cloud.google.com/apis/library/people.googleapis.com",
388
- "",
389
- "3. Configure the OAuth consent screen:",
390
- " https://console.cloud.google.com/apis/credentials/consent",
391
- " • Audience: External",
392
- "",
393
- "4. Add yourself as a test user:",
394
- " https://console.cloud.google.com/auth/audience",
395
- "",
396
- "5. Create the OAuth client:",
397
- " https://console.cloud.google.com/apis/credentials",
398
- " • + Create credentials → OAuth client ID",
399
- " • Application type: Web application",
400
- " • Authorized redirect URIs → + Add URI: {{redirectUri}}",
401
- "",
402
- "6. Paste the Client ID and Client Secret below, or export",
403
- " GOOGLE_CONTACTS_CLIENT_ID and GOOGLE_CONTACTS_CLIENT_SECRET.",
404
- ],
405
- });
377
+ rl.setCredential(googleCredential("googleContacts", SCOPES));
378
+ rl.setOAuth(googleOAuth("googleContacts", SCOPES, "GOOGLE_CONTACTS"));
406
379
  rl.setConnectionSchema({
407
380
  authMethod: { type: "string", required: false, description: "delegated or serviceAccount (legacy configs infer the method)" },
408
381
  clientId: { type: "string", required: false, env: "GOOGLE_CONTACTS_CLIENT_ID" },
@@ -7,6 +7,7 @@
7
7
  * — the Docs API itself only creates blank documents without a
8
8
  * target folder.
9
9
  */
10
+ import { googleCredential, googleOAuth } from "../../_shared/googleAuth.js";
10
11
  import { registerDocumentsActions } from "./documents.js";
11
12
  import { registerFormattingActions } from "./formatting.js";
12
13
  import { registerImagesActions } from "./images.js";
@@ -18,38 +19,8 @@ import { registerTextActions } from "./text.js";
18
19
  export default function googleDocs(rl) {
19
20
  rl.setName("googleDocs");
20
21
  rl.setVersion("0.1.0");
21
- rl.setOAuth({
22
- authUrl: "https://accounts.google.com/o/oauth2/v2/auth",
23
- tokenUrl: "https://oauth2.googleapis.com/token",
24
- scopes: SCOPES,
25
- authParams: { access_type: "offline", prompt: "consent" },
26
- setupHelp: [
27
- "You need a Google Cloud OAuth client. Takes ~5 minutes, one time.",
28
- "",
29
- "1. Create or pick a Google Cloud project:",
30
- " https://console.cloud.google.com/projectcreate",
31
- "",
32
- "2. Enable the Google Docs API (and Drive API for document.create):",
33
- " https://console.cloud.google.com/apis/library/docs.googleapis.com",
34
- " https://console.cloud.google.com/apis/library/drive.googleapis.com",
35
- "",
36
- "3. Configure the OAuth consent screen:",
37
- " https://console.cloud.google.com/apis/credentials/consent",
38
- " • Audience: External",
39
- "",
40
- "4. Add yourself as a test user:",
41
- " https://console.cloud.google.com/auth/audience",
42
- "",
43
- "5. Create the OAuth client:",
44
- " https://console.cloud.google.com/apis/credentials",
45
- " • + Create credentials → OAuth client ID",
46
- " • Application type: Web application",
47
- " • Authorized redirect URIs → + Add URI: {{redirectUri}}",
48
- "",
49
- "6. Paste the Client ID and Client Secret below, or export",
50
- " GOOGLE_DOCS_CLIENT_ID and GOOGLE_DOCS_CLIENT_SECRET.",
51
- ],
52
- });
22
+ rl.setCredential(googleCredential("googleDocs", SCOPES));
23
+ rl.setOAuth(googleOAuth("googleDocs", SCOPES, "GOOGLE_DOCS"));
53
24
  rl.setConnectionSchema({
54
25
  authMethod: {
55
26
  type: "string",
@@ -1,4 +1,5 @@
1
1
  import * as t from "typebox";
2
+ import { pathSegment } from "../../_shared/credentials.js";
2
3
  import { googleJsonRequest } from "../../_shared/googleAuth.js";
3
4
  import { RawGoogleObject } from "../../_shared/googleSchemas.js";
4
5
  export const SCOPES = [
@@ -68,7 +69,7 @@ export function extractDocumentId(input) {
68
69
  if (!input)
69
70
  throw new Error("googleDocs: documentId or URL is required");
70
71
  const m = input.match(DOC_URL_REGEX);
71
- return m ? m[1] : input;
72
+ return pathSegment(m ? m[1] : input);
72
73
  }
73
74
  export function buildLocation(kind, segmentId, index, tabId) {
74
75
  const seg = segmentId && segmentId !== "body" ? segmentId : "";