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,30 +1,18 @@
1
- const BASE_URL = "https://api.helpscout.net/v2";
2
- async function apiRequest(token, 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 { credentialOk, jsonAnswer, pathSegment, } from "../../_shared/credentials.js";
2
+ import { helpscoutCredential } from "./credentials.js";
3
+ async function apiRequest(ctx, method, endpoint, body, qs) {
4
+ const res = await credentialOk(ctx, helpscoutCredential, "helpscout", {
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 &&
18
- Object.keys(body).length > 0 &&
19
- method !== "GET" &&
20
- method !== "DELETE")
21
- opts.body = JSON.stringify(body);
22
- const res = await fetch(url.toString(), opts);
23
- if (!res.ok)
24
- throw new Error(`HelpScout API error ${res.status}: ${await res.text()}`);
8
+ query: qs,
9
+ ...(body && Object.keys(body).length > 0 && method !== "GET"
10
+ ? { json: body }
11
+ : {}),
12
+ });
25
13
  if (res.status === 201 || res.status === 204)
26
14
  return { success: true, location: res.headers.get("Location") };
27
- return res.json();
15
+ return jsonAnswer(res);
28
16
  }
29
17
  function unwrapEmbedded(data, key) {
30
18
  if (data &&
@@ -37,6 +25,7 @@ function unwrapEmbedded(data, key) {
37
25
  export default function helpscout(rl) {
38
26
  rl.setName("helpscout");
39
27
  rl.setVersion("0.1.0");
28
+ rl.setCredential(helpscoutCredential);
40
29
  rl.setConnectionSchema({
41
30
  accessToken: {
42
31
  type: "string",
@@ -45,7 +34,6 @@ export default function helpscout(rl) {
45
34
  env: "HELPSCOUT_ACCESS_TOKEN",
46
35
  },
47
36
  });
48
- const tok = (ctx) => ctx.connection.config.accessToken;
49
37
  // ── Conversation ────────────────────────────────────
50
38
  rl.registerAction("conversation.create", {
51
39
  access: "write",
@@ -88,7 +76,7 @@ export default function helpscout(rl) {
88
76
  body.status = status;
89
77
  if (tags)
90
78
  body.tags = tags;
91
- return apiRequest(tok(ctx), "POST", "/conversations", body);
79
+ return apiRequest(ctx, "POST", "conversations", body);
92
80
  },
93
81
  });
94
82
  rl.registerAction("conversation.get", {
@@ -102,7 +90,7 @@ export default function helpscout(rl) {
102
90
  },
103
91
  },
104
92
  async execute(input, ctx) {
105
- return apiRequest(tok(ctx), "GET", `/conversations/${input.conversationId}`);
93
+ return apiRequest(ctx, "GET", `conversations/${pathSegment(input.conversationId)}`);
106
94
  },
107
95
  });
108
96
  rl.registerAction("conversation.list", {
@@ -133,7 +121,7 @@ export default function helpscout(rl) {
133
121
  qs.pageSize = limit;
134
122
  if (page)
135
123
  qs.page = page;
136
- return unwrapEmbedded(await apiRequest(tok(ctx), "GET", "/conversations", undefined, qs), "conversations");
124
+ return unwrapEmbedded(await apiRequest(ctx, "GET", "conversations", undefined, qs), "conversations");
137
125
  },
138
126
  });
139
127
  rl.registerAction("conversation.delete", {
@@ -147,7 +135,7 @@ export default function helpscout(rl) {
147
135
  },
148
136
  },
149
137
  async execute(input, ctx) {
150
- await apiRequest(tok(ctx), "DELETE", `/conversations/${input.conversationId}`);
138
+ await apiRequest(ctx, "DELETE", `conversations/${pathSegment(input.conversationId)}`);
151
139
  return { success: true };
152
140
  },
153
141
  });
@@ -174,7 +162,7 @@ export default function helpscout(rl) {
174
162
  body.emails = emails;
175
163
  if (phones)
176
164
  body.phones = phones;
177
- return apiRequest(tok(ctx), "POST", "/customers", body);
165
+ return apiRequest(ctx, "POST", "customers", body);
178
166
  },
179
167
  });
180
168
  rl.registerAction("customer.get", {
@@ -188,7 +176,7 @@ export default function helpscout(rl) {
188
176
  },
189
177
  },
190
178
  async execute(input, ctx) {
191
- return apiRequest(tok(ctx), "GET", `/customers/${input.customerId}`);
179
+ return apiRequest(ctx, "GET", `customers/${pathSegment(input.customerId)}`);
192
180
  },
193
181
  });
