runline 0.32.0 → 0.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (521) hide show
  1. package/dist/auth/oauth2.d.ts +7 -1
  2. package/dist/auth/oauth2.js +10 -0
  3. package/dist/auth/token.d.ts +1 -0
  4. package/dist/auth/token.js +19 -1
  5. package/dist/auth/types.d.ts +22 -1
  6. package/dist/core/engine.d.ts +7 -0
  7. package/dist/core/engine.js +9 -0
  8. package/dist/credentials/policy.d.ts +53 -1
  9. package/dist/credentials/policy.js +146 -6
  10. package/dist/credentials/registry.d.ts +9 -0
  11. package/dist/credentials/registry.js +179 -22
  12. package/dist/credentials/transport.d.ts +48 -2
  13. package/dist/credentials/transport.js +248 -70
  14. package/dist/credentials/types.d.ts +167 -10
  15. package/dist/index.d.ts +5 -5
  16. package/dist/index.js +2 -2
  17. package/dist/plugin/api.d.ts +7 -0
  18. package/dist/plugin/api.js +7 -0
  19. package/dist/plugin/types.d.ts +12 -0
  20. package/dist/plugins/_shared/credentialAdapter.js +79 -15
  21. package/dist/plugins/_shared/credentials.js +389 -0
  22. package/dist/plugins/_shared/googleAuth.js +9 -40
  23. package/dist/plugins/_shared/googleCredentials.js +28 -7
  24. package/dist/plugins/_shared/microsoftAuth.js +13 -44
  25. package/dist/plugins/_shared/microsoftCredentials.js +30 -8
  26. package/dist/plugins/_shared/provider.js +2 -14
  27. package/dist/plugins/_shared/shiftCloud.js +22 -34
  28. package/dist/plugins/_shared/shiftCredentials.js +83 -0
  29. package/dist/plugins/_shared/shiftUpload.js +1 -1
  30. package/dist/plugins/actionNetwork/src/credentials.js +14 -0
  31. package/dist/plugins/actionNetwork/src/index.js +39 -50
  32. package/dist/plugins/activeCampaign/src/credentials.js +22 -0
  33. package/dist/plugins/activeCampaign/src/index.js +61 -132
  34. package/dist/plugins/adalo/src/credentials.js +16 -0
  35. package/dist/plugins/adalo/src/index.js +19 -43
  36. package/dist/plugins/affinity/src/credentials.js +19 -0
  37. package/dist/plugins/affinity/src/index.js +29 -54
  38. package/dist/plugins/agileCrm/src/credentials.js +16 -0
  39. package/dist/plugins/agileCrm/src/index.js +46 -112
  40. package/dist/plugins/airtable/src/credentials.js +19 -0
  41. package/dist/plugins/airtable/src/index.js +37 -50
  42. package/dist/plugins/airtop/src/credentials.js +20 -0
  43. package/dist/plugins/airtop/src/index.js +51 -75
  44. package/dist/plugins/apiTemplateIo/src/credentials.js +19 -0
  45. package/dist/plugins/apiTemplateIo/src/index.js +14 -31
  46. package/dist/plugins/asana/src/credentials.js +19 -0
  47. package/dist/plugins/asana/src/index.js +51 -72
  48. package/dist/plugins/autopilot/src/credentials.js +19 -0
  49. package/dist/plugins/autopilot/src/index.js +38 -45
  50. package/dist/plugins/bambooHr/src/credentials.js +16 -0
  51. package/dist/plugins/bambooHr/src/index.js +41 -67
  52. package/dist/plugins/bannerbear/src/credentials.js +19 -0
  53. package/dist/plugins/bannerbear/src/index.js +15 -27
  54. package/dist/plugins/baserow/src/credentials.js +17 -0
  55. package/dist/plugins/baserow/src/index.js +23 -49
  56. package/dist/plugins/beeminder/src/credentials.js +19 -0
  57. package/dist/plugins/beeminder/src/index.js +32 -54
  58. package/dist/plugins/bitly/src/credentials.js +19 -0
  59. package/dist/plugins/bitly/src/index.js +12 -26
  60. package/dist/plugins/bitwarden/src/credentials.js +62 -0
  61. package/dist/plugins/bitwarden/src/index.js +34 -80
  62. package/dist/plugins/box/src/credentials.js +19 -0
  63. package/dist/plugins/box/src/index.js +24 -49
  64. package/dist/plugins/brandfetch/src/credentials.js +13 -0
  65. package/dist/plugins/brandfetch/src/index.js +12 -17
  66. package/dist/plugins/brevo/src/credentials.js +19 -0
  67. package/dist/plugins/brevo/src/index.js +30 -51
  68. package/dist/plugins/bubble/src/credentials.js +28 -0
  69. package/dist/plugins/bubble/src/index.js +29 -65
  70. package/dist/plugins/chargebee/src/credentials.js +16 -0
  71. package/dist/plugins/chargebee/src/index.js +15 -45
  72. package/dist/plugins/circleci/src/credentials.js +19 -0
  73. package/dist/plugins/circleci/src/index.js +19 -39
  74. package/dist/plugins/ciscoWebex/src/credentials.js +19 -0
  75. package/dist/plugins/ciscoWebex/src/index.js +43 -61
  76. package/dist/plugins/clearbit/src/credentials.js +22 -0
  77. package/dist/plugins/clearbit/src/index.js +11 -21
  78. package/dist/plugins/clickup/src/credentials.js +19 -0
  79. package/dist/plugins/clickup/src/index.js +85 -117
  80. package/dist/plugins/clockify/src/credentials.js +19 -0
  81. package/dist/plugins/clockify/src/index.js +46 -61
  82. package/dist/plugins/cloudflare/src/credentials.js +19 -0
  83. package/dist/plugins/cloudflare/src/index.js +19 -34
  84. package/dist/plugins/cockpit/src/credentials.js +17 -0
  85. package/dist/plugins/cockpit/src/index.js +18 -31
  86. package/dist/plugins/coda/src/credentials.js +19 -0
  87. package/dist/plugins/coda/src/index.js +33 -50
  88. package/dist/plugins/coingecko/src/credentials.js +20 -0
  89. package/dist/plugins/coingecko/src/index.js +24 -34
  90. package/dist/plugins/contentful/src/credentials.js +26 -0
  91. package/dist/plugins/contentful/src/index.js +19 -40
  92. package/dist/plugins/convertkit/src/credentials.js +26 -0
  93. package/dist/plugins/convertkit/src/index.js +27 -45
  94. package/dist/plugins/copper/src/credentials.js +17 -0
  95. package/dist/plugins/copper/src/index.js +25 -47
  96. package/dist/plugins/cortex/src/credentials.js +28 -0
  97. package/dist/plugins/cortex/src/index.js +26 -49
  98. package/dist/plugins/currents/src/credentials.js +19 -0
  99. package/dist/plugins/currents/src/index.js +46 -59
  100. package/dist/plugins/customerIo/src/credentials.js +52 -0
  101. package/dist/plugins/customerIo/src/index.js +30 -58
  102. package/dist/plugins/databricks/src/credentials.js +13 -0
  103. package/dist/plugins/databricks/src/index.js +51 -103
  104. package/dist/plugins/deepl/src/credentials.js +19 -0
  105. package/dist/plugins/deepl/src/index.js +13 -39
  106. package/dist/plugins/demio/src/credentials.js +26 -0
  107. package/dist/plugins/demio/src/index.js +17 -41
  108. package/dist/plugins/dhl/src/credentials.js +13 -0
  109. package/dist/plugins/dhl/src/index.js +8 -19
  110. package/dist/plugins/discord/src/credentials.js +19 -0
  111. package/dist/plugins/discord/src/index.js +30 -58
  112. package/dist/plugins/discourse/src/credentials.js +18 -0
  113. package/dist/plugins/discourse/src/index.js +36 -53
  114. package/dist/plugins/disqus/src/credentials.js +13 -0
  115. package/dist/plugins/disqus/src/index.js +14 -32
  116. package/dist/plugins/drift/src/credentials.js +13 -0
  117. package/dist/plugins/drift/src/index.js +16 -26
  118. package/dist/plugins/dropbox/src/credentials.js +13 -0
  119. package/dist/plugins/dropbox/src/index.js +23 -30
  120. package/dist/plugins/dropcontact/src/credentials.js +13 -0
  121. package/dist/plugins/dropcontact/src/index.js +13 -18
  122. package/dist/plugins/egoi/src/credentials.js +19 -0
  123. package/dist/plugins/egoi/src/index.js +23 -38
  124. package/dist/plugins/elasticsearch/src/credentials.js +18 -0
  125. package/dist/plugins/elasticsearch/src/index.js +27 -48
  126. package/dist/plugins/elevenlabs/src/credentials.js +30 -0
  127. package/dist/plugins/elevenlabs/src/index.js +4 -1
  128. package/dist/plugins/elevenlabs/src/schemas.js +2 -1
  129. package/dist/plugins/elevenlabs/src/shared.js +74 -35
  130. package/dist/plugins/elevenlabs/src/workflows.js +2 -2
  131. package/dist/plugins/emelia/src/credentials.js +14 -0
  132. package/dist/plugins/emelia/src/index.js +19 -23
  133. package/dist/plugins/erpnext/src/credentials.js +27 -0
  134. package/dist/plugins/erpnext/src/index.js +21 -42
  135. package/dist/plugins/facebookGraph/src/credentials.js +20 -0
  136. package/dist/plugins/facebookGraph/src/index.js +39 -37
  137. package/dist/plugins/fal/src/credentials.js +14 -0
  138. package/dist/plugins/fal/src/index.js +4 -2
  139. package/dist/plugins/fal/src/shared.js +58 -63
  140. package/dist/plugins/freshdesk/src/credentials.js +20 -0
  141. package/dist/plugins/freshdesk/src/index.js +25 -46
  142. package/dist/plugins/freshservice/src/credentials.js +16 -0
  143. package/dist/plugins/freshservice/src/index.js +37 -58
  144. package/dist/plugins/freshworksCrm/src/credentials.js +16 -0
  145. package/dist/plugins/freshworksCrm/src/index.js +20 -39
  146. package/dist/plugins/getresponse/src/credentials.js +22 -0
  147. package/dist/plugins/getresponse/src/index.js +20 -32
  148. package/dist/plugins/gett/src/credentials.js +64 -0
  149. package/dist/plugins/gett/src/index.js +11 -6
  150. package/dist/plugins/gett/src/login.js +24 -0
  151. package/dist/plugins/gett/src/session.js +15 -38
  152. package/dist/plugins/gett/src/shared.js +41 -84
  153. package/dist/plugins/ghost/src/credentials.js +36 -0
  154. package/dist/plugins/ghost/src/index.js +18 -59
  155. package/dist/plugins/github/src/credentials.js +18 -0
  156. package/dist/plugins/github/src/index.js +55 -78
  157. package/dist/plugins/gitlab/src/credentials.js +24 -0
  158. package/dist/plugins/gitlab/src/index.js +29 -48
  159. package/dist/plugins/gmail/src/index.js +26 -24
  160. package/dist/plugins/gong/src/credentials.js +16 -0
  161. package/dist/plugins/gong/src/index.js +16 -32
  162. package/dist/plugins/googleAppsScript/src/index.js +108 -42
  163. package/dist/plugins/googleCalendar/src/index.js +15 -13
  164. package/dist/plugins/googleContacts/src/index.js +12 -9
  165. package/dist/plugins/googleDocs/src/index.js +2 -0
  166. package/dist/plugins/googleDocs/src/shared.js +2 -1
  167. package/dist/plugins/googleDrive/src/index.js +50 -53
  168. package/dist/plugins/googleImage/src/credentials.js +14 -0
  169. package/dist/plugins/googleImage/src/index.js +14 -25
  170. package/dist/plugins/googleSheets/src/index.js +26 -27
  171. package/dist/plugins/googleSlides/src/index.js +6 -4
  172. package/dist/plugins/googleTasks/src/index.js +13 -11
  173. package/dist/plugins/gotify/src/credentials.js +32 -0
  174. package/dist/plugins/gotify/src/index.js +14 -36
  175. package/dist/plugins/gotowebinar/src/credentials.js +13 -0
  176. package/dist/plugins/gotowebinar/src/index.js +52 -69
  177. package/dist/plugins/grafana/src/credentials.js +16 -0
  178. package/dist/plugins/grafana/src/index.js +34 -53
  179. package/dist/plugins/graphql/src/credentials.js +42 -0
  180. package/dist/plugins/graphql/src/index.js +21 -46
  181. package/dist/plugins/grist/src/credentials.js +30 -0
  182. package/dist/plugins/grist/src/index.js +14 -43
  183. package/dist/plugins/halopsa/src/credentials.js +56 -0
  184. package/dist/plugins/halopsa/src/index.js +20 -47
  185. package/dist/plugins/harvest/src/credentials.js +20 -0
  186. package/dist/plugins/harvest/src/index.js +24 -43
  187. package/dist/plugins/helpscout/src/credentials.js +13 -0
  188. package/dist/plugins/helpscout/src/index.js +26 -38
  189. package/dist/plugins/highlevel/src/credentials.js +19 -0
  190. package/dist/plugins/highlevel/src/index.js +34 -63
  191. package/dist/plugins/homeAssistant/src/credentials.js +27 -0
  192. package/dist/plugins/homeAssistant/src/index.js +34 -52
  193. package/dist/plugins/hubspot/src/credentials.js +16 -0
  194. package/dist/plugins/hubspot/src/index.js +29 -41
  195. package/dist/plugins/humanticAi/src/credentials.js +13 -0
  196. package/dist/plugins/humanticAi/src/index.js +15 -22
  197. package/dist/plugins/hunter/src/credentials.js +13 -0
  198. package/dist/plugins/hunter/src/index.js +18 -17
  199. package/dist/plugins/intercom/src/credentials.js +19 -0
  200. package/dist/plugins/intercom/src/index.js +25 -38
  201. package/dist/plugins/iterable/src/credentials.js +17 -0
  202. package/dist/plugins/iterable/src/index.js +26 -40
  203. package/dist/plugins/jenkins/src/credentials.js +16 -0
  204. package/dist/plugins/jenkins/src/index.js +22 -36
  205. package/dist/plugins/jira/src/credentials.js +16 -0
  206. package/dist/plugins/jira/src/index.js +35 -61
  207. package/dist/plugins/keap/src/credentials.js +19 -0
  208. package/dist/plugins/keap/src/index.js +43 -71
  209. package/dist/plugins/kobotoolbox/src/credentials.js +13 -0
  210. package/dist/plugins/kobotoolbox/src/index.js +46 -84
  211. package/dist/plugins/lemlist/src/credentials.js +19 -0
  212. package/dist/plugins/lemlist/src/index.js +35 -47
  213. package/dist/plugins/linear/src/attachments.js +7 -7
  214. package/dist/plugins/linear/src/comments.js +7 -7
  215. package/dist/plugins/linear/src/credentials.js +17 -0
  216. package/dist/plugins/linear/src/cycles.js +5 -5
  217. package/dist/plugins/linear/src/index.js +2 -0
  218. package/dist/plugins/linear/src/initiatives.js +6 -6
  219. package/dist/plugins/linear/src/issues.js +14 -14
  220. package/dist/plugins/linear/src/labels.js +6 -6
  221. package/dist/plugins/linear/src/organization.js +2 -2
  222. package/dist/plugins/linear/src/projects.js +12 -12
  223. package/dist/plugins/linear/src/shared.js +34 -32
  224. package/dist/plugins/linear/src/states.js +3 -3
  225. package/dist/plugins/linear/src/teams.js +4 -4
  226. package/dist/plugins/linear/src/users.js +3 -3
  227. package/dist/plugins/linear/src/views.js +5 -5
  228. package/dist/plugins/linear/src/webhooks.js +5 -5
  229. package/dist/plugins/lingvanex/src/credentials.js +13 -0
  230. package/dist/plugins/lingvanex/src/index.js +7 -9
  231. package/dist/plugins/linkedin/src/credentials.js +17 -0
  232. package/dist/plugins/linkedin/src/index.js +13 -17
  233. package/dist/plugins/lonescale/src/credentials.js +13 -0
  234. package/dist/plugins/lonescale/src/index.js +16 -26
  235. package/dist/plugins/magento/src/credentials.js +16 -0
  236. package/dist/plugins/magento/src/index.js +67 -84
  237. package/dist/plugins/mailcheck/src/credentials.js +17 -0
  238. package/dist/plugins/mailcheck/src/index.js +7 -9
  239. package/dist/plugins/mailchimp/src/credentials.js +32 -0
  240. package/dist/plugins/mailchimp/src/index.js +36 -44
  241. package/dist/plugins/mailerlite/src/credentials.js +13 -0
  242. package/dist/plugins/mailerlite/src/index.js +19 -32
  243. package/dist/plugins/mailgun/src/credentials.js +21 -0
  244. package/dist/plugins/mailgun/src/index.js +15 -21
  245. package/dist/plugins/mailjet/src/credentials.js +38 -0
  246. package/dist/plugins/mailjet/src/index.js +60 -115
  247. package/dist/plugins/mandrill/src/credentials.js +17 -0
  248. package/dist/plugins/mandrill/src/index.js +11 -12
  249. package/dist/plugins/marketstack/src/credentials.js +16 -0
  250. package/dist/plugins/marketstack/src/index.js +18 -28
  251. package/dist/plugins/matrix/src/credentials.js +19 -0
  252. package/dist/plugins/matrix/src/index.js +23 -52
  253. package/dist/plugins/mattermost/src/credentials.js +19 -0
  254. package/dist/plugins/mattermost/src/index.js +41 -73
  255. package/dist/plugins/mautic/src/credentials.js +16 -0
  256. package/dist/plugins/mautic/src/index.js +46 -62
  257. package/dist/plugins/medium/src/credentials.js +20 -0
  258. package/dist/plugins/medium/src/index.js +18 -23
  259. package/dist/plugins/messagebird/src/credentials.js +22 -0
  260. package/dist/plugins/messagebird/src/index.js +13 -18
  261. package/dist/plugins/metabase/src/credentials.js +19 -0
  262. package/dist/plugins/metabase/src/index.js +24 -40
  263. package/dist/plugins/microsoftCalendar/src/index.js +48 -12
  264. package/dist/plugins/microsoftFiles/src/index.js +90 -25
  265. package/dist/plugins/microsoftMail/src/index.js +62 -15
  266. package/dist/plugins/misp/src/credentials.js +16 -0
  267. package/dist/plugins/misp/src/index.js +60 -71
  268. package/dist/plugins/mocean/src/credentials.js +17 -0
  269. package/dist/plugins/mocean/src/index.js +11 -23
  270. package/dist/plugins/monday/src/credentials.js +14 -0
  271. package/dist/plugins/monday/src/index.js +31 -44
  272. package/dist/plugins/monicaCrm/src/credentials.js +19 -0
  273. package/dist/plugins/monicaCrm/src/index.js +25 -42
  274. package/dist/plugins/msg91/src/credentials.js +10 -0
  275. package/dist/plugins/msg91/src/index.js +15 -11
  276. package/dist/plugins/nasa/src/credentials.js +22 -0
  277. package/dist/plugins/nasa/src/index.js +24 -28
  278. package/dist/plugins/netlify/src/credentials.js +19 -0
  279. package/dist/plugins/netlify/src/index.js +27 -51
  280. package/dist/plugins/netscalerAdc/src/credentials.js +18 -0
  281. package/dist/plugins/netscalerAdc/src/index.js +16 -31
  282. package/dist/plugins/nextcloud/src/credentials.js +27 -0
  283. package/dist/plugins/nextcloud/src/index.js +55 -109
  284. package/dist/plugins/nocodb/src/credentials.js +16 -0
  285. package/dist/plugins/nocodb/src/index.js +19 -37
  286. package/dist/plugins/notion/src/credentials.js +21 -0
  287. package/dist/plugins/notion/src/index.js +25 -38
  288. package/dist/plugins/npm/src/credentials.js +19 -0
  289. package/dist/plugins/npm/src/index.js +22 -32
  290. package/dist/plugins/odoo/src/credentials.js +21 -0
  291. package/dist/plugins/odoo/src/index.js +53 -69
  292. package/dist/plugins/okta/src/credentials.js +23 -0
  293. package/dist/plugins/okta/src/index.js +30 -35
  294. package/dist/plugins/oneSimpleApi/src/credentials.js +16 -0
  295. package/dist/plugins/oneSimpleApi/src/index.js +19 -24
  296. package/dist/plugins/onfleet/src/credentials.js +23 -0
  297. package/dist/plugins/onfleet/src/index.js +42 -53
  298. package/dist/plugins/openai/src/credentials.js +13 -0
  299. package/dist/plugins/openai/src/index.js +15 -23
  300. package/dist/plugins/openweathermap/src/credentials.js +16 -0
  301. package/dist/plugins/openweathermap/src/index.js +22 -22
  302. package/dist/plugins/oura/src/credentials.js +19 -0
  303. package/dist/plugins/oura/src/index.js +13 -18
  304. package/dist/plugins/paddle/src/credentials.js +27 -0
  305. package/dist/plugins/paddle/src/index.js +20 -36
  306. package/dist/plugins/pagerduty/src/credentials.js +24 -0
  307. package/dist/plugins/pagerduty/src/index.js +30 -39
  308. package/dist/plugins/parallel/src/credentials.js +18 -0
  309. package/dist/plugins/parallel/src/index.js +16 -22
  310. package/dist/plugins/paypal/src/credentials.js +44 -0
  311. package/dist/plugins/paypal/src/index.js +14 -40
  312. package/dist/plugins/peekalink/src/credentials.js +16 -0
  313. package/dist/plugins/peekalink/src/index.js +10 -11
  314. package/dist/plugins/phantombuster/src/credentials.js +19 -0
  315. package/dist/plugins/phantombuster/src/index.js +19 -32
  316. package/dist/plugins/philipsHue/src/credentials.js +17 -0
  317. package/dist/plugins/philipsHue/src/index.js +15 -27
  318. package/dist/plugins/pipedrive/src/credentials.js +26 -0
  319. package/dist/plugins/pipedrive/src/index.js +43 -73
  320. package/dist/plugins/plaud/src/index.js +2 -1
  321. package/dist/plugins/plaud/src/shared.js +23 -19
  322. package/dist/plugins/plivo/src/credentials.js +20 -0
  323. package/dist/plugins/plivo/src/index.js +13 -19
  324. package/dist/plugins/posthog/src/credentials.js +18 -0
  325. package/dist/plugins/posthog/src/index.js +14 -20
  326. package/dist/plugins/profitwell/src/credentials.js +22 -0
  327. package/dist/plugins/profitwell/src/index.js +10 -17
  328. package/dist/plugins/pushbullet/src/credentials.js +19 -0
  329. package/dist/plugins/pushbullet/src/index.js +19 -27
  330. package/dist/plugins/pushcut/src/credentials.js +19 -0
  331. package/dist/plugins/pushcut/src/index.js +7 -8
  332. package/dist/plugins/pushover/src/credentials.js +14 -0
  333. package/dist/plugins/pushover/src/index.js +7 -12
  334. package/dist/plugins/quickbase/src/credentials.js +15 -0
  335. package/dist/plugins/quickbase/src/index.js +24 -34
  336. package/dist/plugins/quickbooks/src/credentials.js +22 -0
  337. package/dist/plugins/quickbooks/src/index.js +17 -46
  338. package/dist/plugins/raindrop/src/credentials.js +19 -0
  339. package/dist/plugins/raindrop/src/index.js +30 -32
  340. package/dist/plugins/recraft/src/credentials.js +13 -0
  341. package/dist/plugins/recraft/src/index.js +38 -27
  342. package/dist/plugins/reddit/src/credentials.js +26 -0
  343. package/dist/plugins/reddit/src/index.js +30 -34
  344. package/dist/plugins/replicate/src/credentials.js +23 -0
  345. package/dist/plugins/replicate/src/index.js +17 -27
  346. package/dist/plugins/rocketchat/src/credentials.js +17 -0
  347. package/dist/plugins/rocketchat/src/index.js +8 -19
  348. package/dist/plugins/rundeck/src/credentials.js +16 -0
  349. package/dist/plugins/rundeck/src/index.js +12 -28
  350. package/dist/plugins/salesforce/src/credentials.js +73 -0
  351. package/dist/plugins/salesforce/src/index.js +6 -0
  352. package/dist/plugins/salesforce/src/metadata.js +3 -16
  353. package/dist/plugins/salesforce/src/shared.js +25 -100
  354. package/dist/plugins/salesforce/src/sobjects.js +10 -9
  355. package/dist/plugins/salesmate/src/credentials.js +17 -0
  356. package/dist/plugins/salesmate/src/index.js +20 -37
  357. package/dist/plugins/securityScorecard/src/credentials.js +22 -0
  358. package/dist/plugins/securityScorecard/src/index.js +24 -37
  359. package/dist/plugins/segment/src/credentials.js +16 -0
  360. package/dist/plugins/segment/src/index.js +12 -16
  361. package/dist/plugins/sendgrid/src/credentials.js +13 -0
  362. package/dist/plugins/sendgrid/src/index.js +31 -35
  363. package/dist/plugins/sendy/src/credentials.js +18 -0
  364. package/dist/plugins/sendy/src/index.js +18 -24
  365. package/dist/plugins/sentry/src/credentials.js +16 -0
  366. package/dist/plugins/sentry/src/index.js +30 -98
  367. package/dist/plugins/servicenow/src/credentials.js +13 -0
  368. package/dist/plugins/servicenow/src/index.js +22 -41
  369. package/dist/plugins/shiftAtlas/src/graph.js +2 -2
  370. package/dist/plugins/shiftAtlas/src/index.js +2 -0
  371. package/dist/plugins/shiftAtlas/src/shared.js +3 -1
  372. package/dist/plugins/shiftBwm/src/collections.js +201 -0
  373. package/dist/plugins/shiftBwm/src/index.js +35 -0
  374. package/dist/plugins/shiftBwm/src/records.js +180 -0
  375. package/dist/plugins/shiftBwm/src/shared.js +168 -0
  376. package/dist/plugins/shiftBwm/src/vendor/client.js +227 -0
  377. package/dist/plugins/shiftBwm/src/vendor/contracts.js +59 -0
  378. package/dist/plugins/shiftBwm/src/vendor/models.js +525 -0
  379. package/dist/plugins/shiftCrm/src/access.js +2 -2
  380. package/dist/plugins/shiftCrm/src/accounts.js +3 -3
  381. package/dist/plugins/shiftCrm/src/activities.js +3 -3
  382. package/dist/plugins/shiftCrm/src/credentials.js +6 -0
  383. package/dist/plugins/shiftCrm/src/index.js +2 -0
  384. package/dist/plugins/shiftCrm/src/opportunities.js +3 -3
  385. package/dist/plugins/shiftCrm/src/people.js +3 -3
  386. package/dist/plugins/shiftCrm/src/records.js +2 -2
  387. package/dist/plugins/shiftCrm/src/shared.js +2 -1
  388. package/dist/plugins/shiftCrm/src/tasks.js +3 -3
  389. package/dist/plugins/shiftObjects/src/credentials.js +2 -0
  390. package/dist/plugins/shiftObjects/src/index.js +2 -0
  391. package/dist/plugins/shiftObjects/src/objects.js +3 -3
  392. package/dist/plugins/shiftOcr/src/credentials.js +8 -0
  393. package/dist/plugins/shiftOcr/src/index.js +5 -2
  394. package/dist/plugins/shiftPages/src/index.js +2 -0
  395. package/dist/plugins/shiftPages/src/pages.js +5 -3
  396. package/dist/plugins/shiftPages/src/shared.js +3 -1
  397. package/dist/plugins/shiftTranscription/src/index.js +2 -0
  398. package/dist/plugins/shiftTranscription/src/shared.js +11 -1
  399. package/dist/plugins/shiftTranscription/src/transcription.js +3 -2
  400. package/dist/plugins/shiftWork/src/index.js +2 -0
  401. package/dist/plugins/shiftWork/src/issue-views.js +5 -5
  402. package/dist/plugins/shiftWork/src/issues.js +11 -7
  403. package/dist/plugins/shiftWork/src/projects.js +3 -3
  404. package/dist/plugins/shiftWork/src/shared.js +3 -1
  405. package/dist/plugins/shopify/src/credentials.js +16 -0
  406. package/dist/plugins/shopify/src/index.js +32 -59
  407. package/dist/plugins/signl4/src/credentials.js +17 -0
  408. package/dist/plugins/signl4/src/index.js +28 -29
  409. package/dist/plugins/slack/src/credentials.js +19 -0
  410. package/dist/plugins/slack/src/index.js +51 -60
  411. package/dist/plugins/sms77/src/credentials.js +17 -0
  412. package/dist/plugins/sms77/src/index.js +11 -16
  413. package/dist/plugins/splunk/src/credentials.js +19 -0
  414. package/dist/plugins/splunk/src/index.js +32 -74
  415. package/dist/plugins/spotify/src/credentials.js +19 -0
  416. package/dist/plugins/spotify/src/index.js +40 -55
  417. package/dist/plugins/stackby/src/credentials.js +13 -0
  418. package/dist/plugins/stackby/src/index.js +14 -23
  419. package/dist/plugins/steel/src/auth.js +27 -0
  420. package/dist/plugins/steel/src/browser.js +4 -3
  421. package/dist/plugins/steel/src/captchas.js +4 -3
  422. package/dist/plugins/steel/src/extensions.js +3 -2
  423. package/dist/plugins/steel/src/files.js +9 -10
  424. package/dist/plugins/steel/src/index.js +2 -0
  425. package/dist/plugins/steel/src/page/tools.js +3 -3
  426. package/dist/plugins/steel/src/profiles.js +4 -3
  427. package/dist/plugins/steel/src/sessions.js +13 -13
  428. package/dist/plugins/steel/src/shared.js +21 -51
  429. package/dist/plugins/storyblok/src/credentials.js +37 -0
  430. package/dist/plugins/storyblok/src/index.js +22 -66
  431. package/dist/plugins/strapi/src/credentials.js +71 -0
  432. package/dist/plugins/strapi/src/index.js +36 -70
  433. package/dist/plugins/strava/src/credentials.js +19 -0
  434. package/dist/plugins/strava/src/index.js +16 -33
  435. package/dist/plugins/stripe/src/credentials.js +19 -0
  436. package/dist/plugins/stripe/src/index.js +44 -58
  437. package/dist/plugins/supabase/src/credentials.js +30 -0
  438. package/dist/plugins/supabase/src/index.js +18 -40
  439. package/dist/plugins/syncromsp/src/credentials.js +16 -0
  440. package/dist/plugins/syncromsp/src/index.js +37 -70
  441. package/dist/plugins/tapfiliate/src/credentials.js +13 -0
  442. package/dist/plugins/tapfiliate/src/index.js +21 -31
  443. package/dist/plugins/telegram/src/credentials.js +20 -0
  444. package/dist/plugins/telegram/src/index.js +31 -39
  445. package/dist/plugins/thehive/src/credentials.js +14 -0
  446. package/dist/plugins/thehive/src/index.js +33 -50
  447. package/dist/plugins/thehiveProject/src/credentials.js +16 -0
  448. package/dist/plugins/thehiveProject/src/index.js +53 -122
  449. package/dist/plugins/todoist/src/credentials.js +26 -0
  450. package/dist/plugins/todoist/src/index.js +49 -79
  451. package/dist/plugins/together/src/credentials.js +16 -0
  452. package/dist/plugins/together/src/index.js +30 -32
  453. package/dist/plugins/travisci/src/credentials.js +24 -0
  454. package/dist/plugins/travisci/src/index.js +16 -30
  455. package/dist/plugins/trello/src/credentials.js +29 -0
  456. package/dist/plugins/trello/src/index.js +49 -64
  457. package/dist/plugins/twake/src/credentials.js +16 -0
  458. package/dist/plugins/twake/src/index.js +8 -10
  459. package/dist/plugins/twilio/src/credentials.js +23 -0
  460. package/dist/plugins/twilio/src/index.js +12 -26
  461. package/dist/plugins/twist/src/credentials.js +13 -0
  462. package/dist/plugins/twist/src/index.js +32 -44
  463. package/dist/plugins/twitter/src/credentials.js +16 -0
  464. package/dist/plugins/twitter/src/index.js +25 -37
  465. package/dist/plugins/typesafe/src/credentials.js +28 -0
  466. package/dist/plugins/typesafe/src/index.js +3 -1
  467. package/dist/plugins/typesafe/src/shared.js +23 -35
  468. package/dist/plugins/unleashedSoftware/src/credentials.js +21 -0
  469. package/dist/plugins/unleashedSoftware/src/index.js +13 -37
  470. package/dist/plugins/uplead/src/credentials.js +16 -0
  471. package/dist/plugins/uplead/src/index.js +11 -16
  472. package/dist/plugins/uproc/src/credentials.js +14 -0
  473. package/dist/plugins/uproc/src/index.js +7 -10
  474. package/dist/plugins/uptimerobot/src/credentials.js +14 -0
  475. package/dist/plugins/uptimerobot/src/index.js +28 -39
  476. package/dist/plugins/urlscanio/src/credentials.js +13 -0
  477. package/dist/plugins/urlscanio/src/index.js +13 -22
  478. package/dist/plugins/vercel/src/credentials.js +19 -0
  479. package/dist/plugins/vercel/src/deployments.js +27 -11
  480. package/dist/plugins/vercel/src/env.js +31 -12
  481. package/dist/plugins/vercel/src/index.js +2 -0
  482. package/dist/plugins/vercel/src/projects.js +6 -3
  483. package/dist/plugins/vercel/src/shared.js +32 -37
  484. package/dist/plugins/vero/src/credentials.js +17 -0
  485. package/dist/plugins/vero/src/index.js +18 -21
  486. package/dist/plugins/vonage/src/credentials.js +17 -0
  487. package/dist/plugins/vonage/src/index.js +14 -18
  488. package/dist/plugins/wekan/src/credentials.js +16 -0
  489. package/dist/plugins/wekan/src/index.js +33 -46
  490. package/dist/plugins/wolt/src/account.js +6 -0
  491. package/dist/plugins/wolt/src/catalog.js +2 -2
  492. package/dist/plugins/wolt/src/credentials.js +64 -0
  493. package/dist/plugins/wolt/src/index.js +8 -3
  494. package/dist/plugins/wolt/src/orders.js +2 -2
  495. package/dist/plugins/wolt/src/public.js +91 -0
  496. package/dist/plugins/wolt/src/shared.js +49 -158
  497. package/dist/plugins/woocommerce/src/credentials.js +16 -0
  498. package/dist/plugins/woocommerce/src/index.js +19 -37
  499. package/dist/plugins/wordpress/src/credentials.js +16 -0
  500. package/dist/plugins/wordpress/src/index.js +23 -42
  501. package/dist/plugins/xai/src/credentials.js +13 -0
  502. package/dist/plugins/xai/src/index.js +31 -30
  503. package/dist/plugins/xero/src/credentials.js +17 -0
  504. package/dist/plugins/xero/src/index.js +19 -36
  505. package/dist/plugins/yourls/src/credentials.js +17 -0
  506. package/dist/plugins/yourls/src/index.js +13 -23
  507. package/dist/plugins/zammad/src/credentials.js +15 -0
  508. package/dist/plugins/zammad/src/index.js +27 -47
  509. package/dist/plugins/zendesk/src/credentials.js +26 -0
  510. package/dist/plugins/zendesk/src/index.js +29 -48
  511. package/dist/plugins/zoho/src/credentials.js +17 -0
  512. package/dist/plugins/zoho/src/index.js +18 -38
  513. package/dist/plugins/zoom/src/credentials.js +19 -0
  514. package/dist/plugins/zoom/src/index.js +15 -30
  515. package/dist/plugins/zulip/src/credentials.js +16 -0
  516. package/dist/plugins/zulip/src/index.js +36 -42
  517. package/dist/sdk.d.ts +8 -0
  518. package/dist/sdk.js +3 -0
  519. package/package.json +3 -2
  520. package/dist/plugins/_shared/authedFetch.js +0 -33
  521. package/dist/plugins/_shared/tokenRefresh.js +0 -41
