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,47 +1,24 @@
1
- async function apiRequest(baseUrl, username, password, method, endpoint, body, qs) {
2
- const url = new URL(`${baseUrl}${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 { credentialOk, jsonOrAcknowledged, pathSegment, } from "../../_shared/credentials.js";
2
+ import { elasticsearchCredential } from "./credentials.js";
3
+ async function req(ctx, method, path, body, query) {
4
+ const res = await credentialOk(ctx, elasticsearchCredential, "elasticsearch", {
5
+ target: "api",
6
+ path,
10
7
  method,
11
- headers: {
12
- Authorization: `Basic ${btoa(`${username}:${password}`)}`,
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
- }
22
- const res = await fetch(url.toString(), opts);
23
- if (!res.ok)
24
- throw new Error(`Elasticsearch error ${res.status}: ${await res.text()}`);
25
- const ct = res.headers.get("content-type") ?? "";
26
- if (ct.includes("application/json"))
27
- return res.json();
28
- return { success: true };
29
- }
30
- function getConn(ctx) {
31
- const cfg = ctx.connection.config;
32
- return {
33
- baseUrl: cfg.baseUrl.replace(/\/$/, ""),
34
- username: cfg.username ?? "",
35
- password: cfg.password ?? "",
36
- };
37
- }
38
- function req(ctx, method, endpoint, body, qs) {
39
- const { baseUrl, username, password } = getConn(ctx);
40
- return apiRequest(baseUrl, username, password, method, endpoint, body, qs);
8
+ query,
9
+ ...(body &&
10
+ Object.keys(body).length > 0 &&
11
+ method !== "GET" &&
12
+ method !== "DELETE"
13
+ ? { json: body }
14
+ : {}),
15
+ });
16
+ return jsonOrAcknowledged(res);
41
17
  }
42
18
  export default function elasticsearch(rl) {
43
19
  rl.setName("elasticsearch");
44
20
  rl.setVersion("0.1.0");
21
+ rl.setCredential(elasticsearchCredential);
45
22
  rl.setConnectionSchema({
46
23
  baseUrl: {
47
24
  type: "string",
@@ -77,7 +54,9 @@ export default function elasticsearch(rl) {
77
54
  },
78
55
  async execute(input, ctx) {
79
56
  const { index, id, body } = input;
80
- const endpoint = id ? `/${index}/_doc/${id}` : `/${index}/_doc`;
57
+ const endpoint = id
58
+ ? `${pathSegment(index)}/_doc/${pathSegment(id)}`
59
+ : `${pathSegment(index)}/_doc`;
81
60
  return req(ctx, id ? "PUT" : "POST", endpoint, body);
82
61
  },
83
62
  });
@@ -90,7 +69,7 @@ export default function elasticsearch(rl) {
90
69
  },
91
70
  async execute(input, ctx) {
92
71
  const { index, id } = input;
93
- return req(ctx, "GET", `/${index}/_doc/${id}`);
72
+ return req(ctx, "GET", `${pathSegment(index)}/_doc/${pathSegment(id)}`);
94
73
  },
95
74
  });
96
75
  rl.registerAction("document.update", {
@@ -107,7 +86,7 @@ export default function elasticsearch(rl) {
107
86
  },
108
87
  async execute(input, ctx) {
109
88
  const { index, id, body } = input;
110
- return req(ctx, "POST", `/${index}/_update/${id}`, { doc: body });
89
+ return req(ctx, "POST", `${pathSegment(index)}/_update/${pathSegment(id)}`, { doc: body });
111
90
  },
112
91
  });
113
92
  rl.registerAction("document.delete", {
@@ -119,7 +98,7 @@ export default function elasticsearch(rl) {
119
98
  },
120
99
  async execute(input, ctx) {
121
100
  const { index, id } = input;
122
- return req(ctx, "DELETE", `/${index}/_doc/${id}`);
101
+ return req(ctx, "DELETE", `${pathSegment(index)}/_doc/${pathSegment(id)}`);
123
102
  },
124
103
  });
125
104
  rl.registerAction("document.search", {
@@ -151,7 +130,7 @@ export default function elasticsearch(rl) {
151
130
  body.from = offset;
152
131
  if (sort)
153
132
  body.sort = sort;
154
- const data = (await req(ctx, "POST", `/${index}/_search`, body));
133
+ const data = (await req(ctx, "POST", `${pathSegment(index)}/_search`, body));
155
134
  return data.hits?.hits;
156
135
  },
157
136
  });
@@ -179,7 +158,7 @@ export default function elasticsearch(rl) {
179
158
  body.settings = settings;
180
159
  if (mappings)
181
160
  body.mappings = mappings;
182
- return req(ctx, "PUT", `/${index}`, Object.keys(body).length > 0 ? body : undefined);
161
+ return req(ctx, "PUT", pathSegment(index), body);
183
162
  },
184
163
  });
185
164
  rl.registerAction("index.get", {
@@ -189,14 +168,14 @@ export default function elasticsearch(rl) {
189
168
  index: { type: "string", required: true, description: "Index name" },
190
169
  },
191
170
  async execute(input, ctx) {
192
- return req(ctx, "GET", `/${input.index}`);
171
+ return req(ctx, "GET", pathSegment(input.index));
193
172
  },
194
173
  });
195
174
  rl.registerAction("index.list", {
196
175
  access: "read",
197
176
  description: "List all indices",
198
177
  async execute(_input, ctx) {
199
- return req(ctx, "GET", "/_cat/indices", undefined, { format: "json" });
178
+ return req(ctx, "GET", "_cat/indices", undefined, { format: "json" });
200
179
  },
201
180
  });
202
181
  rl.registerAction("index.delete", {
@@ -206,7 +185,7 @@ export default function elasticsearch(rl) {
206
185
  index: { type: "string", required: true, description: "Index name" },
207
186
  },
208
187
  async execute(input, ctx) {
209
- return req(ctx, "DELETE", `/${input.index}`);
188
+ return req(ctx, "DELETE", pathSegment(input.index));
210
189
  },
211
190
  });
212
191
  }
@@ -0,0 +1,30 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * The longest request deadline: the input schemas' `timeout` maximum and the
4
+ * `audio` target's deadline, at the transport's default host ceiling.
5
+ */
6
+ export const MAX_TIMEOUT_MS = 10 * 60_000;
7
+ /**
8
+ * An ElevenLabs API key, sent as `xi-api-key` to the one API origin. The
9
+ * `audio` target carries generation, transcription, and downloads: it
10
+ * declares `MAX_TIMEOUT_MS` and the 100 MiB audio ceiling, both capped by
11
+ * the host. The `api` target is the catalog
12
+ * and management surface on the transport defaults.
13
+ */
14
+ export const elevenlabsCredential = staticCredential({
15
+ id: "elevenlabs",
16
+ auth: { kind: "apiKey", header: "xi-api-key" },
17
+ local: { secret: "apiKey" },
18
+ targets: {
19
+ api: {
20
+ baseUrl: "https://api.elevenlabs.io/",
21
+ methods: ["GET", "POST", "DELETE"],
22
+ },
23
+ audio: {
24
+ baseUrl: "https://api.elevenlabs.io/",
25
+ methods: ["GET", "POST"],
26
+ timeoutMs: MAX_TIMEOUT_MS,
27
+ maxResponseBytes: 100 * 1024 * 1024,
28
+ },
29
+ },
30
+ });
@@ -1,4 +1,5 @@
1
1
  import * as t from "typebox";
2
+ import { elevenlabsCredential } from "./credentials.js";
2
3
  import { audioOptions, formatSchema, musicSchema as music, STRICT, seed, speechControls, text, timeout, voiceSettings, } from "./schemas.js";
3
4
  import { appendFile, audioRequest, jsonRequest, voiceForm, voicePath, } from "./shared.js";
4
5
  import { registerWorkflows } from "./workflows.js";
@@ -89,6 +90,7 @@ const sound = t.Object({
89
90
  export default function elevenlabs(rl) {
90
91
  rl.setName("elevenlabs");
91
92
  rl.setVersion("0.1.0");
93
+ rl.setCredential(elevenlabsCredential);
92
94
  registerWorkflows(rl);
93
95
  rl.setConnectionSchema(t.Object({
94
96
  apiKey: t.String({
@@ -226,7 +228,8 @@ export default function elevenlabs(rl) {
226
228
  if (value !== undefined)
227
229
  form.append(key, String(value));
228
230
  }
229
- return jsonRequest(ctx, "/v1/speech-to-text", "transcription", { method: "POST", body: form }, p.timeoutMs ?? 300_000);
231
+ // The audio target carries the long transcription deadline.
232
+ return jsonRequest(ctx, "/v1/speech-to-text", "transcription", { method: "POST", body: form }, p.timeoutMs ?? 300_000, "audio");
230
233
  },
231
234
  });
232
235
  rl.registerAction("music.create", {
@@ -1,9 +1,10 @@
1
1
  import * as t from "typebox";
2
+ import { MAX_TIMEOUT_MS } from "./credentials.js";
2
3
  export const STRICT = { additionalProperties: false };
3
4
  export const text = t.String({ minLength: 1, pattern: "\\S" });
4
5
  export const timeout = t.Integer({
5
6
  minimum: 1000,
6
- maximum: 3_600_000,
7
+ maximum: MAX_TIMEOUT_MS,
7
8
  default: 300_000,
8
9
  description: "Request deadline including the response body; does not cancel provider work.",
9
10
  });
@@ -1,31 +1,62 @@
1
1
  import { constants } from "node:fs";
2
2
  import { open } from "node:fs/promises";
3
3
  import { basename } from "node:path";
4
+ import { AuthError } from "runline";
4
5
  import * as t from "typebox";
5
6
  import { Check } from "typebox/value";
6
- import { authedFetch } from "../../_shared/authedFetch.js";
7
+ import { credentialBroker } from "../../_shared/credentialAdapter.js";
8
+ import { errorIdentifier, failureMessage, multipartBody, pathSegment, } from "../../_shared/credentials.js";
7
9
  import { SEND_FILE_NOTE, writeMediaFile } from "../../_shared/mediaFile.js";
8
- import { obj, readBounded, readBoundedBytes, seg, } from "../../_shared/provider.js";
9
- export const voicePath = (id) => seg(id, "voice id", "elevenlabs");
10
+ import { obj, readBounded, readBoundedBytes } from "../../_shared/provider.js";
11
+ import { elevenlabsCredential } from "./credentials.js";
12
+ export const voicePath = (id) => pathSegment(id);
10
13
  const JSON_LIMIT = 8 * 1024 * 1024;
11
14
  const AUDIO_LIMIT = 100 * 1024 * 1024;
12
- /** A fixed origin, no redirects or retries, and one deadline through body consumption. */
13
- async function request(ctx, path, init, timeoutMs, consume) {
14
- const key = ctx.connection.config.apiKey;
15
- if (typeof key !== "string" || !key.trim())
16
- throw new Error("Missing ELEVENLABS_API_KEY");
15
+ /**
16
+ * The caller-tunable deadline over a brokered exchange. The transport
17
+ * buffers the body, so the race bounds the whole exchange; on timeout the
18
+ * brokered call runs on to the target's own deadline, and its late outcome
19
+ * is observed so it cannot become an unhandled rejection.
20
+ */
21
+ async function withDeadline(work, timeoutMs) {
22
+ let timer;
23
+ try {
24
+ return await Promise.race([
25
+ work,
26
+ new Promise((_, reject) => {
27
+ timer = setTimeout(() => {
28
+ work.catch(() => { });
29
+ reject(new Error("elevenlabs: request timed out"));
30
+ }, timeoutMs);
31
+ }),
32
+ ]);
33
+ }
34
+ finally {
35
+ clearTimeout(timer);
36
+ }
37
+ }
38
+ /** Every credential-bearing request signs through the declared credential. */
39
+ async function request(ctx, target, path, init, timeoutMs, consume) {
17
40
  let requestId = null;
18
41
  try {
19
- const response = await authedFetch(`https://api.elevenlabs.io${path}`, {
20
- ...init,
21
- headers: {
22
- "xi-api-key": key.trim(),
23
- ...(typeof init.body === "string"
24
- ? { "content-type": "application/json" }
25
- : {}),
26
- },
27
- signal: AbortSignal.timeout(timeoutMs),
28
- });
42
+ const headers = {};
43
+ let body;
44
+ if (typeof init.body === "string") {
45
+ body = init.body;
46
+ headers["content-type"] = "application/json";
47
+ }
48
+ else if (init.body !== undefined) {
49
+ const multipart = await multipartBody(init.body);
50
+ body = multipart.body;
51
+ headers["content-type"] = multipart.contentType;
52
+ }
53
+ const response = await withDeadline(credentialBroker(ctx, elevenlabsCredential).request({
54
+ target,
55
+ path: path.replace(/^\//, ""),
56
+ method: init.method ?? "GET",
57
+ headers,
58
+ ...(body !== undefined ? { body } : {}),
59
+ }), timeoutMs);
29
60
  requestId = response.headers.get("request-id");
30
61
  // Both JSON and audio errors use the provider's JSON error envelope.
31
62
  if (!response.ok)
@@ -33,8 +64,13 @@ async function request(ctx, path, init, timeoutMs, consume) {
33
64
  return await consume(response);
34
65
  }
35
66
  catch (error) {
67
+ // The request id and retry guidance join the message; a transport
68
+ // failure keeps its code, so callers can still tell why it failed.
36
69
  const mutation = init.method && init.method !== "GET";
37
- throw new Error(`${error instanceof Error ? error.message : String(error)}${requestId ? ` (requestId ${requestId})` : ""}${mutation ? ". Request may have been applied or billed; do not retry automatically." : ""}`, { cause: error });
70
+ const wrapped = new Error(`${error instanceof Error ? error.message : String(error)}${requestId ? ` (requestId ${requestId})` : ""}${mutation ? ". Request may have been applied or billed; do not retry automatically." : ""}`, { cause: error });
71
+ if (error instanceof AuthError)
72
+ wrapped.code = error.code;
73
+ throw wrapped;
38
74
  }
39
75
  }
