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
@@ -1,40 +1,22 @@
1
- const BASE = "https://apis.salesmate.io";
2
- function getConn(ctx) {
3
- return {
4
- sessionToken: ctx.connection.config.sessionToken,
5
- linkname: ctx.connection.config.linkname,
6
- };
7
- }
8
- async function api(conn, method, endpoint, body, qs) {
9
- const url = new URL(`${BASE}${endpoint}`);
10
- if (qs) {
11
- for (const [k, v] of Object.entries(qs)) {
12
- if (v !== undefined && v !== null)
13
- url.searchParams.set(k, String(v));
14
- }
15
- }
16
- const init = {
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { salesmateCredential } from "./credentials.js";
3
+ function api(ctx, method, endpoint, body, qs) {
4
+ return credentialJson(ctx, salesmateCredential, "salesmate", {
5
+ target: "api",
6
+ path: endpoint.replace(/^\//, ""),
17
7
  method,
18
- headers: {
19
- sessionToken: conn.sessionToken,
20
- "x-linkname": conn.linkname,
21
- "Content-Type": "application/json",
22
- },
23
- };
24
- if (body && Object.keys(body).length > 0)
25
- init.body = JSON.stringify(body);
26
- const res = await fetch(url.toString(), init);
27
- if (!res.ok)
28
- throw new Error(`Salesmate error ${res.status}: ${await res.text()}`);
29
- return res.json();
8
+ query: qs,
9
+ headers: { "x-linkname": String(ctx.connection.config.linkname) },
10
+ ...(body && Object.keys(body).length > 0 ? { json: body } : {}),
11
+ });
30
12
  }
31
- function registerCrud(rl, resource, plural, conn, createSchema) {
13
+ function registerCrud(rl, resource, plural, createSchema) {
32
14
  rl.registerAction(`${resource}.create`, {
33
15
  access: "write",
34
16
  description: `Create a ${resource}`,
35
17
  inputSchema: createSchema,
36
18
  async execute(input, ctx) {
37
- const data = (await api(conn(ctx), "POST", `/v1/${plural}`, input));
19
+ const data = (await api(ctx, "POST", `/v1/${plural}`, input));
38
20
  return data.Data;
39
21
  },
40
22
  });
@@ -43,7 +25,7 @@ function registerCrud(rl, resource, plural, conn, createSchema) {
43
25
  description: `Get a ${resource} by ID`,
44
26
  inputSchema: { id: { type: "string", required: true } },
45
27
  async execute(input, ctx) {
46
- const data = (await api(conn(ctx), "GET", `/v1/${plural}/${input.id}`));
28
+ const data = (await api(ctx, "GET", `/v1/${plural}/${pathSegment(input.id)}`));
47
29
  return data.Data;
48
30
  },
49
31
  });
@@ -72,7 +54,7 @@ function registerCrud(rl, resource, plural, conn, createSchema) {
72
54
  const qs = {};
73
55
  if (p.limit)
74
56
  qs.rows = p.limit;
75
- const data = (await api(conn(ctx), "POST", `/v2/${plural}/search`, body, qs));
57
+ const data = (await api(ctx, "POST", `/v2/${plural}/search`, body, qs));
76
58
  return data.Data.data;
77
59
  },
78
60
  });
@@ -85,7 +67,7 @@ function registerCrud(rl, resource, plural, conn, createSchema) {
85
67
  },
86
68
  async execute(input, ctx) {
87
69
  const p = input;
88
- const data = (await api(conn(ctx), "PUT", `/v1/${plural}/${p.id}`, p.data));
70
+ const data = (await api(ctx, "PUT", `/v1/${plural}/${pathSegment(p.id)}`, p.data));
89
71
  return data.Data;
90
72
  },
91
73
  });
@@ -94,13 +76,14 @@ function registerCrud(rl, resource, plural, conn, createSchema) {
94
76
  description: `Delete a ${resource}`,
95
77
  inputSchema: { id: { type: "string", required: true } },
96
78
  async execute(input, ctx) {
97
- return api(conn(ctx), "DELETE", `/v1/${plural}/${input.id}`);
79
+ return api(ctx, "DELETE", `/v1/${plural}/${pathSegment(input.id)}`);
98
80
  },
99
81
  });
