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,37 +1,24 @@
1
- async function apiRequest(apiKey, method, endpoint, body, qs) {
2
- const dc = apiKey.split("-").pop();
3
- const url = new URL(`https://${dc}.api.mailchimp.com/3.0${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 { mailchimpCredential } from "./credentials.js";
3
+ /** One Mailchimp call: every endpoint is a path beneath the account's /3.0/. */
4
+ function api(ctx, method, endpoint, body, qs) {
5
+ return credentialJson(ctx, mailchimpCredential, "mailchimp", {
6
+ target: "api",
7
+ path: endpoint,
11
8
  method,
12
- headers: {
13
- Authorization: `Basic ${btoa(`anystring:${apiKey}`)}`,
14
- Accept: "application/json",
15
- },
16
- };
17
- if (body &&
18
- Object.keys(body).length > 0 &&
19
- method !== "GET" &&
20
- method !== "DELETE") {
21
- opts.headers["Content-Type"] =
22
- "application/json";
23
- opts.body = JSON.stringify(body);
24
- }
25
- const res = await fetch(url.toString(), opts);
26
- if (!res.ok)
27
- throw new Error(`Mailchimp API error ${res.status}: ${await res.text()}`);
28
- if (res.status === 204)
29
- return { success: true };
30
- return res.json();
9
+ query: qs,
10
+ ...(body &&
11
+ Object.keys(body).length > 0 &&
12
+ method !== "GET" &&
13
+ method !== "DELETE"
14
+ ? { json: body }
15
+ : {}),
16
+ });
31
17
  }
32
18
  export default function mailchimp(rl) {
33
19
  rl.setName("mailchimp");
34
20
  rl.setVersion("0.1.0");
21
+ rl.setCredential(mailchimpCredential);
35
22
  rl.setConnectionSchema({
36
23
  apiKey: {
37
24
  type: "string",
@@ -39,8 +26,13 @@ export default function mailchimp(rl) {
39
26
  description: "Mailchimp API key (includes datacenter suffix, e.g. xxx-us21)",
40
27
  env: "MAILCHIMP_API_KEY",
41
28
  },
29
+ server: {
30
+ type: "string",
31
+ required: false,
32
+ description: "Datacenter prefix (e.g. us21); defaults to the API key's suffix",
33
+ env: "MAILCHIMP_SERVER",
34
+ },
42
35
  });
43
- const key = (ctx) => ctx.connection.config.apiKey;
44
36
  // ── Member ──────────────────────────────────────────
45
37
  rl.registerAction("member.create", {
46
38
  access: "write",
@@ -125,7 +117,7 @@ export default function mailchimp(rl) {
125
117
  body.timestamp_signup = p.timestampSignup;
126
118
  if (p.timestampOpt)
127
119
  body.timestamp_opt = p.timestampOpt;
128
- return apiRequest(key(ctx), "POST", `/lists/${p.listId}/members`, body);
120
+ return api(ctx, "POST", `lists/${pathSegment(p.listId)}/members`, body);
129
121
  },
130
122
  });
131
123
  rl.registerAction("member.get", {
@@ -156,7 +148,7 @@ export default function mailchimp(rl) {
156
148
  qs.fields = fields;
157
149
  if (excludeFields)
158
150
  qs.exclude_fields = excludeFields;
159
- return apiRequest(key(ctx), "GET", `/lists/${listId}/members/${email}`, undefined, qs);
151
+ return api(ctx, "GET", `lists/${pathSegment(listId)}/members/${pathSegment(email)}`, undefined, qs);
160
152
  },
161
153
  });
162
154
  rl.registerAction("member.list", {
@@ -213,7 +205,7 @@ export default function mailchimp(rl) {
213
205
  qs.before_last_changed = p.beforeLastChanged;
214
206
  if (p.beforeTimestampOpt)
215
207
  qs.before_timestamp_opt = p.beforeTimestampOpt;
216
- const data = (await apiRequest(key(ctx), "GET", `/lists/${p.listId}/members`, undefined, qs));
208
+ const data = (await api(ctx, "GET", `lists/${pathSegment(p.listId)}/members`, undefined, qs));
217
209
  return data.members;
218
210
  },
219
211
  });
@@ -268,7 +260,7 @@ export default function mailchimp(rl) {
268
260
  body.timestamp_opt = p.timestampOpt;
269
261
  if (p.skipMergeValidation)
270
262
  qs.skip_merge_validation = p.skipMergeValidation;
271
- return apiRequest(key(ctx), "PUT", `/lists/${p.listId}/members/${p.email}`, body, Object.keys(qs).length > 0 ? qs : undefined);
263
+ return api(ctx, "PUT", `lists/${pathSegment(p.listId)}/members/${pathSegment(p.email)}`, body, Object.keys(qs).length > 0 ? qs : undefined);
272
264
  },
273
265
  });
274
266
  rl.registerAction("member.delete", {
@@ -280,7 +272,7 @@ export default function mailchimp(rl) {
280
272
  },
281
273
  async execute(input, ctx) {
282
274
  const { listId, email } = input;
283
- await apiRequest(key(ctx), "POST", `/lists/${listId}/members/${email}/actions/delete-permanent`);
275
+ await api(ctx, "POST", `lists/${pathSegment(listId)}/members/${pathSegment(email)}/actions/delete-permanent`);
284
276
  return { success: true };
285
277
  },
286
278
  });
@@ -309,7 +301,7 @@ export default function mailchimp(rl) {
309
301
  };
310
302
  if (isSyncing)
311
303
  body.is_syncing = isSyncing;
312
- await apiRequest(key(ctx), "POST", `/lists/${listId}/members/${email}/tags`, body);
304
+ await api(ctx, "POST", `lists/${pathSegment(listId)}/members/${pathSegment(email)}/tags`, body);
313
305
  return { success: true };
314
306
  },
315
307
  });
@@ -333,7 +325,7 @@ export default function mailchimp(rl) {
333
325
  };
334
326
  if (isSyncing)
335
327
  body.is_syncing = isSyncing;
336
- await apiRequest(key(ctx), "POST", `/lists/${listId}/members/${email}/tags`, body);
328
+ await api(ctx, "POST", `lists/${pathSegment(listId)}/members/${pathSegment(email)}/tags`, body);
337
329
  return { success: true };
338
330
  },
339
331
  });
@@ -355,7 +347,7 @@ export default function mailchimp(rl) {
355
347
  const qs = {};
356
348
  if (count)
357
349
  qs.count = count;
358
- const data = (await apiRequest(key(ctx), "GET", `/lists/${listId}/interest-categories/${categoryId}/interests`, undefined, qs));
350
+ const data = (await api(ctx, "GET", `lists/${pathSegment(listId)}/interest-categories/${pathSegment(categoryId)}/interests`, undefined, qs));
359
351
  return data.interests;
360
352
  },
361
353
  });
@@ -365,7 +357,7 @@ export default function mailchimp(rl) {
365
357
  description: "Get a campaign",
366
358
  inputSchema: { campaignId: { type: "string", required: true } },
367
359
  async execute(input, ctx) {
368
- return apiRequest(key(ctx), "GET", `/campaigns/${input.campaignId}`);
360
+ return api(ctx, "GET", `campaigns/${pathSegment(input.campaignId)}`);
369
361
  },
370
362
  });
371
363
  rl.registerAction("campaign.list", {
@@ -445,7 +437,7 @@ export default function mailchimp(rl) {
445
437
  qs.sort_field = p.sortField;
446
438
  if (p.sortDirection)
447
439
  qs.sort_dir = p.sortDirection;
448
- const data = (await apiRequest(key(ctx), "GET", "/campaigns", undefined, qs));
440
+ const data = (await api(ctx, "GET", "campaigns", undefined, qs));
449
441
  return data.campaigns;
450
442
  },
451
443
  });
@@ -454,7 +446,7 @@ export default function mailchimp(rl) {
454
446
  description: "Send a campaign",
455
447
  inputSchema: { campaignId: { type: "string", required: true } },
456
448
  async execute(input, ctx) {
457
- await apiRequest(key(ctx), "POST", `/campaigns/${input.campaignId}/actions/send`);
449
+ await api(ctx, "POST", `campaigns/${pathSegment(input.campaignId)}/actions/send`);
458
450
  return { success: true };
459
451
  },
460
452
  });
@@ -463,7 +455,7 @@ export default function mailchimp(rl) {
463
455
  description: "Replicate a campaign",
464
456
  inputSchema: { campaignId: { type: "string", required: true } },
465
457
  async execute(input, ctx) {
466
- return apiRequest(key(ctx), "POST", `/campaigns/${input.campaignId}/actions/replicate`);
458
+ return api(ctx, "POST", `campaigns/${pathSegment(input.campaignId)}/actions/replicate`);
467
459
  },
468
460
  });
469
461
  rl.registerAction("campaign.resend", {
@@ -471,7 +463,7 @@ export default function mailchimp(rl) {
471
463
  description: "Create a resend to non-openers",
472
464
  inputSchema: { campaignId: { type: "string", required: true } },
473
465
  async execute(input, ctx) {
474
- return apiRequest(key(ctx), "POST", `/campaigns/${input.campaignId}/actions/create-resend`);
466
+ return api(ctx, "POST", `campaigns/${pathSegment(input.campaignId)}/actions/create-resend`);
475
467
  },
476
468
  });
477
469
  rl.registerAction("campaign.delete", {
@@ -479,7 +471,7 @@ export default function mailchimp(rl) {
479
471
  description: "Delete a campaign",
480
472
  inputSchema: { campaignId: { type: "string", required: true } },
481
473
  async execute(input, ctx) {
482
- await apiRequest(key(ctx), "DELETE", `/campaigns/${input.campaignId}`);
474
+ await api(ctx, "DELETE", `campaigns/${pathSegment(input.campaignId)}`);
483
475
  return { success: true };
484
476
  },
485
477
  });
@@ -0,0 +1,13 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /** An API token, sent as a bearer to MailerLite's connect API origin. */
3
+ export const mailerliteCredential = staticCredential({
4
+ id: "mailerlite",
5
+ auth: { kind: "bearer" },
6
+ local: { secret: "apiKey" },
7
+ targets: {
8
+ api: {
9
+ baseUrl: "https://connect.mailerlite.com/api/",
10
+ methods: ["GET", "POST", "PUT"],
11
+ },
12
+ },
13
+ });
@@ -1,37 +1,24 @@
1
- const BASE_URL = "https://connect.mailerlite.com/api";
2
- async function apiRequest(token, method, endpoint, body, qs) {
3
- const url = new URL(`${BASE_URL}${endpoint}`);
4
- if (qs) {
5
- for (const [k, v] of Object.entries(qs)) {
6
- if (v !== undefined && v !== null)
7
- url.searchParams.set(k, String(v));
8
- }
9
- }
10
- const opts = {
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { mailerliteCredential } from "./credentials.js";
3
+ function api(ctx, method, path, body, qs) {
4
+ return credentialJson(ctx, mailerliteCredential, "mailerlite", {
5
+ target: "api",
6
+ path,
11
7
  method,
12
- headers: {
13
- Authorization: `Bearer ${token}`,
14
- "Content-Type": "application/json",
15
- },
16
- };
17
- if (body &&
18
- Object.keys(body).length > 0 &&
19
- method !== "GET" &&
20
- method !== "DELETE")
21
- opts.body = JSON.stringify(body);
22
- const res = await fetch(url.toString(), opts);
23
- if (!res.ok)
24
- throw new Error(`MailerLite API error ${res.status}: ${await res.text()}`);
25
- return res.json();
8
+ query: qs,
9
+ ...(body && Object.keys(body).length > 0 && method !== "GET"
10
+ ? { json: body }
11
+ : {}),
12
+ });
26
13
  }
27
- async function paginateAll(token, method, endpoint, qs = {}) {
14
+ async function paginateAll(ctx, method, endpoint, qs = {}) {
28
15
  const all = [];
29
16
  qs.limit = 1000;
30
17
  let cursor = null;
31
18
  do {
32
19
  if (cursor)
33
20
  qs.cursor = cursor;
34
- const resp = (await apiRequest(token, method, endpoint, undefined, qs));
21
+ const resp = (await api(ctx, method, endpoint, undefined, qs));
35
22
  const data = resp.data;
36
23
  if (data)
37
24
  all.push(...data);
@@ -46,6 +33,7 @@ async function paginateAll(token, method, endpoint, qs = {}) {
46
33
  export default function mailerlite(rl) {
47
34
  rl.setName("mailerlite");
48
35
  rl.setVersion("0.1.0");
36
+ rl.setCredential(mailerliteCredential);
49
37
  rl.setConnectionSchema({
50
38
  apiKey: {
51
39
  type: "string",
@@ -54,7 +42,6 @@ export default function mailerlite(rl) {
54
42
  env: "MAILERLITE_API_KEY",
55
43
  },
56
44
  });
57
- const tok = (ctx) => ctx.connection.config.apiKey;
58
45
  rl.registerAction("subscriber.create", {
59
46
  access: "write",
60
47
  description: "Create a subscriber",
@@ -93,7 +80,7 @@ export default function mailerlite(rl) {
93
80
  if (v !== undefined && v !== null)
94
81
  body[k] = v;
95
82
  }
96
- const resp = (await apiRequest(tok(ctx), "POST", "/subscribers", body));
83
+ const resp = (await api(ctx, "POST", "subscribers", body));
97
84
  return resp.data;
98
85
  },
99
86
  });
@@ -108,7 +95,7 @@ export default function mailerlite(rl) {
108
95
  },
109
96
  },
110
97
  async execute(input, ctx) {
111
- const resp = (await apiRequest(tok(ctx), "GET", `/subscribers/${encodeURIComponent(input.subscriberId)}`));
98
+ const resp = (await api(ctx, "GET", `subscribers/${pathSegment(input.subscriberId)}`));
112
99
  return resp.data;
113
100
  },
114
101
  });
@@ -130,10 +117,10 @@ export default function mailerlite(rl) {
130
117
  qs["filter[status]"] = status;
131
118
  if (limit) {
132
119
  qs.limit = limit;
133
- const resp = (await apiRequest(tok(ctx), "GET", "/subscribers", undefined, qs));
120
+ const resp = (await api(ctx, "GET", "subscribers", undefined, qs));
134
121
  return resp.data;
135
122
  }
136
- return paginateAll(tok(ctx), "GET", "/subscribers", qs);
123
+ return paginateAll(ctx, "GET", "subscribers", qs);
137
124
  },
138
125
  });
139
126
  rl.registerAction("subscriber.update", {
@@ -170,7 +157,7 @@ export default function mailerlite(rl) {
170
157
  if (v !== undefined && v !== null && k !== "subscriberId")
171
158
  body[k] = v;
172
159
  }
173
- return apiRequest(tok(ctx), "PUT", `/subscribers/${encodeURIComponent(subscriberId)}`, body);
160
+ return api(ctx, "PUT", `subscribers/${pathSegment(subscriberId)}`, body);
174
161
  },
175
162
  });
176
163
  }
@@ -0,0 +1,21 @@
1
+ import { configChoice, staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * An API key as the Basic password with the fixed username "api", to
4
+ * Mailgun's two documented regional origins. The connection's apiDomain
5
+ * picks the region; any other value is refused rather than signed for.
6
+ */
7
+ export const mailgunCredential = staticCredential({
8
+ id: "mailgun",
9
+ auth: { kind: "basic" },
10
+ local: { username: { value: "api" }, password: "apiKey" },
11
+ targets: {
12
+ us: { baseUrl: "https://api.mailgun.net/v3/", methods: ["POST"] },
13
+ eu: { baseUrl: "https://api.eu.mailgun.net/v3/", methods: ["POST"] },
14
+ },
15
+ });
16
+ /** The target the connection's apiDomain names. */
17
+ export function mailgunRegion(config) {
18
+ return configChoice(config.apiDomain, ["api.mailgun.net", "api.eu.mailgun.net"], "api.mailgun.net") === "api.eu.mailgun.net"
19
+ ? "eu"
20
+ : "us";
21
+ }
@@ -1,6 +1,9 @@
1
+ import { credentialJson, pathSegment } from "../../_shared/credentials.js";
2
+ import { mailgunCredential, mailgunRegion } from "./credentials.js";
1
3
  export default function mailgun(rl) {
2
4
  rl.setName("mailgun");
3
5
  rl.setVersion("0.1.0");
6
+ rl.setCredential(mailgunCredential);
4
7
  rl.setConnectionSchema({
5
8
  apiKey: {
6
9
  type: "string",
@@ -53,29 +56,20 @@ export default function mailgun(rl) {
53
56
  async execute(input, ctx) {
54
57
  const { to, from, subject, text, html, cc, bcc } = input;
55
58
  const cfg = ctx.connection.config;
56
- const apiKey = cfg.apiKey;
57
- const apiDomain = cfg.apiDomain ?? "api.mailgun.net";
58
- const emailDomain = cfg.emailDomain;
59
- const form = new URLSearchParams();
60
- form.set("to", to);
61
- form.set("from", from);
62
- form.set("subject", subject);
63
- if (text)
64
- form.set("text", text);
65
- if (html)
66
- form.set("html", html);
67
- if (cc)
68
- form.set("cc", cc);
69
- if (bcc)
70
- form.set("bcc", bcc);
71
- const res = await fetch(`https://${apiDomain}/v3/${emailDomain}/messages`, {
59
+ return credentialJson(ctx, mailgunCredential, "mailgun", {
60
+ target: mailgunRegion(cfg),
61
+ path: `${pathSegment(cfg.emailDomain)}/messages`,
72
62
  method: "POST",
73
- headers: { Authorization: `Basic ${btoa(`api:${apiKey}`)}` },
74
- body: form,
63
+ form: {
64
+ to,
65
+ from,
66
+ subject,
67
+ text: text || undefined,
68
+ html: html || undefined,
69
+ cc: cc || undefined,
70
+ bcc: bcc || undefined,
71
+ },
75
72
  });
76
- if (!res.ok)
77
- throw new Error(`Mailgun error ${res.status}: ${await res.text()}`);
78
- return res.json();
79
73
  },
80
74
  });
