runline 0.33.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 (515) 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 +19 -55
  28. package/dist/plugins/_shared/shiftCredentials.js +83 -0
  29. package/dist/plugins/actionNetwork/src/credentials.js +14 -0
  30. package/dist/plugins/actionNetwork/src/index.js +39 -50
  31. package/dist/plugins/activeCampaign/src/credentials.js +22 -0
  32. package/dist/plugins/activeCampaign/src/index.js +61 -132
  33. package/dist/plugins/adalo/src/credentials.js +16 -0
  34. package/dist/plugins/adalo/src/index.js +19 -43
  35. package/dist/plugins/affinity/src/credentials.js +19 -0
  36. package/dist/plugins/affinity/src/index.js +29 -54
  37. package/dist/plugins/agileCrm/src/credentials.js +16 -0
  38. package/dist/plugins/agileCrm/src/index.js +46 -112
  39. package/dist/plugins/airtable/src/credentials.js +19 -0
  40. package/dist/plugins/airtable/src/index.js +37 -50
  41. package/dist/plugins/airtop/src/credentials.js +20 -0
  42. package/dist/plugins/airtop/src/index.js +51 -75
  43. package/dist/plugins/apiTemplateIo/src/credentials.js +19 -0
  44. package/dist/plugins/apiTemplateIo/src/index.js +14 -31
  45. package/dist/plugins/asana/src/credentials.js +19 -0
  46. package/dist/plugins/asana/src/index.js +51 -72
  47. package/dist/plugins/autopilot/src/credentials.js +19 -0
  48. package/dist/plugins/autopilot/src/index.js +38 -45
  49. package/dist/plugins/bambooHr/src/credentials.js +16 -0
  50. package/dist/plugins/bambooHr/src/index.js +41 -67
  51. package/dist/plugins/bannerbear/src/credentials.js +19 -0
  52. package/dist/plugins/bannerbear/src/index.js +15 -27
  53. package/dist/plugins/baserow/src/credentials.js +17 -0
  54. package/dist/plugins/baserow/src/index.js +23 -49
  55. package/dist/plugins/beeminder/src/credentials.js +19 -0
  56. package/dist/plugins/beeminder/src/index.js +32 -54
  57. package/dist/plugins/bitly/src/credentials.js +19 -0
  58. package/dist/plugins/bitly/src/index.js +12 -26
  59. package/dist/plugins/bitwarden/src/credentials.js +62 -0
  60. package/dist/plugins/bitwarden/src/index.js +34 -80
  61. package/dist/plugins/box/src/credentials.js +19 -0
  62. package/dist/plugins/box/src/index.js +24 -49
  63. package/dist/plugins/brandfetch/src/credentials.js +13 -0
  64. package/dist/plugins/brandfetch/src/index.js +12 -17
  65. package/dist/plugins/brevo/src/credentials.js +19 -0
  66. package/dist/plugins/brevo/src/index.js +30 -51
  67. package/dist/plugins/bubble/src/credentials.js +28 -0
  68. package/dist/plugins/bubble/src/index.js +29 -65
  69. package/dist/plugins/chargebee/src/credentials.js +16 -0
  70. package/dist/plugins/chargebee/src/index.js +15 -45
  71. package/dist/plugins/circleci/src/credentials.js +19 -0
  72. package/dist/plugins/circleci/src/index.js +19 -39
  73. package/dist/plugins/ciscoWebex/src/credentials.js +19 -0
  74. package/dist/plugins/ciscoWebex/src/index.js +43 -61
  75. package/dist/plugins/clearbit/src/credentials.js +22 -0
  76. package/dist/plugins/clearbit/src/index.js +11 -21
  77. package/dist/plugins/clickup/src/credentials.js +19 -0
  78. package/dist/plugins/clickup/src/index.js +85 -117
  79. package/dist/plugins/clockify/src/credentials.js +19 -0
  80. package/dist/plugins/clockify/src/index.js +46 -61
  81. package/dist/plugins/cloudflare/src/credentials.js +19 -0
  82. package/dist/plugins/cloudflare/src/index.js +19 -34
  83. package/dist/plugins/cockpit/src/credentials.js +17 -0
  84. package/dist/plugins/cockpit/src/index.js +18 -31
  85. package/dist/plugins/coda/src/credentials.js +19 -0
  86. package/dist/plugins/coda/src/index.js +33 -50
  87. package/dist/plugins/coingecko/src/credentials.js +20 -0
  88. package/dist/plugins/coingecko/src/index.js +24 -34
  89. package/dist/plugins/contentful/src/credentials.js +26 -0
  90. package/dist/plugins/contentful/src/index.js +19 -40
  91. package/dist/plugins/convertkit/src/credentials.js +26 -0
  92. package/dist/plugins/convertkit/src/index.js +27 -45
  93. package/dist/plugins/copper/src/credentials.js +17 -0
  94. package/dist/plugins/copper/src/index.js +25 -47
  95. package/dist/plugins/cortex/src/credentials.js +28 -0
  96. package/dist/plugins/cortex/src/index.js +26 -49
  97. package/dist/plugins/currents/src/credentials.js +19 -0
  98. package/dist/plugins/currents/src/index.js +46 -59
  99. package/dist/plugins/customerIo/src/credentials.js +52 -0
  100. package/dist/plugins/customerIo/src/index.js +30 -58
  101. package/dist/plugins/databricks/src/credentials.js +13 -0
  102. package/dist/plugins/databricks/src/index.js +51 -103
  103. package/dist/plugins/deepl/src/credentials.js +19 -0
  104. package/dist/plugins/deepl/src/index.js +13 -39
  105. package/dist/plugins/demio/src/credentials.js +26 -0
  106. package/dist/plugins/demio/src/index.js +17 -41
  107. package/dist/plugins/dhl/src/credentials.js +13 -0
  108. package/dist/plugins/dhl/src/index.js +8 -19
  109. package/dist/plugins/discord/src/credentials.js +19 -0
  110. package/dist/plugins/discord/src/index.js +30 -58
  111. package/dist/plugins/discourse/src/credentials.js +18 -0
  112. package/dist/plugins/discourse/src/index.js +36 -53
  113. package/dist/plugins/disqus/src/credentials.js +13 -0
  114. package/dist/plugins/disqus/src/index.js +14 -32
  115. package/dist/plugins/drift/src/credentials.js +13 -0
  116. package/dist/plugins/drift/src/index.js +16 -26
  117. package/dist/plugins/dropbox/src/credentials.js +13 -0
  118. package/dist/plugins/dropbox/src/index.js +23 -30
  119. package/dist/plugins/dropcontact/src/credentials.js +13 -0
  120. package/dist/plugins/dropcontact/src/index.js +13 -18
  121. package/dist/plugins/egoi/src/credentials.js +19 -0
  122. package/dist/plugins/egoi/src/index.js +23 -38
  123. package/dist/plugins/elasticsearch/src/credentials.js +18 -0
  124. package/dist/plugins/elasticsearch/src/index.js +27 -48
  125. package/dist/plugins/elevenlabs/src/credentials.js +30 -0
  126. package/dist/plugins/elevenlabs/src/index.js +4 -1
  127. package/dist/plugins/elevenlabs/src/schemas.js +2 -1
  128. package/dist/plugins/elevenlabs/src/shared.js +74 -35
  129. package/dist/plugins/elevenlabs/src/workflows.js +2 -2
  130. package/dist/plugins/emelia/src/credentials.js +14 -0
  131. package/dist/plugins/emelia/src/index.js +19 -23
  132. package/dist/plugins/erpnext/src/credentials.js +27 -0
  133. package/dist/plugins/erpnext/src/index.js +21 -42
  134. package/dist/plugins/facebookGraph/src/credentials.js +20 -0
  135. package/dist/plugins/facebookGraph/src/index.js +39 -37
  136. package/dist/plugins/fal/src/credentials.js +14 -0
  137. package/dist/plugins/fal/src/index.js +4 -2
  138. package/dist/plugins/fal/src/shared.js +58 -63
  139. package/dist/plugins/freshdesk/src/credentials.js +20 -0
  140. package/dist/plugins/freshdesk/src/index.js +25 -46
  141. package/dist/plugins/freshservice/src/credentials.js +16 -0
  142. package/dist/plugins/freshservice/src/index.js +37 -58
  143. package/dist/plugins/freshworksCrm/src/credentials.js +16 -0
  144. package/dist/plugins/freshworksCrm/src/index.js +20 -39
  145. package/dist/plugins/getresponse/src/credentials.js +22 -0
  146. package/dist/plugins/getresponse/src/index.js +20 -32
  147. package/dist/plugins/gett/src/credentials.js +64 -0
  148. package/dist/plugins/gett/src/index.js +11 -6
  149. package/dist/plugins/gett/src/login.js +24 -0
  150. package/dist/plugins/gett/src/session.js +15 -38
  151. package/dist/plugins/gett/src/shared.js +41 -84
  152. package/dist/plugins/ghost/src/credentials.js +36 -0
  153. package/dist/plugins/ghost/src/index.js +18 -59
  154. package/dist/plugins/github/src/credentials.js +18 -0
  155. package/dist/plugins/github/src/index.js +55 -78
  156. package/dist/plugins/gitlab/src/credentials.js +24 -0
  157. package/dist/plugins/gitlab/src/index.js +29 -48
  158. package/dist/plugins/gmail/src/index.js +26 -24
  159. package/dist/plugins/gong/src/credentials.js +16 -0
  160. package/dist/plugins/gong/src/index.js +16 -32
  161. package/dist/plugins/googleAppsScript/src/index.js +108 -42
  162. package/dist/plugins/googleCalendar/src/index.js +15 -13
  163. package/dist/plugins/googleContacts/src/index.js +12 -9
  164. package/dist/plugins/googleDocs/src/index.js +2 -0
  165. package/dist/plugins/googleDocs/src/shared.js +2 -1
  166. package/dist/plugins/googleDrive/src/index.js +50 -53
  167. package/dist/plugins/googleImage/src/credentials.js +14 -0
  168. package/dist/plugins/googleImage/src/index.js +14 -25
  169. package/dist/plugins/googleSheets/src/index.js +26 -27
  170. package/dist/plugins/googleSlides/src/index.js +6 -4
  171. package/dist/plugins/googleTasks/src/index.js +13 -11
  172. package/dist/plugins/gotify/src/credentials.js +32 -0
  173. package/dist/plugins/gotify/src/index.js +14 -36
  174. package/dist/plugins/gotowebinar/src/credentials.js +13 -0
  175. package/dist/plugins/gotowebinar/src/index.js +52 -69
  176. package/dist/plugins/grafana/src/credentials.js +16 -0
  177. package/dist/plugins/grafana/src/index.js +34 -53
  178. package/dist/plugins/graphql/src/credentials.js +42 -0
  179. package/dist/plugins/graphql/src/index.js +21 -46
  180. package/dist/plugins/grist/src/credentials.js +30 -0
  181. package/dist/plugins/grist/src/index.js +14 -43
  182. package/dist/plugins/halopsa/src/credentials.js +56 -0
  183. package/dist/plugins/halopsa/src/index.js +20 -47
  184. package/dist/plugins/harvest/src/credentials.js +20 -0
  185. package/dist/plugins/harvest/src/index.js +24 -43
  186. package/dist/plugins/helpscout/src/credentials.js +13 -0
  187. package/dist/plugins/helpscout/src/index.js +26 -38
  188. package/dist/plugins/highlevel/src/credentials.js +19 -0
  189. package/dist/plugins/highlevel/src/index.js +34 -63
  190. package/dist/plugins/homeAssistant/src/credentials.js +27 -0
  191. package/dist/plugins/homeAssistant/src/index.js +34 -52
  192. package/dist/plugins/hubspot/src/credentials.js +16 -0
  193. package/dist/plugins/hubspot/src/index.js +29 -41
  194. package/dist/plugins/humanticAi/src/credentials.js +13 -0
  195. package/dist/plugins/humanticAi/src/index.js +15 -22
  196. package/dist/plugins/hunter/src/credentials.js +13 -0
  197. package/dist/plugins/hunter/src/index.js +18 -17
  198. package/dist/plugins/intercom/src/credentials.js +19 -0
  199. package/dist/plugins/intercom/src/index.js +25 -38
  200. package/dist/plugins/iterable/src/credentials.js +17 -0
  201. package/dist/plugins/iterable/src/index.js +26 -40
  202. package/dist/plugins/jenkins/src/credentials.js +16 -0
  203. package/dist/plugins/jenkins/src/index.js +22 -36
  204. package/dist/plugins/jira/src/credentials.js +16 -0
  205. package/dist/plugins/jira/src/index.js +35 -61
  206. package/dist/plugins/keap/src/credentials.js +19 -0
  207. package/dist/plugins/keap/src/index.js +43 -71
  208. package/dist/plugins/kobotoolbox/src/credentials.js +13 -0
  209. package/dist/plugins/kobotoolbox/src/index.js +46 -84
  210. package/dist/plugins/lemlist/src/credentials.js +19 -0
  211. package/dist/plugins/lemlist/src/index.js +35 -47
  212. package/dist/plugins/linear/src/attachments.js +7 -7
  213. package/dist/plugins/linear/src/comments.js +7 -7
  214. package/dist/plugins/linear/src/credentials.js +17 -0
  215. package/dist/plugins/linear/src/cycles.js +5 -5
  216. package/dist/plugins/linear/src/index.js +2 -0
  217. package/dist/plugins/linear/src/initiatives.js +6 -6
  218. package/dist/plugins/linear/src/issues.js +14 -14
  219. package/dist/plugins/linear/src/labels.js +6 -6
  220. package/dist/plugins/linear/src/organization.js +2 -2
  221. package/dist/plugins/linear/src/projects.js +12 -12
  222. package/dist/plugins/linear/src/shared.js +34 -32
  223. package/dist/plugins/linear/src/states.js +3 -3
  224. package/dist/plugins/linear/src/teams.js +4 -4
  225. package/dist/plugins/linear/src/users.js +3 -3
  226. package/dist/plugins/linear/src/views.js +5 -5
  227. package/dist/plugins/linear/src/webhooks.js +5 -5
  228. package/dist/plugins/lingvanex/src/credentials.js +13 -0
  229. package/dist/plugins/lingvanex/src/index.js +7 -9
  230. package/dist/plugins/linkedin/src/credentials.js +17 -0
  231. package/dist/plugins/linkedin/src/index.js +13 -17
  232. package/dist/plugins/lonescale/src/credentials.js +13 -0
  233. package/dist/plugins/lonescale/src/index.js +16 -26
  234. package/dist/plugins/magento/src/credentials.js +16 -0
  235. package/dist/plugins/magento/src/index.js +67 -84
  236. package/dist/plugins/mailcheck/src/credentials.js +17 -0
  237. package/dist/plugins/mailcheck/src/index.js +7 -9
  238. package/dist/plugins/mailchimp/src/credentials.js +32 -0
  239. package/dist/plugins/mailchimp/src/index.js +36 -44
  240. package/dist/plugins/mailerlite/src/credentials.js +13 -0
  241. package/dist/plugins/mailerlite/src/index.js +19 -32
  242. package/dist/plugins/mailgun/src/credentials.js +21 -0
  243. package/dist/plugins/mailgun/src/index.js +15 -21
  244. package/dist/plugins/mailjet/src/credentials.js +38 -0
  245. package/dist/plugins/mailjet/src/index.js +60 -115
  246. package/dist/plugins/mandrill/src/credentials.js +17 -0
  247. package/dist/plugins/mandrill/src/index.js +11 -12
  248. package/dist/plugins/marketstack/src/credentials.js +16 -0
  249. package/dist/plugins/marketstack/src/index.js +18 -28
  250. package/dist/plugins/matrix/src/credentials.js +19 -0
  251. package/dist/plugins/matrix/src/index.js +23 -52
  252. package/dist/plugins/mattermost/src/credentials.js +19 -0
  253. package/dist/plugins/mattermost/src/index.js +41 -73
  254. package/dist/plugins/mautic/src/credentials.js +16 -0
  255. package/dist/plugins/mautic/src/index.js +46 -62
  256. package/dist/plugins/medium/src/credentials.js +20 -0
  257. package/dist/plugins/medium/src/index.js +18 -23
  258. package/dist/plugins/messagebird/src/credentials.js +22 -0
  259. package/dist/plugins/messagebird/src/index.js +13 -18
  260. package/dist/plugins/metabase/src/credentials.js +19 -0
  261. package/dist/plugins/metabase/src/index.js +24 -40
  262. package/dist/plugins/microsoftCalendar/src/index.js +48 -12
  263. package/dist/plugins/microsoftFiles/src/index.js +90 -25
  264. package/dist/plugins/microsoftMail/src/index.js +62 -15
  265. package/dist/plugins/misp/src/credentials.js +16 -0
  266. package/dist/plugins/misp/src/index.js +60 -71
  267. package/dist/plugins/mocean/src/credentials.js +17 -0
  268. package/dist/plugins/mocean/src/index.js +11 -23
  269. package/dist/plugins/monday/src/credentials.js +14 -0
  270. package/dist/plugins/monday/src/index.js +31 -44
  271. package/dist/plugins/monicaCrm/src/credentials.js +19 -0
  272. package/dist/plugins/monicaCrm/src/index.js +25 -42
  273. package/dist/plugins/msg91/src/credentials.js +10 -0
  274. package/dist/plugins/msg91/src/index.js +15 -11
  275. package/dist/plugins/nasa/src/credentials.js +22 -0
  276. package/dist/plugins/nasa/src/index.js +24 -28
  277. package/dist/plugins/netlify/src/credentials.js +19 -0
  278. package/dist/plugins/netlify/src/index.js +27 -51
  279. package/dist/plugins/netscalerAdc/src/credentials.js +18 -0
  280. package/dist/plugins/netscalerAdc/src/index.js +16 -31
  281. package/dist/plugins/nextcloud/src/credentials.js +27 -0
  282. package/dist/plugins/nextcloud/src/index.js +55 -109
  283. package/dist/plugins/nocodb/src/credentials.js +16 -0
  284. package/dist/plugins/nocodb/src/index.js +19 -37
  285. package/dist/plugins/notion/src/credentials.js +21 -0
  286. package/dist/plugins/notion/src/index.js +25 -38
  287. package/dist/plugins/npm/src/credentials.js +19 -0
  288. package/dist/plugins/npm/src/index.js +22 -32
  289. package/dist/plugins/odoo/src/credentials.js +21 -0
  290. package/dist/plugins/odoo/src/index.js +53 -69
  291. package/dist/plugins/okta/src/credentials.js +23 -0
  292. package/dist/plugins/okta/src/index.js +30 -35
  293. package/dist/plugins/oneSimpleApi/src/credentials.js +16 -0
  294. package/dist/plugins/oneSimpleApi/src/index.js +19 -24
  295. package/dist/plugins/onfleet/src/credentials.js +23 -0
  296. package/dist/plugins/onfleet/src/index.js +42 -53
  297. package/dist/plugins/openai/src/credentials.js +13 -0
  298. package/dist/plugins/openai/src/index.js +15 -23
  299. package/dist/plugins/openweathermap/src/credentials.js +16 -0
  300. package/dist/plugins/openweathermap/src/index.js +22 -22
  301. package/dist/plugins/oura/src/credentials.js +19 -0
  302. package/dist/plugins/oura/src/index.js +13 -18
  303. package/dist/plugins/paddle/src/credentials.js +27 -0
  304. package/dist/plugins/paddle/src/index.js +20 -36
  305. package/dist/plugins/pagerduty/src/credentials.js +24 -0
  306. package/dist/plugins/pagerduty/src/index.js +30 -39
  307. package/dist/plugins/parallel/src/credentials.js +18 -0
  308. package/dist/plugins/parallel/src/index.js +16 -22
  309. package/dist/plugins/paypal/src/credentials.js +44 -0
  310. package/dist/plugins/paypal/src/index.js +14 -40
  311. package/dist/plugins/peekalink/src/credentials.js +16 -0
  312. package/dist/plugins/peekalink/src/index.js +10 -11
  313. package/dist/plugins/phantombuster/src/credentials.js +19 -0
  314. package/dist/plugins/phantombuster/src/index.js +19 -32
  315. package/dist/plugins/philipsHue/src/credentials.js +17 -0
  316. package/dist/plugins/philipsHue/src/index.js +15 -27
  317. package/dist/plugins/pipedrive/src/credentials.js +26 -0
  318. package/dist/plugins/pipedrive/src/index.js +43 -73
  319. package/dist/plugins/plaud/src/index.js +2 -1
  320. package/dist/plugins/plaud/src/shared.js +23 -19
  321. package/dist/plugins/plivo/src/credentials.js +20 -0
  322. package/dist/plugins/plivo/src/index.js +13 -19
  323. package/dist/plugins/posthog/src/credentials.js +18 -0
  324. package/dist/plugins/posthog/src/index.js +14 -20
  325. package/dist/plugins/profitwell/src/credentials.js +22 -0
  326. package/dist/plugins/profitwell/src/index.js +10 -17
  327. package/dist/plugins/pushbullet/src/credentials.js +19 -0
  328. package/dist/plugins/pushbullet/src/index.js +19 -27
  329. package/dist/plugins/pushcut/src/credentials.js +19 -0
  330. package/dist/plugins/pushcut/src/index.js +7 -8
  331. package/dist/plugins/pushover/src/credentials.js +14 -0
  332. package/dist/plugins/pushover/src/index.js +7 -12
  333. package/dist/plugins/quickbase/src/credentials.js +15 -0
  334. package/dist/plugins/quickbase/src/index.js +24 -34
  335. package/dist/plugins/quickbooks/src/credentials.js +22 -0
  336. package/dist/plugins/quickbooks/src/index.js +17 -46
  337. package/dist/plugins/raindrop/src/credentials.js +19 -0
  338. package/dist/plugins/raindrop/src/index.js +30 -32
  339. package/dist/plugins/recraft/src/credentials.js +13 -0
  340. package/dist/plugins/recraft/src/index.js +38 -27
  341. package/dist/plugins/reddit/src/credentials.js +26 -0
  342. package/dist/plugins/reddit/src/index.js +30 -34
  343. package/dist/plugins/replicate/src/credentials.js +23 -0
  344. package/dist/plugins/replicate/src/index.js +17 -27
  345. package/dist/plugins/rocketchat/src/credentials.js +17 -0
  346. package/dist/plugins/rocketchat/src/index.js +8 -19
  347. package/dist/plugins/rundeck/src/credentials.js +16 -0
  348. package/dist/plugins/rundeck/src/index.js +12 -28
  349. package/dist/plugins/salesforce/src/credentials.js +73 -0
  350. package/dist/plugins/salesforce/src/index.js +6 -0
  351. package/dist/plugins/salesforce/src/metadata.js +3 -16
  352. package/dist/plugins/salesforce/src/shared.js +25 -100
  353. package/dist/plugins/salesforce/src/sobjects.js +10 -9
  354. package/dist/plugins/salesmate/src/credentials.js +17 -0
  355. package/dist/plugins/salesmate/src/index.js +20 -37
  356. package/dist/plugins/securityScorecard/src/credentials.js +22 -0
  357. package/dist/plugins/securityScorecard/src/index.js +24 -37
  358. package/dist/plugins/segment/src/credentials.js +16 -0
  359. package/dist/plugins/segment/src/index.js +12 -16
  360. package/dist/plugins/sendgrid/src/credentials.js +13 -0
  361. package/dist/plugins/sendgrid/src/index.js +31 -35
  362. package/dist/plugins/sendy/src/credentials.js +18 -0
  363. package/dist/plugins/sendy/src/index.js +18 -24
  364. package/dist/plugins/sentry/src/credentials.js +16 -0
  365. package/dist/plugins/sentry/src/index.js +30 -98
  366. package/dist/plugins/servicenow/src/credentials.js +13 -0
  367. package/dist/plugins/servicenow/src/index.js +22 -41
  368. package/dist/plugins/shiftAtlas/src/graph.js +2 -2
  369. package/dist/plugins/shiftAtlas/src/index.js +2 -0
  370. package/dist/plugins/shiftAtlas/src/shared.js +3 -1
  371. package/dist/plugins/shiftBwm/src/index.js +4 -2
  372. package/dist/plugins/shiftBwm/src/shared.js +41 -16
  373. package/dist/plugins/shiftCrm/src/access.js +2 -2
  374. package/dist/plugins/shiftCrm/src/accounts.js +3 -3
  375. package/dist/plugins/shiftCrm/src/activities.js +3 -3
  376. package/dist/plugins/shiftCrm/src/credentials.js +6 -0
  377. package/dist/plugins/shiftCrm/src/index.js +2 -0
  378. package/dist/plugins/shiftCrm/src/opportunities.js +3 -3
  379. package/dist/plugins/shiftCrm/src/people.js +3 -3
  380. package/dist/plugins/shiftCrm/src/records.js +2 -2
  381. package/dist/plugins/shiftCrm/src/shared.js +2 -1
  382. package/dist/plugins/shiftCrm/src/tasks.js +3 -3
  383. package/dist/plugins/shiftObjects/src/credentials.js +2 -0
  384. package/dist/plugins/shiftObjects/src/index.js +2 -0
  385. package/dist/plugins/shiftObjects/src/objects.js +3 -2
  386. package/dist/plugins/shiftOcr/src/credentials.js +8 -0
  387. package/dist/plugins/shiftOcr/src/index.js +6 -5
  388. package/dist/plugins/shiftPages/src/index.js +2 -0
  389. package/dist/plugins/shiftPages/src/pages.js +5 -3
  390. package/dist/plugins/shiftPages/src/shared.js +3 -1
  391. package/dist/plugins/shiftTranscription/src/index.js +2 -0
  392. package/dist/plugins/shiftTranscription/src/shared.js +11 -1
  393. package/dist/plugins/shiftTranscription/src/transcription.js +4 -4
  394. package/dist/plugins/shiftWork/src/index.js +2 -0
  395. package/dist/plugins/shiftWork/src/issue-views.js +5 -5
  396. package/dist/plugins/shiftWork/src/issues.js +11 -7
  397. package/dist/plugins/shiftWork/src/projects.js +3 -3
  398. package/dist/plugins/shiftWork/src/shared.js +3 -1
  399. package/dist/plugins/shopify/src/credentials.js +16 -0
  400. package/dist/plugins/shopify/src/index.js +32 -59
  401. package/dist/plugins/signl4/src/credentials.js +17 -0
  402. package/dist/plugins/signl4/src/index.js +28 -29
  403. package/dist/plugins/slack/src/credentials.js +19 -0
  404. package/dist/plugins/slack/src/index.js +51 -60
  405. package/dist/plugins/sms77/src/credentials.js +17 -0
  406. package/dist/plugins/sms77/src/index.js +11 -16
  407. package/dist/plugins/splunk/src/credentials.js +19 -0
  408. package/dist/plugins/splunk/src/index.js +32 -74
  409. package/dist/plugins/spotify/src/credentials.js +19 -0
  410. package/dist/plugins/spotify/src/index.js +40 -55
  411. package/dist/plugins/stackby/src/credentials.js +13 -0
  412. package/dist/plugins/stackby/src/index.js +14 -23
  413. package/dist/plugins/steel/src/auth.js +27 -0
  414. package/dist/plugins/steel/src/browser.js +4 -3
  415. package/dist/plugins/steel/src/captchas.js +4 -3
  416. package/dist/plugins/steel/src/extensions.js +3 -2
  417. package/dist/plugins/steel/src/files.js +9 -10
  418. package/dist/plugins/steel/src/index.js +2 -0
  419. package/dist/plugins/steel/src/page/tools.js +3 -3
  420. package/dist/plugins/steel/src/profiles.js +4 -3
  421. package/dist/plugins/steel/src/sessions.js +13 -13
  422. package/dist/plugins/steel/src/shared.js +21 -51
  423. package/dist/plugins/storyblok/src/credentials.js +37 -0
  424. package/dist/plugins/storyblok/src/index.js +22 -66
  425. package/dist/plugins/strapi/src/credentials.js +71 -0
  426. package/dist/plugins/strapi/src/index.js +36 -70
  427. package/dist/plugins/strava/src/credentials.js +19 -0
  428. package/dist/plugins/strava/src/index.js +16 -33
  429. package/dist/plugins/stripe/src/credentials.js +19 -0
  430. package/dist/plugins/stripe/src/index.js +44 -58
  431. package/dist/plugins/supabase/src/credentials.js +30 -0
  432. package/dist/plugins/supabase/src/index.js +18 -40
  433. package/dist/plugins/syncromsp/src/credentials.js +16 -0
  434. package/dist/plugins/syncromsp/src/index.js +37 -70
  435. package/dist/plugins/tapfiliate/src/credentials.js +13 -0
  436. package/dist/plugins/tapfiliate/src/index.js +21 -31
  437. package/dist/plugins/telegram/src/credentials.js +20 -0
  438. package/dist/plugins/telegram/src/index.js +31 -39
  439. package/dist/plugins/thehive/src/credentials.js +14 -0
  440. package/dist/plugins/thehive/src/index.js +33 -50
  441. package/dist/plugins/thehiveProject/src/credentials.js +16 -0
  442. package/dist/plugins/thehiveProject/src/index.js +53 -122
  443. package/dist/plugins/todoist/src/credentials.js +26 -0
  444. package/dist/plugins/todoist/src/index.js +49 -79
  445. package/dist/plugins/together/src/credentials.js +16 -0
  446. package/dist/plugins/together/src/index.js +30 -32
  447. package/dist/plugins/travisci/src/credentials.js +24 -0
  448. package/dist/plugins/travisci/src/index.js +16 -30
  449. package/dist/plugins/trello/src/credentials.js +29 -0
  450. package/dist/plugins/trello/src/index.js +49 -64
  451. package/dist/plugins/twake/src/credentials.js +16 -0
  452. package/dist/plugins/twake/src/index.js +8 -10
  453. package/dist/plugins/twilio/src/credentials.js +23 -0
  454. package/dist/plugins/twilio/src/index.js +12 -26
  455. package/dist/plugins/twist/src/credentials.js +13 -0
  456. package/dist/plugins/twist/src/index.js +32 -44
  457. package/dist/plugins/twitter/src/credentials.js +16 -0
  458. package/dist/plugins/twitter/src/index.js +25 -37
  459. package/dist/plugins/typesafe/src/credentials.js +28 -0
  460. package/dist/plugins/typesafe/src/index.js +3 -1
  461. package/dist/plugins/typesafe/src/shared.js +23 -35
  462. package/dist/plugins/unleashedSoftware/src/credentials.js +21 -0
  463. package/dist/plugins/unleashedSoftware/src/index.js +13 -37
  464. package/dist/plugins/uplead/src/credentials.js +16 -0
  465. package/dist/plugins/uplead/src/index.js +11 -16
  466. package/dist/plugins/uproc/src/credentials.js +14 -0
  467. package/dist/plugins/uproc/src/index.js +7 -10
  468. package/dist/plugins/uptimerobot/src/credentials.js +14 -0
  469. package/dist/plugins/uptimerobot/src/index.js +28 -39
  470. package/dist/plugins/urlscanio/src/credentials.js +13 -0
  471. package/dist/plugins/urlscanio/src/index.js +13 -22
  472. package/dist/plugins/vercel/src/credentials.js +19 -0
  473. package/dist/plugins/vercel/src/deployments.js +27 -11
  474. package/dist/plugins/vercel/src/env.js +31 -12
  475. package/dist/plugins/vercel/src/index.js +2 -0
  476. package/dist/plugins/vercel/src/projects.js +6 -3
  477. package/dist/plugins/vercel/src/shared.js +32 -37
  478. package/dist/plugins/vero/src/credentials.js +17 -0
  479. package/dist/plugins/vero/src/index.js +18 -21
  480. package/dist/plugins/vonage/src/credentials.js +17 -0
  481. package/dist/plugins/vonage/src/index.js +14 -18
  482. package/dist/plugins/wekan/src/credentials.js +16 -0
  483. package/dist/plugins/wekan/src/index.js +33 -46
  484. package/dist/plugins/wolt/src/account.js +6 -0
  485. package/dist/plugins/wolt/src/catalog.js +2 -2
  486. package/dist/plugins/wolt/src/credentials.js +64 -0
  487. package/dist/plugins/wolt/src/index.js +8 -3
  488. package/dist/plugins/wolt/src/orders.js +2 -2
  489. package/dist/plugins/wolt/src/public.js +91 -0
  490. package/dist/plugins/wolt/src/shared.js +49 -158
  491. package/dist/plugins/woocommerce/src/credentials.js +16 -0
  492. package/dist/plugins/woocommerce/src/index.js +19 -37
  493. package/dist/plugins/wordpress/src/credentials.js +16 -0
  494. package/dist/plugins/wordpress/src/index.js +23 -42
  495. package/dist/plugins/xai/src/credentials.js +13 -0
  496. package/dist/plugins/xai/src/index.js +31 -30
  497. package/dist/plugins/xero/src/credentials.js +17 -0
  498. package/dist/plugins/xero/src/index.js +19 -36
  499. package/dist/plugins/yourls/src/credentials.js +17 -0
  500. package/dist/plugins/yourls/src/index.js +13 -23
  501. package/dist/plugins/zammad/src/credentials.js +15 -0
  502. package/dist/plugins/zammad/src/index.js +27 -47
  503. package/dist/plugins/zendesk/src/credentials.js +26 -0
  504. package/dist/plugins/zendesk/src/index.js +29 -48
  505. package/dist/plugins/zoho/src/credentials.js +17 -0
  506. package/dist/plugins/zoho/src/index.js +18 -38
  507. package/dist/plugins/zoom/src/credentials.js +19 -0
  508. package/dist/plugins/zoom/src/index.js +15 -30
  509. package/dist/plugins/zulip/src/credentials.js +16 -0
  510. package/dist/plugins/zulip/src/index.js +36 -42
  511. package/dist/sdk.d.ts +8 -0
  512. package/dist/sdk.js +3 -0
  513. package/package.json +1 -1
  514. package/dist/plugins/_shared/authedFetch.js +0 -33
  515. package/dist/plugins/_shared/tokenRefresh.js +0 -41
