@oomol-lab/open-connector 1.9.2 → 1.9.3

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 (486) hide show
  1. package/README.md +4 -2
  2. package/assets/open-connector/catalog/apps/allratestoday.json +174 -0
  3. package/assets/open-connector/catalog/apps/slackbot.json +20 -1
  4. package/assets/open-connector/catalog/apps-index.json +1 -1
  5. package/package.json +1 -1
  6. package/src/connection-error.d.ts +7 -0
  7. package/src/connection-error.js +10 -0
  8. package/src/connection-service.d.ts +2 -50
  9. package/src/connection-service.js +6 -130
  10. package/src/connection-store.d.ts +41 -0
  11. package/src/connection-store.js +1 -0
  12. package/src/core/guarded-fetch.d.ts +3 -0
  13. package/src/core/guarded-fetch.js +8 -1
  14. package/src/core/provider-network-policy.d.ts +15 -0
  15. package/src/core/provider-network-policy.js +11 -0
  16. package/src/core/request.d.ts +18 -14
  17. package/src/core/request.js +11 -35
  18. package/src/credential-resolver.d.ts +24 -0
  19. package/src/credential-resolver.js +131 -0
  20. package/src/mcp.js +1 -1
  21. package/src/oauth/oauth-client-config-service.d.ts +1 -1
  22. package/src/oauth/oauth-client-config-service.js +14 -2
  23. package/src/oauth/oauth-credential-refresh-service.js +1 -1
  24. package/src/oauth/oauth-flow-service.d.ts +9 -1
  25. package/src/oauth/oauth-flow-service.js +11 -1
  26. package/src/providers/abuseipdb/executors.js +3 -4
  27. package/src/providers/action-contracts.generated.d.ts +1 -0
  28. package/src/providers/addressfinder/executors.js +2 -3
  29. package/src/providers/aeroleads/executors.js +3 -3
  30. package/src/providers/affinity/runtime.js +6 -7
  31. package/src/providers/aftership/executors.js +2 -2
  32. package/src/providers/agent_mail/runtime.js +2 -2
  33. package/src/providers/agentql/runtime.js +2 -2
  34. package/src/providers/agenty/runtime.js +5 -6
  35. package/src/providers/agiled/runtime.d.ts +0 -1
  36. package/src/providers/agiled/runtime.js +2 -3
  37. package/src/providers/agility/runtime.js +2 -3
  38. package/src/providers/ahrefs/runtime.js +3 -3
  39. package/src/providers/aifinmarket/runtime.js +6 -7
  40. package/src/providers/airtable/executors.js +3 -3
  41. package/src/providers/alchemy/runtime.js +2 -2
  42. package/src/providers/algolia/runtime.js +3 -3
  43. package/src/providers/aliyun_oss/executors.js +7 -7
  44. package/src/providers/allratestoday/executors.d.ts +3 -0
  45. package/src/providers/allratestoday/executors.js +18 -0
  46. package/src/providers/allratestoday/runtime.d.ts +17 -0
  47. package/src/providers/allratestoday/runtime.js +104 -0
  48. package/src/providers/alpaca/runtime.js +2 -3
  49. package/src/providers/alpha_vantage/runtime.js +2 -2
  50. package/src/providers/alt_text_ai/runtime.js +2 -2
  51. package/src/providers/altiria/executors.js +3 -3
  52. package/src/providers/amap/runtime.js +3 -3
  53. package/src/providers/ambee/runtime.js +2 -2
  54. package/src/providers/ambivo/executors.js +3 -3
  55. package/src/providers/amilia/runtime.js +1 -1
  56. package/src/providers/amplemarket/runtime.js +2 -2
  57. package/src/providers/amplitude/runtime.js +3 -3
  58. package/src/providers/anysearch/runtime.js +4 -4
  59. package/src/providers/apaleo/runtime.js +2 -2
  60. package/src/providers/api_sports/executors.js +3 -4
  61. package/src/providers/apiverve/executors.js +2 -3
  62. package/src/providers/apollo/executors.js +2 -3
  63. package/src/providers/appcircle/runtime.js +5 -5
  64. package/src/providers/appdrag/executors.js +2 -3
  65. package/src/providers/arcgis_online/executors.js +2 -2
  66. package/src/providers/auth0_management/runtime.js +2 -3
  67. package/src/providers/autoblogger/executors.js +3 -3
  68. package/src/providers/baidu_maps/runtime.js +3 -3
  69. package/src/providers/baidu_netdisk/runtime-mcp.js +3 -4
  70. package/src/providers/bark/executors.js +5 -5
  71. package/src/providers/bitrise/runtime.js +3 -3
  72. package/src/providers/bouncer/executors.js +3 -4
  73. package/src/providers/browse_ai/runtime.js +3 -4
  74. package/src/providers/browserstack/executors.js +6 -7
  75. package/src/providers/buildkite/runtime.js +3 -3
  76. package/src/providers/bunnycdn/runtime.js +3 -3
  77. package/src/providers/businessmap/runtime.js +6 -7
  78. package/src/providers/buttondown/runtime.js +2 -2
  79. package/src/providers/byteforms/runtime.js +2 -2
  80. package/src/providers/calendly/runtime.js +2 -2
  81. package/src/providers/captainbi/runtime.js +6 -6
  82. package/src/providers/castingwords/runtime.js +1 -1
  83. package/src/providers/chatpdf/runtime.js +4 -4
  84. package/src/providers/check/executors.js +3 -4
  85. package/src/providers/checkly/executors.js +3 -4
  86. package/src/providers/chengxin/runtime.js +3 -3
  87. package/src/providers/cincopa/executors.js +3 -4
  88. package/src/providers/circle/executors.js +3 -4
  89. package/src/providers/clearout/executors.js +1 -2
  90. package/src/providers/clickhelp/runtime.js +5 -5
  91. package/src/providers/clickhouse/runtime.js +4 -4
  92. package/src/providers/clinicalkey/runtime.js +3 -3
  93. package/src/providers/clinicaltrials_gov/runtime.js +4 -5
  94. package/src/providers/clockify/runtime.js +4 -4
  95. package/src/providers/close/runtime.js +3 -3
  96. package/src/providers/cloudconvert/runtime.js +8 -9
  97. package/src/providers/cloudflare_dns/runtime.js +2 -2
  98. package/src/providers/cloudflare_email_routing/runtime.js +2 -2
  99. package/src/providers/cloudflare_r2/runtime.js +5 -5
  100. package/src/providers/cloudflare_worker/runtime.js +10 -10
  101. package/src/providers/cloudinary/runtime.js +4 -4
  102. package/src/providers/cloudlayer/runtime.js +5 -5
  103. package/src/providers/codacy/runtime.js +2 -2
  104. package/src/providers/codemagic/runtime.js +2 -2
  105. package/src/providers/confluence/executors.js +4 -4
  106. package/src/providers/confluence/runtime.d.ts +0 -1
  107. package/src/providers/confluence/runtime.js +6 -7
  108. package/src/providers/contactout/runtime.js +5 -5
  109. package/src/providers/contentful/runtime.js +2 -2
  110. package/src/providers/contentstack_content_delivery/runtime.js +1 -1
  111. package/src/providers/cronly/runtime.js +2 -2
  112. package/src/providers/crossref/runtime.js +3 -3
  113. package/src/providers/cutt_ly/runtime.js +3 -3
  114. package/src/providers/cyberimpact/runtime.js +3 -3
  115. package/src/providers/dachser/executors.js +2 -2
  116. package/src/providers/dailybot/runtime.js +1 -1
  117. package/src/providers/databox/runtime.js +2 -2
  118. package/src/providers/databricks/runtime.js +2 -2
  119. package/src/providers/datacite/runtime.js +1 -1
  120. package/src/providers/datadog/executors.js +3 -4
  121. package/src/providers/datascope/runtime.js +2 -2
  122. package/src/providers/daytona/executors.js +3 -3
  123. package/src/providers/deepgram/runtime.js +2 -2
  124. package/src/providers/deepl/runtime.js +4 -4
  125. package/src/providers/detrack/executors.js +5 -5
  126. package/src/providers/deutschlandgpt/runtime.js +2 -2
  127. package/src/providers/dialmycalls/runtime.js +4 -4
  128. package/src/providers/diffbot/executors.js +4 -4
  129. package/src/providers/digistore24/executors.js +3 -3
  130. package/src/providers/dingtalk_bot/executors.js +1 -1
  131. package/src/providers/discourse/executors.d.ts +0 -1
  132. package/src/providers/discourse/executors.js +6 -7
  133. package/src/providers/docugenerate/runtime.js +3 -3
  134. package/src/providers/doppler/runtime.shared.js +3 -3
  135. package/src/providers/doppler_marketing_automation/runtime.js +4 -4
  136. package/src/providers/dovetail/runtime.js +2 -2
  137. package/src/providers/dropcontact/runtime.js +3 -3
  138. package/src/providers/dub/executors.js +6 -6
  139. package/src/providers/dumplingai/runtime.js +2 -2
  140. package/src/providers/elevenlabs/executors.js +4 -4
  141. package/src/providers/elevenreader/runtime.js +1 -1
  142. package/src/providers/emailoctopus/runtime.js +4 -4
  143. package/src/providers/embase/runtime.js +3 -3
  144. package/src/providers/emelia/executors.js +2 -2
  145. package/src/providers/enigma/executors.js +3 -3
  146. package/src/providers/eodhd_apis/executors.js +2 -2
  147. package/src/providers/eventzilla/runtime.js +3 -4
  148. package/src/providers/evervault/runtime.js +1 -1
  149. package/src/providers/excalidraw_mcp/runtime.js +3 -4
  150. package/src/providers/excel/runtime.js +6 -6
  151. package/src/providers/expofp/runtime.js +2 -2
  152. package/src/providers/faktoora/runtime.js +5 -5
  153. package/src/providers/fast_note_sync/runtime.js +2 -2
  154. package/src/providers/feathery/executors.js +2 -3
  155. package/src/providers/feishu_app_bot/executors.js +2 -3
  156. package/src/providers/feishu_custom_bot/executors.js +2 -3
  157. package/src/providers/ffhub/executors.js +2 -3
  158. package/src/providers/fidel_api/executors.js +2 -3
  159. package/src/providers/files_com/executors.js +2 -3
  160. package/src/providers/fireberry/runtime.d.ts +0 -1
  161. package/src/providers/fireberry/runtime.js +3 -4
  162. package/src/providers/firehydrant/executors.js +2 -3
  163. package/src/providers/float/executors.js +2 -3
  164. package/src/providers/flomo/executors.js +5 -6
  165. package/src/providers/flowiseai/executors.js +2 -3
  166. package/src/providers/fluxguard/executors.js +2 -3
  167. package/src/providers/folk/executors.js +2 -3
  168. package/src/providers/football_data/executors.js +2 -3
  169. package/src/providers/forem/executors.js +2 -3
  170. package/src/providers/formbricks/executors.js +2 -3
  171. package/src/providers/formsite/executors.js +3 -4
  172. package/src/providers/formspree/executors.js +2 -2
  173. package/src/providers/freshdesk/executors.js +3 -4
  174. package/src/providers/freshservice/executors.js +3 -4
  175. package/src/providers/freshteam/runtime.js +3 -4
  176. package/src/providers/full_contact/executors.js +3 -3
  177. package/src/providers/fusion-api/runtime.js +2 -3
  178. package/src/providers/gagelist/executors.js +3 -3
  179. package/src/providers/gainsight_nxt/executors.js +2 -2
  180. package/src/providers/gamma/executors.js +4 -3
  181. package/src/providers/gangtise/runtime.js +3 -4
  182. package/src/providers/gatherup/runtime.js +1 -1
  183. package/src/providers/geckoboard/executors.js +2 -3
  184. package/src/providers/gemini/runtime.d.ts +0 -1
  185. package/src/providers/gemini/runtime.js +5 -6
  186. package/src/providers/genpage/runtime.js +2 -2
  187. package/src/providers/geokeo/executors.js +4 -4
  188. package/src/providers/getnote/runtime.js +2 -3
  189. package/src/providers/github/runtime-shared.js +2 -2
  190. package/src/providers/glyphic/runtime.js +3 -4
  191. package/src/providers/gmail/executors.js +125 -27
  192. package/src/providers/gong/runtime.js +6 -7
  193. package/src/providers/googlecalendar/runtime-shared.js +3 -4
  194. package/src/providers/googledrive/runtime-request.js +2 -3
  195. package/src/providers/googlesheets/runtime-shared.js +3 -4
  196. package/src/providers/gorgias/runtime.js +4 -4
  197. package/src/providers/gotify/executors.js +7 -8
  198. package/src/providers/greenhouse/executors.js +3 -3
  199. package/src/providers/gumloop/executors.js +2 -3
  200. package/src/providers/gumroad/executors.js +2 -3
  201. package/src/providers/habitica/executors.js +2 -3
  202. package/src/providers/hackerrank_work/executors.js +2 -3
  203. package/src/providers/harvest/executors.js +3 -4
  204. package/src/providers/haveibeenpwned/executors.js +2 -3
  205. package/src/providers/headout/executors.js +3 -4
  206. package/src/providers/healthchecks_io/executors.js +2 -3
  207. package/src/providers/helium10/runtime.js +4 -5
  208. package/src/providers/helpdesk/runtime.js +4 -4
  209. package/src/providers/home_assistant/runtime-ws.js +9 -10
  210. package/src/providers/hotjar/executors.js +4 -4
  211. package/src/providers/httpsms/runtime.js +3 -4
  212. package/src/providers/hub_planner/executors.js +3 -3
  213. package/src/providers/hubspot/runtime.js +3 -4
  214. package/src/providers/humaans/runtime.js +3 -3
  215. package/src/providers/hunter/runtime.js +3 -3
  216. package/src/providers/icypeas/executors.js +3 -4
  217. package/src/providers/ima/runtime.js +7 -7
  218. package/src/providers/infolobby/runtime.js +6 -6
  219. package/src/providers/instabot/runtime.js +6 -6
  220. package/src/providers/instatus/runtime.js +4 -4
  221. package/src/providers/intuiface/executors.js +3 -3
  222. package/src/providers/iplocate/runtime.js +4 -5
  223. package/src/providers/ipregistry/executors.js +2 -2
  224. package/src/providers/jiminny/runtime.js +4 -4
  225. package/src/providers/jin10/executors.js +4 -5
  226. package/src/providers/jira/executors.js +4 -4
  227. package/src/providers/kaleido/runtime.js +2 -2
  228. package/src/providers/kandji/runtime.js +2 -2
  229. package/src/providers/keygen/executors.js +4 -4
  230. package/src/providers/keyword/runtime.js +2 -2
  231. package/src/providers/kie_ai/executors.js +1 -1
  232. package/src/providers/kintone/runtime.js +1 -1
  233. package/src/providers/kit/runtime.js +2 -2
  234. package/src/providers/klangio/runtime.js +4 -4
  235. package/src/providers/klaviyo/executors.js +1 -1
  236. package/src/providers/klazify/executors.js +3 -3
  237. package/src/providers/klipfolio/runtime.js +3 -3
  238. package/src/providers/knack/executors.js +1 -1
  239. package/src/providers/kommo/runtime.js +2 -2
  240. package/src/providers/kontent_ai/executors.js +3 -4
  241. package/src/providers/l2s/executors.js +3 -4
  242. package/src/providers/latchshot/executors.js +2 -2
  243. package/src/providers/leadboxer/runtime.js +4 -4
  244. package/src/providers/leadiq/runtime.js +4 -4
  245. package/src/providers/linguapop/runtime.js +1 -1
  246. package/src/providers/lingvanex_translation_api/runtime.js +5 -6
  247. package/src/providers/lingxing_mcp/runtime.js +3 -4
  248. package/src/providers/linkup/runtime.js +5 -6
  249. package/src/providers/liveagent/executors.js +6 -6
  250. package/src/providers/loops/executors.js +2 -2
  251. package/src/providers/loyjoy/runtime.js +2 -2
  252. package/src/providers/loyverse/executors.js +4 -4
  253. package/src/providers/lusha/runtime.js +3 -3
  254. package/src/providers/mailbluster/runtime.js +3 -4
  255. package/src/providers/mailcoach/runtime.js +4 -4
  256. package/src/providers/mailgenius/executors.js +3 -4
  257. package/src/providers/mailjet/runtime.js +3 -3
  258. package/src/providers/mails_so/runtime.js +1 -1
  259. package/src/providers/mailsoftly/runtime.js +5 -5
  260. package/src/providers/mailtrap/runtime.js +4 -5
  261. package/src/providers/manus/runtime.js +3 -3
  262. package/src/providers/mautic/runtime.js +3 -3
  263. package/src/providers/megaventory/runtime.js +3 -3
  264. package/src/providers/memberstack/runtime.js +2 -2
  265. package/src/providers/mendeley/executors.js +2 -3
  266. package/src/providers/mindbody/runtime.js +3 -3
  267. package/src/providers/minerstat/executors.js +3 -3
  268. package/src/providers/mintlify/runtime.js +3 -3
  269. package/src/providers/missive/executors.js +3 -5
  270. package/src/providers/mixpanel/executors.js +3 -3
  271. package/src/providers/mobile_text_alerts/runtime.js +3 -3
  272. package/src/providers/mocean/executors.js +3 -3
  273. package/src/providers/moco/executors.js +5 -5
  274. package/src/providers/moesif/runtime.js +4 -4
  275. package/src/providers/monday/runtime-common.js +3 -3
  276. package/src/providers/monica_crm/runtime.js +4 -4
  277. package/src/providers/moorcheh/runtime.js +3 -3
  278. package/src/providers/more_trees/runtime.d.ts +0 -1
  279. package/src/providers/more_trees/runtime.js +7 -8
  280. package/src/providers/moxie/runtime.js +2 -2
  281. package/src/providers/msg91/runtime.js +4 -4
  282. package/src/providers/mx/runtime.js +1 -1
  283. package/src/providers/needle/runtime.js +3 -4
  284. package/src/providers/netlify/runtime.js +2 -3
  285. package/src/providers/niftyimages/executors.js +2 -2
  286. package/src/providers/northbeam/runtime.js +1 -1
  287. package/src/providers/nozbe_teams/executors.js +4 -4
  288. package/src/providers/npm/runtime.js +4 -4
  289. package/src/providers/nusii_proposals/runtime.js +2 -2
  290. package/src/providers/ocr_web_service/executors.js +4 -4
  291. package/src/providers/octopus_deploy/executors.js +3 -3
  292. package/src/providers/oksign/runtime.js +3 -4
  293. package/src/providers/one_drive/executors.js +6 -6
  294. package/src/providers/one_password_events/runtime.js +1 -1
  295. package/src/providers/onfleet/runtime.js +3 -3
  296. package/src/providers/onlyoffice_docspace/runtime.js +4 -4
  297. package/src/providers/oomnitza/runtime.js +3 -4
  298. package/src/providers/otter_ai/executors.js +2 -2
  299. package/src/providers/oura/runtime.js +1 -1
  300. package/src/providers/paddle/executors.js +3 -3
  301. package/src/providers/pagerduty/runtime.js +2 -2
  302. package/src/providers/paradym/runtime.js +4 -4
  303. package/src/providers/parallel/runtime.js +3 -3
  304. package/src/providers/partner_stack_partner/runtime.js +1 -1
  305. package/src/providers/payrexx/runtime.js +5 -6
  306. package/src/providers/permit_io/runtime.js +2 -2
  307. package/src/providers/pinboard/executors.js +5 -6
  308. package/src/providers/pinpoint/runtime.js +2 -2
  309. package/src/providers/placid/runtime.js +3 -3
  310. package/src/providers/plain/runtime.js +5 -5
  311. package/src/providers/planetscale/runtime.js +2 -2
  312. package/src/providers/planhat/executors.js +6 -6
  313. package/src/providers/plausible_analytics/runtime.js +3 -3
  314. package/src/providers/posthog/runtime.js +3 -3
  315. package/src/providers/predis_ai/executors.js +3 -3
  316. package/src/providers/printavo/runtime.js +2 -2
  317. package/src/providers/prospeo/runtime.js +2 -3
  318. package/src/providers/provider-runtime.d.ts +13 -1
  319. package/src/providers/provider-runtime.js +25 -10
  320. package/src/providers/push_by_techulus/executors.js +3 -4
  321. package/src/providers/pushover/runtime.js +4 -5
  322. package/src/providers/pushsafer/runtime.js +4 -5
  323. package/src/providers/pylon/runtime.js +2 -2
  324. package/src/providers/qase/runtime.js +3 -3
  325. package/src/providers/qdrant/runtime.js +1 -1
  326. package/src/providers/qichacha/runtime.js +2 -2
  327. package/src/providers/qingflow/runtime.js +2 -2
  328. package/src/providers/quickchart/runtime.js +2 -2
  329. package/src/providers/quintadb/runtime.js +2 -2
  330. package/src/providers/quo/runtime.js +2 -2
  331. package/src/providers/rawg/runtime.js +4 -4
  332. package/src/providers/razorpay/runtime.js +4 -5
  333. package/src/providers/readme/runtime.js +6 -6
  334. package/src/providers/referralhero/runtime.js +3 -3
  335. package/src/providers/registry.generated.js +1 -0
  336. package/src/providers/render/executors.js +3 -3
  337. package/src/providers/respond_io/executors.js +3 -3
  338. package/src/providers/reversecontact/runtime.js +3 -3
  339. package/src/providers/ritekit/executors.js +2 -2
  340. package/src/providers/riveter/executors.js +2 -3
  341. package/src/providers/rocket_chat/executors.js +3 -4
  342. package/src/providers/rocket_reach/executors.js +3 -4
  343. package/src/providers/saucelabs/runtime.js +4 -4
  344. package/src/providers/scopus/runtime.js +3 -3
  345. package/src/providers/scrape_do/executors.js +2 -2
  346. package/src/providers/scraperapi/runtime.js +4 -4
  347. package/src/providers/scrapfly/executors.js +2 -2
  348. package/src/providers/scrapingant/executors.js +6 -7
  349. package/src/providers/scrapingbee/executors.js +3 -3
  350. package/src/providers/scrapingdog/executors.js +1 -1
  351. package/src/providers/screenshot_fyi/executors.js +3 -4
  352. package/src/providers/screenshotbase/runtime.js +3 -3
  353. package/src/providers/search_api/runtime.js +2 -2
  354. package/src/providers/securitytrails/executors.js +2 -2
  355. package/src/providers/semantic_scholar/executors.js +2 -2
  356. package/src/providers/sendbird/executors.js +2 -2
  357. package/src/providers/sendfox/executors.js +3 -3
  358. package/src/providers/sendgrid/executors.js +5 -5
  359. package/src/providers/sendmator/runtime.js +3 -4
  360. package/src/providers/seqera/runtime.js +3 -4
  361. package/src/providers/serveravatar/executors.js +3 -3
  362. package/src/providers/sheetdb/runtime.js +2 -2
  363. package/src/providers/short_menu/runtime.js +3 -3
  364. package/src/providers/shortcut/runtime.js +3 -3
  365. package/src/providers/shortpixel/runtime.js +2 -2
  366. package/src/providers/shotstack/runtime.js +4 -4
  367. package/src/providers/signpath/runtime.js +2 -2
  368. package/src/providers/signwell/runtime.js +5 -6
  369. package/src/providers/similarweb_digitalrank_api/runtime.js +3 -3
  370. package/src/providers/simla/runtime.js +5 -5
  371. package/src/providers/simplybook_me/executors.js +6 -6
  372. package/src/providers/sitespeakai/runtime.js +3 -3
  373. package/src/providers/slickdeals/runtime.js +2 -3
  374. package/src/providers/smartsuite/runtime.js +3 -3
  375. package/src/providers/sonarcloud/runtime.js +5 -5
  376. package/src/providers/sorftime/runtime.js +8 -8
  377. package/src/providers/spider/runtime.js +2 -2
  378. package/src/providers/splunk_http_event_collector/runtime.js +7 -8
  379. package/src/providers/sportsdata/runtime.js +4 -4
  380. package/src/providers/spyfu/runtime.js +4 -5
  381. package/src/providers/square/runtime.js +4 -4
  382. package/src/providers/stannp/runtime.js +2 -2
  383. package/src/providers/stripe/executors.js +2 -2
  384. package/src/providers/supermemory/runtime.js +3 -3
  385. package/src/providers/survey_monkey/runtime.js +3 -3
  386. package/src/providers/taiga/runtime.js +4 -4
  387. package/src/providers/talenox/executors.js +4 -4
  388. package/src/providers/tally/runtime.js +3 -3
  389. package/src/providers/tavily/runtime.js +3 -4
  390. package/src/providers/teamcamp/executors.js +2 -2
  391. package/src/providers/teamtailor/executors.js +2 -2
  392. package/src/providers/telegram/executors.js +6 -7
  393. package/src/providers/teltel/executors.js +2 -2
  394. package/src/providers/templated/executors.js +3 -3
  395. package/src/providers/tencent_docs/runtime.js +4 -4
  396. package/src/providers/tencent_maps/runtime.js +3 -3
  397. package/src/providers/textcortex/runtime.js +3 -3
  398. package/src/providers/the_cat_api/runtime.js +3 -3
  399. package/src/providers/the_colony/runtime.js +3 -3
  400. package/src/providers/the_odds_api/runtime.js +3 -4
  401. package/src/providers/the_official_board/runtime.js +4 -4
  402. package/src/providers/thehive/runtime.js +1 -1
  403. package/src/providers/tikhub/endpoint-catalog.js +2 -3
  404. package/src/providers/tiktok_business/runtime.js +2 -2
  405. package/src/providers/timecamp/runtime.js +2 -2
  406. package/src/providers/timelink/runtime.js +2 -2
  407. package/src/providers/totp/runtime.js +4 -5
  408. package/src/providers/trawlingweb/runtime.js +2 -2
  409. package/src/providers/trilium/runtime.js +2 -2
  410. package/src/providers/triple_whale/runtime.js +3 -3
  411. package/src/providers/truvera/runtime.js +2 -2
  412. package/src/providers/tuskr/runtime.js +2 -2
  413. package/src/providers/typebot/runtime.js +2 -2
  414. package/src/providers/typeform/runtime.js +2 -2
  415. package/src/providers/uptimerobot/executors.js +3 -4
  416. package/src/providers/v2ex/runtime.js +8 -9
  417. package/src/providers/valyu/runtime.js +3 -3
  418. package/src/providers/vapi/runtime.js +4 -4
  419. package/src/providers/vectorshift/runtime.js +3 -3
  420. package/src/providers/venafitlsprotectcloud/runtime.js +2 -3
  421. package/src/providers/venafitlsprotectdatacenter/runtime.js +2 -3
  422. package/src/providers/vida/runtime.js +4 -4
  423. package/src/providers/vonage/runtime.js +3 -3
  424. package/src/providers/walmart_marketplace/runtime.js +5 -5
  425. package/src/providers/weatherapi/executors.js +3 -4
  426. package/src/providers/web_of_science/runtime.js +4 -4
  427. package/src/providers/web_of_science_expanded/runtime.js +9 -9
  428. package/src/providers/webex/runtime.js +3 -3
  429. package/src/providers/webinarjam/runtime.js +4 -4
  430. package/src/providers/webscraping_ai/runtime.js +3 -3
  431. package/src/providers/webvizio/runtime.js +3 -4
  432. package/src/providers/wecom_bot/smart-runtime.js +4 -5
  433. package/src/providers/wecom_mcp/runtime.js +3 -4
  434. package/src/providers/wejam_ai/runtime.js +3 -3
  435. package/src/providers/wolfram_alpha_api/runtime.js +3 -3
  436. package/src/providers/woocommerce/runtime.js +1 -1
  437. package/src/providers/woodpecker_co/executors.js +3 -4
  438. package/src/providers/woot/runtime.js +6 -6
  439. package/src/providers/workable/runtime.js +3 -3
  440. package/src/providers/workday/runtime.js +4 -4
  441. package/src/providers/workiom/runtime.js +2 -2
  442. package/src/providers/workiz/runtime.js +2 -2
  443. package/src/providers/workpath/executors.js +3 -4
  444. package/src/providers/worksnaps/executors.js +2 -2
  445. package/src/providers/y_gy/runtime.js +2 -2
  446. package/src/providers/zenscrape/runtime.js +3 -3
  447. package/src/providers/zep/runtime.js +4 -4
  448. package/src/providers/zeplin/runtime.js +2 -2
  449. package/src/providers/zhihu/executors.js +6 -6
  450. package/src/providers/zylvie/runtime.js +4 -4
  451. package/src/saas/saas-cleanup-service.d.ts +2 -0
  452. package/src/saas/saas-cleanup-service.js +2 -1
  453. package/src/saas/saas-execution-service.d.ts +1 -1
  454. package/src/server/actions/action-runner.js +1 -1
  455. package/src/server/api/auth.js +3 -0
  456. package/src/server/api/connection-routes.js +1 -1
  457. package/src/server/api/console-catalog-routes.js +1 -1
  458. package/src/server/api/console-oauth-routes.d.ts +3 -1
  459. package/src/server/api/console-oauth-routes.js +22 -9
  460. package/src/server/api/oauth-completion-page.d.ts +57 -0
  461. package/src/server/api/oauth-completion-page.js +135 -10
  462. package/src/server/api/openapi.d.ts +5 -0
  463. package/src/server/api/openapi.js +62 -2
  464. package/src/server/api/runtime-api.d.ts +2 -1
  465. package/src/server/api/runtime-app-routes.js +1 -1
  466. package/src/server/api/runtime-execution-routes.js +2 -1
  467. package/src/server/connect-app.d.ts +4 -0
  468. package/src/server/connect-app.js +14 -1
  469. package/src/server/connect-server.d.ts +6 -0
  470. package/src/server/connect-server.js +114 -4
  471. package/src/server/connector-runtime.d.ts +6 -8
  472. package/src/server/connector-runtime.js +8 -28
  473. package/src/server/proxy/proxy-runner.js +1 -1
  474. package/src/server/slack-event-verification.d.ts +37 -0
  475. package/src/server/slack-event-verification.js +91 -0
  476. package/src/server/storage/connection-request-store.d.ts +1 -1
  477. package/src/server/storage/connection-store.d.ts +1 -1
  478. package/src/server/storage/postgres/runtime-store.d.ts +1 -1
  479. package/src/server/storage/runtime-database.d.ts +1 -1
  480. package/src/server/storage/saas-project-store.d.ts +1 -1
  481. package/src/triggers/maintenance.d.ts +2 -0
  482. package/src/triggers/maintenance.js +2 -1
  483. package/src/triggers/sources/slack-signature.d.ts +10 -0
  484. package/src/triggers/sources/slack-signature.js +13 -0
  485. package/src/triggers/sources/slack.js +9 -11
  486. package/src/triggers/trigger-runner.js +1 -1