@@ -18,8 +18,10 @@
18
18
  * downloaded to local files so callers can deliver them directly.
19
19
  */
20
20
  import { Buffer } from "node:buffer";
21
- import { readImageInput, SEND_FILE_NOTE, writeMediaFile } from "../../_shared/mediaFile.js";
21
+ import { credentialJson, pathSegments, pathWithin, } from "../../_shared/credentials.js";
22
+ import { readImageInput, SEND_FILE_NOTE, writeMediaFile, } from "../../_shared/mediaFile.js";
22
23
  import { parseSize } from "../../_shared/parseSize.js";
24
+ import { replicateCredential } from "./credentials.js";
23
25
  const POLL_INTERVAL_MS = 2_000;
24
26
  const DEFAULT_TIMEOUT_MS = 5 * 60 * 1000;
25
27
  function stringifyError(err) {
@@ -41,23 +43,15 @@ function stringifyError(err) {
41
43
  * only thing that differs between them is the prediction `input`.
42
44
  */
43
45
  async function runPrediction(opts) {
44
- const { apiToken, model, input, timeoutMs, saveDir } = opts;
46
+ const { ctx, model, input, timeoutMs, saveDir } = opts;
45
47
  const deadline = Date.now() + timeoutMs;
46
- const createRes = await fetch(`https://api.replicate.com/v1/models/${model}/predictions`, {
48
+ let prediction = (await credentialJson(ctx, replicateCredential, "replicate", {
49
+ target: "api",
50
+ path: `models/${pathSegments(model)}/predictions`,
47
51
  method: "POST",
48
- headers: {
49
- "Content-Type": "application/json",
50
- Authorization: `Bearer ${apiToken}`,
51
- // `Prefer: wait` lets the server hold the connection open for
52
- // fast jobs so we don't have to poll at all on the happy path.
53
- Prefer: "wait",
54
- },
55
- body: JSON.stringify({ input }),
56
- });
57
- if (!createRes.ok) {
58
- throw new Error(`Replicate API error ${createRes.status}: ${await createRes.text()}`);
59
- }
60
- let prediction = (await createRes.json());
52
+ headers: { Prefer: "wait" },
53
+ json: { input },
54
+ }));
61
55
  while (prediction.status !== "succeeded" &&
62
56
  prediction.status !== "failed" &&
63
57
  prediction.status !== "canceled") {
@@ -65,13 +59,10 @@ async function runPrediction(opts) {
65
59
  throw new Error(`Replicate generation timed out after ${timeoutMs}ms (still ${prediction.status})`);
66
60
  }
67
61
  await new Promise((r) => setTimeout(r, POLL_INTERVAL_MS));
68
- const pollRes = await fetch(prediction.urls.get, {
69
- headers: { Authorization: `Bearer ${apiToken}` },
70
- });
71
- if (!pollRes.ok) {
72
- throw new Error(`Replicate poll error ${pollRes.status}: ${await pollRes.text()}`);
73
- }
74
- prediction = (await pollRes.json());
62
+ prediction = (await credentialJson(ctx, replicateCredential, "replicate", {
63
+ target: "api",
64
+ path: pathWithin(ctx, replicateCredential, "api", prediction.urls.get),
65
+ }));
75
66
  }
76
67
  if (prediction.status !== "succeeded") {
77
68
  throw new Error(`Replicate generation ${prediction.status}: ${stringifyError(prediction.error)}`);
@@ -124,6 +115,7 @@ async function runPrediction(opts) {
124
115
  export default function replicate(rl) {
125
116
  rl.setName("replicate");
126
117
  rl.setVersion("0.1.0");
118
+ rl.setCredential(replicateCredential);
127
119
  rl.setConnectionSchema({
128
120
  apiToken: {
129
121
  type: "string",
@@ -172,11 +164,10 @@ export default function replicate(rl) {
172
164
  if (typeof p.prompt !== "string" || p.prompt.length === 0) {
173
165
  throw new Error("replicate: prompt is required");
174
166
  }
175
- const apiToken = ctx.connection.config.apiToken;
176
167
  const model = p.model ?? "black-forest-labs/flux-dev";
177
168
  const { width, height } = parseSize(p.size, "replicate");
178
169
  const { images, failures } = await runPrediction({
179
- apiToken,
170
+ ctx,
180
171
  model,
181
172
  input: {
182
173
  prompt: p.prompt,
@@ -234,11 +225,10 @@ export default function replicate(rl) {
234
225
  throw new Error("replicate: prompt is required");
235
226
  }
236
227
  const img = readImageInput(p.imagePath, "replicate");
237
- const apiToken = ctx.connection.config.apiToken;
238
228
  const model = p.model ?? "black-forest-labs/flux-kontext-pro";
239
229
  const imageKey = p.imageInputKey ?? "input_image";
240
230
  const { images, failures } = await runPrediction({
241
- apiToken,
231
+ ctx,
242
232
  model,
243
233
  input: {
244
234
  prompt: p.prompt,
@@ -0,0 +1,17 @@
1
+ import { httpsBase, staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * A personal auth token in the X-Auth-Token header. Its public companion,
4
+ * the X-User-Id identifier, rides as an allowed header.
5
+ */
6
+ export const rocketchatCredential = staticCredential({
7
+ id: "rocketchat",
8
+ auth: { kind: "apiKey", header: "X-Auth-Token" },
9
+ local: { secret: "authToken" },
10
+ targets: (config) => ({
11
+ api: {
12
+ baseUrl: httpsBase(config.domain, "api/v1/"),
13
+ methods: ["POST"],
14
+ allowedHeaders: ["X-User-Id"],
15
+ },
16
+ }),
17
+ });
@@ -1,14 +1,9 @@
1
- function getConn(ctx) {
2
- const c = ctx.connection.config;
3
- return {
4
- domain: c.domain.replace(/\/$/, ""),
5
- userId: c.userId,
6
- authToken: c.authToken,
7
- };
8
- }
1
+ import { credentialJson } from "../../_shared/credentials.js";
2
+ import { rocketchatCredential } from "./credentials.js";
9
3
  export default function rocketchat(rl) {
10
4
  rl.setName("rocketchat");
11
5
  rl.setVersion("0.1.0");
6
+ rl.setCredential(rocketchatCredential);
12
7
  rl.setConnectionSchema({
13
8
  domain: {
14
9
  type: "string",
@@ -62,7 +57,6 @@ export default function rocketchat(rl) {
62
57
  },
63
58
  async execute(input, ctx) {
64
59
  const p = input;
65
- const conn = getConn(ctx);
66
60
  const body = {
67
61
  channel: p.channel,
68
62
  text: p.text,
@@ -75,18 +69,13 @@ export default function rocketchat(rl) {
75
69
  body.avatar = p.avatar;
76
70
  if (p.attachments)
77
71
  body.attachments = p.attachments;
78
- const res = await fetch(`${conn.domain}/api/v1/chat.postMessage`, {
72
+ return credentialJson(ctx, rocketchatCredential, "rocketchat", {
73
+ target: "api",
74
+ path: "chat.postMessage",
79
75
  method: "POST",
80
- headers: {
81
- "Content-Type": "application/json",
82
- "X-Auth-Token": conn.authToken,
83
- "X-User-Id": conn.userId,
84
- },
85
- body: JSON.stringify(body),
76
+ headers: { "X-User-Id": String(ctx.connection.config.userId ?? "") },
77
+ json: body,
86
78
  });
87
- if (!res.ok)
88
- throw new Error(`Rocket.Chat error ${res.status}: ${await res.text()}`);
89
- return res.json();
90
79
  },
91
80
  });
92
81
  }
@@ -0,0 +1,16 @@
1
+ import { httpsBase, staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * An API token, appended by the transport as the authtoken query parameter
4
+ * on the connection's own Rundeck server beneath /api/.
5
+ */
6
+ export const rundeckCredential = staticCredential({
7
+ id: "rundeck",
8
+ auth: { kind: "queryKey", param: "authtoken" },
9
+ local: { secret: "token" },
10
+ targets: (config) => ({
11
+ api: {
12
+ baseUrl: httpsBase(config.url, "api/"),
13
+ methods: ["GET", "POST"],
14
+ },
15
+ }),
16
+ });
@@ -1,33 +1,18 @@
1
- function getConn(ctx) {
2
- const c = ctx.connection.config;
3
- return {
4
- url: c.url.replace(/\/$/, ""),
5
- token: c.token,
6
- };
7
- }
8
- async function apiRequest(conn, method, endpoint, body, qs) {
9
- const url = new URL(`${conn.url}${endpoint}`);
10
- url.searchParams.set("authtoken", conn.token);
11
- if (qs) {
12
- for (const [k, v] of Object.entries(qs)) {
13
- if (v !== undefined && v !== null)
14
- url.searchParams.set(k, String(v));
15
- }
16
- }
17
- const init = {
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { rundeckCredential } from "./credentials.js";
3
+ function apiRequest(ctx, method, path, body, qs) {
4
+ return credentialJson(ctx, rundeckCredential, "rundeck", {
5
+ target: "api",
6
+ path,
18
7
  method,
19
- headers: { Accept: "application/json", "Content-Type": "application/json" },
20
- };
21
- if (body && Object.keys(body).length > 0)
22
- init.body = JSON.stringify(body);
23
- const res = await fetch(url.toString(), init);
24
- if (!res.ok)
25
- throw new Error(`Rundeck error ${res.status}: ${await res.text()}`);
26
- return res.json();
8
+ query: qs,
9
+ ...(body && Object.keys(body).length > 0 ? { json: body } : {}),
10
+ });
27
11
  }
28
12
  export default function rundeck(rl) {
29
13
  rl.setName("rundeck");
30
14
  rl.setVersion("0.1.0");
15
+ rl.setCredential(rundeckCredential);
31
16
  rl.setConnectionSchema({
32
17
  url: {
33
18
  type: "string",
@@ -60,7 +45,6 @@ export default function rundeck(rl) {
60
45
  },
61
46
  async execute(input, ctx) {
62
47
  const p = input;
63
- const conn = getConn(ctx);
64
48
  let argString = "";
65
49
  if (p.arguments) {
66
50
  for (const arg of p.arguments) {
@@ -70,7 +54,7 @@ export default function rundeck(rl) {
70
54
  const qs = {};
71
55
  if (p.filter)
72
56
  qs.filter = p.filter;
73
- return apiRequest(conn, "POST", `/api/14/job/${p.jobId}/run`, { argString: argString.trim() }, qs);
57
+ return apiRequest(ctx, "POST", `14/job/${pathSegment(p.jobId)}/run`, { argString: argString.trim() }, qs);
74
58
  },
75
59
  });
76
60
  rl.registerAction("job.getMetadata", {
@@ -79,7 +63,7 @@ export default function rundeck(rl) {
79
63
  inputSchema: { jobId: { type: "string", required: true } },
80
64
  async execute(input, ctx) {
81
65
  const { jobId } = input;
82
- return apiRequest(getConn(ctx), "GET", `/api/18/job/${jobId}/info`);
66
+ return apiRequest(ctx, "GET", `18/job/${pathSegment(jobId)}/info`);
83
67
  },
84
68
  });
85
69
  }
@@ -0,0 +1,73 @@
1
+ import { AuthError, } from "runline";
2
+ import { configChoice, grantSchema, httpsBase, staticCredential, } from "../../_shared/credentials.js";
3
+ /**
4
+ * A path beneath the org's My Domain URL. A Lightning UI host serves no
5
+ * API, and is refused as invalid_credentials.
6
+ */
7
+ function myDomain(value, path) {
8
+ const url = httpsBase(value, path);
9
+ if (/\.lightning\.force\.com$/i.test(new URL(url).hostname))
10
+ throw new AuthError("invalid_credentials");
11
+ return url;
12
+ }
13
+ /** The REST API on the org's My Domain instance. */
14
+ function api(config) {
15
+ return {
16
+ baseUrl: myDomain(config.instanceUrl ?? config.loginUrl, ""),
17
+ methods: ["GET", "POST", "PATCH", "DELETE"],
18
+ };
19
+ }
20
+ const accessToken = staticCredential({
21
+ id: "salesforce",
22
+ auth: { kind: "bearer" },
23
+ local: { secret: "accessToken" },
24
+ targets: (config) => ({ api: api(config) }),
25
+ });
26
+ /**
27
+ * A static access token as a bearer, or a Connected App's client
28
+ * credentials exchanged at the My Domain token endpoint; either signs the
29
+ * REST API on the same My Domain instance. `authMethod` picks one;
30
+ * without it, a connection naming a client ID uses client credentials —
31
+ * the token the CLI keeps from that exchange is stored as `accessToken`
32
+ * too, so a token alone does not decide — and any other uses its token.
33
+ */
34
+ export const salesforceCredential = (config) => {
35
+ const token = accessToken(config);
36
+ const method = configChoice(config.authMethod ??
37
+ (config.clientId ? "clientCredentials" : "accessToken"), ["accessToken", "clientCredentials"], "accessToken");
38
+ const type = {
39
+ id: "salesforce",
40
+ methods: {
41
+ ...token.type.methods,
42
+ clientCredentials: {
43
+ schema: grantSchema,
44
+ authentication: {
45
+ kind: "oauth2",
46
+ field: "grant",
47
+ renewal: "clientCredentials",
48
+ definition: {
49
+ id: "salesforce.oauth2",
50
+ provider: "salesforce",
51
+ clientCredentials: {
52
+ url: myDomain(config.loginUrl ?? config.instanceUrl, "services/oauth2/token"),
53
+ clientAuthentication: "client_secret_post",
54
+ },
55
+ },
56
+ },
57
+ targets: { api: api(config) },
58
+ },
59
+ },
60
+ };
61
+ if (method === "accessToken")
62
+ return { ...token, type };
63
+ return {
64
+ type,
65
+ method: "clientCredentials",
66
+ application: {
67
+ clientId: config.clientId,
68
+ ...(typeof config.clientSecret === "string"
69
+ ? { clientSecret: config.clientSecret }
70
+ : {}),
71
+ },
72
+ };
73
+ };
@@ -1,15 +1,21 @@
1
1
  import * as t from "typebox";
2
+ import { salesforceCredential } from "./credentials.js";
2
3
  import { registerMetadataActions } from "./metadata.js";
3
4
  import { registerQueryActions } from "./query.js";
4
5
  import { registerGenericSObjectActions, registerStandardSObjectActions, } from "./sobjects.js";
5
6
  export default function salesforce(rl) {
6
7
  rl.setName("salesforce");
7
8
  rl.setVersion("0.2.0");
9
+ rl.setCredential(salesforceCredential);
8
10
  rl.setConnectionSchema(t.Object({
9
11
  instanceUrl: t.Optional(t.String({
10
12
  description: "Salesforce API instance URL, e.g. https://your-domain.my.salesforce.com. Required for static accessToken auth; optional for client credentials when loginUrl is set.",
11
13
  env: "SALESFORCE_INSTANCE_URL",
12
14
  })),
15
+ authMethod: t.Optional(t.String({
16
+ description: "accessToken or clientCredentials (inferred from which credential the connection holds)",
17
+ env: "SALESFORCE_AUTH_METHOD",
18
+ })),
13
19
  accessToken: t.Optional(t.String({
14
20
  description: "Salesforce OAuth2 access token. Use for static-token auth.",
15
21
  env: "SALESFORCE_ACCESS_TOKEN",
@@ -1,29 +1,16 @@
1
1
  import * as t from "typebox";
2
- import { api, getSession, identity } from "./shared.js";
2
+ import { api, identity } from "./shared.js";
3
3
  export function registerMetadataActions(rl) {
4
4
  rl.registerAction("connection.test", {
5
5
  access: "read",
6
6
  description: "Validate Salesforce auth and return safe connection metadata",
7
7
  inputSchema: t.Object({}),
8
8
  async execute(_input, ctx) {
9
- const sessionPromise = getSession(ctx);
10
- const session = await sessionPromise;
11
- let limits;
12
- let limitsError;
13
- try {
14
- limits = (await api(ctx, "GET", "/limits", undefined, undefined, sessionPromise));
15
- }
16
- catch (error) {
17
- limitsError = error instanceof Error ? error.message : String(error);
18
- }
9
+ const limits = (await api(ctx, "GET", "/limits"));
19
10
  return {
20
11
  ok: true,
21
- instanceUrl: session.instanceUrl,
22
- tokenType: session.tokenType,
23
- scope: session.scope,
24
- id: session.id,
12
+ instanceUrl: ctx.connection.config.instanceUrl ?? ctx.connection.config.loginUrl,
25
13
  limits,
26
- limitsError,
27
14
  };
28
15
  },
29
16
  });
@@ -1,107 +1,32 @@
1
- import { requestOAuth2Token } from "runline";
1
+ import { AuthError } from "runline";
2
+ import { credentialJson } from "../../_shared/credentials.js";
3
+ import { salesforceCredential } from "./credentials.js";
2
4
  export const DEFAULT_API_VERSION = "v59.0";
3
- export function config(ctx) {
4
- return ctx.connection.config;
5
- }
6
- export function trimTrailingSlash(url) {
7
- return url.replace(/\/+$/, "");
8
- }
9
- function requireString(value, name) {
10
- if (typeof value !== "string" || value.trim() === "") {
11
- throw new Error(`Salesforce connection is missing ${name}`);
12
- }
13
- return value.trim();
14
- }
5
+ /** The connection's REST API version, as `vNN.N`; anything else is refused. */
15
6
  export function apiVersion(ctx) {
16
- const raw = config(ctx).apiVersion;
7
+ const raw = ctx.connection.config.apiVersion;
17
8
  if (typeof raw !== "string" || raw.trim() === "")
18
9
  return DEFAULT_API_VERSION;
19
- const version = raw.trim();
20
- return version.startsWith("v") ? version : `v${version}`;
21
- }
22
- export function validateInstanceUrl(url) {
23
- const normalized = trimTrailingSlash(url.trim());
24
- if (/\.lightning\.force\.com$/i.test(new URL(normalized).hostname)) {
25
- throw new Error("Salesforce instanceUrl/loginUrl must be the API My Domain URL, not the Lightning UI URL. Use a URL like https://your-domain.my.salesforce.com.");
26
- }
27
- return normalized;
28
- }
29
- export async function getSession(ctx) {
30
- const c = config(ctx);
31
- if (c.accessToken) {
32
- return {
33
- instanceUrl: validateInstanceUrl(requireString(c.instanceUrl, "instanceUrl")),
34
- accessToken: requireString(c.accessToken, "accessToken"),
35
- tokenType: "Bearer",
36
- };
37
- }
38
- const loginUrl = validateInstanceUrl(requireString(c.loginUrl ?? c.instanceUrl, "loginUrl or instanceUrl"));
39
- const clientId = requireString(c.clientId, "clientId");
40
- const clientSecret = requireString(c.clientSecret, "clientSecret");
41
- const tokens = await requestOAuth2Token({
42
- url: `${loginUrl}/services/oauth2/token`,
43
- clientAuthentication: "client_secret_post",
44
- response: {
45
- metadata: {
46
- instanceUrl: "instance_url",
47
- id: "id",
48
- issuedAt: "issued_at",
49
- },
50
- },
51
- }, { grant_type: "client_credentials" }, { clientId, clientSecret });
52
- return {
53
- instanceUrl: validateInstanceUrl(requireString(tokens.metadata?.instanceUrl, "token response instance_url")),
54
- accessToken: tokens.accessToken,
55
- tokenType: tokens.tokenType ?? "Bearer",
56
- scope: tokens.scope,
57
- id: tokens.metadata?.id,
58
- issuedAt: tokens.metadata?.issuedAt,
59
- };
60
- }
61
- export async function api(ctx, method, endpoint, body, qs, session = getSession(ctx)) {
62
- return rest(ctx, method, `/services/data/${apiVersion(ctx)}${endpoint}`, body, qs, session);
63
- }
64
- export async function rest(ctx, method, path, body, qs, session = getSession(ctx)) {
65
- const resolvedSession = await session;
66
- const url = new URL(path, resolvedSession.instanceUrl);
67
- if (qs) {
68
- for (const [k, v] of Object.entries(qs)) {
69
- if (v !== undefined && v !== null)
70
- url.searchParams.set(k, String(v));
71
- }
72
- }
73
- const init = {
10
+ const version = raw.trim().startsWith("v") ? raw.trim() : `v${raw.trim()}`;
11
+ if (!/^v\d+\.\d+$/.test(version))
12
+ throw new AuthError("invalid_credentials");
13
+ return version;
14
+ }
15
+ /** A request on the org's instance, by a path from its root. */
16
+ export function rest(ctx, method, path, body, query) {
17
+ return credentialJson(ctx, salesforceCredential, "salesforce", {
18
+ target: "api",
19
+ path: path.replace(/^\//, ""),
74
20
  method,
75
- headers: {
76
- Authorization: `Bearer ${resolvedSession.accessToken}`,
77
- Accept: "application/json",
78
- "Content-Type": "application/json",
79
- },
80
- };
81
- if (body && Object.keys(body).length > 0)
82
- init.body = JSON.stringify(body);
83
- const res = await fetch(url.toString(), init);
84
- if (res.status === 204)
85
- return { success: true };
86
- const text = await res.text();
87
- if (!res.ok)
88
- throw new Error(`Salesforce error ${res.status}: ${text}`);
89
- return text ? JSON.parse(text) : null;
90
- }
91
- export async function identity(ctx) {
92
- const session = await getSession(ctx);
93
- if (!session.id) {
94
- return { instanceUrl: session.instanceUrl, tokenType: session.tokenType };
95
- }
96
- const res = await fetch(session.id, {
97
- headers: {
98
- Authorization: `Bearer ${session.accessToken}`,
99
- Accept: "application/json",
100
- },
21
+ query,
22
+ ...(body && Object.keys(body).length > 0 ? { json: body } : {}),
101
23
  });
102
- const text = await res.text();
103
- if (!res.ok) {
104
- throw new Error(`Salesforce identity error ${res.status}: ${text}`);
105
- }
106
- return text ? JSON.parse(text) : {};
24
+ }
25
+ /** A REST API request beneath `services/data/<version>`. */
26
+ export function api(ctx, method, endpoint, body, query) {
27
+ return rest(ctx, method, `services/data/${apiVersion(ctx)}${endpoint}`, body, query);
28
+ }
29
+ /** The signed-in user, from the instance's OpenID Connect userinfo endpoint. */
30
+ export function identity(ctx) {
31
+ return rest(ctx, "GET", "services/oauth2/userinfo");
107
32
  }
@@ -1,4 +1,5 @@
1
1
  import * as t from "typebox";
2
+ import { pathSegment } from "../../_shared/credentials.js";
2
3
  import { records } from "./queryResult.js";
3
4
  import { api } from "./shared.js";
4
5
  export const SOBJECTS = [
@@ -54,7 +55,7 @@ function registerSObject(rl, sObject) {
54
55
  description: `Get a ${sObject} by ID`,
55
56
  inputSchema: t.Object({ id: t.String() }),
56
57
  async execute(input, ctx) {
57
- return api(ctx, "GET", `/sobjects/${sObject}/${input.id}`);
58
+ return api(ctx, "GET", `/sobjects/${sObject}/${pathSegment(input.id)}`);
58
59
  },
59
60
  });
60
61
  rl.registerAction(`${lower}.update`, {
@@ -63,7 +64,7 @@ function registerSObject(rl, sObject) {
63
64
  inputSchema: t.Object({ id: t.String(), data: Data }),
64
65
  async execute(input, ctx) {
65
66
  const p = input;
66
- await api(ctx, "PATCH", `/sobjects/${sObject}/${p.id}`, p.data);
67
+ await api(ctx, "PATCH", `/sobjects/${sObject}/${pathSegment(p.id)}`, p.data);
67
68
  return { success: true, id: p.id };
68
69
  },
69
70
  });
@@ -72,7 +73,7 @@ function registerSObject(rl, sObject) {
72
73
  description: `Delete a ${sObject}`,
73
74
  inputSchema: t.Object({ id: t.String() }),
74
75
  async execute(input, ctx) {
75
- await api(ctx, "DELETE", `/sobjects/${sObject}/${input.id}`);
76
+ await api(ctx, "DELETE", `/sobjects/${sObject}/${pathSegment(input.id)}`);
76
77
  return { success: true };
77
78
  },
78
79
  });
@@ -106,7 +107,7 @@ function registerSObject(rl, sObject) {
106
107
  }),
107
108
  async execute(input, ctx) {
108
109
  const p = input;
109
- return api(ctx, "PATCH", `/sobjects/${sObject}/${p.externalIdField}/${p.externalIdValue}`, p.data);
110
+ return api(ctx, "PATCH", `/sobjects/${sObject}/${pathSegment(p.externalIdField)}/${pathSegment(p.externalIdValue)}`, p.data);
110
111
  },
111
112
  });
112
113
  }
@@ -121,7 +122,7 @@ export function registerGenericSObjectActions(rl) {
121
122
  inputSchema: t.Object({ sObject: t.String(), data: Data }),
122
123
  async execute(input, ctx) {
123
124
  const p = input;
124
- return api(ctx, "POST", `/sobjects/${p.sObject}`, p.data);
125
+ return api(ctx, "POST", `/sobjects/${pathSegment(p.sObject)}`, p.data);
125
126
  },
126
127
  });
127
128
  rl.registerAction("sobject.get", {
@@ -130,7 +131,7 @@ export function registerGenericSObjectActions(rl) {
130
131
  inputSchema: t.Object({ sObject: t.String(), id: t.String() }),
131
132
  async execute(input, ctx) {
132
133
  const p = input;
133
- return api(ctx, "GET", `/sobjects/${p.sObject}/${p.id}`);
134
+ return api(ctx, "GET", `/sobjects/${pathSegment(p.sObject)}/${pathSegment(p.id)}`);
134
135
  },
135
136
  });
136
137
  rl.registerAction("sobject.update", {
@@ -139,7 +140,7 @@ export function registerGenericSObjectActions(rl) {
139
140
  inputSchema: t.Object({ sObject: t.String(), id: t.String(), data: Data }),
140
141
  async execute(input, ctx) {
141
142
  const p = input;
142
- await api(ctx, "PATCH", `/sobjects/${p.sObject}/${p.id}`, p.data);
143
+ await api(ctx, "PATCH", `/sobjects/${pathSegment(p.sObject)}/${pathSegment(p.id)}`, p.data);
143
144
  return { success: true };
144
145
  },
145
146
  });
@@ -149,7 +150,7 @@ export function registerGenericSObjectActions(rl) {
149
150
  inputSchema: t.Object({ sObject: t.String(), id: t.String() }),
150
151
  async execute(input, ctx) {
151
152
  const p = input;
152
- await api(ctx, "DELETE", `/sobjects/${p.sObject}/${p.id}`);
153
+ await api(ctx, "DELETE", `/sobjects/${pathSegment(p.sObject)}/${pathSegment(p.id)}`);
153
154
  return { success: true };
154
155
  },
155
156
  });
@@ -158,7 +159,7 @@ export function registerGenericSObjectActions(rl) {
158
159
  description: "Describe an sObject's metadata/fields",
159
160
  inputSchema: t.Object({ sObject: t.String() }),
160
161
  async execute(input, ctx) {
161
- return api(ctx, "GET", `/sobjects/${input.sObject}/describe`);
162
+ return api(ctx, "GET", `/sobjects/${pathSegment(input.sObject)}/describe`);
162
163
  },
163
164
  });
164
165
  }
@@ -0,0 +1,17 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * A session token in the sessionToken header, to Salesmate's one API
4
+ * origin. The public workspace linkname rides along as x-linkname.
5
+ */
6
+ export const salesmateCredential = staticCredential({
7
+ id: "salesmate",
8
+ auth: { kind: "apiKey", header: "sessionToken" },
9
+ local: { secret: "sessionToken" },
10
+ targets: {
11
+ api: {
12
+ baseUrl: "https://apis.salesmate.io/",
13
+ methods: ["GET", "POST", "PUT", "DELETE"],
14
+ allowedHeaders: ["x-linkname"],
15
+ },
16
+ },
17
+ });