@@ -1,11 +1,28 @@
1
+ import { credentialJson, graphqlFailed } from "../../_shared/credentials.js";
2
+ import { endpoint, graphqlCredential, publicHeaders } from "./credentials.js";
3
+ /** One GraphQL request to the configured endpoint; `errors` in the answer is a failure. */
4
+ async function gql(ctx, body) {
5
+ const config = ctx.connection.config;
6
+ const answer = await credentialJson(ctx, graphqlCredential, "graphql", {
7
+ target: "api",
8
+ path: endpoint(config).path,
9
+ method: "POST",
10
+ json: body,
11
+ headers: publicHeaders(config),
12
+ });
13
+ if (answer.errors)
14
+ throw graphqlFailed("graphql", answer.errors);
15
+ return answer.data;
16
+ }
1
17
  export default function graphql(rl) {
2
18
  rl.setName("graphql");
3
19
  rl.setVersion("0.1.0");
20
+ rl.setCredential(graphqlCredential);
4
21
  rl.setConnectionSchema({
5
22
  endpoint: {
6
23
  type: "string",
7
24
  required: true,
8
- description: "GraphQL endpoint URL",
25
+ description: "GraphQL endpoint URL (HTTPS)",
9
26
  env: "GRAPHQL_ENDPOINT",
10
27
  },
11
28
  headerAuth: {
@@ -17,7 +34,7 @@ export default function graphql(rl) {
17
34
  headers: {
18
35
  type: "object",
19
36
  required: false,
20
- description: "Additional headers as key-value pairs",
37
+ description: "Additional public headers as key-value pairs; a secret belongs in headerAuth",
21
38
  },
22
39
  });
23
40
  rl.registerAction("query", {
@@ -42,52 +59,18 @@ export default function graphql(rl) {
42
59
  },
43
60
  async execute(input, ctx) {
44
61
  const { query, variables, operationName } = input;
45
- const cfg = ctx.connection.config;
46
- const endpoint = cfg.endpoint;
47
- const hdrs = {
48
- "Content-Type": "application/json",
49
- };
50
- if (cfg.headerAuth)
51
- hdrs.Authorization = cfg.headerAuth;
52
- if (cfg.headers) {
53
- for (const [k, v] of Object.entries(cfg.headers)) {
54
- hdrs[k] = v;
55
- }
56
- }
57
62
  const body = { query };
58
63
  if (variables)
59
64
  body.variables = variables;
60
65
  if (operationName)
61
66
  body.operationName = operationName;
62
- const res = await fetch(endpoint, {
63
- method: "POST",
64
- headers: hdrs,
65
- body: JSON.stringify(body),
66
- });
67
- if (!res.ok)
68
- throw new Error(`GraphQL error ${res.status}: ${await res.text()}`);
69
- const data = (await res.json());
70
- if (data.errors)
71
- throw new Error(`GraphQL errors: ${JSON.stringify(data.errors)}`);
72
- return data.data;
67
+ return gql(ctx, body);
73
68
  },
74
69
  });
75
70
  rl.registerAction("introspect", {
76
71
  access: "read",
77
72
  description: "Run an introspection query to get the schema",
78
73
  async execute(_input, ctx) {
79
- const cfg = ctx.connection.config;
80
- const endpoint = cfg.endpoint;
81
- const hdrs = {
82
- "Content-Type": "application/json",
83
- };
84
- if (cfg.headerAuth)
85
- hdrs.Authorization = cfg.headerAuth;
86
- if (cfg.headers) {
87
- for (const [k, v] of Object.entries(cfg.headers)) {
88
- hdrs[k] = v;
89
- }
90
- }
91
74
  const introspectionQuery = `{
92
75
  __schema {
93
76
  types { name kind description fields { name type { name kind ofType { name kind } } } }
@@ -96,15 +79,7 @@ export default function graphql(rl) {
96
79
  subscriptionType { name }
97
80
  }
98
81
  }`;
99
- const res = await fetch(endpoint, {
100
- method: "POST",
101
- headers: hdrs,
102
- body: JSON.stringify({ query: introspectionQuery }),
103
- });
104
- if (!res.ok)
105
- throw new Error(`GraphQL error ${res.status}: ${await res.text()}`);
106
- const data = (await res.json());
107
- return data.data;
82
+ return gql(ctx, { query: introspectionQuery });
108
83
  },
109
84
  });
110
85
  }
@@ -0,0 +1,30 @@
1
+ import { configChoice, hostLabel, httpsBase, staticCredential, } from "../../_shared/credentials.js";
2
+ /**
3
+ * An API key, sent as a bearer to the plan's one API origin: docs.getgrist.com
4
+ * (free), the team subdomain (paid), or the self-hosted instance.
5
+ */
6
+ export const gristCredential = staticCredential({
7
+ id: "grist",
8
+ auth: { kind: "bearer" },
9
+ local: { secret: "apiKey" },
10
+ targets: (config) => {
11
+ const planType = configChoice(config.planType, ["free", "paid", "selfHosted"], "free");
12
+ const baseUrl = planType === "selfHosted"
13
+ ? httpsBase(config.selfHostedUrl, "api/")
14
+ : planType === "paid"
15
+ ? `https://${hostLabel(config.subdomain)}.getgrist.com/api/`
16
+ : "https://docs.getgrist.com/api/";
17
+ return {
18
+ api: {
19
+ baseUrl,
20
+ methods: ["GET", "POST", "PATCH"],
21
+ },
22
+ };
23
+ },
24
+ probe: {
25
+ target: "api",
26
+ path: "orgs",
27
+ method: "GET",
28
+ acceptedStatuses: [200],
29
+ },
30
+ });
@@ -1,43 +1,18 @@
1
- async function apiRequest(baseUrl, apiKey, 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 = {
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { gristCredential } from "./credentials.js";
3
+ function apiRequest(ctx, method, path, body, query) {
4
+ return credentialJson(ctx, gristCredential, "grist", {
5
+ target: "api",
6
+ path,
10
7
  method,
11
- headers: {
12
- Authorization: `Bearer ${apiKey}`,
13
- "Content-Type": "application/json",
14
- },
15
- };
16
- if (body !== undefined && method !== "GET" && method !== "DELETE") {
17
- opts.body = JSON.stringify(body);
18
- }
19
- const res = await fetch(url.toString(), opts);
20
- if (!res.ok)
21
- throw new Error(`Grist API error ${res.status}: ${await res.text()}`);
22
- if (res.status === 204)
23
- return { success: true };
24
- return res.json();
25
- }
26
- function getConn(ctx) {
27
- const cfg = ctx.connection.config;
28
- const planType = cfg.planType ?? "free";
29
- let baseUrl;
30
- if (planType === "selfHosted")
31
- baseUrl = cfg.selfHostedUrl.replace(/\/$/, "");
32
- else if (planType === "paid")
33
- baseUrl = `https://${cfg.subdomain}.getgrist.com`;
34
- else
35
- baseUrl = "https://docs.getgrist.com";
36
- return { baseUrl, apiKey: cfg.apiKey };
8
+ query,
9
+ ...(body !== undefined ? { json: body } : {}),
10
+ });
37
11
  }
38
12
  export default function grist(rl) {
39
13
  rl.setName("grist");
40
14
  rl.setVersion("0.1.0");
15
+ rl.setCredential(gristCredential);
41
16
  rl.setConnectionSchema({
42
17
  apiKey: {
43
18
  type: "string",
@@ -77,8 +52,7 @@ export default function grist(rl) {
77
52
  },
78
53
  async execute(input, ctx) {
79
54
  const { docId, tableId, records } = input;
80
- const { baseUrl, apiKey } = getConn(ctx);
81
- return apiRequest(baseUrl, apiKey, "POST", `/docs/${docId}/tables/${tableId}/records`, { records });
55
+ return apiRequest(ctx, "POST", `docs/${pathSegment(docId)}/tables/${pathSegment(tableId)}/records`, { records });
82
56
  },
83
57
  });
84
58
  rl.registerAction("record.list", {
@@ -101,7 +75,6 @@ export default function grist(rl) {
101
75
  },
102
76
  async execute(input, ctx) {
103
77
  const { docId, tableId, limit, sort, filter } = (input ?? {});
104
- const { baseUrl, apiKey } = getConn(ctx);
105
78
  const qs = {};
106
79
  if (limit)
107
80
  qs.limit = limit;
@@ -109,7 +82,7 @@ export default function grist(rl) {
109
82
  qs.sort = sort;
110
83
  if (filter)
111
84
  qs.filter = JSON.stringify(filter);
112
- const data = (await apiRequest(baseUrl, apiKey, "GET", `/docs/${docId}/tables/${tableId}/records`, undefined, qs));
85
+ const data = (await apiRequest(ctx, "GET", `docs/${pathSegment(docId)}/tables/${pathSegment(tableId)}/records`, undefined, qs));
113
86
  return data.records;
114
87
  },
115
88
  });
@@ -127,8 +100,7 @@ export default function grist(rl) {
127
100
  },
128
101
  async execute(input, ctx) {
129
102
  const { docId, tableId, records } = input;
130
- const { baseUrl, apiKey } = getConn(ctx);
131
- return apiRequest(baseUrl, apiKey, "PATCH", `/docs/${docId}/tables/${tableId}/records`, { records });
103
+ return apiRequest(ctx, "PATCH", `docs/${pathSegment(docId)}/tables/${pathSegment(tableId)}/records`, { records });
132
104
  },
133
105
  });
134
106
  rl.registerAction("record.delete", {
@@ -145,8 +117,7 @@ export default function grist(rl) {
145
117
  },
146
118
  async execute(input, ctx) {
147
119
  const { docId, tableId, rowIds } = input;
148
- const { baseUrl, apiKey } = getConn(ctx);
149
- return apiRequest(baseUrl, apiKey, "POST", `/docs/${docId}/tables/${tableId}/data/delete`, rowIds);
120
+ return apiRequest(ctx, "POST", `docs/${pathSegment(docId)}/tables/${pathSegment(tableId)}/data/delete`, rowIds);
150
121
  },
151
122
  });
152
123
  }
@@ -0,0 +1,56 @@
1
+ import { AuthError, } from "runline";
2
+ import { configChoice, grantSchema, httpsBase, } from "../../_shared/credentials.js";
3
+ /**
4
+ * A client-credentials OAuth grant: the token comes from the configured
5
+ * auth server (cloud, optionally tenant-qualified) or the on-premise app's
6
+ * /auth/token, and signs as a bearer against the configured resource API
7
+ * base. Every URL is public config and must be HTTPS.
8
+ */
9
+ export const halopsaCredential = (config) => {
10
+ let tokenUrl = configChoice(config.hostingType, ["cloud", "on-premise"], "cloud") ===
11
+ "on-premise"
12
+ ? httpsBase(config.appUrl, "auth/token")
13
+ : httpsBase(config.authUrl, "token");
14
+ if (config.tenant !== undefined) {
15
+ if (typeof config.tenant !== "string" || !config.tenant)
16
+ throw new AuthError("invalid_credentials");
17
+ tokenUrl += `?tenant=${encodeURIComponent(config.tenant)}`;
18
+ }
19
+ const scope = typeof config.scope === "string" && config.scope ? config.scope : "all";
20
+ const type = {
21
+ id: "halopsa",
22
+ methods: {
23
+ oauth2: {
24
+ schema: grantSchema,
25
+ authentication: {
26
+ kind: "oauth2",
27
+ field: "grant",
28
+ renewal: "clientCredentials",
29
+ definition: {
30
+ id: "halopsa.oauth2",
31
+ provider: "halopsa",
32
+ clientCredentials: {
33
+ url: tokenUrl,
34
+ clientAuthentication: "client_secret_post",
35
+ },
36
+ },
37
+ scopes: [scope],
38
+ },
39
+ targets: {
40
+ api: {
41
+ baseUrl: httpsBase(config.resourceApiUrl, ""),
42
+ methods: ["GET", "POST", "PUT", "DELETE"],
43
+ },
44
+ },
45
+ },
46
+ },
47
+ };
48
+ return {
49
+ type,
50
+ method: "oauth2",
51
+ application: {
52
+ clientId: config.clientId,
53
+ clientSecret: config.clientSecret,
54
+ },
55
+ };
56
+ };
@@ -1,47 +1,19 @@
1
- import { coordinatedAccessToken, requestToken, } from "../../_shared/tokenRefresh.js";
2
- async function apiRequest(apiUrl, token, method, endpoint, body, qs) {
3
- const url = new URL(`${apiUrl}${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 = {
11
- method,
12
- headers: {
13
- Authorization: `Bearer ${token}`,
14
- "Content-Type": "application/json",
15
- },
16
- };
17
- if (body &&
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { halopsaCredential } from "./credentials.js";
3
+ function req(ctx, method, path, body, qs) {
4
+ const json = body &&
18
5
  Object.keys(body).length > 0 &&
19
6
  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(`HaloPSA API error ${res.status}: ${await res.text()}`);
25
- if (res.status === 204)
26
- return { success: true };
27
- return res.json();
28
- }
29
- async function req(ctx, method, endpoint, body, qs) {
30
- const token = await coordinatedAccessToken(ctx, (cfg) => {
31
- const url = new URL(cfg.hostingType === "on-premise"
32
- ? `${cfg.appUrl}/auth/token`
33
- : `${cfg.authUrl}/token`);
34
- if (cfg.tenant)
35
- url.searchParams.set("tenant", cfg.tenant);
36
- return requestToken({ url: url.toString(), clientAuthentication: "client_secret_post" }, {
37
- grant_type: "client_credentials",
38
- scope: cfg.scope ?? "all",
39
- }, {
40
- clientId: cfg.clientId,
41
- clientSecret: cfg.clientSecret,
42
- });
7
+ method !== "DELETE"
8
+ ? body
9
+ : undefined;
10
+ return credentialJson(ctx, halopsaCredential, "halopsa", {
11
+ target: "api",
12
+ path,
13
+ method,
14
+ query: qs,
15
+ ...(json !== undefined ? { json } : {}),
43
16
  });
44
- return apiRequest(ctx.connection.config.resourceApiUrl.replace(/\/$/, ""), token, method, endpoint, body, qs);
45
17
  }
46
18
  function registerCrud(rl, resource, apiPath) {
47
19
  rl.registerAction(`${resource}.create`, {
@@ -67,7 +39,7 @@ function registerCrud(rl, resource, apiPath) {
67
39
  id: { type: "number", required: true, description: `${resource} ID` },
68
40
  },
69
41
  async execute(input, ctx) {
70
- return req(ctx, "GET", `${apiPath}/${input.id}`);
42
+ return req(ctx, "GET", `${apiPath}/${pathSegment(input.id)}`);
71
43
  },
72
44
  });
73
45
  rl.registerAction(`${resource}.list`, {
@@ -110,7 +82,7 @@ function registerCrud(rl, resource, apiPath) {
110
82
  id: { type: "number", required: true, description: `${resource} ID` },
111
83
  },
112
84
  async execute(input, ctx) {
113
- await req(ctx, "DELETE", `${apiPath}/${input.id}`);
85
+ await req(ctx, "DELETE", `${apiPath}/${pathSegment(input.id)}`);
114
86
  return { success: true };
115
87
  },
116
88
  });
@@ -118,6 +90,7 @@ function registerCrud(rl, resource, apiPath) {
118
90
  export default function halopsa(rl) {
119
91
  rl.setName("halopsa");
120
92
  rl.setVersion("0.1.0");
93
+ rl.setCredential(halopsaCredential);
121
94
  rl.setConnectionSchema({
122
95
  hostingType: {
123
96
  type: "string",
@@ -167,8 +140,8 @@ export default function halopsa(rl) {
167
140
  description: "Tenant (cloud only)",
168
141
  },
169
142
  });
170
- registerCrud(rl, "client", "/client");
171
- registerCrud(rl, "site", "/site");
172
- registerCrud(rl, "ticket", "/tickets");
173
- registerCrud(rl, "user", "/users");
143
+ registerCrud(rl, "client", "client");
144
+ registerCrud(rl, "site", "site");
145
+ registerCrud(rl, "ticket", "tickets");
146
+ registerCrud(rl, "user", "users");
174
147
  }
@@ -0,0 +1,20 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * A personal access token, sent as a bearer to Harvest's one API origin.
4
+ * Every request also carries the public Harvest-Account-Id companion
5
+ * header and Harvest's required User-Agent.
6
+ */
7
+ export const harvestCredential = staticCredential({
8
+ id: "harvest",
9
+ auth: { kind: "bearer" },
10
+ local: { secret: "token" },
11
+ targets: {
12
+ api: {
13
+ baseUrl: "https://api.harvestapp.com/v2/",
14
+ methods: ["GET", "POST", "PATCH", "DELETE"],
15
+ allowedHeaders: ["Harvest-Account-Id", "User-Agent"],
16
+ },
17
+ },
18
+ // No probe: every accepted request needs the Harvest-Account-Id header,
19
+ // which a fixed probe cannot carry.
20
+ });
@@ -1,42 +1,22 @@
1
- const BASE_URL = "https://api.harvestapp.com/v2";
2
- async function apiRequest(token, accountId, method, endpoint, body, qs) {
3
- const url = new URL(`${BASE_URL}/${endpoint}`);
4
- if (qs) {
5
- for (const [k, v] of Object.entries(qs)) {
6
- if (v !== undefined && v !== null)
7
- url.searchParams.set(k, String(v));
8
- }
9
- }
10
- const opts = {
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { harvestCredential } from "./credentials.js";
3
+ function hv(ctx, method, path, body, qs) {
4
+ return credentialJson(ctx, harvestCredential, "harvest", {
5
+ target: "api",
6
+ path,
11
7
  method,
8
+ query: qs,
12
9
  headers: {
13
- Authorization: `Bearer ${token}`,
14
- "Harvest-Account-Id": accountId,
15
- "Content-Type": "application/json",
10
+ "Harvest-Account-Id": String(ctx.connection.config.accountId),
16
11
  "User-Agent": "Runline",
17
12
  },
18
- };
19
- if (body &&
20
- Object.keys(body).length > 0 &&
21
- method !== "GET" &&
22
- method !== "DELETE")
23
- opts.body = JSON.stringify(body);
24
- const res = await fetch(url.toString(), opts);
25
- if (!res.ok)
26
- throw new Error(`Harvest API error ${res.status}: ${await res.text()}`);
27
- if (res.status === 204)
28
- return { success: true };
29
- return res.json();
30
- }
31
- function getConn(ctx) {
32
- return {
33
- token: ctx.connection.config.token,
34
- accountId: ctx.connection.config.accountId,
35
- };
36
- }
37
- function hv(ctx, method, endpoint, body, qs) {
38
- const { token, accountId } = getConn(ctx);
39
- return apiRequest(token, accountId, method, endpoint, body, qs);
13
+ ...(body &&
14
+ Object.keys(body).length > 0 &&
15
+ method !== "GET" &&
16
+ method !== "DELETE"
17
+ ? { json: body }
18
+ : {}),
19
+ });
40
20
  }
41
21
  function unwrapList(data, key) {
42
22
  if (data &&
@@ -67,7 +47,7 @@ function registerCrud(rl, resource, apiPath, listKey) {
67
47
  id: { type: "number", required: true, description: `${resource} ID` },
68
48
  },
69
49
  async execute(input, ctx) {
70
- return hv(ctx, "GET", `${apiPath}/${input.id}`);
50
+ return hv(ctx, "GET", `${apiPath}/${pathSegment(input.id)}`);
71
51
  },
72
52
  });
73
53
  rl.registerAction(`${resource}.list`, {
@@ -100,7 +80,7 @@ function registerCrud(rl, resource, apiPath, listKey) {
100
80
  },
101
81
  async execute(input, ctx) {
102
82
  const { id, properties } = input;
103
- return hv(ctx, "PATCH", `${apiPath}/${id}`, properties);
83
+ return hv(ctx, "PATCH", `${apiPath}/${pathSegment(id)}`, properties);
104
84
  },
105
85
  });
106
86
  rl.registerAction(`${resource}.delete`, {
@@ -110,7 +90,7 @@ function registerCrud(rl, resource, apiPath, listKey) {
110
90
  id: { type: "number", required: true, description: `${resource} ID` },
111
91
  },
112
92
  async execute(input, ctx) {
113
- await hv(ctx, "DELETE", `${apiPath}/${input.id}`);
93
+ await hv(ctx, "DELETE", `${apiPath}/${pathSegment(input.id)}`);
114
94
  return { success: true };
115
95
  },
116
96
  });
@@ -118,6 +98,7 @@ function registerCrud(rl, resource, apiPath, listKey) {
118
98
  export default function harvest(rl) {
119
99
  rl.setName("harvest");
120
100
  rl.setVersion("0.1.0");
101
+ rl.setCredential(harvestCredential);
121
102
  rl.setConnectionSchema({
122
103
  token: {
123
104
  type: "string",
@@ -210,7 +191,7 @@ export default function harvest(rl) {
210
191
  id: { type: "number", required: true, description: "Time entry ID" },
211
192
  },
212
193
  async execute(input, ctx) {
213
- return hv(ctx, "GET", `time_entries/${input.id}`);
194
+ return hv(ctx, "GET", `time_entries/${pathSegment(input.id)}`);
214
195
  },
215
196
  });
216
197
  rl.registerAction("timeEntry.list", {
@@ -272,7 +253,7 @@ export default function harvest(rl) {
272
253
  },
273
254
  async execute(input, ctx) {
274
255
  const { id, properties } = input;
275
- return hv(ctx, "PATCH", `time_entries/${id}`, properties);
256
+ return hv(ctx, "PATCH", `time_entries/${pathSegment(id)}`, properties);
276
257
  },
277
258
  });
278
259
  rl.registerAction("timeEntry.delete", {
@@ -282,7 +263,7 @@ export default function harvest(rl) {
282
263
  id: { type: "number", required: true, description: "Time entry ID" },
283
264
  },
284
265
  async execute(input, ctx) {
285
- await hv(ctx, "DELETE", `time_entries/${input.id}`);
266
+ await hv(ctx, "DELETE", `time_entries/${pathSegment(input.id)}`);
286
267
  return { success: true };
287
268
  },
288
269
  });
@@ -293,7 +274,7 @@ export default function harvest(rl) {
293
274
  id: { type: "number", required: true, description: "Time entry ID" },
294
275
  },
295
276
  async execute(input, ctx) {
296
- return hv(ctx, "PATCH", `time_entries/${input.id}/restart`);
277
+ return hv(ctx, "PATCH", `time_entries/${pathSegment(input.id)}/restart`);
297
278
  },
298
279
  });
299
280
  rl.registerAction("timeEntry.stop", {
@@ -303,7 +284,7 @@ export default function harvest(rl) {
303
284
  id: { type: "number", required: true, description: "Time entry ID" },
304
285
  },
305
286
  async execute(input, ctx) {
306
- return hv(ctx, "PATCH", `time_entries/${input.id}/stop`);
287
+ return hv(ctx, "PATCH", `time_entries/${pathSegment(input.id)}/stop`);
307
288
  },
308
289
  });
309
290
  // Company (read-only)
@@ -0,0 +1,13 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /** An OAuth2 app access token, sent as a bearer to Help Scout's v2 API. */
3
+ export const helpscoutCredential = staticCredential({
4
+ id: "helpscout",
5
+ auth: { kind: "bearer" },
6
+ local: { secret: "accessToken" },
7
+ targets: {
8
+ api: {
9
+ baseUrl: "https://api.helpscout.net/v2/",
10
+ methods: ["GET", "POST", "PUT", "DELETE"],
11
+ },
12
+ },
13
+ });