194
182
  rl.registerAction("customer.list", {
@@ -205,7 +193,7 @@ export default function helpscout(rl) {
205
193
  qs.pageSize = limit;
206
194
  if (page)
207
195
  qs.page = page;
208
- return unwrapEmbedded(await apiRequest(tok(ctx), "GET", "/customers", undefined, qs), "customers");
196
+ return unwrapEmbedded(await apiRequest(ctx, "GET", "customers", undefined, qs), "customers");
209
197
  },
210
198
  });
211
199
  rl.registerAction("customer.update", {
@@ -225,7 +213,7 @@ export default function helpscout(rl) {
225
213
  },
226
214
  async execute(input, ctx) {
227
215
  const { customerId, properties } = input;
228
- return apiRequest(tok(ctx), "PUT", `/customers/${customerId}`, properties);
216
+ return apiRequest(ctx, "PUT", `customers/${pathSegment(customerId)}`, properties);
229
217
  },
230
218
  });
231
219
  rl.registerAction("customer.getProperties", {
@@ -239,7 +227,7 @@ export default function helpscout(rl) {
239
227
  },
240
228
  },
241
229
  async execute(input, ctx) {
242
- return apiRequest(tok(ctx), "GET", `/customers/${input.customerId}/properties`);
230
+ return apiRequest(ctx, "GET", `customers/${pathSegment(input.customerId)}/properties`);
243
231
  },
244
232
  });
245
233
  // ── Mailbox ─────────────────────────────────────────
@@ -250,14 +238,14 @@ export default function helpscout(rl) {
250
238
  mailboxId: { type: "number", required: true, description: "Mailbox ID" },
251
239
  },
252
240
  async execute(input, ctx) {
253
- return apiRequest(tok(ctx), "GET", `/mailboxes/${input.mailboxId}`);
241
+ return apiRequest(ctx, "GET", `mailboxes/${pathSegment(input.mailboxId)}`);
254
242
  },
255
243
  });
256
244
  rl.registerAction("mailbox.list", {
257
245
  access: "read",
258
246
  description: "List mailboxes",
259
247
  async execute(_input, ctx) {
260
- return unwrapEmbedded(await apiRequest(tok(ctx), "GET", "/mailboxes"), "mailboxes");
248
+ return unwrapEmbedded(await apiRequest(ctx, "GET", "mailboxes"), "mailboxes");
261
249
  },
262
250
  });
263
251
  // ── Thread ──────────────────────────────────────────
@@ -291,7 +279,7 @@ export default function helpscout(rl) {
291
279
  const body = { type, text };
292
280
  if (customer)
293
281
  body.customer = customer;
294
- return apiRequest(tok(ctx), "POST", `/conversations/${conversationId}/reply`, body);
282
+ return apiRequest(ctx, "POST", `conversations/${pathSegment(conversationId)}/reply`, body);
295
283
  },
296
284
  });
297
285
  rl.registerAction("thread.list", {
@@ -305,7 +293,7 @@ export default function helpscout(rl) {
305
293
  },
306
294
  },
307
295
  async execute(input, ctx) {
308
- return unwrapEmbedded(await apiRequest(tok(ctx), "GET", `/conversations/${input.conversationId}/threads`), "threads");
296
+ return unwrapEmbedded(await apiRequest(ctx, "GET", `conversations/${pathSegment(input.conversationId)}/threads`), "threads");
309
297
  },
310
298
  });
311
299
  }
