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
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { AuthError, type AuthErrorCode } from "./auth/errors.js";
2
- export { acquireOAuth2ClientToken, acquireOAuth2JwtToken, buildOAuth2AuthorizationUrl, exchangeOAuth2Code, refreshOAuth2Token, } from "./auth/oauth2.js";
2
+ export { acquireOAuth2ClientToken, acquireOAuth2JwtToken, acquireOAuth2PasswordToken, buildOAuth2AuthorizationUrl, exchangeOAuth2Code, refreshOAuth2Token, } from "./auth/oauth2.js";
3
3
  export { decodeOAuthTokens, requestOAuth2Token } from "./auth/token.js";
4
- export type { OAuth2Definition, OAuth2TokenEndpoint, OAuthApplication, OAuthAuthorizationOptions, OAuthCodeOptions, OAuthEvent, OAuthJwtIdentity, OAuthOperation, OAuthRuntimeOptions, } from "./auth/types.js";
4
+ export type { OAuth2Definition, OAuth2TokenEndpoint, OAuthApplication, OAuthAuthorizationOptions, OAuthCodeOptions, OAuthEvent, OAuthJwtIdentity, OAuthOperation, OAuthResourceOwner, OAuthRuntimeOptions, } from "./auth/types.js";
5
5
  export { addConnection, findConfigDir, getConnection, loadConfig, removeConnection, saveConfig, updateConnectionConfig, } from "./config/loader.js";
6
6
  export type { RunlineConfig } from "./config/types.js";
7
7
  export { DEFAULT_CONFIG } from "./config/types.js";
@@ -13,16 +13,17 @@ export { ExecutionEngine } from "./core/engine.js";
13
13
  export type { BuildAuthUrlOptions, ExchangeCodeOptions, OAuthTokens, PKCEPair, RunOAuthOptions, } from "./core/oauth.js";
14
14
  export { buildAuthUrl, exchangeAuthCode, generatePKCE, OAUTH_CALLBACK_PORT, OAUTH_CALLBACK_URI, oauthCallback, runOAuth, } from "./core/oauth.js";
15
15
  export { downloadResource } from "./credentials/http.js";
16
- export { CredentialRegistry, OAuthGrantSchema, OAuthTokensSchema, validateCredential, } from "./credentials/registry.js";
17
- export type { AuthenticatedRequest, CredentialTransportOptions, } from "./credentials/transport.js";
16
+ export { CredentialRegistry, OAuthGrantSchema, OAuthTokensSchema, staticSecretSchema, validateCredential, } from "./credentials/registry.js";
17
+ export type { AuthenticatedRequest, CredentialBroker, CredentialBrokerCall, CredentialTransportOptions, SocketRequest, } from "./credentials/transport.js";
18
18
  export { CredentialTransport } from "./credentials/transport.js";
19
- export type { CredentialAuthentication, CredentialBinding, CredentialMethod, CredentialProbe, CredentialProbeResult, CredentialTarget, CredentialType, HttpMethod, OAuthGrant, } from "./credentials/types.js";
19
+ export type { CredentialAuthentication, CredentialBinding, CredentialDeclaration, CredentialMethod, CredentialProbe, CredentialProbeResult, CredentialSelection, CredentialTarget, CredentialType, HttpMethod, LocalSecretPart, LocalSecretSource, OAuthGrant, SecretPlacement, } from "./credentials/types.js";
20
20
  export type { ActionDefinition, PluginFunction, RunlinePluginAPI, } from "./plugin/api.js";
21
21
  export { createPluginAPI, isPluginFunction, resolvePluginExport, } from "./plugin/api.js";
22
22
  export type { InstalledPlugin, PluginSource } from "./plugin/installer.js";
23
23
  export { installPlugin, listInstalled, parsePluginSource, removePlugin, } from "./plugin/installer.js";
24
24
  export { discoverPlugins, loadAllPlugins, loadPluginFromPath, loadPluginsFromConfig, } from "./plugin/loader.js";
25
25
  export { PluginRegistry, registry } from "./plugin/registry.js";
