@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.
- package/README.md +4 -2
- package/assets/open-connector/catalog/apps/allratestoday.json +174 -0
- package/assets/open-connector/catalog/apps/slackbot.json +20 -1
- package/assets/open-connector/catalog/apps-index.json +1 -1
- package/package.json +1 -1
- package/src/connection-error.d.ts +7 -0
- package/src/connection-error.js +10 -0
- package/src/connection-service.d.ts +2 -50
- package/src/connection-service.js +6 -130
- package/src/connection-store.d.ts +41 -0
- package/src/connection-store.js +1 -0
- package/src/core/guarded-fetch.d.ts +3 -0
- package/src/core/guarded-fetch.js +8 -1
- package/src/core/provider-network-policy.d.ts +15 -0
- package/src/core/provider-network-policy.js +11 -0
- package/src/core/request.d.ts +18 -14
- package/src/core/request.js +11 -35
- package/src/credential-resolver.d.ts +24 -0
- package/src/credential-resolver.js +131 -0
- package/src/mcp.js +1 -1
- package/src/oauth/oauth-client-config-service.d.ts +1 -1
- package/src/oauth/oauth-client-config-service.js +14 -2
- package/src/oauth/oauth-credential-refresh-service.js +1 -1
- package/src/oauth/oauth-flow-service.d.ts +9 -1
- package/src/oauth/oauth-flow-service.js +11 -1
- package/src/providers/abuseipdb/executors.js +3 -4
- package/src/providers/action-contracts.generated.d.ts +1 -0
- package/src/providers/addressfinder/executors.js +2 -3
- package/src/providers/aeroleads/executors.js +3 -3
- package/src/providers/affinity/runtime.js +6 -7
- package/src/providers/aftership/executors.js +2 -2
- package/src/providers/agent_mail/runtime.js +2 -2
- package/src/providers/agentql/runtime.js +2 -2
- package/src/providers/agenty/runtime.js +5 -6
- package/src/providers/agiled/runtime.d.ts +0 -1
- package/src/providers/agiled/runtime.js +2 -3
- package/src/providers/agility/runtime.js +2 -3
- package/src/providers/ahrefs/runtime.js +3 -3
- package/src/providers/aifinmarket/runtime.js +6 -7
- package/src/providers/airtable/executors.js +3 -3
- package/src/providers/alchemy/runtime.js +2 -2
- package/src/providers/algolia/runtime.js +3 -3
- package/src/providers/aliyun_oss/executors.js +7 -7
- package/src/providers/allratestoday/executors.d.ts +3 -0
- package/src/providers/allratestoday/executors.js +18 -0
- package/src/providers/allratestoday/runtime.d.ts +17 -0
- package/src/providers/allratestoday/runtime.js +104 -0
- package/src/providers/alpaca/runtime.js +2 -3
- package/src/providers/alpha_vantage/runtime.js +2 -2
- package/src/providers/alt_text_ai/runtime.js +2 -2
- package/src/providers/altiria/executors.js +3 -3
- package/src/providers/amap/runtime.js +3 -3
- package/src/providers/ambee/runtime.js +2 -2
- package/src/providers/ambivo/executors.js +3 -3
- package/src/providers/amilia/runtime.js +1 -1
- package/src/providers/amplemarket/runtime.js +2 -2
- package/src/providers/amplitude/runtime.js +3 -3
- package/src/providers/anysearch/runtime.js +4 -4
- package/src/providers/apaleo/runtime.js +2 -2
- package/src/providers/api_sports/executors.js +3 -4
- package/src/providers/apiverve/executors.js +2 -3
- package/src/providers/apollo/executors.js +2 -3
- package/src/providers/appcircle/runtime.js +5 -5
- package/src/providers/appdrag/executors.js +2 -3
- package/src/providers/arcgis_online/executors.js +2 -2
- package/src/providers/auth0_management/runtime.js +2 -3
- package/src/providers/autoblogger/executors.js +3 -3
- package/src/providers/baidu_maps/runtime.js +3 -3
- package/src/providers/baidu_netdisk/runtime-mcp.js +3 -4
- package/src/providers/bark/executors.js +5 -5
- package/src/providers/bitrise/runtime.js +3 -3
- package/src/providers/bouncer/executors.js +3 -4
- package/src/providers/browse_ai/runtime.js +3 -4
- package/src/providers/browserstack/executors.js +6 -7
- package/src/providers/buildkite/runtime.js +3 -3
- package/src/providers/bunnycdn/runtime.js +3 -3
- package/src/providers/businessmap/runtime.js +6 -7
- package/src/providers/buttondown/runtime.js +2 -2
- package/src/providers/byteforms/runtime.js +2 -2
- package/src/providers/calendly/runtime.js +2 -2
- package/src/providers/captainbi/runtime.js +6 -6
- package/src/providers/castingwords/runtime.js +1 -1
- package/src/providers/chatpdf/runtime.js +4 -4
- package/src/providers/check/executors.js +3 -4
- package/src/providers/checkly/executors.js +3 -4
- package/src/providers/chengxin/runtime.js +3 -3
- package/src/providers/cincopa/executors.js +3 -4
- package/src/providers/circle/executors.js +3 -4
- package/src/providers/clearout/executors.js +1 -2
- package/src/providers/clickhelp/runtime.js +5 -5
- package/src/providers/clickhouse/runtime.js +4 -4
- package/src/providers/clinicalkey/runtime.js +3 -3
- package/src/providers/clinicaltrials_gov/runtime.js +4 -5
- package/src/providers/clockify/runtime.js +4 -4
- package/src/providers/close/runtime.js +3 -3
- package/src/providers/cloudconvert/runtime.js +8 -9
- package/src/providers/cloudflare_dns/runtime.js +2 -2
- package/src/providers/cloudflare_email_routing/runtime.js +2 -2
- package/src/providers/cloudflare_r2/runtime.js +5 -5
- package/src/providers/cloudflare_worker/runtime.js +10 -10
- package/src/providers/cloudinary/runtime.js +4 -4
- package/src/providers/cloudlayer/runtime.js +5 -5
- package/src/providers/codacy/runtime.js +2 -2
- package/src/providers/codemagic/runtime.js +2 -2
- package/src/providers/confluence/executors.js +4 -4
- package/src/providers/confluence/runtime.d.ts +0 -1
- package/src/providers/confluence/runtime.js +6 -7
- package/src/providers/contactout/runtime.js +5 -5
- package/src/providers/contentful/runtime.js +2 -2
- package/src/providers/contentstack_content_delivery/runtime.js +1 -1
- package/src/providers/cronly/runtime.js +2 -2
- package/src/providers/crossref/runtime.js +3 -3
- package/src/providers/cutt_ly/runtime.js +3 -3
- package/src/providers/cyberimpact/runtime.js +3 -3
- package/src/providers/dachser/executors.js +2 -2
- package/src/providers/dailybot/runtime.js +1 -1
- package/src/providers/databox/runtime.js +2 -2
- package/src/providers/databricks/runtime.js +2 -2
- package/src/providers/datacite/runtime.js +1 -1
- package/src/providers/datadog/executors.js +3 -4
- package/src/providers/datascope/runtime.js +2 -2
- package/src/providers/daytona/executors.js +3 -3
- package/src/providers/deepgram/runtime.js +2 -2
- package/src/providers/deepl/runtime.js +4 -4
- package/src/providers/detrack/executors.js +5 -5
- package/src/providers/deutschlandgpt/runtime.js +2 -2
- package/src/providers/dialmycalls/runtime.js +4 -4
- package/src/providers/diffbot/executors.js +4 -4
- package/src/providers/digistore24/executors.js +3 -3
- package/src/providers/dingtalk_bot/executors.js +1 -1
- package/src/providers/discourse/executors.d.ts +0 -1
- package/src/providers/discourse/executors.js +6 -7
- package/src/providers/docugenerate/runtime.js +3 -3
- package/src/providers/doppler/runtime.shared.js +3 -3
- package/src/providers/doppler_marketing_automation/runtime.js +4 -4
- package/src/providers/dovetail/runtime.js +2 -2
- package/src/providers/dropcontact/runtime.js +3 -3
- package/src/providers/dub/executors.js +6 -6
- package/src/providers/dumplingai/runtime.js +2 -2
- package/src/providers/elevenlabs/executors.js +4 -4
- package/src/providers/elevenreader/runtime.js +1 -1
- package/src/providers/emailoctopus/runtime.js +4 -4
- package/src/providers/embase/runtime.js +3 -3
- package/src/providers/emelia/executors.js +2 -2
- package/src/providers/enigma/executors.js +3 -3
- package/src/providers/eodhd_apis/executors.js +2 -2
- package/src/providers/eventzilla/runtime.js +3 -4
- package/src/providers/evervault/runtime.js +1 -1
- package/src/providers/excalidraw_mcp/runtime.js +3 -4
- package/src/providers/excel/runtime.js +6 -6
- package/src/providers/expofp/runtime.js +2 -2
- package/src/providers/faktoora/runtime.js +5 -5
- package/src/providers/fast_note_sync/runtime.js +2 -2
- package/src/providers/feathery/executors.js +2 -3
- package/src/providers/feishu_app_bot/executors.js +2 -3
- package/src/providers/feishu_custom_bot/executors.js +2 -3
- package/src/providers/ffhub/executors.js +2 -3
- package/src/providers/fidel_api/executors.js +2 -3
- package/src/providers/files_com/executors.js +2 -3
- package/src/providers/fireberry/runtime.d.ts +0 -1
- package/src/providers/fireberry/runtime.js +3 -4
- package/src/providers/firehydrant/executors.js +2 -3
- package/src/providers/float/executors.js +2 -3
- package/src/providers/flomo/executors.js +5 -6
- package/src/providers/flowiseai/executors.js +2 -3
- package/src/providers/fluxguard/executors.js +2 -3
- package/src/providers/folk/executors.js +2 -3
- package/src/providers/football_data/executors.js +2 -3
- package/src/providers/forem/executors.js +2 -3
- package/src/providers/formbricks/executors.js +2 -3
- package/src/providers/formsite/executors.js +3 -4
- package/src/providers/formspree/executors.js +2 -2
- package/src/providers/freshdesk/executors.js +3 -4
- package/src/providers/freshservice/executors.js +3 -4
- package/src/providers/freshteam/runtime.js +3 -4
- package/src/providers/full_contact/executors.js +3 -3
- package/src/providers/fusion-api/runtime.js +2 -3
- package/src/providers/gagelist/executors.js +3 -3
- package/src/providers/gainsight_nxt/executors.js +2 -2
- package/src/providers/gamma/executors.js +4 -3
- package/src/providers/gangtise/runtime.js +3 -4
- package/src/providers/gatherup/runtime.js +1 -1
- package/src/providers/geckoboard/executors.js +2 -3
- package/src/providers/gemini/runtime.d.ts +0 -1
- package/src/providers/gemini/runtime.js +5 -6
- package/src/providers/genpage/runtime.js +2 -2
- package/src/providers/geokeo/executors.js +4 -4
- package/src/providers/getnote/runtime.js +2 -3
- package/src/providers/github/runtime-shared.js +2 -2
- package/src/providers/glyphic/runtime.js +3 -4
- package/src/providers/gmail/executors.js +125 -27
- package/src/providers/gong/runtime.js +6 -7
- package/src/providers/googlecalendar/runtime-shared.js +3 -4
- package/src/providers/googledrive/runtime-request.js +2 -3
- package/src/providers/googlesheets/runtime-shared.js +3 -4
- package/src/providers/gorgias/runtime.js +4 -4
- package/src/providers/gotify/executors.js +7 -8
- package/src/providers/greenhouse/executors.js +3 -3
- package/src/providers/gumloop/executors.js +2 -3
- package/src/providers/gumroad/executors.js +2 -3
- package/src/providers/habitica/executors.js +2 -3
- package/src/providers/hackerrank_work/executors.js +2 -3
- package/src/providers/harvest/executors.js +3 -4
- package/src/providers/haveibeenpwned/executors.js +2 -3
- package/src/providers/headout/executors.js +3 -4
- package/src/providers/healthchecks_io/executors.js +2 -3
- package/src/providers/helium10/runtime.js +4 -5
- package/src/providers/helpdesk/runtime.js +4 -4
- package/src/providers/home_assistant/runtime-ws.js +9 -10
- package/src/providers/hotjar/executors.js +4 -4
- package/src/providers/httpsms/runtime.js +3 -4
- package/src/providers/hub_planner/executors.js +3 -3
- package/src/providers/hubspot/runtime.js +3 -4
- package/src/providers/humaans/runtime.js +3 -3
- package/src/providers/hunter/runtime.js +3 -3
- package/src/providers/icypeas/executors.js +3 -4
- package/src/providers/ima/runtime.js +7 -7
- package/src/providers/infolobby/runtime.js +6 -6
- package/src/providers/instabot/runtime.js +6 -6
- package/src/providers/instatus/runtime.js +4 -4
- package/src/providers/intuiface/executors.js +3 -3
- package/src/providers/iplocate/runtime.js +4 -5
- package/src/providers/ipregistry/executors.js +2 -2
- package/src/providers/jiminny/runtime.js +4 -4
- package/src/providers/jin10/executors.js +4 -5
- package/src/providers/jira/executors.js +4 -4
- package/src/providers/kaleido/runtime.js +2 -2
- package/src/providers/kandji/runtime.js +2 -2
- package/src/providers/keygen/executors.js +4 -4
- package/src/providers/keyword/runtime.js +2 -2
- package/src/providers/kie_ai/executors.js +1 -1
- package/src/providers/kintone/runtime.js +1 -1
- package/src/providers/kit/runtime.js +2 -2
- package/src/providers/klangio/runtime.js +4 -4
- package/src/providers/klaviyo/executors.js +1 -1
- package/src/providers/klazify/executors.js +3 -3
- package/src/providers/klipfolio/runtime.js +3 -3
- package/src/providers/knack/executors.js +1 -1
- package/src/providers/kommo/runtime.js +2 -2
- package/src/providers/kontent_ai/executors.js +3 -4
- package/src/providers/l2s/executors.js +3 -4
- package/src/providers/latchshot/executors.js +2 -2
- package/src/providers/leadboxer/runtime.js +4 -4
- package/src/providers/leadiq/runtime.js +4 -4
- package/src/providers/linguapop/runtime.js +1 -1
- package/src/providers/lingvanex_translation_api/runtime.js +5 -6
- package/src/providers/lingxing_mcp/runtime.js +3 -4
- package/src/providers/linkup/runtime.js +5 -6
- package/src/providers/liveagent/executors.js +6 -6
- package/src/providers/loops/executors.js +2 -2
- package/src/providers/loyjoy/runtime.js +2 -2
- package/src/providers/loyverse/executors.js +4 -4
- package/src/providers/lusha/runtime.js +3 -3
- package/src/providers/mailbluster/runtime.js +3 -4
- package/src/providers/mailcoach/runtime.js +4 -4
- package/src/providers/mailgenius/executors.js +3 -4
- package/src/providers/mailjet/runtime.js +3 -3
- package/src/providers/mails_so/runtime.js +1 -1
- package/src/providers/mailsoftly/runtime.js +5 -5
- package/src/providers/mailtrap/runtime.js +4 -5
- package/src/providers/manus/runtime.js +3 -3
- package/src/providers/mautic/runtime.js +3 -3
- package/src/providers/megaventory/runtime.js +3 -3
- package/src/providers/memberstack/runtime.js +2 -2
- package/src/providers/mendeley/executors.js +2 -3
- package/src/providers/mindbody/runtime.js +3 -3
- package/src/providers/minerstat/executors.js +3 -3
- package/src/providers/mintlify/runtime.js +3 -3
- package/src/providers/missive/executors.js +3 -5
- package/src/providers/mixpanel/executors.js +3 -3
- package/src/providers/mobile_text_alerts/runtime.js +3 -3
- package/src/providers/mocean/executors.js +3 -3
- package/src/providers/moco/executors.js +5 -5
- package/src/providers/moesif/runtime.js +4 -4
- package/src/providers/monday/runtime-common.js +3 -3
- package/src/providers/monica_crm/runtime.js +4 -4
- package/src/providers/moorcheh/runtime.js +3 -3
- package/src/providers/more_trees/runtime.d.ts +0 -1
- package/src/providers/more_trees/runtime.js +7 -8
- package/src/providers/moxie/runtime.js +2 -2
- package/src/providers/msg91/runtime.js +4 -4
- package/src/providers/mx/runtime.js +1 -1
- package/src/providers/needle/runtime.js +3 -4
- package/src/providers/netlify/runtime.js +2 -3
- package/src/providers/niftyimages/executors.js +2 -2
- package/src/providers/northbeam/runtime.js +1 -1
- package/src/providers/nozbe_teams/executors.js +4 -4
- package/src/providers/npm/runtime.js +4 -4
- package/src/providers/nusii_proposals/runtime.js +2 -2
- package/src/providers/ocr_web_service/executors.js +4 -4
- package/src/providers/octopus_deploy/executors.js +3 -3
- package/src/providers/oksign/runtime.js +3 -4
- package/src/providers/one_drive/executors.js +6 -6
- package/src/providers/one_password_events/runtime.js +1 -1
- package/src/providers/onfleet/runtime.js +3 -3
- package/src/providers/onlyoffice_docspace/runtime.js +4 -4
- package/src/providers/oomnitza/runtime.js +3 -4
- package/src/providers/otter_ai/executors.js +2 -2
- package/src/providers/oura/runtime.js +1 -1
- package/src/providers/paddle/executors.js +3 -3
- package/src/providers/pagerduty/runtime.js +2 -2
- package/src/providers/paradym/runtime.js +4 -4
- package/src/providers/parallel/runtime.js +3 -3
- package/src/providers/partner_stack_partner/runtime.js +1 -1
- package/src/providers/payrexx/runtime.js +5 -6
- package/src/providers/permit_io/runtime.js +2 -2
- package/src/providers/pinboard/executors.js +5 -6
- package/src/providers/pinpoint/runtime.js +2 -2
- package/src/providers/placid/runtime.js +3 -3
- package/src/providers/plain/runtime.js +5 -5
- package/src/providers/planetscale/runtime.js +2 -2
- package/src/providers/planhat/executors.js +6 -6
- package/src/providers/plausible_analytics/runtime.js +3 -3
- package/src/providers/posthog/runtime.js +3 -3
- package/src/providers/predis_ai/executors.js +3 -3
- package/src/providers/printavo/runtime.js +2 -2
- package/src/providers/prospeo/runtime.js +2 -3
- package/src/providers/provider-runtime.d.ts +13 -1
- package/src/providers/provider-runtime.js +25 -10
- package/src/providers/push_by_techulus/executors.js +3 -4
- package/src/providers/pushover/runtime.js +4 -5
- package/src/providers/pushsafer/runtime.js +4 -5
- package/src/providers/pylon/runtime.js +2 -2
- package/src/providers/qase/runtime.js +3 -3
- package/src/providers/qdrant/runtime.js +1 -1
- package/src/providers/qichacha/runtime.js +2 -2
- package/src/providers/qingflow/runtime.js +2 -2
- package/src/providers/quickchart/runtime.js +2 -2
- package/src/providers/quintadb/runtime.js +2 -2
- package/src/providers/quo/runtime.js +2 -2
- package/src/providers/rawg/runtime.js +4 -4
- package/src/providers/razorpay/runtime.js +4 -5
- package/src/providers/readme/runtime.js +6 -6
- package/src/providers/referralhero/runtime.js +3 -3
- package/src/providers/registry.generated.js +1 -0
- package/src/providers/render/executors.js +3 -3
- package/src/providers/respond_io/executors.js +3 -3
- package/src/providers/reversecontact/runtime.js +3 -3
- package/src/providers/ritekit/executors.js +2 -2
- package/src/providers/riveter/executors.js +2 -3
- package/src/providers/rocket_chat/executors.js +3 -4
- package/src/providers/rocket_reach/executors.js +3 -4
- package/src/providers/saucelabs/runtime.js +4 -4
- package/src/providers/scopus/runtime.js +3 -3
- package/src/providers/scrape_do/executors.js +2 -2
- package/src/providers/scraperapi/runtime.js +4 -4
- package/src/providers/scrapfly/executors.js +2 -2
- package/src/providers/scrapingant/executors.js +6 -7
- package/src/providers/scrapingbee/executors.js +3 -3
- package/src/providers/scrapingdog/executors.js +1 -1
- package/src/providers/screenshot_fyi/executors.js +3 -4
- package/src/providers/screenshotbase/runtime.js +3 -3
- package/src/providers/search_api/runtime.js +2 -2
- package/src/providers/securitytrails/executors.js +2 -2
- package/src/providers/semantic_scholar/executors.js +2 -2
- package/src/providers/sendbird/executors.js +2 -2
- package/src/providers/sendfox/executors.js +3 -3
- package/src/providers/sendgrid/executors.js +5 -5
- package/src/providers/sendmator/runtime.js +3 -4
- package/src/providers/seqera/runtime.js +3 -4
- package/src/providers/serveravatar/executors.js +3 -3
- package/src/providers/sheetdb/runtime.js +2 -2
- package/src/providers/short_menu/runtime.js +3 -3
- package/src/providers/shortcut/runtime.js +3 -3
- package/src/providers/shortpixel/runtime.js +2 -2
- package/src/providers/shotstack/runtime.js +4 -4
- package/src/providers/signpath/runtime.js +2 -2
- package/src/providers/signwell/runtime.js +5 -6
- package/src/providers/similarweb_digitalrank_api/runtime.js +3 -3
- package/src/providers/simla/runtime.js +5 -5
- package/src/providers/simplybook_me/executors.js +6 -6
- package/src/providers/sitespeakai/runtime.js +3 -3
- package/src/providers/slickdeals/runtime.js +2 -3
- package/src/providers/smartsuite/runtime.js +3 -3
- package/src/providers/sonarcloud/runtime.js +5 -5
- package/src/providers/sorftime/runtime.js +8 -8
- package/src/providers/spider/runtime.js +2 -2
- package/src/providers/splunk_http_event_collector/runtime.js +7 -8
- package/src/providers/sportsdata/runtime.js +4 -4
- package/src/providers/spyfu/runtime.js +4 -5
- package/src/providers/square/runtime.js +4 -4
- package/src/providers/stannp/runtime.js +2 -2
- package/src/providers/stripe/executors.js +2 -2
- package/src/providers/supermemory/runtime.js +3 -3
- package/src/providers/survey_monkey/runtime.js +3 -3
- package/src/providers/taiga/runtime.js +4 -4
- package/src/providers/talenox/executors.js +4 -4
- package/src/providers/tally/runtime.js +3 -3
- package/src/providers/tavily/runtime.js +3 -4
- package/src/providers/teamcamp/executors.js +2 -2
- package/src/providers/teamtailor/executors.js +2 -2
- package/src/providers/telegram/executors.js +6 -7
- package/src/providers/teltel/executors.js +2 -2
- package/src/providers/templated/executors.js +3 -3
- package/src/providers/tencent_docs/runtime.js +4 -4
- package/src/providers/tencent_maps/runtime.js +3 -3
- package/src/providers/textcortex/runtime.js +3 -3
- package/src/providers/the_cat_api/runtime.js +3 -3
- package/src/providers/the_colony/runtime.js +3 -3
- package/src/providers/the_odds_api/runtime.js +3 -4
- package/src/providers/the_official_board/runtime.js +4 -4
- package/src/providers/thehive/runtime.js +1 -1
- package/src/providers/tikhub/endpoint-catalog.js +2 -3
- package/src/providers/tiktok_business/runtime.js +2 -2
- package/src/providers/timecamp/runtime.js +2 -2
- package/src/providers/timelink/runtime.js +2 -2
- package/src/providers/totp/runtime.js +4 -5
- package/src/providers/trawlingweb/runtime.js +2 -2
- package/src/providers/trilium/runtime.js +2 -2
- package/src/providers/triple_whale/runtime.js +3 -3
- package/src/providers/truvera/runtime.js +2 -2
- package/src/providers/tuskr/runtime.js +2 -2
- package/src/providers/typebot/runtime.js +2 -2
- package/src/providers/typeform/runtime.js +2 -2
- package/src/providers/uptimerobot/executors.js +3 -4
- package/src/providers/v2ex/runtime.js +8 -9
- package/src/providers/valyu/runtime.js +3 -3
- package/src/providers/vapi/runtime.js +4 -4
- package/src/providers/vectorshift/runtime.js +3 -3
- package/src/providers/venafitlsprotectcloud/runtime.js +2 -3
- package/src/providers/venafitlsprotectdatacenter/runtime.js +2 -3
- package/src/providers/vida/runtime.js +4 -4
- package/src/providers/vonage/runtime.js +3 -3
- package/src/providers/walmart_marketplace/runtime.js +5 -5
- package/src/providers/weatherapi/executors.js +3 -4
- package/src/providers/web_of_science/runtime.js +4 -4
- package/src/providers/web_of_science_expanded/runtime.js +9 -9
- package/src/providers/webex/runtime.js +3 -3
- package/src/providers/webinarjam/runtime.js +4 -4
- package/src/providers/webscraping_ai/runtime.js +3 -3
- package/src/providers/webvizio/runtime.js +3 -4
- package/src/providers/wecom_bot/smart-runtime.js +4 -5
- package/src/providers/wecom_mcp/runtime.js +3 -4
- package/src/providers/wejam_ai/runtime.js +3 -3
- package/src/providers/wolfram_alpha_api/runtime.js +3 -3
- package/src/providers/woocommerce/runtime.js +1 -1
- package/src/providers/woodpecker_co/executors.js +3 -4
- package/src/providers/woot/runtime.js +6 -6
- package/src/providers/workable/runtime.js +3 -3
- package/src/providers/workday/runtime.js +4 -4
- package/src/providers/workiom/runtime.js +2 -2
- package/src/providers/workiz/runtime.js +2 -2
- package/src/providers/workpath/executors.js +3 -4
- package/src/providers/worksnaps/executors.js +2 -2
- package/src/providers/y_gy/runtime.js +2 -2
- package/src/providers/zenscrape/runtime.js +3 -3
- package/src/providers/zep/runtime.js +4 -4
- package/src/providers/zeplin/runtime.js +2 -2
- package/src/providers/zhihu/executors.js +6 -6
- package/src/providers/zylvie/runtime.js +4 -4
- package/src/saas/saas-cleanup-service.d.ts +2 -0
- package/src/saas/saas-cleanup-service.js +2 -1
- package/src/saas/saas-execution-service.d.ts +1 -1
- package/src/server/actions/action-runner.js +1 -1
- package/src/server/api/auth.js +3 -0
- package/src/server/api/connection-routes.js +1 -1
- package/src/server/api/console-catalog-routes.js +1 -1
- package/src/server/api/console-oauth-routes.d.ts +3 -1
- package/src/server/api/console-oauth-routes.js +22 -9
- package/src/server/api/oauth-completion-page.d.ts +57 -0
- package/src/server/api/oauth-completion-page.js +135 -10
- package/src/server/api/openapi.d.ts +5 -0
- package/src/server/api/openapi.js +62 -2
- package/src/server/api/runtime-api.d.ts +2 -1
- package/src/server/api/runtime-app-routes.js +1 -1
- package/src/server/api/runtime-execution-routes.js +2 -1
- package/src/server/connect-app.d.ts +4 -0
- package/src/server/connect-app.js +14 -1
- package/src/server/connect-server.d.ts +6 -0
- package/src/server/connect-server.js +114 -4
- package/src/server/connector-runtime.d.ts +6 -8
- package/src/server/connector-runtime.js +8 -28
- package/src/server/proxy/proxy-runner.js +1 -1
- package/src/server/slack-event-verification.d.ts +37 -0
- package/src/server/slack-event-verification.js +91 -0
- package/src/server/storage/connection-request-store.d.ts +1 -1
- package/src/server/storage/connection-store.d.ts +1 -1
- package/src/server/storage/postgres/runtime-store.d.ts +1 -1
- package/src/server/storage/runtime-database.d.ts +1 -1
- package/src/server/storage/saas-project-store.d.ts +1 -1
- package/src/triggers/maintenance.d.ts +2 -0
- package/src/triggers/maintenance.js +2 -1
- package/src/triggers/sources/slack-signature.d.ts +10 -0
- package/src/triggers/sources/slack-signature.js +13 -0
- package/src/triggers/sources/slack.js +9 -11
- 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
|
|
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
|
|
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
|
|
233
|
+
throw providerResponseError(message);
|
|
234
234
|
return record;
|
|
235
235
|
}
|
|
236
236
|
function requireRecordArray(value, message) {
|
|
237
237
|
if (!Array.isArray(value))
|
|
238
|
-
throw
|
|
238
|
+
throw providerResponseError(message);
|
|
239
239
|
return value.map((item) => {
|
|
240
240
|
const record = optionalRecord(item);
|
|
241
241
|
if (!record)
|
|
242
|
-
throw
|
|
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
|
|
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
|
|
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
|
|
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
|
|
216
|
+
return providerInputError(message);
|
|
217
217
|
if (status === 400 || status === 404 || status === 422)
|
|
218
|
-
return
|
|
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
|
|
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
|
|
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
|
|
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(
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
189
|
+
return providerInputError(message);
|
|
190
190
|
}
|
|
191
|
-
return
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
272
|
+
return providerInputError(message);
|
|
273
273
|
}
|
|
274
|
-
return
|
|
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",
|
|
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
|
|
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
|
|
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-
|
|
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-
|
|
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";
|
package/src/server/api/auth.js
CHANGED
|
@@ -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-
|
|
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-
|
|
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-
|
|
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:
|
|
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
|
-
|
|
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
|
|
253
|
-
return
|
|
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;
|