@@ -0,0 +1,19 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /** The API version header every HighLevel request carries. */
3
+ export const HIGHLEVEL_VERSION = "2021-07-28";
4
+ /**
5
+ * An OAuth2 access token, sent as a bearer to HighLevel's one API origin.
6
+ * The Version header is a public API-version marker, not a credential.
7
+ */
8
+ export const highlevelCredential = staticCredential({
9
+ id: "highlevel",
10
+ auth: { kind: "bearer" },
11
+ local: { secret: "accessToken" },
12
+ targets: {
13
+ api: {
14
+ baseUrl: "https://services.leadconnectorhq.com/",
15
+ methods: ["GET", "POST", "PUT", "DELETE"],
16
+ allowedHeaders: ["Version"],
17
+ },
18
+ },
19
+ });
@@ -1,38 +1,22 @@
1
- const BASE = "https://services.leadconnectorhq.com";
2
- function getConn(ctx) {
3
- return {
4
- token: ctx.connection.config.accessToken,
5
- locationId: ctx.connection.config.locationId,
6
- };
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { HIGHLEVEL_VERSION, highlevelCredential } from "./credentials.js";
3
+ function locationOf(ctx) {
4
+ return ctx.connection.config.locationId;
7
5
  }
8
- async function api(token, method, path, body, qs) {
9
- const url = new URL(`${BASE}${path}`);
10
- if (qs) {
11
- for (const [k, v] of Object.entries(qs)) {
12
- if (v !== undefined && v !== null)
13
- url.searchParams.set(k, String(v));
14
- }
15
- }
16
- const init = {
6
+ function api(ctx, method, path, body, qs) {
7
+ return credentialJson(ctx, highlevelCredential, "highlevel", {
8
+ target: "api",
9
+ path,
17
10
  method,
18
- headers: {
19
- Authorization: `Bearer ${token}`,
20
- "Content-Type": "application/json",
21
- Accept: "application/json",
22
- Version: "2021-07-28",
23
- },
24
- };
25
- if (body && Object.keys(body).length > 0)
26
- init.body = JSON.stringify(body);
27
- const res = await fetch(url.toString(), init);
28
- if (!res.ok)
29
- throw new Error(`HighLevel error ${res.status}: ${await res.text()}`);
30
- const text = await res.text();
31
- return text ? JSON.parse(text) : { success: true };
11
+ query: qs,
12
+ headers: { Version: HIGHLEVEL_VERSION },
13
+ ...(body && Object.keys(body).length > 0 ? { json: body } : {}),
14
+ });
32
15
  }
33
16
  export default function highlevel(rl) {
34
17
  rl.setName("highlevel");
35
18
  rl.setVersion("0.1.0");
19
+ rl.setCredential(highlevelCredential);
36
20
  rl.setConnectionSchema({
37
21
  accessToken: {
38
22
  type: "string",
@@ -77,13 +61,13 @@ export default function highlevel(rl) {
77
61
  },
78
62
  },
79
63
  async execute(input, ctx) {
80
- const { token, locationId } = getConn(ctx);
64
+ const locationId = locationOf(ctx);
81
65
  const body = { ...input, locationId };
82
66
  if (typeof body.tags === "string")
83
67
  body.tags = body.tags
84
68
  .split(",")
85
69
  .map((t) => t.trim());
86
- const res = (await api(token, "POST", "/contacts/upsert/", body));
70
+ const res = (await api(ctx, "POST", "contacts/upsert/", body));
87
71
  return res.contact ?? res;
88
72
  },
89
73
  });
@@ -92,8 +76,7 @@ export default function highlevel(rl) {
92
76
  description: "Get a contact by ID",
93
77
  inputSchema: { id: { type: "string", required: true } },
94
78
  async execute(input, ctx) {
95
- const { token } = getConn(ctx);
96
- const res = (await api(token, "GET", `/contacts/${input.id}/`));
79
+ const res = (await api(ctx, "GET", `contacts/${pathSegment(input.id)}/`));
97
80
  return res.contact ?? res;
98
81
  },
99
82
  });
@@ -115,7 +98,7 @@ export default function highlevel(rl) {
115
98
  order: { type: "string", required: false, description: "asc or desc" },
116
99
  },
117
100
  async execute(input, ctx) {
118
- const { token, locationId } = getConn(ctx);
101
+ const locationId = locationOf(ctx);
119
102
  const p = (input ?? {});
120
103
  const qs = { locationId };
121
104
  if (p.limit)
@@ -126,7 +109,7 @@ export default function highlevel(rl) {
126
109
  qs.sortBy = p.sortBy;
127
110
  if (p.order)
128
111
  qs.order = p.order;
129
- const res = (await api(token, "GET", "/contacts/", undefined, qs));
112
+ const res = (await api(ctx, "GET", "contacts/", undefined, qs));
130
113
  return res.contacts ?? res;
131
114
  },
132
115
  });
@@ -150,13 +133,12 @@ export default function highlevel(rl) {
150
133
  customFields: { type: "object", required: false },
151
134
  },
152
135
  async execute(input, ctx) {
153
- const { token } = getConn(ctx);
154
136
  const { id, ...body } = input;
155
137
  if (typeof body.tags === "string")
156
138
  body.tags = body.tags
157
139
  .split(",")
158
140
  .map((t) => t.trim());
159
- const res = (await api(token, "PUT", `/contacts/${id}/`, body));
141
+ const res = (await api(ctx, "PUT", `contacts/${pathSegment(id)}/`, body));
160
142
  return res.contact ?? res;
161
143
  },
162
144
  });