@@ -1,5 +1,5 @@
1
1
  import { optionalBoolean, optionalInteger, optionalNumber, optionalRawString, optionalRecord, requiredString, requiredStringArray, } from "../../core/cast.js";
2
- import { createProviderTimeout, isAbortLikeError, providerInputError, providerUserAgent, ProviderRequestError, readProviderTextBody, } from "../provider-runtime.js";
2
+ import { createProviderTimeout, isAbortLikeError, providerInputError, providerUserAgent, ProviderRequestError, readProviderTextBody, providerResponseError, } from "../provider-runtime.js";
3
3
  export const wootApiBaseUrl = "https://developer.woot.com";
4
4
  export const wootActionHandlers = {
5
5
  async list_feed(input, context) {
@@ -101,11 +101,11 @@ function createWootError(status, payload, phase) {
101
101
  if (status === 429)
102
102
  return new ProviderRequestError(429, message);
103
103
  if (phase === "validate" && status >= 400 && status < 500)
104
- return new ProviderRequestError(400, message);
104
+ return providerInputError(message);
105
105
  if (status === 401 || status === 403)
106
106
  return new ProviderRequestError(status, message);
107
107
  if (status === 400 || status === 404)
108
- return new ProviderRequestError(400, message);
108
+ return providerInputError(message);
109
109
  return new ProviderRequestError(status >= 500 ? 502 : status, message);
110
110
  }
111
111
  function extractWootErrorMessage(payload) {
@@ -230,16 +230,16 @@ function normalizeNullablePriceRange(value) {
230
230
  function requireRecord(value, message) {
231
231
  const record = optionalRecord(value);
232
232
  if (!record)
233
- throw new ProviderRequestError(502, message);
233
+ throw providerResponseError(message);
234
234
  return record;
235
235
  }
236
236
  function requireRecordArray(value, message) {
237
237
  if (!Array.isArray(value))
238
- throw new ProviderRequestError(502, message);
238
+ throw providerResponseError(message);
239
239
  return value.map((item) => {
240
240
  const record = optionalRecord(item);
241
241
  if (!record)
242
- throw new ProviderRequestError(502, message);
242
+ throw providerResponseError(message);
243
243
  return record;
244
244
  });
245
245
  }
@@ -1,5 +1,5 @@
1
1
  import { compactObject, optionalInteger, optionalRecord, optionalString } from "../../core/cast.js";
2
- import { createProviderTimeout, isAbortLikeError, providerUserAgent, ProviderRequestError, requiredInputString, } from "../provider-runtime.js";
2
+ import { createProviderTimeout, isAbortLikeError, providerUserAgent, ProviderRequestError, requiredInputString, providerInputError, } from "../provider-runtime.js";
3
3
  export const workableActionHandlers = {
4
4
  async list_jobs(input, context) {
5
5
  const payload = await requestWorkableJson({
@@ -156,13 +156,13 @@ async function buildWorkableError(response, input) {
156
156
  if (response.status === 429)
157
157
  return new ProviderRequestError(429, message);
158
158
  if (input.phase === "validate" && [400, 401, 403, 404].includes(response.status)) {
159
- return new ProviderRequestError(400, message);
159
+ return providerInputError(message);
160
160
  }
161
161
  if (input.phase === "execute" && (response.status === 401 || response.status === 403)) {
162
162
  return new ProviderRequestError(401, message);
163
163
  }
164
164
  if (response.status === 400 || response.status === 422 || (response.status === 404 && input.notFoundAsInvalidInput)) {
165
- return new ProviderRequestError(400, message);
165
+ return providerInputError(message);
166
166
  }
167
167
  return new ProviderRequestError(response.status || 500, message);
168
168
  }
@@ -1,5 +1,5 @@
1
1
  import { optionalBoolean, optionalInteger, optionalRecord, optionalString, recordOrEmpty } from "../../core/cast.js";
2
- import { createProviderTimeout, isAbortLikeError, providerUserAgent, ProviderRequestError, requiredInputString, } from "../provider-runtime.js";
2
+ import { createProviderTimeout, isAbortLikeError, providerUserAgent, ProviderRequestError, requiredInputString, providerInputError, } from "../provider-runtime.js";
3
3
  import { workdayOAuthScopes } from "./scopes.js";
4
4
  export const workdayActionHandlers = {
5
5
  async get_current_user(_input, context) {
@@ -207,15 +207,15 @@ function createWorkdayError(status, payload, phase, notFoundAsInvalidInput) {
207
207
  if (status === 429)
208
208
  return new ProviderRequestError(429, message);
209
209
  if (phase === "validate" && (status === 401 || status === 403))
210
- return new ProviderRequestError(400, message);
210
+ return providerInputError(message);
211
211
  if (phase === "execute" && status === 401)
212
212
  return new ProviderRequestError(401, message);
213
213
  if (phase === "execute" && status === 403)
214
214
  return new ProviderRequestError(403, message);
215
215
  if (status === 404 && notFoundAsInvalidInput)
216
- return new ProviderRequestError(400, message);
216
+ return providerInputError(message);
217
217
  if (status === 400 || status === 404 || status === 422)
218
- return new ProviderRequestError(400, message);
218
+ return providerInputError(message);
219
219
  return new ProviderRequestError(status >= 400 ? status : 502, message);
220
220
  }
221
221
  function extractWorkdayErrorMessage(payload) {
@@ -1,5 +1,5 @@
1
1
  import { compactObject, optionalInteger, optionalRecord, optionalString, requiredRecord } from "../../core/cast.js";
2
- import { providerResponseError, providerUserAgent, ProviderRequestError } from "../provider-runtime.js";
2
+ import { providerResponseError, providerUserAgent, ProviderRequestError, providerInputError, } from "../provider-runtime.js";
3
3
  export const workiomApiBaseUrl = "https://api.workiom.com";
4
4
  export const workiomApiPathPrefix = "/api/services/app";
5
5
  export const workiomActionHandlers = {
@@ -149,7 +149,7 @@ function createWorkiomError(response, payload, phase) {
149
149
  return new ProviderRequestError(phase === "validate" ? 400 : 401, message);
150
150
  }
151
151
  if (response.status >= 400 && response.status < 500)
152
- return new ProviderRequestError(400, message);
152
+ return providerInputError(message);
153
153
  return new ProviderRequestError(response.status || 500, message);
154
154
  }
155
155
  function readArrayFromPayload(payload, paths) {
@@ -1,5 +1,5 @@
1
1
  import { optionalBoolean, optionalInteger, optionalRecord, optionalString, requiredString } from "../../core/cast.js";
2
- import { createProviderTimeout, providerUserAgent, ProviderRequestError } from "../provider-runtime.js";
2
+ import { createProviderTimeout, providerUserAgent, ProviderRequestError, providerInputError, } from "../provider-runtime.js";
3
3
  export const workizApiBaseUrl = "https://api.workiz.com/api/v1";
4
4
  function setQuery(query, name, value) {
5
5
  if (value !== undefined)
@@ -100,6 +100,6 @@ function mapError(status, payload, phase) {
100
100
  if (status === 401 || status === 403)
101
101
  return new ProviderRequestError(phase === "validate" ? 400 : status, message);
102
102
  if (phase === "validate" && status < 500)
103
- return new ProviderRequestError(400, message);
103
+ return providerInputError(message);
104
104
  return new ProviderRequestError(status >= 500 ? 502 : status, message);
105
105
  }
@@ -1,9 +1,8 @@
1
1
  import { compactObject, optionalRecord, optionalString, positiveInteger, requiredRecord } from "../../core/cast.js";
2
- import { createProviderTimeout, defineApiKeyProviderExecutors, defineProviderProxy, isAbortLikeError, providerInputError, providerUserAgent, ProviderRequestError, } from "../provider-runtime.js";
2
+ import { createProviderTimeout, defineApiKeyProviderExecutors, defineProviderProxy, isAbortLikeError, providerInputError, providerUserAgent, ProviderRequestError, defaultProviderRequestTimeoutMs, } from "../provider-runtime.js";
3
3
  const service = "workpath";
4
4
  const workpathApiBaseUrl = "https://connect.workpath.com/api/v3";
5
5
  const workpathValidationPath = "/users";
6
- const workpathDefaultRequestTimeoutMs = 30_000;
7
6
  export const workpathActionHandlers = {
8
7
  async list_goals(input, context) {
9
8
  assertDateRangePair(input);
@@ -148,7 +147,7 @@ async function workpathRequest(context, input) {
148
147
  url.searchParams.set(key, String(value));
149
148
  }
150
149
  }
151
- const timeout = createProviderTimeout(context.signal, workpathDefaultRequestTimeoutMs);
150
+ const timeout = createProviderTimeout(context.signal);
152
151
  try {
153
152
  const response = await context.fetcher(url, {
154
153
  method: "GET",
@@ -174,7 +173,7 @@ async function workpathRequest(context, input) {
174
173
  throw error;
175
174
  }
176
175
  if (timeout.didTimeout() || isAbortLikeError(error)) {
177
- throw new ProviderRequestError(504, `Workpath ${input.path} request timed out after ${Math.ceil(workpathDefaultRequestTimeoutMs / 1000)} seconds`);
176
+ throw new ProviderRequestError(504, `Workpath ${input.path} request timed out after ${Math.ceil(defaultProviderRequestTimeoutMs / 1000)} seconds`);
178
177
  }
179
178
  throw new ProviderRequestError(502, error instanceof Error ? `Workpath request failed: ${error.message}` : "Workpath request failed");
180
179
  }
@@ -1,6 +1,6 @@
1
1
  import { Buffer } from "node:buffer";
2
2
  import { compactObject, optionalString } from "../../core/cast.js";
3
- import { defineApiKeyProviderExecutors, defineProviderProxy, providerUserAgent, ProviderRequestError, runProviderRequest, } from "../provider-runtime.js";
3
+ import { defineApiKeyProviderExecutors, defineProviderProxy, providerUserAgent, ProviderRequestError, runProviderRequest, providerInputError, } from "../provider-runtime.js";
4
4
  export const worksnapsApiBaseUrl = "https://api.worksnaps.com/api";
5
5
  const service = "worksnaps";
6
6
  const worksnapsValidationPath = "/me.xml";
@@ -223,7 +223,7 @@ function buildWorksnapsHeaders(apiKey) {
223
223
  function createWorksnapsError(status, body, phase) {
224
224
  const message = extractWorksnapsErrorMessage(body) ?? `Worksnaps request failed with status ${status}`;
225
225
  if (phase === "validate" && status >= 400 && status < 500) {
226
- return new ProviderRequestError(400, message);
226
+ return providerInputError(message);
227
227
  }
228
228
  return new ProviderRequestError(status || 502, message);
229
229
  }
@@ -1,5 +1,5 @@
1
1
  import { compactObject, optionalBoolean, optionalInteger, optionalRecord, optionalString } from "../../core/cast.js";
2
- import { createProviderTimeout, isAbortLikeError, providerUserAgent, ProviderRequestError, readProviderTextBody, } from "../provider-runtime.js";
2
+ import { createProviderTimeout, isAbortLikeError, providerUserAgent, ProviderRequestError, readProviderTextBody, providerInputError, } from "../provider-runtime.js";
3
3
  export const yGyApiBaseUrl = "https://api.y.gy/api/v1";
4
4
  const linksPath = "/link";
5
5
  const maxResponseBytes = 10 * 1024 * 1024;
@@ -212,7 +212,7 @@ function createYGyError(status, payload, mode, notFoundAsInvalidInput) {
212
212
  return new ProviderRequestError(status, message);
213
213
  }
214
214
  if (status === 400 || status === 409 || status === 422 || (status === 404 && notFoundAsInvalidInput)) {
215
- return new ProviderRequestError(400, message);
215
+ return providerInputError(message);
216
216
  }
217
217
  return new ProviderRequestError(status || 502, message);
218
218
  }
@@ -1,5 +1,5 @@
1
1
  import { compactObject, optionalBoolean, optionalNumber, optionalRawString, optionalRecord } from "../../core/cast.js";
2
- import { providerUserAgent, ProviderRequestError, readProviderTextBody, runProviderRequest, } from "../provider-runtime.js";
2
+ import { providerUserAgent, ProviderRequestError, readProviderTextBody, runProviderRequest, providerInputError, } from "../provider-runtime.js";
3
3
  export const zenscrapeApiBaseUrl = "https://app.zenscrape.com/api/v1";
4
4
  const zenscrapeGetUrl = `${zenscrapeApiBaseUrl}/get`;
5
5
  const requestTimeoutMs = 80_000;
@@ -97,13 +97,13 @@ function createZenscrapeError(status, body, phase) {
97
97
  if (status === 429)
98
98
  return new ProviderRequestError(429, message);
99
99
  if (phase === "validate" && status >= 400 && status < 500) {
100
- return new ProviderRequestError(400, message);
100
+ return providerInputError(message);
101
101
  }
102
102
  if (phase === "execute" && (status === 401 || status === 403)) {
103
103
  return new ProviderRequestError(status, message);
104
104
  }
105
105
  if (phase === "execute" && status === 400) {
106
- return new ProviderRequestError(400, message);
106
+ return providerInputError(message);
107
107
  }
108
108
  return new ProviderRequestError(status || 502, message);
109
109
  }
@@ -1,5 +1,5 @@
1
1
  import { compactObject, optionalBoolean, optionalNumber, optionalRecord, optionalString } from "../../core/cast.js";
2
- import { providerUserAgent, ProviderRequestError, readProviderTextBody, runProviderRequest, } from "../provider-runtime.js";
2
+ import { providerUserAgent, ProviderRequestError, readProviderTextBody, runProviderRequest, providerInputError, providerResponseError, } from "../provider-runtime.js";
3
3
  export const zepApiBaseUrl = "https://api.getzep.com/api/v2";
4
4
  const validationEndpoint = "/projects/info";
5
5
  const maxResponseBytes = 10 * 1024 * 1024;
@@ -180,15 +180,15 @@ function createZepError(status, payload, phase) {
180
180
  if (status === 429)
181
181
  return new ProviderRequestError(429, message);
182
182
  if (phase === "validate" && status >= 400 && status < 500) {
183
- return new ProviderRequestError(400, message);
183
+ return providerInputError(message);
184
184
  }
185
185
  if (status === 401 || status === 403) {
186
186
  return new ProviderRequestError(status, message);
187
187
  }
188
188
  if (status >= 400 && status < 500) {
189
- return new ProviderRequestError(400, message);
189
+ return providerInputError(message);
190
190
  }
191
- return new ProviderRequestError(502, message);
191
+ return providerResponseError(message);
192
192
  }
193
193
  function extractZepErrorMessage(payload) {
194
194
  if (typeof payload === "string")
@@ -1,6 +1,6 @@
1
1
  import { compactObject, objectArray, optionalInteger, optionalNumber, optionalRecord, optionalString, requiredRecord, requiredString, } from "../../core/cast.js";
2
2
  import { encodePathSegment, queryParams } from "../../core/request.js";
3
- import { providerResponseError, providerUserAgent, ProviderRequestError } from "../provider-runtime.js";
3
+ import { providerResponseError, providerUserAgent, ProviderRequestError, providerInputError, } from "../provider-runtime.js";
4
4
  import { zeplinReadScope } from "./scopes.js";
5
5
  export const zeplinApiBaseUrl = "https://api.zeplin.dev/v1";
6
6
  export const zeplinActionHandlers = {
@@ -186,7 +186,7 @@ function mapZeplinError(status, text, phase) {
186
186
  return new ProviderRequestError(429, message);
187
187
  }
188
188
  if (status >= 400 && status < 500) {
189
- return new ProviderRequestError(400, message);
189
+ return providerInputError(message);
190
190
  }
191
191
  return new ProviderRequestError(status || 502, message);
192
192
  }
@@ -5,7 +5,7 @@ import { basename, extname, join } from "node:path";
5
5
  import { Readable } from "node:stream";
6
6
  import { pipeline } from "node:stream/promises";
7
7
  import { compactObject, optionalRecord } from "../../core/cast.js";
8
- import { createProviderFetch, createProviderTimeout, defineApiKeyProviderExecutors, defineProviderProxy, ProviderRequestError, providerUserAgent, } from "../provider-runtime.js";
8
+ import { createProviderFetch, createProviderTimeout, defineApiKeyProviderExecutors, defineProviderProxy, ProviderRequestError, providerUserAgent, providerInputError, providerResponseError, } from "../provider-runtime.js";
9
9
  const zhihuApiBaseUrl = "https://developer.zhihu.com";
10
10
  const zhihuUserAgent = providerUserAgent;
11
11
  const maximumZhihuUploadBytes = 100 * 1024 * 1024;
@@ -245,13 +245,13 @@ async function buildZhihuError(response, mode) {
245
245
  return new ProviderRequestError(429, message);
246
246
  }
247
247
  if (mode === "validate" && (response.status === 400 || response.status === 401 || response.status === 403)) {
248
- return new ProviderRequestError(400, message);
248
+ return providerInputError(message);
249
249
  }
250
250
  if (mode === "execute" && (response.status === 401 || response.status === 403)) {
251
251
  return new ProviderRequestError(401, message);
252
252
  }
253
253
  if (mode === "execute" && (response.status === 400 || response.status === 404)) {
254
- return new ProviderRequestError(400, message);
254
+ return providerInputError(message);
255
255
  }
256
256
  return new ProviderRequestError(response.status || 500, message);
257
257
  }
@@ -263,15 +263,15 @@ function buildZhihuPayloadError(payload, mode) {
263
263
  return new ProviderRequestError(429, message);
264
264
  }
265
265
  if (mode === "validate" && (code === 10001 || code === 20001)) {
266
- return new ProviderRequestError(400, message);
266
+ return providerInputError(message);
267
267
  }
268
268
  if (mode === "execute" && code === 20001) {
269
269
  return new ProviderRequestError(401, message);
270
270
  }
271
271
  if (mode === "execute" && code === 10001) {
272
- return new ProviderRequestError(400, message);
272
+ return providerInputError(message);
273
273
  }
274
- return new ProviderRequestError(502, message);
274
+ return providerResponseError(message);
275
275
  }
276
276
  async function readZhihuPayload(response) {
277
277
  const text = await response.text();
@@ -1,5 +1,5 @@
1
1
  import { optionalRecord, optionalString, requiredString } from "../../core/cast.js";
2
- import { createProviderTimeout, getProviderActionHandler, ProviderRequestError, providerUserAgent, requiredResponseRecord, } from "../provider-runtime.js";
2
+ import { createProviderTimeout, getProviderActionHandler, ProviderRequestError, providerUserAgent, requiredResponseRecord, providerInputError, } from "../provider-runtime.js";
3
3
  export const zylvieApiBaseUrl = "https://api.zylvie.com";
4
4
  const productFieldMap = {
5
5
  title: "title",
@@ -144,7 +144,7 @@ const actionHandlers = {
144
144
  };
145
145
  export async function validateZylvieCredential(input, fetcher) {
146
146
  const payload = await requestZylvieJson({
147
- apiKey: requiredString(input.apiKey, "apiKey", (message) => new ProviderRequestError(400, message)),
147
+ apiKey: requiredString(input.apiKey, "apiKey", providerInputError),
148
148
  path: "/me",
149
149
  method: "GET",
150
150
  fetcher,
@@ -240,13 +240,13 @@ function createRequestError(response, payload, phase) {
240
240
  return new ProviderRequestError(429, message);
241
241
  }
242
242
  if (phase === "validate" && response.status >= 400 && response.status < 500) {
243
- return new ProviderRequestError(400, message);
243
+ return providerInputError(message);
244
244
  }
245
245
  if (phase === "execute" && (response.status === 401 || response.status === 403)) {
246
246
  return new ProviderRequestError(401, message);
247
247
  }
248
248
  if ([400, 404, 409, 422].includes(response.status)) {
249
- return new ProviderRequestError(400, message);
249
+ return providerInputError(message);
250
250
  }
251
251
  return new ProviderRequestError(response.status || 500, message);
252
252
  }
@@ -1,8 +1,10 @@
1
+ import type { ProviderNetworkPolicy } from "../core/provider-network-policy.ts";
1
2
  import type { RuntimeLogger } from "../core/types.ts";
2
3
  import type { ConnectionRequestStore } from "../server/storage/connection-request-store.ts";
3
4
  import type { SaasProjectStore } from "../server/storage/saas-project-store.ts";
4
5
  import { SaasClient } from "./saas-client.ts";
5
6
  export interface SaasCleanupServiceOptions {
7
+ network?: ProviderNetworkPolicy;
6
8
  store: SaasProjectStore;
7
9
  requests: ConnectionRequestStore;
8
10
  client?: SaasClient;
@@ -1,3 +1,4 @@
1
+ import { withProviderNetworkPolicy } from "../core/provider-network-policy.js";
1
2
  import { SaasClient, SaasError } from "./saas-client.js";
2
3
  /** Resumable deletion of ordinary SaaS accounts; never creates or reconnects an account. */
3
4
  export class SaasCleanupService {
@@ -14,7 +15,7 @@ export class SaasCleanupService {
14
15
  run() {
15
16
  if (this.shutdown.signal.aborted)
16
17
  return Promise.resolve();
17
- this.pending ??= this.runBatch()
18
+ this.pending ??= withProviderNetworkPolicy(this.options.network ?? {}, () => this.runBatch())
18
19
  .catch(() => {
19
20
  this.options.logger?.warn({ errorCode: "saas_cleanup_failed" }, "SaaS cleanup batch failed; pending work is retained");
20
21
  })
@@ -1,4 +1,4 @@
1
- import type { SaasConnectionReference } from "../connection-service.ts";
1
+ import type { SaasConnectionReference } from "../connection-store.ts";
2
2
  import type { SaasActionResult, SaasProxyResult } from "./saas-client.ts";
3
3
  import type { SaasProjectService } from "./saas-project-service.ts";
4
4
  import { SaasClient } from "./saas-client.ts";
@@ -1,4 +1,4 @@
1
- import { ConnectionError } from "../../connection-service.js";
1
+ import { ConnectionError } from "../../connection-error.js";
2
2
  import { executeAction as executeProviderAction } from "../../core/execution.js";
3
3
  import { withProviderHttpDispatch } from "../../core/provider-http-dispatch.js";
4
4
  import { ProviderDispatchRequestError, toProviderExecutionError, withProviderHttpDispatchResult, } from "../../providers/provider-runtime.js";
@@ -102,6 +102,9 @@ function isPublicPath(path, method) {
102
102
  (method === "GET" && path === "/api/auth/session") ||
103
103
  (method === "POST" && path === "/api/auth/logout") ||
104
104
  (method === "GET" && path.startsWith("/api/files/")) ||
105
+ // This route performs its own dedicated bearer check; the global admin/runtime
106
+ // middleware must not require a different token.
107
+ (method === "POST" && path === "/v1/providers/slackbot/events/verify") ||
105
108
  isConsoleShellRequest(path, method));
106
109
  }
107
110
  export async function readLocalAuthSession(context, options) {
@@ -1,5 +1,5 @@
1
1
  import { Hono } from "hono";
2
- import { ConnectionError } from "../../connection-service.js";
2
+ import { ConnectionError } from "../../connection-error.js";
3
3
  import { OAuthClientConfigError } from "../../oauth/oauth-client-config-service.js";
4
4
  import { OAuthFlowError } from "../../oauth/oauth-flow-service.js";
5
5
  import { SaasError } from "../../saas/saas-client.js";
@@ -1,5 +1,5 @@
1
1
  import { Hono } from "hono";
2
- import { ConnectionError } from "../../connection-service.js";
2
+ import { ConnectionError } from "../../connection-error.js";
3
3
  import { searchActions } from "../../core/action-search.js";
4
4
  import { renderActionMarkdown } from "./action-markdown.js";
5
5
  import { jsonError, notFound, readConnectionName as defaultReadConnectionName } from "./http-utils.js";
@@ -12,7 +12,9 @@ export interface ConsoleOAuthRoutesOptions {
12
12
  saasProject?: SaasProjectService;
13
13
  logger?: RuntimeLogger;
14
14
  oauthCloseDelaySeconds?: number;
15
+ /** Origins a provider-refusal page may post its result to (`OOMOL_CONNECT_OAUTH_RESULT_ORIGINS`). */
16
+ oauthResultOrigins?: readonly string[];
15
17
  readConnectionName?: (context: Context, body?: Record<string, unknown>) => string | undefined;
16
18
  }
17
19
  /** Console connection management and OAuth client configuration / authorization routes. */
18
- export declare function createConsoleOAuthRoutes({ connections, oauthFlow, oauthClientConfigs, saasProject, logger, oauthCloseDelaySeconds, readConnectionName, }: ConsoleOAuthRoutesOptions): Hono;
20
+ export declare function createConsoleOAuthRoutes({ connections, oauthFlow, oauthClientConfigs, saasProject, logger, oauthCloseDelaySeconds, oauthResultOrigins, readConnectionName, }: ConsoleOAuthRoutesOptions): Hono;
@@ -1,10 +1,10 @@
1
1
  import { Hono } from "hono";
2
- import { ConnectionError } from "../../connection-service.js";
2
+ import { ConnectionError } from "../../connection-error.js";
3
3
  import { optionalBoolean, optionalRecord, optionalString, requiredRawString, requiredString, requiredStringArray, } from "../../core/cast.js";
4
4
  import { OAuthClientConfigError } from "../../oauth/oauth-client-config-service.js";
5
5
  import { OAuthCallbackError, OAuthFlowError } from "../../oauth/oauth-flow-service.js";
6
6
  import { HttpRequestError, jsonError, readConnectionName as defaultReadConnectionName, readJsonBody, } from "./http-utils.js";
7
- import { renderOAuthCompletionPage } from "./oauth-completion-page.js";
7
+ import { oauthProviderErrorCode, renderOAuthCompletionPage, renderOAuthRefusedPage } from "./oauth-completion-page.js";
8
8
  function readOAuthClientConfigInput(body) {
9
9
  const keys = ["clientId", "clientSecret", "requestedScopes", "redirectUri", "extra", "secretExtra"];
10
10
  if (!keys.some((key) => key in body)) {
@@ -31,7 +31,7 @@ function readOptionalStringArray(body, fieldName) {
31
31
  return requiredStringArray(body[fieldName], fieldName, (message) => new HttpRequestError("invalid_input", `${message}.`));
32
32
  }
33
33
  /** Console connection management and OAuth client configuration / authorization routes. */
34
- export function createConsoleOAuthRoutes({ connections, oauthFlow, oauthClientConfigs, saasProject, logger, oauthCloseDelaySeconds, readConnectionName = defaultReadConnectionName, }) {
34
+ export function createConsoleOAuthRoutes({ connections, oauthFlow, oauthClientConfigs, saasProject, logger, oauthCloseDelaySeconds, oauthResultOrigins = [], readConnectionName = defaultReadConnectionName, }) {
35
35
  const app = new Hono();
36
36
  const writeConnectionResult = async (context, operation, logContext) => {
37
37
  try {
@@ -149,7 +149,7 @@ export function createConsoleOAuthRoutes({ connections, oauthFlow, oauthClientCo
149
149
  return writeOAuthResult(context, oauthClientConfigs.upsertConfig({
150
150
  service,
151
151
  clientId: optionalString(body.clientId) ?? "",
152
- clientSecret: optionalString(body.clientSecret) ?? "",
152
+ clientSecret: readOptionalRawString(body, "clientSecret"),
153
153
  requestedScopes: readOptionalStringArray(body, "requestedScopes"),
154
154
  redirectUri: readOptionalRawString(body, "redirectUri"),
155
155
  extra: optionalRecord(body.extra),
@@ -243,14 +243,27 @@ export function createConsoleOAuthRoutes({ connections, oauthFlow, oauthClientCo
243
243
  : undefined;
244
244
  if (returnUri)
245
245
  return context.redirect(returnUri);
246
- const providerErrorDescription = context.req.query("error_description");
246
+ // A runtime authorization (`POST /api/oauth/authorizations`) has no
247
+ // return address: it was opened in a popup. End the authorization so it
248
+ // cannot complete later, and give the popup a page that tells the person
249
+ // what happened and, for an allowed opener, posts the result.
250
+ const errorCode = oauthProviderErrorCode(providerError);
251
+ // Only a refusal that ended a pending authorization names its state, so
252
+ // a late duplicate callback for a state another callback already
253
+ // completed cannot tell the opener that the authorization failed.
254
+ const discarded = state ? await oauthFlow.discardAuthorization(state) : false;
247
255
  logger?.warn({
248
256
  ...logContext,
249
257
  errorCode: "oauth_provider_error",
250
- providerError,
251
- providerErrorDescription,
252
- }, "oauth callback failed");
253
- return jsonError(context, 400, "oauth_provider_error", `OAuth provider returned error "${providerError}"${providerErrorDescription ? `: ${providerErrorDescription}` : "."}`);
258
+ providerError: errorCode,
259
+ providerErrorDescription: context.req.query("error_description"),
260
+ }, "oauth callback refused by provider");
261
+ return context.html(renderOAuthRefusedPage({
262
+ code: errorCode,
263
+ state: discarded ? state : undefined,
264
+ resultOrigins: oauthResultOrigins,
265
+ closeDelaySeconds: oauthCloseDelaySeconds,
266
+ }));
254
267
  }
255
268
  if (!state || !code) {
256
269
  if (state)
@@ -18,6 +18,10 @@ export declare const oauthCompletionStrings: {
18
18
  network: string;
19
19
  notFound: string;
20
20
  forbidden: string;
21
+ refusedBadge: string;
22
+ cancelledTitle: string;
23
+ refusedTitle: string;
24
+ refusedBody: string;
21
25
  };
22
26
  "zh-CN": {
23
27
  badge: string;
@@ -38,6 +42,10 @@ export declare const oauthCompletionStrings: {
38
42
  network: string;
39
43
  notFound: string;
40
44
  forbidden: string;
45
+ refusedBadge: string;
46
+ cancelledTitle: string;
47
+ refusedTitle: string;
48
+ refusedBody: string;
41
49
  };
42
50
  "zh-TW": {
43
51
  badge: string;
@@ -58,6 +66,10 @@ export declare const oauthCompletionStrings: {
58
66
  network: string;
59
67
  notFound: string;
60
68
  forbidden: string;
69
+ refusedBadge: string;
70
+ cancelledTitle: string;
71
+ refusedTitle: string;
72
+ refusedBody: string;
61
73
  };
62
74
  ja: {
63
75
  badge: string;
@@ -78,6 +90,10 @@ export declare const oauthCompletionStrings: {
78
90
  network: string;
79
91
  notFound: string;
80
92
  forbidden: string;
93
+ refusedBadge: string;
94
+ cancelledTitle: string;
95
+ refusedTitle: string;
96
+ refusedBody: string;
81
97
  };
82
98
  fr: {
83
99
  badge: string;
@@ -98,6 +114,10 @@ export declare const oauthCompletionStrings: {
98
114
  network: string;
99
115
  notFound: string;
100
116
  forbidden: string;
117
+ refusedBadge: string;
118
+ cancelledTitle: string;
119
+ refusedTitle: string;
120
+ refusedBody: string;
101
121
  };
102
122
  ru: {
103
123
  badge: string;
@@ -118,6 +138,10 @@ export declare const oauthCompletionStrings: {
118
138
  network: string;
119
139
  notFound: string;
120
140
  forbidden: string;
141
+ refusedBadge: string;
142
+ cancelledTitle: string;
143
+ refusedTitle: string;
144
+ refusedBody: string;
121
145
  };
122
146
  };
123
147
  export declare const oauthCompletionStyles = "\n:root {\n --background: hsl(0 0% 100%);\n --foreground: hsl(222.2 84% 4.9%);\n --card: hsl(0 0% 100%);\n --card-foreground: hsl(222.2 84% 4.9%);\n --muted: hsl(210 40% 96.1%);\n --muted-foreground: hsl(215.4 16.3% 46.9%);\n --border: hsl(214.3 31.8% 91.4%);\n --primary: hsl(222.2 47.4% 11.2%);\n --primary-foreground: hsl(210 40% 98%);\n --ring: hsl(222.2 84% 4.9%);\n}\n* {\n box-sizing: border-box;\n}\nbody {\n min-height: 100vh;\n margin: 0;\n display: grid;\n place-items: center;\n padding: 24px;\n background: var(--background);\n color: var(--foreground);\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n}\n.card {\n width: min(100%, 420px);\n padding: 24px;\n border: 1px solid var(--border);\n border-radius: 12px;\n background: var(--card);\n color: var(--card-foreground);\n box-shadow: 0 1px 2px hsl(222.2 84% 4.9% / 0.04), 0 12px 32px hsl(222.2 84% 4.9% / 0.08);\n}\n.header {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.badge {\n width: fit-content;\n display: inline-flex;\n align-items: center;\n border: 1px solid transparent;\n border-radius: 999px;\n padding: 2px 10px;\n background: var(--primary);\n color: var(--primary-foreground);\n font-size: 12px;\n font-weight: 600;\n line-height: 20px;\n}\nh1 {\n margin: 0;\n font-size: 20px;\n line-height: 28px;\n font-weight: 600;\n}\np {\n margin: 0;\n color: var(--muted-foreground);\n font-size: 14px;\n line-height: 22px;\n}\ncode {\n border-radius: 6px;\n background: var(--muted);\n padding: 2px 6px;\n color: var(--foreground);\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", monospace;\n font-size: 13px;\n}\n.actions {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n flex-wrap: wrap;\n margin-top: 24px;\n}\n.button {\n appearance: none;\n border: 1px solid var(--border);\n border-radius: 8px;\n background: var(--card);\n color: var(--foreground);\n padding: 8px 14px;\n font: inherit;\n font-size: 14px;\n font-weight: 500;\n line-height: 20px;\n cursor: pointer;\n}\n.button:focus-visible {\n outline: 2px solid var(--ring);\n outline-offset: 2px;\n}\n.button:hover {\n background: var(--muted);\n}\n.close-note {\n font-size: 12px;\n line-height: 18px;\n}\n\n[hidden]{display:none!important}\n.button:disabled{opacity:.5;cursor:wait}\na.button{text-decoration:none}\n.actions{justify-content:flex-start}\n";
@@ -125,3 +149,36 @@ export declare const oauthCompletionLocaleScript = "const pick=()=>{try{const st
125
149
  /** Seconds the OAuth completion page counts down before it tries to close its window. */
126
150
  export declare const DEFAULT_OAUTH_CLOSE_DELAY_SECONDS = 5;
127
151
  export declare function renderOAuthCompletionPage(service: string, closeDelaySeconds?: number): string;
152
+ /** The `type` of the message a refusal page posts to the window that opened it. */
153
+ export declare const oauthRefusedType = "oauth.refused";
154
+ /**
155
+ * Reads the origins a refusal page may post its result to: a comma-separated
156
+ * list of exact HTTP(S) origins. `*` and anything that is not an origin are
157
+ * rejected, so the result can never be broadcast to an arbitrary opener.
158
+ */
159
+ export declare function parseOAuthResultOrigins(value: string | undefined): string[];
160
+ /**
161
+ * The same rules for origins given as a list, such as the `oauthResultOrigins`
162
+ * runtime option: blank entries are skipped and duplicates dropped; anything
163
+ * that is not an exact http(s) origin, `*` included, throws.
164
+ */
165
+ export declare function normalizeOAuthResultOrigins(entries: readonly string[]): string[];
166
+ /** A provider error code that is safe to echo: short and code-shaped, else `provider_error`. */
167
+ export declare function oauthProviderErrorCode(providerError: string): string;
168
+ export interface OAuthRefusedPageInput {
169
+ /** The provider's error code, already passed through `oauthProviderErrorCode`. */
170
+ code: string;
171
+ /** The state of the refused authorization; set only when this callback ended a pending one. */
172
+ state?: string;
173
+ /** Origins allowed to receive the result; empty means the page posts nothing. */
174
+ resultOrigins: readonly string[];
175
+ closeDelaySeconds?: number;
176
+ }
177
+ /**
178
+ * The page a provider's refusal lands on when the authorization has no return
179
+ * address. When this window was opened by a page on an allowed origin, it
180
+ * posts `{ type: "oauth.refused", status, code, state }` to that origin only;
181
+ * either way the shared countdown closes it after `closeDelaySeconds`. Success is never
182
+ * reported this way: the opener learns it from its own server.
183
+ */
184
+ export declare function renderOAuthRefusedPage(input: OAuthRefusedPageInput): string;