@oomol-lab/open-connector 1.9.1 → 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/aisa.json +1946 -56
- package/assets/open-connector/catalog/apps/akta.json +1181 -0
- package/assets/open-connector/catalog/apps/allratestoday.json +174 -0
- package/assets/open-connector/catalog/apps/asana.json +110 -0
- package/assets/open-connector/catalog/apps/calendly.json +103 -0
- package/assets/open-connector/catalog/apps/clickup.json +104 -0
- package/assets/open-connector/catalog/apps/cloro.json +9289 -0
- package/assets/open-connector/catalog/apps/contextdev.json +20670 -0
- package/assets/open-connector/catalog/apps/deepseek.json +177 -0
- package/assets/open-connector/catalog/apps/defillama.json +23747 -0
- package/assets/open-connector/catalog/apps/fireflies.json +103 -0
- package/assets/open-connector/catalog/apps/fundable.json +7926 -0
- package/assets/open-connector/catalog/apps/intercom.json +110 -0
- package/assets/open-connector/catalog/apps/jira.json +110 -0
- package/assets/open-connector/catalog/apps/keenable.json +235 -0
- package/assets/open-connector/catalog/apps/kolsprite_mcp.json +1227 -0
- package/assets/open-connector/catalog/apps/litescrape.json +52514 -0
- package/assets/open-connector/catalog/apps/magichour.json +5926 -0
- package/assets/open-connector/catalog/apps/minimax.json +24 -14
- package/assets/open-connector/catalog/apps/notion.json +731 -76
- package/assets/open-connector/catalog/apps/octen.json +5248 -0
- package/assets/open-connector/catalog/apps/openrouter.json +10 -0
- package/assets/open-connector/catalog/apps/orbit.json +3574 -0
- package/assets/open-connector/catalog/apps/pandadoc.json +68 -0
- package/assets/open-connector/catalog/apps/pipedrive.json +86 -0
- package/assets/open-connector/catalog/apps/ploid.json +9802 -0
- package/assets/open-connector/catalog/apps/resend.json +100 -0
- package/assets/open-connector/catalog/apps/salesforce.json +2487 -119
- package/assets/open-connector/catalog/apps/saperly.json +7056 -0
- package/assets/open-connector/catalog/apps/search1api.json +2382 -0
- package/assets/open-connector/catalog/apps/sentry.json +129 -0
- package/assets/open-connector/catalog/apps/slackbot.json +250 -2
- package/assets/open-connector/catalog/apps/surf.json +11378 -0
- package/assets/open-connector/catalog/apps/tally.json +113 -0
- package/assets/open-connector/catalog/apps/tinyfish.json +6154 -0
- package/assets/open-connector/catalog/apps/typeform.json +90 -1
- package/assets/open-connector/catalog/apps/vaquill.json +5944 -0
- package/assets/open-connector/catalog/apps/vercel.json +110 -0
- package/assets/open-connector/catalog/apps/weixin_store.json +1256 -7
- package/assets/open-connector/catalog/apps/zoom.json +112 -0
- 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/json-schema.d.ts +11 -3
- package/src/core/json-schema.js +13 -3
- 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 +24 -6
- 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/aisa/executors.js +238 -6
- package/src/providers/aisa/firecrawl-actions.d.ts +9 -0
- package/src/providers/aisa/firecrawl-actions.js +115 -0
- package/src/providers/akta/actions.d.ts +9 -0
- package/src/providers/akta/actions.js +420 -0
- package/src/providers/akta/executors.d.ts +4 -0
- package/src/providers/akta/executors.js +103 -0
- 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/asana/executors.d.ts +2 -0
- package/src/providers/asana/executors.js +2 -0
- package/src/providers/asana/trigger-on-task-event.d.ts +2 -0
- package/src/providers/asana/trigger-on-task-event.definition.d.ts +4 -0
- package/src/providers/asana/trigger-on-task-event.definition.js +42 -0
- package/src/providers/asana/trigger-on-task-event.js +160 -0
- 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/executors.d.ts +2 -0
- package/src/providers/calendly/executors.js +2 -0
- package/src/providers/calendly/runtime.js +2 -2
- package/src/providers/calendly/trigger-on-booking-event.d.ts +2 -0
- package/src/providers/calendly/trigger-on-booking-event.definition.d.ts +5 -0
- package/src/providers/calendly/trigger-on-booking-event.definition.js +42 -0
- package/src/providers/calendly/trigger-on-booking-event.js +144 -0
- 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/clickup/executors.d.ts +2 -0
- package/src/providers/clickup/executors.js +2 -0
- package/src/providers/clickup/trigger-on-task-event.d.ts +2 -0
- package/src/providers/clickup/trigger-on-task-event.definition.d.ts +4 -0
- package/src/providers/clickup/trigger-on-task-event.definition.js +41 -0
- package/src/providers/clickup/trigger-on-task-event.js +94 -0
- 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/cloro/actions.d.ts +12 -0
- package/src/providers/cloro/actions.js +155 -0
- package/src/providers/cloro/executors.d.ts +4 -0
- package/src/providers/cloro/executors.js +67 -0
- package/src/providers/cloro/inputs.d.ts +10 -0
- package/src/providers/cloro/inputs.js +680 -0
- 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/contextdev/actions.d.ts +14 -0
- package/src/providers/contextdev/actions.js +647 -0
- package/src/providers/contextdev/executors.d.ts +4 -0
- package/src/providers/contextdev/executors.js +109 -0
- package/src/providers/contextdev/files.d.ts +3 -0
- package/src/providers/contextdev/files.js +49 -0
- package/src/providers/contextdev/input-schemas.d.ts +49 -0
- package/src/providers/contextdev/input-schemas.js +3082 -0
- package/src/providers/contextdev/output-schemas.d.ts +49 -0
- package/src/providers/contextdev/output-schemas.js +1599 -0
- 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/deepseek/executors.d.ts +0 -5
- package/src/providers/deepseek/executors.js +38 -25
- package/src/providers/defillama/actions.d.ts +24 -0
- package/src/providers/defillama/actions.js +24 -0
- package/src/providers/defillama/dimensions-definitions.d.ts +2 -0
- package/src/providers/defillama/dimensions-definitions.js +1387 -0
- package/src/providers/defillama/ecosystem-definitions.d.ts +2 -0
- package/src/providers/defillama/ecosystem-definitions.js +758 -0
- package/src/providers/defillama/equities-definitions.d.ts +2 -0
- package/src/providers/defillama/equities-definitions.js +733 -0
- package/src/providers/defillama/executors.d.ts +4 -0
- package/src/providers/defillama/executors.js +196 -0
- package/src/providers/defillama/markets-definitions.d.ts +2 -0
- package/src/providers/defillama/markets-definitions.js +624 -0
- package/src/providers/defillama/shared-schemas.d.ts +71 -0
- package/src/providers/defillama/shared-schemas.js +157 -0
- package/src/providers/defillama/tvl-definitions.d.ts +2 -0
- package/src/providers/defillama/tvl-definitions.js +546 -0
- package/src/providers/defillama/yields-definitions.d.ts +2 -0
- package/src/providers/defillama/yields-definitions.js +766 -0
- 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_app_bot/trigger-on-event.js +2 -0
- 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/fireflies/executors.d.ts +2 -0
- package/src/providers/fireflies/executors.js +2 -0
- package/src/providers/fireflies/trigger-on-meeting-ready.d.ts +2 -0
- package/src/providers/fireflies/trigger-on-meeting-ready.definition.d.ts +4 -0
- package/src/providers/fireflies/trigger-on-meeting-ready.definition.js +44 -0
- package/src/providers/fireflies/trigger-on-meeting-ready.js +60 -0
- 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/fundable/actions.d.ts +8 -0
- package/src/providers/fundable/actions.js +1515 -0
- package/src/providers/fundable/executors.d.ts +4 -0
- package/src/providers/fundable/executors.js +74 -0
- 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/gmail/message.d.ts +1 -6
- package/src/providers/gmail/message.js +1 -1
- 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/intercom/executors.d.ts +2 -0
- package/src/providers/intercom/executors.js +2 -0
- package/src/providers/intercom/trigger-on-conversation-event.d.ts +2 -0
- package/src/providers/intercom/trigger-on-conversation-event.definition.d.ts +4 -0
- package/src/providers/intercom/trigger-on-conversation-event.definition.js +42 -0
- package/src/providers/intercom/trigger-on-conversation-event.js +23 -0
- 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.d.ts +2 -0
- package/src/providers/jira/executors.js +6 -4
- package/src/providers/jira/trigger-on-issue-event.d.ts +2 -0
- package/src/providers/jira/trigger-on-issue-event.definition.d.ts +4 -0
- package/src/providers/jira/trigger-on-issue-event.definition.js +44 -0
- package/src/providers/jira/trigger-on-issue-event.js +116 -0
- package/src/providers/jira/trigger-resource.d.ts +4 -0
- package/src/providers/jira/trigger-resource.js +141 -0
- package/src/providers/kaleido/runtime.js +2 -2
- package/src/providers/kandji/runtime.js +2 -2
- package/src/providers/keenable/executors.d.ts +4 -0
- package/src/providers/keenable/executors.js +20 -0
- package/src/providers/keenable/runtime.d.ts +26 -0
- package/src/providers/keenable/runtime.js +89 -0
- 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/kolsprite_mcp/actions.d.ts +2 -0
- package/src/providers/kolsprite_mcp/actions.js +519 -0
- package/src/providers/kolsprite_mcp/executors.d.ts +4 -0
- package/src/providers/kolsprite_mcp/executors.js +89 -0
- 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/litescrape/actions.d.ts +12 -0
- package/src/providers/litescrape/actions.js +124 -0
- package/src/providers/litescrape/airbnb-schemas.d.ts +2 -0
- package/src/providers/litescrape/airbnb-schemas.js +72 -0
- package/src/providers/litescrape/aliexpress-schemas.d.ts +2 -0
- package/src/providers/litescrape/aliexpress-schemas.js +52 -0
- package/src/providers/litescrape/amazon-schemas.d.ts +2 -0
- package/src/providers/litescrape/amazon-schemas.js +358 -0
- package/src/providers/litescrape/apartments-schemas.d.ts +2 -0
- package/src/providers/litescrape/apartments-schemas.js +45 -0
- package/src/providers/litescrape/apple-schemas.d.ts +2 -0
- package/src/providers/litescrape/apple-schemas.js +215 -0
- package/src/providers/litescrape/ashby-schemas.d.ts +2 -0
- package/src/providers/litescrape/ashby-schemas.js +82 -0
- package/src/providers/litescrape/baidu-schemas.d.ts +2 -0
- package/src/providers/litescrape/baidu-schemas.js +31 -0
- package/src/providers/litescrape/bestbuy-schemas.d.ts +2 -0
- package/src/providers/litescrape/bestbuy-schemas.js +56 -0
- package/src/providers/litescrape/bing-schemas.d.ts +2 -0
- package/src/providers/litescrape/bing-schemas.js +315 -0
- package/src/providers/litescrape/brave-schemas.d.ts +2 -0
- package/src/providers/litescrape/brave-schemas.js +101 -0
- package/src/providers/litescrape/copilot-schemas.d.ts +2 -0
- package/src/providers/litescrape/copilot-schemas.js +590 -0
- package/src/providers/litescrape/duckduckgo-schemas.d.ts +2 -0
- package/src/providers/litescrape/duckduckgo-schemas.js +64 -0
- package/src/providers/litescrape/ebay-schemas.d.ts +2 -0
- package/src/providers/litescrape/ebay-schemas.js +300 -0
- package/src/providers/litescrape/etsy-schemas.d.ts +2 -0
- package/src/providers/litescrape/etsy-schemas.js +52 -0
- package/src/providers/litescrape/eventbrite-schemas.d.ts +2 -0
- package/src/providers/litescrape/eventbrite-schemas.js +43 -0
- package/src/providers/litescrape/executors.d.ts +4 -0
- package/src/providers/litescrape/executors.js +138 -0
- package/src/providers/litescrape/facebook-schemas.d.ts +2 -0
- package/src/providers/litescrape/facebook-schemas.js +283 -0
- package/src/providers/litescrape/glassdoor-schemas.d.ts +2 -0
- package/src/providers/litescrape/glassdoor-schemas.js +147 -0
- package/src/providers/litescrape/google-schemas.d.ts +2 -0
- package/src/providers/litescrape/google-schemas.js +1686 -0
- package/src/providers/litescrape/homedepot-schemas.d.ts +2 -0
- package/src/providers/litescrape/homedepot-schemas.js +58 -0
- package/src/providers/litescrape/homes-schemas.d.ts +2 -0
- package/src/providers/litescrape/homes-schemas.js +45 -0
- package/src/providers/litescrape/ikea-schemas.d.ts +2 -0
- package/src/providers/litescrape/ikea-schemas.js +56 -0
- package/src/providers/litescrape/indeed-schemas.d.ts +2 -0
- package/src/providers/litescrape/indeed-schemas.js +141 -0
- package/src/providers/litescrape/instagram-schemas.d.ts +2 -0
- package/src/providers/litescrape/instagram-schemas.js +234 -0
- package/src/providers/litescrape/kroger-schemas.d.ts +2 -0
- package/src/providers/litescrape/kroger-schemas.js +62 -0
- package/src/providers/litescrape/levels-schemas.d.ts +2 -0
- package/src/providers/litescrape/levels-schemas.js +153 -0
- package/src/providers/litescrape/naver-schemas.d.ts +2 -0
- package/src/providers/litescrape/naver-schemas.js +107 -0
- package/src/providers/litescrape/realtor-schemas.d.ts +2 -0
- package/src/providers/litescrape/realtor-schemas.js +47 -0
- package/src/providers/litescrape/redfin-schemas.d.ts +2 -0
- package/src/providers/litescrape/redfin-schemas.js +112 -0
- package/src/providers/litescrape/shared.d.ts +9 -0
- package/src/providers/litescrape/shared.js +1 -0
- package/src/providers/litescrape/sprouts-schemas.d.ts +2 -0
- package/src/providers/litescrape/sprouts-schemas.js +72 -0
- package/src/providers/litescrape/target-schemas.d.ts +2 -0
- package/src/providers/litescrape/target-schemas.js +56 -0
- package/src/providers/litescrape/tiktok-schemas.d.ts +2 -0
- package/src/providers/litescrape/tiktok-schemas.js +625 -0
- package/src/providers/litescrape/tools.d.ts +2 -0
- package/src/providers/litescrape/tools.js +88 -0
- package/src/providers/litescrape/tripadvisor-schemas.d.ts +2 -0
- package/src/providers/litescrape/tripadvisor-schemas.js +119 -0
- package/src/providers/litescrape/walmart-schemas.d.ts +2 -0
- package/src/providers/litescrape/walmart-schemas.js +52 -0
- package/src/providers/litescrape/wayfair-schemas.d.ts +2 -0
- package/src/providers/litescrape/wayfair-schemas.js +52 -0
- package/src/providers/litescrape/web-schemas.d.ts +2 -0
- package/src/providers/litescrape/web-schemas.js +463 -0
- package/src/providers/litescrape/wholefoods-schemas.d.ts +2 -0
- package/src/providers/litescrape/wholefoods-schemas.js +56 -0
- package/src/providers/litescrape/x-schemas.d.ts +2 -0
- package/src/providers/litescrape/x-schemas.js +128 -0
- package/src/providers/litescrape/yahoo-schemas.d.ts +2 -0
- package/src/providers/litescrape/yahoo-schemas.js +234 -0
- package/src/providers/litescrape/yandex-schemas.d.ts +2 -0
- package/src/providers/litescrape/yandex-schemas.js +179 -0
- package/src/providers/litescrape/yelp-schemas.d.ts +2 -0
- package/src/providers/litescrape/yelp-schemas.js +130 -0
- package/src/providers/litescrape/youtube-schemas.d.ts +2 -0
- package/src/providers/litescrape/youtube-schemas.js +128 -0
- package/src/providers/litescrape/zillow-schemas.d.ts +2 -0
- package/src/providers/litescrape/zillow-schemas.js +128 -0
- package/src/providers/litescrape/ziprecruiter-schemas.d.ts +2 -0
- package/src/providers/litescrape/ziprecruiter-schemas.js +96 -0
- 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/magichour/actions.d.ts +22 -0
- package/src/providers/magichour/actions.js +308 -0
- package/src/providers/magichour/audio-schemas.d.ts +2 -0
- package/src/providers/magichour/audio-schemas.js +54 -0
- package/src/providers/magichour/executors.d.ts +4 -0
- package/src/providers/magichour/executors.js +115 -0
- package/src/providers/magichour/image-schemas.d.ts +2 -0
- package/src/providers/magichour/image-schemas.js +443 -0
- package/src/providers/magichour/project-schemas.d.ts +8 -0
- package/src/providers/magichour/project-schemas.js +65 -0
- package/src/providers/magichour/shared-schemas.d.ts +8 -0
- package/src/providers/magichour/shared-schemas.js +18 -0
- package/src/providers/magichour/utility-schemas.d.ts +11 -0
- package/src/providers/magichour/utility-schemas.js +150 -0
- package/src/providers/magichour/video-schemas.d.ts +2 -0
- package/src/providers/magichour/video-schemas.js +629 -0
- package/src/providers/magichour/voices.d.ts +1 -0
- package/src/providers/magichour/voices.js +1268 -0
- 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/minimax/executors.js +19 -4
- package/src/providers/minimax/text-models.d.ts +2 -0
- package/src/providers/minimax/text-models.js +34 -0
- 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/moneyforward_mcp/manifest.d.ts +0 -2
- package/src/providers/moneyforward_mcp/manifest.js +1 -1
- 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/notion/executors.js +36 -3
- 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/octen/actions.d.ts +6 -0
- package/src/providers/octen/actions.js +919 -0
- package/src/providers/octen/executors.d.ts +4 -0
- package/src/providers/octen/executors.js +125 -0
- package/src/providers/octen/inputs.d.ts +2 -0
- package/src/providers/octen/inputs.js +2434 -0
- package/src/providers/octen/research.d.ts +1 -0
- package/src/providers/octen/research.js +86 -0
- 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/openrouter/executors.js +7 -4
- package/src/providers/orbit/actions.d.ts +2 -0
- package/src/providers/orbit/actions.js +3030 -0
- package/src/providers/orbit/executors.d.ts +4 -0
- package/src/providers/orbit/executors.js +106 -0
- package/src/providers/orbit/routes.d.ts +9 -0
- package/src/providers/orbit/routes.js +170 -0
- 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/pandadoc/executors.d.ts +2 -0
- package/src/providers/pandadoc/executors.js +2 -0
- package/src/providers/pandadoc/trigger-on-document-event.d.ts +2 -0
- package/src/providers/pandadoc/trigger-on-document-event.definition.d.ts +4 -0
- package/src/providers/pandadoc/trigger-on-document-event.definition.js +33 -0
- package/src/providers/pandadoc/trigger-on-document-event.js +96 -0
- 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/pipedrive/executors.d.ts +2 -0
- package/src/providers/pipedrive/executors.js +2 -0
- package/src/providers/pipedrive/trigger-on-crm-event.d.ts +2 -0
- package/src/providers/pipedrive/trigger-on-crm-event.definition.d.ts +4 -0
- package/src/providers/pipedrive/trigger-on-crm-event.definition.js +30 -0
- package/src/providers/pipedrive/trigger-on-crm-event.js +101 -0
- 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/ploid/actions.d.ts +16 -0
- package/src/providers/ploid/actions.js +23 -0
- package/src/providers/ploid/endpoints.json +8440 -0
- package/src/providers/ploid/executors.d.ts +4 -0
- package/src/providers/ploid/executors.js +119 -0
- 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 +26 -1
- package/src/providers/provider-runtime.js +62 -14
- 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 +18 -0
- package/src/providers/render/executors.js +3 -3
- package/src/providers/resend/executors.d.ts +2 -0
- package/src/providers/resend/executors.js +2 -0
- package/src/providers/resend/trigger-on-email-event.d.ts +2 -0
- package/src/providers/resend/trigger-on-email-event.definition.d.ts +4 -0
- package/src/providers/resend/trigger-on-email-event.definition.js +37 -0
- package/src/providers/resend/trigger-on-email-event.js +125 -0
- 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/salesforce/chatter-routes.d.ts +107 -0
- package/src/providers/salesforce/chatter-routes.js +140 -0
- package/src/providers/salesforce/context.d.ts +2 -2
- package/src/providers/salesforce/context.js +7 -4
- package/src/providers/salesforce/executors.js +10 -0
- package/src/providers/salesforce/runtime-approvals.d.ts +2 -0
- package/src/providers/salesforce/runtime-approvals.js +52 -0
- package/src/providers/salesforce/runtime-base.js +14 -3
- package/src/providers/salesforce/runtime-chatter.d.ts +2 -0
- package/src/providers/salesforce/runtime-chatter.js +78 -0
- package/src/providers/salesforce/runtime-knowledge.d.ts +2 -0
- package/src/providers/salesforce/runtime-knowledge.js +34 -0
- package/src/providers/salesforce/runtime-leads.d.ts +2 -0
- package/src/providers/salesforce/runtime-leads.js +117 -0
- package/src/providers/salesforce/runtime-platform.d.ts +2 -0
- package/src/providers/salesforce/runtime-platform.js +67 -0
- package/src/providers/saperly/actions.d.ts +17 -0
- package/src/providers/saperly/actions.js +869 -0
- package/src/providers/saperly/executors.d.ts +4 -0
- package/src/providers/saperly/executors.js +113 -0
- package/src/providers/saperly/schemas.d.ts +33 -0
- package/src/providers/saperly/schemas.js +601 -0
- 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/search1api/actions.d.ts +2 -0
- package/src/providers/search1api/actions.js +39 -0
- package/src/providers/search1api/executors.d.ts +4 -0
- package/src/providers/search1api/executors.js +72 -0
- package/src/providers/search1api/runtime.d.ts +3 -0
- package/src/providers/search1api/runtime.js +44 -0
- package/src/providers/search1api/schemas.d.ts +3 -0
- package/src/providers/search1api/schemas.js +1834 -0
- 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/sentry/executors.d.ts +2 -0
- package/src/providers/sentry/executors.js +2 -0
- package/src/providers/sentry/trigger-on-issue-alert.d.ts +2 -0
- package/src/providers/sentry/trigger-on-issue-alert.definition.d.ts +4 -0
- package/src/providers/sentry/trigger-on-issue-alert.definition.js +64 -0
- package/src/providers/sentry/trigger-on-issue-alert.js +80 -0
- package/src/providers/seqera/runtime.js +3 -4
- package/src/providers/serveravatar/executors.js +3 -3
- package/src/providers/sf_express/runtime.d.ts +0 -16
- package/src/providers/sf_express/runtime.js +2 -2
- 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/slack/runtime.d.ts +6 -1
- package/src/providers/slack/runtime.js +21 -0
- package/src/providers/slackbot/actions.js +17 -1
- package/src/providers/slackbot/executors.d.ts +2 -0
- package/src/providers/slackbot/executors.js +5 -1
- package/src/providers/slackbot/trigger-on-event.d.ts +2 -0
- package/src/providers/slackbot/trigger-on-event.definition.d.ts +4 -0
- package/src/providers/slackbot/trigger-on-event.definition.js +57 -0
- package/src/providers/slackbot/trigger-on-event.js +23 -0
- 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/surf/actions.d.ts +21 -0
- package/src/providers/surf/actions.js +26 -0
- package/src/providers/surf/discovery-definitions.d.ts +2 -0
- package/src/providers/surf/discovery-definitions.js +871 -0
- package/src/providers/surf/equity-definitions.d.ts +2 -0
- package/src/providers/surf/equity-definitions.js +322 -0
- package/src/providers/surf/executors.d.ts +4 -0
- package/src/providers/surf/executors.js +131 -0
- package/src/providers/surf/market-definitions.d.ts +2 -0
- package/src/providers/surf/market-definitions.js +885 -0
- package/src/providers/surf/onchain-definitions.d.ts +2 -0
- package/src/providers/surf/onchain-definitions.js +901 -0
- package/src/providers/surf/prediction-definitions.d.ts +2 -0
- package/src/providers/surf/prediction-definitions.js +683 -0
- package/src/providers/surf/shared-schemas.d.ts +18 -0
- package/src/providers/surf/shared-schemas.js +37 -0
- 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/executors.d.ts +2 -0
- package/src/providers/tally/executors.js +2 -0
- package/src/providers/tally/runtime.js +3 -3
- package/src/providers/tally/trigger-on-form-response.d.ts +2 -0
- package/src/providers/tally/trigger-on-form-response.definition.d.ts +4 -0
- package/src/providers/tally/trigger-on-form-response.definition.js +54 -0
- package/src/providers/tally/trigger-on-form-response.js +166 -0
- 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/tinyfish/actions.d.ts +6 -0
- package/src/providers/tinyfish/actions.js +19 -0
- package/src/providers/tinyfish/agent-actions.d.ts +2 -0
- package/src/providers/tinyfish/agent-actions.js +268 -0
- package/src/providers/tinyfish/data-actions.d.ts +2 -0
- package/src/providers/tinyfish/data-actions.js +186 -0
- package/src/providers/tinyfish/data-schemas.d.ts +7 -0
- package/src/providers/tinyfish/data-schemas.js +103 -0
- package/src/providers/tinyfish/endpoints.d.ts +14 -0
- package/src/providers/tinyfish/endpoints.js +1 -0
- package/src/providers/tinyfish/executors.d.ts +4 -0
- package/src/providers/tinyfish/executors.js +133 -0
- package/src/providers/tinyfish/management-actions.d.ts +2 -0
- package/src/providers/tinyfish/management-actions.js +524 -0
- package/src/providers/tinyfish/monitor-schemas.d.ts +5 -0
- package/src/providers/tinyfish/monitor-schemas.js +65 -0
- package/src/providers/tinyfish/research-schemas.d.ts +6 -0
- package/src/providers/tinyfish/research-schemas.js +71 -0
- package/src/providers/totp/runtime.js +4 -5
- package/src/providers/trawlingweb/runtime.js +2 -2
- package/src/providers/trello/executors.js +5 -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/executors.d.ts +2 -0
- package/src/providers/typeform/executors.js +2 -0
- package/src/providers/typeform/runtime.js +2 -2
- package/src/providers/typeform/trigger-on-form-response.d.ts +2 -0
- package/src/providers/typeform/trigger-on-form-response.definition.d.ts +4 -0
- package/src/providers/typeform/trigger-on-form-response.definition.js +40 -0
- package/src/providers/typeform/trigger-on-form-response.js +68 -0
- 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/vaquill/actions.d.ts +13 -0
- package/src/providers/vaquill/actions.js +529 -0
- package/src/providers/vaquill/executors.d.ts +4 -0
- package/src/providers/vaquill/executors.js +141 -0
- package/src/providers/vaquill/schemas.d.ts +67 -0
- package/src/providers/vaquill/schemas.js +4953 -0
- 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/vercel/executors.d.ts +2 -0
- package/src/providers/vercel/executors.js +2 -0
- package/src/providers/vercel/trigger-on-deployment-event.d.ts +2 -0
- package/src/providers/vercel/trigger-on-deployment-event.definition.d.ts +5 -0
- package/src/providers/vercel/trigger-on-deployment-event.definition.js +41 -0
- package/src/providers/vercel/trigger-on-deployment-event.js +102 -0
- 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/weixin_bot/runtime.d.ts +0 -1
- package/src/providers/weixin_bot/runtime.js +1 -1
- package/src/providers/weixin_store/access-token.d.ts +3 -3
- package/src/providers/weixin_store/access-token.js +15 -7
- package/src/providers/weixin_store/executors.js +214 -1
- 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/zoom/executors.d.ts +2 -0
- package/src/providers/zoom/executors.js +2 -0
- package/src/providers/zoom/trigger-on-recording-ready.d.ts +2 -0
- package/src/providers/zoom/trigger-on-recording-ready.definition.d.ts +4 -0
- package/src/providers/zoom/trigger-on-recording-ready.definition.js +44 -0
- package/src/providers/zoom/trigger-on-recording-ready.js +39 -0
- 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/action-example.js +12 -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/pattern-example.js +35 -1
- 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/api/trigger-routes.js +1 -1
- package/src/server/connect-app.d.ts +4 -0
- package/src/server/connect-app.js +15 -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/common/integration.d.ts +15 -3
- package/src/triggers/common/integration.js +5 -0
- package/src/triggers/common/proxy.d.ts +7 -0
- package/src/triggers/maintenance.d.ts +2 -0
- package/src/triggers/maintenance.js +2 -1
- package/src/triggers/managed-webhook.d.ts +13 -0
- package/src/triggers/managed-webhook.js +48 -0
- package/src/triggers/request.d.ts +5 -1
- package/src/triggers/request.js +2 -0
- package/src/triggers/resources.d.ts +8 -2
- package/src/triggers/resources.js +31 -0
- package/src/triggers/signature.d.ts +3 -3
- package/src/triggers/signature.js +4 -6
- package/src/triggers/sources/configuration-schema.d.ts +5 -0
- package/src/triggers/sources/configuration-schema.js +118 -0
- package/src/triggers/sources/configuration.d.ts +115 -0
- package/src/triggers/sources/configuration.js +1 -0
- package/src/triggers/sources/definition.d.ts +61 -0
- package/src/triggers/sources/definition.js +3 -0
- package/src/triggers/sources/feishu-demands.d.ts +6 -0
- package/src/triggers/sources/feishu-demands.js +24 -0
- package/src/triggers/sources/feishu-events.d.ts +19 -0
- package/src/triggers/sources/feishu-events.js +108 -0
- package/src/triggers/sources/feishu.d.ts +3 -0
- package/src/triggers/sources/feishu.js +85 -0
- package/src/triggers/sources/fireflies.d.ts +3 -0
- package/src/triggers/sources/fireflies.js +100 -0
- package/src/triggers/sources/intercom.d.ts +3 -0
- package/src/triggers/sources/intercom.js +86 -0
- package/src/triggers/sources/jira.d.ts +3 -0
- package/src/triggers/sources/jira.js +120 -0
- package/src/triggers/sources/operation.d.ts +42 -0
- package/src/triggers/sources/operation.js +146 -0
- package/src/triggers/sources/sentry.d.ts +3 -0
- package/src/triggers/sources/sentry.js +125 -0
- package/src/triggers/sources/signature.d.ts +1 -0
- package/src/triggers/sources/signature.js +10 -0
- package/src/triggers/sources/slack-signature.d.ts +10 -0
- package/src/triggers/sources/slack-signature.js +13 -0
- package/src/triggers/sources/slack.d.ts +3 -0
- package/src/triggers/sources/slack.js +125 -0
- package/src/triggers/sources/zoom.d.ts +3 -0
- package/src/triggers/sources/zoom.js +113 -0
- package/src/triggers/trigger-runner.d.ts +2 -0
- package/src/triggers/trigger-runner.js +53 -17
|
@@ -4,6 +4,7 @@ import { ActionPolicyService } from "../core/action-policy.js";
|
|
|
4
4
|
import { createActionSearchIndexProvider } from "../core/action-search.js";
|
|
5
5
|
import { optionalRecord } from "../core/cast.js";
|
|
6
6
|
import { withProviderHttpDispatch } from "../core/provider-http-dispatch.js";
|
|
7
|
+
import { withProviderNetworkPolicy } from "../core/provider-network-policy.js";
|
|
7
8
|
import { ProviderDispatchRequestError, toProviderExecutionError } from "../providers/provider-runtime.js";
|
|
8
9
|
import { SaasError } from "../saas/saas-client.js";
|
|
9
10
|
import { ActionRunner } from "./actions/action-runner.js";
|
|
@@ -28,6 +29,7 @@ import { createSaasProjectRoutes } from "./api/saas-project-routes.js";
|
|
|
28
29
|
import { createTransitFileRoutes } from "./api/transit-file-routes.js";
|
|
29
30
|
import { createTriggerRoutes } from "./api/trigger-routes.js";
|
|
30
31
|
import { ProxyRunner } from "./proxy/proxy-runner.js";
|
|
32
|
+
import { readSlackEventRequestBody, verifySlackEventRequest } from "./slack-event-verification.js";
|
|
31
33
|
/**
|
|
32
34
|
* Import and evaluate the modules the /mcp and /docs routes defer to their first request. The Node server never
|
|
33
35
|
* calls this, so its startup graph stays small; Cloudflare Workers call it at app creation so an isolate keeps
|
|
@@ -68,7 +70,7 @@ export class ConnectServer {
|
|
|
68
70
|
const app = new Hono();
|
|
69
71
|
const auth = this.options.auth ?? {};
|
|
70
72
|
app.use("*", async (_context, next) => {
|
|
71
|
-
await withProviderHttpDispatch({ operation: "runtime" }, next, this.options.providerHttpDispatch);
|
|
73
|
+
await withProviderNetworkPolicy(this.options.network ?? {}, () => withProviderHttpDispatch({ operation: "runtime" }, next, this.options.providerHttpDispatch));
|
|
72
74
|
});
|
|
73
75
|
app.use("*", async (context, next) => {
|
|
74
76
|
await next();
|
|
@@ -92,6 +94,84 @@ export class ConnectServer {
|
|
|
92
94
|
app.use("/api/*", compress());
|
|
93
95
|
}
|
|
94
96
|
app.use("*", createLocalAuthMiddleware(auth));
|
|
97
|
+
// Inbound provider event verification. This route authenticates with a dedicated token
|
|
98
|
+
// so a host ingress can delegate signature verification without receiving the admin token.
|
|
99
|
+
app.post("/v1/providers/slackbot/events/verify", async (context) => {
|
|
100
|
+
const expected = this.options.eventVerifyToken?.trim();
|
|
101
|
+
if (!expected)
|
|
102
|
+
return writeRuntimeFailure(context, {
|
|
103
|
+
status: 404,
|
|
104
|
+
errorCode: "event_verification_disabled",
|
|
105
|
+
message: "Event verification is disabled.",
|
|
106
|
+
});
|
|
107
|
+
const authorization = context.req.header("authorization") ?? "";
|
|
108
|
+
const provided = authorization.startsWith("Bearer ") ? authorization.slice(7).trim() : "";
|
|
109
|
+
if (!(await sameSecret(provided, expected)))
|
|
110
|
+
return writeRuntimeFailure(context, {
|
|
111
|
+
status: 401,
|
|
112
|
+
errorCode: "unauthorized",
|
|
113
|
+
message: "A valid event verification token is required.",
|
|
114
|
+
});
|
|
115
|
+
const config = await this.options.oauthClientConfigs.getConfig("slackbot");
|
|
116
|
+
const appId = String(config?.extra?.appId ?? "").trim();
|
|
117
|
+
const signingSecret = String(config?.secretExtra?.signingSecret ?? "").trim();
|
|
118
|
+
if (!appId || !signingSecret)
|
|
119
|
+
return writeRuntimeFailure(context, {
|
|
120
|
+
status: 409,
|
|
121
|
+
errorCode: "event_verification_not_configured",
|
|
122
|
+
message: "Configure the default Slack App ID and Signing Secret.",
|
|
123
|
+
});
|
|
124
|
+
const rawBody = await readSlackEventRequestBody(context.req.raw);
|
|
125
|
+
if (!rawBody)
|
|
126
|
+
return writeRuntimeFailure(context, {
|
|
127
|
+
status: 413,
|
|
128
|
+
errorCode: "webhook_request_too_large",
|
|
129
|
+
message: "Slack request body exceeds 64 KiB.",
|
|
130
|
+
});
|
|
131
|
+
const result = await verifySlackEventRequest({
|
|
132
|
+
timestamp: context.req.header("x-slack-request-timestamp") ?? "",
|
|
133
|
+
signature: context.req.header("x-slack-signature") ?? "",
|
|
134
|
+
rawBody,
|
|
135
|
+
configuredAppId: appId,
|
|
136
|
+
signingSecret,
|
|
137
|
+
contentType: context.req.header("content-type") ?? "",
|
|
138
|
+
});
|
|
139
|
+
if (!result.valid) {
|
|
140
|
+
switch (result.reason) {
|
|
141
|
+
case "body_too_large":
|
|
142
|
+
return writeRuntimeFailure(context, {
|
|
143
|
+
status: 413,
|
|
144
|
+
errorCode: "webhook_request_too_large",
|
|
145
|
+
message: "Slack request body exceeds 64 KiB.",
|
|
146
|
+
});
|
|
147
|
+
case "payload":
|
|
148
|
+
return writeRuntimeFailure(context, {
|
|
149
|
+
status: 400,
|
|
150
|
+
errorCode: "invalid_event_payload",
|
|
151
|
+
message: "Invalid Slack event envelope.",
|
|
152
|
+
});
|
|
153
|
+
case "app":
|
|
154
|
+
return writeRuntimeFailure(context, {
|
|
155
|
+
status: 403,
|
|
156
|
+
errorCode: "webhook_app_mismatch",
|
|
157
|
+
message: "Slack App ID does not match the configured application.",
|
|
158
|
+
});
|
|
159
|
+
case "timestamp":
|
|
160
|
+
return writeRuntimeFailure(context, {
|
|
161
|
+
status: 401,
|
|
162
|
+
errorCode: "invalid_webhook_timestamp",
|
|
163
|
+
message: "Invalid or expired Slack request timestamp.",
|
|
164
|
+
});
|
|
165
|
+
case "signature":
|
|
166
|
+
return writeRuntimeFailure(context, {
|
|
167
|
+
status: 401,
|
|
168
|
+
errorCode: "invalid_webhook_signature",
|
|
169
|
+
message: "Invalid Slack request signature.",
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return writeRuntimeSuccess(context, result);
|
|
174
|
+
});
|
|
95
175
|
// Health and runtime discovery / execution endpoints
|
|
96
176
|
app.get("/v1/health", (context) => writeRuntimeSuccess(context, { ok: true, runtime: "oomol-connect" }));
|
|
97
177
|
app.route("/v1", createRuntimeCatalogRoutes({
|
|
@@ -162,7 +242,10 @@ export class ConnectServer {
|
|
|
162
242
|
app.route("/api", createSaasProjectRoutes({ saasProject: saas }));
|
|
163
243
|
}
|
|
164
244
|
if (saas && this.options.saasOAuth) {
|
|
165
|
-
app.route("/", createSaasOAuthRoutes({
|
|
245
|
+
app.route("/", createSaasOAuthRoutes({
|
|
246
|
+
saasProject: saas,
|
|
247
|
+
saasOAuth: this.options.saasOAuth,
|
|
248
|
+
}));
|
|
166
249
|
}
|
|
167
250
|
app.route("/", createConsoleOAuthRoutes({
|
|
168
251
|
connections: this.options.connections,
|
|
@@ -171,6 +254,7 @@ export class ConnectServer {
|
|
|
171
254
|
saasProject: this.options.saasProject,
|
|
172
255
|
logger: this.options.logger,
|
|
173
256
|
oauthCloseDelaySeconds: this.options.oauthCloseDelaySeconds,
|
|
257
|
+
oauthResultOrigins: this.options.oauthResultOrigins,
|
|
174
258
|
}));
|
|
175
259
|
// Without a console the API owns every unknown path; a console host layers its fallback over these 404s.
|
|
176
260
|
if (this.options.registerStaticRoutes)
|
|
@@ -202,8 +286,18 @@ export class ConnectServer {
|
|
|
202
286
|
if (error.retryAfter)
|
|
203
287
|
context.header("Retry-After", error.retryAfter);
|
|
204
288
|
if (context.req.path.startsWith("/v1/"))
|
|
205
|
-
return writeRuntimeFailure(context, {
|
|
206
|
-
|
|
289
|
+
return writeRuntimeFailure(context, {
|
|
290
|
+
status: error.status,
|
|
291
|
+
errorCode: error.code,
|
|
292
|
+
message: error.message,
|
|
293
|
+
});
|
|
294
|
+
return context.json({
|
|
295
|
+
error: {
|
|
296
|
+
code: error.code,
|
|
297
|
+
message: error.message,
|
|
298
|
+
reason: error.reason,
|
|
299
|
+
},
|
|
300
|
+
}, error.status);
|
|
207
301
|
}
|
|
208
302
|
if (error instanceof HttpRequestError) {
|
|
209
303
|
if (context.req.path.startsWith("/v1/")) {
|
|
@@ -232,3 +326,19 @@ export class ConnectServer {
|
|
|
232
326
|
return app;
|
|
233
327
|
}
|
|
234
328
|
}
|
|
329
|
+
/** Hash both values before a constant-time comparison so length never leaks. */
|
|
330
|
+
async function sameSecret(provided, expected) {
|
|
331
|
+
if (!provided || !expected)
|
|
332
|
+
return false;
|
|
333
|
+
const encoder = new TextEncoder();
|
|
334
|
+
const [left, right] = await Promise.all([
|
|
335
|
+
crypto.subtle.digest("SHA-256", encoder.encode(provided)),
|
|
336
|
+
crypto.subtle.digest("SHA-256", encoder.encode(expected)),
|
|
337
|
+
]);
|
|
338
|
+
const a = new Uint8Array(left);
|
|
339
|
+
const b = new Uint8Array(right);
|
|
340
|
+
let difference = 0;
|
|
341
|
+
for (let index = 0; index < a.length; index += 1)
|
|
342
|
+
difference |= a[index] ^ b[index];
|
|
343
|
+
return difference === 0;
|
|
344
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ActionPolicyConfig } from "../core/action-policy.ts";
|
|
2
2
|
import type { ProviderHttpDispatchOptions } from "../core/provider-http-dispatch.ts";
|
|
3
|
+
import type { ProviderNetworkPolicy } from "../core/provider-network-policy.ts";
|
|
3
4
|
import type { RuntimeLogger } from "../core/types.ts";
|
|
4
5
|
import type { RuntimeJwtConfig } from "./api/runtime-jwt.ts";
|
|
5
6
|
import type { S3TransitClientOptions } from "./files/s3-transit-files.ts";
|
|
@@ -20,13 +21,6 @@ export interface ConnectorPostgresOptions {
|
|
|
20
21
|
/** Time allowed to establish one connection. */
|
|
21
22
|
connectionTimeoutMs?: number;
|
|
22
23
|
}
|
|
23
|
-
/** Provider egress policy. It is process-wide, which is why one runtime may be active per process. */
|
|
24
|
-
export interface ConnectorNetworkOptions {
|
|
25
|
-
/** Let self-hosted providers reach instance hosts on private networks; loopback, link-local and cloud metadata stay blocked. */
|
|
26
|
-
allowPrivateNetwork?: boolean;
|
|
27
|
-
/** Hosts exempt from resolved-address validation, for domains a corporate VPN resolves to placeholder addresses. */
|
|
28
|
-
trustedHosts?: readonly string[];
|
|
29
|
-
}
|
|
30
24
|
export interface ConnectorS3Options extends S3TransitClientOptions {
|
|
31
25
|
bucket: string;
|
|
32
26
|
}
|
|
@@ -53,10 +47,12 @@ export interface ConnectorRuntimeOptions {
|
|
|
53
47
|
adminToken?: string;
|
|
54
48
|
/** Static bearer token for the /v1 and /mcp execution API. JWT verification and console-issued tokens are the alternatives. */
|
|
55
49
|
runtimeToken?: string;
|
|
50
|
+
/** Dedicated bearer token for inbound provider event verification. Kept separate from the admin token. */
|
|
51
|
+
eventVerifyToken?: string;
|
|
56
52
|
/** Verify /v1 bearer tokens as JWTs against a JWKS endpoint. */
|
|
57
53
|
jwt?: RuntimeJwtConfig;
|
|
58
54
|
postgres?: ConnectorPostgresOptions;
|
|
59
|
-
network?:
|
|
55
|
+
network?: ProviderNetworkPolicy;
|
|
60
56
|
/** Opt-in admission and result feedback for every provider HTTP transport attempt. */
|
|
61
57
|
providerHttpDispatch?: ProviderHttpDispatchOptions;
|
|
62
58
|
/** Allow or block actions, proxies and Triggers by name. */
|
|
@@ -78,6 +74,8 @@ export interface ConnectorRuntimeOptions {
|
|
|
78
74
|
apiReference?: boolean;
|
|
79
75
|
/** Seconds the OAuth completion page waits before closing its window. Defaults to 5; `0` closes it as soon as it loads. */
|
|
80
76
|
oauthCloseDelaySeconds?: number;
|
|
77
|
+
/** Exact origins a provider-refusal callback page may post its result to. Never `*`. */
|
|
78
|
+
oauthResultOrigins?: string[];
|
|
81
79
|
}
|
|
82
80
|
/** Standard web requests are the host boundary; credentials, databases and framework objects stay private. */
|
|
83
81
|
export interface ConnectorRuntime {
|
|
@@ -2,10 +2,9 @@ import { mkdir } from "node:fs/promises";
|
|
|
2
2
|
import { join, resolve } from "node:path";
|
|
3
3
|
import { loadCatalog } from "../catalog-store.js";
|
|
4
4
|
import { ActionPolicyService } from "../core/action-policy.js";
|
|
5
|
-
import { setEgressTrustedHosts, setPrivateNetworkAccessAllowed } from "../core/request.js";
|
|
6
5
|
import { ProviderLoader } from "../providers/provider-loader.js";
|
|
7
6
|
import { executorModules } from "../providers/registry.generated.js";
|
|
8
|
-
import { DEFAULT_OAUTH_CLOSE_DELAY_SECONDS } from "./api/oauth-completion-page.js";
|
|
7
|
+
import { DEFAULT_OAUTH_CLOSE_DELAY_SECONDS, normalizeOAuthResultOrigins } from "./api/oauth-completion-page.js";
|
|
9
8
|
import { createRuntimeJwtVerifier } from "./api/runtime-jwt.js";
|
|
10
9
|
import { createConnectApp } from "./connect-app.js";
|
|
11
10
|
import { getConnectorAssetDirectory } from "./connector-assets.js";
|
|
@@ -15,22 +14,9 @@ import { createSecretCodec } from "./secrets/secret-codec.js";
|
|
|
15
14
|
import { createDirectoryMigrationSource } from "./storage/migration-source.js";
|
|
16
15
|
import { createNodeRuntimeDatabase } from "./storage/node-runtime-database.js";
|
|
17
16
|
import { DEFAULT_RUN_LIMIT } from "./storage/runtime-store.js";
|
|
18
|
-
let runtimeActive = false;
|
|
19
17
|
export { getConnectorAssetDirectory } from "./connector-assets.js";
|
|
20
18
|
/** Create a headless runtime without opening a listener or installing process signal handlers. */
|
|
21
19
|
export async function createConnectorRuntime(options) {
|
|
22
|
-
if (runtimeActive)
|
|
23
|
-
throw new Error("Only one Open Connector runtime may be active per process. Close it before creating another.");
|
|
24
|
-
runtimeActive = true;
|
|
25
|
-
try {
|
|
26
|
-
return await openRuntime(options);
|
|
27
|
-
}
|
|
28
|
-
catch (error) {
|
|
29
|
-
releaseRuntime();
|
|
30
|
-
throw error;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
async function openRuntime(options) {
|
|
34
20
|
const publicUrl = new URL(options.publicOrigin);
|
|
35
21
|
if (!["http:", "https:"].includes(publicUrl.protocol) ||
|
|
36
22
|
publicUrl.username ||
|
|
@@ -52,14 +38,15 @@ async function openRuntime(options) {
|
|
|
52
38
|
const oauthCloseDelaySeconds = options.oauthCloseDelaySeconds ?? DEFAULT_OAUTH_CLOSE_DELAY_SECONDS;
|
|
53
39
|
if (!Number.isInteger(oauthCloseDelaySeconds) || oauthCloseDelaySeconds < 0)
|
|
54
40
|
throw new Error("oauthCloseDelaySeconds must be a non-negative integer of seconds.");
|
|
41
|
+
// The same rules as `OOMOL_CONNECT_OAUTH_RESULT_ORIGINS`: a host passing the option directly must not be able
|
|
42
|
+
// to make the refusal page post OAuth state to `*` or to a value that is not an origin.
|
|
43
|
+
const oauthResultOrigins = normalizeOAuthResultOrigins(options.oauthResultOrigins ?? []);
|
|
55
44
|
const assetDirectory = getConnectorAssetDirectory();
|
|
56
45
|
const assets = options.assets ?? {
|
|
57
46
|
catalogDir: join(assetDirectory, "catalog/apps"),
|
|
58
47
|
catalogIndexFile: join(assetDirectory, "catalog/apps-index.json"),
|
|
59
48
|
migrationDirectory: join(assetDirectory, "migrations"),
|
|
60
49
|
};
|
|
61
|
-
setPrivateNetworkAccessAllowed(options.network?.allowPrivateNetwork ?? false);
|
|
62
|
-
setEgressTrustedHosts(options.network?.trustedHosts ?? []);
|
|
63
50
|
const secretCodec = createSecretCodec(options.encryptionKey);
|
|
64
51
|
const verifyRuntimeJwt = await createRuntimeJwtVerifier(options.jwt ?? {});
|
|
65
52
|
const lazySchemas = options.lazySchemas ?? true;
|
|
@@ -110,6 +97,7 @@ async function openRuntime(options) {
|
|
|
110
97
|
await cleanupStagedTransitFiles(tempDir, ttlSeconds * 1000);
|
|
111
98
|
const { app, runtimeAuthConfigured, saasCleanup, triggerMaintenance } = await createConnectApp({
|
|
112
99
|
catalog,
|
|
100
|
+
network: options.network,
|
|
113
101
|
providerLoader: new ProviderLoader(executorModules),
|
|
114
102
|
providerHttpDispatch: options.providerHttpDispatch,
|
|
115
103
|
runtimeDatabase: database,
|
|
@@ -120,12 +108,14 @@ async function openRuntime(options) {
|
|
|
120
108
|
secretCodec,
|
|
121
109
|
adminToken: options.adminToken,
|
|
122
110
|
runtimeToken: options.runtimeToken,
|
|
111
|
+
eventVerifyToken: options.eventVerifyToken,
|
|
123
112
|
verifyRuntimeJwt,
|
|
124
113
|
actionPolicy: new ActionPolicyService(options.actionPolicy),
|
|
125
114
|
allowedCustomOAuth: options.allowedCustomOAuth,
|
|
126
115
|
logger: options.logger,
|
|
127
116
|
serveDocumentation: options.apiReference ?? false,
|
|
128
117
|
oauthCloseDelaySeconds,
|
|
118
|
+
oauthResultOrigins,
|
|
129
119
|
});
|
|
130
120
|
saasCleanup.start();
|
|
131
121
|
triggerMaintenance.start();
|
|
@@ -156,12 +146,7 @@ async function openRuntime(options) {
|
|
|
156
146
|
await database.close();
|
|
157
147
|
}
|
|
158
148
|
finally {
|
|
159
|
-
|
|
160
|
-
closeFiles();
|
|
161
|
-
}
|
|
162
|
-
finally {
|
|
163
|
-
releaseRuntime();
|
|
164
|
-
}
|
|
149
|
+
closeFiles();
|
|
165
150
|
}
|
|
166
151
|
});
|
|
167
152
|
}
|
|
@@ -179,8 +164,3 @@ async function openRuntime(options) {
|
|
|
179
164
|
throw error;
|
|
180
165
|
}
|
|
181
166
|
}
|
|
182
|
-
function releaseRuntime() {
|
|
183
|
-
setPrivateNetworkAccessAllowed(false);
|
|
184
|
-
setEgressTrustedHosts([]);
|
|
185
|
-
runtimeActive = false;
|
|
186
|
-
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ConnectionError } from "../../connection-
|
|
1
|
+
import { ConnectionError } from "../../connection-error.js";
|
|
2
2
|
import { optionalInteger, optionalRecord, requiredRecord, requiredString } from "../../core/cast.js";
|
|
3
3
|
import { withProviderHttpDispatch } from "../../core/provider-http-dispatch.js";
|
|
4
4
|
import { ProviderDispatchRequestError, toProviderExecutionError, withProviderHttpDispatchResult, } from "../../providers/provider-runtime.js";
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export interface SlackEventVerificationInput {
|
|
2
|
+
/** Value of the X-Slack-Request-Timestamp header. */
|
|
3
|
+
timestamp: string;
|
|
4
|
+
/** Value of the X-Slack-Signature header. */
|
|
5
|
+
signature: string;
|
|
6
|
+
/** Raw request body bytes; they must not be re-serialized. */
|
|
7
|
+
rawBody: Uint8Array;
|
|
8
|
+
/** App ID of the Slack application configured in this runtime. */
|
|
9
|
+
configuredAppId: string;
|
|
10
|
+
/** Signing secret of the Slack application configured in this runtime. */
|
|
11
|
+
signingSecret: string;
|
|
12
|
+
/** Request Content-Type. Form-urlencoded Slack interactions are verified without parsing. */
|
|
13
|
+
contentType?: string;
|
|
14
|
+
/** Current time in milliseconds; injectable for tests. */
|
|
15
|
+
now?: number;
|
|
16
|
+
}
|
|
17
|
+
export type SlackEventVerificationResult = {
|
|
18
|
+
valid: true;
|
|
19
|
+
appId: string;
|
|
20
|
+
challenge: string | null;
|
|
21
|
+
} | {
|
|
22
|
+
valid: false;
|
|
23
|
+
reason: "signature" | "timestamp" | "payload" | "app" | "body_too_large";
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Reads a request body without buffering more than the Slack event limit.
|
|
27
|
+
*
|
|
28
|
+
* Returns undefined when the request exceeds the limit. The actual stream size is
|
|
29
|
+
* enforced even when Content-Length is absent or understated.
|
|
30
|
+
*/
|
|
31
|
+
export declare function readSlackEventRequestBody(request: Request): Promise<Uint8Array | undefined>;
|
|
32
|
+
/**
|
|
33
|
+
* Verifies the signature, timestamp window, and App ID of an inbound Slack request.
|
|
34
|
+
*
|
|
35
|
+
* Verification only: this function does not persist, deduplicate, or schedule events.
|
|
36
|
+
*/
|
|
37
|
+
export declare function verifySlackEventRequest(input: SlackEventVerificationInput): Promise<SlackEventVerificationResult>;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { verifySlackSignature } from "../triggers/sources/slack-signature.js";
|
|
2
|
+
/** Maximum request body size, consistent with existing event sources. */
|
|
3
|
+
const slackEventMaximumBodyBytes = 64 * 1024;
|
|
4
|
+
/**
|
|
5
|
+
* Reads a request body without buffering more than the Slack event limit.
|
|
6
|
+
*
|
|
7
|
+
* Returns undefined when the request exceeds the limit. The actual stream size is
|
|
8
|
+
* enforced even when Content-Length is absent or understated.
|
|
9
|
+
*/
|
|
10
|
+
export async function readSlackEventRequestBody(request) {
|
|
11
|
+
const declaredLength = request.headers.get("content-length");
|
|
12
|
+
if (declaredLength && /^\d+$/.test(declaredLength) && Number(declaredLength) > slackEventMaximumBodyBytes) {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
if (!request.body)
|
|
16
|
+
return new Uint8Array();
|
|
17
|
+
const reader = request.body.getReader();
|
|
18
|
+
const chunks = [];
|
|
19
|
+
let totalBytes = 0;
|
|
20
|
+
try {
|
|
21
|
+
while (true) {
|
|
22
|
+
const { done, value } = await reader.read();
|
|
23
|
+
if (done)
|
|
24
|
+
break;
|
|
25
|
+
if (!value)
|
|
26
|
+
continue;
|
|
27
|
+
totalBytes += value.byteLength;
|
|
28
|
+
if (totalBytes > slackEventMaximumBodyBytes) {
|
|
29
|
+
await reader.cancel().catch(() => undefined);
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
chunks.push(value);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
finally {
|
|
36
|
+
reader.releaseLock();
|
|
37
|
+
}
|
|
38
|
+
const body = new Uint8Array(totalBytes);
|
|
39
|
+
let offset = 0;
|
|
40
|
+
for (const chunk of chunks) {
|
|
41
|
+
body.set(chunk, offset);
|
|
42
|
+
offset += chunk.byteLength;
|
|
43
|
+
}
|
|
44
|
+
return body;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Verifies the signature, timestamp window, and App ID of an inbound Slack request.
|
|
48
|
+
*
|
|
49
|
+
* Verification only: this function does not persist, deduplicate, or schedule events.
|
|
50
|
+
*/
|
|
51
|
+
export async function verifySlackEventRequest(input) {
|
|
52
|
+
const now = input.now ?? Date.now();
|
|
53
|
+
if (input.rawBody.byteLength > slackEventMaximumBodyBytes) {
|
|
54
|
+
return { valid: false, reason: "body_too_large" };
|
|
55
|
+
}
|
|
56
|
+
const reason = await verifySlackSignature({ ...input, now });
|
|
57
|
+
if (reason)
|
|
58
|
+
return { valid: false, reason };
|
|
59
|
+
// Slack interaction callbacks are form-urlencoded and do not contain api_app_id.
|
|
60
|
+
// The app-scoped signing secret already proves which application sent the request.
|
|
61
|
+
if (contentType(input.contentType) === "application/x-www-form-urlencoded") {
|
|
62
|
+
return { valid: true, appId: input.configuredAppId, challenge: null };
|
|
63
|
+
}
|
|
64
|
+
// Only parse the body after its signature is trusted.
|
|
65
|
+
let payload;
|
|
66
|
+
try {
|
|
67
|
+
payload = JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(input.rawBody));
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return { valid: false, reason: "payload" };
|
|
71
|
+
}
|
|
72
|
+
if (payload === null || typeof payload !== "object" || Array.isArray(payload)) {
|
|
73
|
+
return { valid: false, reason: "payload" };
|
|
74
|
+
}
|
|
75
|
+
const record = payload;
|
|
76
|
+
const isChallenge = record.type === "url_verification";
|
|
77
|
+
if (!isChallenge && record.type !== "event_callback")
|
|
78
|
+
return { valid: false, reason: "payload" };
|
|
79
|
+
if ((!isChallenge || record.api_app_id !== undefined) && record.api_app_id !== input.configuredAppId)
|
|
80
|
+
return { valid: false, reason: "app" };
|
|
81
|
+
if (isChallenge && (typeof record.challenge !== "string" || !record.challenge || record.challenge.length > 1024))
|
|
82
|
+
return { valid: false, reason: "payload" };
|
|
83
|
+
return {
|
|
84
|
+
valid: true,
|
|
85
|
+
appId: input.configuredAppId,
|
|
86
|
+
challenge: isChallenge ? record.challenge : null,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function contentType(value) {
|
|
90
|
+
return value?.split(";", 1)[0]?.trim().toLowerCase() ?? "";
|
|
91
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { StoredConnection, StoredSaasConnection } from "../../connection-
|
|
1
|
+
import type { StoredConnection, StoredSaasConnection } from "../../connection-store.ts";
|
|
2
2
|
import type { ResolvedCredential } from "../../core/types.ts";
|
|
3
3
|
import type { OAuthAuthorizationState } from "../../oauth/oauth-flow-service.ts";
|
|
4
4
|
import type { ISecretCodec } from "../secrets/secret-codec-core.ts";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { IConnectionStore, StoredConnection, StoredLocalConnection } from "../../connection-
|
|
1
|
+
import type { IConnectionStore, StoredConnection, StoredLocalConnection } from "../../connection-store.ts";
|
|
2
2
|
import type { ResolvedCredential } from "../../core/types.ts";
|
|
3
3
|
import type { ISecretCodec } from "../secrets/secret-codec-core.ts";
|
|
4
4
|
import type { RequestTransaction } from "./connection-request-store.ts";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { IConnectionStore } from "../../../connection-
|
|
1
|
+
import type { IConnectionStore } from "../../../connection-store.ts";
|
|
2
2
|
import type { RuntimeLogger } from "../../../core/types.ts";
|
|
3
3
|
import type { IMarketplaceStore } from "../../../marketplace/marketplace-service.ts";
|
|
4
4
|
import type { IOAuthClientConfigStore } from "../../../oauth/oauth-client-config-service.ts";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { IConnectionStore } from "../../connection-
|
|
1
|
+
import type { IConnectionStore } from "../../connection-store.ts";
|
|
2
2
|
import type { IMarketplaceStore } from "../../marketplace/marketplace-service.ts";
|
|
3
3
|
import type { IOAuthClientConfigStore } from "../../oauth/oauth-client-config-service.ts";
|
|
4
4
|
import type { IOAuthStateStore } from "../../oauth/oauth-flow-service.ts";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { StoredSaasConnection } from "../../connection-
|
|
1
|
+
import type { StoredSaasConnection } from "../../connection-store.ts";
|
|
2
2
|
import type { ISecretCodec } from "../secrets/secret-codec-core.ts";
|
|
3
3
|
import type { RequestStatement, RequestTransaction } from "./connection-request-store.ts";
|
|
4
4
|
import type { RuntimeRow } from "./runtime-sql.ts";
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { CreateEventSource, UpdateEventSource, EventSource } from "../sources/configuration.ts";
|
|
2
|
+
import type { EventSourceDefinition } from "../sources/definition.ts";
|
|
1
3
|
import type { TriggerConfigOption, TriggerConfigOptionsContext } from "./configOptions.ts";
|
|
2
4
|
import type { ConnectorProxyRequest, ConnectorProxyResult, ConnectorProxy } from "./proxy.ts";
|
|
3
5
|
import type { IntegrationEndpointMethod, JsonValue, TriggerKeySnapshot } from "./types.ts";
|
|
@@ -85,13 +87,21 @@ export interface ResourceSubscription {
|
|
|
85
87
|
readonly unsubscribe: ConnectorProxyRequest;
|
|
86
88
|
readonly inspect?: ConnectorProxyRequest;
|
|
87
89
|
}
|
|
88
|
-
export
|
|
90
|
+
export type ResourceDefinition = {
|
|
89
91
|
readonly subscriptions: (config: Readonly<Record<string, JsonValue>>) => readonly ResourceSubscription[];
|
|
90
92
|
readonly response: (result: ConnectorProxyResult) => Readonly<Record<string, JsonValue>>;
|
|
91
|
-
}
|
|
93
|
+
} | {
|
|
94
|
+
readonly reconcile: (context: IntegrationReconcileContext) => Promise<IntegrationReconcileResult>;
|
|
95
|
+
};
|
|
92
96
|
export interface IntegrationDefinition {
|
|
97
|
+
readonly source?: EventSourceDefinition<CreateEventSource, UpdateEventSource, Partial<EventSource>>;
|
|
98
|
+
readonly sourceReceive?: (context: Omit<ListenerReadContext, "checkpoint"> & {
|
|
99
|
+
readonly headers: Readonly<Record<string, string>>;
|
|
100
|
+
readonly rawBody: string;
|
|
101
|
+
}) => Promise<Readonly<Record<string, JsonValue>>>;
|
|
102
|
+
readonly sourceIdentity?: (context: Omit<ListenerReadContext, "checkpoint">) => Promise<Readonly<Record<string, JsonValue>>>;
|
|
93
103
|
readonly resources?: ResourceDefinition;
|
|
94
|
-
readonly eventSource?: "feishu";
|
|
104
|
+
readonly eventSource?: "feishu" | "slack" | "intercom" | "sentry" | "zoom" | "fireflies" | "jira";
|
|
95
105
|
readonly configOptions?: (context: TriggerConfigOptionsContext) => Promise<readonly TriggerConfigOption[]>;
|
|
96
106
|
readonly listener?: ListenerSource;
|
|
97
107
|
readonly initialState?: {
|
|
@@ -109,6 +119,8 @@ export declare class IntegrationConnectionError extends Error {
|
|
|
109
119
|
}
|
|
110
120
|
export declare class PermanentIntegrationError extends Error {
|
|
111
121
|
readonly name = "PermanentIntegrationError";
|
|
122
|
+
readonly reason: "trigger_quota_exceeded" | "trigger_subscription_uncertain" | undefined;
|
|
123
|
+
constructor(message: string, reason?: "trigger_quota_exceeded" | "trigger_subscription_uncertain");
|
|
112
124
|
}
|
|
113
125
|
export declare class TransientIntegrationError extends Error {
|
|
114
126
|
readonly name = "TransientIntegrationError";
|
|
@@ -25,6 +25,11 @@ export class IntegrationConnectionError extends Error {
|
|
|
25
25
|
}
|
|
26
26
|
export class PermanentIntegrationError extends Error {
|
|
27
27
|
name = "PermanentIntegrationError";
|
|
28
|
+
reason;
|
|
29
|
+
constructor(message, reason) {
|
|
30
|
+
super(message);
|
|
31
|
+
this.reason = reason;
|
|
32
|
+
}
|
|
28
33
|
}
|
|
29
34
|
export class TransientIntegrationError extends Error {
|
|
30
35
|
name = "TransientIntegrationError";
|
|
@@ -6,9 +6,16 @@ export interface ConnectorProxyRequest {
|
|
|
6
6
|
readonly query?: Readonly<Record<string, boolean | number | string | null>>;
|
|
7
7
|
}
|
|
8
8
|
export interface ConnectorProxyResult {
|
|
9
|
+
readonly headers?: Readonly<Record<string, string>>;
|
|
9
10
|
readonly data: unknown;
|
|
10
11
|
readonly status: number;
|
|
11
12
|
}
|
|
12
13
|
export interface ConnectorProxy {
|
|
14
|
+
readonly oauthClientConfig?: {
|
|
15
|
+
readonly clientId: string;
|
|
16
|
+
readonly clientSecret?: string;
|
|
17
|
+
};
|
|
18
|
+
readonly providerAccountId?: string;
|
|
19
|
+
readonly authType?: string;
|
|
13
20
|
execute(request: ConnectorProxyRequest, signal?: AbortSignal): Promise<ConnectorProxyResult>;
|
|
14
21
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ActionPolicyService } from "../core/action-policy.ts";
|
|
2
|
+
import type { ProviderNetworkPolicy } from "../core/provider-network-policy.ts";
|
|
2
3
|
import type { RuntimeLogger } from "../core/types.ts";
|
|
3
4
|
import type { IRuntimePolicyStore } from "../server/storage/runtime-policy-store.ts";
|
|
4
5
|
import type { IRuntimeTokenStore } from "../server/storage/runtime-token-service.ts";
|
|
@@ -16,6 +17,7 @@ export interface TriggerSubscriptionSummary {
|
|
|
16
17
|
reconcileAt: number;
|
|
17
18
|
}
|
|
18
19
|
interface TriggerMaintenanceOptions {
|
|
20
|
+
network?: ProviderNetworkPolicy;
|
|
19
21
|
store: TriggerStore;
|
|
20
22
|
runner: TriggerRunner;
|
|
21
23
|
tokens: IRuntimeTokenStore;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { withProviderNetworkPolicy } from "../core/provider-network-policy.js";
|
|
1
2
|
import { HttpRequestError } from "../server/api/http-utils.js";
|
|
2
3
|
import { withSubscription } from "./subscriptions.js";
|
|
3
4
|
export class TriggerMaintenance {
|
|
@@ -49,7 +50,7 @@ export class TriggerMaintenance {
|
|
|
49
50
|
run() {
|
|
50
51
|
if (this.shutdown.signal.aborted)
|
|
51
52
|
return Promise.resolve();
|
|
52
|
-
this.pending ??= this.runBatch()
|
|
53
|
+
this.pending ??= withProviderNetworkPolicy(this.options.network ?? {}, () => this.runBatch())
|
|
53
54
|
.catch(() => {
|
|
54
55
|
this.options.logger?.warn({ errorCode: "trigger_cleanup_failed" }, "Trigger cleanup batch failed; pending work is retained");
|
|
55
56
|
})
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { IntegrationReconcileContext, IntegrationReconcileResult } from "./common/integration.ts";
|
|
2
|
+
import type { ConnectorProxyRequest, ConnectorProxyResult } from "./common/proxy.ts";
|
|
3
|
+
export interface ManagedWebhook {
|
|
4
|
+
readonly id: string;
|
|
5
|
+
readonly secret: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function webhookRequest(context: Pick<IntegrationReconcileContext, "connector" | "signal">, request: ConnectorProxyRequest): Promise<ConnectorProxyResult>;
|
|
8
|
+
export declare function reconcileManagedWebhook(context: IntegrationReconcileContext, operations: {
|
|
9
|
+
readonly find: () => Promise<readonly ManagedWebhook[]>;
|
|
10
|
+
readonly create: () => Promise<ManagedWebhook>;
|
|
11
|
+
readonly remove: (id: string) => Promise<void>;
|
|
12
|
+
readonly align?: (id: string) => Promise<void>;
|
|
13
|
+
}): Promise<IntegrationReconcileResult>;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { PermanentIntegrationError, TransientIntegrationError } from "./common/integration.js";
|
|
2
|
+
export async function webhookRequest(context, request) {
|
|
3
|
+
context.signal?.throwIfAborted();
|
|
4
|
+
const result = await context.connector.execute(request, context.signal);
|
|
5
|
+
context.signal?.throwIfAborted();
|
|
6
|
+
if ((result.status >= 200 && result.status < 300) || (request.method == "DELETE" && result.status == 404))
|
|
7
|
+
return result;
|
|
8
|
+
const message = `Webhook ${request.method} request failed (HTTP ${result.status}). Check resource access and webhook permissions.`;
|
|
9
|
+
if (result.status >= 400 && result.status < 500 && result.status != 429)
|
|
10
|
+
throw new PermanentIntegrationError(message);
|
|
11
|
+
throw new TransientIntegrationError(message);
|
|
12
|
+
}
|
|
13
|
+
export async function reconcileManagedWebhook(context, operations) {
|
|
14
|
+
const state = context.state;
|
|
15
|
+
if (state == null)
|
|
16
|
+
throw new PermanentIntegrationError("Webhook subscription state is missing.");
|
|
17
|
+
const matches = await operations.find();
|
|
18
|
+
if (matches.length > 1)
|
|
19
|
+
throw new PermanentIntegrationError("Multiple webhooks match this subscription. Remove duplicates before retrying.");
|
|
20
|
+
let hook = matches[0];
|
|
21
|
+
if (!context.active) {
|
|
22
|
+
if (hook != null)
|
|
23
|
+
await operations.remove(hook.id);
|
|
24
|
+
else if (state.subscription.creating === true)
|
|
25
|
+
throw new PermanentIntegrationError("Webhook creation has an uncertain outcome. Verify the remote subscription before cleanup.");
|
|
26
|
+
await state.saveSubscription({}, new Date(context.now.getTime() + 86_400_000));
|
|
27
|
+
return { outcome: "ready" };
|
|
28
|
+
}
|
|
29
|
+
if (hook == null) {
|
|
30
|
+
if (state.subscription.creating === true)
|
|
31
|
+
throw new PermanentIntegrationError("Webhook creation has an uncertain outcome. Verify the remote subscription before retrying.");
|
|
32
|
+
await state.saveSubscription({ creating: true }, context.now);
|
|
33
|
+
try {
|
|
34
|
+
hook = await operations.create();
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
// A definite rejection did not create a resource; transport and malformed-response errors remain uncertain.
|
|
38
|
+
if (error instanceof PermanentIntegrationError)
|
|
39
|
+
await state.saveSubscription({}, context.now);
|
|
40
|
+
throw error;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const subscription = { hookId: hook.id, secret: hook.secret };
|
|
44
|
+
await state.saveSubscription(subscription, context.now);
|
|
45
|
+
await operations.align?.(hook.id);
|
|
46
|
+
await state.saveSubscription(subscription, new Date(context.now.getTime() + 86_400_000));
|
|
47
|
+
return { outcome: "ready" };
|
|
48
|
+
}
|