40
76
  async function json(response, limit = JSON_LIMIT) {
@@ -44,23 +80,26 @@ async function json(response, limit = JSON_LIMIT) {
44
80
  body = text ? JSON.parse(text) : null;
45
81
  }
46
82
  catch {
47
- throw new Error(`elevenlabs HTTP ${response.status}: non-JSON response`);
83
+ if (!response.ok)
84
+ throw new Error(failureMessage("elevenlabs", response.status));
85
+ throw new Error("elevenlabs: non-JSON response");
48
86
  }
49
87
  if (!response.ok) {
88
+ // The error `status` code and the offending field paths, never the
89
+ // provider's messages or the validated input.
50
90
  const detail = obj(body).detail;
51
- const error = obj(detail);
52
- // Include provider error messages and locations, not validation input payloads.
53
- const message = typeof detail === "string"
91
+ const params = Array.isArray(detail)
54
92
  ? detail
55
- : Array.isArray(detail)
56
- ? detail
57
- .map((v) => {
58
- const e = obj(v);
59
- return `${Array.isArray(e.loc) ? e.loc.join(".") : "body"}: ${e.msg ?? "invalid"}`;
60
- })
61
- .join("; ")
62
- : `${error.status ?? "request failed"}: ${error.message ?? ""}`;
63
- throw new Error(`elevenlabs HTTP ${response.status}: ${message.slice(0, 1000)}`);
93
+ .map((v) => {
94
+ const loc = obj(v).loc;
95
+ return errorIdentifier(Array.isArray(loc) ? loc.join(".") : loc);
96
+ })
97
+ .filter((param) => param !== undefined)
98
+ : [];
99
+ throw new Error(failureMessage("elevenlabs", response.status, {
100
+ code: errorIdentifier(obj(detail).status) ?? errorIdentifier(detail),
101
+ param: params.length ? params.join(", ") : undefined,
102
+ }));
64
103
  }
65
104
  if (body === null || typeof body !== "object")
66
105
  throw new Error("elevenlabs: expected a JSON object or array");
@@ -105,8 +144,8 @@ const responses = {
105
144
  }),
