@oomol-lab/open-connector 1.6.5 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/assets/open-connector/catalog/apps/airtable.json +134 -0
- package/assets/open-connector/catalog/apps/aisa.json +6985 -319
- package/assets/open-connector/catalog/apps/baizhi_mcp.json +135 -0
- package/assets/open-connector/catalog/apps/cal.json +24 -6
- package/assets/open-connector/catalog/apps/discordbot.json +2888 -248
- package/assets/open-connector/catalog/apps/drawio_mcp.json +192 -0
- package/assets/open-connector/catalog/apps/enormail.json +411 -0
- package/assets/open-connector/catalog/apps/feishu_app_bot.json +158 -0
- package/assets/open-connector/catalog/apps/firecrawl.json +176 -32
- package/assets/open-connector/catalog/apps/framejet.json +273 -0
- package/assets/open-connector/catalog/apps/futunn.json +2967 -0
- package/assets/open-connector/catalog/apps/github.json +275 -0
- package/assets/open-connector/catalog/apps/gitlab.json +125 -0
- package/assets/open-connector/catalog/apps/gmail.json +376 -0
- package/assets/open-connector/catalog/apps/google_analytics.json +4 -1
- package/assets/open-connector/catalog/apps/google_bigquery.json +4 -1
- package/assets/open-connector/catalog/apps/google_search_console.json +4 -1
- package/assets/open-connector/catalog/apps/googlecalendar.json +210 -1
- package/assets/open-connector/catalog/apps/googlechat.json +694 -7
- package/assets/open-connector/catalog/apps/googledocs.json +4 -1
- package/assets/open-connector/catalog/apps/googledrive.json +479 -0
- package/assets/open-connector/catalog/apps/googlesheets.json +148 -1
- package/assets/open-connector/catalog/apps/granola.json +23 -0
- package/assets/open-connector/catalog/apps/hithink_finance.json +6 -3
- package/assets/open-connector/catalog/apps/indexed.json +1115 -0
- package/assets/open-connector/catalog/apps/keepa.json +3534 -987
- package/assets/open-connector/catalog/apps/linear.json +133 -0
- package/assets/open-connector/catalog/apps/linear_mcp.json +510 -0
- package/assets/open-connector/catalog/apps/moneyforward_mcp.json +1432 -0
- package/assets/open-connector/catalog/apps/notion.json +588 -1
- package/assets/open-connector/catalog/apps/notion_mcp.json +490 -0
- package/assets/open-connector/catalog/apps/odoo.json +619 -0
- package/assets/open-connector/catalog/apps/one_drive.json +185 -0
- package/assets/open-connector/catalog/apps/outlook.json +212 -8
- package/assets/open-connector/catalog/apps/outlook_calendar.json +23 -2
- package/assets/open-connector/catalog/apps/postiz.json +334 -0
- package/assets/open-connector/catalog/apps/proworkflow.json +529 -0
- package/assets/open-connector/catalog/apps/sellersprite_mcp.json +2 -1
- package/assets/open-connector/catalog/apps/shopify.json +282 -0
- package/assets/open-connector/catalog/apps/slack.json +405 -0
- package/assets/open-connector/catalog/apps/slackbot.json +214 -0
- package/assets/open-connector/catalog/apps/spotify.json +46 -43
- package/assets/open-connector/catalog/apps/stripe.json +96 -0
- package/assets/open-connector/catalog/apps/telegram.json +138 -0
- package/assets/open-connector/catalog/apps/tencent_docs.json +3 -0
- package/assets/open-connector/catalog/apps/weixin_store.json +543 -2
- package/assets/open-connector/catalog/apps/wisburg.json +1528 -0
- package/assets/open-connector/catalog/apps/woocommerce.json +127 -0
- package/assets/open-connector/catalog/apps/youtube.json +4 -1
- package/assets/open-connector/catalog/apps/zendesk.json +152 -0
- package/assets/open-connector/catalog/apps/zerotier.json +3319 -0
- package/assets/open-connector/catalog/apps-index.json +1 -1
- package/assets/open-connector/migrations/0014_saas_project.sql +55 -0
- package/assets/open-connector/migrations/0015_saas_cleanup_runtime.sql +8 -0
- package/assets/open-connector/migrations/0016_trigger_policy.sql +1 -0
- package/assets/open-connector/migrations/0017_trigger_subscriptions.sql +17 -0
- package/assets/open-connector/migrations/postgresql/0014_saas_project.sql +55 -0
- package/assets/open-connector/migrations/postgresql/0015_saas_cleanup_runtime.sql +8 -0
- package/assets/open-connector/migrations/postgresql/0016_trigger_policy.sql +1 -0
- package/assets/open-connector/migrations/postgresql/0017_trigger_subscriptions.sql +17 -0
- package/package.json +2 -2
- package/src/connection-service.d.ts +40 -7
- package/src/connection-service.js +60 -18
- package/src/core/action-policy.d.ts +8 -1
- package/src/core/action-policy.js +51 -0
- package/src/core/cast.d.ts +13 -0
- package/src/core/cast.js +18 -1
- package/src/core/guarded-fetch.d.ts +11 -3
- package/src/core/guarded-fetch.js +19 -7
- package/src/core/provider-scenarios.js +67 -13
- package/src/core/remote-http.d.ts +33 -0
- package/src/core/remote-http.js +104 -0
- package/src/core/request.d.ts +1 -0
- package/src/core/request.js +11 -1
- package/src/core/types.d.ts +5 -1
- package/src/marketplace/marketplace-service.d.ts +0 -1
- package/src/marketplace/marketplace-service.js +80 -92
- package/src/mcp.js +26 -9
- package/src/oauth/oauth-client-config-service.d.ts +16 -1
- package/src/oauth/oauth-client-config-service.js +59 -3
- package/src/oauth/oauth-flow-service.d.ts +14 -1
- package/src/oauth/oauth-flow-service.js +14 -6
- package/src/providers/17track/runtime.js +1 -1
- package/src/providers/action-contracts.generated.d.ts +20 -6
- package/src/providers/aifinmarket/runtime.js +1 -1
- package/src/providers/airtable/executors.d.ts +3 -0
- package/src/providers/airtable/executors.js +2 -0
- package/src/providers/airtable/trigger-on-record-changed.d.ts +2 -0
- package/src/providers/airtable/trigger-on-record-changed.definition.d.ts +4 -0
- package/src/providers/airtable/trigger-on-record-changed.definition.js +54 -0
- package/src/providers/airtable/trigger-on-record-changed.js +235 -0
- package/src/providers/aisa/executors.js +912 -50
- package/src/providers/aliyun_ack/runtime.js +1 -1
- package/src/providers/aliyun_sls/runtime.js +1 -1
- package/src/providers/app_store_server/runtime-helpers.js +1 -1
- package/src/providers/baizhi_mcp/actions.d.ts +2 -0
- package/src/providers/baizhi_mcp/actions.js +40 -0
- package/src/providers/baizhi_mcp/executors.d.ts +3 -0
- package/src/providers/baizhi_mcp/executors.js +102 -0
- package/src/providers/bazhuayu/runtime.js +2 -2
- package/src/providers/bilibili/runtime.js +2 -4
- package/src/providers/bilibili/upload.js +9 -7
- package/src/providers/cal/actions.js +5 -1
- package/src/providers/cloudflare_browser_rendering/executors.js +1 -1
- package/src/providers/cloudflare_dns/executors.js +1 -1
- package/src/providers/{cloudflare-current-user.js → cloudflare_dns/runtime-user.js} +2 -2
- package/src/providers/cloudflare_dns/runtime.d.ts +1 -1
- package/src/providers/cloudflare_dns/runtime.js +1 -1
- package/src/providers/cloudflare_r2/executors.js +1 -1
- package/src/providers/cloudflare_r2/runtime.d.ts +1 -1
- package/src/providers/cloudflare_r2/runtime.js +1 -1
- package/src/providers/cloudflare_worker/executors.js +1 -1
- package/src/providers/cloudflare_worker/runtime.d.ts +1 -1
- package/src/providers/cloudflare_worker/runtime.js +1 -1
- package/src/providers/dingtalk_mcp/runtime.js +1 -1
- package/src/providers/discordbot/executors.d.ts +0 -9
- package/src/providers/discordbot/executors.js +9 -101
- package/src/providers/discordbot/runtime-guilds.d.ts +3 -0
- package/src/providers/discordbot/runtime-guilds.js +464 -0
- package/src/providers/discordbot/runtime.d.ts +42 -0
- package/src/providers/discordbot/runtime.js +124 -0
- package/src/providers/drawio_mcp/executors.d.ts +3 -0
- package/src/providers/drawio_mcp/executors.js +19 -0
- package/src/providers/drawio_mcp/runtime.d.ts +8 -0
- package/src/providers/drawio_mcp/runtime.js +175 -0
- package/src/providers/enormail/executors.d.ts +4 -0
- package/src/providers/enormail/executors.js +97 -0
- package/src/providers/fastmoss_mcp/executors.js +2 -2
- package/src/providers/feishu_app_bot/executors.d.ts +3 -0
- package/src/providers/feishu_app_bot/executors.js +2 -0
- package/src/providers/feishu_app_bot/trigger-config.d.ts +1 -0
- package/src/providers/feishu_app_bot/trigger-config.js +10 -0
- package/src/providers/feishu_app_bot/trigger-on-event.d.ts +2 -0
- package/src/providers/feishu_app_bot/trigger-on-event.definition.d.ts +4 -0
- package/src/providers/feishu_app_bot/trigger-on-event.definition.js +63 -0
- package/src/providers/feishu_app_bot/trigger-on-event.js +29 -0
- package/src/providers/feishu_app_bot/trigger-subscriptions.d.ts +5 -0
- package/src/providers/feishu_app_bot/trigger-subscriptions.js +70 -0
- package/src/providers/finchina/executors.js +1 -1
- package/src/providers/framejet/executors.d.ts +4 -0
- package/src/providers/framejet/executors.js +19 -0
- package/src/providers/framejet/runtime.d.ts +16 -0
- package/src/providers/framejet/runtime.js +148 -0
- package/src/providers/futunn/actions.d.ts +2 -0
- package/src/providers/futunn/actions.js +152 -0
- package/src/providers/futunn/actions.research.d.ts +2 -0
- package/src/providers/futunn/actions.research.js +423 -0
- package/src/providers/futunn/actions.trading.d.ts +2 -0
- package/src/providers/futunn/actions.trading.js +204 -0
- package/src/providers/futunn/executors.d.ts +3 -0
- package/src/providers/futunn/executors.js +24 -0
- package/src/providers/futunn/runtime-research.d.ts +3 -0
- package/src/providers/futunn/runtime-research.js +133 -0
- package/src/providers/futunn/runtime-trading.d.ts +3 -0
- package/src/providers/futunn/runtime-trading.js +39 -0
- package/src/providers/futunn/runtime.d.ts +2 -0
- package/src/providers/futunn/runtime.js +50 -0
- package/src/providers/futunn/transport.d.ts +11 -0
- package/src/providers/futunn/transport.js +76 -0
- package/src/providers/gildata/executors.js +1 -1
- package/src/providers/github/executors.d.ts +3 -0
- package/src/providers/github/executors.js +6 -0
- package/src/providers/github/trigger-on-repo-event.d.ts +2 -0
- package/src/providers/github/trigger-on-repo-event.definition.d.ts +4 -0
- package/src/providers/github/trigger-on-repo-event.definition.js +94 -0
- package/src/providers/github/trigger-on-repo-event.js +168 -0
- package/src/providers/github/trigger-watch-pull-request.d.ts +2 -0
- package/src/providers/github/trigger-watch-pull-request.definition.d.ts +4 -0
- package/src/providers/github/trigger-watch-pull-request.definition.js +49 -0
- package/src/providers/github/trigger-watch-pull-request.js +106 -0
- package/src/providers/gitlab/executors.d.ts +3 -0
- package/src/providers/gitlab/executors.js +2 -0
- package/src/providers/gitlab/trigger-on-project-event.d.ts +2 -0
- package/src/providers/gitlab/trigger-on-project-event.definition.d.ts +5 -0
- package/src/providers/gitlab/trigger-on-project-event.definition.js +63 -0
- package/src/providers/gitlab/trigger-on-project-event.js +186 -0
- package/src/providers/gmail/executors.d.ts +3 -0
- package/src/providers/gmail/executors.js +5 -3
- package/src/providers/gmail/message.d.ts +6 -8
- package/src/providers/gmail/message.js +4 -0
- package/src/providers/gmail/scopes.d.ts +32 -0
- package/src/providers/gmail/scopes.js +37 -0
- package/src/providers/gmail/trigger-on-message-received.d.ts +2 -0
- package/src/providers/gmail/trigger-on-message-received.definition.d.ts +4 -0
- package/src/providers/gmail/trigger-on-message-received.definition.js +74 -0
- package/src/providers/gmail/trigger-on-message-received.js +232 -0
- package/src/providers/google_analytics/executors.js +2 -2
- package/src/providers/google_analytics/scopes.js +6 -1
- package/src/providers/google_bigquery/executors.js +2 -2
- package/src/providers/google_bigquery/scopes.js +2 -0
- package/src/providers/google_search_console/executors.js +2 -2
- package/src/providers/google_search_console/scopes.js +2 -0
- package/src/providers/googleads/executors.js +1 -1
- package/src/providers/googleads/scopes.d.ts +1 -3
- package/src/providers/googleads/scopes.js +2 -4
- package/src/providers/googlecalendar/executors.d.ts +3 -0
- package/src/providers/googlecalendar/executors.js +3 -1
- package/src/providers/googlecalendar/runtime-shared.js +2 -2
- package/src/providers/googlecalendar/scopes.js +2 -0
- package/src/providers/googlecalendar/trigger-on-event-changed.d.ts +2 -0
- package/src/providers/googlecalendar/trigger-on-event-changed.definition.d.ts +4 -0
- package/src/providers/googlecalendar/trigger-on-event-changed.definition.js +74 -0
- package/src/providers/googlecalendar/trigger-on-event-changed.js +233 -0
- package/src/providers/googlechat/executors.d.ts +1 -3
- package/src/providers/googlechat/executors.js +219 -28
- package/src/providers/googlechat/members.d.ts +55 -0
- package/src/providers/googlechat/members.js +293 -0
- package/src/providers/googlechat/runtime.d.ts +16 -0
- package/src/providers/googlechat/runtime.js +25 -0
- package/src/providers/googlechat/scopes.d.ts +22 -3
- package/src/providers/googlechat/scopes.js +30 -7
- package/src/providers/googledocs/executors.js +1 -1
- package/src/providers/googledrive/executors.d.ts +3 -0
- package/src/providers/googledrive/executors.js +9 -2
- package/src/providers/{google-auth.d.ts → googledrive/runtime-auth.d.ts} +2 -2
- package/src/providers/{google-auth.js → googledrive/runtime-auth.js} +3 -3
- package/src/providers/googledrive/runtime-collaboration.js +1 -1
- package/src/providers/{google-runtime.d.ts → googledrive/runtime-request.d.ts} +1 -1
- package/src/providers/{google-runtime.js → googledrive/runtime-request.js} +2 -2
- package/src/providers/googledrive/trigger-changes.d.ts +12 -0
- package/src/providers/googledrive/trigger-changes.definition.d.ts +7 -0
- package/src/providers/googledrive/trigger-changes.definition.js +101 -0
- package/src/providers/googledrive/trigger-changes.js +452 -0
- package/src/providers/googledrive/trigger-on-file-change.d.ts +2 -0
- package/src/providers/googledrive/trigger-on-file-change.definition.d.ts +4 -0
- package/src/providers/googledrive/trigger-on-file-change.definition.js +77 -0
- package/src/providers/googledrive/trigger-on-file-change.js +258 -0
- package/src/providers/googleforms/executors.js +2 -2
- package/src/providers/googleforms/scopes.d.ts +0 -3
- package/src/providers/googleforms/scopes.js +2 -6
- package/src/providers/googlemeet/executors.js +2 -2
- package/src/providers/googlemeet/scopes.d.ts +0 -3
- package/src/providers/googlemeet/scopes.js +2 -6
- package/src/providers/googlesheets/executors.d.ts +3 -0
- package/src/providers/googlesheets/executors.js +3 -1
- package/src/providers/googlesheets/scopes.js +2 -0
- package/src/providers/googlesheets/trigger-on-row-added.d.ts +2 -0
- package/src/providers/googlesheets/trigger-on-row-added.definition.d.ts +4 -0
- package/src/providers/googlesheets/trigger-on-row-added.definition.js +54 -0
- package/src/providers/googlesheets/trigger-on-row-added.js +234 -0
- package/src/providers/googleslides/executors.js +2 -2
- package/src/providers/googleslides/scopes.d.ts +0 -3
- package/src/providers/googleslides/scopes.js +2 -6
- package/src/providers/googletasks/executors.js +2 -2
- package/src/providers/googletasks/scopes.d.ts +0 -3
- package/src/providers/googletasks/scopes.js +2 -6
- package/src/providers/granola/actions.js +2 -0
- package/src/providers/granola/runtime-mcp.js +2 -0
- package/src/providers/granola/runtime.js +2 -2
- package/src/providers/hithink_finance/runtime.js +1 -1
- package/src/providers/indexed/executors.d.ts +4 -0
- package/src/providers/indexed/executors.js +16 -0
- package/src/providers/indexed/runtime.d.ts +26 -0
- package/src/providers/indexed/runtime.js +129 -0
- package/src/providers/indiegogo/executors.js +1 -1
- package/src/providers/investoday_mcp/executors.js +2 -2
- package/src/providers/iyunbiao/runtime.js +2 -2
- package/src/providers/keepa/actions.d.ts +1 -1
- package/src/providers/keepa/actions.js +371 -149
- package/src/providers/keepa/deal-attributes.d.ts +1 -0
- package/src/providers/keepa/deal-attributes.js +26 -0
- package/src/providers/keepa/runtime.js +212 -18
- package/src/providers/kingdee/executors.js +1 -1
- package/src/providers/kingdee/runtime.js +2 -2
- package/src/providers/kuaidi100/runtime.js +1 -1
- package/src/providers/linear/executors.d.ts +3 -0
- package/src/providers/linear/executors.js +14 -9
- package/src/providers/linear/trigger-on-issue-changed.d.ts +2 -0
- package/src/providers/linear/trigger-on-issue-changed.definition.d.ts +5 -0
- package/src/providers/linear/trigger-on-issue-changed.definition.js +43 -0
- package/src/providers/linear/trigger-on-issue-changed.js +215 -0
- package/src/providers/linear_mcp/actions.d.ts +47 -0
- package/src/providers/linear_mcp/actions.js +102 -0
- package/src/providers/linear_mcp/endpoints.d.ts +3 -0
- package/src/providers/linear_mcp/endpoints.js +3 -0
- package/src/providers/linear_mcp/executors.d.ts +3 -0
- package/src/providers/linear_mcp/executors.js +9 -0
- package/src/providers/linear_mcp/runtime-mcp.d.ts +15 -0
- package/src/providers/linear_mcp/runtime-mcp.js +238 -0
- package/src/providers/lingxing_mcp/runtime.js +1 -1
- package/src/providers/mcdonalds_cn_mcp/runtime.js +1 -1
- package/src/providers/metabase/mcp-runtime.js +1 -1
- package/src/providers/moneyforward_mcp/executors.d.ts +3 -0
- package/src/providers/moneyforward_mcp/executors.js +11 -0
- package/src/providers/moneyforward_mcp/manifest.d.ts +31 -0
- package/src/providers/moneyforward_mcp/manifest.js +204 -0
- package/src/providers/moneyforward_mcp/runtime.d.ts +18 -0
- package/src/providers/moneyforward_mcp/runtime.js +296 -0
- package/src/providers/notion/executors.d.ts +3 -0
- package/src/providers/notion/executors.js +41 -3
- package/src/providers/notion/trigger-on-database-page-event.d.ts +2 -0
- package/src/providers/notion/trigger-on-database-page-event.definition.d.ts +4 -0
- package/src/providers/notion/trigger-on-database-page-event.definition.js +63 -0
- package/src/providers/notion/trigger-on-database-page-event.js +293 -0
- package/src/providers/notion_mcp/endpoints.d.ts +3 -0
- package/src/providers/notion_mcp/endpoints.js +3 -0
- package/src/providers/notion_mcp/executors.d.ts +3 -0
- package/src/providers/notion_mcp/executors.js +176 -0
- package/src/providers/notion_mcp/mcp-response.d.ts +86 -0
- package/src/providers/notion_mcp/mcp-response.js +314 -0
- package/src/providers/odoo/executors.d.ts +3 -0
- package/src/providers/odoo/executors.js +32 -0
- package/src/providers/odoo/runtime.d.ts +16 -0
- package/src/providers/odoo/runtime.js +140 -0
- package/src/providers/one_drive/executors.d.ts +3 -0
- package/src/providers/one_drive/executors.js +2 -0
- package/src/providers/one_drive/trigger-on-item-changed.d.ts +2 -0
- package/src/providers/one_drive/trigger-on-item-changed.definition.d.ts +4 -0
- package/src/providers/one_drive/trigger-on-item-changed.definition.js +63 -0
- package/src/providers/one_drive/trigger-on-item-changed.js +214 -0
- package/src/providers/outlook/executors.d.ts +3 -0
- package/src/providers/outlook/executors.js +29 -6
- package/src/providers/outlook/microsoft-graph.js +17 -6
- package/src/providers/outlook/trigger-on-message-received.d.ts +2 -0
- package/src/providers/outlook/trigger-on-message-received.definition.d.ts +4 -0
- package/src/providers/outlook/trigger-on-message-received.definition.js +93 -0
- package/src/providers/outlook/trigger-on-message-received.js +226 -0
- package/src/providers/outlook_calendar/executors.js +30 -7
- package/src/providers/patsnap_mcp/executors.js +2 -2
- package/src/providers/postiz/executors.d.ts +4 -0
- package/src/providers/postiz/executors.js +83 -0
- package/src/providers/provider-loader.d.ts +5 -0
- package/src/providers/provider-loader.js +4 -0
- package/src/providers/provider-runtime.d.ts +15 -0
- package/src/providers/provider-runtime.js +57 -4
- package/src/providers/proworkflow/executors.d.ts +4 -0
- package/src/providers/proworkflow/executors.js +135 -0
- package/src/providers/registry.generated.js +14 -0
- package/src/providers/scrape_creators/catalog.js +1 -1
- package/src/providers/scrape_creators/runtime.js +1 -1
- package/src/providers/sellersprite_mcp/executors.js +2 -2
- package/src/providers/sellersprite_mcp/official-actions.js +3 -2
- package/src/providers/sentry/runtime.js +6 -7
- package/src/providers/shopify/executors.d.ts +3 -0
- package/src/providers/shopify/executors.js +2 -0
- package/src/providers/shopify/trigger-on-shop-event.d.ts +2 -0
- package/src/providers/shopify/trigger-on-shop-event.definition.d.ts +4 -0
- package/src/providers/shopify/trigger-on-shop-event.definition.js +214 -0
- package/src/providers/shopify/trigger-on-shop-event.js +165 -0
- package/src/providers/slack/actions.js +52 -3
- package/src/providers/slack/executors.d.ts +3 -0
- package/src/providers/slack/executors.js +2 -0
- package/src/providers/slack/runtime.js +58 -21
- package/src/providers/slack/trigger-on-message-posted.d.ts +2 -0
- package/src/providers/slack/trigger-on-message-posted.definition.d.ts +4 -0
- package/src/providers/slack/trigger-on-message-posted.definition.js +80 -0
- package/src/providers/slack/trigger-on-message-posted.js +176 -0
- package/src/providers/slickdeals/runtime.js +1 -1
- package/src/providers/sorftime_mcp/executors.js +2 -2
- package/src/providers/spotify/runtime.js +15 -4
- package/src/providers/stripe/executors.d.ts +3 -0
- package/src/providers/stripe/executors.js +2 -0
- package/src/providers/stripe/trigger-on-event.d.ts +2 -0
- package/src/providers/stripe/trigger-on-event.definition.d.ts +4 -0
- package/src/providers/stripe/trigger-on-event.definition.js +43 -0
- package/src/providers/stripe/trigger-on-event.js +212 -0
- package/src/providers/telegram/executors.d.ts +3 -0
- package/src/providers/telegram/executors.js +2 -0
- package/src/providers/telegram/trigger-on-update.d.ts +2 -0
- package/src/providers/telegram/trigger-on-update.definition.d.ts +5 -0
- package/src/providers/telegram/trigger-on-update.definition.js +78 -0
- package/src/providers/telegram/trigger-on-update.js +141 -0
- package/src/providers/tikhub/bounded-response.d.ts +1 -1
- package/src/providers/tikhub/bounded-response.js +8 -34
- package/src/providers/tikhub/endpoint-catalog.js +1 -1
- package/src/providers/tikhub/runtime.js +2 -2
- package/src/providers/tongdaxin/executors.js +79 -15
- package/src/providers/uspto/executors.js +1 -1
- package/src/providers/waffo/executors.js +1 -1
- package/src/providers/waffo/runtime.js +1 -1
- package/src/providers/wecom_mcp/runtime.js +1 -1
- package/src/providers/weixin_store/access-token.d.ts +2 -1
- package/src/providers/weixin_store/access-token.js +15 -4
- package/src/providers/weixin_store/executors.js +97 -12
- package/src/providers/wisburg/executors.d.ts +4 -0
- package/src/providers/wisburg/executors.js +13 -0
- package/src/providers/wisburg/runtime.d.ts +12 -0
- package/src/providers/wisburg/runtime.js +133 -0
- package/src/providers/woocommerce/executors.d.ts +3 -0
- package/src/providers/woocommerce/executors.js +2 -0
- package/src/providers/woocommerce/trigger-on-store-event.d.ts +2 -0
- package/src/providers/woocommerce/trigger-on-store-event.definition.d.ts +4 -0
- package/src/providers/woocommerce/trigger-on-store-event.definition.js +55 -0
- package/src/providers/woocommerce/trigger-on-store-event.js +179 -0
- package/src/providers/xydc_mcp/executors.js +2 -2
- package/src/providers/youtube/executors.js +1 -1
- package/src/providers/youtube/runtime.js +1 -1
- package/src/providers/zendesk/executors.d.ts +3 -0
- package/src/providers/zendesk/executors.js +2 -0
- package/src/providers/zendesk/trigger-on-event.d.ts +2 -0
- package/src/providers/zendesk/trigger-on-event.definition.d.ts +5 -0
- package/src/providers/zendesk/trigger-on-event.definition.js +101 -0
- package/src/providers/zendesk/trigger-on-event.js +188 -0
- package/src/providers/zerotier/executors.d.ts +9 -0
- package/src/providers/zerotier/executors.js +629 -0
- package/src/providers/zerotier/runtime.d.ts +54 -0
- package/src/providers/zerotier/runtime.js +207 -0
- package/src/saas/saas-cleanup-service.d.ts +26 -0
- package/src/saas/saas-cleanup-service.js +124 -0
- package/src/saas/saas-client.d.ts +86 -0
- package/src/saas/saas-client.js +369 -0
- package/src/saas/saas-execution-service.d.ts +15 -0
- package/src/saas/saas-execution-service.js +21 -0
- package/src/saas/saas-oauth-service.d.ts +25 -0
- package/src/saas/saas-oauth-service.js +197 -0
- package/src/saas/saas-project-service.d.ts +61 -0
- package/src/saas/saas-project-service.js +211 -0
- package/src/server/actions/action-idempotency.d.ts +1 -0
- package/src/server/actions/action-idempotency.js +1 -0
- package/src/server/actions/action-runner.d.ts +7 -0
- package/src/server/actions/action-runner.js +43 -7
- package/src/server/actions/run-log-summary.js +9 -0
- package/src/server/api/auth.d.ts +1 -0
- package/src/server/api/auth.js +13 -2
- package/src/server/api/cache-policy.js +4 -1
- package/src/server/api/connection-input.d.ts +7 -1
- package/src/server/api/connection-input.js +7 -1
- package/src/server/api/connection-routes.d.ts +3 -1
- package/src/server/api/connection-routes.js +21 -3
- package/src/server/api/http-utils.d.ts +4 -3
- package/src/server/api/oauth-completion-page.d.ts +124 -0
- package/src/server/api/oauth-completion-page.js +113 -18
- package/src/server/api/openapi.js +123 -15
- package/src/server/api/policy-input.js +6 -0
- package/src/server/api/runtime-api.d.ts +18 -3
- package/src/server/api/runtime-api.js +36 -5
- package/src/server/api/saas-completion-page.d.ts +2 -0
- package/src/server/api/saas-completion-page.js +103 -0
- package/src/server/connect-app.d.ts +5 -0
- package/src/server/connect-app.js +50 -0
- package/src/server/connect-server.d.ts +12 -0
- package/src/server/connect-server.js +157 -15
- package/src/server/connector-runtime.d.ts +3 -1
- package/src/server/connector-runtime.js +5 -2
- package/src/server/files/transit-files.js +16 -7
- package/src/server/proxy/proxy-runner.d.ts +5 -1
- package/src/server/proxy/proxy-runner.js +72 -26
- package/src/server/storage/connection-request-store.d.ts +41 -1
- package/src/server/storage/connection-request-store.js +245 -20
- package/src/server/storage/connection-store.d.ts +16 -0
- package/src/server/storage/connection-store.js +119 -0
- package/src/server/storage/node-runtime-database.js +3 -3
- package/src/server/storage/{postgres-migrations.d.ts → postgres/migrations.d.ts} +2 -2
- package/src/server/storage/{postgres-migrations.js → postgres/migrations.js} +1 -1
- package/src/server/storage/postgres/runtime-store.d.ts +43 -0
- package/src/server/storage/{postgres-runtime-store.js → postgres/runtime-store.js} +59 -94
- package/src/server/storage/runtime-database.d.ts +4 -0
- package/src/server/storage/runtime-sql.d.ts +1 -1
- package/src/server/storage/runtime-sql.js +2 -1
- package/src/server/storage/runtime-store.d.ts +1 -0
- package/src/server/storage/runtime-token-service.d.ts +2 -0
- package/src/server/storage/runtime-token-service.js +3 -0
- package/src/server/storage/saas-project-store.d.ts +77 -0
- package/src/server/storage/saas-project-store.js +273 -0
- package/src/server/storage/{sqlite-runtime-store.d.ts → sqlite/runtime-store.d.ts} +21 -25
- package/src/server/storage/{sqlite-runtime-store.js → sqlite/runtime-store.js} +100 -115
- package/src/server/storage/trigger-store.d.ts +16 -0
- package/src/server/storage/trigger-store.js +96 -0
- package/src/triggers/common/config.d.ts +2 -0
- package/src/triggers/common/config.js +17 -0
- package/src/triggers/common/configOptions.d.ts +13 -0
- package/src/triggers/common/configOptions.js +1 -0
- package/src/triggers/common/encoding.d.ts +3 -0
- package/src/triggers/common/encoding.js +19 -0
- package/src/triggers/common/integration.d.ts +115 -0
- package/src/triggers/common/integration.js +31 -0
- package/src/triggers/common/json.d.ts +6 -0
- package/src/triggers/common/json.js +91 -0
- package/src/triggers/common/poll.d.ts +41 -0
- package/src/triggers/common/poll.js +15 -0
- package/src/triggers/common/proxy.d.ts +14 -0
- package/src/triggers/common/proxy.js +1 -0
- package/src/triggers/common/types.d.ts +42 -0
- package/src/triggers/common/types.js +1 -0
- package/src/triggers/maintenance.d.ts +40 -0
- package/src/triggers/maintenance.js +120 -0
- package/src/triggers/metadata.d.ts +8 -0
- package/src/triggers/metadata.js +1 -0
- package/src/triggers/request.d.ts +33 -0
- package/src/triggers/request.js +52 -0
- package/src/triggers/resources.d.ts +12 -0
- package/src/triggers/resources.js +121 -0
- package/src/triggers/signature.d.ts +4 -0
- package/src/triggers/signature.js +48 -0
- package/src/triggers/store.d.ts +29 -0
- package/src/triggers/store.js +1 -0
- package/src/triggers/subscriptions.d.ts +22 -0
- package/src/triggers/subscriptions.js +220 -0
- package/src/triggers/trigger-runner.d.ts +34 -0
- package/src/triggers/trigger-runner.js +169 -0
- package/src/providers/sentry/scopes.d.ts +0 -1
- package/src/providers/sentry/scopes.js +0 -7
- package/src/server/storage/postgres-runtime-store.d.ts +0 -39
- /package/src/providers/{cloudflare-current-user.d.ts → cloudflare_dns/runtime-user.d.ts} +0 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
create table instance_identity (
|
|
2
|
+
id integer primary key check (id = 1),
|
|
3
|
+
instance_id text not null unique
|
|
4
|
+
);
|
|
5
|
+
create table managed_project (
|
|
6
|
+
id integer primary key check (id = 1),
|
|
7
|
+
managed_project_id text not null unique,
|
|
8
|
+
project_id text not null,
|
|
9
|
+
base_url text not null,
|
|
10
|
+
value text not null
|
|
11
|
+
);
|
|
12
|
+
create table oauth_sources (
|
|
13
|
+
service text primary key,
|
|
14
|
+
managed_project_id text not null,
|
|
15
|
+
provider_config_id text not null
|
|
16
|
+
);
|
|
17
|
+
alter table connections add column source text not null default 'local' check (source in ('local', 'saas'));
|
|
18
|
+
alter table connections add column managed_project_id text;
|
|
19
|
+
alter table connections add column provider_config_id text;
|
|
20
|
+
alter table connections add column external_user_id text;
|
|
21
|
+
alter table connections add column remote_account_id text;
|
|
22
|
+
alter table connections add column local_request_id text;
|
|
23
|
+
alter table connection_requests add column kind text not null default 'local' check (kind in ('local', 'saas'));
|
|
24
|
+
alter table connection_requests add column managed_project_id text check (kind = 'local' or managed_project_id is not null);
|
|
25
|
+
alter table connection_requests add column provider_config_id text;
|
|
26
|
+
alter table connection_requests add column external_user_id text;
|
|
27
|
+
alter table connection_requests add column remote_request_id text;
|
|
28
|
+
alter table connection_requests add column remote_account_id text;
|
|
29
|
+
alter table connection_requests add column lease_id text;
|
|
30
|
+
alter table connection_requests add column lease_until bigint;
|
|
31
|
+
alter table connection_requests add column next_poll_at bigint not null default 0;
|
|
32
|
+
create table saas_cleanup (
|
|
33
|
+
id text primary key,
|
|
34
|
+
managed_project_id text not null,
|
|
35
|
+
provider_config_id text not null,
|
|
36
|
+
external_user_id text not null,
|
|
37
|
+
remote_request_id text,
|
|
38
|
+
remote_account_id text,
|
|
39
|
+
status text not null default 'pending' check (status in ('pending', 'manual')),
|
|
40
|
+
attempts integer not null default 0,
|
|
41
|
+
next_attempt_at bigint not null default 0,
|
|
42
|
+
lease_id text,
|
|
43
|
+
lease_until bigint,
|
|
44
|
+
created_at bigint not null,
|
|
45
|
+
error_code text
|
|
46
|
+
);
|
|
47
|
+
create index saas_cleanup_due on saas_cleanup (status, next_attempt_at, lease_until);
|
|
48
|
+
create index connections_managed_project on connections (managed_project_id);
|
|
49
|
+
create index connection_requests_managed_project on connection_requests (managed_project_id);
|
|
50
|
+
|
|
51
|
+
alter table connection_requests add column saas_phase text check (saas_phase in ('creating', 'pending', 'candidate'));
|
|
52
|
+
alter table connection_requests add column candidate_value text;
|
|
53
|
+
|
|
54
|
+
alter table connection_requests add column return_uri text;
|
|
55
|
+
alter table connection_requests add column poll_attempts integer not null default 0;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
alter table managed_project add column cleanup_paused integer not null default 0;
|
|
2
|
+
alter table saas_cleanup add column service text;
|
|
3
|
+
alter table saas_cleanup add column request_expires_at text;
|
|
4
|
+
|
|
5
|
+
update saas_cleanup set
|
|
6
|
+
service = (select service from connection_requests where 'request:' || id = saas_cleanup.id),
|
|
7
|
+
request_expires_at = (select expires_at from connection_requests where 'request:' || id = saas_cleanup.id)
|
|
8
|
+
where remote_request_id is not null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
alter table runtime_tokens add column allowed_triggers text not null default '[]';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
create table trigger_subscriptions (
|
|
2
|
+
id text primary key,
|
|
3
|
+
mode text not null,
|
|
4
|
+
token_id text not null,
|
|
5
|
+
connection_id text not null,
|
|
6
|
+
trigger_id text not null,
|
|
7
|
+
status text not null,
|
|
8
|
+
reconcile_at bigint not null,
|
|
9
|
+
maintenance_at bigint not null default 0,
|
|
10
|
+
lease_owner text,
|
|
11
|
+
lease_until bigint,
|
|
12
|
+
value text not null
|
|
13
|
+
);
|
|
14
|
+
create index trigger_subscriptions_connection on trigger_subscriptions (connection_id, status);
|
|
15
|
+
create index trigger_subscriptions_maintenance on trigger_subscriptions (status, maintenance_at);
|
|
16
|
+
|
|
17
|
+
alter table connections add column provider_account_id text;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
create table instance_identity (
|
|
2
|
+
id integer primary key check (id = 1),
|
|
3
|
+
instance_id text not null unique
|
|
4
|
+
);
|
|
5
|
+
create table managed_project (
|
|
6
|
+
id integer primary key check (id = 1),
|
|
7
|
+
managed_project_id text not null unique,
|
|
8
|
+
project_id text not null,
|
|
9
|
+
base_url text not null,
|
|
10
|
+
value text not null
|
|
11
|
+
);
|
|
12
|
+
create table oauth_sources (
|
|
13
|
+
service text primary key,
|
|
14
|
+
managed_project_id text not null,
|
|
15
|
+
provider_config_id text not null
|
|
16
|
+
);
|
|
17
|
+
alter table connections add column source text not null default 'local' check (source in ('local', 'saas'));
|
|
18
|
+
alter table connections add column managed_project_id text;
|
|
19
|
+
alter table connections add column provider_config_id text;
|
|
20
|
+
alter table connections add column external_user_id text;
|
|
21
|
+
alter table connections add column remote_account_id text;
|
|
22
|
+
alter table connections add column local_request_id text;
|
|
23
|
+
alter table connection_requests add column kind text not null default 'local' check (kind in ('local', 'saas'));
|
|
24
|
+
alter table connection_requests add column managed_project_id text check (kind = 'local' or managed_project_id is not null);
|
|
25
|
+
alter table connection_requests add column provider_config_id text;
|
|
26
|
+
alter table connection_requests add column external_user_id text;
|
|
27
|
+
alter table connection_requests add column remote_request_id text;
|
|
28
|
+
alter table connection_requests add column remote_account_id text;
|
|
29
|
+
alter table connection_requests add column lease_id text;
|
|
30
|
+
alter table connection_requests add column lease_until bigint;
|
|
31
|
+
alter table connection_requests add column next_poll_at bigint not null default 0;
|
|
32
|
+
create table saas_cleanup (
|
|
33
|
+
id text primary key,
|
|
34
|
+
managed_project_id text not null,
|
|
35
|
+
provider_config_id text not null,
|
|
36
|
+
external_user_id text not null,
|
|
37
|
+
remote_request_id text,
|
|
38
|
+
remote_account_id text,
|
|
39
|
+
status text not null default 'pending' check (status in ('pending', 'manual')),
|
|
40
|
+
attempts integer not null default 0,
|
|
41
|
+
next_attempt_at bigint not null default 0,
|
|
42
|
+
lease_id text,
|
|
43
|
+
lease_until bigint,
|
|
44
|
+
created_at bigint not null,
|
|
45
|
+
error_code text
|
|
46
|
+
);
|
|
47
|
+
create index saas_cleanup_due on saas_cleanup (status, next_attempt_at, lease_until);
|
|
48
|
+
create index connections_managed_project on connections (managed_project_id);
|
|
49
|
+
create index connection_requests_managed_project on connection_requests (managed_project_id);
|
|
50
|
+
|
|
51
|
+
alter table connection_requests add column saas_phase text check (saas_phase in ('creating', 'pending', 'candidate'));
|
|
52
|
+
alter table connection_requests add column candidate_value text;
|
|
53
|
+
|
|
54
|
+
alter table connection_requests add column return_uri text;
|
|
55
|
+
alter table connection_requests add column poll_attempts integer not null default 0;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
alter table managed_project add column cleanup_paused integer not null default 0;
|
|
2
|
+
alter table saas_cleanup add column service text;
|
|
3
|
+
alter table saas_cleanup add column request_expires_at text;
|
|
4
|
+
|
|
5
|
+
update saas_cleanup set
|
|
6
|
+
service = (select service from connection_requests where 'request:' || id = saas_cleanup.id),
|
|
7
|
+
request_expires_at = (select expires_at from connection_requests where 'request:' || id = saas_cleanup.id)
|
|
8
|
+
where remote_request_id is not null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
alter table runtime_tokens add column allowed_triggers text not null default '[]';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
create table trigger_subscriptions (
|
|
2
|
+
id text primary key,
|
|
3
|
+
mode text not null,
|
|
4
|
+
token_id text not null,
|
|
5
|
+
connection_id text not null,
|
|
6
|
+
trigger_id text not null,
|
|
7
|
+
status text not null,
|
|
8
|
+
reconcile_at bigint not null,
|
|
9
|
+
maintenance_at bigint not null default 0,
|
|
10
|
+
lease_owner text,
|
|
11
|
+
lease_until bigint,
|
|
12
|
+
value text not null
|
|
13
|
+
);
|
|
14
|
+
create index trigger_subscriptions_connection on trigger_subscriptions (connection_id, status);
|
|
15
|
+
create index trigger_subscriptions_maintenance on trigger_subscriptions (status, maintenance_at);
|
|
16
|
+
|
|
17
|
+
alter table connections add column provider_account_id text;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oomol-lab/open-connector",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.0",
|
|
4
4
|
"description": "Embeddable Open Connector runtime for Node.js and Bun.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"pino": "^10.3.1",
|
|
42
42
|
"rss-parser": "^3.13.0",
|
|
43
43
|
"yaml": "^2.9.0",
|
|
44
|
-
"zod": "^4.
|
|
44
|
+
"zod": "^4.6.5"
|
|
45
45
|
},
|
|
46
46
|
"engines": {
|
|
47
47
|
"node": ">=22.18.0"
|
|
@@ -22,6 +22,7 @@ export interface ConnectionSummary {
|
|
|
22
22
|
id: string;
|
|
23
23
|
pricing: MarketplacePricing;
|
|
24
24
|
};
|
|
25
|
+
saas?: StoredSaasConnection["reference"];
|
|
25
26
|
}
|
|
26
27
|
export interface ManagedConnectionSummary extends ConnectionSummary {
|
|
27
28
|
status: "active" | "reauth_required";
|
|
@@ -46,7 +47,28 @@ export interface ConnectionServiceOptions {
|
|
|
46
47
|
logger?: RuntimeLogger;
|
|
47
48
|
marketplace?: MarketplaceService;
|
|
48
49
|
}
|
|
49
|
-
export interface
|
|
50
|
+
export interface SaasConnectionReference {
|
|
51
|
+
managedProjectId: string;
|
|
52
|
+
providerConfigId: string;
|
|
53
|
+
externalUserId: string;
|
|
54
|
+
connectedAccountId: string;
|
|
55
|
+
localRequestId: string;
|
|
56
|
+
}
|
|
57
|
+
export interface StoredSaasConnection {
|
|
58
|
+
source: "saas";
|
|
59
|
+
credential?: never;
|
|
60
|
+
id: string;
|
|
61
|
+
revision: string;
|
|
62
|
+
service: string;
|
|
63
|
+
connectionName: string;
|
|
64
|
+
reference: SaasConnectionReference;
|
|
65
|
+
profile: CredentialProfile;
|
|
66
|
+
status: "active" | "reauth_required";
|
|
67
|
+
comment: string | null;
|
|
68
|
+
}
|
|
69
|
+
export type StoredConnection = StoredLocalConnection | StoredSaasConnection;
|
|
70
|
+
export interface StoredLocalConnection {
|
|
71
|
+
source?: "local";
|
|
50
72
|
id: string;
|
|
51
73
|
revision: string;
|
|
52
74
|
service: string;
|
|
@@ -58,18 +80,28 @@ export interface DisconnectedConnectionSummary {
|
|
|
58
80
|
connectionName: string;
|
|
59
81
|
configured: false;
|
|
60
82
|
}
|
|
61
|
-
export
|
|
83
|
+
export type ExecutionConnection = LocalExecutionConnection | MarketplaceExecutionConnection | SaasExecutionConnection;
|
|
84
|
+
interface LocalExecutionConnection {
|
|
85
|
+
kind: "local";
|
|
62
86
|
summary?: ConnectionSummary;
|
|
63
|
-
marketplace?: boolean;
|
|
64
87
|
getCredential(service: string): Promise<ResolvedCredential | undefined>;
|
|
65
88
|
}
|
|
89
|
+
interface MarketplaceExecutionConnection {
|
|
90
|
+
kind: "marketplace";
|
|
91
|
+
summary: ConnectionSummary;
|
|
92
|
+
}
|
|
93
|
+
interface SaasExecutionConnection {
|
|
94
|
+
kind: "saas";
|
|
95
|
+
summary: ManagedConnectionSummary;
|
|
96
|
+
reference: SaasConnectionReference;
|
|
97
|
+
}
|
|
66
98
|
/**
|
|
67
99
|
* Storage contract for local provider connections.
|
|
68
100
|
*/
|
|
69
101
|
export interface IConnectionStore {
|
|
70
102
|
get(service: string, connectionName: string): Promise<StoredConnection | undefined>;
|
|
71
|
-
set(service: string, connectionName: string, credential: ResolvedCredential): Promise<
|
|
72
|
-
updateCredential(input:
|
|
103
|
+
set(service: string, connectionName: string, credential: ResolvedCredential): Promise<StoredLocalConnection>;
|
|
104
|
+
updateCredential(input: StoredLocalConnection, refresh?: boolean): Promise<boolean>;
|
|
73
105
|
delete(service: string, connectionName: string): Promise<void>;
|
|
74
106
|
list(): Promise<StoredConnection[]>;
|
|
75
107
|
}
|
|
@@ -102,8 +134,8 @@ export declare class ConnectionService {
|
|
|
102
134
|
/** Read which providers the operator enabled in the Marketplace, keyed by service id. */
|
|
103
135
|
private loadProviderPreferences;
|
|
104
136
|
listAuthenticatedServices(services: string[]): Promise<string[]>;
|
|
105
|
-
getConnectionSummary(service: string, connectionName?: string): Promise<ConnectionSummary | undefined>;
|
|
106
|
-
resolveForExecution(service: string, connectionName?: string): Promise<ExecutionConnection>;
|
|
137
|
+
getConnectionSummary(service: string, connectionName?: string, connectionId?: string): Promise<ConnectionSummary | undefined>;
|
|
138
|
+
resolveForExecution(service: string, connectionName?: string, connectionId?: string): Promise<ExecutionConnection>;
|
|
107
139
|
getCredential(service: string, connectionName?: string): Promise<ResolvedCredential | undefined>;
|
|
108
140
|
/**
|
|
109
141
|
* Return a per-request credential scope for one connection name.
|
|
@@ -122,6 +154,7 @@ export declare class ConnectionService {
|
|
|
122
154
|
authType: "oauth2";
|
|
123
155
|
}>, connectionNameInput?: string, signal?: AbortSignal): Promise<ConnectionSummary>;
|
|
124
156
|
prepareOAuthCredential(service: string, credential: OAuthCredential, signal?: AbortSignal): Promise<OAuthCredential>;
|
|
157
|
+
private selectStoredConnection;
|
|
125
158
|
getStoredConnection(id: string): Promise<StoredConnection>;
|
|
126
159
|
listManagedConnections(): Promise<ManagedConnectionSummary[]>;
|
|
127
160
|
getManagedConnection(id: string): Promise<ManagedConnectionSummary>;
|
|
@@ -30,11 +30,7 @@ export class ConnectionService {
|
|
|
30
30
|
const configuredByService = new Map();
|
|
31
31
|
for (const connection of configured) {
|
|
32
32
|
const serviceConnections = configuredByService.get(connection.service) ?? [];
|
|
33
|
-
serviceConnections.push(
|
|
34
|
-
id: connection.id,
|
|
35
|
-
connectionName: connection.connectionName,
|
|
36
|
-
credential: connection.credential,
|
|
37
|
-
});
|
|
33
|
+
serviceConnections.push(connection);
|
|
38
34
|
configuredByService.set(connection.service, serviceConnections);
|
|
39
35
|
}
|
|
40
36
|
const preferences = await this.loadProviderPreferences();
|
|
@@ -52,7 +48,9 @@ export class ConnectionService {
|
|
|
52
48
|
*/
|
|
53
49
|
summarizeProviderConnections(provider, connections, preferences) {
|
|
54
50
|
if (connections.length > 0) {
|
|
55
|
-
const stored = connections.map((connection) =>
|
|
51
|
+
const stored = connections.map((connection) => connection.source === "saas"
|
|
52
|
+
? this.createManagedConnectionSummary(connection)
|
|
53
|
+
: this.createConfiguredConnectionSummary(provider, connection.id, connection.connectionName, connection.credential));
|
|
56
54
|
const marketplace = this.createMarketplaceConnectionSummary(provider, preferences);
|
|
57
55
|
return marketplace ? [...stored, marketplace] : stored;
|
|
58
56
|
}
|
|
@@ -71,7 +69,7 @@ export class ConnectionService {
|
|
|
71
69
|
async listAuthenticatedServices(services) {
|
|
72
70
|
const configured = await this.store.list();
|
|
73
71
|
const authenticated = new Set(configured
|
|
74
|
-
.filter((connection) => connection.credential.authType !== "no_auth")
|
|
72
|
+
.filter((connection) => connection.source === "saas" || connection.credential.authType !== "no_auth")
|
|
75
73
|
.map((connection) => connection.service));
|
|
76
74
|
const preferences = await this.loadProviderPreferences();
|
|
77
75
|
for (const service of this.marketplace?.getSnapshot()?.actionsByService.keys() ?? []) {
|
|
@@ -80,32 +78,40 @@ export class ConnectionService {
|
|
|
80
78
|
}
|
|
81
79
|
return services.filter((service) => authenticated.has(service));
|
|
82
80
|
}
|
|
83
|
-
async getConnectionSummary(service, connectionName) {
|
|
81
|
+
async getConnectionSummary(service, connectionName, connectionId) {
|
|
84
82
|
const provider = this.getProvider(service);
|
|
85
|
-
const
|
|
86
|
-
const
|
|
87
|
-
const marketplace =
|
|
83
|
+
const stored = await this.selectStoredConnection(service, connectionName, connectionId);
|
|
84
|
+
const name = stored?.connectionName ?? normalizeConnectionName(connectionName);
|
|
85
|
+
const marketplace = connectionId
|
|
86
|
+
? undefined
|
|
87
|
+
: await this.resolveMarketplaceSummary(provider, connectionName, Boolean(stored));
|
|
88
88
|
if (marketplace)
|
|
89
89
|
return marketplace;
|
|
90
90
|
if (!stored && connectionName && !this.supportsAuth(provider, "no_auth")) {
|
|
91
91
|
throw new ConnectionError("connection_not_found", `${service} connection not found: ${name}.`);
|
|
92
92
|
}
|
|
93
|
+
if (stored?.source === "saas")
|
|
94
|
+
return this.createManagedConnectionSummary(stored);
|
|
93
95
|
return stored
|
|
94
96
|
? this.createConfiguredConnectionSummary(provider, stored.id, name, stored.credential)
|
|
95
97
|
: this.supportsAuth(provider, "no_auth")
|
|
96
98
|
? this.createNoAuthConnectionSummary(provider, name)
|
|
97
99
|
: undefined;
|
|
98
100
|
}
|
|
99
|
-
async resolveForExecution(service, connectionName) {
|
|
101
|
+
async resolveForExecution(service, connectionName, connectionId) {
|
|
100
102
|
const provider = this.getProvider(service);
|
|
101
|
-
const
|
|
102
|
-
const
|
|
103
|
-
const marketplace =
|
|
103
|
+
const stored = await this.selectStoredConnection(service, connectionName, connectionId);
|
|
104
|
+
const name = stored?.connectionName ?? normalizeConnectionName(connectionName);
|
|
105
|
+
const marketplace = connectionId
|
|
106
|
+
? undefined
|
|
107
|
+
: await this.resolveMarketplaceSummary(provider, connectionName, Boolean(stored));
|
|
104
108
|
if (marketplace)
|
|
105
|
-
return {
|
|
109
|
+
return { kind: "marketplace", summary: marketplace };
|
|
106
110
|
if (!stored && connectionName && !this.supportsAuth(provider, "no_auth")) {
|
|
107
111
|
throw new ConnectionError("connection_not_found", `${service} connection not found: ${name}.`);
|
|
108
112
|
}
|
|
113
|
+
if (stored?.source === "saas")
|
|
114
|
+
return { kind: "saas", summary: this.createManagedConnectionSummary(stored), reference: stored.reference };
|
|
109
115
|
let credential = stored?.credential;
|
|
110
116
|
if (stored?.credential.authType === "oauth2") {
|
|
111
117
|
credential = await this.resolveOAuthCredential(stored, stored.credential);
|
|
@@ -117,6 +123,7 @@ export class ConnectionService {
|
|
|
117
123
|
? this.createNoAuthConnectionSummary(provider, name)
|
|
118
124
|
: undefined;
|
|
119
125
|
return {
|
|
126
|
+
kind: "local",
|
|
120
127
|
summary,
|
|
121
128
|
getCredential: async (requestedService) => (requestedService === service ? credential : undefined),
|
|
122
129
|
};
|
|
@@ -125,6 +132,8 @@ export class ConnectionService {
|
|
|
125
132
|
const provider = this.getProvider(service);
|
|
126
133
|
const name = normalizeConnectionName(connectionName);
|
|
127
134
|
const stored = await this.store.get(service, name);
|
|
135
|
+
if (stored?.source === "saas")
|
|
136
|
+
throw new ConnectionError("unsupported_auth_type", "SaaS credentials are not available locally.");
|
|
128
137
|
if (stored) {
|
|
129
138
|
return stored.credential.authType === "oauth2"
|
|
130
139
|
? await this.resolveOAuthCredential(stored, stored.credential)
|
|
@@ -220,6 +229,15 @@ export class ConnectionService {
|
|
|
220
229
|
...this.mergeCredentialRuntimeData(provider, "oauth2", credential, validation),
|
|
221
230
|
};
|
|
222
231
|
}
|
|
232
|
+
async selectStoredConnection(service, name, id) {
|
|
233
|
+
if (!id)
|
|
234
|
+
return this.store.get(service, normalizeConnectionName(name));
|
|
235
|
+
const connection = await this.getStoredConnection(id);
|
|
236
|
+
if (connection.service !== service ||
|
|
237
|
+
(name !== undefined && connection.connectionName !== normalizeConnectionName(name)))
|
|
238
|
+
throw new ConnectionError("connection_not_found", "The selected connection does not match this provider or alias.");
|
|
239
|
+
return connection;
|
|
240
|
+
}
|
|
223
241
|
async getStoredConnection(id) {
|
|
224
242
|
const connection = (await this.store.list()).find((item) => item.id === id);
|
|
225
243
|
if (!connection)
|
|
@@ -233,6 +251,20 @@ export class ConnectionService {
|
|
|
233
251
|
return this.createManagedConnectionSummary(await this.getStoredConnection(id));
|
|
234
252
|
}
|
|
235
253
|
createManagedConnectionSummary(stored) {
|
|
254
|
+
if (stored.source === "saas")
|
|
255
|
+
return {
|
|
256
|
+
id: stored.id,
|
|
257
|
+
service: stored.service,
|
|
258
|
+
connectionName: stored.connectionName,
|
|
259
|
+
authType: "oauth2",
|
|
260
|
+
configured: true,
|
|
261
|
+
virtual: false,
|
|
262
|
+
default: stored.connectionName === defaultConnectionName,
|
|
263
|
+
profile: stored.profile,
|
|
264
|
+
status: stored.status,
|
|
265
|
+
comment: stored.comment,
|
|
266
|
+
saas: stored.reference,
|
|
267
|
+
};
|
|
236
268
|
const credential = stored.credential;
|
|
237
269
|
return {
|
|
238
270
|
status: credential.authType === "oauth2" && !credential.refreshToken && isOAuthCredentialExpired(credential)
|
|
@@ -246,6 +278,8 @@ export class ConnectionService {
|
|
|
246
278
|
}
|
|
247
279
|
async saveCredential(provider, credential, input) {
|
|
248
280
|
const expected = input.expectedConnection;
|
|
281
|
+
if (expected?.source === "saas")
|
|
282
|
+
throw new ConnectionError("unsupported_auth_type", "Use the original source when reconnecting a SaaS connection.");
|
|
249
283
|
const previousComment = expected?.credential.authType !== "no_auth" ? expected?.credential.metadata.connectionComment : undefined;
|
|
250
284
|
if (input.comment !== undefined || previousComment !== undefined) {
|
|
251
285
|
credential.metadata.connectionComment = input.comment === undefined ? previousComment : input.comment;
|
|
@@ -432,7 +466,7 @@ export class ConnectionService {
|
|
|
432
466
|
service,
|
|
433
467
|
connectionName,
|
|
434
468
|
credential: nextCredential,
|
|
435
|
-
});
|
|
469
|
+
}, true);
|
|
436
470
|
if (!updated) {
|
|
437
471
|
throw new ConnectionError("connection_not_found", `${service} connection changed while its OAuth credential was refreshing. Retry the action.`);
|
|
438
472
|
}
|
|
@@ -460,7 +494,12 @@ export class ConnectionService {
|
|
|
460
494
|
buildCredentialRuntimeData(provider, authType, credentialFields, credentialValues, validation) {
|
|
461
495
|
return {
|
|
462
496
|
profile: this.createCredentialProfile(provider, authType, credentialFields, credentialValues, validation),
|
|
463
|
-
metadata:
|
|
497
|
+
metadata: {
|
|
498
|
+
...validation.metadata,
|
|
499
|
+
providerAccountVerified: Boolean(validation.profile?.accountId ??
|
|
500
|
+
readLegacyString(validation.metadata, "providerAccountId") ??
|
|
501
|
+
readLegacyString(validation.metadata, "accountId")),
|
|
502
|
+
},
|
|
464
503
|
};
|
|
465
504
|
}
|
|
466
505
|
mergeCredentialRuntimeData(provider, authType, credential, validation) {
|
|
@@ -474,6 +513,9 @@ export class ConnectionService {
|
|
|
474
513
|
...(validation.metadata ?? {}),
|
|
475
514
|
// Provider validation cannot replace or invent completed consent provenance.
|
|
476
515
|
oauthAuthorizationId: credential.metadata.oauthAuthorizationId,
|
|
516
|
+
providerAccountVerified: Boolean(validation.profile?.accountId ??
|
|
517
|
+
readLegacyString(validation.metadata, "providerAccountId") ??
|
|
518
|
+
readLegacyString(validation.metadata, "accountId")) || credential.metadata.providerAccountVerified === true,
|
|
477
519
|
},
|
|
478
520
|
};
|
|
479
521
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ActionDefinition } from "./types.ts";
|
|
2
2
|
export type PolicySource = "deployment" | "runtime" | "token";
|
|
3
|
-
export type PolicyErrorCode = "action_not_allowed" | "action_blocked" | "proxy_not_allowed" | "proxy_blocked" | "connection_not_allowed";
|
|
3
|
+
export type PolicyErrorCode = "action_not_allowed" | "action_blocked" | "proxy_not_allowed" | "proxy_blocked" | "connection_not_allowed" | "trigger_not_allowed" | "trigger_blocked";
|
|
4
4
|
export interface PolicyCheck {
|
|
5
5
|
source: PolicySource;
|
|
6
6
|
outcome: "allow_match" | "block_match" | "allow_miss";
|
|
@@ -20,12 +20,15 @@ export interface PolicyRules {
|
|
|
20
20
|
blockedActions: string[];
|
|
21
21
|
allowedProxies: string[];
|
|
22
22
|
blockedProxies: string[];
|
|
23
|
+
allowedTriggers?: string[];
|
|
24
|
+
blockedTriggers?: string[];
|
|
23
25
|
}
|
|
24
26
|
export interface TokenPolicy {
|
|
25
27
|
allowedActions: string[];
|
|
26
28
|
blockedActions: string[];
|
|
27
29
|
allowedProxies: string[];
|
|
28
30
|
allowedConnections?: string[];
|
|
31
|
+
allowedTriggers?: string[];
|
|
29
32
|
}
|
|
30
33
|
export interface RuntimePolicyState {
|
|
31
34
|
deployment: PolicyRules;
|
|
@@ -37,6 +40,8 @@ export interface ActionPolicyConfig {
|
|
|
37
40
|
blockedActions?: string[];
|
|
38
41
|
allowedProxies?: string[];
|
|
39
42
|
blockedProxies?: string[];
|
|
43
|
+
allowedTriggers?: string[];
|
|
44
|
+
blockedTriggers?: string[];
|
|
40
45
|
}
|
|
41
46
|
/**
|
|
42
47
|
* Immutable policy view shared by every policy consumer in one request.
|
|
@@ -46,10 +51,12 @@ export declare class ActionPolicySnapshot {
|
|
|
46
51
|
private readonly layers;
|
|
47
52
|
private readonly proxyLayers;
|
|
48
53
|
private readonly tokenProxyRules?;
|
|
54
|
+
private readonly tokenTriggerRules?;
|
|
49
55
|
private readonly allowedConnections;
|
|
50
56
|
constructor(deployment: PolicyRules, runtime: PolicyRules, token?: TokenPolicy, updatedAt?: string);
|
|
51
57
|
evaluate(action: ActionDefinition): ActionPolicyDecision;
|
|
52
58
|
evaluateProxy(service: string): ActionPolicyDecision;
|
|
59
|
+
evaluateTrigger(id: string): ActionPolicyDecision;
|
|
53
60
|
evaluateConnection(connectionId?: string): ActionPolicyDecision;
|
|
54
61
|
}
|
|
55
62
|
/**
|
|
@@ -6,6 +6,7 @@ export class ActionPolicySnapshot {
|
|
|
6
6
|
layers;
|
|
7
7
|
proxyLayers;
|
|
8
8
|
tokenProxyRules;
|
|
9
|
+
tokenTriggerRules;
|
|
9
10
|
allowedConnections;
|
|
10
11
|
constructor(deployment, runtime, token, updatedAt) {
|
|
11
12
|
const deploymentRules = immutablePolicyRules(deployment);
|
|
@@ -24,6 +25,7 @@ export class ActionPolicySnapshot {
|
|
|
24
25
|
const tokenLayer = compileLayer("token", tokenRules);
|
|
25
26
|
this.layers.push(tokenLayer);
|
|
26
27
|
this.tokenProxyRules = tokenLayer.allowedProxies;
|
|
28
|
+
this.tokenTriggerRules = (token.allowedTriggers ?? []).map(compileActionRule);
|
|
27
29
|
}
|
|
28
30
|
}
|
|
29
31
|
evaluate(action) {
|
|
@@ -98,6 +100,45 @@ export class ActionPolicySnapshot {
|
|
|
98
100
|
}
|
|
99
101
|
return { allowed: true, checks };
|
|
100
102
|
}
|
|
103
|
+
evaluateTrigger(id) {
|
|
104
|
+
const checks = [];
|
|
105
|
+
for (const layer of this.proxyLayers) {
|
|
106
|
+
const blocked = layer.blockedTriggers.find((rule) => rule.matches(id));
|
|
107
|
+
if (blocked)
|
|
108
|
+
return {
|
|
109
|
+
allowed: false,
|
|
110
|
+
code: "trigger_blocked",
|
|
111
|
+
message: `${id} is blocked by the Trigger policy.`,
|
|
112
|
+
checks: [{ source: layer.source, outcome: "block_match", rule: blocked.pattern }],
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
for (const layer of this.proxyLayers) {
|
|
116
|
+
const allowed = layer.allowedTriggers;
|
|
117
|
+
if (allowed.length === 0)
|
|
118
|
+
continue;
|
|
119
|
+
const match = allowed.find((rule) => rule.matches(id));
|
|
120
|
+
if (!match)
|
|
121
|
+
return {
|
|
122
|
+
allowed: false,
|
|
123
|
+
code: "trigger_not_allowed",
|
|
124
|
+
message: `${id} is not included in the Trigger allowlist.`,
|
|
125
|
+
checks: [...checks, { source: layer.source, outcome: "allow_miss" }],
|
|
126
|
+
};
|
|
127
|
+
checks.push({ source: layer.source, outcome: "allow_match", rule: match.pattern });
|
|
128
|
+
}
|
|
129
|
+
if (this.tokenTriggerRules) {
|
|
130
|
+
const match = this.tokenTriggerRules.find((rule) => rule.matches(id));
|
|
131
|
+
if (!match)
|
|
132
|
+
return {
|
|
133
|
+
allowed: false,
|
|
134
|
+
code: "trigger_not_allowed",
|
|
135
|
+
message: `${id} is not granted to this runtime token.`,
|
|
136
|
+
checks: [...checks, { source: "token", outcome: "allow_miss" }],
|
|
137
|
+
};
|
|
138
|
+
checks.push({ source: "token", outcome: "allow_match", rule: match.pattern });
|
|
139
|
+
}
|
|
140
|
+
return { allowed: true, checks };
|
|
141
|
+
}
|
|
101
142
|
evaluateConnection(connectionId) {
|
|
102
143
|
if (this.allowedConnections.length === 0) {
|
|
103
144
|
return { allowed: true, checks: [] };
|
|
@@ -136,6 +177,8 @@ export function emptyPolicyRules() {
|
|
|
136
177
|
blockedActions: [],
|
|
137
178
|
allowedProxies: [],
|
|
138
179
|
blockedProxies: [],
|
|
180
|
+
allowedTriggers: [],
|
|
181
|
+
blockedTriggers: [],
|
|
139
182
|
};
|
|
140
183
|
}
|
|
141
184
|
export function parseActionPolicyList(value) {
|
|
@@ -150,6 +193,8 @@ function policyRules(config) {
|
|
|
150
193
|
blockedActions: config.blockedActions ?? [],
|
|
151
194
|
allowedProxies: config.allowedProxies ?? [],
|
|
152
195
|
blockedProxies: config.blockedProxies ?? [],
|
|
196
|
+
allowedTriggers: config.allowedTriggers ?? [],
|
|
197
|
+
blockedTriggers: config.blockedTriggers ?? [],
|
|
153
198
|
});
|
|
154
199
|
}
|
|
155
200
|
function immutablePolicyRules(rules) {
|
|
@@ -158,11 +203,15 @@ function immutablePolicyRules(rules) {
|
|
|
158
203
|
blockedActions: [...rules.blockedActions],
|
|
159
204
|
allowedProxies: [...rules.allowedProxies],
|
|
160
205
|
blockedProxies: [...rules.blockedProxies],
|
|
206
|
+
allowedTriggers: [...(rules.allowedTriggers ?? [])],
|
|
207
|
+
blockedTriggers: [...(rules.blockedTriggers ?? [])],
|
|
161
208
|
};
|
|
162
209
|
Object.freeze(immutable.allowedActions);
|
|
163
210
|
Object.freeze(immutable.blockedActions);
|
|
164
211
|
Object.freeze(immutable.allowedProxies);
|
|
165
212
|
Object.freeze(immutable.blockedProxies);
|
|
213
|
+
Object.freeze(immutable.allowedTriggers);
|
|
214
|
+
Object.freeze(immutable.blockedTriggers);
|
|
166
215
|
return Object.freeze(immutable);
|
|
167
216
|
}
|
|
168
217
|
function compileLayer(source, rules) {
|
|
@@ -172,6 +221,8 @@ function compileLayer(source, rules) {
|
|
|
172
221
|
blockedActions: rules.blockedActions.map(compileActionRule),
|
|
173
222
|
allowedProxies: rules.allowedProxies.map(compileProxyRule),
|
|
174
223
|
blockedProxies: rules.blockedProxies.map(compileProxyRule),
|
|
224
|
+
allowedTriggers: (rules.allowedTriggers ?? []).map(compileActionRule),
|
|
225
|
+
blockedTriggers: (rules.blockedTriggers ?? []).map(compileActionRule),
|
|
175
226
|
};
|
|
176
227
|
}
|
|
177
228
|
function compileActionRule(pattern) {
|
package/src/core/cast.d.ts
CHANGED
|
@@ -100,6 +100,9 @@ export declare function optionalNumber(value: unknown): number | undefined;
|
|
|
100
100
|
/**
|
|
101
101
|
* Return a finite number from a number or numeric string when present. Examples:
|
|
102
102
|
* `optionalNumberLike("1.5") => 1.5`, `optionalNumberLike("x") => undefined`.
|
|
103
|
+
*
|
|
104
|
+
* A blank or whitespace-only string is reported as missing rather than parsed, because
|
|
105
|
+
* `Number(" ")` is `0` and a blank field would otherwise surface as a real zero.
|
|
103
106
|
*/
|
|
104
107
|
export declare function optionalNumberLike(value: unknown): number | undefined;
|
|
105
108
|
/**
|
|
@@ -151,6 +154,16 @@ export declare function pickOptionalInteger(input: Record<string, unknown>, ...k
|
|
|
151
154
|
* `nullableString(1) => undefined`.
|
|
152
155
|
*/
|
|
153
156
|
export declare function nullableString(value: unknown): string | null | undefined;
|
|
157
|
+
/**
|
|
158
|
+
* Return a string exactly as provided, null, or undefined when the value is not a string. Examples:
|
|
159
|
+
* `nullableRawString(null) => null`, `nullableRawString("") => ""`, `nullableRawString(1) => undefined`.
|
|
160
|
+
*/
|
|
161
|
+
export declare function nullableRawString(value: unknown): string | null | undefined;
|
|
162
|
+
/**
|
|
163
|
+
* Return a boolean, null, or undefined when the value is not a boolean. Examples:
|
|
164
|
+
* `nullableBoolean(null) => null`, `nullableBoolean(false) => false`, `nullableBoolean("true") => undefined`.
|
|
165
|
+
*/
|
|
166
|
+
export declare function nullableBoolean(value: unknown): boolean | null | undefined;
|
|
154
167
|
/**
|
|
155
168
|
* Return a string or null when the value is not a string.
|
|
156
169
|
*/
|