26
+ export { connectionFields } from "./plugin/schema.js";
26
27
  export type { ActionAccess, ActionContext, ActionDef, ConnectionConfig, ConnectionSchema, ConnectionSchemaField, InputField, InputSchema, LegacyConnectionSchema, OAuthConfig, PluginDef, } from "./plugin/types.js";
27
28
  export type { RunlineExecuteOptions, RunlineOptions } from "./sdk.js";
28
29
  export { Runline } from "./sdk.js";
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export { AuthError } from "./auth/errors.js";
2
- export { acquireOAuth2ClientToken, acquireOAuth2JwtToken, buildOAuth2AuthorizationUrl, exchangeOAuth2Code, refreshOAuth2Token, } from "./auth/oauth2.js";
2
+ export { acquireOAuth2ClientToken, acquireOAuth2JwtToken, acquireOAuth2PasswordToken, buildOAuth2AuthorizationUrl, exchangeOAuth2Code, refreshOAuth2Token, } from "./auth/oauth2.js";
3
3
  export { decodeOAuthTokens, requestOAuth2Token } from "./auth/token.js";
4
4
  export { addConnection, findConfigDir, getConnection, loadConfig, removeConnection, saveConfig, updateConnectionConfig, } from "./config/loader.js";
5
5
  export { DEFAULT_CONFIG } from "./config/types.js";
@@ -8,11 +8,12 @@ export { MemoryConnectionProvider } from "./connections/memory.js";
8
8
  export { ExecutionEngine } from "./core/engine.js";
9
9
  export { buildAuthUrl, exchangeAuthCode, generatePKCE, OAUTH_CALLBACK_PORT, OAUTH_CALLBACK_URI, oauthCallback, runOAuth, } from "./core/oauth.js";
10
10
  export { downloadResource } from "./credentials/http.js";
11
- export { CredentialRegistry, OAuthGrantSchema, OAuthTokensSchema, validateCredential, } from "./credentials/registry.js";
11
+ export { CredentialRegistry, OAuthGrantSchema, OAuthTokensSchema, staticSecretSchema, validateCredential, } from "./credentials/registry.js";
12
12
  export { CredentialTransport } from "./credentials/transport.js";
13
13
  export { createPluginAPI, isPluginFunction, resolvePluginExport, } from "./plugin/api.js";
14
14
  export { installPlugin, listInstalled, parsePluginSource, removePlugin, } from "./plugin/installer.js";
15
15
  export { discoverPlugins, loadAllPlugins, loadPluginFromPath, loadPluginsFromConfig, } from "./plugin/loader.js";
16
16
  export { PluginRegistry, registry } from "./plugin/registry.js";
17
+ export { connectionFields } from "./plugin/schema.js";
17
18
  export { Runline } from "./sdk.js";
18
19
  export { commandExists, syncExec } from "./utils/cli.js";
@@ -1,3 +1,4 @@
1
+ import type { CredentialDeclaration } from "../credentials/types.js";
1
2
  import type { ActionAccess, ActionDef, ConnectionSchema, InputSchema, OAuthConfig, PluginDef } from "./types.js";