81
75
  }
@@ -0,0 +1,38 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /**
3
+ * The API key pair, sent as HTTP Basic to the v3.1 email API, and an
4
+ * optional SMS token, sent as a bearer to the v4 SMS API. A connection
5
+ * without the SMS token is refused on the SMS API.
6
+ */
7
+ export const mailjetCredential = staticCredential({
8
+ id: "mailjet",
9
+ auth: {
10
+ kind: "static",
11
+ parts: ["publicKey", "privateKey", "smsToken"],
12
+ optionalParts: ["smsToken"],
13
+ placements: [
14
+ {
15
+ in: "basic",
16
+ username: "publicKey",
17
+ password: "privateKey",
18
+ targets: ["email"],
19
+ },
20
+ {
21
+ in: "header",
22
+ part: "smsToken",
23
+ name: "Authorization",
24
+ prefix: "Bearer ",
25
+ targets: ["sms"],
26
+ },
27
+ ],
28
+ },
29
+ local: {
30
+ publicKey: "apiKeyPublic",
31
+ privateKey: "apiKeyPrivate",
32
+ smsToken: "smsToken",
33
+ },
34
+ targets: {
35
+ email: { baseUrl: "https://api.mailjet.com/v3.1/", methods: ["POST"] },
36
+ sms: { baseUrl: "https://api.mailjet.com/v4/", methods: ["POST"] },
37
+ },
38
+ });
@@ -1,7 +1,57 @@
1
- const BASE_URL = "https://api.mailjet.com";
1
+ import { configFlag, credentialJson } from "../../_shared/credentials.js";
2
+ import { mailjetCredential } from "./credentials.js";
3
+ /** A comma-separated address list as Send API recipients. */
4
+ function emails(list) {
5
+ return String(list)
6
+ .split(",")
7
+ .map((address) => ({ Email: address.trim() }));
8
+ }
9
+ /** The message fields plain and template sends share, from action input. */
10
+ function message(p) {
11
+ const fields = {
12
+ From: { Email: p.fromEmail, ...(p.fromName ? { Name: p.fromName } : {}) },
13
+ Subject: p.subject,
14
+ To: emails(p.toEmail),
15
+ };
16
+ if (p.cc)
17
+ fields.Cc = emails(p.cc);
18
+ if (p.bcc)
19
+ fields.Bcc = emails(p.bcc);
20
+ if (p.replyTo)
21
+ fields.ReplyTo = { Email: p.replyTo };
22
+ if (p.variables)
23
+ fields.Variables = p.variables;
24
+ if (p.trackOpens)
25
+ fields.TrackOpens = p.trackOpens;
26
+ if (p.trackClicks)
27
+ fields.TrackClicks = p.trackClicks;
28
+ if (p.templateLanguage !== undefined)
29
+ fields.TemplateLanguage = p.templateLanguage;
30
+ if (p.priority)
31
+ fields.Priority = p.priority;
32
+ if (p.customCampaign)
33
+ fields.CustomCampaign = p.customCampaign;
34
+ if (p.deduplicateCampaign !== undefined)
35
+ fields.DeduplicateCampaign = p.deduplicateCampaign;
36
+ return fields;
37
+ }
38
+ /** One message through the v3.1 Send API, in sandbox mode when the connection asks. */
39
+ async function sendMessage(ctx, body) {
40
+ const data = await credentialJson(ctx, mailjetCredential, "mailjet", {
41
+ target: "email",
42
+ path: "send",
43
+ method: "POST",
44
+ json: {
45
+ Messages: [body],
46
+ SandboxMode: configFlag(ctx.connection.config.sandboxMode),
47
+ },
48
+ });
49
+ return data.Messages;
50
+ }
2
51
  export default function mailjet(rl) {
3
52
  rl.setName("mailjet");
4
53
  rl.setVersion("0.1.0");
54
+ rl.setCredential(mailjetCredential);
5
55
  rl.setConnectionSchema({
6
56
  apiKeyPublic: {
7
57
  type: "string",
@@ -28,8 +78,6 @@ export default function mailjet(rl) {
28
78
  env: "MAILJET_SMS_TOKEN",
29
79
  },
30
80
  });
31
- const emailAuth = (ctx) => `Basic ${btoa(`${ctx.connection.config.apiKeyPublic}:${ctx.connection.config.apiKeyPrivate}`)}`;
32
- const sandbox = (ctx) => ctx.connection.config.sandboxMode ?? false;
33
81
  rl.registerAction("email.send", {
34
82
  access: "write",
35
83
  description: "Send an email via Mailjet Send API v3.1",
@@ -93,58 +141,11 @@ export default function mailjet(rl) {
93
141
  },
94
142
  async execute(input, ctx) {
95
143
  const p = input;
96
- const message = {
97
- From: {
98
- Email: p.fromEmail,
99
- ...(p.fromName ? { Name: p.fromName } : {}),
100
- },
101
- Subject: p.subject,
102
- To: p.toEmail.split(",").map((e) => ({ Email: e.trim() })),
103
- };
104
- if (p.htmlPart)
105
- message.HTMLPart = p.htmlPart;
106
- if (p.textPart)
107
- message.TextPart = p.textPart;
108
- if (p.cc)
109
- message.Cc = p.cc
110
- .split(",")
111
- .map((e) => ({ Email: e.trim() }));
112
- if (p.bcc)
113
- message.Bcc = p.bcc
114
- .split(",")
115
- .map((e) => ({ Email: e.trim() }));
116
- if (p.replyTo)
117
- message.ReplyTo = { Email: p.replyTo };
118
- if (p.variables)
119
- message.Variables = p.variables;
120
- if (p.trackOpens)
121
- message.TrackOpens = p.trackOpens;
122
- if (p.trackClicks)
123
- message.TrackClicks = p.trackClicks;
124
- if (p.templateLanguage !== undefined)
125
- message.TemplateLanguage = p.templateLanguage;
126
- if (p.priority)
127
- message.Priority = p.priority;
128
- if (p.customCampaign)
129
- message.CustomCampaign = p.customCampaign;
130
- if (p.deduplicateCampaign !== undefined)
131
- message.DeduplicateCampaign = p.deduplicateCampaign;
132
- const res = await fetch(`${BASE_URL}/v3.1/send`, {
133
- method: "POST",
134
- headers: {
135
- Authorization: emailAuth(ctx),
136
- "Content-Type": "application/json",
137
- Accept: "application/json",
138
- },
139
- body: JSON.stringify({
140
- Messages: [message],
141
- SandboxMode: sandbox(ctx),
142
- }),
144
+ return sendMessage(ctx, {
145
+ ...message(p),
146
+ ...(p.htmlPart ? { HTMLPart: p.htmlPart } : {}),
147
+ ...(p.textPart ? { TextPart: p.textPart } : {}),
143
148
  });
144
- if (!res.ok)
145
- throw new Error(`Mailjet API error ${res.status}: ${await res.text()}`);
146
- const data = (await res.json());
147
- return data.Messages;
148
149
  },
149
150
  });
150
151
  rl.registerAction("email.sendTemplate", {
@@ -181,55 +182,7 @@ export default function mailjet(rl) {
181
182
  },
182
183
  async execute(input, ctx) {
183
184
  const p = input;
184
- const message = {
185
- From: {
186
- Email: p.fromEmail,
187
- ...(p.fromName ? { Name: p.fromName } : {}),
188
- },
189
- Subject: p.subject,
190
- To: p.toEmail.split(",").map((e) => ({ Email: e.trim() })),
191
- TemplateID: p.templateId,
192
- };
193
- if (p.variables)
194
- message.Variables = p.variables;
195
- if (p.cc)
196
- message.Cc = p.cc
197
- .split(",")
198
- .map((e) => ({ Email: e.trim() }));
199
- if (p.bcc)
200
- message.Bcc = p.bcc
201
- .split(",")
202
- .map((e) => ({ Email: e.trim() }));
203
- if (p.replyTo)
204
- message.ReplyTo = { Email: p.replyTo };
205
- if (p.trackOpens)
206
- message.TrackOpens = p.trackOpens;
207
- if (p.trackClicks)
208
- message.TrackClicks = p.trackClicks;
209
- if (p.templateLanguage !== undefined)
210
- message.TemplateLanguage = p.templateLanguage;
211
- if (p.priority)
212
- message.Priority = p.priority;
213
- if (p.customCampaign)
214
- message.CustomCampaign = p.customCampaign;
215
- if (p.deduplicateCampaign !== undefined)
216
- message.DeduplicateCampaign = p.deduplicateCampaign;
217
- const res = await fetch(`${BASE_URL}/v3.1/send`, {
218
- method: "POST",
219
- headers: {
220
- Authorization: emailAuth(ctx),
221
- "Content-Type": "application/json",
222
- Accept: "application/json",
223
- },
224
- body: JSON.stringify({
225
- Messages: [message],
226
- SandboxMode: sandbox(ctx),
227
- }),
228
- });
229
- if (!res.ok)
230
- throw new Error(`Mailjet API error ${res.status}: ${await res.text()}`);
231
- const data = (await res.json());
232
- return data.Messages;
185
+ return sendMessage(ctx, { ...message(p), TemplateID: p.templateId });
233
186
  },
234
187
  });
235
188
  rl.registerAction("sms.send", {
@@ -250,20 +203,12 @@ export default function mailjet(rl) {
250
203
  },
251
204
  async execute(input, ctx) {
252
205
  const { from, to, text } = input;
253
- const smsToken = ctx.connection.config.smsToken;
254
- if (!smsToken)
255
- throw new Error("SMS token not configured — set smsToken in connection config");
256
- const res = await fetch(`${BASE_URL}/v4/sms-send`, {
206
+ return credentialJson(ctx, mailjetCredential, "mailjet", {
207
+ target: "sms",
208
+ path: "sms-send",
257
209
  method: "POST",
258
- headers: {
259
- Authorization: `Bearer ${smsToken}`,
260
- "Content-Type": "application/json",
261
- },
262
- body: JSON.stringify({ From: from, To: to, Text: text }),
210
+ json: { From: from, To: to, Text: text },
263
211
  });
264
- if (!res.ok)
265
- throw new Error(`Mailjet SMS error ${res.status}: ${await res.text()}`);
266
- return res.json();
267
212
  },
268
213
  });
269
214
  }
@@ -0,0 +1,17 @@
1
+ import { staticCredential } from "../../_shared/credentials.js";
2
+ /** An API key, added by the transport as the key field of every JSON call to Mandrill. */
3
+ export const mandrillCredential = staticCredential({
4
+ id: "mandrill",
5
+ auth: {
6
+ kind: "static",
7
+ parts: ["key"],
8
+ placements: [{ in: "body", part: "key", name: "key" }],
9
+ },
10
+ local: { key: "apiKey" },
11
+ targets: {
12
+ api: {
13
+ baseUrl: "https://mandrillapp.com/api/1.0/",
14
+ methods: ["POST"],
15
+ },
16
+ },
17
+ });