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,43 +1,16 @@
1
- function getConn(ctx) {
2
- const baseUrl = ctx.connection.config.baseUrl.replace(/\/$/, "");
3
- const authToken = ctx.connection.config.authToken;
4
- return { baseUrl, authToken };
5
- }
6
- // Splunk REST API uses form-urlencoded for POST, returns JSON when output_mode=json
7
- async function api(baseUrl, token, method, endpoint, body, qs) {
8
- const url = new URL(`${baseUrl}${endpoint}`);
9
- // Always request JSON output
10
- url.searchParams.set("output_mode", "json");
11
- if (qs) {
12
- for (const [k, v] of Object.entries(qs)) {
13
- if (v !== undefined && v !== null)
14
- url.searchParams.set(k, String(v));
15
- }
16
- }
17
- const headers = { Authorization: `Bearer ${token}` };
18
- const init = { method, headers };
19
- if (body && Object.keys(body).length > 0) {
20
- headers["Content-Type"] = "application/x-www-form-urlencoded";
21
- const params = new URLSearchParams();
22
- for (const [k, v] of Object.entries(body)) {
23
- if (v === undefined || v === null)
24
- continue;
25
- if (Array.isArray(v)) {
26
- for (const item of v)
27
- params.append(k, String(item));
28
- }
29
- else
30
- params.set(k, String(v));
31
- }
32
- init.body = params.toString();
33
- }
34
- const res = await fetch(url.toString(), init);
35
- if (!res.ok)
36
- throw new Error(`Splunk error ${res.status}: ${await res.text()}`);
37
- const text = await res.text();
38
- if (!text)
39
- return { success: true };
40
- const json = JSON.parse(text);
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { splunkCredential } from "./credentials.js";
3
+ // The Splunk REST API takes form-urlencoded POST bodies and answers JSON
4
+ // because every request carries output_mode=json.
5
+ async function api(ctx, method, path, body, qs) {
6
+ const json = (await credentialJson(ctx, splunkCredential, "splunk", {
7
+ target: "api",
8
+ path,
9
+ method,
10
+ // JSON output always; callers never set output_mode themselves.
11
+ query: { output_mode: "json", ...qs },
12
+ ...(body && Object.keys(body).length > 0 ? { form: body } : {}),
13
+ }));
41
14
  // Format entry array if present
42
15
  if (json.entry && Array.isArray(json.entry)) {
43
16
  return json.entry.map((e) => {
@@ -55,6 +28,7 @@ async function api(baseUrl, token, method, endpoint, body, qs) {
55
28
  export default function splunk(rl) {
56
29
  rl.setName("splunk");
57
30
  rl.setVersion("0.1.0");
31
+ rl.setCredential(splunkCredential);
58
32
  rl.setConnectionSchema({
59
33
  baseUrl: {
60
34
  type: "string",
@@ -86,7 +60,6 @@ export default function splunk(rl) {
86
60
  namespace: { type: "string", required: false },
87
61
  },
88
62
  async execute(input, ctx) {
89
- const { baseUrl, authToken } = getConn(ctx);
90
63
  const p = input;
91
64
  const body = { search: p.search };
92
65
  if (p.execMode)
@@ -99,11 +72,11 @@ export default function splunk(rl) {
99
72
  body.max_time = p.maxTime;
100
73
  if (p.namespace)
101
74
  body.namespace = p.namespace;
102
- // Create returns XML with sid, then we fetch JSON
103
- const createRes = (await api(baseUrl, authToken, "POST", "/services/search/jobs", body));
75
+ // Create answers { sid }; the follow-up read returns the full job.
76
+ const createRes = (await api(ctx, "POST", "search/jobs", body));
104
77
  const sid = createRes.sid;
105
78
  if (sid)
106
- return api(baseUrl, authToken, "GET", `/services/search/jobs/${sid}`);
79
+ return api(ctx, "GET", `search/jobs/${pathSegment(sid)}`);
107
80
  return createRes;
108
81
  },
109
82
  });
@@ -112,8 +85,7 @@ export default function splunk(rl) {
112
85
  description: "Get a search job by ID",
113
86
  inputSchema: { searchJobId: { type: "string", required: true } },
114
87
  async execute(input, ctx) {
115
- const { baseUrl, authToken } = getConn(ctx);
116
- return api(baseUrl, authToken, "GET", `/services/search/jobs/${input.searchJobId}`);
88
+ return api(ctx, "GET", `search/jobs/${pathSegment(input.searchJobId)}`);
117
89
  },
118
90
  });
119
91
  rl.registerAction("search.list", {
@@ -125,7 +97,6 @@ export default function splunk(rl) {
125
97
  sortDir: { type: "string", required: false, description: "asc or desc" },
126
98
  },
127
99
  async execute(input, ctx) {
128
- const { baseUrl, authToken } = getConn(ctx);
129
100
  const p = (input ?? {});
130
101
  const qs = {};
131
102
  if (p.limit)
@@ -136,7 +107,7 @@ export default function splunk(rl) {
136
107
  qs.sort_key = p.sortKey;
137
108
  if (p.sortDir)
138
109
  qs.sort_dir = p.sortDir;
139
- return api(baseUrl, authToken, "GET", "/services/search/jobs", undefined, qs);
110
+ return api(ctx, "GET", "search/jobs", undefined, qs);
140
111
  },
141
112
  });
142
113
  rl.registerAction("search.delete", {
@@ -144,8 +115,7 @@ export default function splunk(rl) {
144
115
  description: "Delete a search job",
145
116
  inputSchema: { searchJobId: { type: "string", required: true } },
146
117
  async execute(input, ctx) {
147
- const { baseUrl, authToken } = getConn(ctx);
148
- await api(baseUrl, authToken, "DELETE", `/services/search/jobs/${input.searchJobId}`);
118
+ await api(ctx, "DELETE", `search/jobs/${pathSegment(input.searchJobId)}`);
149
119
  return { success: true };
150
120
  },
151
121
  });
@@ -167,7 +137,6 @@ export default function splunk(rl) {
167
137
  },
168
138
  },
169
139
  async execute(input, ctx) {
170
- const { baseUrl, authToken } = getConn(ctx);
171
140
  const p = input;
172
141
  const qs = {};
173
142
  if (p.limit)
@@ -176,7 +145,7 @@ export default function splunk(rl) {
176
145
  qs.count = 0;
177
146
  if (p.filterKey && p.filterValue)
178
147
  qs.search = `search ${p.filterKey}=${p.filterValue}`;
179
- return api(baseUrl, authToken, "GET", `/services/search/jobs/${p.searchJobId}/results`, undefined, qs);
148
+ return api(ctx, "GET", `search/jobs/${pathSegment(p.searchJobId)}/results`, undefined, qs);
180
149
  },
181
150
  });
182
151
  // ── Alerts ──────────────────────────────────────────
@@ -185,8 +154,7 @@ export default function splunk(rl) {
185
154
  description: "Get metric alerts",
186
155
  inputSchema: {},
187
156
  async execute(_input, ctx) {
188
- const { baseUrl, authToken } = getConn(ctx);
189
- return api(baseUrl, authToken, "GET", "/services/alerts/metric_alerts");
157
+ return api(ctx, "GET", "alerts/metric_alerts");
190
158
  },
191
159
  });
192
160
  rl.registerAction("alert.getFired", {
@@ -194,8 +162,7 @@ export default function splunk(rl) {
194
162
  description: "Get fired alerts report",
195
163
  inputSchema: {},
196
164
  async execute(_input, ctx) {
197
- const { baseUrl, authToken } = getConn(ctx);
198
- return api(baseUrl, authToken, "GET", "/services/alerts/fired_alerts");
165
+ return api(ctx, "GET", "alerts/fired_alerts");
199
166
  },
200
167
  });
201
168
  // ── Reports (Saved Searches) ────────────────────────
@@ -214,7 +181,6 @@ export default function splunk(rl) {
214
181
  latestTime: { type: "string", required: false },
215
182
  },
216
183
  async execute(input, ctx) {
217
- const { baseUrl, authToken } = getConn(ctx);
218
184
  const p = input;
219
185
  const body = {
220
186
  name: p.name,
@@ -227,7 +193,7 @@ export default function splunk(rl) {
227
193
  body["dispatch.earliest_time"] = p.earliestTime;
228
194
  if (p.latestTime)
229
195
  body["dispatch.latest_time"] = p.latestTime;
230
- return api(baseUrl, authToken, "POST", "/services/saved/searches", body);
196
+ return api(ctx, "POST", "saved/searches", body);
231
197
  },
232
198
  });
233
199
  rl.registerAction("report.get", {
@@ -235,8 +201,7 @@ export default function splunk(rl) {
235
201
  description: "Get a saved search / report",
236
202
  inputSchema: { reportId: { type: "string", required: true } },
237
203
  async execute(input, ctx) {
238
- const { baseUrl, authToken } = getConn(ctx);
239
- return api(baseUrl, authToken, "GET", `/services/saved/searches/${input.reportId}`);
204
+ return api(ctx, "GET", `saved/searches/${pathSegment(input.reportId)}`);
240
205
  },
241
206
  });
242
207
  rl.registerAction("report.list", {
@@ -244,14 +209,13 @@ export default function splunk(rl) {
244
209
  description: "List saved searches / reports",
245
210
  inputSchema: { limit: { type: "number", required: false } },
246
211
  async execute(input, ctx) {
247
- const { baseUrl, authToken } = getConn(ctx);
248
212
  const p = (input ?? {});
249
213
  const qs = {};
250
214
  if (p.limit)
251
215
  qs.count = p.limit;
252
216
  else
253
217
  qs.count = 0;
254
- return api(baseUrl, authToken, "GET", "/services/saved/searches", undefined, qs);
218
+ return api(ctx, "GET", "saved/searches", undefined, qs);
255
219
  },
256
220
  });
257
221
  rl.registerAction("report.delete", {
@@ -259,8 +223,7 @@ export default function splunk(rl) {
259
223
  description: "Delete a saved search / report",
260
224
  inputSchema: { reportId: { type: "string", required: true } },
261
225
  async execute(input, ctx) {
262
- const { baseUrl, authToken } = getConn(ctx);
263
- await api(baseUrl, authToken, "DELETE", `/services/saved/searches/${input.reportId}`);
226
+ await api(ctx, "DELETE", `saved/searches/${pathSegment(input.reportId)}`);
264
227
  return { success: true };
265
228
  },
266
229
  });
@@ -280,7 +243,6 @@ export default function splunk(rl) {
280
243
  realname: { type: "string", required: false, description: "Full name" },
281
244
  },
282
245
  async execute(input, ctx) {
283
- const { baseUrl, authToken } = getConn(ctx);
284
246
  const p = input;
285
247
  const body = {
286
248
  name: p.name,
@@ -291,7 +253,7 @@ export default function splunk(rl) {
291
253
  body.email = p.email;
292
254
  if (p.realname)
293
255
  body.realname = p.realname;
294
- return api(baseUrl, authToken, "POST", "/services/authentication/users", body);
256
+ return api(ctx, "POST", "authentication/users", body);
295
257
  },
296
258
  });
297
259
  rl.registerAction("user.get", {
@@ -301,8 +263,7 @@ export default function splunk(rl) {
301
263
  userId: { type: "string", required: true, description: "Username" },
302
264
  },
303
265
  async execute(input, ctx) {
304
- const { baseUrl, authToken } = getConn(ctx);
305
- return api(baseUrl, authToken, "GET", `/services/authentication/users/${input.userId}`);
266
+ return api(ctx, "GET", `authentication/users/${pathSegment(input.userId)}`);
306
267
  },
307
268
  });
308
269
  rl.registerAction("user.list", {
@@ -310,14 +271,13 @@ export default function splunk(rl) {
310
271
  description: "List users",
311
272
  inputSchema: { limit: { type: "number", required: false } },
312
273
  async execute(input, ctx) {
313
- const { baseUrl, authToken } = getConn(ctx);
314
274
  const p = (input ?? {});
315
275
  const qs = {};
316
276
  if (p.limit)
317
277
  qs.count = p.limit;
318
278
  else
319
279
  qs.count = 0;
320
- return api(baseUrl, authToken, "GET", "/services/authentication/users", undefined, qs);
280
+ return api(ctx, "GET", "authentication/users", undefined, qs);
321
281
  },
322
282
  });
323
283
  rl.registerAction("user.update", {
@@ -335,7 +295,6 @@ export default function splunk(rl) {
335
295
  },
336
296
  },
337
297
  async execute(input, ctx) {
338
- const { baseUrl, authToken } = getConn(ctx);
339
298
  const { userId, ...fields } = input;
340
299
  const body = {};
341
300
  if (fields.email)
@@ -346,7 +305,7 @@ export default function splunk(rl) {
346
305
  body.password = fields.password;
347
306
  if (fields.roles)
348
307
  body.roles = fields.roles;
349
- return api(baseUrl, authToken, "POST", `/services/authentication/users/${userId}`, body);
308
+ return api(ctx, "POST", `authentication/users/${pathSegment(userId)}`, body);
350
309
  },
351
310
  });
352
311
  rl.registerAction("user.delete", {
@@ -356,8 +315,7 @@ export default function splunk(rl) {
356
315
  userId: { type: "string", required: true, description: "Username" },
357
316
  },
358
317
  async execute(input, ctx) {
359
- const { baseUrl, authToken } = getConn(ctx);
360
- await api(baseUrl, authToken, "DELETE", `/services/authentication/users/${input.userId}`);
318
+ await api(ctx, "DELETE", `authentication/users/${pathSegment(input.userId)}`);
361
319
  return { success: true };
362
320
  },
363
321
  });
@@ -0,0 +1,19 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /** An OAuth2 user token, sent as a bearer to Spotify's one API origin. */
3
+ export const spotifyCredential = staticCredential({
4
+ id: "spotify",
5
+ auth: { kind: "bearer" },
6
+ local: { secret: "accessToken" },
7
+ targets: {
8
+ api: {
9
+ baseUrl: "https://api.spotify.com/v1/",
10
+ methods: ["GET", "POST", "PUT", "DELETE"],
11
+ },
12
+ },
13
+ probe: {
14
+ target: "api",
15
+ path: "me",
16
+ method: "GET",
17
+ acceptedStatuses: [200],
18
+ },
19
+ });
@@ -1,28 +1,13 @@
1
- const BASE = "https://api.spotify.com/v1";
2
- async function api(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 { spotifyCredential } from "./credentials.js";
3
+ function api(ctx, method, endpoint, body, qs) {
4
+ return credentialJson(ctx, spotifyCredential, "spotify", {
5
+ target: "api",
6
+ path: endpoint,
11
7
  method,
12
- headers: {
13
- Authorization: `Bearer ${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.status === 204)
21
- return { success: true };
22
- if (!res.ok)
23
- throw new Error(`Spotify error ${res.status}: ${await res.text()}`);
24
- const text = await res.text();
25
- return text ? JSON.parse(text) : { success: true };
8
+ query: qs,
9
+ ...(body && Object.keys(body).length > 0 ? { json: body } : {}),
10
+ });
26
11
  }
27
12
  function stripUri(uri, prefix) {
28
13
  return uri.replace(prefix, "");
@@ -30,6 +15,7 @@ function stripUri(uri, prefix) {
30
15
  export default function spotify(rl) {
31
16
  rl.setName("spotify");
32
17
  rl.setVersion("0.1.0");
18
+ rl.setCredential(spotifyCredential);
33
19
  rl.setConnectionSchema({
34
20
  accessToken: {
35
21
  type: "string",
@@ -38,14 +24,13 @@ export default function spotify(rl) {
38
24
  env: "SPOTIFY_ACCESS_TOKEN",
39
25
  },
40
26
  });
41
- const t = (ctx) => ctx.connection.config.accessToken;
42
27
  // ── Player ──────────────────────────────────────────
43
28
  rl.registerAction("player.pause", {
44
29
  access: "write",
45
30
  description: "Pause playback",
46
31
  inputSchema: {},
47
32
  async execute(_i, ctx) {
48
- return api(t(ctx), "PUT", "/me/player/pause");
33
+ return api(ctx, "PUT", "me/player/pause");
49
34
  },
50
35
  });
51
36
  rl.registerAction("player.resume", {
@@ -53,7 +38,7 @@ export default function spotify(rl) {
53
38
  description: "Resume playback",
54
39
  inputSchema: {},
55
40
  async execute(_i, ctx) {
56
- return api(t(ctx), "PUT", "/me/player/play");
41
+ return api(ctx, "PUT", "me/player/play");
57
42
  },
58
43
  });
59
44
  rl.registerAction("player.next", {
@@ -61,7 +46,7 @@ export default function spotify(rl) {
61
46
  description: "Skip to next track",
62
47
  inputSchema: {},
63
48
  async execute(_i, ctx) {
64
- return api(t(ctx), "POST", "/me/player/next");
49
+ return api(ctx, "POST", "me/player/next");
65
50
  },
66
51
  });
67
52
  rl.registerAction("player.previous", {
@@ -69,7 +54,7 @@ export default function spotify(rl) {
69
54
  description: "Skip to previous track",
70
55
  inputSchema: {},
71
56
  async execute(_i, ctx) {
72
- return api(t(ctx), "POST", "/me/player/previous");
57
+ return api(ctx, "POST", "me/player/previous");
73
58
  },
74
59
  });
75
60
  rl.registerAction("player.currentlyPlaying", {
@@ -77,7 +62,7 @@ export default function spotify(rl) {
77
62
  description: "Get currently playing track",
78
63
  inputSchema: {},
79
64
  async execute(_i, ctx) {
80
- return api(t(ctx), "GET", "/me/player/currently-playing");
65
+ return api(ctx, "GET", "me/player/currently-playing");
81
66
  },
82
67
  });
83
68
  rl.registerAction("player.recentlyPlayed", {
@@ -88,7 +73,7 @@ export default function spotify(rl) {
88
73
  const qs = {};
89
74
  if (input?.limit)
90
75
  qs.limit = input.limit;
91
- const data = (await api(t(ctx), "GET", "/me/player/recently-played", undefined, qs));
76
+ const data = (await api(ctx, "GET", "me/player/recently-played", undefined, qs));
92
77
  return data.items;
93
78
  },
94
79
  });
@@ -99,7 +84,7 @@ export default function spotify(rl) {
99
84
  uri: { type: "string", required: true, description: "Track URI or ID" },
100
85
  },
101
86
  async execute(input, ctx) {
102
- return api(t(ctx), "POST", "/me/player/queue", undefined, {
87
+ return api(ctx, "POST", "me/player/queue", undefined, {
103
88
  uri: input.uri,
104
89
  });
105
90
  },
@@ -111,7 +96,7 @@ export default function spotify(rl) {
111
96
  volumePercent: { type: "number", required: true, description: "0-100" },
112
97
  },
113
98
  async execute(input, ctx) {
114
- return api(t(ctx), "PUT", "/me/player/volume", undefined, {
99
+ return api(ctx, "PUT", "me/player/volume", undefined, {
115
100
  volume_percent: input.volumePercent,
116
101
  });
117
102
  },
@@ -127,7 +112,7 @@ export default function spotify(rl) {
127
112
  },
128
113
  },
129
114
  async execute(input, ctx) {
130
- return api(t(ctx), "PUT", "/me/player/play", {
115
+ return api(ctx, "PUT", "me/player/play", {
131
116
  context_uri: input.contextUri,
132
117
  });
133
118
  },
@@ -138,7 +123,7 @@ export default function spotify(rl) {
138
123
  description: "Get an album",
139
124
  inputSchema: { id: { type: "string", required: true } },
140
125
  async execute(input, ctx) {
141
- return api(t(ctx), "GET", `/albums/${stripUri(input.id, "spotify:album:")}`);
126
+ return api(ctx, "GET", `albums/${pathSegment(stripUri(input.id, "spotify:album:"))}`);
142
127
  },
143
128
  });
144
129
  rl.registerAction("album.getTracks", {
@@ -153,7 +138,7 @@ export default function spotify(rl) {
153
138
  const qs = {};
154
139
  if (p.limit)
155
140
  qs.limit = p.limit;
156
- const data = (await api(t(ctx), "GET", `/albums/${stripUri(p.id, "spotify:album:")}/tracks`, undefined, qs));
141
+ const data = (await api(ctx, "GET", `albums/${pathSegment(stripUri(p.id, "spotify:album:"))}/tracks`, undefined, qs));
157
142
  return data.items;
158
143
  },
159
144
  });
@@ -171,7 +156,7 @@ export default function spotify(rl) {
171
156
  qs.limit = p.limit;
172
157
  if (p.country)
173
158
  qs.country = p.country;
174
- const data = (await api(t(ctx), "GET", "/browse/new-releases", undefined, qs));
159
+ const data = (await api(ctx, "GET", "browse/new-releases", undefined, qs));
175
160
  return data.albums.items;
176
161
  },
177
162
  });
@@ -189,7 +174,7 @@ export default function spotify(rl) {
189
174
  qs.limit = p.limit;
190
175
  else
191
176
  qs.limit = 50;
192
- const data = (await api(t(ctx), "GET", "/search", undefined, qs));
177
+ const data = (await api(ctx, "GET", "search", undefined, qs));
193
178
  return data.albums.items;
194
179
  },
195
180
  });
@@ -199,7 +184,7 @@ export default function spotify(rl) {
199
184
  description: "Get an artist",
200
185
  inputSchema: { id: { type: "string", required: true } },
201
186
  async execute(input, ctx) {
202
- return api(t(ctx), "GET", `/artists/${stripUri(input.id, "spotify:artist:")}`);
187
+ return api(ctx, "GET", `artists/${pathSegment(stripUri(input.id, "spotify:artist:"))}`);
203
188
  },
204
189
  });
205
190
  rl.registerAction("artist.getAlbums", {
@@ -214,7 +199,7 @@ export default function spotify(rl) {
214
199
  const qs = {};
215
200
  if (p.limit)
216
201
  qs.limit = p.limit;
217
- const data = (await api(t(ctx), "GET", `/artists/${stripUri(p.id, "spotify:artist:")}/albums`, undefined, qs));
202
+ const data = (await api(ctx, "GET", `artists/${pathSegment(stripUri(p.id, "spotify:artist:"))}/albums`, undefined, qs));
218
203
  return data.items;
219
204
  },
220
205
  });
@@ -223,7 +208,7 @@ export default function spotify(rl) {
223
208
  description: "Get related artists",
224
209
  inputSchema: { id: { type: "string", required: true } },
225
210
  async execute(input, ctx) {
226
- const data = (await api(t(ctx), "GET", `/artists/${stripUri(input.id, "spotify:artist:")}/related-artists`));
211
+ const data = (await api(ctx, "GET", `artists/${pathSegment(stripUri(input.id, "spotify:artist:"))}/related-artists`));
227
212
  return data.artists;
228
213
  },
229
214
  });
@@ -236,7 +221,7 @@ export default function spotify(rl) {
236
221
  },
237
222
  async execute(input, ctx) {
238
223
  const p = input;
239
- const data = (await api(t(ctx), "GET", `/artists/${stripUri(p.id, "spotify:artist:")}/top-tracks`, undefined, { country: p.country }));
224
+ const data = (await api(ctx, "GET", `artists/${pathSegment(stripUri(p.id, "spotify:artist:"))}/top-tracks`, undefined, { country: p.country }));
240
225
  return data.tracks;
241
226
  },
242
227
  });
@@ -254,7 +239,7 @@ export default function spotify(rl) {
254
239
  type: "artist",
255
240
  limit: p.limit ?? 50,
256
241
  };
257
- const data = (await api(t(ctx), "GET", "/search", undefined, qs));
242
+ const data = (await api(ctx, "GET", "search", undefined, qs));
258
243
  return data.artists.items;
259
244
  },
260
245
  });
@@ -264,7 +249,7 @@ export default function spotify(rl) {
264
249
  description: "Get a playlist",
265
250
  inputSchema: { id: { type: "string", required: true } },
266
251
  async execute(input, ctx) {
267
- return api(t(ctx), "GET", `/playlists/${stripUri(input.id, "spotify:playlist:")}`);
252
+ return api(ctx, "GET", `playlists/${pathSegment(stripUri(input.id, "spotify:playlist:"))}`);
268
253
  },
269
254
  });
270
255
  rl.registerAction("playlist.getTracks", {
@@ -279,7 +264,7 @@ export default function spotify(rl) {
279
264
  const qs = {};
280
265
  if (p.limit)
281
266
  qs.limit = p.limit;
282
- const data = (await api(t(ctx), "GET", `/playlists/${stripUri(p.id, "spotify:playlist:")}/tracks`, undefined, qs));
267
+ const data = (await api(ctx, "GET", `playlists/${pathSegment(stripUri(p.id, "spotify:playlist:"))}/tracks`, undefined, qs));
283
268
  return data.items;
284
269
  },
285
270
  });
@@ -292,7 +277,7 @@ export default function spotify(rl) {
292
277
  public: { type: "boolean", required: false },
293
278
  },
294
279
  async execute(input, ctx) {
295
- return api(t(ctx), "POST", "/me/playlists", input);
280
+ return api(ctx, "POST", "me/playlists", input);
296
281
  },
297
282
  });
298
283
  rl.registerAction("playlist.addTrack", {
@@ -308,7 +293,7 @@ export default function spotify(rl) {
308
293
  const qs = { uris: p.trackUri };
309
294
  if (p.position !== undefined)
310
295
  qs.position = p.position;
311
- return api(t(ctx), "POST", `/playlists/${stripUri(p.id, "spotify:playlist:")}/tracks`, {}, qs);
296
+ return api(ctx, "POST", `playlists/${pathSegment(stripUri(p.id, "spotify:playlist:"))}/tracks`, {}, qs);
312
297
  },
313
298
  });
314
299
  rl.registerAction("playlist.removeTrack", {
@@ -320,7 +305,7 @@ export default function spotify(rl) {
320
305
  },
321
306
  async execute(input, ctx) {
322
307
  const p = input;
323
- return api(t(ctx), "DELETE", `/playlists/${stripUri(p.id, "spotify:playlist:")}/tracks`, { tracks: [{ uri: p.trackUri }] });
308
+ return api(ctx, "DELETE", `playlists/${pathSegment(stripUri(p.id, "spotify:playlist:"))}/tracks`, { tracks: [{ uri: p.trackUri }] });
324
309
  },
325
310
  });
326
311
  rl.registerAction("playlist.listMine", {
@@ -331,7 +316,7 @@ export default function spotify(rl) {
331
316
  const qs = {};
332
317
  if (input?.limit)
333
318
  qs.limit = input.limit;
334
- const data = (await api(t(ctx), "GET", "/me/playlists", undefined, qs));
319
+ const data = (await api(ctx, "GET", "me/playlists", undefined, qs));
335
320
  return data.items;
336
321
  },
337
322
  });
@@ -349,7 +334,7 @@ export default function spotify(rl) {
349
334
  type: "playlist",
350
335
  limit: p.limit ?? 50,
351
336
  };
352
- const data = (await api(t(ctx), "GET", "/search", undefined, qs));
337
+ const data = (await api(ctx, "GET", "search", undefined, qs));
353
338
  return data.playlists.items;
354
339
  },
355
340
  });
@@ -359,7 +344,7 @@ export default function spotify(rl) {
359
344
  description: "Get a track",
360
345
  inputSchema: { id: { type: "string", required: true } },
361
346
  async execute(input, ctx) {
362
- return api(t(ctx), "GET", `/tracks/${stripUri(input.id, "spotify:track:")}`);
347
+ return api(ctx, "GET", `tracks/${pathSegment(stripUri(input.id, "spotify:track:"))}`);
363
348
  },
364
349
  });
365
350
  rl.registerAction("track.getAudioFeatures", {
@@ -367,7 +352,7 @@ export default function spotify(rl) {
367
352
  description: "Get audio features for a track",
368
353
  inputSchema: { id: { type: "string", required: true } },
369
354
  async execute(input, ctx) {
370
- return api(t(ctx), "GET", `/audio-features/${stripUri(input.id, "spotify:track:")}`);
355
+ return api(ctx, "GET", `audio-features/${pathSegment(stripUri(input.id, "spotify:track:"))}`);
371
356
  },
372
357
  });
373
358
  rl.registerAction("track.search", {
@@ -384,7 +369,7 @@ export default function spotify(rl) {
384
369
  type: "track",
385
370
  limit: p.limit ?? 50,
386
371
  };
387
- const data = (await api(t(ctx), "GET", "/search", undefined, qs));
372
+ const data = (await api(ctx, "GET", "search", undefined, qs));
388
373
  return data.tracks.items;
389
374
  },
390
375
  });
@@ -397,7 +382,7 @@ export default function spotify(rl) {
397
382
  const qs = {};
398
383
  if (input?.limit)
399
384
  qs.limit = input.limit;
400
- const data = (await api(t(ctx), "GET", "/me/tracks", undefined, qs));
385
+ const data = (await api(ctx, "GET", "me/tracks", undefined, qs));
401
386
  return data.items;
402
387
  },
403
388
  });
@@ -410,7 +395,7 @@ export default function spotify(rl) {
410
395
  const qs = { type: "artist" };
411
396
  if (input?.limit)
412
397
  qs.limit = input.limit;
413
- const data = (await api(t(ctx), "GET", "/me/following", undefined, qs));
398
+ const data = (await api(ctx, "GET", "me/following", undefined, qs));
414
399
  return data.artists.items;
415
400
  },
416
401
  });
@@ -0,0 +1,13 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /** A personal API key in the api-key header, to Stackby's one API origin. */
3
+ export const stackbyCredential = staticCredential({
4
+ id: "stackby",
5
+ auth: { kind: "apiKey", header: "api-key" },
6
+ local: { secret: "apiKey" },
7
+ targets: {
8
+ api: {
9
+ baseUrl: "https://stackby.com/api/betav1/",
10
+ methods: ["GET", "POST", "DELETE"],
11
+ },
12
+ },
13
+ });