2
3
  export interface ActionDefinition {
3
4
  access?: ActionAccess;
@@ -16,6 +17,12 @@ export interface RunlinePluginAPI {
16
17
  * with refreshable tokens.
17
18
  */
18
19
  setOAuth(oauth: OAuthConfig): void;
20
+ /**
21
+ * Declare how a connection's config becomes what this plugin's requests
22
+ * are signed with, so a host brokering for it can sign from the plugin
23
+ * it loaded rather than from anything the plugin's process sends.
24
+ */
25
+ setCredential(declaration: CredentialDeclaration): void;
19
26
  onInit(fn: (config: Record<string, unknown>) => void): void;
20
27
  log: {
21
28
  info(msg: string): void;
@@ -4,6 +4,7 @@ export function createPluginAPI(pluginId) {
4
4
  const actions = [];
5
5
  let connectionConfigSchema;
6
6
  let oauth;
7
+ let credential;
7
8
  const initHooks = [];
8
9
  const api = {
9
10
  setName(n) {
@@ -24,6 +25,9 @@ export function createPluginAPI(pluginId) {
24
25
  setOAuth(cfg) {
25
26
  oauth = { ...cfg };
26
27
  },
28
+ setCredential(declaration) {
29
+ credential = declaration;
30
+ },
27
31
  onInit(fn) {
28
32
  initHooks.push(fn);
29
33
  },
@@ -49,6 +53,9 @@ export function createPluginAPI(pluginId) {
49
53
  if (oauth) {
50
54
  plugin.oauth = oauth;
51
55
  }
56
+ if (credential) {
57
+ plugin.credential = credential;
58
+ }
52
59
  if (initHooks.length > 0) {
53
60
  plugin.initHooks = initHooks;
54
61
  }
@@ -16,13 +16,25 @@ export declare function connectionFields(schema: ConnectionSchema | undefined):
16
16
  export declare function helpInputs(schema: InputSchema | undefined): Record<string, HelpInput>;
17
17
  export declare function validateLegacyInput(schema: LegacyInputSchema, input: unknown): ValidationResult;
18
18
  /**
19
- * A call written with no arguments is a call with an empty argument set.
19
+ * A value as JSON would carry it: plain-object keys whose value is
20
+ * `undefined` are dropped, at every depth. JSON has no `undefined`, and a
21
+ * schema's `required` counts a present key as given, so `{ name: undefined }`
22
+ * would otherwise satisfy a rule that needs a name. Arrays keep their
23
+ * length; other objects (a Buffer, a Date) pass through untouched.
20
24
  *
25
+ * Self-contained, because the worker's `actions.check` runs this same
26
+ * source: preflight and execution cannot disagree about what was passed.
27
+ */
28
+ export declare function dropUndefined(value: unknown): unknown;
29
+ /**
30
+ * An action's arguments as validation and `execute` see them.
31
+ *
32
+ * A call written with no arguments is a call with an empty argument set:
21
33
  * `linear.user.me()` supplies no argument, so object validation needs an
22
34
  * empty object to accept no-input actions and name missing required fields.
23
- *
24
- * Only `undefined` is normalized: an explicit `null` or `42` is an
25
- * argument, and a wrong one.
35
+ * An explicit `null` or `42` is an argument, and a wrong one. Keys holding
36
+ * `undefined` are absent, by `dropUndefined`. The worker's `actions.check`
37
+ * runs this source too, so it may call nothing but `dropUndefined`.
26
38
  */
27
39
  export declare function normalizeActionInput(input: unknown): unknown;
28
40
  export declare function validateTypedInput(schema: TypedInputSchema, rawInput: unknown): ValidationResult;
@@ -187,16 +187,39 @@ export function validateLegacyInput(schema, input) {
187
187
  return validationResult({ missing, unknown, typeErrors });
188
188
  }
189
189
  /**
190
- * A call written with no arguments is a call with an empty argument set.
190
+ * A value as JSON would carry it: plain-object keys whose value is
191
+ * `undefined` are dropped, at every depth. JSON has no `undefined`, and a
192
+ * schema's `required` counts a present key as given, so `{ name: undefined }`
193
+ * would otherwise satisfy a rule that needs a name. Arrays keep their
194
+ * length; other objects (a Buffer, a Date) pass through untouched.
191
195
  *
196
+ * Self-contained, because the worker's `actions.check` runs this same
197
+ * source: preflight and execution cannot disagree about what was passed.
198
+ */
199
+ export function dropUndefined(value) {
200
+ if (Array.isArray(value))
201
+ return value.map((entry) => dropUndefined(entry));
202
+ if (value === null || typeof value !== "object")
203
+ return value;
204
+ const prototype = Object.getPrototypeOf(value);
205
+ if (prototype !== Object.prototype && prototype !== null)
206
+ return value;
207
+ return Object.fromEntries(Object.entries(value)
208
+ .filter(([, entry]) => entry !== undefined)
209
+ .map(([key, entry]) => [key, dropUndefined(entry)]));
210
+ }
211
+ /**
212
+ * An action's arguments as validation and `execute` see them.
213
+ *
214
+ * A call written with no arguments is a call with an empty argument set:
192
215
  * `linear.user.me()` supplies no argument, so object validation needs an
193
216
  * empty object to accept no-input actions and name missing required fields.
194
- *
195
- * Only `undefined` is normalized: an explicit `null` or `42` is an
196
- * argument, and a wrong one.
217
+ * An explicit `null` or `42` is an argument, and a wrong one. Keys holding
218
+ * `undefined` are absent, by `dropUndefined`. The worker's `actions.check`
219
+ * runs this source too, so it may call nothing but `dropUndefined`.
197
220
  */
198
221
  export function normalizeActionInput(input) {
199
- return input === undefined ? {} : input;
222
+ return input === undefined ? {} : dropUndefined(input);
200
223
  }
201
224
  export function validateTypedInput(schema, rawInput) {
202
225
  const input = normalizeActionInput(rawInput);
@@ -1,6 +1,8 @@
1
1
  import type { TSchema } from "typebox";
2
2
  import type { OAuth2Definition } from "../auth/types.js";
3
3
  import type { ConnectionUpdate } from "../connections/types.js";
4
+ import type { CredentialBroker } from "../credentials/transport.js";
5
+ import type { CredentialDeclaration } from "../credentials/types.js";
4
6
  export interface InputField {
5
7
  type: "string" | "number" | "boolean" | "object" | "array";
6
8
  description?: string;
@@ -60,6 +62,13 @@ export interface ActionContext {
60
62
  * engine). Absent when the embedder passed none.
61
63
  */
62
64
  context?: unknown;
65
+ /**
66
+ * Authenticated requests signed by the host, present when the embedder
67
+ * holds this connection's credentials elsewhere and the plugin declares
68
+ * its credential. A plugin given one sends through it and signs nothing
69
+ * itself: its connection config then carries public settings only.
70
+ */
71
+ credentials?: CredentialBroker;
63
72
  log: {
64
73
  info(msg: string): void;
65
74
  warn(msg: string): void;
@@ -99,6 +108,14 @@ export type OAuthConfig = OAuthSetupOptions & ({
99
108
  interface OAuthSetupOptions {
100
109
  /** Scopes to request on the consent screen. */
101
110
  scopes: string[];
111
+ /**
112
+ * The grant this plugin's consent belongs to, shared by every plugin
113
+ * declaring the same id (`google`, `microsoft`): one provider, one OAuth
114
+ * client, one person's consent. A host may hold one connection for the
115
+ * whole grant and ask for the union of its plugins' scopes. The plugin's
116
+ * credential declares the same id, so its tokens are the grant's.
117
+ */
118
+ grant?: string;
102
119
  /**
103
120
  * Provider-fixed loopback callback (`http://localhost:<port>/<path>`),
104
121
  * replacing Runline's default `http://127.0.0.1:47823/callback`. Use only
@@ -128,6 +145,9 @@ export interface PluginDef {
128
145
  connectionConfigSchema?: ConnectionSchema;
129
146
  /** OAuth2 config for `runline auth <plugin>`. */
130
147
  oauth?: OAuthConfig;
148
+ /** How a connection's config becomes what its requests are signed with;
149
+ * present on plugins whose requests go through the credential registry. */
150
+ credential?: CredentialDeclaration;
131
151
  /** @internal */
132
152
  initHooks?: Array<(config: Record<string, unknown>) => void>;
133
153
  }
@@ -0,0 +1,30 @@
1
+ import * as t from "typebox";
2
+ /**
3
+ * Caller-supplied base64 in the standard padded alphabet: whitespace
4
+ * dropped, base64url's `-` and `_` mapped to `+` and `/`, padding
5
+ * restored. So a gmail.message.getAttachment result (base64url, unpadded)
6
+ * and a googleDrive download (standard) are equally accepted. Undefined
7
+ * when the value is not base64: a character outside both alphabets,
8
+ * padding anywhere but the end, or a length no encoding produces.
9
+ *
10
+ * Flat character-class patterns only: values run to many megabytes.
11
+ */
12
+ export function standardBase64(value) {
13
+ const compact = value.replace(/\s+/g, "").replace(/={1,2}$/, "");
14
+ if (!/^[A-Za-z0-9+/_-]*$/.test(compact) || compact.length % 4 === 1)
15
+ return undefined;
16
+ const standard = compact.replace(/-/g, "+").replace(/_/g, "/");
17
+ return standard.padEnd(Math.ceil(standard.length / 4) * 4, "=");
18
+ }
19
+ /**
20
+ * A googleDrive.file.download result, accepted wherever attachment bytes
21
+ * are: exactly its fields, so the result passes through unedited while
22
+ * anything else is still refused. Its `name` and `mimeType` stand in for
23
+ * an attachment's own when those are left out.
24
+ */
25
+ export const DownloadedFile = t.Object({
26
+ contentBase64: t.String(),
27
+ name: t.Optional(t.String()),
28
+ mimeType: t.Optional(t.String()),
29
+ size: t.Optional(t.Integer({ minimum: 0 })),
30
+ }, { additionalProperties: false });
@@ -1,15 +1,93 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { AuthError, CredentialRegistry, CredentialTransport, } from "runline";
3
- /** Flat CLI/env storage is a projection, not a second token cache or refresh engine. */
4
- export function credentialRuntime(ctx, definition, method, authority) {
5
- const identity = { name: ctx.connection.name, plugin: ctx.connection.plugin };
6
- const fingerprint = (config) => createHash("sha256")
7
- .update(JSON.stringify([definition.id, method, authority(config)]))
3
+ /**
4
+ * Where one action call's authenticated requests go: the host's broker
5
+ * when it supplies one — the credentials then live with the host, and no
6
+ * local signer is built — else this process signs with its own
7
+ * connection, from the plugin's declaration.
8
+ */
9
+ export function credentialBroker(ctx, declaration) {
10
+ if (ctx.credentials)
11
+ return ctx.credentials;
12
+ const { binding, transport } = localSigner(ctx, declaration);
13
+ return {
14
+ request: (input) => transport.request(binding, input),
15
+ probe: () => transport.probe(binding),
16
+ socketUrl: (input) => transport.socketUrl(binding, input),
17
+ };
18
+ }
19
+ /**
20
+ * Everything a stored token was issued under. A config whose selection
21
+ * hashes differently can no longer use tokens issued for this one. A
22
+ * token of a declared grant was issued under the grant — its method,
23
+ * client and token endpoint (Microsoft's names the tenant) — not the
24
+ * plugin that asked, so every plugin of the grant hashes alike and shares
25
+ * it; any other token is the whole selection's, scopes and targets included.
26
+ */
27
+ function authorityOf(selection) {
28
+ const { type, method, application } = selection;
29
+ const auth = Object.hasOwn(type.methods, method)
30
+ ? type.methods[method].authentication
31
+ : undefined;
32
+ const issuedUnder = auth?.kind === "oauth2" && auth.grant !== undefined
33
+ ? {
34
+ grant: auth.grant,
35
+ method,
36
+ application,
37
+ endpoint: auth.definition.refresh,
38
+ }
39
+ : selection;
40
+ return createHash("sha256")
41
+ .update(JSON.stringify(issuedUnder))
8
42
  .digest("hex");
9
- const expected = fingerprint(ctx.connection.config);
43
+ }
44
+ /**
45
+ * A static secret's structured shape, from the flat fields and fixed values
46
+ * the declaration names, joined in order where a part concatenates them.
47
+ * Absent when a required part's field is missing, so the transport refuses
48
+ * it as invalid_credentials before any IO; a missing optional part is left
49
+ * out, refusing only the targets that place it.
50
+ */
51
+ function staticSecret(current, sources, optional) {
52
+ if (!sources)
53
+ return undefined;
54
+ const secret = {};
55
+ sources: for (const [key, source] of Object.entries(sources)) {
56
+ let joined = "";
57
+ for (const part of "concat" in source ? source.concat : [source]) {
58
+ const value = "value" in part ? part.value : current[part.field];
59
+ if (typeof value !== "string") {
60
+ if (optional.includes(key))
61
+ continue sources;
62
+ return undefined;
63
+ }
64
+ joined += value;
65
+ }
66
+ secret[key] = joined;
67
+ }
68
+ return secret;
69
+ }
70
+ /**
71
+ * This process signing with its own connection. Flat CLI/env storage is a
72
+ * projection, not a second token cache or refresh engine.
73
+ */
74
+ function localSigner(ctx, declaration) {
75
+ const selection = declaration(ctx.connection.config);
76
+ const { type: definition, method } = selection;
77
+ if (!Object.hasOwn(definition.methods, method))
78
+ throw new AuthError("invalid_definition");
79
+ const auth = definition.methods[method].authentication;
80
+ const identity = { name: ctx.connection.name, plugin: ctx.connection.plugin };
81
+ const expected = authorityOf(selection);
10
82
  const project = (current) => {
11
- if (fingerprint(current) !== expected)
83
+ if (authorityOf(declaration(current)) !== expected)
12
84
  throw new AuthError("binding_changed");
85
+ if (auth.kind === "none")
86
+ return {};
87
+ if (auth.kind === "static") {
88
+ const secret = staticSecret(current, selection.localSecret, auth.optionalParts ?? []);
89
+ return secret ? { [auth.field]: secret } : {};
90
+ }
13
91
  const compatible = current.authTokenBinding === undefined ||
14
92
  current.authTokenBinding === expected;
15
93
  const tokens = {
@@ -34,7 +112,7 @@ export function credentialRuntime(ctx, definition, method, authority) {
34
112
  const revision = typeof current.authTokenRevision === "string" && compatible
35
113
  ? current.authTokenRevision
36
114
  : createHash("sha256").update(JSON.stringify(tokens)).digest("hex");
37
- return { grant: { tokens, revision } };
115
+ return { [auth.field]: { tokens, revision } };
38
116
  };
39
117
  const snapshot = () => ({
40
118
  ...identity,
@@ -44,21 +122,25 @@ export function credentialRuntime(ctx, definition, method, authority) {
44
122
  type: definition.id,
45
123
  method,
46
124
  identity,
47
- application: {
48
- clientId: ctx.connection.config.clientId,
49
- clientSecret: ctx.connection.config.clientSecret,
50
- },
125
+ application: selection.application,
126
+ ...(selection.jwtIdentity ? { jwtIdentity: selection.jwtIdentity } : {}),
127
+ ...(selection.resourceOwner
128
+ ? { resourceOwner: selection.resourceOwner }
129
+ : {}),
51
130
  connection: {
52
131
  async read() {
53
132
  return snapshot();
54
133
  },
55
134
  async update(change) {
135
+ // Only an OAuth grant is ever renewed and written back.
136
+ if (auth.kind !== "oauth2")
137
+ throw new AuthError("invalid_definition");
56
138
  await ctx.updateConnection(async (current) => {
57
139
  const projected = project(current);
58
140
  const patch = typeof change === "function" ? await change(projected) : change;
59
141
  if (!patch)
60
142
  return;
61
- const grant = patch.grant;
143
+ const grant = patch[auth.field];
62
144
  if (!grant?.tokens.accessToken)
63
145
  throw new AuthError("invalid_credentials");
64
146
  return {
@@ -77,10 +159,12 @@ export function credentialRuntime(ctx, definition, method, authority) {
77
159
  };
78
160
  const registry = new CredentialRegistry();
79
161
  registry.register(definition);
80
- // Builtins run in the caller's trusted runtime. Vex must supply its privileged
81
- // egress transport via the broker rather than execute these plugins server-side.
162
+ // The widest defaults the transport allows, so an undeclared slow call
163
+ // (image generation, exports) is bounded rather than cut short; targets
164
+ // that declare their own deadline or ceiling get it up to the host caps.
82
165
  const transport = new CredentialTransport(registry, {
83
166
  fetch: globalThis.fetch,
167
+ timeoutMs: 120_000,
84
168
  maxRequestBytes: 64 * 1024 * 1024,
85
169
  maxResponseBytes: 64 * 1024 * 1024,
86
170
  });