@@ -165,8 +147,7 @@ export default function highlevel(rl) {
165
147
  description: "Delete a contact",
166
148
  inputSchema: { id: { type: "string", required: true } },
167
149
  async execute(input, ctx) {
168
- const { token } = getConn(ctx);
169
- await api(token, "DELETE", `/contacts/${input.id}/`);
150
+ await api(ctx, "DELETE", `contacts/${pathSegment(input.id)}/`);
170
151
  return { success: true };
171
152
  },
172
153
  });
@@ -194,7 +175,7 @@ export default function highlevel(rl) {
194
175
  tags: { type: "object", required: false },
195
176
  },
196
177
  async execute(input, ctx) {
197
- const { token, locationId } = getConn(ctx);
178
+ const locationId = locationOf(ctx);
198
179
  const body = { ...input, locationId };
199
180
  if (body.stageId) {
200
181
  body.pipelineStageId = body.stageId;
@@ -204,7 +185,7 @@ export default function highlevel(rl) {
204
185
  body.tags = body.tags
205
186
  .split(",")
206
187
  .map((t) => t.trim());
207
- return api(token, "POST", "/opportunities/", body);
188
+ return api(ctx, "POST", "opportunities/", body);
208
189
  },
209
190
  });
210
191
  rl.registerAction("opportunity.get", {
@@ -212,8 +193,7 @@ export default function highlevel(rl) {
212
193
  description: "Get an opportunity",
213
194
  inputSchema: { id: { type: "string", required: true } },
214
195
  async execute(input, ctx) {
215
- const { token } = getConn(ctx);
216
- return api(token, "GET", `/opportunities/${input.id}`);
196
+ return api(ctx, "GET", `opportunities/${pathSegment(input.id)}`);
217
197
  },
218
198
  });
219
199
  rl.registerAction("opportunity.list", {
@@ -230,7 +210,7 @@ export default function highlevel(rl) {
230
210
  endDate: { type: "string", required: false },
231
211
  },
232
212
  async execute(input, ctx) {
233
- const { token, locationId } = getConn(ctx);
213
+ const locationId = locationOf(ctx);
234
214
  const p = (input ?? {});
235
215
  const qs = { location_id: locationId };
236
216
  if (p.limit)
@@ -249,7 +229,7 @@ export default function highlevel(rl) {
249
229
  qs.startDate = new Date(p.startDate).getTime();
250
230
  if (p.endDate)
251
231
  qs.endDate = new Date(p.endDate).getTime();
252
- const res = (await api(token, "GET", "/opportunities/search", undefined, qs));
232
+ const res = (await api(ctx, "GET", "opportunities/search", undefined, qs));
253
233
  return res.opportunities ?? res;
254
234
  },
255
235
  });
@@ -266,13 +246,12 @@ export default function highlevel(rl) {
266
246
  assignedTo: { type: "string", required: false },
267
247
  },
268
248
  async execute(input, ctx) {
269
- const { token } = getConn(ctx);
270
249
  const { id, ...body } = input;
271
250
  if (body.stageId) {
272
251
  body.pipelineStageId = body.stageId;
273
252
  delete body.stageId;
274
253
  }
275
- return api(token, "PUT", `/opportunities/${id}`, body);
254
+ return api(ctx, "PUT", `opportunities/${pathSegment(id)}`, body);
276
255
  },
277
256
  });
