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,20 @@
1
- const BASE_URL = "https://my.demio.com/api/v1";
2
- async function apiRequest(apiKey, apiSecret, method, endpoint, body, qs) {
3
- const url = new URL(`${BASE_URL}${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 opts = {
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { demioCredential } from "./credentials.js";
3
+ function apiRequest(ctx, method, path, body, query) {
4
+ return credentialJson(ctx, demioCredential, "demio", {
5
+ target: "api",
6
+ path,
11
7
  method,
12
- headers: {
13
- "Content-Type": "application/json",
14
- "Api-Key": apiKey,
15
- "Api-Secret": apiSecret,
16
- },
17
- };
18
- if (body &&
19
- Object.keys(body).length > 0 &&
20
- method !== "GET" &&
21
- method !== "DELETE") {
22
- opts.body = JSON.stringify(body);
23
- }
24
- const res = await fetch(url.toString(), opts);
25
- if (!res.ok)
26
- throw new Error(`Demio API error ${res.status}: ${await res.text()}`);
27
- return res.json();
28
- }
29
- function getConn(ctx) {
30
- return {
31
- apiKey: ctx.connection.config.apiKey,
32
- apiSecret: ctx.connection.config.apiSecret,
33
- };
8
+ query,
9
+ ...(body && Object.keys(body).length > 0 && method !== "GET"
10
+ ? { json: body }
11
+ : {}),
12
+ });
34
13
  }
35
14
  export default function demio(rl) {
36
15
  rl.setName("demio");
37
16
  rl.setVersion("0.1.0");
17
+ rl.setCredential(demioCredential);
38
18
  rl.setConnectionSchema({
39
19
  apiKey: {
40
20
  type: "string",
@@ -62,11 +42,10 @@ export default function demio(rl) {
62
42
  },
63
43
  async execute(input, ctx) {
64
44
  const { eventId, dateId } = input;
65
- const { apiKey, apiSecret } = getConn(ctx);
66
45
  if (dateId) {
67
- return apiRequest(apiKey, apiSecret, "GET", `/event/${eventId}/date/${dateId}`);
46
+ return apiRequest(ctx, "GET", `event/${pathSegment(eventId)}/date/${pathSegment(dateId)}`);
68
47
  }
69
- return apiRequest(apiKey, apiSecret, "GET", `/event/${eventId}`);
48
+ return apiRequest(ctx, "GET", `event/${pathSegment(eventId)}`);
70
49
  },
71
50
  });
72
51
  rl.registerAction("event.list", {
@@ -82,11 +61,10 @@ export default function demio(rl) {
82
61
  },
83
62
  async execute(input, ctx) {
84
63
  const { type, limit } = (input ?? {});
85
- const { apiKey, apiSecret } = getConn(ctx);
86
64
  const qs = {};
87
65
  if (type)
88
66
  qs.type = type;
89
- const data = (await apiRequest(apiKey, apiSecret, "GET", "/events", undefined, qs));
67
+ const data = (await apiRequest(ctx, "GET", "events", undefined, qs));
90
68
  if (limit)
91
69
  return data.slice(0, limit);
92
70
  return data;
@@ -117,7 +95,6 @@ export default function demio(rl) {
117
95
  },
118
96
  async execute(input, ctx) {
119
97
  const { eventId, email, firstName, lastName, dateId, customFields } = input;
120
- const { apiKey, apiSecret } = getConn(ctx);
121
98
  const body = {
122
99
  id: eventId,
123
100
  email,
@@ -129,7 +106,7 @@ export default function demio(rl) {
129
106
  body.date_id = dateId;
130
107
  if (customFields)
131
108
  Object.assign(body, customFields);
132
- return apiRequest(apiKey, apiSecret, "PUT", "/event/register", body);
109
+ return apiRequest(ctx, "PUT", "event/register", body);
133
110
  },
134
111
  });
135
112
  rl.registerAction("report.getParticipants", {
@@ -149,11 +126,10 @@ export default function demio(rl) {
149
126
  },
150
127
  async execute(input, ctx) {
151
128
  const { dateId, status } = (input ?? {});
152
- const { apiKey, apiSecret } = getConn(ctx);
153
129
  const qs = {};
154
130
  if (status)
155
131
  qs.status = status;
156
- const data = (await apiRequest(apiKey, apiSecret, "GET", `/report/${dateId}/participants`, undefined, qs));
132
+ const data = (await apiRequest(ctx, "GET", `report/${pathSegment(dateId)}/participants`, undefined, qs));
157
133
  return data.participants;
158
134
  },
159
135
  });
@@ -0,0 +1,13 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /** An API key, sent as the DHL-API-Key header to DHL's EU API origin. */
3
+ export const dhlCredential = staticCredential({
4
+ id: "dhl",
5
+ auth: { kind: "apiKey", header: "DHL-API-Key" },
6
+ local: { secret: "apiKey" },
7
+ targets: {
8
+ api: {
9
+ baseUrl: "https://api-eu.dhl.com/",
10
+ methods: ["GET"],
11
+ },
12
+ },
13
+ });
@@ -1,23 +1,9 @@
1
- const BASE_URL = "https://api-eu.dhl.com";
2
- async function apiRequest(apiKey, method, endpoint, qs) {
3
- const url = new URL(`${BASE_URL}${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 res = await fetch(url.toString(), {
11
- method,
12
- headers: { "DHL-API-Key": apiKey, Accept: "application/json" },
13
- });
14
- if (!res.ok)
15
- throw new Error(`DHL API error ${res.status}: ${await res.text()}`);
16
- return res.json();
17
- }
1
+ import { credentialJson } from "../../_shared/credentials.js";
2
+ import { dhlCredential } from "./credentials.js";
18
3
  export default function dhl(rl) {
19
4
  rl.setName("dhl");
20
5
  rl.setVersion("0.1.0");
6
+ rl.setCredential(dhlCredential);
21
7
  rl.setConnectionSchema({
22
8
  apiKey: {
23
9
  type: "string",
@@ -43,11 +29,14 @@ export default function dhl(rl) {
43
29
  },
44
30
  async execute(input, ctx) {
45
31
  const { trackingNumber, recipientPostalCode } = input;
46
- const apiKey = ctx.connection.config.apiKey;
47
32
  const qs = { trackingNumber };
48
33
  if (recipientPostalCode)
49
34
  qs.recipientPostalCode = recipientPostalCode;
50
- const data = (await apiRequest(apiKey, "GET", "/track/shipments", qs));
35
+ const data = (await credentialJson(ctx, dhlCredential, "dhl", {
36
+ target: "api",
37
+ path: "track/shipments",
38
+ query: qs,
39
+ }));
51
40
  return data.shipments;
52
41
  },
53
42
  });
@@ -0,0 +1,19 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /** A bot token, sent as `Authorization: Bot {token}` to Discord's v10 API. */
3
+ export const discordCredential = staticCredential({
4
+ id: "discord",
5
+ auth: { kind: "apiKey", header: "Authorization", prefix: "Bot " },
6
+ local: { secret: "botToken" },
7
+ targets: {
8
+ api: {
9
+ baseUrl: "https://discord.com/api/v10/",
10
+ methods: ["GET", "POST", "PUT", "PATCH", "DELETE"],
11
+ },
12
+ },
13
+ probe: {
14
+ target: "api",
15
+ path: "users/@me",
16
+ method: "GET",
17
+ acceptedStatuses: [200],
18
+ },
19
+ });
@@ -1,41 +1,26 @@
1
- const BASE_URL = "https://discord.com/api/v10";
2
- async function apiRequest(botToken, method, endpoint, body, qs) {
3
- const url = new URL(`${BASE_URL}${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 opts = {
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { discordCredential } from "./credentials.js";
3
+ function apiRequest(ctx, method, path, body, qs) {
4
+ return credentialJson(ctx, discordCredential, "discord", {
5
+ target: "api",
6
+ path,
11
7
  method,
12
- headers: {
13
- Authorization: `Bot ${botToken}`,
14
- "Content-Type": "application/json",
15
- },
16
- };
17
- if (body &&
18
- Object.keys(body).length > 0 &&
19
- method !== "GET" &&
20
- method !== "DELETE") {
21
- opts.body = JSON.stringify(body);
22
- }
23
- const res = await fetch(url.toString(), opts);
24
- if (!res.ok)
25
- throw new Error(`Discord API error ${res.status}: ${await res.text()}`);
26
- if (res.status === 204)
27
- return { success: true };
28
- return res.json();
8
+ query: qs,
9
+ ...(body &&
10
+ Object.keys(body).length > 0 &&
11
+ method !== "GET" &&
12
+ method !== "DELETE"
13
+ ? { json: body }
14
+ : {}),
15
+ });
29
16
  }
30
- function getConn(ctx) {
31
- return {
32
- botToken: ctx.connection.config.botToken,
33
- guildId: ctx.connection.config.guildId,
34
- };
17
+ function guildOf(ctx) {
18
+ return pathSegment(ctx.connection.config.guildId);
35
19
  }
36
20
  export default function discord(rl) {
37
21
  rl.setName("discord");
38
22
  rl.setVersion("0.1.0");
23
+ rl.setCredential(discordCredential);
39
24
  rl.setConnectionSchema({
40
25
  botToken: {
41
26
  type: "string",
@@ -94,7 +79,6 @@ export default function discord(rl) {
94
79
  },
95
80
  },
96
81
  async execute(input, ctx) {
97
- const { botToken, guildId } = getConn(ctx);
98
82
  const { name, type, topic, parentId, position, nsfw, bitrate, userLimit, rateLimitPerUser, } = input;
99
83
  const body = { name, type: type ?? 0 };
100
84
  if (topic)
@@ -111,7 +95,7 @@ export default function discord(rl) {
111
95
  body.user_limit = userLimit;
112
96
  if (rateLimitPerUser !== undefined)
113
97
  body.rate_limit_per_user = rateLimitPerUser;
114
- return apiRequest(botToken, "POST", `/guilds/${guildId}/channels`, body);
98
+ return apiRequest(ctx, "POST", `guilds/${guildOf(ctx)}/channels`, body);
115
99
  },
116
100
  });
117
101
  rl.registerAction("channel.get", {
@@ -121,8 +105,7 @@ export default function discord(rl) {
121
105
  channelId: { type: "string", required: true, description: "Channel ID" },
122
106
  },
123
107
  async execute(input, ctx) {
124
- const { botToken } = getConn(ctx);
125
- return apiRequest(botToken, "GET", `/channels/${input.channelId}`);
108
+ return apiRequest(ctx, "GET", `channels/${pathSegment(input.channelId)}`);
126
109
  },
127
110
  });
128
111
  rl.registerAction("channel.list", {
@@ -137,9 +120,8 @@ export default function discord(rl) {
137
120
  },
138
121
  },
139
122
  async execute(input, ctx) {
140
- const { botToken, guildId } = getConn(ctx);
141
123
  const { limit, filterType } = (input ?? {});
142
- let channels = (await apiRequest(botToken, "GET", `/guilds/${guildId}/channels`));
124
+ let channels = (await apiRequest(ctx, "GET", `guilds/${guildOf(ctx)}/channels`));
143
125
  if (filterType && Array.isArray(filterType) && filterType.length > 0) {
144
126
  channels = channels.filter((c) => filterType.includes(c.type));
145
127
  }
@@ -183,7 +165,6 @@ export default function discord(rl) {
183
165
  },
184
166
  },
185
167
  async execute(input, ctx) {
186
- const { botToken } = getConn(ctx);
187
168
  const { channelId, name, topic, parentId, position, nsfw, bitrate, userLimit, rateLimitPerUser, } = input;
188
169
  const body = {};
189
170
  if (name)
@@ -202,7 +183,7 @@ export default function discord(rl) {
202
183
  body.user_limit = userLimit;
203
184
  if (rateLimitPerUser !== undefined)
204
185
  body.rate_limit_per_user = rateLimitPerUser;
205
- return apiRequest(botToken, "PATCH", `/channels/${channelId}`, body);
186
+ return apiRequest(ctx, "PATCH", `channels/${pathSegment(channelId)}`, body);
206
187
  },
207
188
  });
208
189
  rl.registerAction("channel.delete", {
@@ -212,8 +193,7 @@ export default function discord(rl) {
212
193
  channelId: { type: "string", required: true, description: "Channel ID" },
213
194
  },
214
195
  async execute(input, ctx) {
215
- const { botToken } = getConn(ctx);
216
- return apiRequest(botToken, "DELETE", `/channels/${input.channelId}`);
196
+ return apiRequest(ctx, "DELETE", `channels/${pathSegment(input.channelId)}`);
217
197
  },
218
198
  });
219
199
  // ── Member ──────────────────────────────────────────
@@ -233,14 +213,13 @@ export default function discord(rl) {
233
213
  },
234
214
  },
235
215
  async execute(input, ctx) {
236
- const { botToken, guildId } = getConn(ctx);
237
216
  const { limit, after } = (input ?? {});
238
217
  const qs = {};
239
218
  if (limit)
240
219
  qs.limit = limit;
241
220
  if (after)
242
221
  qs.after = after;
243
- return apiRequest(botToken, "GET", `/guilds/${guildId}/members`, undefined, qs);
222
+ return apiRequest(ctx, "GET", `guilds/${guildOf(ctx)}/members`, undefined, qs);
244
223
  },
245
224
  });
246
225
  rl.registerAction("member.addRole", {
@@ -251,9 +230,8 @@ export default function discord(rl) {
251
230
  roleId: { type: "string", required: true, description: "Role ID" },
252
231
  },
253
232
  async execute(input, ctx) {
254
- const { botToken, guildId } = getConn(ctx);
255
233
  const { userId, roleId } = input;
256
- await apiRequest(botToken, "PUT", `/guilds/${guildId}/members/${userId}/roles/${roleId}`);
234
+ await apiRequest(ctx, "PUT", `guilds/${guildOf(ctx)}/members/${pathSegment(userId)}/roles/${pathSegment(roleId)}`);
257
235
  return { success: true };
258
236
  },
259
237
  });
@@ -265,9 +243,8 @@ export default function discord(rl) {
265
243
  roleId: { type: "string", required: true, description: "Role ID" },
266
244
  },
267
245
  async execute(input, ctx) {
268
- const { botToken, guildId } = getConn(ctx);
269
246
  const { userId, roleId } = input;
270
- await apiRequest(botToken, "DELETE", `/guilds/${guildId}/members/${userId}/roles/${roleId}`);
247
+ await apiRequest(ctx, "DELETE", `guilds/${guildOf(ctx)}/members/${pathSegment(userId)}/roles/${pathSegment(roleId)}`);
271
248
  return { success: true };
272
249
  },
273
250
  });
@@ -295,7 +272,6 @@ export default function discord(rl) {
295
272
  },
296
273
  },
297
274
  async execute(input, ctx) {
298
- const { botToken } = getConn(ctx);
299
275
  const { channelId, content, tts, replyTo, embeds } = input;
300
276
  const body = { content };
301
277
  if (tts)
@@ -304,7 +280,7 @@ export default function discord(rl) {
304
280
  body.message_reference = { message_id: replyTo };
305
281
  if (embeds)
306
282
  body.embeds = embeds;
307
- return apiRequest(botToken, "POST", `/channels/${channelId}/messages`, body);
283
+ return apiRequest(ctx, "POST", `channels/${pathSegment(channelId)}/messages`, body);
308
284
  },
309
285
  });
310
286
  rl.registerAction("message.get", {
@@ -315,9 +291,8 @@ export default function discord(rl) {
315
291
  messageId: { type: "string", required: true, description: "Message ID" },
316
292
  },
317
293
  async execute(input, ctx) {
318
- const { botToken } = getConn(ctx);
319
294
  const { channelId, messageId } = input;
320
- return apiRequest(botToken, "GET", `/channels/${channelId}/messages/${messageId}`);
295
+ return apiRequest(ctx, "GET", `channels/${pathSegment(channelId)}/messages/${pathSegment(messageId)}`);
321
296
  },
322
297
  });
323
298
  rl.registerAction("message.list", {
@@ -347,7 +322,6 @@ export default function discord(rl) {
347
322
  },
348
323
  },
349
324
  async execute(input, ctx) {
350
- const { botToken } = getConn(ctx);
351
325
  const { channelId, limit, before, after, around } = (input ??
352
326
  {});
353
327
  const qs = {};
@@ -359,7 +333,7 @@ export default function discord(rl) {
359
333
  qs.after = after;
360
334
  if (around)
361
335
  qs.around = around;
362
- return apiRequest(botToken, "GET", `/channels/${channelId}/messages`, undefined, qs);
336
+ return apiRequest(ctx, "GET", `channels/${pathSegment(channelId)}/messages`, undefined, qs);
363
337
  },
364
338
  });
365
339
  rl.registerAction("message.delete", {
@@ -370,9 +344,8 @@ export default function discord(rl) {
370
344
  messageId: { type: "string", required: true, description: "Message ID" },
371
345
  },
372
346
  async execute(input, ctx) {
373
- const { botToken } = getConn(ctx);
374
347
  const { channelId, messageId } = input;
375
- await apiRequest(botToken, "DELETE", `/channels/${channelId}/messages/${messageId}`);
348
+ await apiRequest(ctx, "DELETE", `channels/${pathSegment(channelId)}/messages/${pathSegment(messageId)}`);
376
349
  return { success: true };
377
350
  },
378
351
  });
@@ -389,9 +362,8 @@ export default function discord(rl) {
389
362
  },
390
363
  },
391
364
  async execute(input, ctx) {
392
- const { botToken } = getConn(ctx);
393
365
  const { channelId, messageId, emoji } = input;
394
- await apiRequest(botToken, "PUT", `/channels/${channelId}/messages/${messageId}/reactions/${encodeURIComponent(emoji)}/@me`);
366
+ await apiRequest(ctx, "PUT", `channels/${pathSegment(channelId)}/messages/${pathSegment(messageId)}/reactions/${pathSegment(emoji)}/@me`);
395
367
  return { success: true };
396
368
  },
397
369
  });
@@ -0,0 +1,18 @@
1
+ import { httpsBase, staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * An admin API key, sent as the Api-Key header to the connection's own
4
+ * Discourse instance. The public Api-Username companion header names the
5
+ * user the key acts as.
6
+ */
7
+ export const discourseCredential = staticCredential({
8
+ id: "discourse",
9
+ auth: { kind: "apiKey", header: "Api-Key" },
10
+ local: { secret: "apiKey" },
11
+ targets: (config) => ({
12
+ api: {
13
+ baseUrl: httpsBase(config.host, ""),
14
+ methods: ["GET", "POST", "PUT", "DELETE"],
15
+ allowedHeaders: ["Api-Username"],
16
+ },
17
+ }),
18
+ });
@@ -1,44 +1,23 @@
1
- async function apiRequest(host, apiKey, apiUsername, method, endpoint, body, qs) {
2
- const url = new URL(`${host}${endpoint}`);
3
- if (qs) {
4
- for (const [k, v] of Object.entries(qs)) {
5
- if (v !== undefined && v !== null)
6
- url.searchParams.set(k, String(v));
7
- }
8
- }
9
- const opts = {
10
- method,
11
- headers: {
12
- "Content-Type": "application/json",
13
- "Api-Key": apiKey,
14
- "Api-Username": apiUsername,
15
- },
16
- };
17
- if (body && Object.keys(body).length > 0 && method !== "GET") {
18
- opts.body = JSON.stringify(body);
19
- }
20
- const res = await fetch(url.toString(), opts);
21
- if (!res.ok)
22
- throw new Error(`Discourse API error ${res.status}: ${await res.text()}`);
23
- if (res.status === 204)
24
- return { success: true };
25
- return res.json();
26
- }
27
- function getConn(ctx) {
28
- const cfg = ctx.connection.config;
29
- return {
30
- host: cfg.host.replace(/\/$/, ""),
31
- apiKey: cfg.apiKey,
32
- apiUsername: cfg.apiUsername ?? "system",
33
- };
34
- }
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { discourseCredential } from "./credentials.js";
35
3
  function req(ctx, method, endpoint, body, qs) {
36
- const { host, apiKey, apiUsername } = getConn(ctx);
37
- return apiRequest(host, apiKey, apiUsername, method, endpoint, body, qs);
4
+ // Public companion header naming the user the admin key acts as.
5
+ const apiUsername = ctx.connection.config.apiUsername ?? "system";
6
+ return credentialJson(ctx, discourseCredential, "discourse", {
7
+ target: "api",
8
+ path: endpoint,
9
+ method,
10
+ query: qs,
11
+ headers: { "Api-Username": apiUsername },
12
+ ...(body && Object.keys(body).length > 0 && method !== "GET"
13
+ ? { json: body }
14
+ : {}),
15
+ });
38
16
  }
39
17
  export default function discourse(rl) {
40
18
  rl.setName("discourse");
41
19
  rl.setVersion("0.1.0");
20
+ rl.setCredential(discourseCredential);
42
21
  rl.setConnectionSchema({
43
22
  host: {
44
23
  type: "string",
@@ -79,7 +58,7 @@ export default function discourse(rl) {
79
58
  },
80
59
  async execute(input, ctx) {
81
60
  const { name, color, textColor } = input;
82
- const data = (await req(ctx, "POST", "/categories.json", {
61
+ const data = (await req(ctx, "POST", "categories.json", {
83
62
  name,
84
63
  color,
85
64
  text_color: textColor,
@@ -95,7 +74,7 @@ export default function discourse(rl) {
95
74
  },
96
75
  async execute(input, ctx) {
97
76
  const { limit } = (input ?? {});
98
- const data = (await req(ctx, "GET", "/categories.json"));
77
+ const data = (await req(ctx, "GET", "categories.json"));
99
78
  const list = data.category_list
100
79
  .categories;
101
80
  if (limit)
@@ -127,7 +106,7 @@ export default function discourse(rl) {
127
106
  body.color = color;
128
107
  if (textColor)
129
108
  body.text_color = textColor;
130
- const data = (await req(ctx, "PUT", `/categories/${categoryId}.json`, body));
109
+ const data = (await req(ctx, "PUT", `categories/${pathSegment(categoryId)}.json`, body));
131
110
  return data.category;
132
111
  },
133
112
  });
@@ -140,7 +119,7 @@ export default function discourse(rl) {
140
119
  },
141
120
  async execute(input, ctx) {
142
121
  const { name } = input;
143
- const data = (await req(ctx, "POST", "/admin/groups.json", {
122
+ const data = (await req(ctx, "POST", "admin/groups.json", {
144
123
  group: { name },
145
124
  }));
146
125
  return data.basic_group;
@@ -154,7 +133,7 @@ export default function discourse(rl) {
154
133
  },
155
134
  async execute(input, ctx) {
156
135
  const { name } = input;
157
- const data = (await req(ctx, "GET", `/groups/${name}`));
136
+ const data = (await req(ctx, "GET", `groups/${pathSegment(name)}`));
158
137
  return data.group;
159
138
  },
160
139
  });
@@ -166,7 +145,7 @@ export default function discourse(rl) {
166
145
  },
167
146
  async execute(input, ctx) {
168
147
  const { limit } = (input ?? {});
169
- const data = (await req(ctx, "GET", "/groups.json"));
148
+ const data = (await req(ctx, "GET", "groups.json"));
170
149
  const groups = data.groups;
171
150
  if (limit)
172
151
  return groups.slice(0, limit);
@@ -182,7 +161,9 @@ export default function discourse(rl) {
182
161
  },
183
162
  async execute(input, ctx) {
184
163
  const { groupId, name } = input;
185
- return req(ctx, "PUT", `/groups/${groupId}.json`, { group: { name } });
164
+ return req(ctx, "PUT", `groups/${pathSegment(groupId)}.json`, {
165
+ group: { name },
166
+ });
186
167
  },
187
168
  });
188
169
  // ── Post ────────────────────────────────────────────
@@ -227,7 +208,7 @@ export default function discourse(rl) {
227
208
  body.topic_id = topicId;
228
209
  if (replyToPostNumber)
229
210
  body.reply_to_post_number = replyToPostNumber;
230
- return req(ctx, "POST", "/posts.json", body);
211
+ return req(ctx, "POST", "posts.json", body);
231
212
  },
232
213
  });
233
214
  rl.registerAction("post.get", {
@@ -237,7 +218,7 @@ export default function discourse(rl) {
237
218
  postId: { type: "string", required: true, description: "Post ID" },
238
219
  },
239
220
  async execute(input, ctx) {
240
- return req(ctx, "GET", `/posts/${input.postId}`);
221
+ return req(ctx, "GET", `posts/${pathSegment(input.postId)}`);
241
222
  },
242
223
  });
243
224
  rl.registerAction("post.list", {
@@ -248,7 +229,7 @@ export default function discourse(rl) {
248
229
  },
249
230
  async execute(input, ctx) {
250
231
  const { limit } = (input ?? {});
251
- const data = (await req(ctx, "GET", "/posts.json"));
232
+ const data = (await req(ctx, "GET", "posts.json"));
252
233
  const posts = data.latest_posts;
253
234
  if (limit)
254
235
  return posts.slice(0, limit);
@@ -276,7 +257,7 @@ export default function discourse(rl) {
276
257
  const body = { raw: content };
277
258
  if (editReason)
278
259
  body.edit_reason = editReason;
279
- const data = (await req(ctx, "PUT", `/posts/${postId}.json`, body));
260
+ const data = (await req(ctx, "PUT", `posts/${pathSegment(postId)}.json`, body));
280
261
  return data.post;
281
262
  },
282
263
  });
@@ -300,7 +281,7 @@ export default function discourse(rl) {
300
281
  const body = { name, email, username, password };
301
282
  if (active !== undefined)
302
283
  body.active = active;
303
- return req(ctx, "POST", "/users.json", body);
284
+ return req(ctx, "POST", "users.json", body);
304
285
  },
305
286
  });
306
287
  rl.registerAction("user.get", {
@@ -317,9 +298,9 @@ export default function discourse(rl) {
317
298
  async execute(input, ctx) {
318
299
  const { username, externalId } = (input ?? {});
319
300
  if (externalId)
320
- return req(ctx, "GET", `/u/by-external/${externalId}.json`);
301
+ return req(ctx, "GET", `u/by-external/${pathSegment(externalId)}.json`);
321
302
  if (username)
322
- return req(ctx, "GET", `/users/${username}`);
303
+ return req(ctx, "GET", `users/${pathSegment(username)}`);
323
304
  throw new Error("Provide either username or externalId");
324
305
  },
325
306
  });
@@ -350,7 +331,7 @@ export default function discourse(rl) {
350
331
  qs.asc = asc;
351
332
  if (showEmails)
352
333
  qs.show_emails = true;
353
- let data = (await req(ctx, "GET", `/admin/users/list/${flag}.json`, undefined, qs));
334
+ let data = (await req(ctx, "GET", `admin/users/list/${pathSegment(flag)}.json`, undefined, qs));
354
335
  if (limit)
355
336
  data = data.slice(0, limit);
356
337
  return data;
@@ -370,7 +351,9 @@ export default function discourse(rl) {
370
351
  },
371
352
  async execute(input, ctx) {
372
353
  const { groupId, usernames } = input;
373
- return req(ctx, "PUT", `/groups/${groupId}/members.json`, { usernames });
354
+ return req(ctx, "PUT", `groups/${pathSegment(groupId)}/members.json`, {
355
+ usernames,
356
+ });
374
357
  },
375
358
  });
376
359
  rl.registerAction("userGroup.remove", {
@@ -386,7 +369,7 @@ export default function discourse(rl) {
386
369
  },
387
370
  async execute(input, ctx) {
388
371
  const { groupId, usernames } = input;
389
- return req(ctx, "DELETE", `/groups/${groupId}/members.json`, {
372
+ return req(ctx, "DELETE", `groups/${pathSegment(groupId)}/members.json`, {
390
373
  usernames,
391
374
  });
392
375
  },
@@ -0,0 +1,13 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /** An access token, sent as the api_key query parameter on read-only GETs. */
3
+ export const disqusCredential = staticCredential({
4
+ id: "disqus",
5
+ auth: { kind: "queryKey", param: "api_key" },
6
+ local: { secret: "apiKey" },
7
+ targets: {
8
+ api: {
9
+ baseUrl: "https://disqus.com/api/3.0/",
10
+ methods: ["GET"],
11
+ },
12
+ },
13
+ });