106
145
  dictionary: t.Object({ id, version_id: id }),
107
146
  };
108
- export async function jsonRequest(ctx, path, expected, init = {}, timeoutMs = 60_000) {
109
- return request(ctx, path, init, timeoutMs, async (response) => {
147
+ export async function jsonRequest(ctx, path, expected, init = {}, timeoutMs = 60_000, target = "api") {
148
+ return request(ctx, target, path, init, timeoutMs, async (response) => {
110
149
  const body = await json(response);
111
150
  if (!Check(responses[expected], body))
112
151
  throw new Error(`elevenlabs: invalid ${expected} response`);
@@ -182,7 +221,7 @@ export async function audioRequest(ctx, path, body, options) {
182
221
  }
183
222
  /** All generated, aligned, isolated, and recovered audio uses the same file writer. */
184
223
  export async function binaryRequest(ctx, path, init, options) {
185
- return request(ctx, path, init, options.timeoutMs ?? 300_000, async (response) => {
224
+ return request(ctx, "audio", path, init, options.timeoutMs ?? 300_000, async (response) => {
186
225
  let bytes;
187
226
  let timestamps = {};
188
227
  let mime;
@@ -1,5 +1,5 @@
1
1
  import * as t from "typebox";
2
- import { seg } from "../../_shared/provider.js";
2
+ import { pathSegment } from "../../_shared/credentials.js";
3
3
  import { audioOptions, dictionaries, fileOptions, normalization, STRICT, seed, text, voiceSettings, } from "./schemas.js";
4
4
  import { appendFile, audioRequest, binaryRequest, jsonRequest, voiceForm, voicePath, } from "./shared.js";
5
5
  const dialogue = t.Object({
@@ -65,7 +65,7 @@ const dictionaryCreate = t.Object({
65
65
  }, STRICT),
66
66
  ]), { minItems: 1 }),
67
67
  }, STRICT);
68
- const historyPath = (id) => `/v1/history/${seg(id, "history item id", "elevenlabs")}`;
68
+ const historyPath = (id) => `/v1/history/${pathSegment(id)}`;
69
69
  export function registerWorkflows(rl) {
70
70
  rl.registerAction("dialogue.create", {
71
71
  access: "write",
@@ -0,0 +1,14 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /** An API key, sent raw (no scheme) on the Authorization header to Emelia's
3
+ * one GraphQL endpoint. */
4
+ export const emeliaCredential = staticCredential({
5
+ id: "emelia",
6
+ auth: { kind: "apiKey", header: "Authorization" },
7
+ local: { secret: "apiKey" },
8
+ targets: {
9
+ gql: {
10
+ baseUrl: "https://graphql.emelia.io/",
11
+ methods: ["POST"],
12
+ },
13
+ },
14
+ });
@@ -1,26 +1,23 @@
1
- const GQL_URL = "https://graphql.emelia.io/graphql";
2
- async function gql(apiKey, query, variables) {
1
+ import { credentialJson, graphqlFailed } from "../../_shared/credentials.js";
2
+ import { emeliaCredential } from "./credentials.js";
3
+ async function gql(ctx, query, variables) {
3
4
  const body = { query };
4
5
  if (variables)
5
6
  body.variables = variables;
6
- const res = await fetch(GQL_URL, {
7
+ const data = (await credentialJson(ctx, emeliaCredential, "emelia", {
8
+ target: "gql",
9
+ path: "graphql",
7
10
  method: "POST",
8
- headers: {
9
- Authorization: apiKey,
10
- "Content-Type": "application/json",
11
- },
12
- body: JSON.stringify(body),
13
- });
14
- if (!res.ok)
15
- throw new Error(`Emelia API error ${res.status}: ${await res.text()}`);
16
- const data = (await res.json());
11
+ json: body,
12
+ }));
17
13
  if (data.errors)
18
- throw new Error(`Emelia GraphQL error: ${JSON.stringify(data.errors)}`);
14
+ throw graphqlFailed("emelia", data.errors);
19
15
  return data.data;
20
16
  }
21
17
  export default function emelia(rl) {
22
18
  rl.setName("emelia");
23
19
  rl.setVersion("0.1.0");
20
+ rl.setCredential(emeliaCredential);
24
21
  rl.setConnectionSchema({
25
22
  apiKey: {
26
23
  type: "string",
@@ -29,7 +26,6 @@ export default function emelia(rl) {
29
26
  env: "EMELIA_API_KEY",
30
27
  },
31
28
  });
32
- const key = (ctx) => ctx.connection.config.apiKey;
33
29
  // ── Campaign ────────────────────────────────────────
34
30
  rl.registerAction("campaign.create", {
35
31
  access: "write",
@@ -38,7 +34,7 @@ export default function emelia(rl) {
38
34
  name: { type: "string", required: true, description: "Campaign name" },
39
35
  },
40
36
  async execute(input, ctx) {
41
- const data = await gql(key(ctx), `
37
+ const data = await gql(ctx, `
42
38
  mutation createCampaign($name: String!) {
43
39
  createCampaign(name: $name) { _id name status createdAt provider startAt estimatedEnd }
44
40
  }`, { name: input.name });
@@ -56,7 +52,7 @@ export default function emelia(rl) {
56
52
  },
57
53
  },
58
54
  async execute(input, ctx) {
59
- const data = await gql(key(ctx), `
55
+ const data = await gql(ctx, `
60
56
  query campaign($id: ID!) {
61
57
  campaign(id: $id) {
62
58
  _id name status createdAt provider startAt estimatedEnd
@@ -75,7 +71,7 @@ export default function emelia(rl) {
75
71
  },
76
72
  async execute(input, ctx) {
77
73
  const { limit } = (input ?? {});
78
- const data = await gql(key(ctx), `
74
+ const data = await gql(ctx, `
79
75
  query all_campaigns {
80
76
  all_campaigns {
81
77
  _id name status createdAt
@@ -115,7 +111,7 @@ export default function emelia(rl) {
115
111
  contact.lastName = lastName;
116
112
  if (customFields)
117
113
  Object.assign(contact, customFields);
118
- const data = await gql(key(ctx), `
114
+ const data = await gql(ctx, `
119
115
  mutation AddContactToCampaignHook($id: ID!, $contact: JSON!) {
120
116
  addContactToCampaignHook(id: $id, contact: $contact)
121
117
  }`, { id: campaignId, contact });
@@ -133,7 +129,7 @@ export default function emelia(rl) {
133
129
  },
134
130
  },
135
131
  async execute(input, ctx) {
136
- await gql(key(ctx), `mutation startCampaign($id: ID!) { startCampaign(id: $id) }`, { id: input.campaignId });
132
+ await gql(ctx, `mutation startCampaign($id: ID!) { startCampaign(id: $id) }`, { id: input.campaignId });
137
133
  return { success: true };
138
134
  },
139
135
  });
@@ -148,7 +144,7 @@ export default function emelia(rl) {
148
144
  },
149
145
  },
150
146
  async execute(input, ctx) {
151
- await gql(key(ctx), `mutation pauseCampaign($id: ID!) { pauseCampaign(id: $id) }`, { id: input.campaignId });
147
+ await gql(ctx, `mutation pauseCampaign($id: ID!) { pauseCampaign(id: $id) }`, { id: input.campaignId });
152
148
  return { success: true };
153
149
  },
154
150
  });
@@ -189,7 +185,7 @@ export default function emelia(rl) {
189
185
  },
190
186
  async execute(input, ctx) {
191
187
  const { campaignId, name, copySettings = true, copyMails = true, copyContacts = false, copyProvider = true, } = input;
192
- const data = await gql(key(ctx), `
188
+ const data = await gql(ctx, `
193
189
  mutation duplicateCampaign($fromId: ID!, $name: String!, $copySettings: Boolean!, $copyMails: Boolean!, $copyContacts: Boolean!, $copyProvider: Boolean!) {
194
190
  duplicateCampaign(fromId: $fromId, name: $name, copySettings: $copySettings, copyMails: $copyMails, copyContacts: $copyContacts, copyProvider: $copyProvider)
195
191
  }`, {
@@ -212,7 +208,7 @@ export default function emelia(rl) {
212
208
  },
213
209
  async execute(input, ctx) {
214
210
  const { limit } = (input ?? {});
215
- const data = await gql(key(ctx), `
211
+ const data = await gql(ctx, `
216
212
  query contact_lists {
217
213
  contact_lists { _id name contactCount fields usedInCampaign }
218
214
  }`);
@@ -249,7 +245,7 @@ export default function emelia(rl) {
249
245
  contact.lastName = lastName;
250
246
  if (customFields)
251
247
  Object.assign(contact, customFields);
252
- const data = await gql(key(ctx), `
248
+ const data = await gql(ctx, `
253
249
  mutation AddContactsToListHook($id: ID!, $contact: JSON!) {
254
250
  addContactsToListHook(id: $id, contact: $contact)
255
251
  }`, { id: contactListId, contact });
@@ -0,0 +1,27 @@
1
+ import { httpsBase, staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * The API key and secret joined as `token {apiKey}:{apiSecret}` in the
4
+ * Authorization header, on the configured instance's own /api/ base. The
5
+ * host is public config and must be HTTPS.
6
+ */
7
+ export const erpnextCredential = staticCredential({
8
+ id: "erpnext",
9
+ auth: { kind: "apiKey", header: "Authorization", prefix: "token " },
10
+ local: {
11
+ secret: {
12
+ concat: [{ field: "apiKey" }, { value: ":" }, { field: "apiSecret" }],
13
+ },
14
+ },
15
+ targets: (config) => ({
16
+ api: {
17
+ baseUrl: httpsBase(config.host, "api/"),
18
+ methods: ["GET", "POST", "PUT", "DELETE"],
19
+ },
20
+ }),
21
+ probe: {
22
+ target: "api",
23
+ path: "method/frappe.auth.get_logged_user",
24
+ method: "GET",
25
+ acceptedStatuses: [200],
26
+ },
27
+ });
@@ -1,45 +1,24 @@
1
- async function apiRequest(host, apiKey, apiSecret, method, endpoint, body, qs) {
2
- const url = new URL(`${host}${endpoint}`);
3
- if (qs) {
4
- for (const [k, v] of Object.entries(qs)) {
5
- if (v !== undefined && v !== null)
6
- url.searchParams.set(k, String(v));
7
- }
8
- }
9
- const opts = {
10
- method,
11
- headers: {
12
- Authorization: `token ${apiKey}:${apiSecret}`,
13
- "Content-Type": "application/json",
14
- Accept: "application/json",
15
- },
16
- };
17
- if (body &&
18
- Object.keys(body).length > 0 &&
19
- method !== "GET" &&
20
- method !== "DELETE") {
21
- opts.body = JSON.stringify(body);
22
- }
23
- const res = await fetch(url.toString(), opts);
24
- if (!res.ok)
25
- throw new Error(`ERPNext API error ${res.status}: ${await res.text()}`);
26
- return res.json();
27
- }
28
- function getConn(ctx) {
29
- const cfg = ctx.connection.config;
30
- return {
31
- host: cfg.host.replace(/\/$/, ""),
32
- apiKey: cfg.apiKey,
33
- apiSecret: cfg.apiSecret,
34
- };
35
- }
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { erpnextCredential } from "./credentials.js";
3
+ /** One ERPNext call: every endpoint is a path beneath the instance's /api/. */
36
4
  function req(ctx, method, endpoint, body, qs) {
37
- const { host, apiKey, apiSecret } = getConn(ctx);
38
- return apiRequest(host, apiKey, apiSecret, method, endpoint, body, qs);
5
+ return credentialJson(ctx, erpnextCredential, "erpnext", {
6
+ target: "api",
7
+ path: endpoint,
8
+ method,
9
+ query: qs,
10
+ ...(body &&
11
+ Object.keys(body).length > 0 &&
12
+ method !== "GET" &&
13
+ method !== "DELETE"
14
+ ? { json: body }
15
+ : {}),
16
+ });
39
17
  }
40
18
  export default function erpnext(rl) {
41
19
  rl.setName("erpnext");
42
20
  rl.setVersion("0.1.0");
21
+ rl.setCredential(erpnextCredential);
43
22
  rl.setConnectionSchema({
44
23
  host: {
45
24
  type: "string",
@@ -77,7 +56,7 @@ export default function erpnext(rl) {
77
56
  },
78
57
  async execute(input, ctx) {
79
58
  const { docType, documentName } = input;
80
- const data = (await req(ctx, "GET", `/api/resource/${encodeURIComponent(docType)}/${encodeURIComponent(documentName)}`));
59
+ const data = (await req(ctx, "GET", `resource/${pathSegment(docType)}/${pathSegment(documentName)}`));
81
60
  return data.data;
82
61
  },
83
62
  });
@@ -122,7 +101,7 @@ export default function erpnext(rl) {
122
101
  qs.limit_start = offset;
123
102
  if (orderBy)
124
103
  qs.order_by = orderBy;
125
- const data = (await req(ctx, "GET", `/api/resource/${encodeURIComponent(docType)}`, undefined, qs));
104
+ const data = (await req(ctx, "GET", `resource/${pathSegment(docType)}`, undefined, qs));
126
105
  return data.data;
127
106
  },
128
107
  });
@@ -139,7 +118,7 @@ export default function erpnext(rl) {
139
118
  },
140
119
  async execute(input, ctx) {
141
120
  const { docType, properties } = input;
142
- const data = (await req(ctx, "POST", `/api/resource/${encodeURIComponent(docType)}`, properties));
121
+ const data = (await req(ctx, "POST", `resource/${pathSegment(docType)}`, properties));
143
122
  return data.data;
144
123
  },
145
124
  });
@@ -161,7 +140,7 @@ export default function erpnext(rl) {
161
140
  },
162
141
  async execute(input, ctx) {
163
142
  const { docType, documentName, properties } = input;
164
- const data = (await req(ctx, "PUT", `/api/resource/${encodeURIComponent(docType)}/${encodeURIComponent(documentName)}`, properties));
143
+ const data = (await req(ctx, "PUT", `resource/${pathSegment(docType)}/${pathSegment(documentName)}`, properties));
165
144
  return data.data;
166
145
  },
167
146
  });
@@ -178,7 +157,7 @@ export default function erpnext(rl) {
178
157
  },
179
158
  async execute(input, ctx) {
180
159
  const { docType, documentName } = input;
181
- await req(ctx, "DELETE", `/api/resource/${encodeURIComponent(docType)}/${encodeURIComponent(documentName)}`);
160
+ await req(ctx, "DELETE", `resource/${pathSegment(docType)}/${pathSegment(documentName)}`);
182
161
  return { success: true };
183
162
  },
184
163
  });