278
257
  rl.registerAction("opportunity.delete", {
@@ -280,8 +259,7 @@ export default function highlevel(rl) {
280
259
  description: "Delete an opportunity",
281
260
  inputSchema: { id: { type: "string", required: true } },
282
261
  async execute(input, ctx) {
283
- const { token } = getConn(ctx);
284
- await api(token, "DELETE", `/opportunities/${input.id}`);
262
+ await api(ctx, "DELETE", `opportunities/${pathSegment(input.id)}`);
285
263
  return { success: true };
286
264
  },
287
265
  });
@@ -298,9 +276,8 @@ export default function highlevel(rl) {
298
276
  assignedTo: { type: "string", required: false },
299
277
  },
300
278
  async execute(input, ctx) {
301
- const { token } = getConn(ctx);
302
279
  const { contactId, ...body } = input;
303
- return api(token, "POST", `/contacts/${contactId}/tasks/`, body);
280
+ return api(ctx, "POST", `contacts/${pathSegment(contactId)}/tasks/`, body);
304
281
  },
305
282
  });
306
283
  rl.registerAction("task.get", {
@@ -311,9 +288,8 @@ export default function highlevel(rl) {
311
288
  taskId: { type: "string", required: true },
312
289
  },
313
290
  async execute(input, ctx) {
314
- const { token } = getConn(ctx);
315
291
  const p = input;
316
- return api(token, "GET", `/contacts/${p.contactId}/tasks/${p.taskId}/`);
292
+ return api(ctx, "GET", `contacts/${pathSegment(p.contactId)}/tasks/${pathSegment(p.taskId)}/`);
317
293
  },
318
294
  });
319
295
  rl.registerAction("task.list", {
@@ -321,8 +297,7 @@ export default function highlevel(rl) {
321
297
  description: "List tasks for a contact",
322
298
  inputSchema: { contactId: { type: "string", required: true } },
323
299
  async execute(input, ctx) {
324
- const { token } = getConn(ctx);
325
- const res = (await api(token, "GET", `/contacts/${input.contactId}/tasks/`));
300
+ const res = (await api(ctx, "GET", `contacts/${pathSegment(input.contactId)}/tasks/`));
326
301
  return res.tasks ?? res;
327
302
  },
328
303
  });
@@ -339,9 +314,8 @@ export default function highlevel(rl) {
339
314
  assignedTo: { type: "string", required: false },
340
315
  },
341
316
  async execute(input, ctx) {
342
- const { token } = getConn(ctx);
343
317
  const { contactId, taskId, ...body } = input;
344
- return api(token, "PUT", `/contacts/${contactId}/tasks/${taskId}/`, body);
318
+ return api(ctx, "PUT", `contacts/${pathSegment(contactId)}/tasks/${pathSegment(taskId)}/`, body);
345
319
  },
346
320
  });
347
321
  rl.registerAction("task.delete", {
@@ -352,9 +326,8 @@ export default function highlevel(rl) {
352
326
  taskId: { type: "string", required: true },
353
327
  },
354
328
  async execute(input, ctx) {
355
- const { token } = getConn(ctx);
356
329
  const p = input;
357
- await api(token, "DELETE", `/contacts/${p.contactId}/tasks/${p.taskId}/`);
330
+ await api(ctx, "DELETE", `contacts/${pathSegment(p.contactId)}/tasks/${pathSegment(p.taskId)}/`);
358
331
  return { success: true };
359
332
  },
360
333
  });
@@ -383,8 +356,7 @@ export default function highlevel(rl) {
383
356
  toNotify: { type: "boolean", required: false },
384
357
  },
385
358
  async execute(input, ctx) {
386
- const { token } = getConn(ctx);
387
- return api(token, "POST", "/calendars/events/appointments", input);
359
+ return api(ctx, "POST", "calendars/events/appointments", input);
388
360
  },
389
361
  });