100
82
  }
101
83
  export default function salesmate(rl) {
102
84
  rl.setName("salesmate");
103
85
  rl.setVersion("0.1.0");
86
+ rl.setCredential(salesmateCredential);
104
87
  rl.setConnectionSchema({
105
88
  sessionToken: {
106
89
  type: "string",
@@ -115,14 +98,14 @@ export default function salesmate(rl) {
115
98
  env: "SALESMATE_LINKNAME",
116
99
  },
117
100
  });
118
- registerCrud(rl, "company", "companies", getConn, {
101
+ registerCrud(rl, "company", "companies", {
119
102
  name: { type: "string", required: true },
120
103
  owner: { type: "number", required: true },
121
104
  website: { type: "string", required: false },
122
105
  phone: { type: "string", required: false },
123
106
  description: { type: "string", required: false },
124
107
  });
125
- registerCrud(rl, "activity", "activities", getConn, {
108
+ registerCrud(rl, "activity", "activities", {
126
109
  title: { type: "string", required: true },
127
110
  owner: { type: "number", required: true },
128
111
  type: {
@@ -133,7 +116,7 @@ export default function salesmate(rl) {
133
116
  description: { type: "string", required: false },
134
117
  dueDate: { type: "string", required: false },
135
118
  });
136
- registerCrud(rl, "deal", "deals", getConn, {
119
+ registerCrud(rl, "deal", "deals", {
137
120
  title: { type: "string", required: true },
138
121
  owner: { type: "number", required: true },
139
122
  primaryContact: { type: "number", required: true },
@@ -0,0 +1,22 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * An API key, sent as `Authorization: Token {key}` to SecurityScorecard's
4
+ * one API origin.
5
+ */
6
+ export const securityScorecardCredential = staticCredential({
7
+ id: "securityScorecard",
8
+ auth: { kind: "apiKey", header: "Authorization", prefix: "Token " },
9
+ local: { secret: "apiKey" },
10
+ targets: {
11
+ api: {
12
+ baseUrl: "https://api.securityscorecard.io/",
13
+ methods: ["GET", "POST", "PUT", "DELETE"],
14
+ },
15
+ },
16
+ probe: {
17
+ target: "api",
18
+ path: "portfolios",
19
+ method: "GET",
20
+ acceptedStatuses: [200],
21
+ },
22
+ });
@@ -1,30 +1,18 @@
1
- const BASE = "https://api.securityscorecard.io";
2
- async function apiRequest(token, method, endpoint, body, qs) {
3
- const url = new URL(`${BASE}/${endpoint}`);
4
- if (qs) {
5
- for (const [k, v] of Object.entries(qs)) {
6
- if (v !== undefined && v !== null)
7
- url.searchParams.set(k, String(v));
8
- }
9
- }
10
- const init = {
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { securityScorecardCredential } from "./credentials.js";
3
+ function apiRequest(ctx, method, path, body, qs) {
4
+ return credentialJson(ctx, securityScorecardCredential, "securityScorecard", {
5
+ target: "api",
6
+ path,
11
7
  method,
12
- headers: {
13
- Authorization: `Token ${token}`,
14
- "Content-Type": "application/json",
15
- },
16
- };
17
- if (body && Object.keys(body).length > 0)
18
- init.body = JSON.stringify(body);
19
- const res = await fetch(url.toString(), init);
20
- if (!res.ok)
21
- throw new Error(`SecurityScorecard error ${res.status}: ${await res.text()}`);
22
- const text = await res.text();
23
- return text ? JSON.parse(text) : {};
8
+ query: qs,
9
+ ...(body && Object.keys(body).length > 0 ? { json: body } : {}),
10
+ });
24
11
  }
25
12
  export default function securityScorecard(rl) {
26
13
  rl.setName("securityScorecard");
27
14
  rl.setVersion("0.1.0");
15
+ rl.setCredential(securityScorecardCredential);
28
16
  rl.setConnectionSchema({
29
17
  apiKey: {
30
18
  type: "string",
@@ -33,14 +21,13 @@ export default function securityScorecard(rl) {
33
21
  env: "SECURITYSCORECARD_API_KEY",
34
22
  },
35
23
  });
36
- const key = (ctx) => ctx.connection.config.apiKey;
37
24
  // ── Company ─────────────────────────────────────────
38
25
  rl.registerAction("company.getScorecard", {
39
26
  access: "read",
40
27
  description: "Get a company's scorecard by domain",
41
28
  inputSchema: { domain: { type: "string", required: true } },
42
29
  async execute(input, ctx) {
43
- return apiRequest(key(ctx), "GET", `companies/${input.domain}`);
30
+ return apiRequest(ctx, "GET", `companies/${pathSegment(input.domain)}`);
44
31
  },
45
32
  });
46
33
  rl.registerAction("company.getFactors", {
@@ -52,7 +39,7 @@ export default function securityScorecard(rl) {
52
39
  },
53
40
  async execute(input, ctx) {
54
41
  const p = input;
55
- const data = (await apiRequest(key(ctx), "GET", `companies/${p.domain}/factors`));
42
+ const data = (await apiRequest(ctx, "GET", `companies/${pathSegment(p.domain)}/factors`));
56
43
  let entries = (data.entries ?? []);
57
44
  if (p.limit)
58
45
  entries = entries.slice(0, p.limit);
@@ -83,7 +70,7 @@ export default function securityScorecard(rl) {
83
70
  qs.from = p.from;
84
71
  if (p.to)
85
72
  qs.to = p.to;
86
- const data = (await apiRequest(key(ctx), "GET", `companies/${p.domain}/history/factors/score`, undefined, qs));
73
+ const data = (await apiRequest(ctx, "GET", `companies/${pathSegment(p.domain)}/history/factors/score`, undefined, qs));
87
74
  let entries = (data.entries ?? []);
88
75
  if (p.limit)
89
76
  entries = entries.slice(0, p.limit);
@@ -99,7 +86,7 @@ export default function securityScorecard(rl) {
99
86
  },
100
87
  async execute(input, ctx) {
101
88
  const p = input;
102
- const data = (await apiRequest(key(ctx), "GET", `companies/${p.domain}/score-plans/by-target/${p.targetScore}`));
89
+ const data = (await apiRequest(ctx, "GET", `companies/${pathSegment(p.domain)}/score-plans/by-target/${pathSegment(p.targetScore)}`));
103
90
  return data.entries;
104
91
  },
105
92
  });
@@ -109,7 +96,7 @@ export default function securityScorecard(rl) {
109
96
  description: "Get an industry's average score",
110
97
  inputSchema: { industry: { type: "string", required: true } },
111
98
  async execute(input, ctx) {
112
- return apiRequest(key(ctx), "GET", `industries/${input.industry}/score`);
99
+ return apiRequest(ctx, "GET", `industries/${pathSegment(input.industry)}/score`);
113
100
  },
114
101
  });
115
102
  // ── Portfolio ───────────────────────────────────────
@@ -127,7 +114,7 @@ export default function securityScorecard(rl) {
127
114
  },
128
115
  async execute(input, ctx) {
129
116
  const p = input;
130
- return apiRequest(key(ctx), "POST", "portfolios", {
117
+ return apiRequest(ctx, "POST", "portfolios", {
131
118
  name: p.name,
132
119
  description: p.description,
133
120
  privacy: p.privacy,
@@ -139,7 +126,7 @@ export default function securityScorecard(rl) {
139
126
  description: "List all portfolios",
140
127
  inputSchema: { limit: { type: "number", required: false } },
141
128
  async execute(input, ctx) {
142
- const data = (await apiRequest(key(ctx), "GET", "portfolios"));
129
+ const data = (await apiRequest(ctx, "GET", "portfolios"));
143
130
  let entries = (data.entries ?? []);
144
131
  if (input?.limit)
145
132
  entries = entries.slice(0, input.limit);
@@ -151,7 +138,7 @@ export default function securityScorecard(rl) {
151
138
  description: "Delete a portfolio",
152
139
  inputSchema: { portfolioId: { type: "string", required: true } },
153
140
  async execute(input, ctx) {
154
- await apiRequest(key(ctx), "DELETE", `portfolios/${input.portfolioId}`);
141
+ await apiRequest(ctx, "DELETE", `portfolios/${pathSegment(input.portfolioId)}`);
155
142
  return { success: true };
156
143
  },
157
144
  });
@@ -164,7 +151,7 @@ export default function securityScorecard(rl) {
164
151
  },
165
152
  async execute(input, ctx) {
166
153
  const p = input;
167
- return apiRequest(key(ctx), "PUT", `portfolios/${p.portfolioId}/companies/${p.domain}`);
154
+ return apiRequest(ctx, "PUT", `portfolios/${pathSegment(p.portfolioId)}/companies/${pathSegment(p.domain)}`);
168
155
  },
169
156
  });
170
157
  rl.registerAction("portfolioCompany.remove", {
@@ -176,7 +163,7 @@ export default function securityScorecard(rl) {
176
163
  },
177
164
  async execute(input, ctx) {
178
165
  const p = input;
179
- await apiRequest(key(ctx), "DELETE", `portfolios/${p.portfolioId}/companies/${p.domain}`);
166
+ await apiRequest(ctx, "DELETE", `portfolios/${pathSegment(p.portfolioId)}/companies/${pathSegment(p.domain)}`);
180
167
  return { success: true };
181
168
  },
182
169
  });
@@ -189,7 +176,7 @@ export default function securityScorecard(rl) {
189
176
  },
190
177
  async execute(input, ctx) {
191
178
  const p = input;
192
- const data = (await apiRequest(key(ctx), "GET", `portfolios/${p.portfolioId}/companies`));
179
+ const data = (await apiRequest(ctx, "GET", `portfolios/${pathSegment(p.portfolioId)}/companies`));
193
180
  let entries = (data.entries ?? []);
194
181
  if (p.limit)
195
182
  entries = entries.slice(0, p.limit);
@@ -208,7 +195,7 @@ export default function securityScorecard(rl) {
208
195
  },
209
196
  async execute(input, ctx) {
210
197
  const p = input;
211
- return apiRequest(key(ctx), "POST", "invitations", {
198
+ return apiRequest(ctx, "POST", "invitations", {
212
199
  email: p.email,
213
200
  first_name: p.firstName,
214
201
  last_name: p.lastName,
@@ -254,7 +241,7 @@ export default function securityScorecard(rl) {
254
241
  body.format = p.format;
255
242
  if (p.branding)
256
243
  body.branding = p.branding;
257
- return apiRequest(key(ctx), "POST", `reports/${p.reportType}`, body);
244
+ return apiRequest(ctx, "POST", `reports/${pathSegment(p.reportType)}`, body);
258
245
  },
259
246
  });
260
247
  rl.registerAction("report.list", {
@@ -262,7 +249,7 @@ export default function securityScorecard(rl) {
262
249
  description: "List recent reports",
263
250
  inputSchema: { limit: { type: "number", required: false } },
264
251
  async execute(input, ctx) {
265
- const data = (await apiRequest(key(ctx), "GET", "reports/recent"));
252
+ const data = (await apiRequest(ctx, "GET", "reports/recent"));
266
253
  let entries = (data.entries ?? []);
267
254
  if (input?.limit)
268
255
  entries = entries.slice(0, input.limit);
@@ -0,0 +1,16 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * A source write key as the Basic username with a fixed empty password,
4
+ * to Segment's v1 tracking API.
5
+ */
6
+ export const segmentCredential = staticCredential({
7
+ id: "segment",
8
+ auth: { kind: "basic" },
9
+ local: { username: "writeKey", password: { value: "" } },
10
+ targets: {
11
+ api: {
12
+ baseUrl: "https://api.segment.io/v1/",
13
+ methods: ["POST"],
14
+ },
15
+ },
16
+ });
@@ -1,20 +1,17 @@
1
- const BASE = "https://api.segment.io/v1";
2
- async function apiRequest(writeKey, endpoint, body) {
3
- const res = await fetch(`${BASE}${endpoint}`, {
1
+ import { credentialJson } from "../../_shared/credentials.js";
2
+ import { segmentCredential } from "./credentials.js";
3
+ function apiRequest(ctx, path, body) {
4
+ return credentialJson(ctx, segmentCredential, "segment", {
5
+ target: "api",
6
+ path,
4
7
  method: "POST",
5
- headers: {
6
- Authorization: "Basic " + btoa(`${writeKey}:`),
7
- "Content-Type": "application/json",
8
- },
9
- body: JSON.stringify(body),
8
+ json: body,
10
9
  });
11
- if (!res.ok)
12
- throw new Error(`Segment error ${res.status}: ${await res.text()}`);
13
- return res.json();
14
10
  }
15
11
  export default function segment(rl) {
16
12
  rl.setName("segment");
17
13
  rl.setVersion("0.1.0");
14
+ rl.setCredential(segmentCredential);
18
15
  rl.setConnectionSchema({
19
16
  writeKey: {
20
17
  type: "string",
@@ -23,7 +20,6 @@ export default function segment(rl) {
23
20
  env: "SEGMENT_WRITE_KEY",
24
21
  },
25
22
  });
26
- const key = (ctx) => ctx.connection.config.writeKey;
27
23
  rl.registerAction("identify.create", {
28
24
  access: "write",
29
25
  description: "Identify a user (tie user to traits)",
@@ -55,7 +51,7 @@ export default function segment(rl) {
55
51
  body.context = p.context;
56
52
  if (p.integrations)
57
53
  body.integrations = p.integrations;
58
- return apiRequest(key(ctx), "/identify", body);
54
+ return apiRequest(ctx, "identify", body);
59
55
  },
60
56
  });
61
57
  rl.registerAction("track.event", {
@@ -86,7 +82,7 @@ export default function segment(rl) {
86
82
  body.context = p.context;
87
83
  if (p.integrations)
88
84
  body.integrations = p.integrations;
89
- return apiRequest(key(ctx), "/track", body);
85
+ return apiRequest(ctx, "track", body);
90
86
  },
91
87
  });
92
88
  rl.registerAction("track.page", {
@@ -113,7 +109,7 @@ export default function segment(rl) {
113
109
  body.context = p.context;
114
110
  if (p.integrations)
115
111
  body.integrations = p.integrations;
116
- return apiRequest(key(ctx), "/page", body);
112
+ return apiRequest(ctx, "page", body);
117
113
  },
118
114
  });
119
115
  rl.registerAction("group.add", {
@@ -140,7 +136,7 @@ export default function segment(rl) {
140
136
  body.context = p.context;
141
137
  if (p.integrations)
142
138
  body.integrations = p.integrations;
143
- return apiRequest(key(ctx), "/group", body);
139
+ return apiRequest(ctx, "group", body);
144
140
  },
145
141
  });
146
142
  }
@@ -0,0 +1,13 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /** An API key, sent as a bearer to SendGrid's v3 API. */
3
+ export const sendgridCredential = staticCredential({
4
+ id: "sendgrid",
5
+ auth: { kind: "bearer" },
6
+ local: { secret: "apiKey" },
7
+ targets: {
8
+ api: {
9
+ baseUrl: "https://api.sendgrid.com/v3/",
10
+ methods: ["GET", "POST", "PUT", "PATCH", "DELETE"],
11
+ },
12
+ },
13
+ });
@@ -1,34 +1,31 @@
1
- const BASE = "https://api.sendgrid.com/v3";
2
- async function apiRequest(apiKey, method, endpoint, body, qs) {
3
- const url = new URL(`${BASE}${endpoint}`);
4
- if (qs) {
5
- for (const [k, v] of Object.entries(qs)) {
6
- if (v !== undefined && v !== null)
7
- url.searchParams.set(k, String(v));
8
- }
9
- }
10
- const init = {
1
+ import { AuthError, } from "runline";
2
+ import { credentialOk, pathSegment } from "../../_shared/credentials.js";
3
+ import { sendgridCredential } from "./credentials.js";
4
+ /** A JSON request whose response headers stay readable (mail.send's x-message-id). */
5
+ async function apiRequest(ctx, method, endpoint, body, qs) {
6
+ const res = await credentialOk(ctx, sendgridCredential, "sendgrid", {
7
+ target: "api",
8
+ path: endpoint,
11
9
  method,
12
- headers: {
13
- Authorization: `Bearer ${apiKey}`,
14
- "Content-Type": "application/json",
15
- },
16
- };
17
- if (body !== undefined)
18
- init.body = JSON.stringify(body);
19
- const res = await fetch(url.toString(), init);
20
- if (!res.ok && res.status !== 202)
21
- throw new Error(`SendGrid error ${res.status}: ${await res.text()}`);
10
+ query: qs,
11
+ ...(body !== undefined ? { json: body } : {}),
12
+ });
22
13
  const text = await res.text();
23
14
  const headers = {};
24
15
  res.headers.forEach((v, k) => {
25
16
  headers[k] = v;
26
17
  });
27
- return { data: text ? JSON.parse(text) : {}, headers };
18
+ try {
19
+ return { data: text ? JSON.parse(text) : {}, headers };
20
+ }
21
+ catch {
22
+ throw new AuthError("invalid_response");
23
+ }
28
24
  }
29
25
  export default function sendgrid(rl) {
30
26
  rl.setName("sendgrid");
31
27
  rl.setVersion("0.1.0");
28
+ rl.setCredential(sendgridCredential);
32
29
  rl.setConnectionSchema({
33
30
  apiKey: {
34
31
  type: "string",
@@ -37,7 +34,6 @@ export default function sendgrid(rl) {
37
34
  env: "SENDGRID_API_KEY",
38
35
  },
39
36
  });
40
- const key = (ctx) => ctx.connection.config.apiKey;
41
37
  // ── Mail ────────────────────────────────────────────
42
38
  rl.registerAction("mail.send", {
43
39
  access: "write",
@@ -112,7 +108,7 @@ export default function sendgrid(rl) {
112
108
  body.reply_to_list = p.replyTo
113
109
  .split(",")
114
110
  .map((e) => ({ email: e.trim() }));
115
- const { headers } = await apiRequest(key(ctx), "POST", "/mail/send", body);
111
+ const { headers } = await apiRequest(ctx, "POST", "mail/send", body);
116
112
  return { messageId: headers["x-message-id"] ?? null };
117
113
  },
118
114
  });
@@ -131,10 +127,10 @@ export default function sendgrid(rl) {
131
127
  async execute(input, ctx) {
132
128
  const p = input;
133
129
  if (p.contactId) {
134
- const { data } = await apiRequest(key(ctx), "GET", `/marketing/contacts/${p.contactId}`);
130
+ const { data } = await apiRequest(ctx, "GET", `marketing/contacts/${pathSegment(p.contactId)}`);
135
131
  return data;
136
132
  }
137
- const { data } = await apiRequest(key(ctx), "POST", "/marketing/contacts/search", { query: `email LIKE '${p.email}'` });
133
+ const { data } = await apiRequest(ctx, "POST", "marketing/contacts/search", { query: `email LIKE '${p.email}'` });
138
134
  const result = data.result;
139
135
  return result?.[0];
140
136
  },
@@ -152,15 +148,15 @@ export default function sendgrid(rl) {
152
148
  },
153
149
  async execute(input, ctx) {
154
150
  const p = (input ?? {});
155
- let endpoint = "/marketing/contacts";
151
+ let endpoint = "marketing/contacts";
156
152
  let method = "GET";
157
153
  const body = {};
158
154
  if (p.query) {
159
- endpoint = "/marketing/contacts/search";
155
+ endpoint = "marketing/contacts/search";
160
156
  method = "POST";
161
157
  body.query = p.query;
162
158
  }
163
- const { data } = await apiRequest(key(ctx), method, endpoint, Object.keys(body).length ? body : undefined);
159
+ const { data } = await apiRequest(ctx, method, endpoint, Object.keys(body).length ? body : undefined);
164
160
  let result = (data.result ??
165
161
  []);
166
162
  if (p.limit)
@@ -188,7 +184,7 @@ export default function sendgrid(rl) {
188
184
  const body = { contacts: p.contacts };
189
185
  if (p.listIds)
190
186
  body.list_ids = p.listIds;
191
- const { data } = await apiRequest(key(ctx), "PUT", "/marketing/contacts", body);
187
+ const { data } = await apiRequest(ctx, "PUT", "marketing/contacts", body);
192
188
  return data;
193
189
  },
194
190
  });
@@ -204,7 +200,7 @@ export default function sendgrid(rl) {
204
200
  },
205
201
  async execute(input, ctx) {
206
202
  const { ids } = input;
207
- const { data } = await apiRequest(key(ctx), "DELETE", "/marketing/contacts", undefined, { ids });
203
+ const { data } = await apiRequest(ctx, "DELETE", "marketing/contacts", undefined, { ids });
208
204
  return data;
209
205
  },
210
206
  });
@@ -214,7 +210,7 @@ export default function sendgrid(rl) {
214
210
  description: "Create a contact list",
215
211
  inputSchema: { name: { type: "string", required: true } },
216
212
  async execute(input, ctx) {
217
- const { data } = await apiRequest(key(ctx), "POST", "/marketing/lists", {
213
+ const { data } = await apiRequest(ctx, "POST", "marketing/lists", {
218
214
  name: input.name,
219
215
  });
220
216
  return data;
@@ -225,7 +221,7 @@ export default function sendgrid(rl) {
225
221
  description: "Get a list by ID",
226
222
  inputSchema: { listId: { type: "string", required: true } },
227
223
  async execute(input, ctx) {
228
- const { data } = await apiRequest(key(ctx), "GET", `/marketing/lists/${input.listId}`);
224
+ const { data } = await apiRequest(ctx, "GET", `marketing/lists/${pathSegment(input.listId)}`);
229
225
  return data;
230
226
  },
231
227
  });
@@ -234,7 +230,7 @@ export default function sendgrid(rl) {
234
230
  description: "List all contact lists",
235
231
  inputSchema: { limit: { type: "number", required: false } },
236
232
  async execute(input, ctx) {
237
- const { data } = await apiRequest(key(ctx), "GET", "/marketing/lists");
233
+ const { data } = await apiRequest(ctx, "GET", "marketing/lists");
238
234
  let result = (data.result ??
239
235
  []);
240
236
  if (input?.limit)
@@ -251,7 +247,7 @@ export default function sendgrid(rl) {
251
247
  },
252
248
  async execute(input, ctx) {
253
249
  const p = input;
254
- const { data } = await apiRequest(key(ctx), "PATCH", `/marketing/lists/${p.listId}`, { name: p.name });
250
+ const { data } = await apiRequest(ctx, "PATCH", `marketing/lists/${pathSegment(p.listId)}`, { name: p.name });
255
251
  return data;
256
252
  },
257
253
  });
@@ -268,7 +264,7 @@ export default function sendgrid(rl) {
268
264
  },
269
265
  async execute(input, ctx) {
270
266
  const p = input;
271
- await apiRequest(key(ctx), "DELETE", `/marketing/lists/${p.listId}`, undefined, { delete_contacts: p.deleteContacts ? "true" : "false" });
267
+ await apiRequest(ctx, "DELETE", `marketing/lists/${pathSegment(p.listId)}`, undefined, { delete_contacts: p.deleteContacts ? "true" : "false" });
272
268
  return { success: true };
273
269
  },
274
270
  });
@@ -0,0 +1,18 @@
1
+ import { httpsBase, staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * An API key, added by the transport as the api_key field of every form
4
+ * call to the connection's own Sendy installation. The installation URL
5
+ * is public config and must be HTTPS.
6
+ */
7
+ export const sendyCredential = staticCredential({
8
+ id: "sendy",
9
+ auth: {
10
+ kind: "static",
11
+ parts: ["key"],
12
+ placements: [{ in: "body", part: "key", name: "api_key" }],
13
+ },
14
+ local: { key: "apiKey" },
15
+ targets: (config) => ({
16
+ api: { baseUrl: httpsBase(config.url, ""), methods: ["POST"] },
17
+ }),
18
+ });