390
362
  rl.registerAction("calendar.getFreeSlots", {
@@ -406,7 +378,6 @@ export default function highlevel(rl) {
406
378
  userId: { type: "string", required: false },
407
379
  },
408
380
  async execute(input, ctx) {
409
- const { token } = getConn(ctx);
410
381
  const p = input;
411
382
  const qs = {
412
383
  startDate: p.startDate,
@@ -416,7 +387,7 @@ export default function highlevel(rl) {
416
387
  qs.timezone = p.timezone;
417
388
  if (p.userId)
418
389
  qs.userId = p.userId;
419
- return api(token, "GET", `/calendars/${p.calendarId}/free-slots`, undefined, qs);
390
+ return api(ctx, "GET", `calendars/${pathSegment(p.calendarId)}/free-slots`, undefined, qs);
420
391
  },
421
392
  });
422
393
  }
@@ -0,0 +1,27 @@
1
+ import { configFlag, httpsBase, staticCredential, } from "../../_shared/credentials.js";
2
+ /**
3
+ * A long-lived access token, sent as a bearer to the instance's own /api/
4
+ * base. The target carries the scheme `ssl` selects, and config-derived
5
+ * hosts are HTTPS-only: httpsBase refuses the plain-http base that
6
+ * `ssl: false` (the default) selects, as invalid_credentials.
7
+ */
8
+ export const homeAssistantCredential = staticCredential({
9
+ id: "homeAssistant",
10
+ auth: { kind: "bearer" },
11
+ local: { secret: "accessToken" },
12
+ targets: (config) => {
13
+ const scheme = configFlag(config.ssl) ? "https" : "http";
14
+ return {
15
+ api: {
16
+ baseUrl: httpsBase(`${scheme}://${String(config.host)}:${config.port ?? 8123}`, "api/"),
17
+ methods: ["GET", "POST"],
18
+ },
19
+ };
20
+ },
21
+ probe: {
22
+ target: "api",
23
+ path: "config",
24
+ method: "GET",
25
+ acceptedStatuses: [200],
26
+ },
27
+ });
@@ -1,44 +1,21 @@
1
- async function apiRequest(baseUrl, token, method, endpoint, body, qs) {
2
- const url = new URL(`${baseUrl}/api${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
- Authorization: `Bearer ${token}`,
13
- "Content-Type": "application/json",
14
- },
15
- };
16
- if (body &&
17
- Object.keys(body).length > 0 &&
18
- method !== "GET" &&
19
- method !== "DELETE")
20
- opts.body = JSON.stringify(body);
21
- const res = await fetch(url.toString(), opts);
22
- if (!res.ok)
23
- throw new Error(`Home Assistant API error ${res.status}: ${await res.text()}`);
24
- return res.json();
25
- }
26
- function getConn(ctx) {
27
- const cfg = ctx.connection.config;
28
- const ssl = cfg.ssl === true || cfg.ssl === "true";
29
- const proto = ssl ? "https" : "http";
30
- return {
31
- baseUrl: `${proto}://${cfg.host}:${cfg.port ?? 8123}`,
32
- token: cfg.accessToken,
33
- };
34
- }
1
+ import { credentialJson, credentialOk, pathSegment, } from "../../_shared/credentials.js";
2
+ import { homeAssistantCredential } from "./credentials.js";
3
+ /** One Home Assistant call: every endpoint is a path beneath /api/. */
35
4
  function ha(ctx, method, endpoint, body, qs) {
36
- const { baseUrl, token } = getConn(ctx);
37
- return apiRequest(baseUrl, token, method, endpoint, body, qs);
5
+ return credentialJson(ctx, homeAssistantCredential, "homeAssistant", {
6
+ target: "api",
7
+ path: endpoint,
8
+ method,
9
+ query: qs,
10
+ ...(body && Object.keys(body).length > 0 && method !== "GET"
11
+ ? { json: body }
12
+ : {}),
13
+ });
38
14
  }
39
15
  export default function homeAssistant(rl) {
40
16
  rl.setName("homeAssistant");
41
17
  rl.setVersion("0.1.0");
18
+ rl.setCredential(homeAssistantCredential);
42
19
  rl.setConnectionSchema({
43
20
  host: {
44
21
  type: "string",
@@ -69,21 +46,21 @@ export default function homeAssistant(rl) {
69
46
  access: "read",
70
47
  description: "Get Home Assistant configuration",
71
48
  async execute(_input, ctx) {
72
- return ha(ctx, "GET", "/config");
49
+ return ha(ctx, "GET", "config");
73
50
  },
74
51
  });
75
52
  rl.registerAction("config.check", {
76
53
  access: "read",
77
54
  description: "Check if configuration is valid",
78
55
  async execute(_input, ctx) {
79
- return ha(ctx, "POST", "/config/core/check_config");
56
+ return ha(ctx, "POST", "config/core/check_config");
80
57
  },
81
58
  });
82
59
  rl.registerAction("service.list", {
83
60
  access: "read",
84
61
  description: "List available services",
85
62
  async execute(_input, ctx) {
86
- return ha(ctx, "GET", "/services");
63
+ return ha(ctx, "GET", "services");
87
64
  },
88
65
  });
89
66
  rl.registerAction("service.call", {
@@ -108,14 +85,14 @@ export default function homeAssistant(rl) {
108
85
  },
109
86
  async execute(input, ctx) {
110
87
  const { domain, service, serviceData } = input;
111
- return ha(ctx, "POST", `/services/${domain}/${service}`, serviceData ?? {});
88
+ return ha(ctx, "POST", `services/${pathSegment(domain)}/${pathSegment(service)}`, serviceData ?? {});
112
89
  },
113
90
  });
114
91
  rl.registerAction("state.list", {
115
92
  access: "read",
116
93
  description: "List all entity states",
117
94
  async execute(_input, ctx) {
118
- return ha(ctx, "GET", "/states");
95
+ return ha(ctx, "GET", "states");
119
96
  },
120
97
  });
121
98
  rl.registerAction("state.get", {
@@ -129,7 +106,7 @@ export default function homeAssistant(rl) {
129
106
  },
130
107
  },
131
108
  async execute(input, ctx) {
132
- return ha(ctx, "GET", `/states/${input.entityId}`);
109
+ return ha(ctx, "GET", `states/${pathSegment(input.entityId)}`);
133
110
  },
134
111
  });
135
112
  rl.registerAction("state.set", {
@@ -149,14 +126,14 @@ export default function homeAssistant(rl) {
149
126
  const body = { state };
150
127
  if (attributes)
151
128
  body.attributes = attributes;
152
- return ha(ctx, "POST", `/states/${entityId}`, body);
129
+ return ha(ctx, "POST", `states/${pathSegment(entityId)}`, body);
153
130
  },
154
131
  });
155
132
  rl.registerAction("event.list", {
156
133
  access: "read",
157
134
  description: "List event types",
158
135
  async execute(_input, ctx) {
159
- return ha(ctx, "GET", "/events");
136
+ return ha(ctx, "GET", "events");
160
137
  },
161
138
  });
162
139
  rl.registerAction("event.fire", {
@@ -168,14 +145,14 @@ export default function homeAssistant(rl) {
168
145
  },
169
146
  async execute(input, ctx) {
170
147
  const { eventType, eventData } = input;
171
- return ha(ctx, "POST", `/events/${eventType}`, eventData ?? {});
148
+ return ha(ctx, "POST", `events/${pathSegment(eventType)}`, eventData ?? {});
172
149
  },
173
150
  });
174
151
  rl.registerAction("log.getErrors", {
175
152
  access: "read",
176
153
  description: "Get error log",
177
154
  async execute(_input, ctx) {
178
- return ha(ctx, "GET", "/error_log");
155
+ return ha(ctx, "GET", "error_log");
179
156
  },
180
157
  });
181
158
  rl.registerAction("log.getLogbook", {
@@ -200,9 +177,9 @@ export default function homeAssistant(rl) {
200
177
  },
201
178
  async execute(input, ctx) {
202
179
  const { entityId, startTime, endTime } = (input ?? {});
203
- let endpoint = "/logbook";
180
+ let endpoint = "logbook";
204
181
  if (startTime)
205
- endpoint += `/${startTime}`;
182
+ endpoint += `/${pathSegment(startTime)}`;
206
183
  const qs = {};
207
184
  if (entityId)
208
185
  qs.entity = entityId;
@@ -222,9 +199,14 @@ export default function homeAssistant(rl) {
222
199
  },
223
200
  },
224
201
  async execute(input, ctx) {
225
- return ha(ctx, "POST", "/template", {
226
- template: input.template,
202
+ // /api/template answers the rendered value as plain text, not JSON.
203
+ const res = await credentialOk(ctx, homeAssistantCredential, "homeAssistant", {
204
+ target: "api",
205
+ path: "template",
206
+ method: "POST",
207
+ json: { template: input.template },
227
208
  });
209
+ return res.text();
228
210
  },
229
211
  });
230
212
  rl.registerAction("history.get", {
@@ -245,9 +227,9 @@ export default function homeAssistant(rl) {
245
227
  },
246
228
  async execute(input, ctx) {
247
229
  const { entityIds, startTime, endTime } = (input ?? {});
248
- let endpoint = "/history/period";
230
+ let endpoint = "history/period";
249
231
  if (startTime)
250
- endpoint += `/${startTime}`;
232
+ endpoint += `/${pathSegment(startTime)}`;
251
233
  const qs = {};
252
234
  if (entityIds)
253
235
  qs.filter_entity_id = entityIds;